Testing
Testing Brigade Scripts
Now that we’ve written our brigade.js
scripts, we’re ready to confirm that the
Javascript is correct and functioning as intended. Here we demonstrate the use
of a few utilities we can employ to do so.
Javascript testing with brigtest
brigtest is a testing tool designed
to vet the Javascript portion of a brigade.js
script without actually launching
any containers or requiring a Kubernetes cluster. It can optionally mock
events, Jobs and projects.
Follow the installation instructions
to set brigtest
up on your machine. For these examples, we’ll assume brigtest
is installed and available globally.
Next, let’s create an example brigade.js
file:
const { events, Job } = require("brigadier");
events.on("exec", (e, p) => {
var one = new Job("one", "alpine:3.4");
var two = new Job("two", "alpine:3.4");
one.tasks = ["echo world"];
one.run().then( result => {
two.tasks = ["echo hello " + result.toString()];
two.run().then( result2 => {
console.log(result2.toString())
});
});
})
Now, let’s run it through brigtest
passing -x
to check syntax:
$ brigtest -f brigade.js -x
✨ Done in 0.22s.
This is a great way to first check that the Javascript is properly formatted.
To test our script with a mocked event, we can just drop the -x
and brigtest
will use the default exec
event if not otherwise specified via -e <event>
:
$ brigtest -f brigade.js
done
✨ Done in 0.24s.
Since brigtest doesn’t actually launch the Jobs specified in our script, we don’t see their intended output. To mock these Job outputs and/or supply a non-default config, check out brigtest’s README.md
At this stage, we can be confident that our Javascript is correct and our use of
the brigadier
library is as well. So, we’re all set to integration test.
Integration testing with Brigade Integration Test
Brigade Project Integration Test is a great project that lays the foundation for a way to integration test a Brigade project on a provided Kubernetes cluster. It is currently designed to work with Minikube.
To quickly get started with the project, check out the README.md.
Once your kube context/kubectl
is pointing to a minikube cluster, you can run the default
tests as instructed. This will install a default Brigade server, a default Brigade project
and confirm all is in working order by issuing a brig run
against the Brigade project,
using the brigade.js
that lives at the repo’s root.
We now have a great start for supplying a non-default Brigade project and brigade.js
script for testing. Although supporting these overrides is still to be natively supported
in the tool (as of writing), it’s simply a matter of adjusting a few strings and re-running
the test script to cover our example brigade.js
file above.
In fact, to cover our script above, we can modify the main bats script in this project with an assertion around output.
As we expect to see "hello world"
in the console output after the pipeline finishes,
our new test can look like the following:
@test "run should output 'hello world'" {
run $BRIG_RUN
assert_output --partial "hello world"
}