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
|
// Copyright 2016 Yahoo Inc. 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/fieldvalue/document.h>
#include <vespa/document/datatype/documenttype.h>
#include <vespa/documentapi/documentapi.h>
#include <vespa/vdslib/state/clusterstate.h>
#include <vespa/vespalib/testkit/testapp.h>
#include <vespa/documentapi/loadtypes/loadtypeset.h>
using document::DocumentTypeRepo;
using document::readDocumenttypesConfig;
using namespace documentapi;
using mbus::Blob;
using mbus::Routable;
using mbus::IRoutingPolicy;
class Test : public vespalib::TestApp {
DocumentTypeRepo::SP _repo;
public:
Test();
~Test();
int Main() override;
private:
void testMessage();
void testProtocol();
};
TEST_APPHOOK(Test);
int
Test::Main()
{
TEST_INIT(_argv[0]);
_repo.reset(new DocumentTypeRepo(readDocumenttypesConfig(
TEST_PATH("../../../test/cfg/testdoctypes.cfg"))));
testMessage(); TEST_FLUSH();
testProtocol(); TEST_FLUSH();
TEST_DONE();
}
Test::Test() {}
Test::~Test() {}
void Test::testMessage() {
const document::DataType *testdoc_type = _repo->getDocumentType("testdoc");
// Test one update.
UpdateDocumentMessage upd1(
document::DocumentUpdate::SP(
new document::DocumentUpdate(*testdoc_type,
document::DocumentId(document::DocIdString(
"testdoc", "testme1")))));
EXPECT_TRUE(upd1.getType() == DocumentProtocol::MESSAGE_UPDATEDOCUMENT);
EXPECT_TRUE(upd1.getProtocol() == "document");
LoadTypeSet set;
DocumentProtocol protocol(set, _repo);
Blob blob = protocol.encode(vespalib::Version(5,0), upd1);
EXPECT_TRUE(blob.size() > 0);
Routable::UP dec1 = protocol.decode(vespalib::Version(5,0), 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(*testdoc_type,
document::DocumentId(document::DocIdString(
"testdoc", "testme2")))));
EXPECT_TRUE(!(upd1.getDocumentUpdate()->getId() == upd2.getDocumentUpdate()->getId()));
DocumentMessage& msg2 = static_cast<DocumentMessage&>(upd2);
EXPECT_TRUE(msg2.getType() == DocumentProtocol::MESSAGE_UPDATEDOCUMENT);
}
void Test::testProtocol() {
LoadTypeSet set;
DocumentProtocol protocol(set, _repo);
EXPECT_TRUE(protocol.getName() == "document");
IRoutingPolicy::UP policy = protocol.createPolicy(string("SearchRow"),string(""));
EXPECT_TRUE(policy.get() != NULL);
policy = protocol.createPolicy(string("SearchColumn"),string(""));
EXPECT_TRUE(policy.get() != NULL);
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);
}
|