Skip to content

Commit e2b58cb

Browse files
authored
Turn ON AWS_EC2_METADATA_DISABLED for unit tests by default.
Disable client configuration reading region from EC2 metadata in unit tests expect when we want to test it explicitly. This is to avoid the requests retrieving EC2 metadata so that we won't slow down the testing process as well as build process when AUTORUN_UNIT_TESTS is ON.
1 parent 62ed8c2 commit e2b58cb

File tree

4 files changed

+33
-7
lines changed

4 files changed

+33
-7
lines changed

aws-cpp-sdk-core-tests/RunTests.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,19 @@ int main(int argc, char** argv)
2323

2424
Aws::Testing::RedirectHomeToTempIfAppropriate();
2525

26-
Aws::SDKOptions options;
26+
Aws::SDKOptions options;
2727
options.loggingOptions.logLevel = Aws::Utils::Logging::LogLevel::Trace;
2828
options.httpOptions.installSigPipeHandler = true;
2929
AWS_BEGIN_MEMORY_TEST_EX(options, 1024, 128);
3030

3131
Aws::Testing::InitPlatformTest(options);
3232
Aws::InitAPI(options);
33+
// Disable EC2 metadata in client configuration to avoid requests retrieving EC2 metadata in unit tests.
34+
Aws::Testing::SaveEnvironmentVariable("AWS_EC2_METADATA_DISABLED");
35+
Aws::Environment::SetEnv("AWS_EC2_METADATA_DISABLED", "true", 1/*override*/);
3336
::testing::InitGoogleTest(&argc, argv);
3437
int retVal = RUN_ALL_TESTS();
38+
Aws::Testing::RestoreEnvironmentVariables();
3539
Aws::ShutdownAPI(options);
3640
AWS_END_MEMORY_TEST_EX;
3741

aws-cpp-sdk-core-tests/aws/client/AWSClientTest.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,6 @@ class AWSConfigTestSuite : public ::testing::Test
143143
SaveEnvironmentVariable("AWS_PROFILE");
144144
SaveEnvironmentVariable("AWS_DEFAULT_REGION");
145145
SaveEnvironmentVariable("AWS_REGION");
146-
SaveEnvironmentVariable("AWS_EC2_METADATA_DISABLED");
147146

148147
Aws::StringStream ss;
149148
ss << Aws::Auth::GetConfigProfileFilename() + "_blah" << std::this_thread::get_id();
@@ -516,8 +515,6 @@ TEST(AWSClientTest, TestOverflowContainer)
516515
TEST_F(AWSConfigTestSuite, TestClientConfigurationWithNonExistentProfile)
517516
{
518517
// create a config file with profile named Dijkstra
519-
Aws::Environment::SetEnv("AWS_EC2_METADATA_DISABLED", "true", 1);
520-
521518
Aws::OFStream configFileNew(m_configFileName.c_str(), Aws::OFStream::out | Aws::OFStream::trunc);
522519
configFileNew << "[Dijkstra]" << std::endl;
523520
configFileNew << "region = " << Aws::Region::US_WEST_2 << std::endl;
@@ -537,7 +534,6 @@ TEST_F(AWSConfigTestSuite, TestClientConfigurationWithNonExistentProfile)
537534
TEST_F(AWSConfigTestSuite, TestClientConfigurationWithNonExistentConfigFile)
538535
{
539536
Aws::Environment::SetEnv("AWS_CONFIG_FILE", "WhatAreTheChances", 1/*overwrite*/);
540-
Aws::Environment::SetEnv("AWS_EC2_METADATA_DISABLED", "true", 1);
541537
Aws::Config::ReloadCachedConfigFile();
542538

543539
Aws::Client::ClientConfiguration config("default");
@@ -675,6 +671,8 @@ TEST_F(AWSRegionTest, TestResolveRegionFromEC2InstanceMetadata)
675671

676672
Aws::Environment::UnSetEnv("AWS_DEFAULT_REGION");
677673
Aws::Environment::UnSetEnv("AWS_REGION");
674+
// We set AWS_EC2_METADATA_DISABLED=true Aws::Testing::InitPlatformTest, we need to set it to false explicitly for this test.
675+
Aws::Environment::UnSetEnv("AWS_EC2_METADATA_DISABLED");
678676
Aws::OFStream configFile(m_configFileName.c_str(), Aws::OFStream::out | Aws::OFStream::trunc);
679677
configFile << "[default]" << std::endl;
680678
configFile.close();
@@ -708,7 +706,6 @@ TEST_F(AWSRegionTest, TestResolveDefaultRegion)
708706
{
709707
Aws::Environment::UnSetEnv("AWS_DEFAULT_REGION");
710708
Aws::Environment::UnSetEnv("AWS_REGION");
711-
Aws::Environment::SetEnv("AWS_EC2_METADATA_DISABLED", "true", 1);
712709
Aws::OFStream configFile(m_configFileName.c_str(), Aws::OFStream::out | Aws::OFStream::trunc);
713710
configFile << "[default]" << std::endl;
714711
configFile.close();

testing-resources/include/aws/testing/TestingEnvironment.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ namespace Testing
1919
AWS_TESTING_API void SetAwsResourcePrefix(const char* resourcePrefix);
2020
AWS_TESTING_API const Aws::String GetAwsResourcePrefix();
2121
AWS_TESTING_API void ParseArgs(int argc, char** argv);
22+
AWS_TESTING_API void SaveEnvironmentVariable(const char* variableName);
23+
AWS_TESTING_API void RestoreEnvironmentVariables();
2224

2325
} // namespace Testing
2426
} // namespace Aws

testing-resources/source/TestingEnvironment.cpp

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include <aws/testing/TestingEnvironment.h>
88

99
#include <aws/core/platform/FileSystem.h>
10+
#include <aws/core/platform/Environment.h>
1011
#include <aws/testing/platform/PlatformTesting.h>
1112

1213
#include <sstream>
@@ -18,7 +19,7 @@ namespace Testing
1819

1920
void RedirectHomeToTempIfAppropriate()
2021
{
21-
#if !defined(DISABLE_HOME_DIR_REDIRECT)
22+
#if !defined(DISABLE_HOME_DIR_REDIRECT)
2223
//Set $HOME to tmp on unix systems
2324
std::stringstream tempDir; //( P_tmpdir );
2425
tempDir << P_tmpdir;
@@ -66,5 +67,27 @@ void ParseArgs(int argc, char** argv)
6667
}
6768
}
6869

70+
static std::vector<std::pair<const char*, std::string>> s_environments;
71+
72+
void SaveEnvironmentVariable(const char* variableName)
73+
{
74+
s_environments.emplace_back(variableName, Aws::Environment::GetEnv(variableName).c_str());
75+
}
76+
77+
void RestoreEnvironmentVariables()
78+
{
79+
for(const auto& iter : s_environments)
80+
{
81+
if(iter.second.empty())
82+
{
83+
Aws::Environment::UnSetEnv(iter.first);
84+
}
85+
else
86+
{
87+
Aws::Environment::SetEnv(iter.first, iter.second.c_str(), 1/*override*/);
88+
}
89+
}
90+
}
91+
6992
} // namespace Testing
7093
} // namespace Aws

0 commit comments

Comments
 (0)