Newer
Older
<!--
// © University of Southampton IT Innovation Centre, 2017
//
// Copyright in this software belongs to University of Southampton
Stephen C Phillips
committed
// IT Innovation Centre of Gamma House, Enterprise Road,
// Chilworth Science Park, Southampton, SO16 7NS, UK.
//
// This software may not be used, sold, licensed, transferred, copied
// or reproduced in whole or in part in any manner or form or in or
// on any media by any person other than in accordance with the terms
// of the Licence Agreement supplied with the software, or otherwise
// without the prior written consent of the copyright owners.
//
// This software is distributed WITHOUT ANY WARRANTY, without even the
// implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
// PURPOSE, except where stated in the Licence Agreement supplied with
// the software.
//
// Created By : Michael Boniface
// Created Date : 18-12-2017
// Created for Project : FLAME
-->
# FLAME Cross Layer Management and Control
#### Version: 1.0.0
Stephen C Phillips
committed
|Authors|Organisation|
|-|-|
|[Michael Boniface](mailto:mjb@it-innovation.soton.ac.uk)|[University of Southampton, IT Innovation Centre](http://www.it-innovation.soton.ac.uk)|
|[Simon Crowle](mailto:sgc@it-innovation.soton.ac.uk)|[University of Southampton, IT Innovation Centre](http://www.it-innovation.soton.ac.uk)|
### Contents
Stephen C Phillips
committed
Implementation documentation and discussion can be found in the docs directory.
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
MJB
committed
* 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
Stephen C Phillips
committed
* Tests are executed against a set of LXC containers described in `src/test/clmctest/rspec.json`.
MJB
committed
* Tests are executed from the test-runner container on the VM using install python modules
Stephen C Phillips
committed
Create a single VM with LXC installed and configured with lxcbr0 configured for the network 172.40.231.0/24
Stephen C Phillips
committed
```shell
vagrant up
```
Stephen C Phillips
committed
SSH into the VM:
Stephen C Phillips
committed
```shell
vagrant ssh
```
Stephen C Phillips
committed
The containers are controlled using a script called `/vagrant/scripts/test/fixtures.sh`
Stephen C Phillips
committed
```shell
Usage: fixture.sh create|start|stop|destroy [-f config_file] [-r repo_root] [-c container_name|all]
```
Stephen C Phillips
committed
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.
Stephen C Phillips
committed
To create|start|stop|destroy specific services use the `-c` option e.g.
```shell
/vagrant/scripts/test/fixture.sh create -f /vagrant/src/test/clmctest/rspec.json -c clmc-service
Stephen C Phillips
committed
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.
Stephen C Phillips
committed
```shell
REPO_USER=itinnov.flame.integration
REPO_PASS=xxxxxxx
```
Stephen C Phillips
committed
Create all the services needed for integration tests:
Stephen C Phillips
committed
```shell
sudo su
/vagrant/scripts/test/fixture.sh create -f /vagrant/src/test/clmctest/rspec.json -c all
```
Stephen C Phillips
committed
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
Stephen C Phillips
committed
```shell
lxc-attach -n test-runner
```
Stephen C Phillips
committed
Build and install the CLMC test Python module:
Stephen C Phillips
committed
```shell
MJB
committed
cd /vagrant/src/test
python setup.py sdist --dist-dir=../../build
pip3 install /vagrant/build/clmctest-<version>.tar.gz
MJB
committed
```
Stephen C Phillips
committed
The following module is unit tests:
Stephen C Phillips
committed
```shell
MJB
committed
pytest -s --pyargs clmctest.scripts
```
Stephen C Phillips
committed
The following modules are integration tests:
Stephen C Phillips
committed
```shell
MJB
committed
pytest -s --pyargs clmctest.inputs
Stephen C Phillips
committed
pytest -s --pyargs clmctest.monitoring
MJB
committed
```
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
lxc launch ubuntu:18.04 flame-clmc-ci -c security.privileged=true -c security.nesting=true
```
the container is then started and LXD initialised
```
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
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
```
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
MJB
committed
Note that the branch must be "protected" for the secret repo rc variables to be passed to the CI script