# 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 ``` Or you can just run them directly using bats ``` $ sudo bats tests/integration ``` To run a single test bucket: ``` $ make integration TESTPATH="/checkpoint.bats" ``` To run them on your host, you will need to setup a development environment plus [bats](https://github.com/sstephenson/bats#installing-bats-from-source) For example: ``` $ cd ~/go/src/github.com $ git clone https://github.com/sstephenson/bats.git $ cd bats $ ./install.sh /usr/local ``` > **Note**: There are known issues running the integration tests using > **devicemapper** as a storage driver, make sure that your docker daemon > is using **aufs** if you want to successfully run the integration tests. ## Writing integration tests [helper functions] (https://github.com/opencontainers/runc/blob/master/tests/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" { runc run containerid # "The runc macro" automatically populates $status, $output and $lines. # Please refer to bats documentation to find out more. [ "$status" -eq 0 ] # check expected output [[ "${output}" == *"Hello"* ]] } ```