Skip to content

Commit 6342526

Browse files
committed
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
1 parent 7992b14 commit 6342526

File tree

2 files changed

+101
-1
lines changed

2 files changed

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

0 commit comments

Comments
 (0)