Skip to content

qvsctl pipeline test

CI/CD Adapter から生成する Pipeline Manifest を試験します。

使い方

qvsctl pipeline test

説明

モジュールのルートディレクトリにある test ディレクトリ配下に配置したテストケースを実行し、Adapter から生成する Pipeline 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 を試験する際のディレクトリ構成の一例です。

.
├── pipeline
│   └── deploy
│       └── simple.cue
└── test
    └── pipeline
        └── deploy
            ├── simple
            │   ├── qvs.yaml # 試験対象の Adapter を利用する QVS Config
            │   └── results
            │       └── simple.yml # コンパイルした結果、生成を期待する Manifest
            └── test.cue # テスト定義ファイル

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

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

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

simple: {
        config: "./simple/qvs.yaml"
        expected: {
                pipeline: "./simple/results"
        }
}

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

// 成功例
qvsctl pipeline test
PASS

// 失敗例
qvsctl pipeline test
--- FAIL: TestDesignPattern (1.96s)
    --- FAIL: TestDesignPattern/pipelineDeploySimple/pipeline (1.96s)
        test.go:103: test failed for a command `qvsctl pipeline compile -m . -c test/pipeline/deploy/simple/qvs.yaml`
            Manifest for tekton.dev/v1beta1.Pipeline//deploy didn't match:
            --- Expected
            +++ Actual
              map[string]interface{}{



            -                           "name":       string(Inverse(multiline, string("checkouts"))),
            +                           "name":       string(Inverse(multiline, string("checkout"))),



FAIL

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

qvsctl manifest test -test.v
=== RUN   TestDesignPattern
=== RUN   TestDesignPattern/pipelineDeploySimple/pipeline
--- PASS: TestDesignPattern (2.03s)
    --- PASS: TestDesignPattern/pipelineDeploySimple/pipeline (2.03s)
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             詳細なログを出力