# Uji Cepat Brizzi HCE (1x Smoke Test)

Tujuan:
- memastikan APK bisa dipasang,
- service HCE aktif,
- AID terpasang,
- lalu validasi interaksi dasar saat ditempel ke reader Brizzi.

> Path AID di app ini:
> - `F0010203040506`
> - `5A00000301000000`
> - `5A00000303000000`

## 0) Setup environment

```bash
cd /Users/wirabasalamah/Documents/Codex/brizzi-hce
export ANDROID_SDK_ROOT=/opt/android-sdk
export JAVA_HOME=/Library/Java/JavaVirtualMachines/temurin-21.jdk/Contents/Home
```

## 1) Build & install ke device

```bash
"$JAVA_HOME"/bin/java -version >/dev/null 2>&1
./gradlew clean assembleDebug
adb devices -l
adb install -r app/build/outputs/apk/debug/app-debug.apk
```

Kalau install gagal karena versi mismatch:
- pastikan package belum terpasang versi lama: `adb uninstall com.korancrew.brizzi`
- lalu install ulang.

## 2) Pastikan app dan HCE service terpasang

```bash
adb shell pm list packages | rg com.korancrew.brizzi
adb shell dumpsys package com.korancrew.brizzi | rg -n "HostApduService|BrizziHostApduService|permission.BIND_NFC_SERVICE"
```

Jalankan app sekali untuk inisialisasi:

```bash
adb shell am start -n com.korancrew.brizzi/.MainActivity
```

## 3) Verifikasi file konfigurasi AID Service

```bash
adb shell cat /data/data/com.korancrew.brizzi/files/../shared_prefs/app_preferences.xml
```
> Catatan: isi ini tidak selalu menampilkan XML service AID secara langsung karena AID service ada di manifest/resource.  
> Verifikasi cepat AID lewat:

```bash
adb shell cmd package resolve-activity --brief com.korancrew.brizzi/.MainActivity
```

## 4) Siapkan logcat khusus HCE sebelum nempel ke reader

```bash
adb logcat -c
adb logcat | rg -n "BrizziHce|HOST_APDU|processCommandApdu|BrizziHostApduService|BrizziSecurityMetrics"
```

Biarkan logging berjalan.

## 5) Tes interaksi manual dengan reader Brizzi

1. Pastikan Android **sudah unlock** (karena `requireDeviceUnlock="true"`).
2. Nyalakan NFC.
3. Nempelkan device ke reader Brizzi.
4. Pantau logcat:
   - harus ada response terhadap APDU masuk dari `processCommandApdu`.
   - kamu akan melihat event seperti:
     - `ISO_SELECT_OK`
     - `SELECT_AID1 / SELECT_AID3`
     - `AUTH_SUCCESS` (kalau workflow auth dipakai)
     - `GET_BALANCE`, `DEBIT_PREPARED`, `COMMIT_OK`, dll.

Jika perlu lihat ringkasan metrik setelah transaksi:

```bash
adb shell am start -n com.korancrew.brizzi/.MainActivity -a com.korancrew.brizzi.ACTION_DUMP_METRICS
```

## 6) Skenario “minimal berhasil” yang harus terlihat

Urutan sehat ideal:
1. Reader kirim select AID (`AID1`/`AID3`) → app balas sukses (SW `9100`).
2. Pada AID3: key request + auth challenge → balasan valid.
3. `GET_BALANCE` → balasan sesuai saldo.
4. Jika ada debit/credit:
   - command transaksi dipersiapkan,
   - `COMMIT` menyimpan perubahan.

## 7) Skenario gagal yang harus muncul (normal saat kondisi salah)

- Reader kirim debit tanpa auth → `CONDITIONS_NOT_SATISFIED` (`6985`).
- Perintah salah format / malformed → `COMMAND_REJECTED_INVALID_SIZE` di log.
- Akses komando tidak diizinkan tanpa flow yang benar → event `AUTH_DENIED`/`*_DENIED`.

## 8) Reset metrik cepat (untuk pengujian ulang)

```bash
adb shell am start -n com.korancrew.brizzi/.MainActivity -a com.korancrew.brizzi.ACTION_RESET_METRICS
adb shell logcat -c
```

---

## Penilaian akhir (hasil pass/fail)

Pass jika:
- app bisa install dan service aktif,
- logcat menangkap proses APDU saat reader nempel,
- reader melakukan response sesuai flow AID → auth → command,
- tidak terjadi crash setelah beberapa siklus tap.

Fail jika:
- tidak ada satu pun log `BrizziHce` saat transaksi,
- APK tidak menerima command sama sekali saat NFC dipakai,
- response selalu `6FFF`/`6700` secara permanen (kemungkinan AID/routing atau format APDU mismatch).

