This largely removes references to Docker where possible. The HOWTO guides are still Docker docs and refer to Docker not moby, so the next step is to rework these as Moby docs and put them in `docs/` in this repo. Signed-off-by: Justin Cormack <justin.cormack@docker.com> Upstream-commit: cecd0de3a9f783b34f75ca5e6394b9a0c123999e Component: engine
235 lines
8.0 KiB
Markdown
235 lines
8.0 KiB
Markdown
### Run tests
|
|
|
|
Contributing includes testing your changes. If you change the Moby code, you
|
|
may need to add a new test or modify an existing test. Your contribution could
|
|
even be adding tests to Moby. For this reason, you need to know a little
|
|
about Moby's test infrastructure.
|
|
|
|
This section describes tests you can run in the `dry-run-test` branch of your Docker
|
|
fork. If you have followed along in this guide, you already have this branch.
|
|
If you don't have this branch, you can create it or simply use another of your
|
|
branches.
|
|
|
|
## Understand how to test Moby
|
|
|
|
Moby tests use the Go language's test framework. In this framework, files
|
|
whose names end in `_test.go` contain test code; you'll find test files like
|
|
this throughout the Moby repo. Use these files for inspiration when writing
|
|
your own tests. For information on Go's test framework, see <a
|
|
href="http://golang.org/pkg/testing/" target="_blank">Go's testing package
|
|
documentation</a> and the <a href="http://golang.org/cmd/go/#hdr-Test_packages"
|
|
target="_blank">go test help</a>.
|
|
|
|
You are responsible for _unit testing_ your contribution when you add new or
|
|
change existing Moby code. A unit test is a piece of code that invokes a
|
|
single, small piece of code (_unit of work_) to verify the unit works as
|
|
expected.
|
|
|
|
Depending on your contribution, you may need to add _integration tests_. These
|
|
are tests that combine two or more work units into one component. These work
|
|
units each have unit tests and then, together, integration tests that test the
|
|
interface between the components. The `integration` and `integration-cli`
|
|
directories in the Docker repository contain integration test code.
|
|
|
|
Testing is its own specialty. If you aren't familiar with testing techniques,
|
|
there is a lot of information available to you on the Web. For now, you should
|
|
understand that, the Docker maintainers may ask you to write a new test or
|
|
change an existing one.
|
|
|
|
## Run tests on your local host
|
|
|
|
Before submitting a pull request with a code change, you should run the entire
|
|
Moby Engine test suite. The `Makefile` contains a target for the entire test
|
|
suite, named `test`. Also, it contains several targets for
|
|
testing:
|
|
|
|
| Target | What this target does |
|
|
| ---------------------- | ---------------------------------------------- |
|
|
| `test` | Run the unit, integration, and docker-py tests |
|
|
| `test-unit` | Run just the unit tests |
|
|
| `test-integration-cli` | Run the integration tests for the CLI |
|
|
| `test-docker-py` | Run the tests for the Docker API client |
|
|
|
|
Running the entire test suite on your current repository can take over half an
|
|
hour. To run the test suite, do the following:
|
|
|
|
1. Open a terminal on your local host.
|
|
|
|
2. Change to the root of your Docker repository.
|
|
|
|
```bash
|
|
$ cd moby-fork
|
|
```
|
|
|
|
3. Make sure you are in your development branch.
|
|
|
|
```bash
|
|
$ git checkout dry-run-test
|
|
```
|
|
|
|
4. Run the `make test` command.
|
|
|
|
```bash
|
|
$ make test
|
|
```
|
|
|
|
This command does several things, it creates a container temporarily for
|
|
testing. Inside that container, the `make`:
|
|
|
|
* creates a new binary
|
|
* cross-compiles all the binaries for the various operating systems
|
|
* runs all the tests in the system
|
|
|
|
It can take approximate one hour to run all the tests. The time depends
|
|
on your host performance. The default timeout is 60 minutes, which is
|
|
defined in `hack/make.sh` (`${TIMEOUT:=60m}`). You can modify the timeout
|
|
value on the basis of your host performance. When they complete
|
|
successfully, you see the output concludes with something like this:
|
|
|
|
```none
|
|
Ran 68 tests in 79.135s
|
|
```
|
|
|
|
## Run targets inside a development container
|
|
|
|
If you are working inside a development container, you use the
|
|
`hack/make.sh` script to run tests. The `hack/make.sh` script doesn't
|
|
have a single target that runs all the tests. Instead, you provide a single
|
|
command line with multiple targets that does the same thing.
|
|
|
|
Try this now.
|
|
|
|
1. Open a terminal and change to the `moby-fork` root.
|
|
|
|
2. Start a Moby development image.
|
|
|
|
If you are following along with this guide, you should have a
|
|
`dry-run-test` image.
|
|
|
|
```bash
|
|
$ docker run --privileged --rm -ti -v `pwd`:/go/src/github.com/moby/moby dry-run-test /bin/bash
|
|
```
|
|
|
|
3. Run the tests using the `hack/make.sh` script.
|
|
|
|
```bash
|
|
root@5f8630b873fe:/go/src/github.com/moby/moby# hack/make.sh dynbinary binary cross test-unit test-integration-cli test-docker-py
|
|
```
|
|
|
|
The tests run just as they did within your local host.
|
|
|
|
Of course, you can also run a subset of these targets too. For example, to run
|
|
just the unit tests:
|
|
|
|
```bash
|
|
root@5f8630b873fe:/go/src/github.com/moby/moby# hack/make.sh dynbinary binary cross test-unit
|
|
```
|
|
|
|
Most test targets require that you build these precursor targets first:
|
|
`dynbinary binary cross`
|
|
|
|
|
|
## Run unit tests
|
|
|
|
We use golang standard [testing](https://golang.org/pkg/testing/)
|
|
package or [gocheck](https://labix.org/gocheck) for our unit tests.
|
|
|
|
You can use the `TESTDIRS` environment variable to run unit tests for
|
|
a single package.
|
|
|
|
```bash
|
|
$ TESTDIRS='opts' make test-unit
|
|
```
|
|
|
|
You can also use the `TESTFLAGS` environment variable to run a single test. The
|
|
flag's value is passed as arguments to the `go test` command. For example, from
|
|
your local host you can run the `TestBuild` test with this command:
|
|
|
|
```bash
|
|
$ TESTFLAGS='-test.run ^TestValidateIPAddress$' make test-unit
|
|
```
|
|
|
|
On unit tests, it's better to use `TESTFLAGS` in combination with
|
|
`TESTDIRS` to make it quicker to run a specific test.
|
|
|
|
```bash
|
|
$ TESTDIRS='opts' TESTFLAGS='-test.run ^TestValidateIPAddress$' make test-unit
|
|
```
|
|
|
|
## Run integration tests
|
|
|
|
We use [gocheck](https://labix.org/gocheck) for our integration-cli tests.
|
|
You can use the `TESTFLAGS` environment variable to run a single test. The
|
|
flag's value is passed as arguments to the `go test` command. For example, from
|
|
your local host you can run the `TestBuild` test with this command:
|
|
|
|
```bash
|
|
$ TESTFLAGS='-check.f DockerSuite.TestBuild*' make test-integration-cli
|
|
```
|
|
|
|
To run the same test inside your Docker development container, you do this:
|
|
|
|
```bash
|
|
root@5f8630b873fe:/go/src/github.com/moby/moby# TESTFLAGS='-check.f TestBuild*' hack/make.sh binary test-integration-cli
|
|
```
|
|
|
|
## Test the Windows binary against a Linux daemon
|
|
|
|
This explains how to test the Windows binary on a Windows machine set up as a
|
|
development environment. The tests will be run against a daemon
|
|
running on a remote Linux machine. You'll use **Git Bash** that came with the
|
|
Git for Windows installation. **Git Bash**, just as it sounds, allows you to
|
|
run a Bash terminal on Windows.
|
|
|
|
1. If you don't have one open already, start a Git Bash terminal.
|
|
|
|

|
|
|
|
2. Change to the `moby` source directory.
|
|
|
|
```bash
|
|
$ cd /c/gopath/src/github.com/moby/moby
|
|
```
|
|
|
|
3. Set `DOCKER_REMOTE_DAEMON` as follows:
|
|
|
|
```bash
|
|
$ export DOCKER_REMOTE_DAEMON=1
|
|
```
|
|
|
|
4. Set `DOCKER_TEST_HOST` to the `tcp://IP_ADDRESS:2376` value; substitute your
|
|
Linux machines actual IP address. For example:
|
|
|
|
```bash
|
|
$ export DOCKER_TEST_HOST=tcp://213.124.23.200:2376
|
|
```
|
|
|
|
5. Make the binary and run the tests:
|
|
|
|
```bash
|
|
$ hack/make.sh binary test-integration-cli
|
|
```
|
|
Some tests are skipped on Windows for various reasons. You can see which
|
|
tests were skipped by re-running the make and passing in the
|
|
`TESTFLAGS='-test.v'` value. For example
|
|
|
|
```bash
|
|
$ TESTFLAGS='-test.v' hack/make.sh binary test-integration-cli
|
|
```
|
|
|
|
Should you wish to run a single test such as one with the name
|
|
'TestExample', you can pass in `TESTFLAGS='-check.f TestExample'`. For
|
|
example
|
|
|
|
```bash
|
|
$ TESTFLAGS='-check.f TestExample' hack/make.sh binary test-integration-cli
|
|
```
|
|
|
|
You can now choose to make changes to the Moby source or the tests. If you
|
|
make any changes, just run these commands again.
|
|
|
|
## Where to go next
|
|
|
|
Congratulations, you have successfully completed the basics you need to
|
|
understand the Moby test framework.
|