Skip to content

Infrastructure Adapterの試験 ​

Infrastructure Adapter の試験方法を解説します。

事前準備として、Qmonus Value Stream CLI のインストールに従って、Qmonus Value Stream CLI qvsctlをインストールしてください。
また、本ガイドで紹介するコマンドの詳細は、CLIリファレンスを参照してください。

試験の流れ ​

この試験例では、テストパラメータを与えて Adapter をコンパイルし、これにより生成されたManifestと期待値を示した検査用 Manifest が一致することを確認します。

試験の準備 ​

リポジトリのルートディレクトリ直下に作成した test ディレクトリ配下にテストを格納します。

テストには4つのファイルを準備してください。

  1. QVS Config
  2. パラメータファイル
  3. 検査用 Manifest
  4. テスト定義 以下では、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 言語で作成します。

テスト定義は以下のインターフェース仕様で作成してください。

  1. designpattern_testというパッケージ名のCUEファイルであること。
  2. テストケースは以下のスキーマに従うこと。
  3. テストを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