Validate operations and preconditions
This commit is contained in:
@@ -132,6 +132,289 @@ TEST_CASE("CommitRequest basic parsing") {
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE("CommitRequest precondition and operation validation") {
|
||||
CommitRequest request;
|
||||
|
||||
SUBCASE("Valid point_read precondition") {
|
||||
std::string json = R"({
|
||||
"leader_id": "leader456",
|
||||
"read_version": 12345,
|
||||
"preconditions": [
|
||||
{
|
||||
"type": "point_read",
|
||||
"key": "dGVzdA=="
|
||||
}
|
||||
]
|
||||
})";
|
||||
|
||||
REQUIRE(request.parse_json(json));
|
||||
REQUIRE(request.is_parse_complete());
|
||||
}
|
||||
|
||||
SUBCASE("Invalid point_read precondition - missing key") {
|
||||
std::string json = R"({
|
||||
"leader_id": "leader456",
|
||||
"read_version": 12345,
|
||||
"preconditions": [
|
||||
{
|
||||
"type": "point_read"
|
||||
}
|
||||
]
|
||||
})";
|
||||
|
||||
REQUIRE_FALSE(request.parse_json(json));
|
||||
REQUIRE_FALSE(request.is_parse_complete());
|
||||
}
|
||||
|
||||
SUBCASE("Valid point_read precondition - empty key") {
|
||||
std::string json = R"({
|
||||
"leader_id": "leader456",
|
||||
"read_version": 12345,
|
||||
"preconditions": [
|
||||
{
|
||||
"type": "point_read",
|
||||
"key": ""
|
||||
}
|
||||
]
|
||||
})";
|
||||
|
||||
REQUIRE(request.parse_json(json));
|
||||
REQUIRE(request.is_parse_complete());
|
||||
}
|
||||
|
||||
SUBCASE("Valid range_read precondition") {
|
||||
std::string json = R"({
|
||||
"leader_id": "leader456",
|
||||
"read_version": 12345,
|
||||
"preconditions": [
|
||||
{
|
||||
"type": "range_read",
|
||||
"begin": "dGVzdA==",
|
||||
"end": "dGVzdFo="
|
||||
}
|
||||
]
|
||||
})";
|
||||
|
||||
REQUIRE(request.parse_json(json));
|
||||
REQUIRE(request.is_parse_complete());
|
||||
}
|
||||
|
||||
SUBCASE("Valid range_read precondition - empty begin/end") {
|
||||
std::string json = R"({
|
||||
"leader_id": "leader456",
|
||||
"read_version": 12345,
|
||||
"preconditions": [
|
||||
{
|
||||
"type": "range_read",
|
||||
"begin": "",
|
||||
"end": ""
|
||||
}
|
||||
]
|
||||
})";
|
||||
|
||||
REQUIRE(request.parse_json(json));
|
||||
REQUIRE(request.is_parse_complete());
|
||||
}
|
||||
|
||||
SUBCASE("Invalid range_read precondition - missing begin") {
|
||||
std::string json = R"({
|
||||
"leader_id": "leader456",
|
||||
"read_version": 12345,
|
||||
"preconditions": [
|
||||
{
|
||||
"type": "range_read",
|
||||
"end": "dGVzdFo="
|
||||
}
|
||||
]
|
||||
})";
|
||||
|
||||
REQUIRE_FALSE(request.parse_json(json));
|
||||
REQUIRE_FALSE(request.is_parse_complete());
|
||||
}
|
||||
|
||||
SUBCASE("Invalid range_read precondition - missing end") {
|
||||
std::string json = R"({
|
||||
"leader_id": "leader456",
|
||||
"read_version": 12345,
|
||||
"preconditions": [
|
||||
{
|
||||
"type": "range_read",
|
||||
"begin": "dGVzdA=="
|
||||
}
|
||||
]
|
||||
})";
|
||||
|
||||
REQUIRE_FALSE(request.parse_json(json));
|
||||
REQUIRE_FALSE(request.is_parse_complete());
|
||||
}
|
||||
|
||||
SUBCASE("Valid write operation") {
|
||||
std::string json = R"({
|
||||
"leader_id": "leader456",
|
||||
"read_version": 12345,
|
||||
"operations": [
|
||||
{
|
||||
"type": "write",
|
||||
"key": "dGVzdA==",
|
||||
"value": "dmFsdWU="
|
||||
}
|
||||
]
|
||||
})";
|
||||
|
||||
REQUIRE(request.parse_json(json));
|
||||
REQUIRE(request.is_parse_complete());
|
||||
}
|
||||
|
||||
SUBCASE("Valid write operation - empty key and value") {
|
||||
std::string json = R"({
|
||||
"leader_id": "leader456",
|
||||
"read_version": 12345,
|
||||
"operations": [
|
||||
{
|
||||
"type": "write",
|
||||
"key": "",
|
||||
"value": ""
|
||||
}
|
||||
]
|
||||
})";
|
||||
|
||||
REQUIRE(request.parse_json(json));
|
||||
REQUIRE(request.is_parse_complete());
|
||||
}
|
||||
|
||||
SUBCASE("Invalid write operation - missing key") {
|
||||
std::string json = R"({
|
||||
"leader_id": "leader456",
|
||||
"read_version": 12345,
|
||||
"operations": [
|
||||
{
|
||||
"type": "write",
|
||||
"value": "dmFsdWU="
|
||||
}
|
||||
]
|
||||
})";
|
||||
|
||||
REQUIRE_FALSE(request.parse_json(json));
|
||||
REQUIRE_FALSE(request.is_parse_complete());
|
||||
}
|
||||
|
||||
SUBCASE("Invalid write operation - missing value") {
|
||||
std::string json = R"({
|
||||
"leader_id": "leader456",
|
||||
"read_version": 12345,
|
||||
"operations": [
|
||||
{
|
||||
"type": "write",
|
||||
"key": "dGVzdA=="
|
||||
}
|
||||
]
|
||||
})";
|
||||
|
||||
REQUIRE_FALSE(request.parse_json(json));
|
||||
REQUIRE_FALSE(request.is_parse_complete());
|
||||
}
|
||||
|
||||
SUBCASE("Valid delete operation") {
|
||||
std::string json = R"({
|
||||
"leader_id": "leader456",
|
||||
"read_version": 12345,
|
||||
"operations": [
|
||||
{
|
||||
"type": "delete",
|
||||
"key": "dGVzdA=="
|
||||
}
|
||||
]
|
||||
})";
|
||||
|
||||
REQUIRE(request.parse_json(json));
|
||||
REQUIRE(request.is_parse_complete());
|
||||
}
|
||||
|
||||
SUBCASE("Invalid delete operation - missing key") {
|
||||
std::string json = R"({
|
||||
"leader_id": "leader456",
|
||||
"read_version": 12345,
|
||||
"operations": [
|
||||
{
|
||||
"type": "delete"
|
||||
}
|
||||
]
|
||||
})";
|
||||
|
||||
REQUIRE_FALSE(request.parse_json(json));
|
||||
REQUIRE_FALSE(request.is_parse_complete());
|
||||
}
|
||||
|
||||
SUBCASE("Valid range_delete operation") {
|
||||
std::string json = R"({
|
||||
"leader_id": "leader456",
|
||||
"read_version": 12345,
|
||||
"operations": [
|
||||
{
|
||||
"type": "range_delete",
|
||||
"begin": "dGVzdA==",
|
||||
"end": "dGVzdFo="
|
||||
}
|
||||
]
|
||||
})";
|
||||
|
||||
REQUIRE(request.parse_json(json));
|
||||
REQUIRE(request.is_parse_complete());
|
||||
}
|
||||
|
||||
SUBCASE("Invalid range_delete operation - missing begin") {
|
||||
std::string json = R"({
|
||||
"leader_id": "leader456",
|
||||
"read_version": 12345,
|
||||
"operations": [
|
||||
{
|
||||
"type": "range_delete",
|
||||
"end": "dGVzdFo="
|
||||
}
|
||||
]
|
||||
})";
|
||||
|
||||
REQUIRE_FALSE(request.parse_json(json));
|
||||
REQUIRE_FALSE(request.is_parse_complete());
|
||||
}
|
||||
|
||||
SUBCASE("Invalid range_delete operation - missing end") {
|
||||
std::string json = R"({
|
||||
"leader_id": "leader456",
|
||||
"read_version": 12345,
|
||||
"operations": [
|
||||
{
|
||||
"type": "range_delete",
|
||||
"begin": "dGVzdA=="
|
||||
}
|
||||
]
|
||||
})";
|
||||
|
||||
REQUIRE_FALSE(request.parse_json(json));
|
||||
REQUIRE_FALSE(request.is_parse_complete());
|
||||
}
|
||||
|
||||
SUBCASE("Mixed valid and invalid operations") {
|
||||
std::string json = R"({
|
||||
"leader_id": "leader456",
|
||||
"read_version": 12345,
|
||||
"operations": [
|
||||
{
|
||||
"type": "write",
|
||||
"key": "dGVzdA==",
|
||||
"value": "dmFsdWU="
|
||||
},
|
||||
{
|
||||
"type": "delete"
|
||||
}
|
||||
]
|
||||
})";
|
||||
|
||||
REQUIRE_FALSE(request.parse_json(json));
|
||||
REQUIRE_FALSE(request.is_parse_complete());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE("CommitRequest memory management") {
|
||||
CommitRequest request;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user