この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。

これは未公開の文書です Admission Controller 1.34-dev.

ポリシー作成者向けのテスト

SUSE Security Admission ControllerポリシーはWebAssembly(Wasm)としてコンパイルされた通常のプログラムです。 あらゆる種類のプログラムと同様に、良好なテストカバレッジは重要です。

ポリシー作成者はお気に入りの開発環境を使用できます。 慣れ親しんだツールやテストフレームワークを使用して開発を検証できます。

これらのAdmission Controllerポリシーは、RustGoで書かれた例です。

彼らは開発環境のために標準テストを使用したテストスイートを持っています。

ポリシーはCIパイプラインのためにGitHub Actionsを使用します。

エンドツーエンドテスト

ポリシーを含むWasmバイナリに対して実行されるテストを書くこともできます。 Kubernetesクラスターをデプロイせずにこれを行うには、これらのツールを使用できます:

  • bats: テストを書くためのものであり、その実行を自動化します。

  • kwctl: Admission ControllerのデフォルトCLIツールで、ポリシー関連の操作を支援します。プル、検査、注釈、プッシュ、実行。

`kwctl run`を使用するには、次のものが必要です。

  1. 実行するポリシーのWasmバイナリファイルの参照。 Admission Controllerポリシーは次の場所からロードできます:

    • ローカルファイルシステム(file://

    • HTTP(s)サーバー(https://

    • OCIレジストリ(registry://)。

  2. テストするためのアドミッションリクエストオブジェクト。 それを`--request-path`引数を介して渡すか、stdin`で--request-path`を`-`に設定して渡します。

  3. --settings-json`フラグを介してインラインJSONとしてのランタイム用のポリシー設定。 または、ファイルシステムから--settings-path`を介してロードされたJSONまたはYAMLファイル。

テスト`kwctl`の後、`ValidationResponse`オブジェクトを標準出力に印刷します。

これが、kwctl`を使用して前述のhttps://github.com/kubewarden/ingress-policy[`ingress-policy]のWasmバイナリをテストする方法です:

$ curl https://raw.githubusercontent.com/kubewarden/ingress-policy/v0.1.8/test_data/ingress-wildcard.json 2> /dev/null | \
    kwctl run \
        --settings-json '{"allowPorts": [80], "denyPorts": [3000]}' \
        --request-path - \
        registry://ghcr.io/kubewarden/policies/ingress:v0.1.8 | jq

`kwctl`の事前ビルドされたバイナリをダウンロードできますhttps://github.com/kubewarden/kwctl/releases[こちら]。

`bats`を使用すると、このコマンドを実行し、期待される出力を探すテストを書くことができます。

batsテスト
@test "all is good" {
  run kwctl run \
    --request-path test_data/ingress-wildcard.json \
    --settings-json '{"allowPorts": [80], "denyPorts": [3000]}' \
    ingress-policy.wasm

  # this prints the output when one the checks below fails
  echo "output = ${output}"

  # settings validation passed
  [[ "$output" == *"valid: true"* ]]

  # request accepted
  [[ "$output" == *"allowed: true"* ]]
}

コードをファイル`e2e.bats`に入れることができ、例えば、その後`bats`を呼び出すことができます。

$ bats e2e.bats
 ✓ all is good

1 tests, 0 failures

このセクションには、ポリシーのエンドツーエンドテストの書き方についての詳細があります。