From cb7efe27b095d721fac27b3ee75b1d9d09bb4362 Mon Sep 17 00:00:00 2001 From: Andrew Emil Date: Wed, 4 Apr 2018 18:37:52 -0400 Subject: [PATCH 1/5] Add test for GetPodAndContainerMetadata --- test/kubernetes_unittest.cc | 188 ++++++++++++++++++++++++++++++++++++ 1 file changed, 188 insertions(+) diff --git a/test/kubernetes_unittest.cc b/test/kubernetes_unittest.cc index 3e05e0ef..35f9f789 100644 --- a/test/kubernetes_unittest.cc +++ b/test/kubernetes_unittest.cc @@ -33,6 +33,12 @@ class KubernetesTest : public ::testing::Test { is_deleted); } + std::vector GetPodAndContainerMetadata( + const KubernetesReader& reader, const json::Object* pod, + Timestamp collected_at, bool is_deleted) const throw(json::Exception) { + return reader.GetPodAndContainerMetadata(pod, collected_at, is_deleted); + } + MetadataUpdater::ResourceMetadata GetLegacyResource( const KubernetesReader& reader, const json::Object* pod, const std::string& container_name) const throw(json::Exception) { @@ -509,4 +515,186 @@ TEST_F(KubernetesTest, GetContainerMetadata) { }); EXPECT_EQ(expected_metadata->ToString(), m.metadata().metadata->ToString()); } +TEST_F(KubernetesTest, GetPodAndContainerMetadata) { + Configuration config(std::stringstream( + "KubernetesClusterName: TestClusterName\n" + "KubernetesClusterLocation: TestClusterLocation\n" + "MetadataApiResourceTypePerarator: \".\"\n" + "MetadataIngestionRawContentVersion: TestVersion\n" + "InstanceZone: TestZone\n" + "InstanceId: TestID\n" + )); + Environment environment(config); + KubernetesReader reader(config, nullptr); // Don't need HealthChecker. + + json::value controller = json::object({ + {"controller", json::boolean(true)}, + {"apiVersion", json::string("1.2.3")}, + {"kind", json::string("TestKind")}, + {"name", json::string("TestName")}, + {"uid", json::string("TestUID1")}, + {"metadata", json::object({ + {"name", json::string("InnerTestName")}, + {"kind", json::string("InnerTestKind")}, + {"uid", json::string("InnerTestUID1")}, + })}, + }); + UpdateOwnersCache(&reader, "1.2.3/TestKind/TestUID1", controller); + json::value pod = json::object({ + {"metadata", json::object({ + {"name", json::string("TestPodName")}, + {"namespace", json::string("TestNamespace")}, + {"uid", json::string("TestPodUid")}, + {"creationTimestamp", json::string("2018-03-03T01:23:45.678901234Z")}, + })}, + {"spec", json::object({ + {"nodeName", json::string("TestSpecNodeName")}, + {"containers", json::array({ + json::object({{"name", json::string("TestContainerName0")}}), + })}, + })}, + {"status", json::object({ + {"containerID", json::string("docker://TestContainerID")}, + {"containerStatuses", json::array({ + json::object({ + {"name", json::string("TestContainerName0")}, + }), + })}, + })}, + }); + + auto metadatas = GetPodAndContainerMetadata( + reader, pod->As(), Timestamp(), false); + EXPECT_EQ(3, metadatas.size()); + EXPECT_EQ(2, metadatas[0].ids().size()); + EXPECT_EQ("gke_container.TestNamespace.TestPodUid.TestContainerName0", + metadatas[0].ids()[0]); + EXPECT_EQ("gke_container.TestNamespace.TestPodName.TestContainerName0", + metadatas[0].ids()[1]); + EXPECT_EQ(MonitoredResource("gke_container", { + {"cluster_name", "TestClusterName"}, + {"container_name", "TestContainerName0"}, + {"instance_id", "TestID"}, + {"namespace_id", "TestNamespace"}, + {"pod_id", "TestPodUid"}, + {"zone", "TestZone"} + }), metadatas[0].resource()); + EXPECT_TRUE(metadatas[0].metadata().ignore); + + EXPECT_EQ(2, metadatas[1].ids().size()); + EXPECT_EQ("k8s_container.TestPodUid.TestContainerName0", + metadatas[1].ids()[0]); + EXPECT_EQ("k8s_container.TestNamespace.TestPodName.TestContainerName0", + metadatas[1].ids()[1]); + EXPECT_EQ(MonitoredResource("k8s_container", { + {"cluster_name", "TestClusterName"}, + {"container_name", "TestContainerName0"}, + {"location", "TestClusterLocation"}, + {"namespace_name", "TestNamespace"}, + {"pod_name", "TestPodName"}, + }), metadatas[1].resource()); + EXPECT_FALSE(metadatas[1].metadata().ignore); + EXPECT_EQ("1.6", metadatas[1].metadata().version); + EXPECT_FALSE(metadatas[1].metadata().is_deleted); + EXPECT_EQ(time::rfc3339::FromString("2018-03-03T01:23:45.678901234Z"), + metadatas[1].metadata().created_at); + EXPECT_EQ(Timestamp(), metadatas[1].metadata().collected_at); + json::value metadata1 = json::object({ + {"blobs", json::object({ + {"association", json::object({ + {"raw", json::object({ + {"controllers", json::object({ + {"topLevelControllerName", json::string("TestPodName")}, + {"topLevelControllerType", json::string("Pod")}, + })}, + {"infrastructureResource", json::object({ + {"labels", json::object({ + {"instance_id", json::string("TestID")}, + {"zone", json::string("TestZone")}, + })}, + {"type", json::string("gce_instance")}, + })}, + {"nodeName", json::string("TestSpecNodeName")}, + })}, + {"version", json::string("TestVersion")}, + })}, + {"spec", json::object({ + {"raw", json::object({ + {"name", json::string("TestContainerName0")}, + })}, + {"version", json::string("1.6")}, + })}, + {"status", json::object({ + {"raw", json::object({ + {"name", json::string("TestContainerName0")}, + })}, + {"version", json::string("1.6")}, + })}, + })}, + }); + EXPECT_EQ(metadata1->ToString(), metadatas[1].metadata().metadata->ToString()); + + EXPECT_EQ(2, metadatas[2].ids().size()); + EXPECT_EQ("k8s_pod.TestPodUid", metadatas[2].ids()[0]); + EXPECT_EQ("k8s_pod.TestNamespace.TestPodName", metadatas[2].ids()[1]); + EXPECT_EQ(MonitoredResource("k8s_pod", { + {"cluster_name", "TestClusterName"}, + {"location", "TestClusterLocation"}, + {"namespace_name", "TestNamespace"}, + {"pod_name", "TestPodName"}, + }), metadatas[2].resource()); + EXPECT_FALSE(metadatas[2].metadata().ignore); + EXPECT_EQ("TestVersion", metadatas[2].metadata().version); + EXPECT_FALSE(metadatas[2].metadata().is_deleted); + EXPECT_EQ(time::rfc3339::FromString("2018-03-03T01:23:45.678901234Z"), + metadatas[2].metadata().created_at); + EXPECT_EQ(Timestamp(), metadatas[2].metadata().collected_at); + json::value metadata2 = json::object({ + {"blobs", json::object({ + {"api", json::object({ + {"raw", json::object({ + {"metadata", json::object({ + {"creationTimestamp", + json::string("2018-03-03T01:23:45.678901234Z")}, + {"name", json::string("TestPodName")}, + {"namespace", json::string("TestNamespace")}, + {"uid", json::string("TestPodUid")}, + })}, + {"spec", json::object({ + {"containers", json::array({ + json::object({{"name", json::string("TestContainerName0")}}) + })}, + {"nodeName", json::string("TestSpecNodeName")}, + })}, + {"status", json::object({ + {"containerID", json::string("docker://TestContainerID")}, + {"containerStatuses", json::array({ + json::object({{"name", json::string("TestContainerName0")}}) + })}, + })}, + })}, + {"version", json::string("1.6")}, + })}, + {"association", json::object({ + {"raw", json::object({ + {"controllers", json::object({ + {"topLevelControllerName", json::string("TestPodName")}, + {"topLevelControllerType", json::string("Pod")}, + })}, + {"infrastructureResource", json::object({ + {"labels", json::object({ + {"instance_id", json::string("TestID")}, + {"zone", json::string("TestZone")}, + })}, + {"type", json::string("gce_instance")}, + })}, + {"nodeName", json::string("TestSpecNodeName")}, + })}, + {"version", json::string("TestVersion")}, + })}, + })}, + }); + EXPECT_EQ(metadata2->ToString(), + metadatas[2].metadata().metadata->ToString()); +} } // namespace google From 328bac6bb92240f2b6d4ff812dd03e8df2225467 Mon Sep 17 00:00:00 2001 From: Andrew Emil Date: Wed, 4 Apr 2018 20:12:48 -0400 Subject: [PATCH 2/5] Addressed code review comments --- test/kubernetes_unittest.cc | 64 ++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/test/kubernetes_unittest.cc b/test/kubernetes_unittest.cc index 35f9f789..d8d3cab1 100644 --- a/test/kubernetes_unittest.cc +++ b/test/kubernetes_unittest.cc @@ -191,7 +191,7 @@ TEST_F(KubernetesTest, GetPodMetadata) { Configuration config(std::stringstream( "KubernetesClusterName: TestClusterName\n" "KubernetesClusterLocation: TestClusterLocation\n" - "MetadataApiResourceTypePerarator: \",\"\n" + "MetadataApiResourceTypeSeperator: \",\"\n" "MetadataIngestionRawContentVersion: TestVersion\n" )); Environment environment(config); @@ -519,7 +519,7 @@ TEST_F(KubernetesTest, GetPodAndContainerMetadata) { Configuration config(std::stringstream( "KubernetesClusterName: TestClusterName\n" "KubernetesClusterLocation: TestClusterLocation\n" - "MetadataApiResourceTypePerarator: \".\"\n" + "MetadataApiResourceTypeSeperator: \".\"\n" "MetadataIngestionRawContentVersion: TestVersion\n" "InstanceZone: TestZone\n" "InstanceId: TestID\n" @@ -563,14 +563,14 @@ TEST_F(KubernetesTest, GetPodAndContainerMetadata) { })}, }); - auto metadatas = GetPodAndContainerMetadata( + auto metadata_list = GetPodAndContainerMetadata( reader, pod->As(), Timestamp(), false); - EXPECT_EQ(3, metadatas.size()); - EXPECT_EQ(2, metadatas[0].ids().size()); + EXPECT_EQ(3, metadata_list.size()); + EXPECT_EQ(2, metadata_list[0].ids().size()); EXPECT_EQ("gke_container.TestNamespace.TestPodUid.TestContainerName0", - metadatas[0].ids()[0]); + metadata_list[0].ids()[0]); EXPECT_EQ("gke_container.TestNamespace.TestPodName.TestContainerName0", - metadatas[0].ids()[1]); + metadata_list[0].ids()[1]); EXPECT_EQ(MonitoredResource("gke_container", { {"cluster_name", "TestClusterName"}, {"container_name", "TestContainerName0"}, @@ -578,28 +578,28 @@ TEST_F(KubernetesTest, GetPodAndContainerMetadata) { {"namespace_id", "TestNamespace"}, {"pod_id", "TestPodUid"}, {"zone", "TestZone"} - }), metadatas[0].resource()); - EXPECT_TRUE(metadatas[0].metadata().ignore); + }), metadata_list[0].resource()); + EXPECT_TRUE(metadata_list[0].metadata().ignore); - EXPECT_EQ(2, metadatas[1].ids().size()); + EXPECT_EQ(2, metadata_list[1].ids().size()); EXPECT_EQ("k8s_container.TestPodUid.TestContainerName0", - metadatas[1].ids()[0]); + metadata_list[1].ids()[0]); EXPECT_EQ("k8s_container.TestNamespace.TestPodName.TestContainerName0", - metadatas[1].ids()[1]); + metadata_list[1].ids()[1]); EXPECT_EQ(MonitoredResource("k8s_container", { {"cluster_name", "TestClusterName"}, {"container_name", "TestContainerName0"}, {"location", "TestClusterLocation"}, {"namespace_name", "TestNamespace"}, {"pod_name", "TestPodName"}, - }), metadatas[1].resource()); - EXPECT_FALSE(metadatas[1].metadata().ignore); - EXPECT_EQ("1.6", metadatas[1].metadata().version); - EXPECT_FALSE(metadatas[1].metadata().is_deleted); + }), metadata_list[1].resource()); + EXPECT_FALSE(metadata_list[1].metadata().ignore); + EXPECT_EQ("1.6", metadata_list[1].metadata().version); + EXPECT_FALSE(metadata_list[1].metadata().is_deleted); EXPECT_EQ(time::rfc3339::FromString("2018-03-03T01:23:45.678901234Z"), - metadatas[1].metadata().created_at); - EXPECT_EQ(Timestamp(), metadatas[1].metadata().collected_at); - json::value metadata1 = json::object({ + metadata_list[1].metadata().created_at); + EXPECT_EQ(Timestamp(), metadata_list[1].metadata().collected_at); + json::value container1 = json::object({ {"blobs", json::object({ {"association", json::object({ {"raw", json::object({ @@ -632,24 +632,24 @@ TEST_F(KubernetesTest, GetPodAndContainerMetadata) { })}, })}, }); - EXPECT_EQ(metadata1->ToString(), metadatas[1].metadata().metadata->ToString()); + EXPECT_EQ(container1->ToString(), metadata_list[1].metadata().metadata->ToString()); - EXPECT_EQ(2, metadatas[2].ids().size()); - EXPECT_EQ("k8s_pod.TestPodUid", metadatas[2].ids()[0]); - EXPECT_EQ("k8s_pod.TestNamespace.TestPodName", metadatas[2].ids()[1]); + EXPECT_EQ(2, metadata_list[2].ids().size()); + EXPECT_EQ("k8s_pod.TestPodUid", metadata_list[2].ids()[0]); + EXPECT_EQ("k8s_pod.TestNamespace.TestPodName", metadata_list[2].ids()[1]); EXPECT_EQ(MonitoredResource("k8s_pod", { {"cluster_name", "TestClusterName"}, {"location", "TestClusterLocation"}, {"namespace_name", "TestNamespace"}, {"pod_name", "TestPodName"}, - }), metadatas[2].resource()); - EXPECT_FALSE(metadatas[2].metadata().ignore); - EXPECT_EQ("TestVersion", metadatas[2].metadata().version); - EXPECT_FALSE(metadatas[2].metadata().is_deleted); + }), metadata_list[2].resource()); + EXPECT_FALSE(metadata_list[2].metadata().ignore); + EXPECT_EQ("TestVersion", metadata_list[2].metadata().version); + EXPECT_FALSE(metadata_list[2].metadata().is_deleted); EXPECT_EQ(time::rfc3339::FromString("2018-03-03T01:23:45.678901234Z"), - metadatas[2].metadata().created_at); - EXPECT_EQ(Timestamp(), metadatas[2].metadata().collected_at); - json::value metadata2 = json::object({ + metadata_list[2].metadata().created_at); + EXPECT_EQ(Timestamp(), metadata_list[2].metadata().collected_at); + json::value container2 = json::object({ {"blobs", json::object({ {"api", json::object({ {"raw", json::object({ @@ -694,7 +694,7 @@ TEST_F(KubernetesTest, GetPodAndContainerMetadata) { })}, })}, }); - EXPECT_EQ(metadata2->ToString(), - metadatas[2].metadata().metadata->ToString()); + EXPECT_EQ(container2->ToString(), + metadata_list[2].metadata().metadata->ToString()); } } // namespace google From 6fed1a3fe398125ba51faa1a2a8983c06ef9ce45 Mon Sep 17 00:00:00 2001 From: Andrew Emil Date: Thu, 5 Apr 2018 10:13:24 -0400 Subject: [PATCH 3/5] Addressed code review comments --- test/kubernetes_unittest.cc | 67 ++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/test/kubernetes_unittest.cc b/test/kubernetes_unittest.cc index d8d3cab1..5579165e 100644 --- a/test/kubernetes_unittest.cc +++ b/test/kubernetes_unittest.cc @@ -563,14 +563,13 @@ TEST_F(KubernetesTest, GetPodAndContainerMetadata) { })}, }); - auto metadata_list = GetPodAndContainerMetadata( + auto m = GetPodAndContainerMetadata( reader, pod->As(), Timestamp(), false); - EXPECT_EQ(3, metadata_list.size()); - EXPECT_EQ(2, metadata_list[0].ids().size()); - EXPECT_EQ("gke_container.TestNamespace.TestPodUid.TestContainerName0", - metadata_list[0].ids()[0]); - EXPECT_EQ("gke_container.TestNamespace.TestPodName.TestContainerName0", - metadata_list[0].ids()[1]); + EXPECT_EQ(3, m.size()); + EXPECT_EQ(std::vector({ + "gke_container.TestNamespace.TestPodUid.TestContainerName0", + "gke_container.TestNamespace.TestPodName.TestContainerName0", + }), m[0].ids()); EXPECT_EQ(MonitoredResource("gke_container", { {"cluster_name", "TestClusterName"}, {"container_name", "TestContainerName0"}, @@ -578,28 +577,27 @@ TEST_F(KubernetesTest, GetPodAndContainerMetadata) { {"namespace_id", "TestNamespace"}, {"pod_id", "TestPodUid"}, {"zone", "TestZone"} - }), metadata_list[0].resource()); - EXPECT_TRUE(metadata_list[0].metadata().ignore); + }), m[0].resource()); + EXPECT_TRUE(m[0].metadata().ignore); - EXPECT_EQ(2, metadata_list[1].ids().size()); - EXPECT_EQ("k8s_container.TestPodUid.TestContainerName0", - metadata_list[1].ids()[0]); - EXPECT_EQ("k8s_container.TestNamespace.TestPodName.TestContainerName0", - metadata_list[1].ids()[1]); + EXPECT_EQ(std::vector({ + "k8s_container.TestPodUid.TestContainerName0", + "k8s_container.TestNamespace.TestPodName.TestContainerName0" + }), m[1].ids()); EXPECT_EQ(MonitoredResource("k8s_container", { {"cluster_name", "TestClusterName"}, {"container_name", "TestContainerName0"}, {"location", "TestClusterLocation"}, {"namespace_name", "TestNamespace"}, {"pod_name", "TestPodName"}, - }), metadata_list[1].resource()); - EXPECT_FALSE(metadata_list[1].metadata().ignore); - EXPECT_EQ("1.6", metadata_list[1].metadata().version); - EXPECT_FALSE(metadata_list[1].metadata().is_deleted); + }), m[1].resource()); + EXPECT_FALSE(m[1].metadata().ignore); + EXPECT_EQ("1.6", m[1].metadata().version); + EXPECT_FALSE(m[1].metadata().is_deleted); EXPECT_EQ(time::rfc3339::FromString("2018-03-03T01:23:45.678901234Z"), - metadata_list[1].metadata().created_at); - EXPECT_EQ(Timestamp(), metadata_list[1].metadata().collected_at); - json::value container1 = json::object({ + m[1].metadata().created_at); + EXPECT_EQ(Timestamp(), m[1].metadata().collected_at); + json::value container_metadata = json::object({ {"blobs", json::object({ {"association", json::object({ {"raw", json::object({ @@ -632,24 +630,25 @@ TEST_F(KubernetesTest, GetPodAndContainerMetadata) { })}, })}, }); - EXPECT_EQ(container1->ToString(), metadata_list[1].metadata().metadata->ToString()); + EXPECT_EQ(container_metadata->ToString(), m[1].metadata().metadata->ToString()); - EXPECT_EQ(2, metadata_list[2].ids().size()); - EXPECT_EQ("k8s_pod.TestPodUid", metadata_list[2].ids()[0]); - EXPECT_EQ("k8s_pod.TestNamespace.TestPodName", metadata_list[2].ids()[1]); + EXPECT_EQ(std::vector({ + "k8s_pod.TestPodUid", + "k8s_pod.TestNamespace.TestPodName" + }), m[2].ids()); EXPECT_EQ(MonitoredResource("k8s_pod", { {"cluster_name", "TestClusterName"}, {"location", "TestClusterLocation"}, {"namespace_name", "TestNamespace"}, {"pod_name", "TestPodName"}, - }), metadata_list[2].resource()); - EXPECT_FALSE(metadata_list[2].metadata().ignore); - EXPECT_EQ("TestVersion", metadata_list[2].metadata().version); - EXPECT_FALSE(metadata_list[2].metadata().is_deleted); + }), m[2].resource()); + EXPECT_FALSE(m[2].metadata().ignore); + EXPECT_EQ("TestVersion", m[2].metadata().version); + EXPECT_FALSE(m[2].metadata().is_deleted); EXPECT_EQ(time::rfc3339::FromString("2018-03-03T01:23:45.678901234Z"), - metadata_list[2].metadata().created_at); - EXPECT_EQ(Timestamp(), metadata_list[2].metadata().collected_at); - json::value container2 = json::object({ + m[2].metadata().created_at); + EXPECT_EQ(Timestamp(), m[2].metadata().collected_at); + json::value pod_metadata = json::object({ {"blobs", json::object({ {"api", json::object({ {"raw", json::object({ @@ -694,7 +693,7 @@ TEST_F(KubernetesTest, GetPodAndContainerMetadata) { })}, })}, }); - EXPECT_EQ(container2->ToString(), - metadata_list[2].metadata().metadata->ToString()); + EXPECT_EQ(pod_metadata->ToString(), + m[2].metadata().metadata->ToString()); } } // namespace google From 6302f96190e731741d6fe10d248e728b13c93acf Mon Sep 17 00:00:00 2001 From: Andrew Emil Date: Tue, 10 Apr 2018 11:44:17 -0400 Subject: [PATCH 4/5] Fix spelling error --- test/kubernetes_unittest.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/kubernetes_unittest.cc b/test/kubernetes_unittest.cc index 5579165e..282d1985 100644 --- a/test/kubernetes_unittest.cc +++ b/test/kubernetes_unittest.cc @@ -191,7 +191,7 @@ TEST_F(KubernetesTest, GetPodMetadata) { Configuration config(std::stringstream( "KubernetesClusterName: TestClusterName\n" "KubernetesClusterLocation: TestClusterLocation\n" - "MetadataApiResourceTypeSeperator: \",\"\n" + "MetadataApiResourceTypeSeparator: \".\"\n" "MetadataIngestionRawContentVersion: TestVersion\n" )); Environment environment(config); @@ -519,7 +519,7 @@ TEST_F(KubernetesTest, GetPodAndContainerMetadata) { Configuration config(std::stringstream( "KubernetesClusterName: TestClusterName\n" "KubernetesClusterLocation: TestClusterLocation\n" - "MetadataApiResourceTypeSeperator: \".\"\n" + "MetadataApiResourceTypeSeparator: \".\"\n" "MetadataIngestionRawContentVersion: TestVersion\n" "InstanceZone: TestZone\n" "InstanceId: TestID\n" From 137939828f52064251b91cc63ee6c0cd598298dd Mon Sep 17 00:00:00 2001 From: Andrew Emil Date: Tue, 10 Apr 2018 18:03:00 -0400 Subject: [PATCH 5/5] Set fixture functions to static --- test/kubernetes_unittest.cc | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/test/kubernetes_unittest.cc b/test/kubernetes_unittest.cc index 282d1985..cc373dc1 100644 --- a/test/kubernetes_unittest.cc +++ b/test/kubernetes_unittest.cc @@ -8,66 +8,66 @@ namespace google { class KubernetesTest : public ::testing::Test { protected: - MetadataUpdater::ResourceMetadata GetNodeMetadata( + static MetadataUpdater::ResourceMetadata GetNodeMetadata( const KubernetesReader& reader, const json::Object *node, - Timestamp collected_at, bool is_deleted) const + Timestamp collected_at, bool is_deleted) throw(json::Exception) { return reader.GetNodeMetadata(node, collected_at, is_deleted); } - MetadataUpdater::ResourceMetadata GetPodMetadata( + static MetadataUpdater::ResourceMetadata GetPodMetadata( const KubernetesReader& reader, const json::Object* pod, - json::value associations, Timestamp collected_at, bool is_deleted) const + json::value associations, Timestamp collected_at, bool is_deleted) throw(json::Exception) { return reader.GetPodMetadata( pod, std::move(associations), collected_at, is_deleted); } - MetadataUpdater::ResourceMetadata GetContainerMetadata( + static MetadataUpdater::ResourceMetadata GetContainerMetadata( const KubernetesReader& reader, const json::Object* pod, const json::Object* container_spec, const json::Object* container_status, - json::value associations, Timestamp collected_at, bool is_deleted) const + json::value associations, Timestamp collected_at, bool is_deleted) throw(json::Exception) { return reader.GetContainerMetadata(pod, container_spec, container_status, std::move(associations), collected_at, is_deleted); } - std::vector GetPodAndContainerMetadata( + static std::vector GetPodAndContainerMetadata( const KubernetesReader& reader, const json::Object* pod, - Timestamp collected_at, bool is_deleted) const throw(json::Exception) { + Timestamp collected_at, bool is_deleted) throw(json::Exception) { return reader.GetPodAndContainerMetadata(pod, collected_at, is_deleted); } - MetadataUpdater::ResourceMetadata GetLegacyResource( + static MetadataUpdater::ResourceMetadata GetLegacyResource( const KubernetesReader& reader, const json::Object* pod, - const std::string& container_name) const throw(json::Exception) { + const std::string& container_name) throw(json::Exception) { return reader.GetLegacyResource(pod, container_name); } - json::value ComputePodAssociations(const KubernetesReader& reader, + static json::value ComputePodAssociations(const KubernetesReader& reader, const json::Object* pod) { return reader.ComputePodAssociations(pod); } - void UpdateOwnersCache(KubernetesReader* reader, const std::string& key, + static void UpdateOwnersCache(KubernetesReader* reader, const std::string& key, const json::value& value) { reader->owners_[key] = value->Clone(); } - MetadataUpdater::ResourceMetadata GetClusterMetadata( - const KubernetesReader& reader, Timestamp collected_at) const + static MetadataUpdater::ResourceMetadata GetClusterMetadata( + const KubernetesReader& reader, Timestamp collected_at) throw(json::Exception) { return reader.GetClusterMetadata(collected_at); } - void UpdateServiceToMetadataCache( + static void UpdateServiceToMetadataCache( KubernetesReader* reader, const json::Object* service, bool is_deleted) throw(json::Exception) { return reader->UpdateServiceToMetadataCache(service, is_deleted); } - void UpdateServiceToPodsCache( + static void UpdateServiceToPodsCache( KubernetesReader* reader, const json::Object* endpoints, bool is_deleted) throw(json::Exception) { return reader->UpdateServiceToPodsCache(endpoints, is_deleted);