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
|
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
// Unit tests for dummypersistence.
#include <vespa/persistence/dummyimpl/dummypersistence.h>
#include <vespa/vespalib/testkit/testapp.h>
#include <vespa/document/base/documentid.h>
#include <vespa/vdslib/distribution/distribution.h>
#include <vespa/vdslib/state/clusterstate.h>
#include <vespa/config-stor-distribution.h>
using namespace storage::spi;
using namespace storage;
using dummy::BucketContent;
namespace {
struct Fixture {
BucketContent content;
void insert(DocumentId id, Timestamp timestamp, int meta_flags) {
content.insert(DocEntry::UP(new DocEntry(timestamp, meta_flags, id)));
}
Fixture() {
insert(DocumentId("doc:test:3"), Timestamp(3), NONE);
insert(DocumentId("doc:test:1"), Timestamp(1), NONE);
insert(DocumentId("doc:test:2"), Timestamp(2), NONE);
}
};
TEST("require that empty BucketContent behaves") {
BucketContent content;
EXPECT_FALSE(content.hasTimestamp(Timestamp(1)));
EXPECT_FALSE(content.getEntry(Timestamp(1)).get());
EXPECT_FALSE(content.getEntry(DocumentId("doc:test:1")).get());
}
TEST_F("require that BucketContent can retrieve by timestamp", Fixture) {
DocEntry::SP entry = f.content.getEntry(Timestamp(1));
ASSERT_TRUE(entry.get());
ASSERT_TRUE(entry->getDocumentId());
ASSERT_EQUAL("doc:test:1", entry->getDocumentId()->toString());
}
TEST_F("require that BucketContent can retrieve by doc id", Fixture) {
DocEntry::SP entry = f.content.getEntry(DocumentId("doc:test:2"));
ASSERT_TRUE(entry.get());
ASSERT_TRUE(entry->getDocumentId());
ASSERT_EQUAL("doc:test:2", entry->getDocumentId()->toString());
}
TEST_F("require that BucketContent can check a timestamp", Fixture) {
EXPECT_FALSE(f.content.hasTimestamp(Timestamp(0)));
EXPECT_TRUE(f.content.hasTimestamp(Timestamp(1)));
EXPECT_TRUE(f.content.hasTimestamp(Timestamp(2)));
EXPECT_TRUE(f.content.hasTimestamp(Timestamp(3)));
EXPECT_FALSE(f.content.hasTimestamp(Timestamp(4)));
}
TEST_F("require that BucketContent can provide bucket info", Fixture) {
uint32_t lastChecksum = 0;
EXPECT_NOT_EQUAL(lastChecksum, f.content.getBucketInfo().getChecksum());
lastChecksum = f.content.getBucketInfo().getChecksum();
f.insert(DocumentId("doc:test:3"), Timestamp(4), NONE);
EXPECT_NOT_EQUAL(lastChecksum, f.content.getBucketInfo().getChecksum());
lastChecksum = f.content.getBucketInfo().getChecksum();
f.insert(DocumentId("doc:test:2"), Timestamp(5), REMOVE_ENTRY);
EXPECT_NOT_EQUAL(lastChecksum, f.content.getBucketInfo().getChecksum());
f.insert(DocumentId("doc:test:1"), Timestamp(6), REMOVE_ENTRY);
f.insert(DocumentId("doc:test:3"), Timestamp(7), REMOVE_ENTRY);
EXPECT_EQUAL(0u, f.content.getBucketInfo().getChecksum());
}
TEST_F("require that setClusterState sets the cluster state", Fixture) {
lib::ClusterState s("version:1 storage:3 .1.s:d distributor:3");
lib::Distribution d(lib::Distribution::getDefaultDistributionConfig(3, 3));
ClusterState state(s, 1, d);
document::DocumentTypeRepo::SP repo;
dummy::DummyPersistence provider(repo);
provider.setClusterState(state);
EXPECT_EQUAL(false, provider.getClusterState().nodeUp());
}
} // namespace
TEST_MAIN() { TEST_RUN_ALL(); }
|