Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prevent compiling backend tests if dependencies are not installed #4973

Open
wants to merge 7 commits into
base: main
Choose a base branch
from
Next Next commit
backends/ebpf: Prevent compiling backend tests if dependencies are no…
…t installed

- The added code checks for required dependencies before adding tests.
- This makes sures the Test don't fail due to missing dependencies.

Signed-off-by: Parth Shitole <f20212907@goa.bits-pilani.ac.in>
  • Loading branch information
ParthShitole committed Oct 24, 2024
commit fa0705694ac643871ed457aec590eb4f6142dc43
25 changes: 25 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,31 @@ endif()
# enable CTest
enable_testing ()

# Macro to check dependencies before adding tests
ParthShitole marked this conversation as resolved.
Show resolved Hide resolved

macro(CHECK_DEPENDENCIES TEST_DEPENDENCY_PROGRAMS TEST_DEPENDENCY_LIBRARIES)
ParthShitole marked this conversation as resolved.
Show resolved Hide resolved
foreach(PROG ${TEST_DEPENDENCY_PROGRAMS})
find_program(${PROG}_FOUND ${PROG})
if (${PROG}_FOUND)
message(STATUS "Found program ${PROG} at ${${PROG}_FOUND}")
else()
message(WARNING "Missing program ${PROG}, disabling relevant tests."
ParthShitole marked this conversation as resolved.
Show resolved Hide resolved
" Please install ${PROG} and ensure it is in your PATH.")
set(TEST_DEPENDENCY_PRESENT FALSE)
endif()
endforeach()

foreach(LIB ${TEST_DEPENDENCY_LIBRARIES})
find_library(${LIB}_FOUND ${LIB} HINTS "${CMAKE_CURRENT_SOURCE_DIR}/runtime/usr/lib64/")
ParthShitole marked this conversation as resolved.
Show resolved Hide resolved
if (${LIB}_FOUND)
message(STATUS "Found library ${LIB} at ${${LIB}_FOUND}")
else()
message(WARNING "Missing library ${LIB}, disabling relevant tests."
" Please install ${LIB}.")
set(TEST_DEPENDENCY_PRESENT FALSE)
endif()
endforeach()
endmacro()

# if we want to manage versions in CMake ...
# include (cmake/P4CVersion.cmake)
Expand Down
52 changes: 33 additions & 19 deletions backends/ebpf/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,16 @@ else()
set (SUPPORTS_KERNEL False)
endif()

# List of executable dependencies
set(TEST_DEPENDENCY_PROGRAMS scapy tcpdump pcap)
ParthShitole marked this conversation as resolved.
Show resolved Hide resolved

# List of library dependencies
set(TEST_DEPENDENCY_LIBRARIES libpcap-dev gcc-multilib)

set(TEST_DEPENDENCY_PRESENT TRUE)
ParthShitole marked this conversation as resolved.
Show resolved Hide resolved

CHECK_DEPENDENCIES("${TEST_DEPENDENCY_PROGRAMS}" "${TEST_DEPENDENCY_LIBRARIES}")

# check for the libbpf library
find_library(LIBBPF NAMES bpf HINTS "${CMAKE_CURRENT_SOURCE_DIR}/runtime/usr/lib64/")
if (LIBBPF)
Expand All @@ -232,25 +242,29 @@ else()
set (SUPPORTS_KERNEL False)
endif()

# Only add the kernel tests if the two requirements are met
if (SUPPORTS_KERNEL)
p4c_add_tests("ebpf-kernel" ${EBPF_DRIVER_KERNEL} ${EBPF_TEST_SUITES} "${XFAIL_TESTS_KERNEL}")
p4c_add_tests("ebpf-kernel" ${EBPF_DRIVER_KERNEL} ${EBPF_KERNEL_TEST_SUITES} "${XFAIL_TESTS_KERNEL}")
# These are special tests with args that are not included
# in the default ebpf tests
p4c_add_test_with_args("ebpf-kernel" ${EBPF_DRIVER_KERNEL} FALSE "testdata/p4_16_samples/ebpf_conntrack_extern.p4" "testdata/p4_16_samples/ebpf_conntrack_extern.p4" "--extern-file ${P4C_SOURCE_DIR}/testdata/extern_modules/extern-conntrack-ebpf.c" "")
p4c_add_test_with_args("ebpf-kernel" ${EBPF_DRIVER_KERNEL} FALSE "testdata/p4_16_samples/ebpf_checksum_extern.p4" "testdata/p4_16_samples/ebpf_checksum_extern.p4" "--extern-file ${P4C_SOURCE_DIR}/testdata/extern_modules/extern-checksum-ebpf.c" "")
endif()
# ToDo Add check which verifies that BCC is installed
# Ideally, this is done via check for the python package
p4c_add_tests("ebpf-bcc" ${EBPF_DRIVER_BCC} ${EBPF_TEST_SUITES} "${XFAIL_TESTS_BCC}")
p4c_add_tests("ebpf" ${EBPF_DRIVER_TEST} ${EBPF_TEST_SUITES} "${XFAIL_TESTS_TEST}")
p4c_add_tests("ebpf-errors" ${EBPF_DRIVER_TEST} ${EBPF_ERRORS_SUITES} "${XFAIL_TESTS_TEST}")
if(TEST_DEPENDENCY_PRESENT)
ParthShitole marked this conversation as resolved.
Show resolved Hide resolved
# Only add the kernel tests if the two requirements are met
if (SUPPORTS_KERNEL)
p4c_add_tests("ebpf-kernel" ${EBPF_DRIVER_KERNEL} ${EBPF_TEST_SUITES} "${XFAIL_TESTS_KERNEL}")
p4c_add_tests("ebpf-kernel" ${EBPF_DRIVER_KERNEL} ${EBPF_KERNEL_TEST_SUITES} "${XFAIL_TESTS_KERNEL}")
# These are special tests with args that are not included
# in the default ebpf tests
p4c_add_test_with_args("ebpf-kernel" ${EBPF_DRIVER_KERNEL} FALSE "testdata/p4_16_samples/ebpf_conntrack_extern.p4" "testdata/p4_16_samples/ebpf_conntrack_extern.p4" "--extern-file ${P4C_SOURCE_DIR}/testdata/extern_modules/extern-conntrack-ebpf.c" "")
p4c_add_test_with_args("ebpf-kernel" ${EBPF_DRIVER_KERNEL} FALSE "testdata/p4_16_samples/ebpf_checksum_extern.p4" "testdata/p4_16_samples/ebpf_checksum_extern.p4" "--extern-file ${P4C_SOURCE_DIR}/testdata/extern_modules/extern-checksum-ebpf.c" "")
endif()
# ToDo Add check which verifies that BCC is installed
# Ideally, this is done via check for the python package
p4c_add_tests("ebpf-bcc" ${EBPF_DRIVER_BCC} ${EBPF_TEST_SUITES} "${XFAIL_TESTS_BCC}")
p4c_add_tests("ebpf" ${EBPF_DRIVER_TEST} ${EBPF_TEST_SUITES} "${XFAIL_TESTS_TEST}")
p4c_add_tests("ebpf-errors" ${EBPF_DRIVER_TEST} ${EBPF_ERRORS_SUITES} "${XFAIL_TESTS_TEST}")

# These are special tests with args that are not included in the default ebpf tests
p4c_add_test_with_args("ebpf" ${EBPF_DRIVER_TEST} FALSE "testdata/p4_16_samples/ebpf_checksum_extern.p4" "testdata/p4_16_samples/ebpf_checksum_extern.p4" "--extern-file ${P4C_SOURCE_DIR}/testdata/extern_modules/extern-checksum-ebpf.c" "")
# FIXME:This does not work yet
# We do not have support for dynamic addition of tables in the test framework
p4c_add_test_with_args("ebpf" ${EBPF_DRIVER_TEST} TRUE "testdata/p4_16_samples/ebpf_conntrack_extern.p4" "testdata/p4_16_samples/ebpf_conntrack_extern.p4" "--extern-file ${P4C_SOURCE_DIR}/testdata/extern_modules/extern-conntrack-ebpf.c" "")
# These are special tests with args that are not included in the default ebpf tests
p4c_add_test_with_args("ebpf" ${EBPF_DRIVER_TEST} FALSE "testdata/p4_16_samples/ebpf_checksum_extern.p4" "testdata/p4_16_samples/ebpf_checksum_extern.p4" "--extern-file ${P4C_SOURCE_DIR}/testdata/extern_modules/extern-checksum-ebpf.c" "")
# FIXME:This does not work yet
# We do not have support for dynamic addition of tables in the test framework
p4c_add_test_with_args("ebpf" ${EBPF_DRIVER_TEST} TRUE "testdata/p4_16_samples/ebpf_conntrack_extern.p4" "testdata/p4_16_samples/ebpf_conntrack_extern.p4" "--extern-file ${P4C_SOURCE_DIR}/testdata/extern_modules/extern-conntrack-ebpf.c" "")
else()
message(WARNING "Skipped adding Tests due to missing dependencies. Please install the dependencies and try again")
endif()

message(STATUS "Done with configuring BPF back end")