Skip to content

Commit 72a7f0b

Browse files
author
Nori Zhang
committed
Fix the same subscription ids should not be returned in GetSubscriptionListByName issue.
1 parent f2ccb38 commit 72a7f0b

File tree

3 files changed

+51
-5
lines changed

3 files changed

+51
-5
lines changed

src/Accounts/Accounts.Test/AzureRMProfileTests.cs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,7 @@ public void SingleTenantSubscriptionListSucceed()
500500

501501
[Fact]
502502
[Trait(Category.AcceptanceType, Category.CheckIn)]
503-
public void GetSubscriptionListByNameCorrect()
503+
public void GetSubscriptionListByNameSameIdCorrect()
504504
{
505505
var tenants = new List<string> { DefaultTenant.ToString() };
506506
var firstList = new List<string> { DefaultSubscription.ToString() };
@@ -514,6 +514,29 @@ public void GetSubscriptionListByNameCorrect()
514514
client.TryGetSubscriptionListByName(DefaultTenant.ToString(),
515515
MockSubscriptionClientFactory.GetSubscriptionNameFromId(DefaultSubscription.ToString()),
516516
out subValueList);
517+
Assert.Single(subValueList);
518+
}
519+
520+
521+
[Fact]
522+
[Trait(Category.AcceptanceType, Category.CheckIn)]
523+
public void GetSubscriptionListByNameCorrect()
524+
{
525+
var subId1 = "a11a11aa-aaaa-aaaa-aaaa-aaaa1111aaaa";
526+
var subId2 = "aaaa11aa-aaaa-aaaa-aaaa-aaaa1111aaaa";
527+
528+
var tenants = new List<string> { DefaultTenant.ToString() };
529+
var firstList = new List<string> { subId1 };
530+
var secondList = new List<string> { subId2 };
531+
var thirdList = firstList;
532+
var fourthList = firstList;
533+
var client = SetupTestEnvironment(tenants, firstList, secondList, thirdList, fourthList);
534+
var tenantResults = client.ListTenants();
535+
Assert.Single(tenantResults);
536+
IEnumerable<IAzureSubscription> subValueList;
537+
client.TryGetSubscriptionListByName(DefaultTenant.ToString(),
538+
"SameNameForGetSubscriptionByName",
539+
out subValueList);
517540
Assert.Equal(2, subValueList.Count());
518541
}
519542

src/Accounts/Accounts.Test/Mocks/MockSubscriptionClientFactory.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ public MockSubscriptionClientFactory()
5454

5555
public static string GetSubscriptionNameFromId(string id)
5656
{
57+
if(id == "a11a11aa-aaaa-aaaa-aaaa-aaaa1111aaaa" || id == "aaaa11aa-aaaa-aaaa-aaaa-aaaa1111aaaa")
58+
{
59+
return "SameNameForGetSubscriptionByName";
60+
}
5761
return "Sub-" + id;
5862
}
5963

src/Accounts/Accounts/Models/RMProfileClient.cs

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -421,11 +421,30 @@ public bool TryGetSubscriptionByName(string tenantId, string subscriptionName, o
421421
return subscription != null;
422422
}
423423

424-
public bool TryGetSubscriptionListByName(string tenantId, string subscriptionName, out IEnumerable<IAzureSubscription> subscriptionList)
424+
public bool TryGetSubscriptionListByName(string tenantId, string subscriptionName, out IEnumerable<IAzureSubscription> subscriptions)
425425
{
426-
subscriptionList = ListSubscriptions(tenantId);
427-
subscriptionList = subscriptionList.Where(s => s.Name.Equals(subscriptionName, StringComparison.OrdinalIgnoreCase));
428-
return subscriptionList.Any();
426+
subscriptions = ListSubscriptions(tenantId).Where(s => s.Name.Equals(subscriptionName, StringComparison.OrdinalIgnoreCase));
427+
List<IAzureSubscription> subscriptionList = new List<IAzureSubscription>();
428+
HashSet<Guid> subscriptionIds = new HashSet<Guid>();
429+
foreach(IAzureSubscription subscription in subscriptions)
430+
{
431+
432+
if(subscription is PSAzureSubscription && subscription.GetTenant() != null
433+
&& subscription.GetHomeTenant().Equals(subscription.GetTenant()) && subscriptionIds.Add(subscription.GetId()))
434+
{
435+
subscriptionList.Add(subscription);
436+
}
437+
438+
}
439+
foreach (IAzureSubscription subscription in subscriptions)
440+
{
441+
if (subscriptionIds.Add(subscription.GetId()))
442+
{
443+
subscriptionList.Add(subscription);
444+
}
445+
}
446+
subscriptions = subscriptionList;
447+
return subscriptions.Any();
429448
}
430449

431450
private IAzureSubscription GetFirstSubscription(string tenantId)

0 commit comments

Comments
 (0)