Testing¶
OpenDCRE is well-tested with hundreds of test cases that can be run. OpenDCRE tests must be run from the source
code (see Getting OpenDCRE). All of the tests can be found under the opendcre_southbound/tests
directory.
- OpenDCRE tests are made up of four somewhat distinct parts:
- The test runner
- The test configuration
- The test suite
- The test cases
Test Runner¶
In opendcre_southbound/tests
, there is a Makefile – this is the test runner. The Makefile contains recipes
to run all of the tests OpenDCRE has. Tests can be run at a suite-level, or in groups of suites (e.g. all tests, tests
for a given devicebus type, etc). Running all OpenDCRE tests is as simple as
make test-x64
Testing for only a single devicebus type can be done by adding the device type suffix, e.g. for PLC
make test-x64-plc
for IPMI
make test-x64-ipmi
and for Redfish
make test-x64-redfish
See the Makefile for more recipes and more information about how to run the tests.
Test Configuration¶
Each test in OpenDCRE is run out of a Docker container – fitting, since OpenDCRE runs out of a Docker container. This
gives us an easy and uniform way to do unit testing and integration testing. The tests are orchestrated using
docker-compose, and as such, each test suite will need to have its own compose file configuration. These compose files
can be found in the opendcre_southbound/tests/_composefiles
directory. Below is an example composefile configuration,
followed by a brief explanation.
test-container-x64:
container_name: test-container-x64
build: ../../../..
dockerfile: dockerfile/Dockerfile.x64
command: bash -c "sleep 15 && python ./opendcre_southbound/tests/test-plc-endpoints.py"
links:
- opendcre-southbound-test-container
opendcre-southbound-test-container:
build: ../../../..
dockerfile: dockerfile/Dockerfile.x64
command: ./start_opendcre_plc_emulator.sh ./opendcre_southbound/emulator/plc/data/test_bus.json
expose:
- 5000
volumes:
- ../../data/plc_override_config.json:/opendcre/override/config.json
environment:
- VAPOR_DEBUG=true
In the example above, we are performing an integration test on the OpenDCRE REST API with PLC backing (via the PLC emulator). In it, we have two containers that will run, “test-container-x64”, the container that will run the actual test suite, and “opendcre-southbound-test-container”, the OpenDCRE instance running with the PLC emulator backing.
Note
All containers which run the actual test cases should be named “test-container-x64”, since this name is used in the Makefile runner to attach to that container, allowing us to see the test results in the console.
Both test container and OpenDCRE container are built from the same Dockerfile - this is just for convenience since all of the test dependencies already exist in the OpenDCRE image.
The test container runs a test suite after a sleep. Not all tests need a sleep period, but they are often included to allow OpenDCRE to come up and fully configure before the tests start running against it.
Finally, we set the VAPOR_DEBUG
environment variable to true
- this enables debug logging in OpenDCRE. This
isn’t necessary, but if a test does fail, it makes it eaiser to find the root of the failure.
Test Suite¶
As seen above in the compose file, the test suite is defined in the opendcre_southbound/tests
directory. In the same
directory, there should be a subdirectory with a name corresponding to the name of the python file that is the test suite.
The subdirectory contains the test cases which make up the suite. The suite acts only to aggregate and run the test
cases.
Test Cases¶
The test cases are the actual test code that is run. It uses Python’s unittest package to define the tests in the test cases. As mentioned in the previous section, these are aggregated into a suite for running, so the test cases need not be contained to a single file, and are in fact often broken up into multiple files for clarity and organization.