Skip to content

qvsctl manifest test

Infrastructure Adapter から生成する Application Manifestを試験します。

使い方

qvsctl manifest test

説明

モジュールのルートディレクトリにある test ディレクトリ配下に配置したテストケースを実行し、Adapter から生成する Application Manifest を試験します。

リモートにあるGitリポジトリのadapterをモジュールとして利用する場合は、リポジトリへの接続方法に応じて以下の環境変数を設定してください。

  • HTTPS接続用:GIT_TOKEN
  • SSH接続用:GIT_SSH_KEY_PATH

Warning

これまでGitアクセストークンの指定にはGITHUB_TOKENという環境変数を用いていましたが、こちらは非推奨となります。
HTTPS接続にはGIT_TOKENを使用してください。

// Gitのアクセストークンを環境変数GIT_TOKENに設定
export GIT_TOKEN=ghp_AbCdefghiJklmnopqrStuVwXyz1234567890

// SSH接続用の秘密鍵の絶対パスを環境変数GIT_SSH_KEY_PATHに設定
export GIT_SSH_KEY_PATH=/home/user/.ssh/id_ecdsa

以下は simple という Adapter を試験する際のディレクトリ構成の一例です。

.
├── kubernetes
│   ├── deployment
│   │   └── simple
│   │       └── main.cue
│   └── types.cue
└── test
    ├── simple
    │   ├── qvs.yaml # 試験対象の Adapter を利用する QVS Config
    │   ├── params.json # コンパイル時に利用するパラメータファイル
    │   └── results
    │       └── manifests.yml # コンパイルした結果、生成を期待する Manifest
    └── test.cue # テスト定義ファイル

テスト定義ファイルは、以下の仕様に従ってCUE言語で記述します。

  1. designpattern_testというパッケージ名のCUEファイルであること。
  2. テストケースは以下のスキーマに従うこと。
  3. テストをSKIPしたい場合、setupまたはmainキーで"-"を指定すること。
cue
#TestCase: {
        config: string // QVS Config のファイルパス
        param:  string // Parameter ファイルのファイルパス
        expected: {   
                setup: string // 下位互換のためキーであり、削除予定                   
                main:  string // app/main phase の期待値 Manifest を配置するディレクトリ
        }                                   
}

例えば、テストケースを以下のように定義します。ここで、objectのキー(例ではsimple)がテストケース名に該当します。

simple: {
        config: "./simple/qvs.yaml"
        param:  "./simple/params.json"
        expected: {
                setup: "-"
                main: "./simple/results"
        }
}

コマンド実行時の出力例は以下のとおりです。成功時には"PASS"という文字列を、失敗時には期待値との差分を表示します。

// 成功例
qvsctl manifest test
PASS

// 失敗例
qvsctl manifest test                  
--- FAIL: TestDesignPattern (0.43s)
    --- FAIL: TestDesignPattern/simple/main (0.43s)
        test.go:123: test failed for a command `qvsctl manifest compile -m . -c test/simple/qvs.yaml -p test/simple/params.json`
            Manifest for apps/v1.Deployment/test-namespace/simple-test-app didn't match:
            --- Expected
            +++ Actual
              map[string]interface{}{
                ... // 2 ignored and 3 identical entries
                "spec": map[string]interface{}{
            -           "minReadySeconds": int(600),
            +           "minReadySeconds": int(60),


-test.v オプションを利用することで詳細なメッセージの表示が可能です。

qvsctl manifest test -test.v
=== RUN   TestDesignPattern
=== RUN   TestDesignPattern/simple/setup
    test.go:73: Skipping test case
=== RUN   TestDesignPattern/simple/main
--- PASS: TestDesignPattern (0.64s)
    --- SKIP: TestDesignPattern/simple/setup (0.00s)
    --- PASS: TestDesignPattern/simple/main (0.64s)
PASS

また、-test.runオプションを利用することで特定のテストのみの実行が可能です。その他のオプションについては以下を参照してください。

オプション

-compiler.preserve  テスト時に生成したManifestを削除せずに残します
-log_dir string     指定したディレクトリにログ出力をします
-test.parallel n    最大 n 並列でテストを実行します (Default: 8)
-test.run regexp    正規表現にマッチした test caseのみ実行します
-test.timeout d     期間 d (golang の time.ParseDuration で解析可能な文字列) が過ぎた場合 panic でテストを終了します、0指定で timeout は無効になります (Default: 0)
-test.v             詳細なログを出力