Skip to content

Commit 7c03999

Browse files
authored
Fix client token credentials issue before Az.Account module is imported. (#27248)
1 parent 1ccf118 commit 7c03999

File tree

13 files changed

+77
-235
lines changed

13 files changed

+77
-235
lines changed

src/Attestation/Attestation.Test/ScenarioTests/AttestationTestRunner.cs

Lines changed: 6 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,7 @@
1515
using Microsoft.Azure.Attestation;
1616
using Microsoft.Azure.Commands.Common.Authentication.Abstractions;
1717
using Microsoft.Azure.Commands.TestFx;
18-
using Microsoft.Azure.Management.Attestation;
19-
using Microsoft.Azure.Management.Internal.Resources;
2018
using Microsoft.Azure.Test.HttpRecorder;
21-
using Microsoft.Rest.ClientRuntime.Azure.TestFramework;
2219
using System.Collections.Generic;
2320
using Xunit.Abstractions;
2421

@@ -55,28 +52,14 @@ protected AttestationTestRunner(ITestOutputHelper output)
5552
{"Microsoft.Features", null},
5653
{"Microsoft.Authorization", null}
5754
}
58-
).WithManagementClients(
59-
GetResourceManagementClient,
60-
GetAttestationManagementClient,
61-
GetAttestationClient
55+
)
56+
.WithManagementClients(context =>
57+
{
58+
var creds = context.GetClientCredentials(AzureEnvironment.ExtendedEndpoint.AzureAttestationServiceEndpointResourceId);
59+
return new AttestationClient(creds, HttpMockServer.CreateInstance());
60+
}
6261
)
6362
.Build();
6463
}
65-
66-
private static ResourceManagementClient GetResourceManagementClient(MockContext context)
67-
{
68-
return context.GetServiceClient<ResourceManagementClient>();
69-
}
70-
71-
private static AttestationManagementClient GetAttestationManagementClient(MockContext context)
72-
{
73-
return context.GetServiceClient<AttestationManagementClient>();
74-
}
75-
76-
private static AttestationClient GetAttestationClient(MockContext context)
77-
{
78-
var creds = TestEnvironmentFactory.GetTestEnvironment().GetAccessToken(AzureEnvironmentConstants.AzureAttestationServiceEndpointResourceId);
79-
return new AttestationClient(creds, HttpMockServer.CreateInstance());
80-
}
8164
}
8265
}

src/DataLakeAnalytics/DataLakeAnalytics.Test/ScenarioTests/DataLakeAnalyticsTestRunner.cs

Lines changed: 11 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,9 @@
1212
// limitations under the License.
1313
// ----------------------------------------------------------------------------------
1414

15+
using Microsoft.Azure.Commands.TestFx;
1516
using Microsoft.Azure.Management.DataLake.Analytics;
16-
using Microsoft.Azure.Management.DataLake.Store;
17-
using Microsoft.Rest.ClientRuntime.Azure.TestFramework;
1817
using System.Collections.Generic;
19-
using NewResourceManagementClient = Microsoft.Azure.Management.Internal.Resources.ResourceManagementClient;
20-
using Microsoft.Azure.Commands.TestFx;
2118
using Xunit.Abstractions;
2219

2320
namespace Microsoft.Azure.Commands.DataLakeAnalytics.Test.ScenarioTests
@@ -53,47 +50,18 @@ protected DataLakeAnalyticsTestRunner(ITestOutputHelper output)
5350
{"Microsoft.Features", null},
5451
{"Microsoft.Authorization", null}
5552
}
56-
).WithManagementClients(
57-
GetNewResourceManagementClient,
58-
GetDataLakeStoreAccountManagementClient,
59-
GetDataLakeAnalyticsAccountManagementClient,
60-
GetDataLakeAnalyticsJobManagementClient,
61-
GetDataLakeAnalyticsCatalogManagementClient
53+
)
54+
.WithManagementClients(
55+
context =>
56+
{
57+
return context.GetServiceClient<DataLakeAnalyticsJobManagementClient>(true);
58+
},
59+
context =>
60+
{
61+
return context.GetServiceClient<DataLakeAnalyticsCatalogManagementClient>(true);
62+
}
6263
)
6364
.Build();
6465
}
65-
66-
private static NewResourceManagementClient GetNewResourceManagementClient(MockContext context)
67-
{
68-
return context.GetServiceClient<NewResourceManagementClient>();
69-
}
70-
71-
private static DataLakeStoreAccountManagementClient GetDataLakeStoreAccountManagementClient(MockContext context)
72-
{
73-
return context.GetServiceClient<DataLakeStoreAccountManagementClient>();
74-
}
75-
76-
private static DataLakeAnalyticsAccountManagementClient GetDataLakeAnalyticsAccountManagementClient(MockContext context)
77-
{
78-
return context.GetServiceClient<DataLakeAnalyticsAccountManagementClient>();
79-
}
80-
81-
private static DataLakeAnalyticsJobManagementClient GetDataLakeAnalyticsJobManagementClient(MockContext context)
82-
{
83-
var currentEnvironment = TestEnvironmentFactory.GetTestEnvironment();
84-
var toReturn = context.GetServiceClient<DataLakeAnalyticsJobManagementClient>(true);
85-
toReturn.AdlaJobDnsSuffix =
86-
currentEnvironment.Endpoints.DataLakeAnalyticsJobAndCatalogServiceUri.OriginalString.Replace("https://", "");
87-
return toReturn;
88-
}
89-
90-
private static DataLakeAnalyticsCatalogManagementClient GetDataLakeAnalyticsCatalogManagementClient(MockContext context)
91-
{
92-
var currentEnvironment = TestEnvironmentFactory.GetTestEnvironment();
93-
var toReturn = context.GetServiceClient<DataLakeAnalyticsCatalogManagementClient>(true);
94-
toReturn.AdlaCatalogDnsSuffix =
95-
currentEnvironment.Endpoints.DataLakeAnalyticsJobAndCatalogServiceUri.OriginalString.Replace("https://", "");
96-
return toReturn;
97-
}
9866
}
9967
}

src/DataLakeStore/DataLakeStore.Test/ScenarioTests/DataLakeStoreTestRunner.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,11 @@ protected DataLakeStoreTestRunner(ITestOutputHelper output)
5656
.WithRecordMatcher(
5757
(ignoreResourcesClient, resourceProviders, userAgentsToIgnore) => new UrlDecodingRecordMatcher(ignoreResourcesClient, resourceProviders, userAgentsToIgnore)
5858
)
59-
.WithManagementClients(mockContext =>
59+
.WithManagementClients(context =>
6060
{
6161
AdlsClientFactory.IsTest = true;
62-
var creds = TestEnvironmentFactory.GetTestEnvironment().GetAccessToken(AzureEnvironmentConstants.AzureDataLakeStoreFileSystemEndpointSuffix);
63-
AdlsClientFactory.CustomDelegatingHAndler = mockContext.AddHandlers(creds, new AdlMockDelegatingHandler());
62+
var creds = context.GetClientCredentials(AzureEnvironment.Endpoint.AzureDataLakeStoreFileSystemEndpointSuffix);
63+
AdlsClientFactory.CustomDelegatingHAndler = context.AddHandlers(creds, new AdlMockDelegatingHandler());
6464
AdlsClientFactory.MockCredentials = creds;
6565
return new object();
6666
}

src/Network/Network.Test/ScenarioTests/NetworkTestRunner.cs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
using Microsoft.Azure.Commands.TestFx;
1717
using Microsoft.Azure.KeyVault;
1818
using Microsoft.Azure.Test.HttpRecorder;
19-
using Microsoft.Rest.ClientRuntime.Azure.TestFramework;
2019
using System.Collections.Generic;
2120
using Xunit.Abstractions;
2221

@@ -67,16 +66,14 @@ protected NetworkTestRunner(ITestOutputHelper output)
6766
{"Microsoft.ManagedServiceIdentity", null},
6867
{"Microsoft.PrivateDns", null},
6968
}
70-
).WithManagementClients(
71-
GetKeyVaultClient
69+
)
70+
.WithManagementClients(context =>
71+
{
72+
var creds = context.GetClientCredentials(AzureEnvironment.Endpoint.AzureKeyVaultServiceEndpointResourceId);
73+
return new KeyVaultClient(creds, HttpMockServer.CreateInstance());
74+
}
7275
)
7376
.Build();
7477
}
75-
76-
private static KeyVaultClient GetKeyVaultClient(MockContext context)
77-
{
78-
var creds = TestEnvironmentFactory.GetTestEnvironment().GetAccessToken(AzureEnvironmentConstants.AzureKeyVaultServiceEndpointResourceId);
79-
return new KeyVaultClient(creds, HttpMockServer.CreateInstance());
80-
}
8178
}
8279
}

src/Resources/Resources.Test/ScenarioTests/ResourcesTestRunner.cs

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@
1212
// limitations under the License.
1313
// ----------------------------------------------------------------------------------
1414

15+
using Microsoft.Azure.Commands.Common.Authentication.Abstractions;
1516
using Microsoft.Azure.Commands.ResourceManager.Cmdlets.Components;
1617
using Microsoft.Azure.Commands.ResourceManager.Cmdlets.Extensions;
1718
using Microsoft.Azure.Commands.TestFx;
1819
using Microsoft.Azure.Test.HttpRecorder;
1920
using Microsoft.Rest;
20-
using System;
2121
using System.Collections.Generic;
2222
using System.Linq;
2323
using System.Net.Http;
@@ -56,19 +56,13 @@ protected ResourcesTestRunner(ITestOutputHelper output)
5656
},
5757
resourceProviders: new Dictionary<string, string>()
5858
)
59-
.WithManagementClients(mockContext =>
60-
{
61-
var credentials = HttpMockServer.Mode != HttpRecorderMode.Playback
62-
? new Func<ServiceClientCredentials>(() =>
63-
{
64-
var testEnvironment = TestEnvironmentFactory.GetTestEnvironment();
65-
return testEnvironment.TokenInfo[TokenAudience.Management];
66-
})()
67-
: new TokenCredentials("foo");
68-
69-
HttpClientHelperFactory.Instance = new TestHttpClientHelperFactory(credentials);
70-
return HttpClientHelperFactory.Instance;
71-
})
59+
.WithManagementClients(context =>
60+
{
61+
var creds = context.GetClientCredentials(AzureEnvironment.Endpoint.ActiveDirectoryServiceEndpointResourceId);
62+
HttpClientHelperFactory.Instance = new TestHttpClientHelperFactory(creds);
63+
return HttpClientHelperFactory.Instance;
64+
}
65+
)
7266
.Build();
7367
}
7468
}

src/Resources/Resources.Test/ScenarioTests/RoleAssignmentTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public void RaByResource()
9191
TestRunner.RunTestScript("Test-RaByResource");
9292
}
9393

94-
[Fact]//(Skip = "Test indicates Graph call is not recorded when it actually is, refer to https://github.com/Azure/azure-powershell/issues/14632 for more details, test passes in record mode")]
94+
[Fact]
9595
[Trait(Category.AcceptanceType, Category.CheckIn)]
9696
public void RaByServicePrincipal()
9797
{

src/Sql/Sql.Test/ScenarioTests/SqlTestRunner.cs

Lines changed: 2 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -12,24 +12,10 @@
1212
// limitations under the License.
1313
// ----------------------------------------------------------------------------------
1414

15-
using Microsoft.Azure.Management.Network;
16-
using Microsoft.Azure.Test.HttpRecorder;
17-
using Microsoft.WindowsAzure.Commands.ScenarioTest;
18-
using System.Collections.Generic;
19-
using Microsoft.Azure.Management.Internal.Resources;
20-
using Microsoft.Azure.Management.Sql;
21-
using CommonStorage = Microsoft.Azure.Management.Storage.Version2017_10_01;
22-
using Microsoft.Rest.ClientRuntime.Azure.TestFramework;
23-
using Xunit.Abstractions;
24-
using Microsoft.Azure.Management.EventHub;
25-
using Microsoft.Azure.Management.OperationalInsights;
26-
using SDKMonitor = Microsoft.Azure.Management.Monitor;
27-
using CommonMonitor = Microsoft.Azure.Management.Monitor.Version2018_09_01;
28-
using Microsoft.Azure.Management.KeyVault;
29-
using Microsoft.Azure.Graph.RBAC;
30-
using Microsoft.Azure.Commands.Common.Authentication.Abstractions;
3115
using Microsoft.Azure.Commands.TestFx;
3216
using Microsoft.Azure.Commands.TestFx.Recorder;
17+
using System.Collections.Generic;
18+
using Xunit.Abstractions;
3319

3420
namespace Microsoft.Azure.Commands.ScenarioTest.SqlTests
3521
{
@@ -43,7 +29,6 @@ public class SqlTestRunner
4329
"Microsoft.Sql/servers/databases",
4430
"Microsoft.Sql/servers/elasticPools"
4531
};
46-
private const string TenantIdKey = "TenantId";
4732

4833
protected readonly ITestRunner TestRunner;
4934

@@ -93,87 +78,5 @@ protected SqlTestRunner(ITestOutputHelper output)
9378
)
9479
.Build();
9580
}
96-
97-
protected SqlManagementClient GetSqlClient(MockContext context)
98-
{
99-
return context.GetServiceClient<SqlManagementClient>();
100-
}
101-
102-
protected SDKMonitor.IMonitorManagementClient GetMonitorManagementClient(MockContext context)
103-
{
104-
return context.GetServiceClient<SDKMonitor.MonitorManagementClient>();
105-
}
106-
107-
protected CommonMonitor.IMonitorManagementClient GetCommonMonitorManagementClient(MockContext context)
108-
{
109-
return context.GetServiceClient<CommonMonitor.MonitorManagementClient>();
110-
}
111-
112-
protected IEventHubManagementClient GetEventHubManagementClient(MockContext context)
113-
{
114-
return context.GetServiceClient<EventHubManagementClient>();
115-
}
116-
117-
protected IOperationalInsightsManagementClient GetOperationalInsightsManagementClient(MockContext context)
118-
{
119-
return context.GetServiceClient<OperationalInsightsManagementClient>();
120-
}
121-
122-
protected ResourceManagementClient GetResourcesClient(MockContext context)
123-
{
124-
return context.GetServiceClient<ResourceManagementClient>();
125-
}
126-
127-
protected GraphRbacManagementClient GetGraphClient(MockContext context)
128-
{
129-
GraphRbacManagementClient graphClient = context.GetServiceClient<GraphRbacManagementClient>();
130-
graphClient.BaseUri = TestEnvironmentFactory.GetTestEnvironment().Endpoints.GraphUri;
131-
graphClient.TenantID = TestEnvironmentFactory.GetTestEnvironment().TenantId;
132-
return graphClient;
133-
}
134-
135-
protected Microsoft.Azure.Graph.RBAC.Version1_6.GraphRbacManagementClient GetGraphClientVersion1_6(MockContext context)
136-
{
137-
Microsoft.Azure.Graph.RBAC.Version1_6.GraphRbacManagementClient graphClient = context.GetServiceClient<Microsoft.Azure.Graph.RBAC.Version1_6.GraphRbacManagementClient>();
138-
graphClient.BaseUri = TestEnvironmentFactory.GetTestEnvironment().Endpoints.GraphUri;
139-
string tenantId = null;
140-
141-
if (HttpMockServer.Mode == HttpRecorderMode.Record)
142-
{
143-
tenantId = TestEnvironmentFactory.GetTestEnvironment().TenantId;
144-
HttpMockServer.Variables[TenantIdKey] = tenantId;
145-
}
146-
else if (HttpMockServer.Mode == HttpRecorderMode.Playback)
147-
{
148-
if (HttpMockServer.Variables.ContainsKey(TenantIdKey))
149-
{
150-
tenantId = HttpMockServer.Variables[TenantIdKey];
151-
}
152-
}
153-
graphClient.TenantID = tenantId;
154-
if (AzureRmProfileProvider.Instance != null &&
155-
AzureRmProfileProvider.Instance.Profile != null &&
156-
AzureRmProfileProvider.Instance.Profile.DefaultContext != null &&
157-
AzureRmProfileProvider.Instance.Profile.DefaultContext.Tenant != null)
158-
{
159-
AzureRmProfileProvider.Instance.Profile.DefaultContext.Tenant.Id = tenantId;
160-
}
161-
return graphClient;
162-
}
163-
164-
protected KeyVaultManagementClient GetKeyVaultClient(MockContext context)
165-
{
166-
return context.GetServiceClient<KeyVaultManagementClient>();
167-
}
168-
169-
protected NetworkManagementClient GetNetworkClient(MockContext context)
170-
{
171-
return context.GetServiceClient<NetworkManagementClient>();
172-
}
173-
174-
protected static CommonStorage.StorageManagementClient GetStorageManagementClient(MockContext context)
175-
{
176-
return context.GetServiceClient<CommonStorage.StorageManagementClient>();
177-
}
17881
}
17982
}

src/Synapse/Synapse.Test/ScenarioTests/SynapseTestRunner.cs

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616
using Microsoft.Azure.Commands.TestFx;
1717
using Microsoft.Azure.Synapse;
1818
using Microsoft.Azure.Test.HttpRecorder;
19-
using Microsoft.Rest;
20-
using Microsoft.Rest.ClientRuntime.Azure.TestFramework;
2119
using System.Collections.Generic;
2220
using Xunit.Abstractions;
2321

@@ -71,16 +69,14 @@ protected SynapseTestRunner(ITestOutputHelper output)
7169
{"Microsoft.OperationalInsights", null},
7270
{"Microsoft.Storage", null}
7371
}
74-
).WithManagementClients(
75-
GetSynapseClient
72+
)
73+
.WithManagementClients(context =>
74+
{
75+
var creds = context.GetClientCredentials(AzureEnvironment.ExtendedEndpoint.AzureSynapseAnalyticsEndpointResourceId);
76+
return new SynapseClient(creds, HttpMockServer.CreateInstance());
77+
}
7678
)
7779
.Build();
7880
}
79-
80-
protected static SynapseClient GetSynapseClient(MockContext context)
81-
{
82-
var creds = TestEnvironmentFactory.GetTestEnvironment().GetAccessToken(AzureEnvironmentConstants.AzureSynapseAnalyticsEndpointResourceId);
83-
return new SynapseClient(creds, HttpMockServer.CreateInstance());
84-
}
8581
}
8682
}

tools/TestFx/DelegatingHandlers/HttpMockServer.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
using Microsoft.Azure.Commands.ResourceManager.Common;
1818
using Microsoft.Azure.Commands.TestFx;
1919
using Microsoft.Azure.Commands.TestFx.Recorder;
20+
using Microsoft.Azure.PowerShell.Authenticators;
21+
using Microsoft.Azure.PowerShell.Authenticators.Factories;
2022
using System;
2123
using System.Collections.Generic;
2224
using System.IO;
@@ -72,6 +74,15 @@ public static void Initialize(string callerIdentity, string testIdentity)
7274
{
7375
AzureSession.Instance.ARMContextSaveMode = ContextSaveMode.CurrentUser;
7476
ProtectedProfileProvider.InitializeResourceManagerProfile();
77+
78+
IAuthenticatorBuilder builder = new DefaultAuthenticatorBuilder();
79+
AzureSession.Instance.RegisterComponent(AuthenticatorBuilder.AuthenticatorBuilderKey, () => builder);
80+
81+
PowerShellTokenCacheProvider provider = new SharedTokenCacheProvider();
82+
AzureSession.Instance.RegisterComponent(PowerShellTokenCacheProvider.PowerShellTokenCacheProviderKey, () => provider);
83+
84+
AzureSession.Instance.RegisterComponent(nameof(AzureCredentialFactory), () => new AzureCredentialFactory());
85+
//AzureSession.Instance.RegisterComponent(nameof(MsalAccessTokenAcquirerFactory), () => new MsalAccessTokenAcquirerFactory());
7586
}
7687
else if (Mode == HttpRecorderMode.Playback)
7788
{

0 commit comments

Comments
 (0)