2016-03-15 03:55:05 +08:00
|
|
|
# runc Integration Tests
|
|
|
|
|
|
|
|
Integration tests provide end-to-end testing of runc.
|
|
|
|
|
|
|
|
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](https://github.com/sstephenson/bats) framework.
|
|
|
|
|
|
|
|
## Running integration tests
|
|
|
|
|
|
|
|
The easiest way to run integration tests is with Docker:
|
|
|
|
```
|
|
|
|
$ make integration
|
|
|
|
```
|
|
|
|
Alternatively, you can run integration tests directly on your host through make:
|
|
|
|
```
|
|
|
|
$ sudo make localintegration
|
|
|
|
```
|
2016-05-16 16:21:52 +08:00
|
|
|
Or you can just run them directly using bats
|
2016-03-15 03:55:05 +08:00
|
|
|
```
|
|
|
|
$ sudo bats tests/integration
|
|
|
|
```
|
|
|
|
To run a single test bucket:
|
|
|
|
```
|
2018-07-11 16:50:47 +08:00
|
|
|
$ make integration TESTPATH="/checkpoint.bats"
|
2016-03-15 03:55:05 +08:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
To run them on your host, you will need to setup a development environment plus
|
2016-05-16 16:21:52 +08:00
|
|
|
[bats](https://github.com/sstephenson/bats#installing-bats-from-source)
|
2016-03-15 03:55:05 +08:00
|
|
|
For example:
|
|
|
|
```
|
2016-05-16 16:21:52 +08:00
|
|
|
$ cd ~/go/src/github.com
|
|
|
|
$ git clone https://github.com/sstephenson/bats.git
|
|
|
|
$ cd bats
|
2016-03-15 03:55:05 +08:00
|
|
|
$ ./install.sh /usr/local
|
|
|
|
```
|
2016-05-16 16:21:52 +08:00
|
|
|
|
|
|
|
> **Note**: There are known issues running the integration tests using
|
|
|
|
> **devicemapper** as a storage driver, make sure that your docker daemon
|
2016-03-15 03:55:05 +08:00
|
|
|
> is using **aufs** if you want to successfully run the integration tests.
|
|
|
|
|
|
|
|
## Writing integration tests
|
|
|
|
|
|
|
|
[helper functions]
|
|
|
|
(https://github.com/opencontainers/runc/blob/master/test/integration/helpers.bash)
|
|
|
|
are provided in order to facilitate writing tests.
|
|
|
|
|
|
|
|
```sh
|
|
|
|
#!/usr/bin/env bats
|
|
|
|
|
|
|
|
# This will load the helpers.
|
|
|
|
load helpers
|
|
|
|
|
|
|
|
# setup is called at the beginning of every test.
|
|
|
|
function setup() {
|
|
|
|
# see functions teardown_hello and setup_hello in helpers.bash, used to
|
|
|
|
# create a pristine environment for running your tests
|
|
|
|
teardown_hello
|
|
|
|
setup_hello
|
|
|
|
}
|
|
|
|
|
|
|
|
# teardown is called at the end of every test.
|
|
|
|
function teardown() {
|
|
|
|
teardown_hello
|
|
|
|
}
|
|
|
|
|
|
|
|
@test "this is a simple test" {
|
2016-06-03 13:53:59 +08:00
|
|
|
runc run containerid
|
|
|
|
# "The runc macro" automatically populates $status, $output and $lines.
|
2016-03-15 03:55:05 +08:00
|
|
|
# Please refer to bats documentation to find out more.
|
|
|
|
[ "$status" -eq 0 ]
|
|
|
|
|
|
|
|
# check expected output
|
|
|
|
[[ "${output}" == *"Hello"* ]]
|
|
|
|
}
|
|
|
|
|
|
|
|
```
|