We use greenbay
tests to verify that build images in Evergreen, our Continuous Integration system, are
configured as we expect. The greenbay
tool (API documentation) reads a configuration
file and executes the tests it describes.
go get github.com/mongodb/greenbay cd $GOPATH/src/github.com/mongodb/greenbay make greenbay
A test must include a name, a list of suites to run, a test type, and some args. For example, this verifies that pip is installed:
tests: - name: pip_installed suites: - archlinux type: shell-operation args: command: "pip --version"
Save this as test.yaml
, and run it by referring to either the test or the
suite.
greenbay run --conf test.yaml --test pip_installed greenbay run --conf test.yaml --suite archlinux
You can pass --test
or --suite
multiple times. The --suite
argument is useful for bundling tests together. If you don't pass either
--test
or --suite
, greenbay
will run the "all" suite.
Every command must succeed:
- name: command_test suites: - all type: command-group-all args: commands: - command: "run this command" - command: "and also this command" - command: "all should exit 0"
Check if a package is installed with dpkg:
- name: dpkg_test suites: - all type: dpkg-installed args: package: package-name
Check if a file exists:
- name: file_test suites: - all type: file-exists args: name: "/path/to/file"
Run a bash script:
- name: bash_test suites: - all type: run-bash-script args: source: | # some bash to run output: "foo"
Run a python script:
- name: python_test suites: - all type: run-program-system-python args: source: | print("howdy") output: "howdy"
Run a single command:
- name: pip_test suites: - all type: shell-operation args: command: "pip --version"
At least one of the yum packages must be installed:
- name: yum_group_test suites: - all type: yum-group-any args: packages: - glibc-devel.i386 - glibc-devel.i686
Check if a package is installed with yum:
- name: yum_test suites: - all type: yum-installed args: package: package-name
You can list all greenbay
test types with the following command:
greenbay list
This will output a list of tests like this one:
address-size brew-group-all brew-group-any brew-group-none brew-group-one brew-installed brew-not-installed command-group-all command-group-any command-group-none command-group-one compile-and-run-gcc-auto compile-and-run-gcc-system compile-and-run-go-auto compile-and-run-opt-go-default compile-and-run-toolchain-gccgo-v2 compile-and-run-toolchain-v0 compile-and-run-toolchain-v1 compile-and-run-toolchain-v2 compile-and-run-user-local-go compile-and-run-usr-local-go compile-and-run-visual-studio compile-gcc-auto compile-gcc-system compile-go-auto compile-opt-go-default compile-toolchain-gccgo-v2 compile-toolchain-v0 compile-toolchain-v1 compile-toolchain-v2 compile-user-local-go compile-usr-local-go compile-visual-studio dpkg-group-all dpkg-group-any dpkg-group-none dpkg-group-one dpkg-installed dpkg-not-installed file-does-not-exist file-exists file-group-all file-group-any file-group-none file-group-one gem-group-all gem-group-any gem-group-none gem-group-one gem-installed gem-not-installed irp-stack-size lxc-containers-configured open-files pacman-group-all pacman-group-any pacman-group-none pacman-group-one pacman-installed pacman-not-installed pip-group-all pip-group-any pip-group-none pip-group-one pip-installed pip-not-installed python-module-version run-bash-script run-bash-script-succeeds run-dash-script run-dash-script-succeeds run-program-gcc-auto run-program-gcc-system run-program-go-auto run-program-opt-go-default run-program-python-auto run-program-system-python run-program-system-python2 run-program-system-python3 run-program-toolchain-gccgo-v2 run-program-toolchain-v0 run-program-toolchain-v1 run-program-toolchain-v2 run-program-user-local-go run-program-usr-bin-pypy run-program-usr-local-go run-program-usr-local-python run-program-visual-studio run-sh-script run-sh-script-succeeds run-zsh-script run-zsh-script-succeeds shell-operation shell-operation-error yum-group-all yum-group-any yum-group-none yum-group-one yum-installed yum-not-installed