KineticStatus KineticClient_Delete(KineticSessionHandle handle, KineticEntry* const entry, KineticCompletionClosure* closure) { assert(entry != NULL); KineticStatus status; KineticOperation* operation; status = KineticClient_CreateOperation(&operation, handle); if (status != KINETIC_STATUS_SUCCESS) {return status;} // Initialize request KineticOperation_BuildDelete(operation, entry); if (closure != NULL) {operation->closure = *closure;} // Execute the operation return KineticClient_ExecuteOperation(operation); }
void test_KineticOperation_BuildGet_should_build_a_GET_operation(void) { LOG_LOCATION; const ByteArray key = ByteArray_CreateWithCString("foobar"); ByteArray value = {.data = ValueData, .len = sizeof(ValueData)}; KineticEntry entry = { .key = ByteBuffer_CreateWithArray(key), .value = ByteBuffer_CreateWithArray(value), }; KineticConnection_IncrementSequence_Expect(&Connection); KineticMessage_ConfigureKeyValue_Expect(&Request.protoData.message, &entry); KineticOperation_BuildGet(&Operation, &entry); // GET // The GET operation is used to retrieve the value and metadata for a given key. // // Request Message: // command { // header { // // See above for descriptions of these fields // clusterVersion: ... // identity: ... // connectionID: ... // sequence: ... // // // The mesageType should be GET // messageType: GET TEST_ASSERT_TRUE(Request.proto->command->header->has_messageType); TEST_ASSERT_EQUAL(KINETIC_PROTO_MESSAGE_TYPE_GET, Request.proto->command->header->messageType); // } // body { // keyValue { // // See above // key: "..." // } // } // } // // See above // hmac: "..." TEST_ASSERT_ByteBuffer_NULL(Request.entry.value); TEST_ASSERT_EQUAL_ByteArray(value, Operation.response->entry.value.array); TEST_ASSERT_EQUAL(0, Operation.response->entry.value.bytesUsed); } void test_KineticOperation_BuildGet_should_build_a_GET_operation_requesting_metadata_only(void) { LOG_LOCATION; const ByteArray key = ByteArray_CreateWithCString("foobar"); ByteArray value = ByteArray_Create(ValueData, sizeof(ValueData)); KineticEntry entry = { .key = ByteBuffer_CreateWithArray(key), .metadataOnly = true, .value = ByteBuffer_CreateWithArray(value), }; KineticConnection_IncrementSequence_Expect(&Connection); KineticMessage_ConfigureKeyValue_Expect(&Request.protoData.message, &entry); KineticOperation_BuildGet(&Operation, &entry); // GET // The GET operation is used to retrieve the value and metadata for a given key. // // Request Message: // command { // header { // // See above for descriptions of these fields // clusterVersion: ... // identity: ... // connectionID: ... // sequence: ... // // // The mesageType should be GET // messageType: GET TEST_ASSERT_TRUE(Request.proto->command->header->has_messageType); TEST_ASSERT_EQUAL(KINETIC_PROTO_MESSAGE_TYPE_GET, Request.proto->command->header->messageType); // } // body { // keyValue { // // See above // key: "..." // } // } // } // // See above // hmac: "..." TEST_ASSERT_ByteBuffer_NULL(Request.entry.value); TEST_ASSERT_ByteBuffer_NULL(Response.entry.value); } void test_KineticOperation_BuildDelete_should_build_a_DELETE_operation(void) { LOG_LOCATION; const ByteArray key = ByteArray_CreateWithCString("foobar"); KineticEntry entry = {.key = ByteBuffer_CreateWithArray(key)}; KineticConnection_IncrementSequence_Expect(&Connection); KineticMessage_ConfigureKeyValue_Expect(&Request.protoData.message, &entry); KineticOperation_BuildDelete(&Operation, &entry); // The `DELETE` operation removes the entry for a given key. It respects the // same locking behavior around `dbVersion` and `force` as described in the previous sections. // The following request will remove a key value pair to the store. // // ``` // command { // // See top level cross cutting concerns for header details // header { // clusterVersion: ... // identity: ... // connectionID: ... // sequence: ... // // messageType should be DELETE // messageType: DELETE TEST_ASSERT_TRUE(Request.proto->command->header->has_messageType); TEST_ASSERT_EQUAL(KINETIC_PROTO_MESSAGE_TYPE_DELETE, Request.proto->command->header->messageType); // } // body { // keyValue { // key: "..." // // See write operation cross cutting concerns // synchronization: ... // } // } // } // hmac: "..." TEST_ASSERT_ByteBuffer_NULL(Request.entry.value); TEST_ASSERT_ByteBuffer_NULL(Response.entry.value); }