FLAME Cross Layer Management and Control
Version: 1.0.0
About this document
Authors
Authors | Organisation |
---|---|
Michael Boniface | University of Southampton, IT Innovation Centre |
Simon Crowle | University of Southampton, IT Innovation Centre |
Contents
Documentation
Implementation documentation and discussion can be found in the docs directory.
Testing
Testing is implemented using pytest using the following convention:
- The testing environment is Vagrant/Virtualbox for a base VM with LXD is installed for specific containers.
- Tests are written in python using pytest
- Related tests are stored in a python module
src/test/clmctest/<testmodule>
to create a suite of tests. All tests are stored in files test_*.py, there can be many tests per file, and many files per module - Tests are executed against a set of LXC containers described in
src/test/clmctest/rspec.json
. - Tests are executed from the test-runner container on the VM using install python modules
- CI testing is on givry using nested LXD containers
Create VM
Create a single VM with LXC installed and configured with lxcbr0 configured for the network 172.40.231.0/24
vagrant up
SSH into the VM:
vagrant ssh
The containers are controlled using a script called /vagrant/scripts/test/fixtures.sh
Usage: fixture.sh create|start|stop|destroy [-f config_file] [-r repo_root] [-c container_name|all]
The containers created are defined an rspec.json file, there's an example here: /vagrant/src/test/clmctest/rspec.json
. The fixtures.sh
script defaults to look for a rspec.json
in the current directory, you can specify a specific rspec.json
file using the -f
option.
To create|start|stop|destroy specific services use the -c
option e.g.
/vagrant/scripts/test/fixture.sh create -f /vagrant/src/test/clmctest/rspec.json -c clmc-service
reporc
file
Create The installation of several of the services depend on accessing the Nexus binary repository (for the custom Telegraf agent). To do this, a username and password for the repository must be specified in a reporc
file in the user's home directory, e.g.
REPO_USER=itinnov.flame.integration
REPO_PASS=xxxxxxx
Build all services
Create all the services needed for integration tests:
sudo /vagrant/scripts/test/fixture.sh create -f /vagrant/src/test/clmctest/rspec.json -c all
As part of the clmc-service installation, the service's unit tests have been run. The fixture script will fail if any individual service installation fails to install (or fails its tests).
Attach to the test-runner to run the tests
sudo lxc exec test-runner -- bash
Build and install the CLMC test Python module:
cd /opt/clmc/src/test
python3 setup.py sdist --dist-dir=../../build
pip3 install /opt/clmc/build/clmctest-<version>.tar.gz
The following module is unit tests:
pytest -s --pyargs clmctest.scripts
The following modules are integration tests:
pytest -s --pyargs clmctest.inputs
pytest -s --pyargs clmctest.monitoring
CI Testing
A lxd container is setup on givry called flame-clmc-ci
. The container is priviledged and allows for nested containers. The container was created using the following commands.
Note that the container only works on the default
storage pool and not the large storage device pool2
lxc launch ubuntu:18.04 flame-clmc-ci -c security.privileged=true -c security.nesting=true
the container is then started and LXD initialised
lxc exec flame-clmc-ci -- bash
lxd init --auto --storage-backend dir
lxc network create lxcbr0 ipv6.address=none ipv4.address=172.40.231.1/24 ipv4.nat=true
Now configure ip table persistence, this is needed for the fixtures script to work but not for CI
apt update
echo iptables-persistent iptables-persistent/autosave_v4 boolean true | sudo debconf-set-selections
echo iptables-persistent iptables-persistent/autosave_v6 boolean true | sudo debconf-set-selections
apt -y install iptables-persistent
The install git runner file was just copied to the container from a tmp director
lxc file push /home/mjb/dev/flame-clmc/scripts/test/install-git-runner.sh flame-clmc-ci/root/
lxc exec flame-clmc-ci -- chmod 755 ./install-git-runner.sh
lxc exec flame-clmc-ci -- ./install-git-runner.sh
Note that the branch must be "protected" for the secret repo rc variables to be passed to the CI script