![]() Snapshot delete/prune tests were only working because the delete command
would report success even when deleting a snapshot that didn't exist,
and the test regex was finding the snapshot name multiple times in
the list output and deleting it twice.
Snapshot restore tests seem to have expected the deployment to be rolled out
immediately, which is not a reasonable expectation.
Signed-off-by: Brad Davidson <brad.davidson@rancher.com>
(cherry picked from commit
|
||
---|---|---|
.. | ||
certrotation | ||
custometcdargs | ||
dualstack | ||
etcdrestore | ||
etcdsnapshot | ||
kubeflags | ||
localstorage | ||
longhorn | ||
secretsencryption | ||
startup | ||
Dockerfile.test | ||
README.md | ||
integration.go | ||
test-runner.sh |
README.md
Integration Tests
Integration tests should be used to test a specific functionality of k3s that exists across multiple Go packages, either via exported function calls, or more often, CLI commands. Integration tests should be used for "black box" testing.
Framework
All integration tests in K3s follow a Behavior Diven Development (BDD) style. Specifically, K3s uses Ginkgo and Gomega to drive the tests.
To generate an initial test, the command ginkgo bootstrap
can be used.
To facilitate K3s CLI testing, see tests/util/cmd.go
helper functions.
Format
All integration tests should be placed under tests/integration/<TEST_NAME>
.
All integration test files should be named: <TEST_NAME>_int_test.go
.
All integration test functions should be named: Test_Integration<TEST_NAME>
.
See the local storage test as an example.
Running
Integration tests can be run with no k3s cluster present, each test will spin up and kill the appropriate k3s server it needs.
Note: Integration tests must be run as root, prefix the commands below with sudo -E env "PATH=$PATH"
if a sudo user.
go test ./tests/integration/... -run Integration
Additionally, to generate JUnit reporting for the tests, the Ginkgo CLI is used
ginkgo --junit-report=result.xml ./tests/integration/...
Integration tests can be run on an existing single-node cluster via compile time flag, tests will skip if the server is not configured correctly.
go test -ldflags "-X 'github.com/k3s-io/k3s/tests/integration.existingServer=True'" ./tests/integration/... -run Integration
Integration tests can also be run via a Sonobuoy plugin on an existing single-node cluster.
./scripts/build-tests-sonobuoy
sudo KUBECONFIG=/etc/rancher/k3s/k3s.yaml sonobuoy run --plugin ./dist/artifacts/k3s-int-tests.yaml
Check the sonobuoy status and retrieve results
sudo KUBECONFIG=/etc/rancher/k3s/k3s.yaml sonobuoy status
sudo KUBECONFIG=/etc/rancher/k3s/k3s.yaml sonobuoy retrieve
sudo KUBECONFIG=/etc/rancher/k3s/k3s.yaml sonobuoy results <TAR_FILE_FROM_RETRIEVE>