void verifySerializedValue(const std::string& serializedVal, uint64_t expectedReqId, mc_msg_t* expectedMsg, const char* value) { // check if the value was serialized correctly um_parser_t parser; EXPECT_EQ(um_parser_init(&parser), 0); uint64_t parsedReqId = -1; mc_msg_t* parsedMsg = nullptr; EXPECT_EQ(um_consume_one_message(&parser, (uint8_t *)serializedVal.c_str(), serializedVal.length(), &parsedReqId, &parsedMsg), serializedVal.length()); EXPECT_NE(parsedMsg, nullptr); EXPECT_EQ(parsedReqId, expectedReqId); EXPECT_EQ(parsedMsg->op, expectedMsg->op); EXPECT_EQ(parsedMsg->result, expectedMsg->result); EXPECT_EQ(parsedMsg->flags, expectedMsg->flags); EXPECT_EQ(parsedMsg->value.len, strlen(value)); EXPECT_EQ(strncmp(parsedMsg->value.str, value, strlen(value)), 0); mc_msg_decref(parsedMsg); }
int um_consume_buffer(um_parser_t* um_parser, const uint8_t* buf, size_t nbuf, msg_ready_cb* msg_ready, void* context) { while (nbuf > 0) { uint64_t reqid; mc_msg_t* msg; ssize_t consumed = um_consume_one_message(um_parser, buf, nbuf, &reqid, &msg); if (consumed <= 0) { return -1; } FBI_ASSERT(consumed <= nbuf); if (msg != NULL) { msg_ready(context, reqid, msg); buf += consumed; nbuf -= consumed; } else { FBI_ASSERT(consumed == nbuf); break; } } return 0; }