From f41a679d02ad9289dc282d9078f93871a655fa53 Mon Sep 17 00:00:00 2001 From: "David B. Tucker" Date: Wed, 30 May 2018 14:01:04 -0400 Subject: [PATCH] Add more tests for environment.cc, for reading values from both config or metadata server. --- test/environment_unittest.cc | 93 +++++++++++++++++++++++++++++++++++- 1 file changed, 92 insertions(+), 1 deletion(-) diff --git a/test/environment_unittest.cc b/test/environment_unittest.cc index a76e530b..3da44d20 100644 --- a/test/environment_unittest.cc +++ b/test/environment_unittest.cc @@ -74,6 +74,51 @@ TEST(TemporaryFile, Basic) { EXPECT_FALSE(boost::filesystem::exists(path)); } +// +// Tests for values that can be set in configuration. +// +TEST_F(EnvironmentTest, ValuesFromConfig) { + Configuration config(std::istringstream( + "InstanceId: some-instance-id\n" + "InstanceResourceType: some-instance-resource-type\n" + "InstanceZone: some-instance-zone\n" + "KubernetesClusterLocation: some-kubernetes-cluster-location\n" + "KubernetesClusterName: some-kubernetes-cluster-name\n" + )); + Environment environment(config); + EXPECT_EQ("some-instance-id", environment.InstanceId()); + EXPECT_EQ("some-instance-resource-type", environment.InstanceResourceType()); + EXPECT_EQ("some-instance-zone", environment.InstanceZone()); + EXPECT_EQ("some-kubernetes-cluster-location", + environment.KubernetesClusterLocation()); + EXPECT_EQ("some-kubernetes-cluster-name", + environment.KubernetesClusterName()); +} + +TEST_F(EnvironmentTest, NumericProjectIdFromConfigNewStyleCredentials) { + TemporaryFile credentials_file( + std::string(test_info_->name()) + "_creds.json", + "{\"client_email\":\"user@12345.iam.gserviceaccount.com\"," + "\"private_key\":\"some_key\"}"); + Configuration config(std::istringstream( + "CredentialsFile: '" + credentials_file.FullPath().native() + "'\n" + )); + Environment environment(config); + EXPECT_EQ("12345", environment.NumericProjectId()); +} + +TEST_F(EnvironmentTest, NumericProjectIdFromConfigOldStyleCredentials) { + TemporaryFile credentials_file( + std::string(test_info_->name()) + "_creds.json", + "{\"client_email\":\"12345-hash@developer.gserviceaccount.com\"," + "\"private_key\":\"some_key\"}"); + Configuration config(std::istringstream( + "CredentialsFile: '" + credentials_file.FullPath().native() + "'\n" + )); + Environment environment(config); + EXPECT_EQ("12345", environment.NumericProjectId()); +} + TEST_F(EnvironmentTest, ReadApplicationDefaultCredentialsSucceeds) { TemporaryFile credentials_file( std::string(test_info_->name()) + "_creds.json", @@ -106,7 +151,10 @@ TEST_F(EnvironmentTest, ReadApplicationDefaultCredentialsCaches) { EXPECT_EQ("some_key", environment.CredentialsPrivateKey()); } -TEST_F(EnvironmentTest, GetMetadataString) { +// +// Tests for values that can be read from metadata server. +// +TEST_F(EnvironmentTest, GetMetadataStringWithFakeServer) { testing::FakeServer server; server.SetResponse("/a/b/c", "hello"); @@ -118,4 +166,47 @@ TEST_F(EnvironmentTest, GetMetadataString) { EXPECT_EQ("", environment.GetMetadataString("unknown/path")); } +TEST_F(EnvironmentTest, ValuesFromMetadataServer) { + testing::FakeServer server; + server.SetResponse("/instance/attributes/cluster-location", + "some-cluster-location"); + server.SetResponse("/instance/attributes/cluster-name", "some-cluster-name"); + server.SetResponse("/instance/id", "some-instance-id"); + server.SetResponse("/instance/zone", + "projects/some-project/zones/some-instance-zone"); + server.SetResponse("/project/numeric-project-id", "12345"); + + Configuration config; + Environment environment(config); + SetMetadataServerUrlForTest(&environment, server.GetUrl()); + + EXPECT_EQ("some-cluster-location", environment.KubernetesClusterLocation()); + EXPECT_EQ("some-cluster-name", environment.KubernetesClusterName()); + EXPECT_EQ("some-instance-id", environment.InstanceId()); + EXPECT_EQ("some-instance-zone", environment.InstanceZone()); + EXPECT_EQ("12345", environment.NumericProjectId()); +} + +TEST_F(EnvironmentTest, KubernetesClusterLocationFromMetadataServerKubeEnv) { + testing::FakeServer server; + server.SetResponse("/instance/attributes/kube-env", + "KEY: value\n" + "ZONE: some-kube-env-zone\n"); + + Configuration config; + Environment environment(config); + SetMetadataServerUrlForTest(&environment, server.GetUrl()); + + EXPECT_EQ("some-kube-env-zone", environment.KubernetesClusterLocation()); +} + +// +// Tests for values with hardcoded defaults. +// +TEST_F(EnvironmentTest, InstanceResourceTypeDefault) { + Configuration config; + Environment environment(config); + EXPECT_EQ("gce_instance", environment.InstanceResourceType()); +} + } // namespace google