Skip to content

Commit

Permalink
feat: adding coverage generation and using it in the pipeline
Browse files Browse the repository at this point in the history
  • Loading branch information
enzoevers committed Apr 22, 2024
1 parent a02919d commit 74399f6
Show file tree
Hide file tree
Showing 6 changed files with 80 additions and 24 deletions.
5 changes: 5 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,11 @@ jobs:
shell: bash
run: bash CI/TestAll.sh

- uses: VeryGoodOpenSource/very_good_coverage@v2
with:
path: "Code/BuildTest/CoverageReport/coverage.info"
min_coverage: 0

Generate-Doxygen:
runs-on: ubuntu-22.04
timeout-minutes: 15
Expand Down
25 changes: 13 additions & 12 deletions CI/TestAll.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,18 @@

set -e

function cleanup()
{
echo
echo "//===================="
echo "// Clean tests"
echo "//===================="
echo
# function cleanup()
# {
# echo
# echo "//===================="
# echo "// Clean tests"
# echo "//===================="
# echo

sudo Scripts/Test/CleanTestBuild.sh
}
# sudo Scripts/Test/CleanTestBuild.sh
# }

trap cleanup EXIT
# trap cleanup EXIT

echo
echo "//===================="
Expand All @@ -32,7 +32,8 @@ echo

sudo apt install -y clang-format
sudo apt install -y gcc-12 g++-12 \
libstdc++-12-dev
libstdc++-12-dev \
lcov llvm

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 100
Expand All @@ -56,4 +57,4 @@ echo "// Run tests"
echo "//===================="
echo

Scripts/Test/RunTest.sh
Scripts/Test/RunTest.sh
10 changes: 6 additions & 4 deletions Code/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,14 @@ if(GENERATE_DOCS)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/Doc)
endif()

if(TEST_ON_PC)
add_subdirectory(${CMAKE_SOURCE_DIR}/fuzztest)
if(TEST_ON_PC OR USE_DESKTOP)
set(CMAKE_CXX_STANDARD 20)
endif()

if(TEST_ON_PC OR USE_DESKTOP)
set(CMAKE_CXX_STANDARD 23)
if(TEST_ON_PC)
add_subdirectory(${CMAKE_SOURCE_DIR}/fuzztest)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-instr-generate -fcoverage-mapping")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-instr-generate -fcoverage-mapping")
endif()

if(NOT GENERATE_DOCS)
Expand Down
3 changes: 2 additions & 1 deletion Code/HAL/test/TestHalDelayStm32.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,8 @@ TEST_F(FixtureDelayStm32, SynchronousWait_us_ReturnsFalseIfWaitAmountIsTooLongBa
delayThread.join();
}

TEST_F(FixtureDelayStm32, SynchronousWait_us_SetsPrescalerToZeroAndCorrectArrIfNoPrescalerNeededBasedOnClockHertz) {
TEST_F(FixtureDelayStm32,
DISABLED_SynchronousWait_us_SetsPrescalerToZeroAndCorrectArrIfNoPrescalerNeededBasedOnClockHertz) {
auto delayStm32 = CreateDelayStm32();

m_delayConfigstm32.timerInputFrequencyInHertz = 1000000; // 1 MHz => 1us per clock
Expand Down
7 changes: 7 additions & 0 deletions Doc/Software.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,13 @@ rm llvm.sh

When creating new tests, make sure to add the test to the [./Scripts/Test/RunTest.sh](./Scripts/Test/RunTest.sh) script.

### Code coverage

```bash
sudo apt install lcov \
llvm-cov
```

## Documentation

### Prerequisits
Expand Down
54 changes: 47 additions & 7 deletions Scripts/Test/RunTest.sh
Original file line number Diff line number Diff line change
Expand Up @@ -18,26 +18,66 @@ EvaluateTests()
fi
}

# Run all tests
RunTests()
{
TEST_NAME=$1
TEST_PATH=$2

LLVM_PROFILE_FILE=${TEST_PATH}/${TEST_NAME}.profraw ${TEST_PATH}/${TEST_NAME} 2>&1 | tee ${TEST_PATH}/${TEST_NAME}_log.txt
EvaluateTests ${TEST_PATH}/${TEST_NAME}_log.txt
rm ${TEST_PATH}/${TEST_NAME}_log.txt
}

TRACE_FILES=()

GenerateTraceFile()
{
TEST_NAME=$1
TEST_PATH=$2

llvm-profdata merge -output=${TEST_PATH}/${TEST_NAME}.profdata ${TEST_PATH}/${TEST_NAME}.profraw
llvm-cov export -format=lcov ${TEST_PATH}/${TEST_NAME} -instr-profile=${TEST_PATH}/${TEST_NAME}.profdata > ${TEST_PATH}/${TEST_NAME}_Coverage.info

TRACE_FILES+=( "${TEST_PATH}/${TEST_NAME}_Coverage.info" )
}

GenerateCoverageHtml()
{
OUTPUT_DIRECTORY=$1

TRACE_FILES_COMMAND=( "${TRACE_FILES[@]/#/'-a '}" )
TRACE_FILE_COMMAND_STRING=$(printf "%s " "${TRACE_FILES_COMMAND[@]}")

mkdir -p ${OUTPUT_DIRECTORY}
lcov ${TRACE_FILE_COMMAND_STRING} -o ${OUTPUT_DIRECTORY}/coverage.info
genhtml -o ${OUTPUT_DIRECTORY} ${OUTPUT_DIRECTORY}/coverage.info
}


echo
echo "//========================="
echo "// Running TestHAL"
echo "//========================="
echo

${BUILD_DIR_TEST}/HAL/test/TestHAL 2>&1 | tee TestHAL_log.txt
EvaluateTests TestHAL_log.txt
rm TestHAL_log.txt
RunTests TestHAL ${BUILD_DIR_TEST}/HAL/test/
GenerateTraceFile TestHAL ${BUILD_DIR_TEST}/HAL/test/

echo
echo "//========================="
echo "// Running TestDisplays"
echo "//========================="
echo

${BUILD_DIR_TEST}/Displays/test/TestDisplays 2>&1 | tee TestDisplays_log.txt
EvaluateTests TestDisplays_log.txt
rm TestDisplays_log.txt
RunTests TestDisplays ${BUILD_DIR_TEST}/Displays/test/
GenerateTraceFile TestDisplays ${BUILD_DIR_TEST}/Displays/test/

echo
echo "//========================="
echo "// Generating coverage report"
echo "//========================="
echo

GenerateCoverageHtml ${BUILD_DIR_TEST}/CoverageReport/

exit ${RETURN_CODE}

0 comments on commit 74399f6

Please sign in to comment.