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 ファイルです。このファイルには、namevalue を指定したパラメータの配列を記載します。

以下の例では、k8sNamespace パラメータに test-namespaceimageName パラメータに 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