## kyverno test Run tests from directory. ### Synopsis The test command provides a facility to test resources against policies by comparing expected results, declared ahead of time in a test manifest file, to actual results reported by Kyverno. Users provide the path to the folder containing a kyverno-test.yaml file where the location could be on a local filesystem or a remote git repository. ``` kyverno test [flags] kyverno test --git-branch kyverno test --manifest-mutate > kyverno-test.yaml kyverno test --manifest-validate > kyverno-test.yaml ``` ### Examples ``` # Test a git repository containing Kyverno test cases. kyverno test https://github.com/kyverno/policies/pod-security --git-branch main Executing require-non-root-groups... applying 1 policy to 2 resources... │───│─────────────────────────│──────────────────────────│──────────────────────────────────│────────│ │ # │ POLICY │ RULE │ RESOURCE │ RESULT │ │───│─────────────────────────│──────────────────────────│──────────────────────────────────│────────│ │ 1 │ require-non-root-groups │ check-runasgroup │ default/Pod/fs-group0 │ Pass │ │ 2 │ require-non-root-groups │ check-supplementalGroups │ default/Pod/fs-group0 │ Pass │ │ 3 │ require-non-root-groups │ check-fsGroup │ default/Pod/fs-group0 │ Pass │ │ 4 │ require-non-root-groups │ check-supplementalGroups │ default/Pod/supplemental-groups0 │ Pass │ │ 5 │ require-non-root-groups │ check-fsGroup │ default/Pod/supplemental-groups0 │ Pass │ │ 6 │ require-non-root-groups │ check-runasgroup │ default/Pod/supplemental-groups0 │ Pass │ │───│─────────────────────────│──────────────────────────│──────────────────────────────────│────────│ # Test a local folder containing test cases. kyverno test . Executing limit-containers-per-pod... applying 1 policy to 4 resources... │───│──────────────────────────│──────────────────────────────────────│─────────────────────────────│────────│ │ # │ POLICY │ RULE │ RESOURCE │ RESULT │ │───│──────────────────────────│──────────────────────────────────────│─────────────────────────────│────────│ │ 1 │ limit-containers-per-pod │ limit-containers-per-pod-bare │ default/Pod/myapp-pod-1 │ Pass │ │ 2 │ limit-containers-per-pod │ limit-containers-per-pod-bare │ default/Pod/myapp-pod-2 │ Pass │ │ 3 │ limit-containers-per-pod │ limit-containers-per-pod-controllers │ default/Deployment/mydeploy │ Pass │ │ 4 │ limit-containers-per-pod │ limit-containers-per-pod-cronjob │ default/CronJob/mycronjob │ Pass │ │───│──────────────────────────│──────────────────────────────────────│─────────────────────────────│────────│ Test Summary: 4 tests passed and 0 tests failed # Test some specific test cases out of many test cases in a local folder. kyverno test . --test-case-selector "policy=disallow-latest-tag, rule=require-image-tag, resource=test-require-image-tag-pass" Executing test-simple... applying 1 policy to 1 resource... │───│─────────────────────│───────────────────│─────────────────────────────────────────│────────│ │ # │ POLICY │ RULE │ RESOURCE │ RESULT │ │───│─────────────────────│───────────────────│─────────────────────────────────────────│────────│ │ 1 │ disallow-latest-tag │ require-image-tag │ default/Pod/test-require-image-tag-pass │ Pass │ │───│─────────────────────│───────────────────│─────────────────────────────────────────│────────│ Test Summary: 1 tests passed and 0 tests failed **TEST FILE STRUCTURE**: The kyverno-test.yaml has four parts: "policies" --> List of policies which are applied. "resources" --> List of resources on which the policies are applied. "variables" --> Variable file path containing variables referenced in the policy (OPTIONAL). "results" --> List of results expected after applying the policies to the resources. ** TEST FILE FORMAT**: name: policies: - - resources: - - variables: (OPTIONAL) results: - policy: (For Namespaced [Policy] files, format is /) rule: resource: namespace: (OPTIONAL) kind: patchedResource: (For mutate policies/rules only) result: **VARIABLES FILE FORMAT**: policies: - name: rules: - name: # Global variable values values: foo: bar resources: - name: # Resource-specific variable values values: foo: baz - name: values: foo: bin # If policy is matching on Kind/Subresource, then this is required subresources: - subresource: name: kind: group: version: parentResource: name: kind: group: version: **RESULT DESCRIPTIONS**: pass --> The resource is either validated by the policy or, if a mutation, equals the state of the patched resource. fail --> The resource fails validation or the patched resource generated by Kyverno is not equal to the input resource provided by the user. skip --> The rule is not applied. For more information visit https://kyverno.io/docs/kyverno-cli/#test ``` ### Options ``` --detailed-results If set to true, display detailed results --fail-only If set to true, display all the failing test only as output for the test command -f, --file-name string test filename (default "kyverno-test.yaml") -b, --git-branch string test github repository branch -h, --help help for test --registry If set to true, access the image registry using local docker credentials to populate external data --remove-color Remove any color from output -t, --test-case-selector string run some specific test cases by passing a string argument in double quotes to this flag like - "policy=, rule=, resource=