Skip to content
This repository was archived by the owner on Aug 19, 2019. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion src/store.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,10 @@ class MetadataStore {

MetadataStore(const Configuration& config);

// Returns a copy of the mapping from a monitored resource to the metadata
// associated with that resource.
std::map<MonitoredResource, Metadata> GetMetadataMap() const;

// Looks up the local resource map entry for a given resource id.
// Throws an exception if the resource is not found.
const MonitoredResource& LookupResource(const std::string& resource_id) const
Expand All @@ -94,7 +98,6 @@ class MetadataStore {
friend class MetadataReporter;
friend class MetadataStoreTest;

std::map<MonitoredResource, Metadata> GetMetadataMap() const;
void PurgeDeletedEntries();

const Configuration& config_;
Expand Down
4 changes: 4 additions & 0 deletions src/updater.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,8 @@ class MetadataUpdater {
std::function<void(std::vector<MetadataUpdater::ResourceMetadata>&&)>;

protected:
friend class UpdaterTest;

// Validates the relevant configuration and returns true if it's correct.
// Returns a bool that represents if it's configured properly.
virtual bool ValidateConfiguration() const {
Expand Down Expand Up @@ -115,6 +117,8 @@ class PollingMetadataUpdater : public MetadataUpdater {
~PollingMetadataUpdater();

protected:
friend class UpdaterTest;

bool ValidateConfiguration() const;
void StartUpdater();
void StopUpdater();
Expand Down
5 changes: 4 additions & 1 deletion test/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,8 @@ TESTS=\
kubernetes_unittest \
resource_unittest \
store_unittest \
time_unittest
time_unittest \
updater_unittest

GTEST_LIB=gtest_lib.a

Expand Down Expand Up @@ -119,5 +120,7 @@ store_unittest: store_unittest.o $(SRC_DIR)/store.o $(SRC_DIR)/resource.o $(SRC_
$(CXX) $(LDFLAGS) $^ $(LDLIBS) -o $@
time_unittest: time_unittest.o $(SRC_DIR)/time.o
$(CXX) $(LDFLAGS) $^ $(LDLIBS) -o $@
updater_unittest: updater_unittest.o $(SRC_DIR)/updater.o $(SRC_DIR)/resource.o $(SRC_DIR)/store.o $(SRC_DIR)/configuration.o $(SRC_DIR)/logging.o $(SRC_DIR)/time.o $(SRC_DIR)/json.o
$(CXX) $(LDFLAGS) $^ $(LDLIBS) -o $@

.PHONY: all test clean purge
20 changes: 8 additions & 12 deletions test/store_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,6 @@ class MetadataStoreTest : public ::testing::Test {
protected:
MetadataStoreTest() : config(), store(config) {}

std::map<MonitoredResource, MetadataStore::Metadata> GetMetadataMap() const {
return store.GetMetadataMap();
}

void PurgeDeletedEntries() {
store.PurgeDeletedEntries();
}
Expand Down Expand Up @@ -82,14 +78,14 @@ TEST_F(MetadataStoreTest, ResourceToIdsAssociationCorrectlyUpdated) {
}

TEST_F(MetadataStoreTest, DefaultMetadataMapIsEmpty) {
const auto metadata_map = GetMetadataMap();
const auto metadata_map = store.GetMetadataMap();
EXPECT_TRUE(metadata_map.empty());
}

TEST_F(MetadataStoreTest, UpdateResourceDoesNotUpdateMetadata) {
MonitoredResource resource("type", {});
store.UpdateResource({"id1"}, resource);
const auto metadata_map = GetMetadataMap();
const auto metadata_map = store.GetMetadataMap();
EXPECT_TRUE(metadata_map.empty());
}

Expand All @@ -102,7 +98,7 @@ TEST_F(MetadataStoreTest, UpdateMetadataChangesMetadataMap) {
std::chrono::system_clock::now(),
json::object({{"f", json::string("hello")}}));
store.UpdateMetadata(resource, std::move(m));
const auto metadata_map = GetMetadataMap();
const auto metadata_map = store.GetMetadataMap();
EXPECT_EQ(1, metadata_map.size());
EXPECT_EQ("default-version", metadata_map.at(resource).version);
}
Expand All @@ -124,7 +120,7 @@ TEST_F(MetadataStoreTest, MultipleUpdateMetadataChangesMetadataMap) {
json::object({{"f", json::string("hello")}}));
store.UpdateMetadata(resource1, std::move(m1));
store.UpdateMetadata(resource2, std::move(m2));
const auto metadata_map = GetMetadataMap();
const auto metadata_map = store.GetMetadataMap();
EXPECT_EQ(2, metadata_map.size());
EXPECT_EQ("default-version1", metadata_map.at(resource1).version);
EXPECT_EQ("default-version2", metadata_map.at(resource2).version);
Expand All @@ -139,7 +135,7 @@ TEST_F(MetadataStoreTest, UpdateMetadataForResourceChangesMetadataEntry) {
std::chrono::system_clock::now(),
json::object({{"f", json::string("hello")}}));
store.UpdateMetadata(resource, std::move(m1));
const auto metadata_map_before = GetMetadataMap();
const auto metadata_map_before = store.GetMetadataMap();
EXPECT_EQ(1, metadata_map_before.size());
EXPECT_EQ("default-version1", metadata_map_before.at(resource).version);
MetadataStore::Metadata m2(
Expand All @@ -149,7 +145,7 @@ TEST_F(MetadataStoreTest, UpdateMetadataForResourceChangesMetadataEntry) {
std::chrono::system_clock::now(),
json::object({{"f", json::string("hello")}}));
store.UpdateMetadata(resource, std::move(m2));
const auto metadata_map_after = GetMetadataMap();
const auto metadata_map_after = store.GetMetadataMap();
EXPECT_EQ(1, metadata_map_after.size());
EXPECT_EQ("default-version2", metadata_map_after.at(resource).version);
}
Expand All @@ -171,12 +167,12 @@ TEST_F(MetadataStoreTest, PurgeDeletedEntriesDeletesCorrectMetadata) {
json::object({{"f", json::string("hello")}}));
store.UpdateMetadata(resource1, std::move(m1));
store.UpdateMetadata(resource2, std::move(m2));
const auto metadata_map_before = GetMetadataMap();
const auto metadata_map_before = store.GetMetadataMap();
EXPECT_EQ(2, metadata_map_before.size());
EXPECT_EQ("default-version1", metadata_map_before.at(resource1).version);
EXPECT_EQ("default-version2", metadata_map_before.at(resource2).version);
PurgeDeletedEntries();
const auto metadata_map_after = GetMetadataMap();
const auto metadata_map_after = store.GetMetadataMap();
EXPECT_EQ(1, metadata_map_after.size());
EXPECT_EQ("default-version1", metadata_map_after.at(resource1).version);
EXPECT_THROW(metadata_map_after.at(resource2), std::out_of_range);
Expand Down
89 changes: 89 additions & 0 deletions test/updater_unittest.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
#include "../src/configuration.h"
#include "../src/resource.h"
#include "../src/store.h"
#include "../src/updater.h"
#include "gtest/gtest.h"

#include <string>
#include <vector>

namespace google {

class UpdaterTest : public ::testing::Test {
protected:
// query_metadata function not needed to test callbacks.
UpdaterTest() : config(), store(config) {}

static bool ValidateConfiguration(MetadataUpdater* updater) {
return updater->ValidateConfiguration();
}

static void UpdateMetadataCallback(
MetadataUpdater* updater,
MetadataUpdater::ResourceMetadata&& result) {
updater->UpdateMetadataCallback(std::move(result));
}

static void UpdateResourceCallback(
MetadataUpdater* updater,
const MetadataUpdater::ResourceMetadata& result) {
updater->UpdateResourceCallback(result);
}

Configuration config;
MetadataStore store;
};

namespace {

TEST_F(UpdaterTest, OneMinutePollingIntervalIsValid) {
PollingMetadataUpdater updater(config, &store, "Test", 60, nullptr);
EXPECT_TRUE(ValidateConfiguration(&updater));
}

TEST_F(UpdaterTest, ZeroSecondPollingIntervalIsValid) {
PollingMetadataUpdater updater(config, &store, "Test", 0, nullptr);
EXPECT_TRUE(ValidateConfiguration(&updater));
}

TEST_F(UpdaterTest, NegativePollingIntervalIsInvalid) {
PollingMetadataUpdater updater(config, &store, "BadUpdater", -1, nullptr);
EXPECT_FALSE(ValidateConfiguration(&updater));
}

TEST_F(UpdaterTest, UpdateMetadataCallback) {
MetadataStore::Metadata m(
"test-version",
false,
std::chrono::system_clock::now(),
std::chrono::system_clock::now(),
json::object({{"f", json::string("test")}}));
MonitoredResource resource("test_resource", {});
MetadataUpdater::ResourceMetadata metadata(
std::vector<std::string>({"", "test-prefix"}),
resource, std::move(m));
PollingMetadataUpdater updater(config, &store, "Test", 60, nullptr);
UpdateMetadataCallback(&updater, std::move(metadata));
const auto metadata_map = store.GetMetadataMap();
EXPECT_EQ(1, metadata_map.size());
EXPECT_EQ("test-version", metadata_map.at(resource).version);
EXPECT_EQ("{\"f\":\"test\"}", metadata_map.at(resource).metadata->ToString());
}

TEST_F(UpdaterTest, UpdateResourceCallback) {
MetadataUpdater::ResourceMetadata metadata(
std::vector<std::string>({"", "test-prefix"}),
MonitoredResource("test_resource", {}),
MetadataStore::Metadata::IGNORED()
);
PollingMetadataUpdater updater(config, &store, "Test", 60, nullptr);
UpdateResourceCallback(&updater, metadata);
EXPECT_EQ(MonitoredResource("test_resource", {}),
store.LookupResource(""));
EXPECT_EQ(MonitoredResource("test_resource", {}),
store.LookupResource("test-prefix"));
}

} // namespace

} // google