Merge pull request #290 from CanonicalLtd/mwhudson/test-in-lxd

move to running tests in lxd rather than docker
This commit is contained in:
Michael Hudson-Doyle 2018-02-28 13:48:18 +13:00 committed by GitHub
commit c7537d90ba
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 58 additions and 18 deletions

View File

@ -1,27 +1,11 @@
sudo: required sudo: required
services:
- docker
env: env:
- IMAGE=ubuntu:xenial - IMAGE=ubuntu:xenial
- IMAGE=ubuntu:artful - IMAGE=ubuntu:artful
- IMAGE=ubuntu:bionic - IMAGE=ubuntu-daily:bionic
language: bash language: bash
# Travis still doesn't support anything newer than trusty so we pull
# docker tricks to run things on Xenial. Maybe we should run things on
# bionic or whatever as well but this is a start...
before_install:
- docker pull $IMAGE
- cid=`docker run --tty --detach --workdir /subiquity -v $(pwd):/subiquity $IMAGE`
- docker exec $cid apt-get update
- docker exec $cid apt-get -y dist-upgrade
- docker exec $cid apt-get install -y --no-install-recommends libnl-3-dev libnl-genl-3-dev libnl-route-3-dev libsystemd-dev python3-distutils-extra pkg-config python3.5 python3-pip git lsb-release python3-setuptools gcc python3-dev python3-wheel curtin
- docker exec $cid pip3 install -r requirements.txt
- docker exec $cid python3 setup.py build
script: script:
- docker exec $cid python3 -m unittest discover - sudo ./scripts/test-in-lxd.sh $IMAGE
- docker exec $cid timeout 60 sh -c 'LANG=C.UTF-8 PYTHONPATH=. python3 bin/subiquity-tui --dry-run --answers examples/answers.yaml --dry-run --machine-config examples/mwhudson.json'

11
scripts/runtests.sh Executable file
View File

@ -0,0 +1,11 @@
#!/bin/bash
set -eux
apt-get update
apt-get -y dist-upgrade
apt-get install -y --no-install-recommends libnl-3-dev libnl-genl-3-dev libnl-route-3-dev libsystemd-dev python3-distutils-extra pkg-config python3.5 python3-pip git lsb-release python3-setuptools gcc python3-dev python3-wheel curtin
pip3 install -r requirements.txt
python3 setup.py build
python3 -m unittest discover
# The --foreground is important to avoid subiquity getting SIGTTOU-ed.
timeout --foreground 60 sh -c 'LANG=C.UTF-8 PYTHONPATH=. python3 bin/subiquity-tui --answers examples/answers.yaml --dry-run --machine-config examples/mwhudson.json'

45
scripts/test-in-lxd.sh Executable file
View File

@ -0,0 +1,45 @@
#!/bin/bash
set -eux
IMAGE=$1
apt-get -qq update
apt -t trusty-backports install -y lxd
sed -i 's/LXD_IPV4_ADDR=".*"/LXD_IPV4_ADDR="192.168.123.1"/' /etc/default/lxd-bridge
sed -i 's/LXD_IPV4_NETMASK=".*"/LXD_IPV4_NETMASK="255.255.255.0"/' /etc/default/lxd-bridge
sed -i 's/LXD_IPV4_NETWORK=".*"/LXD_IPV4_NETWORK="192.168.123.0\/24"/' /etc/default/lxd-bridge
sed -i 's/LXD_IPV4_DHCP_RANGE=".*"/LXD_IPV4_DHCP_RANGE="192.168.123.2,192.168.123.12"/' /etc/default/lxd-bridge
sed -i 's/LXD_IPV4_DHCP_MAX=".*"/LXD_IPV4_DHCP_MAX="10"/' /etc/default/lxd-bridge
sed -i 's/LXD_IPV6_PROXY=".*"/LXD_IPV6_PROXY="false"/' /etc/default/lxd-bridge
lxd init --auto
service lxd restart
lxc launch $IMAGE tester -c security.privileged=true
lxc config device add tester code disk source=`pwd` path=/subiquity
attempts=0
while ! lxc file pull tester/etc/resolv.conf - 2> /dev/null | grep -q ^nameserver; do
sleep 1
attempts=$((attempts+1))
if [ $attempts -gt 30 ]; then
lxc file pull tester/etc/resolv.conf
lxc exec tester -- ps aux
echo "Network failed to come up after 30 seconds"
exit 1
fi
done
if ! lxc file pull tester/etc/resolv.conf - 2> /dev/null | grep ^nameserver | grep -qv 127.0.0.53
then
echo "systemd-resolved"
while ! lxc file pull tester/run/systemd/resolve/resolv.conf - 2> /dev/null | grep -v fe80 | grep -q ^nameserver; do
sleep 1
attempts=$((attempts+1))
if [ $attempts -gt 30 ]; then
echo "Network failed to come up after 30 seconds"
exit 1
fi
done
fi
lxc exec tester -- sh -c "cd /subiquity && ./scripts/runtests.sh"