-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
141 lines (123 loc) · 5.55 KB
/
Copy pathCMakeLists.txt
File metadata and controls
141 lines (123 loc) · 5.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
cmake_minimum_required(VERSION 3.20)
project(fdbkeeper_service LANGUAGES CXX)
find_package(ZLIB REQUIRED)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
option(FDBKEEPER_ENABLE_STRICT_WARNINGS "Enable strict warnings" ON)
option(FDBKEEPER_ENABLE_FDB_C_API "Enable real FoundationDB C API backend when headers/libs are available" OFF)
option(FDBKEEPER_ENABLE_REAL_FDB_INTEGRATION_TEST "Enable end-to-end integration test against a live FoundationDB cluster" OFF)
set(FDBKEEPER_REAL_CLUSTER_FILE "" CACHE STRING "Path to live FoundationDB cluster file for real integration test")
set(FDBKEEPER_HAS_FDB_C_API 0)
if (FDBKEEPER_ENABLE_FDB_C_API)
find_path(FDB_C_INCLUDE_DIR foundationdb/fdb_c.h)
find_library(FDB_C_LIBRARY NAMES fdb_c libfdb_c)
if (FDB_C_INCLUDE_DIR AND FDB_C_LIBRARY)
message(STATUS "FDB C API backend enabled: ${FDB_C_INCLUDE_DIR}, ${FDB_C_LIBRARY}")
set(FDBKEEPER_HAS_FDB_C_API 1)
else()
message(WARNING "FDB C API requested but not found, fallback to stub backend")
endif()
endif()
add_executable(fdbkeeper-service
src/main.cpp
src/protocol/ZkProtocolServer.cpp
src/backend/BackendFactory.cpp
src/backend/InMemoryKeeperBackend.cpp
src/backend/FdbKeeperBackendStub.cpp
src/session/SessionManager.cpp
)
target_include_directories(fdbkeeper-service PRIVATE src)
target_link_libraries(fdbkeeper-service PRIVATE ZLIB::ZLIB)
if (FDBKEEPER_HAS_FDB_C_API)
target_include_directories(fdbkeeper-service PRIVATE ${FDB_C_INCLUDE_DIR})
endif()
target_compile_definitions(fdbkeeper-service PRIVATE FDBKEEPER_SERVICE_STANDALONE=1)
target_compile_definitions(fdbkeeper-service PRIVATE FDBKEEPER_HAS_FDB_C_API=${FDBKEEPER_HAS_FDB_C_API})
if (FDBKEEPER_ENABLE_STRICT_WARNINGS)
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU")
target_compile_options(fdbkeeper-service PRIVATE -Wall -Wextra -Wpedantic)
elseif (MSVC)
target_compile_options(fdbkeeper-service PRIVATE /W4)
endif()
endif()
enable_testing()
add_test(NAME smoke_help COMMAND fdbkeeper-service --help)
add_test(NAME smoke_version COMMAND fdbkeeper-service --version)
find_package(Python3 COMPONENTS Interpreter REQUIRED)
add_executable(test-backend
tests/test_backend.cpp
src/backend/InMemoryKeeperBackend.cpp
)
target_include_directories(test-backend PRIVATE src)
add_executable(test-backend-factory
tests/test_backend_factory.cpp
src/backend/BackendFactory.cpp
src/backend/InMemoryKeeperBackend.cpp
src/backend/FdbKeeperBackendStub.cpp
)
target_include_directories(test-backend-factory PRIVATE src)
if (FDBKEEPER_HAS_FDB_C_API)
target_include_directories(test-backend-factory PRIVATE ${FDB_C_INCLUDE_DIR})
endif()
target_compile_definitions(test-backend-factory PRIVATE FDBKEEPER_HAS_FDB_C_API=${FDBKEEPER_HAS_FDB_C_API})
if (FDBKEEPER_HAS_FDB_C_API)
target_sources(fdbkeeper-service PRIVATE src/backend/FdbCapiKeeperBackend.cpp)
target_sources(test-backend-factory PRIVATE src/backend/FdbCapiKeeperBackend.cpp)
target_link_libraries(fdbkeeper-service PRIVATE ${FDB_C_LIBRARY})
target_link_libraries(test-backend-factory PRIVATE ${FDB_C_LIBRARY})
target_compile_definitions(fdbkeeper-service PRIVATE FDB_API_VERSION=730)
target_compile_definitions(test-backend-factory PRIVATE FDB_API_VERSION=730)
endif()
add_test(
NAME protocol_smoke
COMMAND
${Python3_EXECUTABLE}
${CMAKE_CURRENT_SOURCE_DIR}/tests/test_protocol.py
--binary $<TARGET_FILE:fdbkeeper-service>
)
add_test(
NAME cli_behavior
COMMAND
${Python3_EXECUTABLE}
${CMAKE_CURRENT_SOURCE_DIR}/tests/test_cli.py
--binary $<TARGET_FILE:fdbkeeper-service>
)
add_test(NAME backend_semantics COMMAND test-backend)
add_test(NAME backend_factory COMMAND test-backend-factory)
if (FDBKEEPER_ENABLE_REAL_FDB_INTEGRATION_TEST)
if (NOT FDBKEEPER_HAS_FDB_C_API)
message(FATAL_ERROR "FDBKEEPER_ENABLE_REAL_FDB_INTEGRATION_TEST requires FDBKEEPER_ENABLE_FDB_C_API=ON with available fdb_c headers/libs")
endif()
set(FDBKEEPER_REAL_CLUSTER_FILE_EFFECTIVE "${FDBKEEPER_REAL_CLUSTER_FILE}")
if (FDBKEEPER_REAL_CLUSTER_FILE_EFFECTIVE STREQUAL "")
if (DEFINED ENV{FDB_CLUSTER_FILE} AND NOT "$ENV{FDB_CLUSTER_FILE}" STREQUAL "")
set(FDBKEEPER_REAL_CLUSTER_FILE_EFFECTIVE "$ENV{FDB_CLUSTER_FILE}")
endif()
endif()
if (FDBKEEPER_REAL_CLUSTER_FILE_EFFECTIVE STREQUAL "")
message(FATAL_ERROR "Real FDB integration test enabled, but no cluster file is provided. Set -DFDBKEEPER_REAL_CLUSTER_FILE=... or FDB_CLUSTER_FILE env var.")
endif()
# Keep generic CLI behavior test deterministic in environments where system default cluster file is stale.
set_tests_properties(cli_behavior PROPERTIES ENVIRONMENT "FDB_CLUSTER_FILE=${FDBKEEPER_REAL_CLUSTER_FILE_EFFECTIVE}")
get_filename_component(FDB_C_LIBRARY_DIR "${FDB_C_LIBRARY}" DIRECTORY)
add_test(
NAME fdb_real_integration
COMMAND
${Python3_EXECUTABLE}
${CMAKE_CURRENT_SOURCE_DIR}/tests/test_fdb_real.py
--binary $<TARGET_FILE:fdbkeeper-service>
--cluster-file ${FDBKEEPER_REAL_CLUSTER_FILE_EFFECTIVE}
--lib-dir ${FDB_C_LIBRARY_DIR}
)
add_test(
NAME fdb_real_protocol_suite
COMMAND
${Python3_EXECUTABLE}
${CMAKE_CURRENT_SOURCE_DIR}/tests/test_protocol.py
--binary $<TARGET_FILE:fdbkeeper-service>
--backend fdb
--cluster-file ${FDBKEEPER_REAL_CLUSTER_FILE_EFFECTIVE}
--lib-dir ${FDB_C_LIBRARY_DIR}
)
endif()