Armazenar segredos com keystore

Tradefed inclui o conceito de keystore , onde os segredos podem ser armazenados em um serviço de keystore e solicitados no tempo de execução do teste para uso durante o teste.

Usar um armazenamento de chaves

Para usar um keystore, você precisa primeiro definir a origem do keystore em sua configuração global .

Uma vez feito isso, você pode usar as chaves armazenadas via: USE_KEYSTORE@{key}

JSONFileKeyStore

A implementação de amostra no núcleo Tradefed usa um keystore JSON, JSONFileKeyStoreClient . Para usar esse keystore, você definiria um arquivo de chave JSON que possui mapeamentos de chave para valor.

Por exemplo, você pode definir 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, você adicionaria as seguintes linhas em seu 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 você pode passar valores como USE_KEYSTORE@test_account , cujo TF consultará o keystore e usará seu valor como parte do teste.

Arquivo de armazenamento de chave baseado em host

Para definir pares de valor-chave baseados em host, você pode definir 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 chave-valor para qualquer host com um nome de host correspondente.

Em seguida, atualize seu arquivo de configuração global do TF para incluir o arquivo de armazenamento de chaves 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 keystore baseado em host substitui aquele definido no arquivo keystore especificado com json-key-store-file .

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