Armazenar secrets com o keystore

O Tradefed inclui o conceito de keystore, em que os secrets podem ser armazenados em um serviço de keystore e solicitados no ambiente de execução do teste para uso durante o teste.

Usar um keystore

Para usar um keystore, primeiro é necessário definir a origem dele na configuração global.

Depois disso, você pode usar as chaves armazenadas por: USE_KEYSTORE@{key}

JSONFileKeyStore

A implementação de exemplo no núcleo do Tradefed usa um keystore JSON, JSONFileKeyStoreClient. Para usar esse keystore, você precisa definir um arquivo de chave JSON com mapeamentos de chave para valor.

Por exemplo, defina um arquivo /path/to/keystore.json como

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

Em seguida, adicione as linhas abaixo ao arquivo de configuração global do TF:

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

Ao executar testes relacionados, agora é possível transmitir valores como USE_KEYSTORE@test_account, que o TF vai consultar o keystore e usar o valor como parte do teste.

Arquivo keystore baseado em host

Para definir pares de chave-valor baseados em host, defina um arquivo /path/to/keystore_ssid.json como

{
  "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"
  }
}

A chave de uma entrada no arquivo é um padrão de expressão regular (regex) para o nome do host, e o valor é o conjunto de pares de chave-valor para qualquer host com um nome de host correspondente.

Em seguida, atualize o arquivo de configuração global do TF para incluir o arquivo de keystore baseado em 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>

O valor de uma chave definida em um arquivo de keystore baseado em host substitui aquele definido no arquivo de keystore especificado com json-key-store-file.

Quando vários arquivos de keystore baseados em host estão presentes no keystore, a ordem é importante. Se o valor de uma chave for definido em vários arquivos, o valor no último arquivo vai substituir o restante.