Appearance
Infrastructure Adapterの試験
Infrastructure Adapter の試験方法を解説します。
事前準備として、Qmonus Value Stream CLI のインストールに従って、Qmonus Value Stream CLI qvsctl
をインストールしてください。
また、本ガイドで紹介するコマンドの詳細は、CLIリファレンスを参照してください。
試験の流れ
この試験例では、テストパラメータを与えて Adapter をコンパイルし、これにより生成されたManifestと期待値を示した検査用 Manifest が一致することを確認します。
試験の準備
リポジトリのルートディレクトリ直下に作成した test
ディレクトリ配下にテストを格納します。
テストには4つのファイルを準備してください。
- QVS Config
- パラメータファイル
- 検査用 Manifest
- テスト定義 以下では、
test/local/web
ディレクトリにテストを実装する例を使って解説します。
1) QVS Config
試験対象の Adapter を宣言する QVS Config を作成します。
以下の例では、Infrastructure Adapterの作成もしくは、Kubernetes ManifestからInfrastructure Adapterへの変換で作成した github.com/qmonus/sample-module/local/web
を試験対象として宣言しています。
試験では、modules[*].revision
は利用されませんので、ダミー値を指定します。
- ファイル例:
test/local/web/qvs.yaml
- QVS Config 例:
yaml
params:
- name: k8sNamespace
type: string
- name: imageName
type: string
modules:
- name: github.com/qmonus/sample-module
revision: do-not-care
designPatterns:
- pattern: github.com/qmonus/sample-module/local/web
params:
k8sNamespace: $(params.k8sNamespace)
imageName: $(params.imageName)
2) パラメータファイル
パラメータファイルは、QVS Config と一緒にコンパイルするパラメータを指定する JSON ファイルです。このファイルには、name
と value
を指定したパラメータの配列を記載します。
以下の例では、k8sNamespace
パラメータに test-namespace
、imageName
パラメータに nginx:latest
渡して試験する準備をしています。
- ファイル例:
test/local/web/params.json
- パラメータ例:
json
{
"params": [
{
"name": "k8sNamespace",
"value": "test-namespace"
},
{
"name": "imageName",
"value": "nginx:latest"
}
]
}
3) 検査用 Manifest
生成した Adapter をコンパイルした結果、すなわち 1), 2)で作成した QVS Config と パラメータファイルをコンパイルして出力される期待値としての検査用 Manifest を作成します。
検査用 Manifest はYAML形式で記述します。1つのファイルに---
デリミタを使って複数のYAMLドキュメントで Manifest を宣言できます。また、1つのファイルにまとめずに、複数のファイルを使うこともできます。以下の例では1つのファイルに Manifest をまとめて宣言しています。
- ファイル例:
test/local/web/results/manifests.yaml
- コンテンツ例:
apiVersion: v1
kind: Pod
metadata:
name: sample-pod
namespace: test-namespace
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
4) テスト定義
Adapter を試験するための定義を CUE 言語で作成します。
テスト定義は以下のインターフェース仕様で作成してください。
designpattern_test
というパッケージ名のCUEファイルであること。- テストケースは以下のスキーマに従うこと。
- テストをSKIPしたい場合、
setup
またはmain
キーで"-"
を指定すること。
cue
#TestCase: {
// QVS Config のファイルパス
config: string
// パラメータファイルのファイルパス
param: string
// Directories where you place expected manifests
expected: {
// 下位互換のためキーであり、削除予定
setup: string
// app/main phase の検査用 Manifest を配置するディレクトリ
main: string
}
}
config
キーには 1) QVS Config への相対パスを記載し、param
キーには 2) パラメータファイルへの相対パスを記載し、main
キーには 3) 検査用Manifestを保存したディレクトリへの相対パスを指定してください。
- ファイル例:
test/local/web/test.cue
- 定義例:
cue
package designpattern_test
local: {
config: "./qvs.yaml"
param: "./params.json"
expected: {
setup: "-"
main: "./results"
}
}
試験実行
Adapter リポジトリのルートディレクトリで qvsctl manifest test
コマンドを実行し、Adapter を試験します。 最後にPASS
の文字列が出力されれば成功です。
bash
qvsctl manifest test -test.v
以下の例のように、最後に PASS
の文字列が出力されれば成功です。
bash
=== RUN TestDesignPattern
=== RUN TestDesignPattern/local/setup
test.go:73: Skipping test case
=== RUN TestDesignPattern/local/main
--- PASS: TestDesignPattern (0.05s)
--- SKIP: TestDesignPattern/local/setup (0.00s)
--- PASS: TestDesignPattern/local/main (0.05s)
PASS