## Unit & Integration Tests with GTest A series of unit tests test the implemented business logic of the controller. For the http client that wraps libcurl, integration tests can be used to test succesful communication with the device. ### Requirements for unit/integration tests The GTest unit tests require GTest. This can be installed via ```bash apt install libgtest-dev ``` ### Build Build the module with the flag `LEMDCBM_BUILD_TESTS:BOOL=ON`, e.g. via ```bash export CMAKE_PREFIX_PATH= mkdir -p build cd build cmake -DLEMDCBM_BUILD_TESTS:BOOL=ON .. make -j 10 ``` ### Run Unit tests In the build directory, run ```bash ./modules/LemDCBM400600/tests/test_lem_dcbm_400600_controller ``` ### Run HTTPClient Integration Tests Note: The integration test require the configured backend (in form of an actual LEM DCBM oder the Mock) to be running at the configured address and port. To start the mocked API, run ```bash python3 /modules/LemDCBM400600/utils/lem_dcbm_api_mock/main.py ``` To then run the http client integration tests, run in the build directory ```bash ./modules/LemDCBM400600/tests/integration_test_http_client ``` ## Integration / E2E Tests for LemDCBM400600 (Python wrapped) The integration / E2E tests built on the integration test tools from `EVerest/tests` allow to test the module from inside EVerest both against the mock (integration test) and the actual device (e2e test). ### Requirements for E2E tests - Module built & installed into /dist - Everest testing utils installed; cf. everst-core/tests/Readme.md - Further, this requires the following installed packages in the used Python interpreter ```bash pip install fastapi uvicorn pyyaml ``` If not done before set the Cmake install prefix, for example via ```bash CMAKE_INSTALL_PREFIX=/dist ``` then build and install the tool again (`cmake build`, `make`, `make install`; in the end, the $CMAKE_INSTALL_PREFIX directory should contain the installed binaries) ### Run E2E tests In `modules/LemDCBM400600/tests`, run: ```bash python3 -m pytest --everest-prefix=$CMAKE_INSTALL_PREFIX test_lem_dcbm_400_600_sil.py python3 -m pytest --lem-dcbm-host 10.8.8.24 --lem-dcbm-port 5566 --everest-prefix=$CMAKE_INSTALL_PREFIX test_lem_dcbm_400_600_e2e.py ``` (here, for the e2e test substitute appropriate values of the actual test device) *Note* Due to a behavior of the `EverestCore` testing class from everest-utils, it is not possible to quote escape strings in configuration yamls; this leads to an unexpected behavior since an unquoted ip address (such as 127.0.0.1) will fail the EVerest type check. A local workaround is a host entry in `/etc/hosts`, such as ```bash 10.8.8.24 lemdcbm ``` and then use `lemdcbm` instead of the IP address.