Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
140 changes: 1 addition & 139 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -417,142 +417,4 @@ endif()

enable_testing()

include(GoogleTest)

set(linyaps-box_UNIT_TESTS ll-box-ut)
set(linyaps-box_UNIT_TESTS_SOURCE ./tests/ll-box-ut/src/test.cpp)
set(linyaps-box_UNIT_TESTS_LINK_LIBRARIES PRIVATE "${linyaps-box_LIBRARY}")
set(linyaps-box_UNIT_TESTS_SOURCE_INCLUDE_DIRS
PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/tests/ll-box-ut/src")

find_package(GTest REQUIRED)

if(CMAKE_VERSION VERSION_LESS 3.20)
add_library(GTest::gtest_main INTERFACE IMPORTED)
target_link_libraries(GTest::gtest_main INTERFACE GTest::Main)
endif()

list(APPEND linyaps-box_UNIT_TESTS_LINK_LIBRARIES PRIVATE GTest::gtest_main)

add_executable("${linyaps-box_UNIT_TESTS}" ${linyaps-box_UNIT_TESTS_SOURCE})
target_include_directories("${linyaps-box_UNIT_TESTS}"
${linyaps-box_UNIT_TESTS_SOURCE_INCLUDE_DIRS})
target_link_libraries("${linyaps-box_UNIT_TESTS}"
${linyaps-box_UNIT_TESTS_LINK_LIBRARIES})
target_compile_features("${linyaps-box_UNIT_TESTS}" PRIVATE cxx_std_17)
set_property(TARGET "${linyaps-box_UNIT_TESTS}" PROPERTY CXX_STANDARD 17)
set_property(TARGET "${linyaps-box_UNIT_TESTS}" PROPERTY CXX_EXTENSIONS OFF)
set_property(TARGET "${linyaps-box_UNIT_TESTS}" PROPERTY CXX_STANDARD_REQUIRED
ON)
target_compile_options("${linyaps-box_UNIT_TESTS}"
PRIVATE -fmacro-prefix-map=${CMAKE_CURRENT_SOURCE_DIR}=.)

set(GTEST_DISCOVER_TESTS_ARGS "${linyaps-box_UNIT_TESTS}" WORKING_DIRECTORY
"${CMAKE_CURRENT_SOURCE_DIR}/tests/ll-box-ut")

if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
list(APPEND GTEST_DISCOVER_TESTS_ARGS PROPERTIES ENVIRONMENT
"LLVM_PROFILE_FILE=/dev/null")
endif()

gtest_discover_tests(${GTEST_DISCOVER_TESTS_ARGS})

function(setup_linyaps_box_smoke_tests)
if(NOT linyaps-box_ENABLE_SMOKE_TESTS)
return()
endif()

set(linyaps-box_SMOKE_TESTS
./tests/ll-box-st/01-run-whoami.json
./tests/ll-box-st/02-check-procfs.json
./tests/ll-box-st/03-check-mounts.json
./tests/ll-box-st/04-check-noNewPrivs.json
./tests/ll-box-st/05-check-env.json
./tests/ll-box-st/06-check-cwd.json
./tests/ll-box-st/07-check-capability.json
./tests/ll-box-st/08-check-umask.json
./tests/ll-box-st/09-check-rlimit.json
./tests/ll-box-st/10-check-oom.json
./tests/ll-box-st/11-output-to-null.json
./tests/ll-box-st/12-bind-host-dev.json
./tests/ll-box-st/13-pid-extension.json)

foreach(test ${linyaps-box_SMOKE_TESTS})
add_test(
NAME "${test}"
COMMAND
"${CMAKE_CURRENT_SOURCE_DIR}/tests/ll-box-st/ll-box-st"
"${CMAKE_CURRENT_BINARY_DIR}/${linyaps-box_APP}"
"${CMAKE_CURRENT_BINARY_DIR}/st-data"
"${CMAKE_CURRENT_SOURCE_DIR}/${test}")
list(APPEND linyaps-box_TESTS "${test}")

set_tests_properties(
"${test}"
PROPERTIES
ENVIRONMENT
"LSAN_OPTIONS=suppressions=${CMAKE_CURRENT_LIST_DIR}/tests/ll-box-st/glibc_leaks.txt"
)
endforeach()
endfunction()

setup_linyaps_box_smoke_tests()

function(setup_linyaps_box_coverage)
if(NOT linyaps-box_ENABLE_COVERAGE)
return()
endif()

set(COVERAGE_INFO "coverage.info")

if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set_tests_properties(
${linyaps-box_TESTS}
PROPERTIES ENVIRONMENT
"LLVM_PROFILE_FILE=${CMAKE_CURRENT_BINARY_DIR}/default.profraw"
)

find_program(LLVM_PROFDATA llvm-profdata REQUIRED)

add_custom_command(
OUTPUT default.profdata
DEPENDS "${linyaps-box_APP}" test
COMMAND "${LLVM_PROFDATA}" merge -sparse default.profraw -o
default.profdata)

find_program(LLVM_COV llvm-cov REQUIRED)

add_custom_command(
OUTPUT coverage.info
DEPENDS default.profdata
COMMAND "${LLVM_COV}" show -instr-profile=default.profdata
-object="$<TARGET_FILE_NAME:${linyaps-box_APP}>" > coverage.info)

add_custom_command(
OUTPUT coverage.tar.gz
DEPENDS default.profdata
COMMAND rm -rf coverage
COMMAND
"${LLVM_COV}" show -instr-profile=default.profdata -format=html
-object="$<TARGET_FILE_NAME:${linyaps-box_APP}>" -output-dir=coverage
COMMAND tar -czf coverage-html.tar.gz coverage)

add_custom_target(coverage DEPENDS coverage.info coverage.tar.gz)
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
find_program(LCOV lcov REQUIRED)
find_program(SED sed REQUIRED)
add_custom_target(
coverage
COMMAND "${LCOV}" --capture --directory . --output-file coverage.info
--branch-coverage --rc geninfo_unexecuted_blocks=1
COMMAND "${LCOV}" --remove coverage.info '/usr/*' --output-file
coverage.info
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
DEPENDS "${linyaps-box_APP}" test)
else()
message(
FATAL_ERROR "Coverage is not supported for ${CMAKE_CXX_COMPILER_ID}.")
endif()
endfunction()

setup_linyaps_box_coverage()
add_subdirectory(tests)
54 changes: 19 additions & 35 deletions REUSE.toml
Original file line number Diff line number Diff line change
@@ -1,73 +1,57 @@
version = 1
SPDX-PackageName = "linglong-box"
SPDX-PackageName = "linyaps-box"
SPDX-PackageSupplier = "UnionTech Software Technology Co., Ltd. <>"
SPDX-PackageDownloadLocation = "https://github.com/linuxdeepin/linglong-box"
SPDX-PackageDownloadLocation = "https://github.com/OpenAtom-Linyaps/linyaps-box"

[[annotations]]
path = [
".github/**",
".gitlab-ci.yml",
"tests/ll-box-st/**.json",
"tests/ll-box-st/*.txt",
"tests/ll-box-ut/data/**",
".obs/workflows.yml",
"**/CMakeLists.txt",
"**/CMakePresets.json",
"**/.gitignore",
".clang-format",
".cmake-format.py",
"cmake.external/**",
"external/*/CMakeLists.txt",
]
precedence = "aggregate"
SPDX-FileCopyrightText = "UnionTech Software Technology Co., Ltd."
SPDX-License-Identifier = "CC0-1.0"

[[annotations]]
path = [
"README.md",
"README.zh_CN.md",
".github/**",
".gitlab-ci.yml",
".obs/workflows.yml",
"tests/ll-box-st/**.json",
"tests/ll-box-st/*.txt",
"tests/ll-box-ut/data/**",
]
precedence = "aggregate"
SPDX-FileCopyrightText = "UnionTech Software Technology Co., Ltd."
SPDX-License-Identifier = "CC-BY-4.0"

[[annotations]]
path = [
"CMakePresets.json",
"CMakeLists.txt",
".gitignore",
"tests/ll-box-ut/.gitignore",
]
exclude = ["**/cmake_test_discovery_*.json"]
precedence = "aggregate"
SPDX-FileCopyrightText = "UnionTech Software Technology Co., Ltd."
SPDX-License-Identifier = "CC0-1.0"

[[annotations]]
path = [".clang-format", ".cmake-format.py"]
path = ["README.md", "README.zh_CN.md"]
precedence = "aggregate"
SPDX-FileCopyrightText = "UnionTech Software Technology Co., Ltd."
SPDX-License-Identifier = "CC0-1.0"
SPDX-License-Identifier = "CC-BY-4.0"

[[annotations]]
path = ["cmake/CPM.cmake"]
precedence = "aggregate"
SPDX-FileCopyrightText = "2019-2023 Lars Melchior and contributors"
SPDX-License-Identifier = "MIT"

[[annotations]]
path = ["cmake.external/**"]
precedence = "aggregate"
SPDX-FileCopyrightText = "UnionTech Software Technology Co., Ltd."
SPDX-License-Identifier = "CC0-1.0"

[[annotations]]
path = ["external/nlohmann_json/include/**"]
precedence = "aggregate"
SPDX-FileCopyrightText = "2013-2023 Niels Lohmann <https://nlohmann.me>"
SPDX-FileCopyrightText = "2013-2025 Niels Lohmann <https://nlohmann.me>"
SPDX-License-Identifier = "MIT"

[[annotations]]
path = ["external/CLI11/include/**"]
precedence = "aggregate"
SPDX-FileCopyrightText = "2017-2025 University of Cincinnati, developed by Henry Schreiner under NSF AWARD 1414736."
SPDX-License-Identifier = "BSD-3-Clause"

[[annotations]]
path = ["external/*/CMakeLists.txt"]
precedence = "aggregate"
SPDX-FileCopyrightText = "UnionTech Software Technology Co., Ltd."
SPDX-License-Identifier = "CC0-1.0"
2 changes: 2 additions & 0 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
add_subdirectory(ll-box-ut)
add_subdirectory(ll-box-st)
89 changes: 89 additions & 0 deletions tests/ll-box-st/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
if(NOT linyaps-box_ENABLE_SMOKE_TESTS)
return()
endif()

set(linyaps-box_SMOKE_TESTS
./01-run-whoami.json
./02-check-procfs.json
./03-check-mounts.json
./04-check-noNewPrivs.json
./05-check-env.json
./06-check-cwd.json
./07-check-capability.json
./08-check-umask.json
./09-check-rlimit.json
./10-check-oom.json
./11-output-to-null.json
./12-bind-host-dev.json
./13-pid-extension.json)

foreach(test ${linyaps-box_SMOKE_TESTS})
add_test(
NAME "${test}"
COMMAND
"${CMAKE_CURRENT_SOURCE_DIR}/ll-box-st"
"${CMAKE_BINARY_DIR}/${linyaps-box_APP}"
"${CMAKE_CURRENT_BINARY_DIR}/st-data"
"${CMAKE_CURRENT_SOURCE_DIR}/${test}")
list(APPEND linyaps-box_TESTS "${test}")

set_tests_properties(
"${test}"
PROPERTIES
ENVIRONMENT
"LSAN_OPTIONS=suppressions=${CMAKE_CURRENT_SOURCE_DIR}/glibc_leaks.txt"
)
endforeach()

if(NOT linyaps-box_ENABLE_COVERAGE)
return()
endif()

set(COVERAGE_INFO "coverage.info")

if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set_tests_properties(
${linyaps-box_TESTS}
PROPERTIES ENVIRONMENT
"LLVM_PROFILE_FILE=${CMAKE_CURRENT_BINARY_DIR}/default.profraw")

find_program(LLVM_PROFDATA llvm-profdata REQUIRED)

add_custom_command(
OUTPUT default.profdata
DEPENDS "${linyaps-box_APP}" test
COMMAND "${LLVM_PROFDATA}" merge -sparse default.profraw -o
default.profdata)

find_program(LLVM_COV llvm-cov REQUIRED)

add_custom_command(
OUTPUT coverage.info
DEPENDS default.profdata
COMMAND "${LLVM_COV}" show -instr-profile=default.profdata
-object="$<TARGET_FILE_NAME:${linyaps-box_APP}>" > coverage.info)

add_custom_command(
OUTPUT coverage.tar.gz
DEPENDS default.profdata
COMMAND rm -rf coverage
COMMAND
"${LLVM_COV}" show -instr-profile=default.profdata -format=html
-object="$<TARGET_FILE_NAME:${linyaps-box_APP}>" -output-dir=coverage
COMMAND tar -czf coverage-html.tar.gz coverage)

add_custom_target(coverage DEPENDS coverage.info coverage.tar.gz)
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
find_program(LCOV lcov REQUIRED)
find_program(SED sed REQUIRED)
add_custom_target(
coverage
COMMAND "${LCOV}" --capture --directory . --output-file coverage.info
--branch-coverage --rc geninfo_unexecuted_blocks=1
COMMAND "${LCOV}" --remove coverage.info '/usr/*' --output-file
coverage.info
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
DEPENDS "${linyaps-box_APP}" test)
else()
message(FATAL_ERROR "Coverage is not supported for ${CMAKE_CXX_COMPILER_ID}.")
endif()
39 changes: 39 additions & 0 deletions tests/ll-box-ut/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
include(GoogleTest)

set(linyaps-box_UNIT_TESTS ll-box-ut)
set(linyaps-box_UNIT_TESTS_SOURCE ./src/test.cpp)
set(linyaps-box_UNIT_TESTS_LINK_LIBRARIES PRIVATE "${linyaps-box_LIBRARY}")
set(linyaps-box_UNIT_TESTS_SOURCE_INCLUDE_DIRS
PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/src")

find_package(GTest REQUIRED)

if(CMAKE_VERSION VERSION_LESS 3.20)
add_library(GTest::gtest_main INTERFACE IMPORTED)
target_link_libraries(GTest::gtest_main INTERFACE GTest::Main)
endif()

list(APPEND linyaps-box_UNIT_TESTS_LINK_LIBRARIES PRIVATE GTest::gtest_main)

add_executable("${linyaps-box_UNIT_TESTS}" ${linyaps-box_UNIT_TESTS_SOURCE})
target_include_directories("${linyaps-box_UNIT_TESTS}"
${linyaps-box_UNIT_TESTS_SOURCE_INCLUDE_DIRS})
target_link_libraries("${linyaps-box_UNIT_TESTS}"
${linyaps-box_UNIT_TESTS_LINK_LIBRARIES})
target_compile_features("${linyaps-box_UNIT_TESTS}" PRIVATE cxx_std_17)
set_property(TARGET "${linyaps-box_UNIT_TESTS}" PROPERTY CXX_STANDARD 17)
set_property(TARGET "${linyaps-box_UNIT_TESTS}" PROPERTY CXX_EXTENSIONS OFF)
set_property(TARGET "${linyaps-box_UNIT_TESTS}" PROPERTY CXX_STANDARD_REQUIRED
ON)
target_compile_options("${linyaps-box_UNIT_TESTS}"
PRIVATE -fmacro-prefix-map=${CMAKE_CURRENT_SOURCE_DIR}=.)

set(GTEST_DISCOVER_TESTS_ARGS "${linyaps-box_UNIT_TESTS}" WORKING_DIRECTORY
"${CMAKE_CURRENT_BINARY_DIR}")

if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
list(APPEND GTEST_DISCOVER_TESTS_ARGS PROPERTIES ENVIRONMENT
"LLVM_PROFILE_FILE=/dev/null")
endif()

gtest_discover_tests(${GTEST_DISCOVER_TESTS_ARGS})