このセクションを理解するには、まず Tradefed @Option をご覧ください。
Tradefed の一般的なオプションでは、テストクラスは XML 設定やコマンドラインから追加情報を取得できます。この機能を使用すると、さらに進んで、必要に応じてこの追加情報を解決できるようになります。
ファイル オプションの例
ファイル @option の例
@Option(name = 'config-file')
private File mConfigFile;
上記は XML 構成を通じて設定できます。
<option name="config-file" value="/tmp/file" />
またはコマンドを使用することもできます。
--config-file /tmp/file
説明
この機能を使用すると、リモートのファイルタイプの @Option をローカル ファイルに解決して、ユーザー側からシームレスに使用できるようになります。
これを行うには、ファイルをリモート スタイル パスで指定する必要があります。次に例を示します。
--config-file gs://bucket/tmp/file
このパスは、保存先の Google Cloud Storage(GCS)バケット内のファイルを指します。Tradefed はリモートパスを参照して、ファイルのローカルへのダウンロードと @Option への割り当てを試行します。これで mConfigFile
変数がローカル バージョンのファイルを指定し、テストで使用できるようになります。
リモート ファイルがなんらかの理由でダウンロードできない場合、Tradefed は ConfigurationException
をスローし、テストの実行を回避します。ファイルが欠落すると、テストのアーティファクトも欠落することになるので、重大な失敗と見なされます。
クエリ パラメータを使用する
URL にクエリ パラメータを追加するには、?
を使用します。たとえば、gs://bucket/path?unzip=true
のように使用します。Key-Value の unzip=true
は IRemoteFileResolver インターフェースの実装で利用可能です。
組み込み動作には次の 2 つがあります。
- unzip:
true
に設定され、ダウンロードしたファイルが zip の場合、一時的な場所に自動的に解凍されます。例:?unzip=true
- optional: デフォルトは
false
です。true
に設定しても解決しなかった場合、例外はスローされず、ファイルは置き換えられません。例:?optional=true
--dynamic-download-args key=value
を使用してグローバル クエリ引数を渡すことができます。これは、呼び出しの際に試行されたすべての動的ダウンロードに Key-Value を渡します。
サポートされているプロトコル
正式にサポートされているプロトコルと、それに対応する形式は次のとおりです。
- Google Cloud Storage、プロトコル:
gs
、形式:gs://<bucket name>/path
- ローカル ファイル、プロトコル:
file
、形式:file:/local/path
- http リンク、プロトコル:
http
、形式:http://url
- https リンク、プロトコル:
https
、形式:https://url
制限事項
現在のところ、@Option の動的解決でサポートされるプロトコルとダウンロードの場所は限られています。@Option の解決は現在、メインの XML Tradefed 構成に対してのみ有効です。
スイートとして実行している場合、現在のモジュール(AndroidTest.xml
)はデフォルトではファイルを解決しません。これは、モジュールが未知の依存関係を生成しないようにするためです。スイートレベルで --enable-module-dynamic-download
を使用するとこの問題をエスケープできますが、互換性テストスイート(CTS)やベンダー テスト スイート(VTS)のようなメジャーなスイートでは有効になりません。
新しいプロトコルを実装する
サポートされているプロトコルは、IRemoteFileResolver インターフェースの Tradefed に実装できます。これにより、getSupportedProtocol
を使用して、ファイルパスで照合されるプロトコルの短いタグが定義されます。たとえば、gs
は Google Cloud Storage プロトコルで使用されます。実装するインターフェースとして推奨されるのは、長期的なメンテナンス インターフェースである #resolveRemoteFiles(RemoteFileResolverArgs)
です。
実装されたプロトコルをハーネス META-INF サービス ファイルに追加すると、サポートを正式に有効化できます。