github.com/zoumo/helm@v2.5.0+incompatible/docs/chart_tests.md (about)

     1  # Chart Tests
     2  
     3  A chart contains a number of Kubernetes resources and components that work together. As a chart author, you may want to write some tests that validate that your chart works as expected when it is installed. These tests also help the chart consumer understand what your chart is supposed to do.
     4  
     5  A **test** in a helm chart lives under the `templates/` directory and is a pod definition that specifies a container with a given command to run. The container should exit successfully (exit 0) for a test to be considered a success. The pod definiton must contain one of the helm test hook annotations: `helm.sh/hooks: test-success` or `helm.sh/hooks: test-failure`.
     6  
     7  Example tests:
     8  - Validate that your configuration from the values.yaml file was properly injected.
     9    - Make sure your username and password work correctly
    10    - Make sure an incorrect username and password does not work
    11  - Assert that your services are up and correctly load balancing
    12  - etc.
    13  
    14  You can run the pre-defined tests in Helm on a release using the command `helm test <RELEASE_NAME>`. For a chart consumer, this is a great way to sanity check that their release of a chart (or application) works as expected.
    15  
    16  ## A Breakdown of the Helm Test Hooks
    17  
    18  In Helm, there are two test hooks: `test-success` and `test-failure`
    19  
    20  `test-success` indicates that test pod should complete successfully. In other words, the containers in the pod should exit 0.
    21  `test-failure` is a way to assert that a test pod should not complete successfully. If the containers in the pod do not exit 0, that indicates success.
    22  
    23  ## Example Test
    24  
    25  Here is an example of a helm test pod definition in an example mariadb chart:
    26  
    27  ```
    28  mariadb/
    29    Chart.yaml
    30    LICENSE
    31    README.md
    32    values.yaml
    33    charts/
    34    templates/
    35    templates/mariadb-tests.yaml
    36  ```
    37  In `wordpress/templates/mariadb-tests.yaml`:
    38  ```
    39  apiVersion: v1
    40  kind: Pod
    41  metadata:
    42    name: "{{.Release.Name}}-credentials-test"
    43    annotations:
    44      "helm.sh/hook": test-success
    45  spec:
    46    containers:
    47      - name: {{.Release.Name}}-credentials-test
    48        image: bitnami/mariadb:{{.Values.imageTag}}
    49        command: ["mysql",  "--host={{.Release.Name}}-mariadb", "--user={{.Values.mariadbUser}}", "--password={{.Values.mariadbPassword}}"]
    50    restartPolicy: Never
    51  ```
    52  
    53  ## Steps to Run a Test Suite on a Release
    54  1. `$ helm install mariadb`
    55  ```
    56  NAME:   quirky-walrus
    57  LAST DEPLOYED: Mon Feb 13 13:50:43 2017
    58  NAMESPACE: default
    59  STATUS: DEPLOYED
    60  ```
    61  
    62  2. `$ helm test quirky-walrus`
    63  ```
    64  RUNNING: quirky-walrus-credentials-test
    65  SUCCESS: quirky-walrus-credentials-test
    66  ```
    67  
    68  ## Notes
    69  - You can define as many tests as you would like in a single yaml file or spread across several yaml files in the `templates/` directory
    70  - You are welcome to nest your test suite under a `tests/` directory like `<chart-name>/templates/tests/` for more isolation