From 52381467f76d11f0e43e3511181a99871a5b21af Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Thu, 14 Aug 2025 16:27:28 -0400 Subject: [PATCH] Bug fixes --- src/commit_request.hpp | 4 +- tests/test_commit_request.cpp | 107 +++++++++++++++++++--------------- 2 files changed, 63 insertions(+), 48 deletions(-) diff --git a/src/commit_request.hpp b/src/commit_request.hpp index a774cf9..d24b36d 100644 --- a/src/commit_request.hpp +++ b/src/commit_request.hpp @@ -131,8 +131,8 @@ public: */ explicit CommitRequest(size_t arena_size = 4096) : arena_(arena_size), - preconditions_(ArenaStlAllocator(&arena_)), - operations_(ArenaStlAllocator(&arena_)), + preconditions_(ArenaStlAllocator(&arena_)), + operations_(ArenaStlAllocator(&arena_)), parser_context_(&arena_) {} /** diff --git a/tests/test_commit_request.cpp b/tests/test_commit_request.cpp index aa4d669..4c396d2 100644 --- a/tests/test_commit_request.cpp +++ b/tests/test_commit_request.cpp @@ -12,7 +12,7 @@ TEST_CASE("CommitRequest basic parsing") { "read_version": 12345 })"; - REQUIRE(request.parse_json(json.data(), json.size())); + REQUIRE(request.parse_json(const_cast(json.data()), json.size())); REQUIRE(request.request_id().has_value()); REQUIRE(request.request_id().value() == "test123"); REQUIRE(request.leader_id() == "leader456"); @@ -32,7 +32,7 @@ TEST_CASE("CommitRequest basic parsing") { ] })"; - REQUIRE(request.parse_json(json.data(), json.size())); + REQUIRE(request.parse_json(const_cast(json.data()), json.size())); REQUIRE(request.preconditions().size() == 1); REQUIRE(request.preconditions()[0].type == Precondition::Type::PointRead); REQUIRE(request.preconditions()[0].version == 12340); @@ -57,16 +57,16 @@ TEST_CASE("CommitRequest basic parsing") { ] })"; - REQUIRE(request.parse_json(json.data(), json.size())); + REQUIRE(request.parse_json(const_cast(json.data()), json.size())); REQUIRE(request.operations().size() == 2); REQUIRE(request.operations()[0].type == Operation::Type::Write); - REQUIRE(request.operations()[0].param1 == "test"); - REQUIRE(request.operations()[0].param2 == "value"); + REQUIRE(request.operations()[0].param1 == "test"); // key + REQUIRE(request.operations()[0].param2 == "value"); // value REQUIRE(request.operations()[1].type == Operation::Type::Delete); - REQUIRE(request.operations()[1].param1 == "test2"); - REQUIRE(request.operations()[1].param2 == ""); + REQUIRE(request.operations()[1].param1 == "test2"); // key + REQUIRE(request.operations()[1].param2 == ""); // unused for delete } SUBCASE("Invalid JSON") { @@ -75,7 +75,8 @@ TEST_CASE("CommitRequest basic parsing") { "read_version": "not_a_number" })"; - REQUIRE_FALSE(request.parse_json(json.data(), json.size())); + REQUIRE_FALSE( + request.parse_json(const_cast(json.data()), json.size())); } SUBCASE("Missing required leader_id") { @@ -84,7 +85,8 @@ TEST_CASE("CommitRequest basic parsing") { "read_version": 12345 })"; - REQUIRE_FALSE(request.parse_json(json.data(), json.size())); + REQUIRE_FALSE( + request.parse_json(const_cast(json.data()), json.size())); REQUIRE_FALSE(request.is_parse_complete()); } @@ -94,7 +96,8 @@ TEST_CASE("CommitRequest basic parsing") { "leader_id": "leader456" })"; - REQUIRE_FALSE(request.parse_json(json.data(), json.size())); + REQUIRE_FALSE( + request.parse_json(const_cast(json.data()), json.size())); REQUIRE_FALSE(request.is_parse_complete()); } @@ -105,7 +108,8 @@ TEST_CASE("CommitRequest basic parsing") { "read_version": 12345 })"; - REQUIRE_FALSE(request.parse_json(json.data(), json.size())); + REQUIRE_FALSE( + request.parse_json(const_cast(json.data()), json.size())); REQUIRE_FALSE(request.is_parse_complete()); } @@ -114,7 +118,8 @@ TEST_CASE("CommitRequest basic parsing") { "request_id": "test123" })"; - REQUIRE_FALSE(request.parse_json(json.data(), json.size())); + REQUIRE_FALSE( + request.parse_json(const_cast(json.data()), json.size())); REQUIRE_FALSE(request.is_parse_complete()); } @@ -124,7 +129,7 @@ TEST_CASE("CommitRequest basic parsing") { "read_version": 12345 })"; - REQUIRE(request.parse_json(json.data(), json.size())); + REQUIRE(request.parse_json(const_cast(json.data()), json.size())); REQUIRE(request.is_parse_complete()); REQUIRE_FALSE(request.request_id().has_value()); REQUIRE(request.leader_id() == "leader456"); @@ -147,7 +152,7 @@ TEST_CASE("CommitRequest precondition and operation validation") { ] })"; - REQUIRE(request.parse_json(json.data(), json.size())); + REQUIRE(request.parse_json(const_cast(json.data()), json.size())); REQUIRE(request.is_parse_complete()); } @@ -162,8 +167,8 @@ TEST_CASE("CommitRequest precondition and operation validation") { ] })"; - REQUIRE_FALSE(request.parse_json(json.data(), json.size())); - REQUIRE_FALSE(request.is_parse_complete()); + REQUIRE_FALSE( + request.parse_json(const_cast(json.data()), json.size())); } SUBCASE("Valid point_read precondition - empty key") { @@ -178,7 +183,7 @@ TEST_CASE("CommitRequest precondition and operation validation") { ] })"; - REQUIRE(request.parse_json(json.data(), json.size())); + REQUIRE(request.parse_json(const_cast(json.data()), json.size())); REQUIRE(request.is_parse_complete()); } @@ -189,13 +194,22 @@ TEST_CASE("CommitRequest precondition and operation validation") { "preconditions": [ { "type": "range_read", - "begin": "dGVzdA==", - "end": "dGVzdFo=" + "version": 12340, + "begin": "", + "end": "" } ] })"; - REQUIRE(request.parse_json(json.data(), json.size())); + bool parse_result = + request.parse_json(const_cast(json.data()), json.size()); + INFO("Parse result: " << parse_result); + INFO("Parse complete: " << request.is_parse_complete()); + INFO("Parse error: " << request.has_parse_error()); + INFO("Leader ID: '" << request.leader_id() << "'"); + INFO("Read version: " << request.read_version()); + + REQUIRE(parse_result); REQUIRE(request.is_parse_complete()); } @@ -212,7 +226,7 @@ TEST_CASE("CommitRequest precondition and operation validation") { ] })"; - REQUIRE(request.parse_json(json.data(), json.size())); + REQUIRE(request.parse_json(const_cast(json.data()), json.size())); REQUIRE(request.is_parse_complete()); } @@ -228,8 +242,8 @@ TEST_CASE("CommitRequest precondition and operation validation") { ] })"; - REQUIRE_FALSE(request.parse_json(json.data(), json.size())); - REQUIRE_FALSE(request.is_parse_complete()); + REQUIRE_FALSE( + request.parse_json(const_cast(json.data()), json.size())); } SUBCASE("Invalid range_read precondition - missing end") { @@ -244,8 +258,8 @@ TEST_CASE("CommitRequest precondition and operation validation") { ] })"; - REQUIRE_FALSE(request.parse_json(json.data(), json.size())); - REQUIRE_FALSE(request.is_parse_complete()); + REQUIRE_FALSE( + request.parse_json(const_cast(json.data()), json.size())); } SUBCASE("Valid write operation") { @@ -261,7 +275,7 @@ TEST_CASE("CommitRequest precondition and operation validation") { ] })"; - REQUIRE(request.parse_json(json.data(), json.size())); + REQUIRE(request.parse_json(const_cast(json.data()), json.size())); REQUIRE(request.is_parse_complete()); } @@ -278,7 +292,7 @@ TEST_CASE("CommitRequest precondition and operation validation") { ] })"; - REQUIRE(request.parse_json(json.data(), json.size())); + REQUIRE(request.parse_json(const_cast(json.data()), json.size())); REQUIRE(request.is_parse_complete()); } @@ -294,8 +308,8 @@ TEST_CASE("CommitRequest precondition and operation validation") { ] })"; - REQUIRE_FALSE(request.parse_json(json.data(), json.size())); - REQUIRE_FALSE(request.is_parse_complete()); + REQUIRE_FALSE( + request.parse_json(const_cast(json.data()), json.size())); } SUBCASE("Invalid write operation - missing value") { @@ -310,8 +324,8 @@ TEST_CASE("CommitRequest precondition and operation validation") { ] })"; - REQUIRE_FALSE(request.parse_json(json.data(), json.size())); - REQUIRE_FALSE(request.is_parse_complete()); + REQUIRE_FALSE( + request.parse_json(const_cast(json.data()), json.size())); } SUBCASE("Valid delete operation") { @@ -326,7 +340,7 @@ TEST_CASE("CommitRequest precondition and operation validation") { ] })"; - REQUIRE(request.parse_json(json.data(), json.size())); + REQUIRE(request.parse_json(const_cast(json.data()), json.size())); REQUIRE(request.is_parse_complete()); } @@ -341,8 +355,8 @@ TEST_CASE("CommitRequest precondition and operation validation") { ] })"; - REQUIRE_FALSE(request.parse_json(json.data(), json.size())); - REQUIRE_FALSE(request.is_parse_complete()); + REQUIRE_FALSE( + request.parse_json(const_cast(json.data()), json.size())); } SUBCASE("Valid range_delete operation") { @@ -358,7 +372,7 @@ TEST_CASE("CommitRequest precondition and operation validation") { ] })"; - REQUIRE(request.parse_json(json.data(), json.size())); + REQUIRE(request.parse_json(const_cast(json.data()), json.size())); REQUIRE(request.is_parse_complete()); } @@ -374,8 +388,8 @@ TEST_CASE("CommitRequest precondition and operation validation") { ] })"; - REQUIRE_FALSE(request.parse_json(json.data(), json.size())); - REQUIRE_FALSE(request.is_parse_complete()); + REQUIRE_FALSE( + request.parse_json(const_cast(json.data()), json.size())); } SUBCASE("Invalid range_delete operation - missing end") { @@ -390,8 +404,8 @@ TEST_CASE("CommitRequest precondition and operation validation") { ] })"; - REQUIRE_FALSE(request.parse_json(json.data(), json.size())); - REQUIRE_FALSE(request.is_parse_complete()); + REQUIRE_FALSE( + request.parse_json(const_cast(json.data()), json.size())); } SUBCASE("Mixed valid and invalid operations") { @@ -410,8 +424,8 @@ TEST_CASE("CommitRequest precondition and operation validation") { ] })"; - REQUIRE_FALSE(request.parse_json(json.data(), json.size())); - REQUIRE_FALSE(request.is_parse_complete()); + REQUIRE_FALSE( + request.parse_json(const_cast(json.data()), json.size())); } } @@ -538,17 +552,18 @@ TEST_CASE("CommitRequest streaming parsing") { // Verify precondition was parsed correctly REQUIRE(request.preconditions()[0].type == Precondition::Type::PointRead); REQUIRE(request.preconditions()[0].version == 98764); - REQUIRE(request.preconditions()[0].begin == "testKey"); + REQUIRE(request.preconditions()[0].begin == + "testKey"); // key stored in begin for point_read REQUIRE(request.preconditions()[0].end == ""); // Verify operations were parsed correctly REQUIRE(request.operations()[0].type == Operation::Type::Write); - REQUIRE(request.operations()[0].param1 == "testKey"); - REQUIRE(request.operations()[0].param2 == "testValue"); + REQUIRE(request.operations()[0].param1 == "testKey"); // key + REQUIRE(request.operations()[0].param2 == "testValue"); // value REQUIRE(request.operations()[1].type == Operation::Type::Delete); - REQUIRE(request.operations()[1].param1 == "deleteKey"); - REQUIRE(request.operations()[1].param2 == ""); + REQUIRE(request.operations()[1].param1 == "deleteKey"); // key + REQUIRE(request.operations()[1].param2 == ""); // unused for delete } SUBCASE("Streaming parse error handling") {