diff options
Diffstat (limited to 'tests/lifecycle.cmake')
| -rw-r--r-- | tests/lifecycle.cmake | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/tests/lifecycle.cmake b/tests/lifecycle.cmake new file mode 100644 index 0000000..8d2f97d --- /dev/null +++ b/tests/lifecycle.cmake @@ -0,0 +1,51 @@ +foreach(variable SERVER WRITE_INPUT HEALTH_INPUT DATA_DIR) + if(NOT DEFINED ${variable}) + message(FATAL_ERROR "${variable} is required") + endif() +endforeach() + +file(REMOVE_RECURSE "${DATA_DIR}") +execute_process( + COMMAND "${SERVER}" --data-dir "${DATA_DIR}" + INPUT_FILE "${WRITE_INPUT}" + OUTPUT_VARIABLE write_output + ERROR_VARIABLE write_error + RESULT_VARIABLE write_result +) +if(NOT write_result EQUAL 0) + message(FATAL_ERROR "initial write failed: ${write_error}") +endif() +string(REGEX MATCH "message_id[^0-9A-Z]+([0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z])" match "${write_output}") +set(message_id "${CMAKE_MATCH_1}") +if(NOT message_id) + message(FATAL_ERROR "could not extract message ID from: ${write_output}") +endif() + +set(delete_input "${DATA_DIR}/delete.jsonl") +file(WRITE "${delete_input}" + "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"initialize\",\"params\":{\"protocolVersion\":\"2024-11-05\",\"capabilities\":{},\"clientInfo\":{\"name\":\"lifecycle\",\"version\":\"1\"}}}\n" + "{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"tools/call\",\"params\":{\"name\":\"delete_message\",\"arguments\":{\"message_id\":\"${message_id}\",\"session_id\":\"lifecycle\"}}}\n" + "{\"jsonrpc\":\"2.0\",\"id\":3,\"method\":\"tools/call\",\"params\":{\"name\":\"read_messages\",\"arguments\":{\"session_id\":\"lifecycle\"}}}\n" + "{\"jsonrpc\":\"2.0\",\"id\":4,\"method\":\"tools/call\",\"params\":{\"name\":\"rebuild_index\",\"arguments\":{}}}\n" +) +execute_process(COMMAND "${SERVER}" --data-dir "${DATA_DIR}" INPUT_FILE "${delete_input}" + OUTPUT_VARIABLE delete_output ERROR_VARIABLE delete_error RESULT_VARIABLE delete_result) +if(NOT delete_result EQUAL 0 OR NOT delete_output MATCHES "records_removed[^0-9]+1") + message(FATAL_ERROR "delete/compaction failed: ${delete_output} ${delete_error}") +endif() + +file(READ "${DATA_DIR}/active.log" compacted_hex HEX) +string(FIND "${compacted_hex}" "7365637265742d746f2d72656d6f7665" secret_position) +if(NOT secret_position EQUAL -1) + message(FATAL_ERROR "compacted log still contains deleted content") +endif() + +file(APPEND "${DATA_DIR}/active.log" "TC") +file(WRITE "${DATA_DIR}/snapshot.bin" "invalid snapshot") +execute_process(COMMAND "${SERVER}" --data-dir "${DATA_DIR}" INPUT_FILE "${HEALTH_INPUT}" + OUTPUT_VARIABLE recovery_output ERROR_VARIABLE recovery_error RESULT_VARIABLE recovery_result) +string(FIND "${recovery_output}" "secret-to-remove" recovered_secret_position) +if(NOT recovery_result EQUAL 0 OR NOT recovery_output MATCHES "recovered_tail[^a-z]+true" OR + NOT recovery_output MATCHES "snapshot_valid[^a-z]+false" OR NOT recovered_secret_position EQUAL -1) + message(FATAL_ERROR "restart/tail recovery failed: ${recovery_output} ${recovery_error}") +endif() |
