cri-o/test
Ed Santiago b7697672f0 Various test-scaffolding fixes
* Skip some tests if the bridge-custom plugin is
  unavailable. This CNI plugin is not distributed in
  any RPM, it is only available by compiling from a
  side branch in runcom's private github. We can't
  use it in a real integration-test setting.

* Don't use `run()` inside cleanup handlers. It will
  override $status, which is a double whammy:
   - successful cleanup will mask a test failure
   - when a test is `skip()`ed, crictl may fail,
     and $status will indicate failure.

* seccomp test: use existing $SECCOMP_PROFILE instead of
  assuming a path under $CRIO_ROOT

Signed-off-by: Ed Santiago <santiago@redhat.com>
2017-11-06 07:14:33 -07:00
..
bin2img Move to new github.com/sirupsen/logrus. 2017-08-07 11:50:04 -04:00
checkseccomp seccomp: use Prctl() from x/sys/unix 2017-07-18 15:34:23 +02:00
copyimg Move to new github.com/sirupsen/logrus. 2017-08-07 11:50:04 -04:00
hooks Add support for oci-hooks to libkpod 2017-09-05 07:39:31 -04:00
testdata sandbox: Use first class sysctls instead of annotations 2017-11-02 16:07:52 +01:00
apparmor.bats Correct our usage of the bats run helper 2017-10-12 17:54:47 -04:00
cgroups.bats Also refactor setting flags for running kpod 2017-09-29 16:37:07 -04:00
command.bats Report error when arguments given to crio command 2017-10-31 16:15:54 -04:00
ctr.bats Merge pull request #1117 from runcom/setup-cwd 2017-11-04 05:21:26 -07:00
ctr_seccomp.bats Various test-scaffolding fixes 2017-11-06 07:14:33 -07:00
default_mounts.bats container_create: sort mounts before adding them to the spec 2017-10-29 12:31:18 +01:00
helpers.bash Various test-scaffolding fixes 2017-11-06 07:14:33 -07:00
hooks.bats Correct our usage of the bats run helper 2017-10-12 17:54:47 -04:00
image.bats Return image references in ImageStatus() 2017-10-31 10:29:06 -04:00
image_remove.bats Switch to ImageServer.UntagImage in RemoveImage handler 2017-10-31 10:30:18 -04:00
image_volume.bats test: Add a test for image volumes bind mount option 2017-07-14 16:57:38 -07:00
inspect.bats test: Add steps for testing crio client 2017-09-25 11:59:40 -07:00
kpod_create.bats Reviewer comments and suggestions incorporated. 2017-10-31 14:10:47 -05:00
kpod_diff.bats Refactor kpod tests 2017-09-29 16:37:07 -04:00
kpod_export.bats Also refactor setting flags for running kpod 2017-09-29 16:37:07 -04:00
kpod_history.bats Refactor kpod tests 2017-09-29 16:37:07 -04:00
kpod_images.bats Correct our usage of the bats run helper 2017-10-12 17:54:47 -04:00
kpod_inspect.bats Continue switching from libkpod to libpod 2017-10-10 11:22:09 -04:00
kpod_kill.bats kpod_kill.bats: drop redundant variables 2017-10-24 18:17:15 -04:00
kpod_load.bats Update kpod load to add signature-policy (2) 2017-10-13 16:28:15 -04:00
kpod_logs.bats Refactor kpod tests 2017-09-29 16:37:07 -04:00
kpod_mount.bats Also refactor setting flags for running kpod 2017-09-29 16:37:07 -04:00
kpod_pause.bats Correct our usage of the bats run helper 2017-10-12 17:54:47 -04:00
kpod_ps.bats Correct our usage of the bats run helper 2017-10-12 17:54:47 -04:00
kpod_pull.bats Add authfile flag to pull and push 2017-10-24 16:32:09 -04:00
kpod_push.bats Update kpod push test 2017-10-31 10:29:05 -04:00
kpod_rename.bats Correct our usage of the bats run helper 2017-10-12 17:54:47 -04:00
kpod_rm.bats Refactor kpod tests 2017-09-29 16:37:07 -04:00
kpod_run.bats Fix conmon and runc paths for kpod tests 2017-11-01 10:53:52 -05:00
kpod_save.bats Correct our usage of the bats run helper 2017-10-12 17:54:47 -04:00
kpod_stats.bats Refactor kpod tests 2017-09-29 16:37:07 -04:00
kpod_stop.bats Correct our usage of the bats run helper 2017-10-12 17:54:47 -04:00
kpod_tag.bats Continue switching from libkpod to libpod 2017-10-10 11:22:09 -04:00
kpod_version.bats Refactor kpod tests 2017-09-29 16:37:07 -04:00
kpod_wait.bats Correct our usage of the bats run helper 2017-10-12 17:54:47 -04:00
network.bats Various test-scaffolding fixes 2017-11-06 07:14:33 -07:00
pod.bats sandbox: Use first class sysctls instead of annotations 2017-11-02 16:07:52 +01:00
policy.json Add image pull with signature integration test 2017-09-11 13:34:30 +02:00
README.md Fix remnants of ocid -> crio rename 2017-05-15 15:05:58 -07:00
redhat_sigstore.yaml Add image pull with signature integration test 2017-09-11 13:34:30 +02:00
registries.conf libkpod/image/copy.go: Add pull by short-name 2017-09-14 08:33:10 -05:00
restore.bats server: adhere to CRI for sandbox stop/remove 2017-06-15 23:08:30 +02:00
runtimeversion.bats Rename ocid to crio. 2017-05-12 09:56:06 -04:00
selinux.bats sandbox, ctr: SELinux fixes 2017-09-17 22:40:17 +02:00
test_runner.sh add tests skeleton 2016-09-24 00:37:07 +02:00

CRIO Integration Tests

Integration tests provide end-to-end testing of CRIO.

Note that integration tests do not replace unit tests.

As a rule of thumb, code should be tested thoroughly with unit tests. Integration tests on the other hand are meant to test a specific feature end to end.

Integration tests are written in bash using the bats framework.

Running integration tests

Containerized tests

The easiest way to run integration tests is with Docker:

$ make integration

To run a single test bucket:

$ make integration TESTFLAGS="runtimeversion.bats"

On your host

To run the integration tests on your host, you will first need to setup a development environment plus bats For example:

$ cd ~/go/src/github.com
$ git clone https://github.com/sstephenson/bats.git
$ cd bats
$ ./install.sh /usr/local

You will also need to install the CNI plugins as the the default pod test template runs without host networking:

$ go get github.com/containernetworking/cni
$ cd "$GOPATH/src/github.com/containernetworking/cni"
$ git checkout -q d4bbce1865270cd2d2be558d6a23e63d314fe769
$ ./build.sh \
$ mkdir -p /opt/cni/bin \
$ cp bin/* /opt/cni/bin/

Then you can run the tests on your host:

$ sudo make localintegration

To run a single test bucket:

$ make localintegration TESTFLAGS="runtimeversion.bats"

Or you can just run them directly using bats

$ sudo bats test

Runtime selection

Tests on the host will run with runc as the default runtime. However you can select other OCI compatible runtimes by setting the RUNTIME environment variable.

For example one could use the Clear Containers runtime instead of runc:

make localintegration RUNTIME=cc-oci-runtime

Writing integration tests

[Helper functions] (https://github.com/kubernetes-incubator/crio/blob/master/test/helpers.bash) are provided in order to facilitate writing tests.

#!/usr/bin/env bats

# This will load the helpers.
load helpers

# setup is called at the beginning of every test.
function setup() {
}

# teardown is called at the end of every test.
function teardown() {
	cleanup_test
}

@test "crioctl runtimeversion" {
	start_crio
	crioctl runtimeversion
	[ "$status" -eq 0 ]
}