diff options
Diffstat (limited to 'documentapi/src/tests/messages/messages50test.cpp')
-rw-r--r-- | documentapi/src/tests/messages/messages50test.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/documentapi/src/tests/messages/messages50test.cpp b/documentapi/src/tests/messages/messages50test.cpp index db82bdce54d..b50f30c1f91 100644 --- a/documentapi/src/tests/messages/messages50test.cpp +++ b/documentapi/src/tests/messages/messages50test.cpp @@ -31,6 +31,7 @@ Messages50Test::Messages50Test() putTest(DocumentProtocol::MESSAGE_GETBUCKETSTATE, TEST_METHOD(Messages50Test::testGetBucketStateMessage)); putTest(DocumentProtocol::MESSAGE_GETDOCUMENT, TEST_METHOD(Messages50Test::testGetDocumentMessage)); putTest(DocumentProtocol::MESSAGE_MAPVISITOR, TEST_METHOD(Messages50Test::testMapVisitorMessage)); + putTest(DocumentProtocol::MESSAGE_MULTIOPERATION, TEST_METHOD(Messages50Test::testMultiOperationMessage)); putTest(DocumentProtocol::MESSAGE_PUTDOCUMENT, TEST_METHOD(Messages50Test::testPutDocumentMessage)); putTest(DocumentProtocol::MESSAGE_QUERYRESULT, TEST_METHOD(Messages50Test::testQueryResultMessage)); putTest(DocumentProtocol::MESSAGE_REMOVEDOCUMENT, TEST_METHOD(Messages50Test::testRemoveDocumentMessage)); @@ -50,6 +51,7 @@ Messages50Test::Messages50Test() putTest(DocumentProtocol::REPLY_GETBUCKETSTATE, TEST_METHOD(Messages50Test::testGetBucketStateReply)); putTest(DocumentProtocol::REPLY_GETDOCUMENT, TEST_METHOD(Messages50Test::testGetDocumentReply)); putTest(DocumentProtocol::REPLY_MAPVISITOR, TEST_METHOD(Messages50Test::testMapVisitorReply)); + putTest(DocumentProtocol::REPLY_MULTIOPERATION, TEST_METHOD(Messages50Test::testMultiOperationReply)); putTest(DocumentProtocol::REPLY_PUTDOCUMENT, TEST_METHOD(Messages50Test::testPutDocumentReply)); putTest(DocumentProtocol::REPLY_QUERYRESULT, TEST_METHOD(Messages50Test::testQueryResultReply)); putTest(DocumentProtocol::REPLY_REMOVEDOCUMENT, TEST_METHOD(Messages50Test::testRemoveDocumentReply)); @@ -323,6 +325,41 @@ Messages50Test::testDocumentSummaryMessage() } bool +Messages50Test::testMultiOperationMessage() +{ + document::Document::SP doc = + createDoc(getTypeRepo(), "testdoc", "doc:scheme:foo"); + std::vector<char> buffer(1024); + document::BucketIdFactory factory; + + vdslib::WritableDocumentList doclist(getTypeRepoSp(), + &buffer[0], buffer.size()); + ASSERT_TRUE(doclist.addPut(*doc)); + + size_t n = MESSAGE_BASE_LENGTH; + n += sizeof(uint32_t); // routable object type + n += sizeof(uint64_t); // bucket id + n += sizeof(uint32_t); // bytes in docblock + n += sizeof(uint32_t); // num operations + n += sizeof(vdslib::DocumentList::MetaEntry); + n += doc->serialize()->getLength(); + n += 1; // boolean keepTimeStamps + + MultiOperationMessage msg(document::BucketId(16, factory.getBucketId(doc->getId()).getRawId()), doclist); + EXPECT_EQUAL(n, serialize("MultiOperationMessage", msg)); + for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) { + mbus::Routable::UP obj = deserialize("MultiOperationMessage", DocumentProtocol::MESSAGE_MULTIOPERATION, lang); + if (EXPECT_TRUE(obj.get() != NULL)) { + MultiOperationMessage &ref = static_cast<MultiOperationMessage&>(*obj); + EXPECT_EQUAL((uint32_t)1, ref.getOperations().size()); + EXPECT_EQUAL(*doc, *dynamic_cast<document::Document*>(ref.getOperations().begin()->getDocument().get())); + EXPECT_EQUAL(document::BucketId(16, factory.getBucketId(doc->getId()).getRawId()), ref.getBucketId()); + } + } + return true; +} + +bool Messages50Test::testGetDocumentMessage() { GetDocumentMessage tmp(document::DocumentId("doc:scheme:"), 0); @@ -664,6 +701,25 @@ Messages50Test::testSearchResultMessage() return true; } + +bool +Messages50Test::testMultiOperationReply() +{ + WriteDocumentReply reply(DocumentProtocol::REPLY_MULTIOPERATION); + reply.setHighestModificationTimestamp(30); + + EXPECT_EQUAL(13u, serialize("MultiOperationReply", reply)); + + for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) { + mbus::Routable::UP obj = deserialize("MultiOperationReply", DocumentProtocol::REPLY_MULTIOPERATION, lang); + if (EXPECT_TRUE(obj.get() != NULL)) { + WriteDocumentReply &ref = static_cast<WriteDocumentReply&>(*obj); + EXPECT_EQUAL(30u, ref.getHighestModificationTimestamp()); + } + } + return true; +} + bool Messages50Test::testUpdateDocumentMessage() { |