Memorizzare i secret con il keystore

Tradefed include il concetto di keystore, in cui i secret possono essere archiviati in un servizio keystore e richiesti in fase di esecuzione del test per essere utilizzati durante il test.

Utilizzare un keystore

Per utilizzare un keystore, devi prima definire l'origine del keystore in tuo globale configurazione.

Una volta fatto, puoi utilizzare le chiavi archiviate tramite: USE_KEYSTORE@{key}

JSONFileKeyStore

L'implementazione di esempio nel core di Tradefed utilizza un keystore JSON, JSONFileKeyStoreClient. Per utilizzare questo keystore, devi definire un file di chiavi JSON con mappature chiave-valore.

Ad esempio, puoi definire un file /path/to/keystore.json come

{
  "test_account": "foo@gmail.com",
  "test_account_pwd": "helloworld",
  "wifi_lab_ssid": "Google_private_AP",
  "wifi_lab_pwd": "secret123",
}

Poi aggiungi le seguenti righe nel file di configurazione globale di TF:

<key_store class="com.android.tradefed.util.keystore.JSONFileKeyStoreFactory">
<option name="json-key-store-file" value="/path/to/keystore.json" />
</key_store>

Quando esegui i test correlati, ora puoi passare i valori come USE_KEYSTORE@test_account, che TF eseguirà una query sul keystore e utilizzerà il suo valore come parte del test.

File keystore basato sull'host

Per definire coppie chiave-valore basate sull'host, puoi definire un file /path/to/keystore_ssid.json come

{
  "host_a.*\\.corp\\.com": {
    "wifi_lab_ssid": "ssid_a",
    "wifi_lab_pwd": "secret_a"
  },
  "host_b.*\\.corp\\.com": {
    "wifi_lab_ssid": "ssid_b",
    "wifi_lab_pwd": "secret_b"
  }
}

La chiave di una voce nel file è un pattern di espressione regolare (regex) per il nome host e il valore è l'insieme di coppie chiave-valore per qualsiasi host con un nome host corrispondente.

Poi aggiorna il file di configurazione globale di TF per includere il file keystore basato sull'host:

<key_store class="com.android.tradefed.util.keystore.JSONFileKeyStoreFactory">
<option name="json-key-store-file" value="/path/to/keystore.json" />
<option name="host-based-key-store-file" value="/path/to/keystore-ssid.json" />
</key_store>

Il valore di una chiave definita in un file keystore basato sull'host sostituisce quello definito nel file keystore specificato con json-key-store-file.

Quando nel keystore sono presenti più file keystore basati sull'host, l'ordine è importante. Se il valore di una chiave è definito in più file, il valore nell'ultimo file sostituisce gli altri.