Simple framework for testing Kubernetes operators
A test
consists of a number of steps
.
Each step
can have a watch
list, specifying resources to watch for
by group, version and kind as well as label and field selectors.
All resources matching the specifications are stored in a bucket under the name
of this watch
entry.
The later tests will consist of conditions that have to hold true for the contents of a bucket.
Each step
can have a bucket
list, allowing to set the operations on a bucket.
Operations are Create
, Patch
, Delete
.
If a watch
sees a new resource and its bucket allows Create
,
the resource is stored in the bucket.
If a watch
sees a changed resource and its bucket allows Patch
,
the resource stored is updated.
If a watch
sees a resource deletion and its bucket allows Delete
,
the resource stored is removed from the bucket.
You can, for example, collect all Pods matching some label in one step,
then set the bucket to Delete
only in the next step.
If the Pods are restarted now, they disappear from the bucket,
but the newly started ones do not appear.
Each step
can have an apply
list specifying files containing manifests to apply to the cluster.
Each step
can have a delete
list specifying files containing manifests to delete from the cluster.
Each step
can have a sleep
value specifying a number of seconds to wait unconditionally after all apply
s and delete
s.
Each step
can have a wait
list specifying condition
s to await in a target
ed bucket of watched resources.
For examples, please see the tests in test/
.
cargo run --bin blackjack TEST-DIR
All tests have to be named test.yaml
.
Blackjack will discover all test.yaml
in the directory tree starting at TEST-DIR
.
All files specified in the apply
sections have to be relative to the directory where the corresponding test.yaml
resides.
All test found will be run in parallel.
For each test, blackjack will override all namespaces of the resources it applies with a randomly generated namespace.
For each test, blackjack will clean up all resources it has applied after the tests are finished.
An expression can be not
specifying an expression negated by logical NOT.
An expression can be and
specifying an array of expressions connected by logical AND.
An expression can be or
specifying an array of expressions connected by logical OR.
An expression can be size
specifying the expected number of resources recorded in the target
bucket.
An expression can be all
specifying a partial object that needs to match against all resources recorded in the target
bucket.
An expression can be one
specifying a partial object that needs to match against at least one resources recorded in the target
bucket.
The schema can be found in schema/test_spec.yaml
.