Merge pull request #92 from mavenugo/integ_test
Initial bats based integration test infra for testing daemon network configs
This commit is contained in:
commit
69177a73a4
4 changed files with 192 additions and 0 deletions
34
libnetwork/test/integration/README.md
Normal file
34
libnetwork/test/integration/README.md
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
# LibNetwork Integration Tests
|
||||||
|
|
||||||
|
Integration tests provide end-to-end testing of LibNetwork and Drivers.
|
||||||
|
|
||||||
|
While unit tests verify the code is working as expected by relying on mocks and
|
||||||
|
artificially created fixtures, integration tests actually use real docker
|
||||||
|
engines and communicate to it through the CLI.
|
||||||
|
|
||||||
|
Note that integration tests do **not** replace unit tests and Docker is used as a good use-case.
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
## Pre-Requisites
|
||||||
|
|
||||||
|
1. Bats (https://github.com/sstephenson/bats#installing-bats-from-source)
|
||||||
|
2. Docker Machine (https://github.com/docker/machine)
|
||||||
|
3. Virtualbox (as a Docker machine driver)
|
||||||
|
|
||||||
|
## Running integration tests
|
||||||
|
|
||||||
|
* Start by [installing] (https://github.com/sstephenson/bats#installing-bats-from-source) *bats* on your system.
|
||||||
|
* If not done already, [install](https://docs.docker.com/machine/) *docker-machine* into /usr/bin
|
||||||
|
* Make sure Virtualbox is installed as well, which will be used by docker-machine as a driver to launch VMs
|
||||||
|
|
||||||
|
In order to run all integration tests, pass *bats* the test path:
|
||||||
|
```
|
||||||
|
$ bats test/integration/daemon-configs.bats
|
||||||
|
```
|
||||||
|
|
||||||
|
|
104
libnetwork/test/integration/daemon-configs.bats
Normal file
104
libnetwork/test/integration/daemon-configs.bats
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
#!/usr/bin/env bats
|
||||||
|
|
||||||
|
load helpers
|
||||||
|
|
||||||
|
export DRIVER=virtualbox
|
||||||
|
export NAME="bats-$DRIVER-daemon-configs"
|
||||||
|
export MACHINE_STORAGE_PATH=/tmp/machine-bats-daemon-test-$DRIVER
|
||||||
|
# Default memsize is 1024MB and disksize is 20000MB
|
||||||
|
# These values are defined in drivers/virtualbox/virtualbox.go
|
||||||
|
export DEFAULT_MEMSIZE=1024
|
||||||
|
export DEFAULT_DISKSIZE=20000
|
||||||
|
export CUSTOM_MEMSIZE=1536
|
||||||
|
export CUSTOM_DISKSIZE=10000
|
||||||
|
export CUSTOM_CPUCOUNT=1
|
||||||
|
export BAD_URL="http://dev.null:9111/bad.iso"
|
||||||
|
|
||||||
|
function setup() {
|
||||||
|
# add sleep because vbox; ugh
|
||||||
|
sleep 1
|
||||||
|
}
|
||||||
|
|
||||||
|
findDiskSize() {
|
||||||
|
# SATA-0-0 is usually the boot2disk.iso image
|
||||||
|
# We assume that SATA 1-0 is root disk VMDK and grab this UUID
|
||||||
|
# e.g. "SATA-ImageUUID-1-0"="fb5f33a7-e4e3-4cb9-877c-f9415ae2adea"
|
||||||
|
# TODO(slashk): does this work on Windows ?
|
||||||
|
run bash -c "VBoxManage showvminfo --machinereadable $NAME | grep SATA-ImageUUID-1-0 | cut -d'=' -f2"
|
||||||
|
run bash -c "VBoxManage showhdinfo $output | grep "Capacity:" | awk -F' ' '{ print $2 }'"
|
||||||
|
}
|
||||||
|
|
||||||
|
findMemorySize() {
|
||||||
|
run bash -c "VBoxManage showvminfo --machinereadable $NAME | grep memory= | cut -d'=' -f2"
|
||||||
|
}
|
||||||
|
|
||||||
|
findCPUCount() {
|
||||||
|
run bash -c "VBoxManage showvminfo --machinereadable $NAME | grep cpus= | cut -d'=' -f2"
|
||||||
|
}
|
||||||
|
|
||||||
|
buildMachineWithOldIsoCheckUpgrade() {
|
||||||
|
run wget https://github.com/boot2docker/boot2docker/releases/download/v1.4.1/boot2docker.iso -O $MACHINE_STORAGE_PATH/cache/boot2docker.iso
|
||||||
|
run machine create -d virtualbox $NAME
|
||||||
|
run machine upgrade $NAME
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "$DRIVER: machine should not exist" {
|
||||||
|
run machine active $NAME
|
||||||
|
[ "$status" -eq 1 ]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "$DRIVER: VM should not exist" {
|
||||||
|
run VBoxManage showvminfo $NAME
|
||||||
|
[ "$status" -eq 1 ]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "$DRIVER: create" {
|
||||||
|
run machine create -d $DRIVER $NAME
|
||||||
|
[ "$status" -eq 0 ]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "$DRIVER: active" {
|
||||||
|
run machine active $NAME
|
||||||
|
[ "$status" -eq 0 ]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "$DRIVER: check default machine memory size" {
|
||||||
|
findMemorySize
|
||||||
|
[[ ${output} == "${DEFAULT_MEMSIZE}" ]]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "$DRIVER: check default machine disksize" {
|
||||||
|
findDiskSize
|
||||||
|
[[ ${output} == *"$DEFAULT_DISKSIZE"* ]]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "$DRIVER: test bridge-ip" {
|
||||||
|
run machine ssh $NAME sudo /etc/init.d/docker stop
|
||||||
|
run machine ssh $NAME sudo ifconfig docker0 down
|
||||||
|
run machine ssh $NAME sudo ip link delete docker0
|
||||||
|
BIP='--bip=172.168.45.1/24'
|
||||||
|
set_extra_config $BIP
|
||||||
|
cat ${TMP_EXTRA_ARGS_FILE} | machine ssh $NAME sudo tee /var/lib/boot2docker/profile
|
||||||
|
cat ${DAEMON_CFG_FILE} | machine ssh $NAME "sudo tee -a /var/lib/boot2docker/profile"
|
||||||
|
run machine ssh $NAME sudo /etc/init.d/docker start
|
||||||
|
run machine ssh $NAME ifconfig docker0
|
||||||
|
[ "$status" -eq 0 ]
|
||||||
|
[[ ${lines[1]} =~ "172.168.45.1" ]]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "$DRIVER: run busybox container" {
|
||||||
|
run machine ssh $NAME sudo cat /var/lib/boot2docker/profile
|
||||||
|
run docker $(machine config $NAME) run busybox echo hello world
|
||||||
|
[ "$status" -eq 0 ]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "$DRIVER: remove machine" {
|
||||||
|
run machine rm -f $NAME
|
||||||
|
}
|
||||||
|
|
||||||
|
# Cleanup of machine store should always be the last 'test'
|
||||||
|
@test "$DRIVER: cleanup" {
|
||||||
|
run rm -rf $MACHINE_STORAGE_PATH
|
||||||
|
[ "$status" -eq 0 ]
|
||||||
|
}
|
||||||
|
|
4
libnetwork/test/integration/daemon.cfg
Normal file
4
libnetwork/test/integration/daemon.cfg
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
CACERT=/var/lib/boot2docker/ca.pem
|
||||||
|
SERVERCERT=/var/lib/boot2docker/server-key.pem
|
||||||
|
SERVERKEY=/var/lib/boot2docker/server.pem
|
||||||
|
DOCKER_TLS=no
|
50
libnetwork/test/integration/helpers.bash
Normal file
50
libnetwork/test/integration/helpers.bash
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Root directory of the repository.
|
||||||
|
MACHINE_ROOT=/usr/bin
|
||||||
|
|
||||||
|
PLATFORM=`uname -s | tr '[:upper:]' '[:lower:]'`
|
||||||
|
ARCH=`uname -m`
|
||||||
|
|
||||||
|
if [ "$ARCH" = "x86_64" ]; then
|
||||||
|
ARCH="amd64"
|
||||||
|
else
|
||||||
|
ARCH="386"
|
||||||
|
fi
|
||||||
|
MACHINE_BIN_NAME=docker-machine_$PLATFORM-$ARCH
|
||||||
|
BATS_LOG=/tmp/bats.log
|
||||||
|
|
||||||
|
touch ${BATS_LOG}
|
||||||
|
rm ${BATS_LOG}
|
||||||
|
|
||||||
|
teardown() {
|
||||||
|
echo "$BATS_TEST_NAME
|
||||||
|
----------
|
||||||
|
$output
|
||||||
|
----------
|
||||||
|
|
||||||
|
" >> ${BATS_LOG}
|
||||||
|
}
|
||||||
|
|
||||||
|
EXTRA_ARGS_CFG='EXTRA_ARGS'
|
||||||
|
EXTRA_ARGS='--tlsverify --tlscacert=/var/lib/boot2docker/ca.pem --tlskey=/var/lib/boot2docker/server-key.pem --tlscert=/var/lib/boot2docker/server.pem --label=provider=virtualbox -H tcp://0.0.0.0:2376'
|
||||||
|
TMP_EXTRA_ARGS_FILE=/tmp/tmp_extra_args
|
||||||
|
DAEMON_CFG_FILE=${BATS_TEST_DIRNAME}/daemon.cfg
|
||||||
|
set_extra_config() {
|
||||||
|
if [ -f ${TMP_EXTRA_ARGS_FILE} ];
|
||||||
|
then
|
||||||
|
rm ${TMP_EXTRA_ARGS_FILE}
|
||||||
|
fi
|
||||||
|
echo -n "${EXTRA_ARGS_CFG}='" > ${TMP_EXTRA_ARGS_FILE}
|
||||||
|
echo -n "$1 " >> ${TMP_EXTRA_ARGS_FILE}
|
||||||
|
echo "${EXTRA_ARGS}'" >> ${TMP_EXTRA_ARGS_FILE}
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ ! -e $MACHINE_ROOT/$MACHINE_BIN_NAME ]; then
|
||||||
|
echo "${MACHINE_ROOT}/${MACHINE_BIN_NAME} not found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
function machine() {
|
||||||
|
${MACHINE_ROOT}/$MACHINE_BIN_NAME "$@"
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue