summaryrefslogtreecommitdiffstats
path: root/documentapi/src/tests/messagebus/messagebus_test.cpp
blob: 39f9cedb38f462123b2b1deaec0e1e7452c8d725 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.

#include <vespa/document/base/testdocrepo.h>
#include <vespa/document/config/documenttypes_config_fwd.h>
#include <vespa/document/datatype/documenttype.h>
#include <vespa/document/repo/documenttyperepo.h>
#include <vespa/document/update/documentupdate.h>
#include <vespa/documentapi/documentapi.h>
#include <vespa/vespalib/gtest/gtest.h>
#include <vespa/vespalib/testkit/test_path.h>

using document::DocumentTypeRepo;
using document::readDocumenttypesConfig;
using namespace documentapi;
using mbus::Blob;
using mbus::Routable;
using mbus::IRoutingPolicy;

class MessageBusTest : public testing::Test {
protected:
    static std::shared_ptr<const DocumentTypeRepo> _repo;
    MessageBusTest();
    ~MessageBusTest() override;
    static void SetUpTestSuite();
    static void TearDownTestSuite();
};

MessageBusTest::MessageBusTest() = default;
MessageBusTest::~MessageBusTest() = default;

std::shared_ptr<const DocumentTypeRepo> MessageBusTest::_repo;

void
MessageBusTest::SetUpTestSuite()
{
    auto path = TEST_PATH("../../../test/cfg/testdoctypes.cfg");
    _repo = std::make_shared<const DocumentTypeRepo>(readDocumenttypesConfig(path));
}

void
MessageBusTest::TearDownTestSuite()
{
    _repo.reset();
}

TEST_F(MessageBusTest, test_message)
{
    const document::DataType *testdoc_type = _repo->getDocumentType("testdoc");

    // Test one update.
    UpdateDocumentMessage upd1(
            document::DocumentUpdate::SP(
                    new document::DocumentUpdate(*_repo, *testdoc_type,
                            document::DocumentId("id:ns:testdoc::testme1"))));

    EXPECT_TRUE(upd1.getType() == DocumentProtocol::MESSAGE_UPDATEDOCUMENT);
    EXPECT_TRUE(upd1.getProtocol() == "document");

    DocumentProtocol protocol(_repo);

    Blob blob = protocol.encode(vespalib::Version(6,221), upd1);
    EXPECT_TRUE(blob.size() > 0);

    Routable::UP dec1 = protocol.decode(vespalib::Version(6,221), blob);
    EXPECT_TRUE(dec1.get() != NULL);
    EXPECT_TRUE(dec1->isReply() == false);
    EXPECT_TRUE(dec1->getType() == DocumentProtocol::MESSAGE_UPDATEDOCUMENT);

    // Compare to another.
    UpdateDocumentMessage upd2(
            document::DocumentUpdate::SP(
                    new document::DocumentUpdate(*_repo, *testdoc_type,
                            document::DocumentId("id:ns:testdoc::testme2"))));
    EXPECT_TRUE(!(upd1.getDocumentUpdate().getId() == upd2.getDocumentUpdate().getId()));

    DocumentMessage& msg2 = static_cast<DocumentMessage&>(upd2);
    EXPECT_TRUE(msg2.getType() == DocumentProtocol::MESSAGE_UPDATEDOCUMENT);
}

TEST_F(MessageBusTest, test_protocol)
{
    DocumentProtocol protocol(_repo);
    EXPECT_TRUE(protocol.getName() == "document");

    IRoutingPolicy::UP policy = protocol.createPolicy(string("DocumentRouteSelector"), string("file:documentrouteselectorpolicy.cfg"));
    EXPECT_TRUE(policy.get() != NULL);

    policy = protocol.createPolicy(string(""),string(""));
    EXPECT_TRUE(policy.get() == NULL);

    policy = protocol.createPolicy(string("Balle"),string(""));
    EXPECT_TRUE(policy.get() == NULL);
}

TEST_F(MessageBusTest, get_document_message_is_not_sequenced)
{
    GetDocumentMessage message(document::DocumentId("id:foo:bar::baz"));
    EXPECT_FALSE(message.hasSequenceId());
}

TEST_F(MessageBusTest, stat_bucket_message_is_not_sequenced)
{
    StatBucketMessage message(document::BucketId(16, 1), "");
    EXPECT_FALSE(message.hasSequenceId());
}

TEST_F(MessageBusTest, get_bucket_list_message_is_not_sequenced)
{
    GetBucketListMessage message(document::BucketId(16, 1));
    EXPECT_FALSE(message.hasSequenceId());
}

GTEST_MAIN_RUN_ALL_TESTS()