Skip to content

Commit e58e1df

Browse files
PanPanZouyndu13
authored andcommitted
fix: solve error in default credentials provider
1 parent cd5f9eb commit e58e1df

File tree

11 files changed

+293
-103
lines changed

11 files changed

+293
-103
lines changed

aliyun-net-sdk-core.Tests/Units/Auth/Provider/DefaultCredentialProviderTest.cs

Lines changed: 118 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,20 @@ public void GetAlibabaCloudClientCredentialWithException()
5151
Assert.Equal("There is no credential chain can use.", exception.Message);
5252
}
5353

54+
[Fact]
55+
public void GetCredentialWithException()
56+
{
57+
var provider = new Mock<DefaultCredentialProvider>();
58+
var defaultProvider = provider.Object;
59+
60+
var exception = Assert.Throws<ClientException>(() =>
61+
{
62+
var credential = defaultProvider.GetCredentials();
63+
});
64+
65+
Assert.Equal("There is no credential chain can use.", exception.Message);
66+
}
67+
5468
/*
5569
Case: Test Credential File With default Client Name and file exist with ak value and type
5670
Result: should return AccessKeyCredential
@@ -59,6 +73,14 @@ Use credential chains
5973
[Fact]
6074
public void GetCredentialFileAlibabaCloudCredentialWithAKType()
6175
{
76+
var cacheRoleArn = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ROLE_ARN");
77+
var cacheProviderArn = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_OIDC_PROVIDER_ARN");
78+
var cacheFile = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_OIDC_TOKEN_FILE");
79+
80+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_ROLE_ARN", null);
81+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_OIDC_PROVIDER_ARN", null);
82+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_OIDC_TOKEN_FILE", null);
83+
6284
var profile = DefaultProfile.GetProfile();
6385
profile.DefaultClientName = "default";
6486
var defaultCredentialProvider = new DefaultCredentialProvider(profile, null);
@@ -71,6 +93,9 @@ public void GetCredentialFileAlibabaCloudCredentialWithAKType()
7193
Assert.NotNull(credential);
7294
Assert.NotNull(credential.GetAccessKeyId());
7395
Assert.NotNull(credential.GetAccessKeySecret());
96+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_ROLE_ARN", cacheRoleArn);
97+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_OIDC_PROVIDER_ARN", cacheProviderArn);
98+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_OIDC_TOKEN_FILE", cacheFile);
7499
}
75100

76101
/*
@@ -81,6 +106,10 @@ Use credential chains
81106
[Fact]
82107
public void GetCredentialFileAlibabaCloudCredentialWithAKTypeButAKIsEmpty()
83108
{
109+
var cacheRoleArn = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ROLE_ARN");
110+
var cacheProviderArn = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_OIDC_PROVIDER_ARN");
111+
var cacheFile = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_OIDC_TOKEN_FILE");
112+
84113
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_ROLE_ARN", null);
85114
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_OIDC_PROVIDER_ARN", null);
86115
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_OIDC_TOKEN_FILE", null);
@@ -97,12 +126,23 @@ public void GetCredentialFileAlibabaCloudCredentialWithAKTypeButAKIsEmpty()
97126

98127
TestHelper.DeleteIniFile();
99128

100-
Assert.Equal("Missing required variable option for 'default Client'", exception.Message);
129+
Assert.Equal("Access key ID cannot be null.", exception.Message);
130+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_ROLE_ARN", cacheRoleArn);
131+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_OIDC_PROVIDER_ARN", cacheProviderArn);
132+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_OIDC_TOKEN_FILE", cacheFile);
101133
}
102134

103135
[Fact]
104136
public void GetCredentialFileAlibabaCloudCredentialWithDefaultSection()
105137
{
138+
var cacheRoleArn = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ROLE_ARN");
139+
var cacheProviderArn = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_OIDC_PROVIDER_ARN");
140+
var cacheFile = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_OIDC_TOKEN_FILE");
141+
142+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_ROLE_ARN", null);
143+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_OIDC_PROVIDER_ARN", null);
144+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_OIDC_TOKEN_FILE", null);
145+
106146
TestHelper.CreateIniFileWithDefaultSection();
107147

108148
var profile = DefaultProfile.GetProfile();
@@ -115,6 +155,37 @@ public void GetCredentialFileAlibabaCloudCredentialWithDefaultSection()
115155
TestHelper.DeleteIniFile();
116156
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_CREDENTIALS_FILE", null);
117157
Assert.NotNull(credential);
158+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_ROLE_ARN", cacheRoleArn);
159+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_OIDC_PROVIDER_ARN", cacheProviderArn);
160+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_OIDC_TOKEN_FILE", cacheFile);
161+
162+
}
163+
164+
[Fact]
165+
public void GetOIDCAlibabaCloudCredentialTest()
166+
{
167+
var cacheRoleArn = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ROLE_ARN");
168+
var cacheProviderArn = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_OIDC_PROVIDER_ARN");
169+
var cacheFile = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_OIDC_TOKEN_FILE");
170+
var cacheRegionId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_REGION_ID");
171+
172+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_ROLE_ARN", "test");
173+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_OIDC_PROVIDER_ARN", "test");
174+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_OIDC_TOKEN_FILE", TestHelper.GetOIDCTokenFilePath());
175+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_REGION_ID", "us-west-1");
176+
var profile = DefaultProfile.GetProfile();
177+
profile.DefaultClientName = "default";
178+
var defaultCredentialProvider = new DefaultCredentialProvider(profile, null);
179+
var exception = Assert.Throws<ClientException>(() =>
180+
{
181+
var credential = defaultCredentialProvider.GetAlibabaCloudClientCredential();
182+
});
183+
Assert.Contains("Parameter OIDCProviderArn is not valid", exception.Message);
184+
185+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_ROLE_ARN", cacheRoleArn);
186+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_OIDC_PROVIDER_ARN", cacheProviderArn);
187+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_OIDC_TOKEN_FILE", cacheFile);
188+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_REGION_ID", cacheRegionId);
118189
}
119190

120191
/*
@@ -125,6 +196,14 @@ Use credential chains
125196
[Fact]
126197
public void GetCredentialFileAlibabaCloudCredentialWithEcsRamRole()
127198
{
199+
var cacheRoleArn = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ROLE_ARN");
200+
var cacheProviderArn = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_OIDC_PROVIDER_ARN");
201+
var cacheFile = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_OIDC_TOKEN_FILE");
202+
203+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_ROLE_ARN", null);
204+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_OIDC_PROVIDER_ARN", null);
205+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_OIDC_TOKEN_FILE", null);
206+
128207
var ecsRamRoleCredential =
129208
new InstanceProfileCredentials("fakeak", "fakeaks", "fakesession", DateTime.UtcNow.ToString(), 4000);
130209
var mockHomePath = EnvironmentUtil.GetHomePath();
@@ -144,6 +223,10 @@ public void GetCredentialFileAlibabaCloudCredentialWithEcsRamRole()
144223

145224
TestHelper.DeleteIniFile();
146225
Assert.NotNull(credential);
226+
227+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_ROLE_ARN", cacheRoleArn);
228+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_OIDC_PROVIDER_ARN", cacheProviderArn);
229+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_OIDC_TOKEN_FILE", cacheFile);
147230
}
148231

149232
/*
@@ -161,11 +244,9 @@ public void GetCredentialFileAlibabaCloudCredentialWithFileAndAkExist()
161244

162245
var defaultCredentialProvider = new DefaultCredentialProvider(profile, null);
163246

164-
var credential = (BasicCredentials)defaultCredentialProvider.GetCredentialFileAlibabaCloudCredential();
165-
247+
var ex = Assert.Throws<ClientException>(() => (BasicCredentials)defaultCredentialProvider.GetCredentialFileAlibabaCloudCredential());
248+
Assert.Equal("The configured client type is empty", ex.Message);
166249
TestHelper.DeleteIniFile();
167-
Assert.NotNull(credential);
168-
Assert.Equal("foo", credential.GetAccessKeyId());
169250
}
170251

171252
/*
@@ -182,10 +263,10 @@ public void GetCredentialFileAlibabaCloudCredentialWithFileAndAkExistNotDefault(
182263

183264
var defaultCredentialProvider = new DefaultCredentialProvider(profile, null);
184265

185-
var credential = defaultCredentialProvider.GetCredentialFileAlibabaCloudCredential();
266+
var ex = Assert.Throws<ClientException>(() => defaultCredentialProvider.GetCredentialFileAlibabaCloudCredential());
267+
Assert.Equal("The configured client type is empty", ex.Message);
186268

187269
TestHelper.DeleteIniFile();
188-
Assert.Null(credential);
189270
}
190271

191272
/*
@@ -328,15 +409,15 @@ public void GetInstanceRamRoleAlibabaCloudCredential()
328409
defaultCredentialProvider.GetInstanceRamRoleAlibabaCloudCredential();
329410
});
330411

331-
Assert.Equal("RegionID cannot be null or empty.", exception.Message);
412+
Assert.Equal("Environment variable roleName('ALIBABA_CLOUD_ECS_METADATA') cannot be empty", exception.Message);
332413

333414
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_REGION_ID", "region_id");
334415
profile.DefaultClientName = "test";
335416
defaultCredentialProvider = new DefaultCredentialProvider(profile, null);
336-
var credentialProvider = defaultCredentialProvider.GetInstanceRamRoleAlibabaCloudCredential();
417+
var ex = Assert.Throws<ClientException>(() => defaultCredentialProvider.GetInstanceRamRoleAlibabaCloudCredential());
337418

338419
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_REGION_ID", null);
339-
Assert.Null(credentialProvider);
420+
Assert.Equal("Environment variable roleName('ALIBABA_CLOUD_ECS_METADATA') cannot be empty", exception.Message);
340421
}
341422

342423
[Fact]
@@ -369,13 +450,13 @@ public void GetInstanceRamRoleAlibabaCloudCredential3()
369450
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_REGION_ID", "region_id");
370451
profile.DefaultClientName = "default";
371452
var defaultCredentialProvider = new DefaultCredentialProvider(profile, null);
372-
var exception = Assert.Throws<ArgumentNullException>(() =>
453+
var exception = Assert.Throws<ClientException>(() =>
373454
{
374455
var credentialProvider = defaultCredentialProvider.GetInstanceRamRoleAlibabaCloudCredential();
375456
});
376457

377458
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_REGION_ID", null);
378-
Assert.Equal("You must specifiy a valid role name.", exception.ParamName);
459+
Assert.StartsWith("Environment variable roleName('ALIBABA_CLOUD_ECS_METADATA') cannot be empty", exception.Message);
379460
}
380461

381462
[Fact]
@@ -465,11 +546,10 @@ public void GetRsaKeyPairAlibabaCloudCredential()
465546
var defaultCredentialProvider =
466547
new DefaultCredentialProvider(profile, "publicKeyId", "privateKeyFile", rsaProvider);
467548

468-
var actualCredentil = defaultCredentialProvider.GetRsaKeyPairAlibabaCloudCredential();
549+
var ex = Assert.Throws<ClientException>(() => defaultCredentialProvider.GetRsaKeyPairAlibabaCloudCredential());
469550

470551
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_REGION_ID", null);
471-
Assert.NotNull(actualCredentil);
472-
Assert.Equal("aks", actualCredentil.GetAccessKeySecret());
552+
Assert.Equal("The configured public_key_id or private_key_file is empty", ex.Message);
473553
}
474554

475555
[Fact]
@@ -496,6 +576,14 @@ public void GetRsaKeyPairAlibabaCloudCredential2()
496576
[Fact]
497577
public void GetRsaKeyPairAlibabaCloudCredentialWithException()
498578
{
579+
var cacheRoleArn = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ROLE_ARN");
580+
var cacheProviderArn = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_OIDC_PROVIDER_ARN");
581+
var cacheFile = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_OIDC_TOKEN_FILE");
582+
583+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_ROLE_ARN", null);
584+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_OIDC_PROVIDER_ARN", null);
585+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_OIDC_TOKEN_FILE", null);
586+
499587
var profile = DefaultProfile.GetProfile();
500588
var defaultCredentialProvider = new DefaultCredentialProvider(profile, null);
501589

@@ -504,12 +592,23 @@ public void GetRsaKeyPairAlibabaCloudCredentialWithException()
504592
var credential = defaultCredentialProvider.GetRsaKeyPairAlibabaCloudCredential();
505593
});
506594

507-
Assert.Equal("Missing required variable option for 'default Client'", exception.Message);
595+
Assert.Equal("The configured private_key_file is empty", exception.Message);
596+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_ROLE_ARN", cacheRoleArn);
597+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_OIDC_PROVIDER_ARN", cacheProviderArn);
598+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_OIDC_TOKEN_FILE", cacheFile);
508599
}
509600

510601
[Fact]
511602
public void GetOIDCAlibabaCloudCredential()
512603
{
604+
var cacheRoleArn = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ROLE_ARN");
605+
var cacheProviderArn = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_OIDC_PROVIDER_ARN");
606+
var cacheFile = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_OIDC_TOKEN_FILE");
607+
608+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_ROLE_ARN", null);
609+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_OIDC_PROVIDER_ARN", null);
610+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_OIDC_TOKEN_FILE", null);
611+
513612
var profile = DefaultProfile.GetProfile();
514613
var defaultCredentialProvider = new DefaultCredentialProvider(profile, null);
515614
Assert.Null(defaultCredentialProvider.GetOIDCAlibabaCloudCredential());
@@ -529,9 +628,9 @@ public void GetOIDCAlibabaCloudCredential()
529628
Assert.Equal("fakesessiontoken", credential.GetSessionToken());
530629
Assert.False(credential.WillSoonExpire());
531630

532-
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_ROLE_ARN", null);
533-
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_OIDC_PROVIDER_ARN", null);
534-
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_OIDC_TOKEN_FILE", null);
631+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_ROLE_ARN", cacheRoleArn);
632+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_OIDC_PROVIDER_ARN", cacheProviderArn);
633+
Environment.SetEnvironmentVariable("ALIBABA_CLOUD_OIDC_TOKEN_FILE", cacheFile);
535634
}
536635
}
537636
}

aliyun-net-sdk-core.Tests/Units/Http/HttpResponse.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,4 +174,4 @@ public void SetContentWithEmptyHeaders()
174174
Assert.Equal(FormatType.JSON, instance.ContentType);
175175
}
176176
}
177-
}
177+
}

aliyun-net-sdk-core.Tests/Units/TestHelper.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,11 @@ public static string GetIniFilePath()
7474
return Directory.GetCurrentDirectory() + slash + "credentials.ini";
7575
}
7676

77+
public static string GetTestIniFilePath()
78+
{
79+
return HomePath + Slash + "configTest.ini";
80+
}
81+
7782
public static void DeleteIniFile()
7883
{
7984
File.Delete(homePath + slash + ".alibabacloud" + slash + "credentials.ini");

aliyun-net-sdk-core.Tests/Units/Utils/IniFileHelperTest.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,5 +61,16 @@ public void TestGetValue()
6161
TestHelper.DeleteIniFile();
6262
Assert.Empty(value);
6363
}
64+
65+
[Fact]
66+
public void TestIniReader()
67+
{
68+
var path = TestHelper.GetTestIniFilePath();
69+
var iniReader = new IniReader(path);
70+
var accessKeyId = iniReader.GetValue("access_key_id", "default");
71+
var accessKeySecret = iniReader.GetValue("access_key_secret", "default");
72+
Assert.Equal("foo", accessKeyId);
73+
Assert.Equal("bar", accessKeySecret);
74+
}
6475
}
6576
}

aliyun-net-sdk-core.Tests/aliyun-net-sdk-core-unit-tests.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313
<None Update="OIDCToken.txt">
1414
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
1515
</None>
16+
<None Update="configTest.ini">
17+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
18+
</None>
1619
</ItemGroup>
1720

1821
<ItemGroup>
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
[default]
2+
enable = true
3+
type = access_key
4+
access_key_id = foo
5+
access_key_secret = bar
6+
region_id = cn-hangzhou
7+
8+
[client1]
9+
enable = false
10+
type = ecs_ram_role
11+
role_name = EcsRamRoleTest
12+
13+
14+
[client2]
15+
enable = false
16+
type = ram_role_arn
17+
access_key_id = foo
18+
access_key_secret = bar
19+
role_arn = role_arn
20+
role_session_name = session_name
21+
22+
23+
[client3]
24+
enable = false
25+
type = bearer_token
26+
bearer_token = bearer_token
27+
28+
29+
[client4]
30+
enable = false
31+
type = rsa_key_pair
32+
public_key_id = publicKeyId
33+
private_key_file = /your/pk.pem

0 commit comments

Comments
 (0)