Update TLS cmake

This commit is contained in:
Zhi Guan
2026-06-15 15:21:33 +08:00
parent f117eb25ef
commit 3f84d721a6
8 changed files with 615 additions and 216 deletions

View File

@@ -0,0 +1,183 @@
function(gmssl_require_file file)
if(NOT EXISTS "${file}")
message(FATAL_ERROR "required file does not exist: ${file}")
endif()
endfunction()
function(gmssl_run_command_interop_test)
set(one_value_args TEST_NAME PORT SERVER_COMMAND CLIENT_COMMAND EXPECT_CLIENT_LOG EXPECT_SERVER_LOG)
cmake_parse_arguments(TEST "" "${one_value_args}" "" ${ARGN})
if(NOT TEST_TEST_NAME)
message(FATAL_ERROR "TEST_NAME is required")
endif()
if(NOT TEST_PORT)
message(FATAL_ERROR "PORT is required")
endif()
if(NOT TEST_SERVER_COMMAND)
message(FATAL_ERROR "SERVER_COMMAND is required")
endif()
if(NOT TEST_CLIENT_COMMAND)
message(FATAL_ERROR "CLIENT_COMMAND is required")
endif()
set(SERVER_LOG "${TEST_TEST_NAME}_server.log")
set(CLIENT_LOG "${TEST_TEST_NAME}_client.log")
set(SERVER_PID_FILE "${TEST_TEST_NAME}_server.pid")
file(REMOVE "${SERVER_LOG}" "${CLIENT_LOG}" "${SERVER_PID_FILE}")
execute_process(
COMMAND bash -c "nohup ${TEST_SERVER_COMMAND} > ${SERVER_LOG} 2>&1 & echo $! > ${SERVER_PID_FILE}"
RESULT_VARIABLE SERVER_RESULT
TIMEOUT 5
)
if(NOT ${SERVER_RESULT} EQUAL 0)
message(FATAL_ERROR "server failed to start")
endif()
execute_process(COMMAND ${CMAKE_COMMAND} -E sleep 1)
execute_process(
COMMAND bash -c "${TEST_CLIENT_COMMAND} > ${CLIENT_LOG} 2>&1"
RESULT_VARIABLE CLIENT_RESULT
TIMEOUT 30
)
execute_process(
COMMAND bash -c "if test -f ${SERVER_PID_FILE}; then kill $(cat ${SERVER_PID_FILE}) 2>/dev/null || true; fi"
OUTPUT_QUIET
ERROR_QUIET
)
execute_process(COMMAND ${CMAKE_COMMAND} -E sleep 1)
set(SERVER_LOG_CONTENT "")
set(CLIENT_LOG_CONTENT "")
if(EXISTS "${SERVER_LOG}")
file(READ "${SERVER_LOG}" SERVER_LOG_CONTENT)
endif()
if(EXISTS "${CLIENT_LOG}")
file(READ "${CLIENT_LOG}" CLIENT_LOG_CONTENT)
endif()
if(NOT ${CLIENT_RESULT} EQUAL 0)
message(STATUS "${SERVER_LOG}:\n${SERVER_LOG_CONTENT}")
message(STATUS "${CLIENT_LOG}:\n${CLIENT_LOG_CONTENT}")
message(FATAL_ERROR "client failed with result ${CLIENT_RESULT}")
endif()
if(TEST_EXPECT_CLIENT_LOG)
string(FIND "${CLIENT_LOG_CONTENT}" "${TEST_EXPECT_CLIENT_LOG}" FOUND_INDEX)
if(${FOUND_INDEX} EQUAL -1)
message(STATUS "${CLIENT_LOG}:\n${CLIENT_LOG_CONTENT}")
message(FATAL_ERROR "client log does not contain expected text: ${TEST_EXPECT_CLIENT_LOG}")
endif()
endif()
if(TEST_EXPECT_SERVER_LOG)
string(FIND "${SERVER_LOG_CONTENT}" "${TEST_EXPECT_SERVER_LOG}" FOUND_INDEX)
if(${FOUND_INDEX} EQUAL -1)
message(STATUS "${SERVER_LOG}:\n${SERVER_LOG_CONTENT}")
message(FATAL_ERROR "server log does not contain expected text: ${TEST_EXPECT_SERVER_LOG}")
endif()
endif()
endfunction()
function(gmssl_run_tls_command_test)
set(one_value_args TEST_NAME PORT EXPECT_CLIENT_LOG EXPECT_SERVER_LOG)
set(multi_value_args SERVER_ARGS CLIENT_ARGS)
cmake_parse_arguments(TEST "" "${one_value_args}" "${multi_value_args}" ${ARGN})
if(NOT TEST_TEST_NAME)
message(FATAL_ERROR "TEST_NAME is required")
endif()
if(NOT TEST_PORT)
message(FATAL_ERROR "PORT is required")
endif()
if(NOT TEST_SERVER_ARGS)
message(FATAL_ERROR "SERVER_ARGS is required")
endif()
if(NOT TEST_CLIENT_ARGS)
message(FATAL_ERROR "CLIENT_ARGS is required")
endif()
list(GET TEST_SERVER_ARGS 0 SERVER_TOOL)
set(SERVER_LOG "${TEST_TEST_NAME}_server.log")
set(CLIENT_LOG "${TEST_TEST_NAME}_client.log")
set(SERVER_PID_FILE "${TEST_TEST_NAME}_server.pid")
file(REMOVE "${SERVER_LOG}" "${CLIENT_LOG}" "${SERVER_PID_FILE}")
file(WRITE "${TEST_TEST_NAME}_message.txt" "GmSSL ${TEST_TEST_NAME} command test\n")
file(WRITE "${TEST_TEST_NAME}_early_data.txt" "GmSSL ${TEST_TEST_NAME} early data\n")
string(REPLACE ";" " " SERVER_CMD "${TEST_SERVER_ARGS}")
string(REPLACE ";" " " CLIENT_CMD "${TEST_CLIENT_ARGS}")
execute_process(
COMMAND pkill -f "gmssl ${SERVER_TOOL} -port ${TEST_PORT}"
OUTPUT_QUIET
ERROR_QUIET
)
execute_process(
COMMAND bash -c "nohup bin/gmssl ${SERVER_CMD} > ${SERVER_LOG} 2>&1 & echo $! > ${SERVER_PID_FILE}"
RESULT_VARIABLE SERVER_RESULT
TIMEOUT 5
)
if(NOT ${SERVER_RESULT} EQUAL 0)
message(FATAL_ERROR "server failed to start")
endif()
execute_process(COMMAND ${CMAKE_COMMAND} -E sleep 1)
execute_process(
COMMAND bash -c "bin/gmssl ${CLIENT_CMD} > ${CLIENT_LOG} 2>&1"
RESULT_VARIABLE CLIENT_RESULT
TIMEOUT 30
)
execute_process(
COMMAND pkill -f "gmssl ${SERVER_TOOL} -port ${TEST_PORT}"
OUTPUT_QUIET
ERROR_QUIET
)
execute_process(COMMAND ${CMAKE_COMMAND} -E sleep 1)
set(SERVER_LOG_CONTENT "")
set(CLIENT_LOG_CONTENT "")
if(EXISTS "${SERVER_LOG}")
file(READ "${SERVER_LOG}" SERVER_LOG_CONTENT)
endif()
if(EXISTS "${CLIENT_LOG}")
file(READ "${CLIENT_LOG}" CLIENT_LOG_CONTENT)
endif()
if(NOT ${CLIENT_RESULT} EQUAL 0)
message(STATUS "${SERVER_LOG}:\n${SERVER_LOG_CONTENT}")
message(STATUS "${CLIENT_LOG}:\n${CLIENT_LOG_CONTENT}")
message(FATAL_ERROR "client failed with result ${CLIENT_RESULT}")
endif()
string(FIND "${CLIENT_LOG_CONTENT}" "Connection established" FOUND_INDEX)
if(${FOUND_INDEX} EQUAL -1)
message(STATUS "${SERVER_LOG}:\n${SERVER_LOG_CONTENT}")
message(STATUS "${CLIENT_LOG}:\n${CLIENT_LOG_CONTENT}")
message(FATAL_ERROR "client did not establish connection with server")
endif()
if(TEST_EXPECT_CLIENT_LOG)
string(FIND "${CLIENT_LOG_CONTENT}" "${TEST_EXPECT_CLIENT_LOG}" FOUND_INDEX)
if(${FOUND_INDEX} EQUAL -1)
message(STATUS "${CLIENT_LOG}:\n${CLIENT_LOG_CONTENT}")
message(FATAL_ERROR "client log does not contain expected text: ${TEST_EXPECT_CLIENT_LOG}")
endif()
endif()
if(TEST_EXPECT_SERVER_LOG)
string(FIND "${SERVER_LOG_CONTENT}" "${TEST_EXPECT_SERVER_LOG}" FOUND_INDEX)
if(${FOUND_INDEX} EQUAL -1)
message(STATUS "${SERVER_LOG}:\n${SERVER_LOG_CONTENT}")
message(FATAL_ERROR "server log does not contain expected text: ${TEST_EXPECT_SERVER_LOG}")
endif()
endif()
endfunction()