mirror of
https://github.com/guanzhi/GmSSL.git
synced 2026-06-19 19:33:38 +08:00
Update TLS cmake
This commit is contained in:
183
cmake/tls_command_test.cmake
Normal file
183
cmake/tls_command_test.cmake
Normal 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()
|
||||
Reference in New Issue
Block a user