3
3
4
4
#if NIX_WITH_AWS_CRT_SUPPORT
5
5
6
+ # include " nix/util/error.hh"
6
7
# include < gtest/gtest.h>
7
8
# include < gmock/gmock.h>
8
9
@@ -23,45 +24,52 @@ class AwsCredentialProviderTest : public ::testing::Test
23
24
24
25
TEST_F (AwsCredentialProviderTest, createDefault)
25
26
{
26
- auto provider = AwsCredentialProvider::createDefault ();
27
- // Provider may be null in sandboxed environments, which is acceptable
28
- if (!provider) {
29
- GTEST_SKIP () << " AWS CRT not available in this environment" ;
27
+ try {
28
+ auto provider = AwsCredentialProvider::createDefault ();
29
+ EXPECT_NE (provider, nullptr );
30
+ } catch (const AwsCrtInitializationError & e) {
31
+ GTEST_SKIP () << " AWS CRT not available in this environment: " << e.what ();
30
32
}
31
- EXPECT_NE (provider, nullptr );
32
33
}
33
34
34
35
TEST_F (AwsCredentialProviderTest, createProfile_Empty)
35
36
{
36
- auto provider = AwsCredentialProvider::createProfile (" " );
37
- // Provider may be null in sandboxed environments, which is acceptable
38
- if (!provider) {
39
- GTEST_SKIP () << " AWS CRT not available in this environment" ;
37
+ try {
38
+ auto provider = AwsCredentialProvider::createProfile (" " );
39
+ EXPECT_NE (provider, nullptr );
40
+ } catch (const AwsCrtInitializationError & e) {
41
+ GTEST_SKIP () << " AWS CRT not available in this environment: " << e.what ();
40
42
}
41
- EXPECT_NE (provider, nullptr );
42
43
}
43
44
44
45
TEST_F (AwsCredentialProviderTest, createProfile_Named)
45
46
{
46
- auto provider = AwsCredentialProvider::createProfile (" test-profile" );
47
- // Profile creation may fail if profile doesn't exist, which is expected
48
- // Just verify the call doesn't crash
49
- EXPECT_TRUE (true );
47
+ try {
48
+ auto provider = AwsCredentialProvider::createProfile (" test-profile" );
49
+ // Profile creation may succeed if profile exists
50
+ EXPECT_NE (provider, nullptr );
51
+ } catch (const AwsCrtInitializationError & e) {
52
+ GTEST_SKIP () << " AWS CRT not available in this environment: " << e.what ();
53
+ } catch (const Error & e) {
54
+ // Profile creation may fail if profile doesn't exist, which is expected
55
+ EXPECT_TRUE (true );
56
+ }
50
57
}
51
58
52
59
TEST_F (AwsCredentialProviderTest, getCredentials_NoCredentials)
53
60
{
54
61
// With no environment variables or profile, should return nullopt
55
- auto provider = AwsCredentialProvider::createDefault ();
56
- if (!provider) {
57
- GTEST_SKIP () << " AWS CRT not available in this environment" ;
62
+ try {
63
+ auto provider = AwsCredentialProvider::createDefault ();
64
+ ASSERT_NE (provider, nullptr );
65
+
66
+ auto creds = provider->getCredentials ();
67
+ // This may or may not be null depending on environment,
68
+ // so just verify the call doesn't crash
69
+ EXPECT_TRUE (true ); // Basic sanity check
70
+ } catch (const AwsCrtInitializationError & e) {
71
+ GTEST_SKIP () << " AWS CRT not available in this environment: " << e.what ();
58
72
}
59
- ASSERT_NE (provider, nullptr );
60
-
61
- auto creds = provider->getCredentials ();
62
- // This may or may not be null depending on environment,
63
- // so just verify the call doesn't crash
64
- EXPECT_TRUE (true ); // Basic sanity check
65
73
}
66
74
67
75
TEST_F (AwsCredentialProviderTest, getCredentials_FromEnvironment)
@@ -71,22 +79,19 @@ TEST_F(AwsCredentialProviderTest, getCredentials_FromEnvironment)
71
79
setenv (" AWS_SECRET_ACCESS_KEY" , " test-secret-key" , 1 );
72
80
setenv (" AWS_SESSION_TOKEN" , " test-session-token" , 1 );
73
81
74
- auto provider = AwsCredentialProvider::createDefault ();
75
- if (!provider) {
76
- // Clean up first
77
- unsetenv (" AWS_ACCESS_KEY_ID" );
78
- unsetenv (" AWS_SECRET_ACCESS_KEY" );
79
- unsetenv (" AWS_SESSION_TOKEN" );
80
- GTEST_SKIP () << " AWS CRT not available in this environment" ;
81
- }
82
- ASSERT_NE (provider, nullptr );
83
-
84
- auto creds = provider->getCredentials ();
85
- if (creds.has_value ()) {
86
- EXPECT_EQ (creds->accessKeyId , " test-access-key" );
87
- EXPECT_EQ (creds->secretAccessKey , " test-secret-key" );
88
- EXPECT_TRUE (creds->sessionToken .has_value ());
89
- EXPECT_EQ (*creds->sessionToken , " test-session-token" );
82
+ try {
83
+ auto provider = AwsCredentialProvider::createDefault ();
84
+ ASSERT_NE (provider, nullptr );
85
+
86
+ auto creds = provider->getCredentials ();
87
+ if (creds.has_value ()) {
88
+ EXPECT_EQ (creds->accessKeyId , " test-access-key" );
89
+ EXPECT_EQ (creds->secretAccessKey , " test-secret-key" );
90
+ EXPECT_TRUE (creds->sessionToken .has_value ());
91
+ EXPECT_EQ (*creds->sessionToken , " test-session-token" );
92
+ }
93
+ } catch (const AwsCrtInitializationError & e) {
94
+ GTEST_SKIP () << " AWS CRT not available in this environment: " << e.what ();
90
95
}
91
96
92
97
// Clean up
@@ -101,20 +106,18 @@ TEST_F(AwsCredentialProviderTest, getCredentials_WithoutSessionToken)
101
106
setenv (" AWS_ACCESS_KEY_ID" , " test-access-key-2" , 1 );
102
107
setenv (" AWS_SECRET_ACCESS_KEY" , " test-secret-key-2" , 1 );
103
108
104
- auto provider = AwsCredentialProvider::createDefault ();
105
- if (!provider) {
106
- // Clean up first
107
- unsetenv (" AWS_ACCESS_KEY_ID" );
108
- unsetenv (" AWS_SECRET_ACCESS_KEY" );
109
- GTEST_SKIP () << " AWS CRT not available in this environment" ;
110
- }
111
- ASSERT_NE (provider, nullptr );
112
-
113
- auto creds = provider->getCredentials ();
114
- if (creds.has_value ()) {
115
- EXPECT_EQ (creds->accessKeyId , " test-access-key-2" );
116
- EXPECT_EQ (creds->secretAccessKey , " test-secret-key-2" );
117
- EXPECT_FALSE (creds->sessionToken .has_value ());
109
+ try {
110
+ auto provider = AwsCredentialProvider::createDefault ();
111
+ ASSERT_NE (provider, nullptr );
112
+
113
+ auto creds = provider->getCredentials ();
114
+ if (creds.has_value ()) {
115
+ EXPECT_EQ (creds->accessKeyId , " test-access-key-2" );
116
+ EXPECT_EQ (creds->secretAccessKey , " test-secret-key-2" );
117
+ EXPECT_FALSE (creds->sessionToken .has_value ());
118
+ }
119
+ } catch (const AwsCrtInitializationError & e) {
120
+ GTEST_SKIP () << " AWS CRT not available in this environment: " << e.what ();
118
121
}
119
122
120
123
// Clean up
@@ -125,15 +128,16 @@ TEST_F(AwsCredentialProviderTest, getCredentials_WithoutSessionToken)
125
128
TEST_F (AwsCredentialProviderTest, multipleProviders_Independent)
126
129
{
127
130
// Test that multiple providers can be created independently
128
- auto provider1 = AwsCredentialProvider::createDefault ();
129
- auto provider2 = AwsCredentialProvider::createDefault (); // Use default for both
130
-
131
- if (!provider1 || !provider2) {
132
- GTEST_SKIP () << " AWS CRT not available in this environment" ;
131
+ try {
132
+ auto provider1 = AwsCredentialProvider::createDefault ();
133
+ auto provider2 = AwsCredentialProvider::createDefault (); // Use default for both
134
+
135
+ EXPECT_NE (provider1, nullptr );
136
+ EXPECT_NE (provider2, nullptr );
137
+ EXPECT_NE (provider1.get (), provider2.get ());
138
+ } catch (const AwsCrtInitializationError & e) {
139
+ GTEST_SKIP () << " AWS CRT not available in this environment: " << e.what ();
133
140
}
134
- EXPECT_NE (provider1, nullptr );
135
- EXPECT_NE (provider2, nullptr );
136
- EXPECT_NE (provider1.get (), provider2.get ());
137
141
}
138
142
139
143
} // namespace nix
0 commit comments