Skip to content

Commit 5f8c0a5

Browse files
committed
updated test to support legacy SSO
1 parent c76552e commit 5f8c0a5

File tree

1 file changed

+30
-6
lines changed

1 file changed

+30
-6
lines changed

tests/aws-cpp-sdk-core-tests/aws/auth/SSOCredentialTrackingTest.cpp

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,12 @@ class SSOCredentialsProviderTrackingTest : public Aws::Testing::AwsCppSdkGTestSu
9898
void CreateTestConfig(const Aws::String& startUrl) {
9999
std::ofstream cfg(m_configPath.c_str());
100100
cfg << "[default]\n"
101+
"sso_session = my-sso\n"
101102
"sso_account_id = 123456789012\n"
102-
"sso_region = us-east-1\n"
103103
"sso_role_name = TestRole\n"
104+
"\n"
105+
"[sso-session my-sso]\n"
106+
"sso_region = us-east-1\n"
104107
"sso_start_url = " << startUrl << "\n";
105108
cfg.close();
106109

@@ -132,6 +135,27 @@ class SSOCredentialsProviderTrackingTest : public Aws::Testing::AwsCppSdkGTestSu
132135
check.close();
133136
}
134137

138+
void CreateSSOSessionTokenFile(const Aws::String& sessionName /* e.g., "my-sso" */) {
139+
const Aws::String hash = Aws::Utils::HashingUtils::HexEncode(
140+
Aws::Utils::HashingUtils::CalculateSHA1(sessionName));
141+
const Aws::String tokenPath = m_ssoCacheDir + PATH_DELIM + hash + ".json";
142+
143+
std::ofstream tokenFile(tokenPath.c_str());
144+
ASSERT_TRUE(tokenFile.good()) << "Failed to open " << tokenPath;
145+
146+
const auto futureTime = Aws::Utils::DateTime::Now() + std::chrono::hours(1);
147+
tokenFile << "{\n"
148+
" \"accessToken\": \"test-token\",\n"
149+
" \"expiresAt\": \"" << futureTime.ToGmtString(Aws::Utils::DateFormat::ISO_8601) << "\"\n"
150+
// (region/startUrl fields are optional on this path)
151+
"}\n";
152+
tokenFile.close();
153+
154+
std::ifstream check(tokenPath.c_str());
155+
ASSERT_TRUE(check.good()) << "Token not created at: " << tokenPath;
156+
check.close();
157+
}
158+
135159
void RunTrackingProbe(const std::shared_ptr<AWSCredentialsProvider>& provider, const Aws::String& marker) {
136160
// 200 OK dummy response for the signed call
137161
auto req = CreateHttpRequest(URI("dummy"), HttpMethod::HTTP_POST, Aws::Utils::Stream::DefaultResponseStreamFactoryMethod);
@@ -154,14 +178,14 @@ class SSOCredentialsProviderTrackingTest : public Aws::Testing::AwsCppSdkGTestSu
154178
const auto userAgent = last.GetHeaderValue(USER_AGENT_HEADER);
155179
ASSERT_FALSE(userAgent.empty());
156180

157-
const auto parts = StringUtils::Split(userAgent, ' ');
181+
const auto userAgentParsed = StringUtils::Split(userAgent, ' ');
158182
int mCount = 0;
159-
for (const auto& p : parts) if (p.find("m/") != Aws::String::npos) ++mCount;
183+
for (const auto& p : userAgentParsed) if (p.find("m/") != Aws::String::npos) ++mCount;
160184
EXPECT_EQ(1, mCount); // only one m/ section
161185

162-
auto it = std::find_if(parts.begin(), parts.end(),
186+
auto businessMetrics = std::find_if(userAgentParsed.begin(), userAgentParsed.end(),
163187
[&marker](const Aws::String& v){ return v.find("m/") != Aws::String::npos && v.find(marker) != Aws::String::npos; });
164-
EXPECT_TRUE(it != parts.end());
188+
EXPECT_TRUE(businessMetrics != userAgentParsed.end());
165189
}
166190

167191
Aws::String m_profileDir;
@@ -176,7 +200,7 @@ TEST_F(SSOCredentialsProviderTrackingTest, TestSSOCredentialsTracking){
176200
const Aws::String startUrl = "https://test.awsapps.com/start";
177201

178202
CreateTestConfig(startUrl);
179-
CreateSSOTokenFile(startUrl);
203+
CreateSSOSessionTokenFile("my-sso");
180204

181205
// Prepare mock SSO GetRoleCredentials response
182206
auto ssoReq = CreateHttpRequest(

0 commit comments

Comments
 (0)