Merge remote-tracking branch 'origin/mueller/test-update' into mueller/bundled-update
This commit is contained in:
commit
c5212226b8
2
unittest/CMakeLists.txt
Normal file
2
unittest/CMakeLists.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
add_subdirectory(internal)
|
||||||
|
add_subdirectory(tests)
|
@ -1,59 +1,19 @@
|
|||||||
## FSFW Testing
|
## FSFW Testing
|
||||||
This repository contains testing and unit testing components.
|
|
||||||
|
|
||||||
[Catch2](https://github.com/catchorg/Catch2) has been used as a framework,
|
This folder contains testing and unit testing components.
|
||||||
and these unit tests can only be run on a linux host machine.
|
|
||||||
The makefile with default settings creates the unit test binary which can be
|
|
||||||
run in the terminal or in eclipse.
|
|
||||||
|
|
||||||
### Instructions
|
### Instructions
|
||||||
|
|
||||||
To run the fsfw unittests in the project, perform following steps:
|
The easiest way to run the unittest contained in this folder is to follow
|
||||||
|
the steps in the [test repository](https://egit.irs.uni-stuttgart.de/fsfw/fsfw_tests).
|
||||||
|
This is recommended even if the goal is to set up a custom test repository to have
|
||||||
|
a starting point.
|
||||||
|
|
||||||
1. Copy the testcfg folder the project root (folder containing the FSFW).
|
To set up a custom test repository or project, following steps can be performed:
|
||||||
2. There is a makefile inside the testcfg folder which can be used to have
|
|
||||||
a starting point to compile the unit tests. Copy that Makefile to the project
|
|
||||||
root
|
|
||||||
3. Create a folder named catch2 (can have other name which requires Makefile
|
|
||||||
adaption) and copy the Catch2 header files there (NOTE: CMake support
|
|
||||||
not enabled yet!)
|
|
||||||
|
|
||||||
### Eclipse CDT settings
|
1. Copy the user folder content into the project root.
|
||||||
|
2. Clone [Catch2](https://github.com/catchorg/Catch2) in the project root.
|
||||||
|
3. Use the `CMakeLists.txt` as a starting point to add tests and build the test
|
||||||
|
executable.
|
||||||
|
|
||||||
The default eclipse terminal has issues displaying the colors used
|
|
||||||
when running the unit test binary by catch2. To fix this issue,
|
|
||||||
install the ANSI Escape In Console package from the eclipse marketplace.
|
|
||||||
|
|
||||||
### GCOV integration
|
|
||||||
|
|
||||||
GCOV has been integrated as a code coverage tool.
|
|
||||||
It can be enabled by adding `GCOV=1` to the build process as an additional argument.
|
|
||||||
Coverage data will be provided in form of .gcno and .gcda files.
|
|
||||||
These can be displayed in eclipse by looking
|
|
||||||
for a .gcno or .gcda file in the \_obj folder, double-clicking it
|
|
||||||
and picking the right source-binary. This will generate
|
|
||||||
information about which lines of a file have run, provided it is open in
|
|
||||||
eclipse.
|
|
||||||
|
|
||||||
### LCOV integration
|
|
||||||
|
|
||||||
The files generated by GCOV can also be processed by the tool LCOV.
|
|
||||||
On ubuntu, the tool can be installed with the following command:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
sudo apt-get install lcov
|
|
||||||
````
|
|
||||||
|
|
||||||
After that, the tool can be run by building the unit tests with `GCOV=1`,
|
|
||||||
running them at least one time and then executing the `lcov.sh` script.
|
|
||||||
|
|
||||||
### Adding unit tests
|
|
||||||
|
|
||||||
The catch unit tests are located in unittest/testfw. To add new unit tests,
|
|
||||||
add them to the UnitTestCatch.cpp file or add a new source file which
|
|
||||||
includes catch.hpp.
|
|
||||||
|
|
||||||
For writing basics tests, the [assertion documentation](https://github.com/catchorg/Catch2/blob/master/docs/assertions.md#top)
|
|
||||||
or the existing examples are a good guideliens.
|
|
||||||
For more advanced tests, refer to the [catch2 documentation](https://github.com/catchorg/Catch2/blob/master/docs/Readme.md#top).
|
|
||||||
|
|
||||||
|
7
unittest/internal/CMakeLists.txt
Normal file
7
unittest/internal/CMakeLists.txt
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
target_sources(${TARGET_NAME} PRIVATE
|
||||||
|
InternalUnitTester.cpp
|
||||||
|
UnittDefinitions.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
add_subdirectory(osal)
|
||||||
|
add_subdirectory(serialize)
|
5
unittest/internal/osal/CMakeLists.txt
Normal file
5
unittest/internal/osal/CMakeLists.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
target_sources(${TARGET_NAME} PRIVATE
|
||||||
|
IntTestMq.cpp
|
||||||
|
IntTestMutex.cpp
|
||||||
|
IntTestSemaphore.cpp
|
||||||
|
)
|
@ -1,8 +1,8 @@
|
|||||||
#include "IntTestMq.h"
|
#include "IntTestMq.h"
|
||||||
#include "../UnittDefinitions.h"
|
#include <fsfw/unittest/internal/UnittDefinitions.h>
|
||||||
|
|
||||||
#include "../../../ipc/MessageQueueIF.h"
|
#include <fsfw/ipc/MessageQueueIF.h>
|
||||||
#include "../../../ipc/QueueFactory.h"
|
#include <fsfw/ipc/QueueFactory.h>
|
||||||
|
|
||||||
#include <array>
|
#include <array>
|
||||||
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
#include "IntTestMutex.h"
|
#include "IntTestMutex.h"
|
||||||
|
|
||||||
#include "../../../ipc/MutexFactory.h"
|
#include <fsfw/ipc/MutexFactory.h>
|
||||||
#include "../UnittDefinitions.h"
|
#include <fsfw/unittest/internal/UnittDefinitions.h>
|
||||||
|
|
||||||
#if defined(hosted)
|
#if defined(hosted)
|
||||||
#include "../../osal/hosted/Mutex.h"
|
#include <fsfw/osal/hosted/Mutex.h>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
#include <future>
|
#include <future>
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
#include "IntTestSemaphore.h"
|
#include "IntTestSemaphore.h"
|
||||||
#include "../UnittDefinitions.h"
|
#include <fsfw/unittest/internal/UnittDefinitions.h>
|
||||||
|
|
||||||
#include "../../../tasks/SemaphoreFactory.h"
|
#include <fsfw/tasks/SemaphoreFactory.h>
|
||||||
#include "../../../serviceinterface/ServiceInterfaceStream.h"
|
#include <fsfw/serviceinterface/ServiceInterfaceStream.h>
|
||||||
#include "../../../timemanager/Stopwatch.h"
|
#include <fsfw/timemanager/Stopwatch.h>
|
||||||
|
|
||||||
|
#include <cstdlib>
|
||||||
|
|
||||||
void testsemaph::testBinSemaph() {
|
void testsemaph::testBinSemaph() {
|
||||||
std::string id = "[BinSemaphore]";
|
std::string id = "[BinSemaphore]";
|
||||||
@ -138,7 +139,7 @@ void testsemaph::testCountingSemaphImplementation(SemaphoreIF* countingSemaph,
|
|||||||
// attempt to take when count is 0, measure time
|
// attempt to take when count is 0, measure time
|
||||||
result = countingSemaph->acquire(SemaphoreIF::TimeoutType::WAITING, 10);
|
result = countingSemaph->acquire(SemaphoreIF::TimeoutType::WAITING, 10);
|
||||||
dur_millis_t time = stopwatch.stop();
|
dur_millis_t time = stopwatch.stop();
|
||||||
if(abs(time - 10) > 1) {
|
if(std::abs(static_cast<int32_t>(time - 10)) > 1) {
|
||||||
unitt::put_error(id);
|
unitt::put_error(id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
3
unittest/internal/serialize/CMakeLists.txt
Normal file
3
unittest/internal/serialize/CMakeLists.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
target_sources(${TARGET_NAME} PRIVATE
|
||||||
|
IntTestSerialization.cpp
|
||||||
|
)
|
@ -1,9 +1,9 @@
|
|||||||
#include "IntTestSerialization.h"
|
#include "IntTestSerialization.h"
|
||||||
#include "../UnittDefinitions.h"
|
#include <fsfw/unittest/internal/UnittDefinitions.h>
|
||||||
|
|
||||||
#include "../../../serialize/SerializeElement.h"
|
#include <fsfw/serialize/SerializeElement.h>
|
||||||
#include "../../../serialize/SerialBufferAdapter.h"
|
#include <fsfw/serialize/SerialBufferAdapter.h>
|
||||||
#include "../../../serialize/SerializeIF.h"
|
#include <fsfw/serialize/SerializeIF.h>
|
||||||
|
|
||||||
#include <array>
|
#include <array>
|
||||||
|
|
||||||
|
6
unittest/tests/CMakeLists.txt
Normal file
6
unittest/tests/CMakeLists.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
add_subdirectory(action)
|
||||||
|
add_subdirectory(container)
|
||||||
|
add_subdirectory(osal)
|
||||||
|
add_subdirectory(serialize)
|
||||||
|
add_subdirectory(storagemanager)
|
||||||
|
|
3
unittest/tests/action/CMakeLists.txt
Normal file
3
unittest/tests/action/CMakeLists.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
target_sources(${TARGET_NAME} PRIVATE
|
||||||
|
TestActionHelper.cpp
|
||||||
|
)
|
@ -1,8 +1,11 @@
|
|||||||
#include "TestActionHelper.h"
|
#include "TestActionHelper.h"
|
||||||
|
|
||||||
|
#include <unittest/core/CatchDefinitions.h>
|
||||||
|
|
||||||
#include <fsfw/action/ActionHelper.h>
|
#include <fsfw/action/ActionHelper.h>
|
||||||
#include <fsfw/ipc/CommandMessage.h>
|
#include <fsfw/ipc/CommandMessage.h>
|
||||||
#include <catch2/catch.hpp>
|
|
||||||
#include "../../core/CatchDefinitions.h"
|
#include <catch2/catch_test_macros.hpp>
|
||||||
|
|
||||||
|
|
||||||
TEST_CASE( "Action Helper" , "[ActionHelper]") {
|
TEST_CASE( "Action Helper" , "[ActionHelper]") {
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
#include <fsfw/action/HasActionsIF.h>
|
#include <fsfw/action/HasActionsIF.h>
|
||||||
#include <fsfw/ipc/MessageQueueIF.h>
|
#include <fsfw/ipc/MessageQueueIF.h>
|
||||||
#include <fsfw/unittest/core/CatchDefinitions.h>
|
#include <unittest/core/CatchDefinitions.h>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
|
|
||||||
|
10
unittest/tests/container/CMakeLists.txt
Normal file
10
unittest/tests/container/CMakeLists.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
target_sources(${TARGET_NAME} PRIVATE
|
||||||
|
RingBufferTest.cpp
|
||||||
|
TestArrayList.cpp
|
||||||
|
TestDynamicFifo.cpp
|
||||||
|
TestFifo.cpp
|
||||||
|
TestFixedArrayList.cpp
|
||||||
|
TestFixedMap.cpp
|
||||||
|
TestFixedOrderedMultimap.cpp
|
||||||
|
TestPlacementFactory.cpp
|
||||||
|
)
|
@ -1,7 +1,7 @@
|
|||||||
#include "../../core/CatchDefinitions.h"
|
#include <unittest/core/CatchDefinitions.h>
|
||||||
#include "../../container/SimpleRingBuffer.h"
|
#include <fsfw/container/SimpleRingBuffer.h>
|
||||||
|
|
||||||
#include <catch2/catch.hpp>
|
#include <catch2/catch_test_macros.hpp>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
TEST_CASE("Ring Buffer Test" , "[RingBufferTest]") {
|
TEST_CASE("Ring Buffer Test" , "[RingBufferTest]") {
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
#include "../../container/ArrayList.h"
|
#include <fsfw/container/ArrayList.h>
|
||||||
#include "../../returnvalues/HasReturnvaluesIF.h"
|
#include <fsfw/returnvalues/HasReturnvaluesIF.h>
|
||||||
|
|
||||||
#include <catch2/catch.hpp>
|
#include <catch2/catch_test_macros.hpp>
|
||||||
#include "../../core/CatchDefinitions.h"
|
#include <unittest/core/CatchDefinitions.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Array List test
|
* @brief Array List test
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
|
#include <fsfw/container/DynamicFIFO.h>
|
||||||
|
#include <fsfw/container/FIFO.h>
|
||||||
|
#include <fsfw/returnvalues/HasReturnvaluesIF.h>
|
||||||
|
|
||||||
#include "../../container/DynamicFIFO.h"
|
#include <catch2/catch_test_macros.hpp>
|
||||||
#include "../../container/FIFO.h"
|
#include <unittest/core/CatchDefinitions.h>
|
||||||
#include "../../returnvalues/HasReturnvaluesIF.h"
|
|
||||||
|
|
||||||
#include <catch.hpp>
|
|
||||||
#include <CatchDefinitions.h>
|
|
||||||
|
|
||||||
TEST_CASE( "Dynamic Fifo Tests", "[TestDynamicFifo]") {
|
TEST_CASE( "Dynamic Fifo Tests", "[TestDynamicFifo]") {
|
||||||
INFO("Dynamic Fifo Tests");
|
INFO("Dynamic Fifo Tests");
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
|
#include <fsfw/container/DynamicFIFO.h>
|
||||||
|
#include <fsfw/container/FIFO.h>
|
||||||
|
#include <fsfw/returnvalues/HasReturnvaluesIF.h>
|
||||||
|
|
||||||
#include "../../container/DynamicFIFO.h"
|
#include <catch2/catch_test_macros.hpp>
|
||||||
#include "../../container/FIFO.h"
|
#include <unittest/core/CatchDefinitions.h>
|
||||||
#include "../../returnvalues/HasReturnvaluesIF.h"
|
|
||||||
|
|
||||||
#include <catch2/catch.hpp>
|
|
||||||
#include "../../core/CatchDefinitions.h"
|
|
||||||
|
|
||||||
TEST_CASE( "Static Fifo Tests", "[TestFifo]") {
|
TEST_CASE( "Static Fifo Tests", "[TestFifo]") {
|
||||||
INFO("Fifo Tests");
|
INFO("Fifo Tests");
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
#include "../../core/CatchDefinitions.h"
|
#include <fsfw/container/FixedArrayList.h>
|
||||||
|
#include <fsfw/returnvalues/HasReturnvaluesIF.h>
|
||||||
|
|
||||||
#include "../../container/FixedArrayList.h"
|
#include <catch2/catch_test_macros.hpp>
|
||||||
#include "../../returnvalues/HasReturnvaluesIF.h"
|
#include <unittest/core/CatchDefinitions.h>
|
||||||
|
|
||||||
#include <catch2/catch.hpp>
|
|
||||||
|
|
||||||
|
|
||||||
TEST_CASE( "FixedArrayList Tests", "[TestFixedArrayList]") {
|
TEST_CASE( "FixedArrayList Tests", "[TestFixedArrayList]") {
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
#include "../../container/FixedMap.h"
|
#include <fsfw/container/FixedMap.h>
|
||||||
#include "../../returnvalues/HasReturnvaluesIF.h"
|
#include <fsfw/returnvalues/HasReturnvaluesIF.h>
|
||||||
|
|
||||||
#include <catch2/catch.hpp>
|
#include <catch2/catch_test_macros.hpp>
|
||||||
#include "../../core/CatchDefinitions.h"
|
#include <unittest/core/CatchDefinitions.h>
|
||||||
|
|
||||||
template class FixedMap<unsigned int, unsigned short>;
|
template class FixedMap<unsigned int, unsigned short>;
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
#include "../../container/FixedOrderedMultimap.h"
|
#include <fsfw/container/FixedOrderedMultimap.h>
|
||||||
#include "../../returnvalues/HasReturnvaluesIF.h"
|
#include <fsfw/returnvalues/HasReturnvaluesIF.h>
|
||||||
|
|
||||||
#include <catch2/catch.hpp>
|
#include <catch2/catch_test_macros.hpp>
|
||||||
#include "../../core/CatchDefinitions.h"
|
#include <unittest/core/CatchDefinitions.h>
|
||||||
|
|
||||||
TEST_CASE( "FixedOrderedMultimap Tests", "[TestFixedOrderedMultimap]") {
|
TEST_CASE( "FixedOrderedMultimap Tests", "[TestFixedOrderedMultimap]") {
|
||||||
INFO("FixedOrderedMultimap Tests");
|
INFO("FixedOrderedMultimap Tests");
|
||||||
|
4
unittest/tests/osal/CMakeLists.txt
Normal file
4
unittest/tests/osal/CMakeLists.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
target_sources(${TARGET_NAME} PRIVATE
|
||||||
|
TestMessageQueue.cpp
|
||||||
|
TestSemaphore.cpp
|
||||||
|
)
|
@ -1,8 +1,10 @@
|
|||||||
#include "../../ipc/MessageQueueIF.h"
|
#include <fsfw/ipc/MessageQueueIF.h>
|
||||||
#include "../../ipc/QueueFactory.h"
|
#include <fsfw/ipc/QueueFactory.h>
|
||||||
#include <catch.hpp>
|
|
||||||
|
#include <catch2/catch_test_macros.hpp>
|
||||||
|
#include <unittest/core/CatchDefinitions.h>
|
||||||
|
|
||||||
#include <array>
|
#include <array>
|
||||||
#include "../../core/CatchDefinitions.h"
|
|
||||||
|
|
||||||
TEST_CASE("MessageQueue Basic Test","[TestMq]") {
|
TEST_CASE("MessageQueue Basic Test","[TestMq]") {
|
||||||
MessageQueueIF* testSenderMq =
|
MessageQueueIF* testSenderMq =
|
||||||
|
5
unittest/tests/serialize/CMakeLists.txt
Normal file
5
unittest/tests/serialize/CMakeLists.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
target_sources(${TARGET_NAME} PRIVATE
|
||||||
|
TestSerialBufferAdapter.cpp
|
||||||
|
TestSerialization.cpp
|
||||||
|
TestSerialLinkedPacket.cpp
|
||||||
|
)
|
@ -1,7 +1,9 @@
|
|||||||
#include "../../serialize/SerialBufferAdapter.h"
|
#include <fsfw/serialize/SerialBufferAdapter.h>
|
||||||
|
|
||||||
#include <catch2/catch.hpp>
|
#include <catch2/catch_test_macros.hpp>
|
||||||
#include "../../core/CatchDefinitions.h"
|
#include <unittest/core/CatchDefinitions.h>
|
||||||
|
|
||||||
|
#include <array>
|
||||||
|
|
||||||
|
|
||||||
static bool test_value_bool = true;
|
static bool test_value_bool = true;
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
#include "TestSerialLinkedPacket.h"
|
#include "TestSerialLinkedPacket.h"
|
||||||
#include "../../core/CatchDefinitions.h"
|
#include <unittest/core/CatchDefinitions.h>
|
||||||
|
|
||||||
#include "../../globalfunctions/arrayprinter.h"
|
#include <fsfw/globalfunctions/arrayprinter.h>
|
||||||
|
|
||||||
#include <catch2/catch.hpp>
|
#include <catch2/catch_test_macros.hpp>
|
||||||
|
#include <unittest/core/CatchDefinitions.h>
|
||||||
|
|
||||||
|
#include <array>
|
||||||
|
|
||||||
|
|
||||||
TEST_CASE("Serial Linked Packet" , "[SerLinkPacket]") {
|
TEST_CASE("Serial Linked Packet" , "[SerLinkPacket]") {
|
||||||
|
@ -37,7 +37,7 @@ public:
|
|||||||
return buffer.entry.getConstBuffer();
|
return buffer.entry.getConstBuffer();
|
||||||
}
|
}
|
||||||
|
|
||||||
const size_t getBufferLength() {
|
size_t getBufferLength() {
|
||||||
return buffer.getSerializedSize();
|
return buffer.getSerializedSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
#include "../../serialize/SerializeAdapter.h"
|
#include <fsfw/serialize/SerializeAdapter.h>
|
||||||
|
|
||||||
|
#include <catch2/catch_test_macros.hpp>
|
||||||
|
#include <catch2/catch_approx.hpp>
|
||||||
|
#include <unittest/core/CatchDefinitions.h>
|
||||||
|
|
||||||
#include "catch.hpp"
|
|
||||||
#include <array>
|
#include <array>
|
||||||
#include "../../core/CatchDefinitions.h"
|
|
||||||
|
|
||||||
static bool test_value_bool = true;
|
static bool test_value_bool = true;
|
||||||
static uint8_t tv_uint8 {5};
|
static uint8_t tv_uint8 {5};
|
||||||
@ -119,10 +121,10 @@ TEST_CASE("Auto Serialize Adapter testing", "[single-file]") {
|
|||||||
REQUIRE(tv_int16 == -829);
|
REQUIRE(tv_int16 == -829);
|
||||||
REQUIRE(tv_int32 == -2312);
|
REQUIRE(tv_int32 == -2312);
|
||||||
|
|
||||||
REQUIRE(tv_float == Approx(8.214921));
|
REQUIRE(tv_float == Catch::Approx(8.214921));
|
||||||
REQUIRE(tv_double == Approx(9.2132142141e8));
|
REQUIRE(tv_double == Catch::Approx(9.2132142141e8));
|
||||||
REQUIRE(tv_sfloat == Approx(-922.2321321));
|
REQUIRE(tv_sfloat == Catch::Approx(-922.2321321));
|
||||||
REQUIRE(tv_sdouble == Approx(-2.2421e19));
|
REQUIRE(tv_sdouble == Catch::Approx(-2.2421e19));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
4
unittest/tests/storagemanager/CMakeLists.txt
Normal file
4
unittest/tests/storagemanager/CMakeLists.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
target_sources(${TARGET_NAME} PRIVATE
|
||||||
|
TestNewAccessor.cpp
|
||||||
|
TestPool.cpp
|
||||||
|
)
|
@ -1,10 +1,8 @@
|
|||||||
#include "CatchDefinitions.h"
|
|
||||||
|
|
||||||
#include <fsfw/objectmanager/ObjectManager.h>
|
#include <fsfw/objectmanager/ObjectManager.h>
|
||||||
#include <fsfw/storagemanager/LocalPool.h>
|
#include <fsfw/storagemanager/LocalPool.h>
|
||||||
|
|
||||||
#include <catch.hpp>
|
#include <catch2/catch_test_macros.hpp>
|
||||||
#include <CatchDefinitions.h>
|
#include <unittest/core/CatchDefinitions.h>
|
||||||
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
|
165
unittest/user/CMakeLists.txt
Normal file
165
unittest/user/CMakeLists.txt
Normal file
@ -0,0 +1,165 @@
|
|||||||
|
################################################################################
|
||||||
|
# CMake support for the Flight Software Framework Tests
|
||||||
|
#
|
||||||
|
# Developed in an effort to replace Make with a modern build system.
|
||||||
|
#
|
||||||
|
# Author: R. Mueller
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Pre-Project preparation
|
||||||
|
################################################################################
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
|
||||||
|
# set(CMAKE_VERBOSE TRUE)
|
||||||
|
|
||||||
|
set(CMAKE_SCRIPT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/buildsystem/cmake")
|
||||||
|
|
||||||
|
# Tests can be built with the Host OSAL or with the Linux OSAL.
|
||||||
|
if(NOT OS_FSFW)
|
||||||
|
set(OS_FSFW host CACHE STRING "OS for the FSFW.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
option(CUSTOM_UNITTEST_RUNNER
|
||||||
|
"Specify whether custom main or Catch2 main is used" TRUE
|
||||||
|
)
|
||||||
|
|
||||||
|
# Perform steps like loading toolchain files where applicable.
|
||||||
|
#include(${CMAKE_SCRIPT_PATH}/PreProjectConfig.cmake)
|
||||||
|
#pre_project_config()
|
||||||
|
|
||||||
|
# Project Name
|
||||||
|
project(fsfw_tests C CXX)
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Pre-Sources preparation
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
# Specify the C++ standard
|
||||||
|
set(CMAKE_CXX_STANDARD 11)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED True)
|
||||||
|
|
||||||
|
# Set names and variables
|
||||||
|
set(TARGET_NAME ${CMAKE_PROJECT_NAME})
|
||||||
|
if(CUSTOM_UNITTEST_RUNNER)
|
||||||
|
set(CATCH2_TARGET Catch2)
|
||||||
|
else()
|
||||||
|
set(CATCH2_TARGET Catch2WithMain)
|
||||||
|
endif()
|
||||||
|
set(LIB_FSFW_NAME fsfw)
|
||||||
|
|
||||||
|
# Set path names
|
||||||
|
set(FSFW_PATH fsfw)
|
||||||
|
set(CATCH2_PATH Catch2)
|
||||||
|
set(FSFW_TESTS_PATH fsfw/unittest)
|
||||||
|
set(TEST_SETUP_PATH unittest)
|
||||||
|
|
||||||
|
# Analyse different OS and architecture/target options and
|
||||||
|
# determine BSP_PATH
|
||||||
|
|
||||||
|
# FreeRTOS
|
||||||
|
if(${OS_FSFW} STREQUAL linux)
|
||||||
|
add_definitions(-DUNIX -DLINUX)
|
||||||
|
find_package(Threads REQUIRED)
|
||||||
|
# Hosted
|
||||||
|
else()
|
||||||
|
if(WIN32)
|
||||||
|
add_definitions(-DWIN32)
|
||||||
|
elseif(UNIX)
|
||||||
|
find_package(Threads REQUIRED)
|
||||||
|
add_definitions(-DUNIX -DLINUX)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(FSFW_CONFIG_PATH testcfg)
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Executable and Sources
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
# Add executable
|
||||||
|
add_executable(${TARGET_NAME})
|
||||||
|
|
||||||
|
# Add subdirectories
|
||||||
|
add_subdirectory(${FSFW_PATH})
|
||||||
|
add_subdirectory(${CATCH2_PATH})
|
||||||
|
add_subdirectory(${FSFW_CONFIG_PATH})
|
||||||
|
add_subdirectory(${FSFW_TESTS_PATH})
|
||||||
|
add_subdirectory(${TEST_SETUP_PATH})
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Post-Sources preparation
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
# Add libraries for all sources.
|
||||||
|
target_link_libraries(${TARGET_NAME} PRIVATE
|
||||||
|
${LIB_FSFW_NAME}
|
||||||
|
${CATCH2_TARGET}
|
||||||
|
)
|
||||||
|
|
||||||
|
# Add include paths for all sources.
|
||||||
|
target_include_directories(${TARGET_NAME} PRIVATE
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
${FSFW_CONFIG_PATH}
|
||||||
|
)
|
||||||
|
|
||||||
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||||
|
set(WARNING_FLAGS
|
||||||
|
-Wall
|
||||||
|
-Wextra
|
||||||
|
-Wshadow=local
|
||||||
|
-Wimplicit-fallthrough=1
|
||||||
|
-Wno-unused-parameter
|
||||||
|
-Wno-psabi
|
||||||
|
)
|
||||||
|
|
||||||
|
# Remove unused sections.
|
||||||
|
target_compile_options(${TARGET_NAME} PRIVATE
|
||||||
|
"-ffunction-sections"
|
||||||
|
"-fdata-sections"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Removed unused sections.
|
||||||
|
target_link_options(${TARGET_NAME} PRIVATE
|
||||||
|
"-Wl,--gc-sections"
|
||||||
|
)
|
||||||
|
|
||||||
|
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||||
|
set(COMPILER_FLAGS "/permissive-")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(CMAKE_VERBOSE)
|
||||||
|
message(STATUS "Warning flags: ${WARNING_FLAGS}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
# Compile options for all sources.
|
||||||
|
target_compile_options(${TARGET_NAME} PRIVATE
|
||||||
|
$<$<COMPILE_LANGUAGE:C>:${WARNING_FLAGS} ${COMPILER_FLAGS}>
|
||||||
|
$<$<COMPILE_LANGUAGE:CXX>:${WARNING_FLAGS} ${COMPILER_FLAGS}>
|
||||||
|
${ABI_FLAGS}
|
||||||
|
)
|
||||||
|
|
||||||
|
if(NOT CMAKE_SIZE)
|
||||||
|
set(CMAKE_SIZE size)
|
||||||
|
if(WIN32)
|
||||||
|
set(FILE_SUFFIX ".exe")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_custom_command(
|
||||||
|
TARGET ${TARGET_NAME}
|
||||||
|
POST_BUILD
|
||||||
|
COMMAND echo "Build directory: ${CMAKE_BINARY_DIR}"
|
||||||
|
COMMAND echo "Target OSAL: ${OS_FSFW}"
|
||||||
|
COMMAND echo "Target Build Type: ${CMAKE_BUILD_TYPE}"
|
||||||
|
COMMAND ${CMAKE_SIZE} ${TARGET_NAME}${FILE_SUFFIX}
|
||||||
|
)
|
||||||
|
|
||||||
|
include (${CMAKE_CURRENT_SOURCE_DIR}/buildsystem/cmake/BuildType.cmake)
|
||||||
|
set_build_type()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
11
unittest/user/testcfg/CMakeLists.txt
Normal file
11
unittest/user/testcfg/CMakeLists.txt
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
target_sources(${TARGET_NAME}
|
||||||
|
PRIVATE
|
||||||
|
ipc/MissionMessageTypes.cpp
|
||||||
|
pollingsequence/PollingSequenceFactory.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
# Add include paths for the executable
|
||||||
|
target_include_directories(${TARGET_NAME}
|
||||||
|
PUBLIC
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
)
|
7
unittest/user/unittest/core/CMakeLists.txt
Normal file
7
unittest/user/unittest/core/CMakeLists.txt
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
target_sources(${TARGET_NAME} PRIVATE
|
||||||
|
CatchDefinitions.cpp
|
||||||
|
CatchFactory.cpp
|
||||||
|
CatchRunner.cpp
|
||||||
|
CatchSetup.cpp
|
||||||
|
printChar.cpp
|
||||||
|
)
|
Loading…
Reference in New Issue
Block a user