Skip to content

Commit 20cba2e

Browse files
authored
Support CTest (#1468)
* Add test/CMakeLists.txt to enable testing with CTest Add HTTPLIB_TEST option Downlaod GoogleTest source using FetchContent module Generate cert files to test httplib with OpenSSL * Generate cert2.pem with a new certificate request * Use the latest GoogleTest library
1 parent 0ff2e16 commit 20cba2e

File tree

2 files changed

+100
-1
lines changed

2 files changed

+100
-1
lines changed

CMakeLists.txt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
* HTTPLIB_USE_BROTLI_IF_AVAILABLE (default on)
99
* HTTPLIB_REQUIRE_BROTLI (default off)
1010
* HTTPLIB_COMPILE (default off)
11+
* HTTPLIB_TEST (default off)
1112
* BROTLI_USE_STATIC_LIBS - tells Cmake to use the static Brotli libs (only works if you have them installed).
1213
* OPENSSL_USE_STATIC_LIBS - tells Cmake to use the static OpenSSL libs (only works if you have them installed).
1314
@@ -88,7 +89,7 @@ option(HTTPLIB_COMPILE "If ON, uses a Python script to split the header into a c
8889
if(HTTPLIB_COMPILE)
8990
set(HTTPLIB_IS_COMPILED TRUE)
9091
endif()
91-
92+
option(HTTPLIB_TEST "Enables testing and builds tests" OFF)
9293
option(HTTPLIB_REQUIRE_BROTLI "Requires Brotli to be found & linked, or fails build." OFF)
9394
option(HTTPLIB_USE_BROTLI_IF_AVAILABLE "Uses Brotli (if available) to enable Brotli decompression support." ON)
9495
# Defaults to static library
@@ -278,3 +279,8 @@ install(EXPORT httplibTargets
278279
NAMESPACE ${PROJECT_NAME}::
279280
DESTINATION ${_TARGET_INSTALL_CMAKEDIR}
280281
)
282+
283+
if(HTTPLIB_TEST)
284+
include(CTest)
285+
add_subdirectory(test)
286+
endif()

test/CMakeLists.txt

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
cmake_policy(SET CMP0135 NEW)
2+
3+
include(FetchContent)
4+
include(GoogleTest)
5+
6+
set(BUILD_GMOCK OFF)
7+
set(INSTALL_GTEST OFF)
8+
set(gtest_force_shared_crt ON)
9+
10+
FetchContent_Declare(
11+
gtest
12+
URL https://github.com/google/googletest/archive/main.tar.gz
13+
)
14+
FetchContent_MakeAvailable(gtest)
15+
16+
add_executable(httplib-test test.cc)
17+
target_compile_options(httplib-test PRIVATE "$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
18+
target_link_libraries(httplib-test PRIVATE httplib GTest::gtest_main)
19+
gtest_discover_tests(httplib-test)
20+
21+
execute_process(
22+
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_LIST_DIR}/www www
23+
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_LIST_DIR}/www2 www2
24+
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_LIST_DIR}/www3 www3
25+
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_LIST_DIR}/ca-bundle.crt ca-bundle.crt
26+
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_LIST_DIR}/image.jpg image.jpg
27+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
28+
COMMAND_ERROR_IS_FATAL ANY
29+
)
30+
31+
if(HTTPLIB_IS_USING_OPENSSL)
32+
find_program(OPENSSL_COMMAND
33+
NAMES openssl
34+
PATHS ${OPENSSL_INCLUDE_DIR}/../bin
35+
REQUIRED
36+
)
37+
execute_process(
38+
COMMAND ${OPENSSL_COMMAND} genrsa 2048
39+
OUTPUT_FILE key.pem
40+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
41+
COMMAND_ERROR_IS_FATAL ANY
42+
)
43+
execute_process(
44+
COMMAND ${OPENSSL_COMMAND} req -new -batch -config ${CMAKE_CURRENT_LIST_DIR}/test.conf -key key.pem
45+
COMMAND ${OPENSSL_COMMAND} x509 -days 3650 -req -signkey key.pem
46+
OUTPUT_FILE cert.pem
47+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
48+
COMMAND_ERROR_IS_FATAL ANY
49+
)
50+
execute_process(
51+
COMMAND ${OPENSSL_COMMAND} req -x509 -new -config ${CMAKE_CURRENT_LIST_DIR}/test.conf -key key.pem -sha256 -days 3650 -nodes -out cert2.pem -extensions SAN
52+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
53+
COMMAND_ERROR_IS_FATAL ANY
54+
)
55+
execute_process(
56+
COMMAND ${OPENSSL_COMMAND} genrsa 2048
57+
OUTPUT_FILE rootCA.key.pem
58+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
59+
COMMAND_ERROR_IS_FATAL ANY
60+
)
61+
execute_process(
62+
COMMAND ${OPENSSL_COMMAND} req -x509 -new -batch -config ${CMAKE_CURRENT_LIST_DIR}/test.rootCA.conf -key rootCA.key.pem -days 1024
63+
OUTPUT_FILE rootCA.cert.pem
64+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
65+
COMMAND_ERROR_IS_FATAL ANY
66+
)
67+
execute_process(
68+
COMMAND ${OPENSSL_COMMAND} genrsa 2048
69+
OUTPUT_FILE client.key.pem
70+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
71+
COMMAND_ERROR_IS_FATAL ANY
72+
)
73+
execute_process(
74+
COMMAND ${OPENSSL_COMMAND} req -new -batch -config ${CMAKE_CURRENT_LIST_DIR}/test.conf -key client.key.pem
75+
COMMAND ${OPENSSL_COMMAND} x509 -days 370 -req -CA rootCA.cert.pem -CAkey rootCA.key.pem -CAcreateserial
76+
OUTPUT_FILE client.cert.pem
77+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
78+
COMMAND_ERROR_IS_FATAL ANY
79+
)
80+
execute_process(
81+
COMMAND ${OPENSSL_COMMAND} genrsa -passout pass:test123! 2048
82+
OUTPUT_FILE key_encrypted.pem
83+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
84+
COMMAND_ERROR_IS_FATAL ANY
85+
)
86+
execute_process(
87+
COMMAND ${OPENSSL_COMMAND} req -new -batch -config ${CMAKE_CURRENT_LIST_DIR}/test.conf -key key_encrypted.pem
88+
COMMAND ${OPENSSL_COMMAND} x509 -days 3650 -req -signkey key_encrypted.pem
89+
OUTPUT_FILE cert_encrypted.pem
90+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
91+
COMMAND_ERROR_IS_FATAL ANY
92+
)
93+
endif()

0 commit comments

Comments
 (0)