diff --git a/src/updater.h b/src/updater.h index 0a9cf782..01de5d5d 100644 --- a/src/updater.h +++ b/src/updater.h @@ -35,16 +35,24 @@ class Configuration; class MetadataUpdater { public: struct ResourceMetadata { - ResourceMetadata(const std::vector& ids_, - const MonitoredResource& resource_, - MetadataStore::Metadata&& metadata_) - : ids(ids_), resource(resource_), metadata(std::move(metadata_)) {} + ResourceMetadata(const std::vector& ids, + const MonitoredResource& resource, + MetadataStore::Metadata&& metadata) + : ids_(ids), resource_(resource), metadata_(std::move(metadata)) {} ResourceMetadata(ResourceMetadata&& other) - : ResourceMetadata(other.ids, other.resource, - std::move(other.metadata)) {} - std::vector ids; - MonitoredResource resource; - MetadataStore::Metadata metadata; + : ResourceMetadata(other.ids_, other.resource_, + std::move(other.metadata_)) {} + + const MetadataStore::Metadata& metadata() const { return metadata_; } + const MonitoredResource& resource() const { return resource_; } + const std::vector& ids() const { return ids_; } + + private: + friend class MetadataUpdater; // Needs write access to metadata_. + + std::vector ids_; + MonitoredResource resource_; + MetadataStore::Metadata metadata_; }; MetadataUpdater(const Configuration& config, MetadataStore* store, @@ -75,12 +83,12 @@ class MetadataUpdater { // Updates the resource map in the store. void UpdateResourceCallback(const ResourceMetadata& result) { - store_->UpdateResource(result.ids, result.resource); + store_->UpdateResource(result.ids_, result.resource_); } // Updates the metadata in the store. Consumes result. void UpdateMetadataCallback(ResourceMetadata&& result) { - store_->UpdateMetadata(result.resource, std::move(result.metadata)); + store_->UpdateMetadata(result.resource_, std::move(result.metadata_)); } const Configuration& config() { @@ -112,6 +120,8 @@ class PollingMetadataUpdater : public MetadataUpdater { void StopUpdater(); private: + friend class InstanceTest; + // Metadata poller. void PollForMetadata(); diff --git a/test/Makefile b/test/Makefile index 08ace465..30f3b9df 100644 --- a/test/Makefile +++ b/test/Makefile @@ -44,6 +44,7 @@ TESTS=\ configuration_unittest \ format_unittest \ health_checker_unittest \ + instance_unittest \ json_unittest \ kubernetes_unittest \ resource_unittest \ @@ -104,6 +105,12 @@ base64_unittest: base64_unittest.o $(SRC_DIR)/base64.o $(CXX) $(LDFLAGS) $^ $(LDLIBS) -o $@ configuration_unittest: configuration_unittest.o $(SRC_DIR)/configuration.o $(CXX) $(LDFLAGS) $^ $(LDLIBS) -o $@ +health_checker_unittest: health_checker_unittest.o $(SRC_DIR)/health_checker.o $(SRC_DIR)/configuration.o + $(CXX) $(LDFLAGS) $^ $(LDLIBS) -lboost_filesystem -lboost_system -o $@ +instance_unittest: instance_unittest.o $(SRC_DIR)/instance.o $(SRC_DIR)/configuration.o $(SRC_DIR)/environment.o $(SRC_DIR)/format.o $(SRC_DIR)/json.o $(SRC_DIR)/logging.o $(SRC_DIR)/resource.o $(SRC_DIR)/store.o $(SRC_DIR)/time.o + $(CXX) $(LDFLAGS) $^ $(LDLIBS) -o $@ +json_unittest: json_unittest.o $(SRC_DIR)/json.o + $(CXX) $(LDFLAGS) $^ $(LDLIBS) -o $@ kubernetes_unittest: kubernetes_unittest.o $(SRC_DIR)/kubernetes.o $(SRC_DIR)/json.o $(SRC_DIR)/logging.o $(SRC_DIR)/environment.o $(SRC_DIR)/time.o $(SRC_DIR)/store.o $(SRC_DIR)/resource.o $(SRC_DIR)/updater.o $(SRC_DIR)/instance.o $(SRC_DIR)/format.o $(SRC_DIR)/configuration.o $(SRC_DIR)/health_checker.o $(CXX) $(LDFLAGS) $^ $(LDLIBS) -o $@ resource_unittest: resource_unittest.o $(SRC_DIR)/resource.o $(SRC_DIR)/json.o @@ -112,9 +119,5 @@ 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 $@ -health_checker_unittest: health_checker_unittest.o $(SRC_DIR)/health_checker.o $(SRC_DIR)/configuration.o - $(CXX) $(LDFLAGS) $^ $(LDLIBS) -lboost_filesystem -lboost_system -o $@ -json_unittest: json_unittest.o $(SRC_DIR)/json.o - $(CXX) $(LDFLAGS) $^ $(LDLIBS) -o $@ .PHONY: all test clean purge diff --git a/test/instance_unittest.cc b/test/instance_unittest.cc new file mode 100644 index 00000000..b6534f79 --- /dev/null +++ b/test/instance_unittest.cc @@ -0,0 +1,45 @@ +#include "../src/configuration.h" +#include "../src/environment.h" +#include "../src/instance.h" +#include "../src/resource.h" +#include "../src/updater.h" +#include "gtest/gtest.h" + +namespace google { + +namespace { + +TEST(InstanceTest, GetInstanceMonitoredResource) { + Configuration config(std::istringstream( + "InstanceResourceType: gce_instance\n" + "InstanceId: 1234567891011\n" + "InstanceZone: us-east1-b\n" + )); + Environment env(config); + EXPECT_EQ(MonitoredResource("gce_instance", { + {"instance_id", "1234567891011"}, + {"zone", "us-east1-b"} + }), InstanceReader::InstanceResource(env)); +} + +TEST(InstanceTest, GetInstanceMetatadataQuery) { + Configuration config(std::istringstream( + "InstanceResourceType: gce_instance\n" + "InstanceId: 1234567891011\n" + "InstanceZone: us-east1-b\n" + )); + InstanceReader reader(config); + const auto result = reader.MetadataQuery(); + EXPECT_EQ(1, result.size()); + const MetadataUpdater::ResourceMetadata& rm = result[0]; + EXPECT_EQ(MonitoredResource("gce_instance", { + {"instance_id", "1234567891011"}, + {"zone", "us-east1-b"} + }), rm.resource()); + EXPECT_EQ(std::vector({"", "1234567891011"}), rm.ids()); + EXPECT_TRUE(rm.metadata().ignore); +} + +} // namespace + +} // google diff --git a/test/kubernetes_unittest.cc b/test/kubernetes_unittest.cc index 79e4ac94..455c2b10 100644 --- a/test/kubernetes_unittest.cc +++ b/test/kubernetes_unittest.cc @@ -34,18 +34,18 @@ TEST_F(KubernetesTest, GetNodeMetadata) { }); const auto m = GetNodeMetadata(reader, node->As(), Timestamp(), false); - EXPECT_EQ(1, m.ids.size()); - EXPECT_EQ("k8s_node.testname", m.ids[0]); + EXPECT_EQ(1, m.ids().size()); + EXPECT_EQ("k8s_node.testname", m.ids()[0]); EXPECT_EQ(MonitoredResource("k8s_node", { {"cluster_name", "TestClusterName"}, {"node_name", "testname"}, {"location", "TestClusterLocation"}, - }), m.resource); - EXPECT_EQ("TestVersion", m.metadata.version); - EXPECT_EQ(false, m.metadata.is_deleted); + }), m.resource()); + EXPECT_EQ("TestVersion", m.metadata().version); + EXPECT_EQ(false, m.metadata().is_deleted); EXPECT_EQ(time::rfc3339::FromString("2018-03-03T01:23:45.678901234Z"), - m.metadata.created_at); - EXPECT_EQ(Timestamp(), m.metadata.collected_at); + m.metadata().created_at); + EXPECT_EQ(Timestamp(), m.metadata().collected_at); json::value big = json::object({ {"blobs", json::object({ {"association", json::object({ @@ -66,6 +66,6 @@ TEST_F(KubernetesTest, GetNodeMetadata) { })}, })}, }); - EXPECT_EQ(big->ToString(), m.metadata.metadata->ToString()); + EXPECT_EQ(big->ToString(), m.metadata().metadata->ToString()); } } // namespace google