// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. // Unit tests for dummypersistence. #include #include #include #include #include #include #include using namespace storage::spi; using namespace storage; using document::test::makeBucketSpace; using dummy::BucketContent; namespace { struct Fixture { BucketContent content; void insert(DocumentId id, Timestamp timestamp, DocumentMetaEnum meta_flags) { content.insert(DocEntry::create(timestamp, meta_flags, id)); } Fixture() { insert(DocumentId("id:ns:type::test:3"), Timestamp(3), DocumentMetaEnum::NONE); insert(DocumentId("id:ns:type::test:1"), Timestamp(1), DocumentMetaEnum::NONE); insert(DocumentId("id:ns:type::test:2"), Timestamp(2), DocumentMetaEnum::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("id:ns:type::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("id:ns:type::test:1", entry->getDocumentId()->toString()); } TEST_F("require that BucketContent can retrieve by doc id", Fixture) { DocEntry::SP entry = f.content.getEntry(DocumentId("id:ns:type::test:2")); ASSERT_TRUE(entry.get()); ASSERT_TRUE(entry->getDocumentId()); ASSERT_EQUAL("id:ns:type::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("id:ns:type::test:3"), Timestamp(4), DocumentMetaEnum::NONE); EXPECT_NOT_EQUAL(lastChecksum, f.content.getBucketInfo().getChecksum()); lastChecksum = f.content.getBucketInfo().getChecksum(); f.insert(DocumentId("id:ns:type::test:2"), Timestamp(5), DocumentMetaEnum::REMOVE_ENTRY); EXPECT_NOT_EQUAL(lastChecksum, f.content.getBucketInfo().getChecksum()); f.insert(DocumentId("id:ns:type::test:1"), Timestamp(6), DocumentMetaEnum::REMOVE_ENTRY); f.insert(DocumentId("id:ns:type::test:3"), Timestamp(7), DocumentMetaEnum::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); std::shared_ptr repo; dummy::DummyPersistence provider(repo); provider.setClusterState(makeBucketSpace(), state); EXPECT_EQUAL(false, provider.getClusterState().nodeUp()); } } // namespace TEST_MAIN() { TEST_RUN_ALL(); }