Skip to content

Commit 65e6ed3

Browse files
authored
[Metrics Advisor] Re-record with Test proxy (Azure#34435)
1 parent 79ad675 commit 65e6ed3

File tree

144 files changed

+30494
-12208
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

144 files changed

+30494
-12208
lines changed

sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/module-info.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,4 @@
1313
opens com.azure.ai.metricsadvisor.administration.models to com.fasterxml.jackson.databind;
1414
opens com.azure.ai.metricsadvisor.models to com.fasterxml.jackson.databind;
1515
opens com.azure.ai.metricsadvisor.implementation.models to com.fasterxml.jackson.databind, com.azure.core;
16-
exports com.azure.ai.metricsadvisor.implementation.models;
1716
}

sdk/metricsadvisor/azure-ai-metricsadvisor/src/test/java/com/azure/ai/metricsadvisor/MetricsAdvisorAdminClientBuilderTest.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@
1212
import com.azure.core.http.policy.HttpLogOptions;
1313
import com.azure.core.http.policy.RetryOptions;
1414
import com.azure.core.http.policy.RetryPolicy;
15-
import com.azure.core.test.TestBase;
15+
import com.azure.core.test.TestProxyTestBase;
1616
import com.azure.core.test.annotation.DoNotRecord;
17+
import com.azure.core.test.models.CustomMatcher;
1718
import com.azure.core.util.Configuration;
1819
import com.azure.identity.DefaultAzureCredentialBuilder;
1920
import org.junit.jupiter.api.Disabled;
@@ -22,20 +23,22 @@
2223
import org.junit.jupiter.params.provider.MethodSource;
2324

2425
import java.time.Duration;
26+
import java.util.Arrays;
2527
import java.util.function.Consumer;
2628

2729
import static com.azure.ai.metricsadvisor.MetricsAdvisorClientBuilderTest.PLAYBACK_ENDPOINT;
2830
import static com.azure.ai.metricsadvisor.TestUtils.AZURE_METRICS_ADVISOR_ENDPOINT;
2931
import static com.azure.ai.metricsadvisor.TestUtils.DISPLAY_NAME_WITH_ARGUMENTS;
3032
import static com.azure.ai.metricsadvisor.TestUtils.INVALID_ENDPOINT;
33+
import static com.azure.ai.metricsadvisor.TestUtils.getEmailSanitizers;
3134
import static org.junit.jupiter.api.Assertions.assertEquals;
3235
import static org.junit.jupiter.api.Assertions.assertNotNull;
3336
import static org.junit.jupiter.api.Assertions.assertThrows;
3437

3538
/**
3639
* Tests for Metrics Advisor Administration client builder
3740
*/
38-
public class MetricsAdvisorAdminClientBuilderTest extends TestBase {
41+
public class MetricsAdvisorAdminClientBuilderTest extends TestProxyTestBase {
3942
/**
4043
* Test client builder with invalid API key
4144
*/
@@ -143,6 +146,7 @@ private void clientBuilderWithTokenCredentialRunner(HttpClient httpClient, Metri
143146
.configuration(Configuration.getGlobalConfiguration())
144147
.httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS));
145148

149+
interceptorManager.addSanitizers(getEmailSanitizers());
146150
if (interceptorManager.isPlaybackMode()) {
147151
clientBuilder.credential(new MetricsAdvisorKeyCredential("subscription_key", "api_key"));
148152
} else {
@@ -170,11 +174,13 @@ private MetricsAdvisorAdministrationClientBuilder createClientBuilder(HttpClient
170174
final MetricsAdvisorAdministrationClientBuilder clientBuilder = new MetricsAdvisorAdministrationClientBuilder()
171175
.credential(credential)
172176
.endpoint(endpoint)
173-
.httpClient(httpClient == null ? interceptorManager.getPlaybackClient() : httpClient)
177+
.httpClient(interceptorManager.isPlaybackMode() ? interceptorManager.getPlaybackClient() : httpClient)
174178
.serviceVersion(serviceVersion);
175-
176-
if (!interceptorManager.isPlaybackMode()) {
179+
interceptorManager.addSanitizers(getEmailSanitizers());
180+
if (interceptorManager.isRecordMode()) {
177181
clientBuilder.addPolicy(interceptorManager.getRecordPolicy());
182+
} else if (interceptorManager.isPlaybackMode()) {
183+
interceptorManager.addMatchers(Arrays.asList(new CustomMatcher().setHeadersKeyOnlyMatch(Arrays.asList("x-api-key"))));
178184
}
179185

180186
return clientBuilder;

sdk/metricsadvisor/azure-ai-metricsadvisor/src/test/java/com/azure/ai/metricsadvisor/MetricsAdvisorAdministrationClientTestBase.java

Lines changed: 33 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,21 @@
88
import com.azure.core.http.HttpClient;
99
import com.azure.core.http.policy.HttpLogDetailLevel;
1010
import com.azure.core.http.policy.HttpLogOptions;
11-
import com.azure.core.test.TestBase;
12-
import com.azure.core.test.TestMode;
11+
import com.azure.core.test.TestProxyTestBase;
1312
import com.azure.core.test.http.AssertingHttpClientBuilder;
13+
import com.azure.core.test.models.BodilessMatcher;
14+
import com.azure.core.test.models.CustomMatcher;
15+
import com.azure.core.test.utils.MockTokenCredential;
1416
import com.azure.core.util.Configuration;
1517
import com.azure.identity.DefaultAzureCredentialBuilder;
1618

19+
import java.util.Arrays;
20+
1721
import static com.azure.ai.metricsadvisor.MetricsAdvisorClientBuilderTest.PLAYBACK_ENDPOINT;
1822
import static com.azure.ai.metricsadvisor.TestUtils.AZURE_METRICS_ADVISOR_ENDPOINT;
23+
import static com.azure.ai.metricsadvisor.TestUtils.getEmailSanitizers;
1924

20-
public abstract class MetricsAdvisorAdministrationClientTestBase extends TestBase {
25+
public abstract class MetricsAdvisorAdministrationClientTestBase extends TestProxyTestBase {
2126

2227
@Override
2328
protected void beforeTest() {
@@ -37,11 +42,11 @@ private HttpClient buildSyncAssertingClient(HttpClient httpClient) {
3742

3843
MetricsAdvisorAdministrationClientBuilder getMetricsAdvisorAdministrationBuilder(HttpClient httpClient,
3944
MetricsAdvisorServiceVersion serviceVersion, boolean isSync) {
40-
HttpClient httpClient1;
45+
HttpClient httpClient1 = interceptorManager.isPlaybackMode() ? interceptorManager.getPlaybackClient() : httpClient;
4146
if (isSync) {
42-
httpClient1 = buildSyncAssertingClient(httpClient == null ? interceptorManager.getPlaybackClient() : httpClient);
47+
httpClient1 = buildSyncAssertingClient(httpClient1);
4348
} else {
44-
httpClient1 = buildAsyncAssertingClient(httpClient == null ? interceptorManager.getPlaybackClient() : httpClient);
49+
httpClient1 = buildAsyncAssertingClient(httpClient1);
4550
}
4651
return getMetricsAdvisorAdministrationBuilderInternal(httpClient1, serviceVersion, true);
4752
}
@@ -57,20 +62,31 @@ MetricsAdvisorAdministrationClientBuilder getMetricsAdvisorAdministrationBuilder
5762
boolean useKeyCredential) {
5863
MetricsAdvisorAdministrationClientBuilder builder = new MetricsAdvisorAdministrationClientBuilder()
5964
.endpoint(getEndpoint())
60-
.httpClient(httpClient == null ? interceptorManager.getPlaybackClient() : httpClient)
65+
.httpClient(httpClient)
6166
.httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS))
62-
.serviceVersion(serviceVersion)
63-
.addPolicy(interceptorManager.getRecordPolicy());
67+
.serviceVersion(serviceVersion);
68+
interceptorManager.addSanitizers(getEmailSanitizers());
6469

65-
if (getTestMode() == TestMode.PLAYBACK) {
66-
builder.credential(new MetricsAdvisorKeyCredential("subscription_key", "api_key"));
70+
if (useKeyCredential) {
71+
if (interceptorManager.isPlaybackMode()) {
72+
builder.credential(new MetricsAdvisorKeyCredential("subscription_key", "api_key"));
73+
// setting bodiless matcher to "exclude" matching request bodies with UUID's
74+
interceptorManager.addMatchers(Arrays.asList(new BodilessMatcher(), new CustomMatcher().setHeadersKeyOnlyMatch(Arrays.asList("x-api-key"))));
75+
} else if (interceptorManager.isRecordMode()) {
76+
builder
77+
.credential(new MetricsAdvisorKeyCredential(
78+
Configuration.getGlobalConfiguration().get("AZURE_METRICS_ADVISOR_SUBSCRIPTION_KEY"),
79+
Configuration.getGlobalConfiguration().get("AZURE_METRICS_ADVISOR_API_KEY")))
80+
.addPolicy(interceptorManager.getRecordPolicy());
81+
}
6782
} else {
68-
if (useKeyCredential) {
69-
builder.credential(new MetricsAdvisorKeyCredential(
70-
Configuration.getGlobalConfiguration().get("AZURE_METRICS_ADVISOR_SUBSCRIPTION_KEY"),
71-
Configuration.getGlobalConfiguration().get("AZURE_METRICS_ADVISOR_API_KEY")));
72-
} else {
73-
builder.credential(new DefaultAzureCredentialBuilder().build());
83+
if (interceptorManager.isPlaybackMode()) {
84+
builder.credential(new MockTokenCredential());
85+
interceptorManager.addMatchers(Arrays.asList(new BodilessMatcher()));
86+
} else if (interceptorManager.isRecordMode()) {
87+
builder
88+
.credential(new DefaultAzureCredentialBuilder().build())
89+
.addPolicy(interceptorManager.getRecordPolicy());
7490
}
7591
}
7692
return builder;

sdk/metricsadvisor/azure-ai-metricsadvisor/src/test/java/com/azure/ai/metricsadvisor/MetricsAdvisorClientBuilderTest.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@
1212
import com.azure.core.http.policy.HttpLogOptions;
1313
import com.azure.core.http.policy.RetryOptions;
1414
import com.azure.core.http.policy.RetryPolicy;
15-
import com.azure.core.test.TestBase;
15+
import com.azure.core.test.TestProxyTestBase;
1616
import com.azure.core.test.annotation.DoNotRecord;
17+
import com.azure.core.test.models.CustomMatcher;
1718
import com.azure.core.util.Configuration;
1819
import com.azure.core.util.Context;
1920
import com.azure.identity.DefaultAzureCredentialBuilder;
@@ -23,19 +24,21 @@
2324
import org.junit.jupiter.params.provider.MethodSource;
2425

2526
import java.time.Duration;
27+
import java.util.Arrays;
2628
import java.util.function.Consumer;
2729

2830
import static com.azure.ai.metricsadvisor.TestUtils.AZURE_METRICS_ADVISOR_ENDPOINT;
2931
import static com.azure.ai.metricsadvisor.TestUtils.DISPLAY_NAME_WITH_ARGUMENTS;
3032
import static com.azure.ai.metricsadvisor.TestUtils.INVALID_ENDPOINT;
33+
import static com.azure.ai.metricsadvisor.TestUtils.getEmailSanitizers;
3134
import static org.junit.jupiter.api.Assertions.assertEquals;
3235
import static org.junit.jupiter.api.Assertions.assertNotNull;
3336
import static org.junit.jupiter.api.Assertions.assertThrows;
3437

3538
/**
3639
* Tests for Metrics Advisor client builder
3740
*/
38-
public class MetricsAdvisorClientBuilderTest extends TestBase {
41+
public class MetricsAdvisorClientBuilderTest extends TestProxyTestBase {
3942
private static final String METRIC_ID = "b6c0649c-0c51-4aa6-82b6-3c3b0aa55066";
4043
private static final int PAGE_SIZE = 10;
4144
private static final int LISTING_LIMIT = 100;
@@ -185,13 +188,15 @@ private MetricsAdvisorClientBuilder createClientBuilder(HttpClient httpClient, M
185188
final MetricsAdvisorClientBuilder clientBuilder = new MetricsAdvisorClientBuilder()
186189
.credential(credential)
187190
.endpoint(endpoint)
188-
.httpClient(httpClient == null ? interceptorManager.getPlaybackClient() : httpClient)
191+
.httpClient(interceptorManager.isPlaybackMode() ? interceptorManager.getPlaybackClient() : httpClient)
189192
.serviceVersion(serviceVersion);
190193

191-
if (!interceptorManager.isPlaybackMode()) {
194+
interceptorManager.addSanitizers(getEmailSanitizers());
195+
if (interceptorManager.isRecordMode()) {
192196
clientBuilder.addPolicy(interceptorManager.getRecordPolicy());
197+
} else if (interceptorManager.isPlaybackMode()) {
198+
interceptorManager.addMatchers(Arrays.asList(new CustomMatcher().setHeadersKeyOnlyMatch(Arrays.asList("x-api-key"))));
193199
}
194-
195200
return clientBuilder;
196201
}
197202

sdk/metricsadvisor/azure-ai-metricsadvisor/src/test/java/com/azure/ai/metricsadvisor/MetricsAdvisorClientTestBase.java

Lines changed: 34 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,20 @@
77
import com.azure.core.http.HttpClient;
88
import com.azure.core.http.policy.HttpLogDetailLevel;
99
import com.azure.core.http.policy.HttpLogOptions;
10-
import com.azure.core.test.TestBase;
11-
import com.azure.core.test.TestMode;
10+
import com.azure.core.test.TestProxyTestBase;
1211
import com.azure.core.test.http.AssertingHttpClientBuilder;
12+
import com.azure.core.test.models.BodilessMatcher;
13+
import com.azure.core.test.models.CustomMatcher;
14+
import com.azure.core.test.utils.MockTokenCredential;
1315
import com.azure.core.util.Configuration;
1416
import com.azure.identity.DefaultAzureCredentialBuilder;
1517

18+
import java.util.Arrays;
19+
1620
import static com.azure.ai.metricsadvisor.TestUtils.AZURE_METRICS_ADVISOR_ENDPOINT;
21+
import static com.azure.ai.metricsadvisor.TestUtils.getEmailSanitizers;
1722

18-
public abstract class MetricsAdvisorClientTestBase extends TestBase {
23+
public abstract class MetricsAdvisorClientTestBase extends TestProxyTestBase {
1924

2025
@Override
2126
protected void beforeTest() {
@@ -35,11 +40,11 @@ private HttpClient buildSyncAssertingClient(HttpClient httpClient) {
3540

3641
MetricsAdvisorClientBuilder getMetricsAdvisorBuilder(HttpClient httpClient,
3742
MetricsAdvisorServiceVersion serviceVersion, boolean isSync) {
38-
HttpClient httpClient1;
43+
HttpClient httpClient1 = interceptorManager.isPlaybackMode() ? interceptorManager.getPlaybackClient() : httpClient;
3944
if (isSync) {
40-
httpClient1 = buildSyncAssertingClient(httpClient == null ? interceptorManager.getPlaybackClient() : httpClient);
45+
httpClient1 = buildSyncAssertingClient(httpClient1);
4146
} else {
42-
httpClient1 = buildAsyncAssertingClient(httpClient == null ? interceptorManager.getPlaybackClient() : httpClient);
47+
httpClient1 = buildAsyncAssertingClient(httpClient1);
4348
}
4449
return getMetricsAdvisorBuilderInternal(httpClient1, serviceVersion, true);
4550
}
@@ -49,20 +54,32 @@ MetricsAdvisorClientBuilder getMetricsAdvisorBuilderInternal(HttpClient httpClie
4954
boolean useKeyCredential) {
5055
MetricsAdvisorClientBuilder builder = new MetricsAdvisorClientBuilder()
5156
.endpoint(getEndpoint())
52-
.httpClient(httpClient == null ? interceptorManager.getPlaybackClient() : httpClient)
57+
.httpClient(httpClient)
5358
.httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS))
54-
.serviceVersion(serviceVersion)
55-
.addPolicy(interceptorManager.getRecordPolicy());
59+
.serviceVersion(serviceVersion);
5660

57-
if (getTestMode() == TestMode.PLAYBACK) {
58-
builder.credential(new MetricsAdvisorKeyCredential("subscription_key", "api_key"));
61+
interceptorManager.addSanitizers(getEmailSanitizers());
62+
if (useKeyCredential) {
63+
if (interceptorManager.isPlaybackMode()) {
64+
builder.credential(new MetricsAdvisorKeyCredential("subscription_key", "api_key"));
65+
// setting bodiless matcher to "exclude" matching request bodies with UUID's
66+
interceptorManager.addMatchers(Arrays.asList(new BodilessMatcher(), new CustomMatcher().setHeadersKeyOnlyMatch(Arrays.asList("x-api-key"))));
67+
} else if (interceptorManager.isRecordMode()) {
68+
builder
69+
.credential(new MetricsAdvisorKeyCredential(
70+
Configuration.getGlobalConfiguration().get("AZURE_METRICS_ADVISOR_SUBSCRIPTION_KEY"),
71+
Configuration.getGlobalConfiguration().get("AZURE_METRICS_ADVISOR_API_KEY")))
72+
.addPolicy(interceptorManager.getRecordPolicy());
73+
}
5974
} else {
60-
if (useKeyCredential) {
61-
builder.credential(new MetricsAdvisorKeyCredential(
62-
Configuration.getGlobalConfiguration().get("AZURE_METRICS_ADVISOR_SUBSCRIPTION_KEY"),
63-
Configuration.getGlobalConfiguration().get("AZURE_METRICS_ADVISOR_API_KEY")));
64-
} else {
65-
builder.credential(new DefaultAzureCredentialBuilder().build());
75+
if (interceptorManager.isPlaybackMode()) {
76+
builder.credential(new MockTokenCredential());
77+
// setting bodiless matcher to "exclude" matching request bodies with UUID's
78+
interceptorManager.addMatchers(Arrays.asList(new BodilessMatcher()));
79+
} else if (interceptorManager.isRecordMode()) {
80+
builder
81+
.credential(new DefaultAzureCredentialBuilder().build())
82+
.addPolicy(interceptorManager.getRecordPolicy());
6683
}
6784
}
6885
return builder;

sdk/metricsadvisor/azure-ai-metricsadvisor/src/test/java/com/azure/ai/metricsadvisor/TestUtils.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.azure.ai.metricsadvisor.administration.models.DataFeedSchema;
1414
import com.azure.ai.metricsadvisor.administration.models.SqlServerDataFeedSource;
1515
import com.azure.core.http.HttpClient;
16+
import com.azure.core.test.models.TestProxySanitizer;
1617
import com.azure.core.util.Configuration;
1718
import com.azure.core.util.CoreUtils;
1819
import org.junit.jupiter.params.provider.Arguments;
@@ -26,6 +27,7 @@
2627

2728
import static com.azure.core.test.TestBase.AZURE_TEST_SERVICE_VERSIONS_VALUE_ALL;
2829
import static com.azure.core.test.TestBase.getHttpClients;
30+
import static com.azure.core.test.models.TestProxySanitizerType.BODY_KEY;
2931

3032
/**
3133
* Utility class for common methods and constants used in test classes.
@@ -178,6 +180,14 @@ static Stream<Arguments> getTestParameters() {
178180
return argumentsList.stream();
179181
}
180182

183+
static List<TestProxySanitizer> getEmailSanitizers() {
184+
return Arrays.asList(
185+
// TODO (savaity) https://github.com/Azure/azure-sdk-for-java/issues/34506
186+
new TestProxySanitizer("admins", "^[_A-Za-z0-9-\\\\+]+(\\\\.[_A-Za-z0-9-]+)*@", "REDACTED.",
187+
BODY_KEY),
188+
new TestProxySanitizer("$..userPrincipal", "^[_A-Za-z0-9-\\\\+]+(\\\\.[_A-Za-z0-9-]+)*@", "REDACTED.", BODY_KEY));
189+
}
190+
181191
/**
182192
* Returns whether the given service version match the rules of test framework.
183193
*

sdk/metricsadvisor/azure-ai-metricsadvisor/src/test/resources/session-records/AlertAsyncTest.listAlerts[1].json

Lines changed: 0 additions & 26 deletions
This file was deleted.

sdk/metricsadvisor/azure-ai-metricsadvisor/src/test/resources/session-records/AlertTest.listAlerts[1].json

Lines changed: 0 additions & 26 deletions
This file was deleted.

0 commit comments

Comments
 (0)