cri-o/test
Antonio Murdaca b4251aebd8
execsync: rewrite to fix a bug in conmon
conmon has many flags that are parsed when it's executed, one of them
is "-c". During PR #510 where we vendor latest kube master code,
upstream has changed a test to call a "ctr execsync" with a command of
"sh -c commmand ...".
Turns out:

a) conmon has a "-c" flag which refers to the container name/id
b) the exec command has a "-c" flags but it's for "sh"

That leads to conmon parsing the second "-c" flags from the exec
command causing an error. The executed command looks like:

conmon -c [..other flags..] CONTAINERID -e sh -c echo hello world

This patch rewrites the exec sync code to not pass down to conmon the
exec command via command line. Rather, we're now creating an OCI runtime
process spec in a temp file, pass _the path_ down to conmon, and have
runc exec the command using "runc exec --process
/path/to/process-spec.json CONTAINERID". This is far better in which we
don't need to bother anymore about conflicts with flags in conmon.

Added and fixed some tests also.

Signed-off-by: Antonio Murdaca <runcom@redhat.com>
2017-05-25 22:36:33 +02:00
..
bin2img vendor: upgrade containers/storage 2017-05-17 22:18:07 +02:00
checkseccomp build: create a local GOPATH if none specified 2017-03-30 15:01:22 -05:00
copyimg vendor: upgrade containers/storage 2017-05-17 22:18:07 +02:00
testdata test: add CGROUP_MANAGER env to switch to systemd 2017-05-18 17:39:49 +02:00
apparmor.bats Fix remnants of ocid -> crio rename 2017-05-15 15:05:58 -07:00
ctr.bats execsync: rewrite to fix a bug in conmon 2017-05-25 22:36:33 +02:00
helpers.bash execsync: rewrite to fix a bug in conmon 2017-05-25 22:36:33 +02:00
image.bats server: container_status: we should return digested references in imageRef 2017-05-22 16:37:46 +02:00
network.bats Rename ocid to crio. 2017-05-12 09:56:06 -04:00
plugin_test_args.bash sandbox: pass correct pod Namespace/Name to network plugins and fix id/name ordering 2017-05-05 23:55:37 -05:00
pod.bats server: sandbox_stop: ignore not found sandboxes 2017-05-22 16:37:39 +02:00
policy.json Integrate containers/storage 2017-01-18 10:23:30 -05:00
README.md Fix remnants of ocid -> crio rename 2017-05-15 15:05:58 -07:00
restore.bats test: fix restore test 2017-05-18 21:19:53 +02:00
runtimeversion.bats Rename ocid to crio. 2017-05-12 09:56:06 -04:00
seccomp.bats test: fix typo 2017-05-18 17:47:43 +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 ]
}