mirror of
https://github.com/guanzhi/GmSSL.git
synced 2026-06-19 19:33:38 +08:00
184 lines
5.7 KiB
CMake
184 lines
5.7 KiB
CMake
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()
|