Skip to content

Commit 3b24866

Browse files
author
Liudmila Molkova
authored
ACR: test proxy (#35282)
* ACR: new test proxy
1 parent 84c8758 commit 3b24866

84 files changed

Lines changed: 75 additions & 18622 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"AssetsRepo": "Azure/azure-sdk-assets",
3+
"AssetsRepoPrefixPath": "java",
4+
"TagPrefix": "java/containerregistry/azure-containers-containerregistry",
5+
"Tag": "java/containerregistry/azure-containers-containerregistry_a85e7b7454"
6+
}

sdk/containerregistry/azure-containers-containerregistry/src/test/java/com/azure/containers/containerregistry/ContainerRegistryClientIntegrationTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,11 @@ private HttpClient buildSyncAssertingClient(HttpClient httpClient) {
6161
.build();
6262
}
6363
private ContainerRegistryAsyncClient getContainerRegistryAsyncClient(HttpClient httpClient) {
64-
return getContainerRegistryBuilder(buildAsyncAssertingClient(httpClient == null ? interceptorManager.getPlaybackClient() : httpClient)).buildAsyncClient();
64+
return getContainerRegistryBuilder(buildAsyncAssertingClient(interceptorManager.isPlaybackMode() ? interceptorManager.getPlaybackClient() : httpClient)).buildAsyncClient();
6565
}
6666

6767
private ContainerRegistryClient getContainerRegistryClient(HttpClient httpClient) {
68-
return getContainerRegistryBuilder(buildSyncAssertingClient(httpClient == null ? interceptorManager.getPlaybackClient() : httpClient)).buildClient();
68+
return getContainerRegistryBuilder(buildSyncAssertingClient(interceptorManager.isPlaybackMode() ? interceptorManager.getPlaybackClient() : httpClient)).buildClient();
6969
}
7070

7171
@BeforeEach

sdk/containerregistry/azure-containers-containerregistry/src/test/java/com/azure/containers/containerregistry/ContainerRegistryClientTest.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,11 @@ private HttpClient buildAsyncAssertingClient(HttpClient httpClient) {
4747
.build();
4848
}
4949
private ContainerRegistryClient getContainerRegistryClient(HttpClient client) {
50-
return getContainerRegistryBuilder(buildSyncAssertingClient(client == null ? interceptorManager.getPlaybackClient() : client)).buildClient();
50+
return getContainerRegistryBuilder(buildSyncAssertingClient(interceptorManager.isPlaybackMode() ? interceptorManager.getPlaybackClient() : client)).buildClient();
5151
}
5252

5353
private ContainerRegistryAsyncClient getContainerRegistryAsyncClient(HttpClient client) {
54-
return getContainerRegistryBuilder(buildAsyncAssertingClient(client == null ? interceptorManager.getPlaybackClient() : client)).buildAsyncClient();
54+
return getContainerRegistryBuilder(buildAsyncAssertingClient(interceptorManager.isPlaybackMode() ? interceptorManager.getPlaybackClient() : client)).buildAsyncClient();
5555
}
5656

5757
@BeforeEach
@@ -115,7 +115,6 @@ public void deleteRepositoryWithResponseByRegistryClient() {
115115
assertEquals(HTTP_STATUS_CODE_202, response.getStatusCode());
116116
}
117117

118-
119118
@Test
120119
public void deleteRepositoryByRegistryClient() {
121120
// This should not throw.

sdk/containerregistry/azure-containers-containerregistry/src/test/java/com/azure/containers/containerregistry/ContainerRegistryClientsTestBase.java

Lines changed: 35 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,15 @@
1515
import com.azure.core.http.policy.HttpLogOptions;
1616
import com.azure.core.http.rest.PagedResponse;
1717
import com.azure.core.http.rest.Response;
18-
import com.azure.core.test.TestBase;
19-
import com.azure.core.util.CoreUtils;
18+
import com.azure.core.test.TestProxyTestBase;
19+
import com.azure.core.test.models.TestProxySanitizer;
20+
import com.azure.core.test.models.TestProxySanitizerType;
2021

2122
import java.time.OffsetDateTime;
2223
import java.util.ArrayList;
2324
import java.util.Arrays;
2425
import java.util.Collection;
2526
import java.util.List;
26-
import java.util.function.Function;
27-
import java.util.regex.Matcher;
28-
import java.util.regex.Pattern;
2927
import java.util.stream.Collectors;
3028

3129
import static com.azure.containers.containerregistry.TestUtils.HELLO_WORLD_REPOSITORY_NAME;
@@ -41,10 +39,7 @@
4139
import static org.junit.jupiter.api.Assertions.assertNotNull;
4240
import static org.junit.jupiter.api.Assertions.assertTrue;
4341

44-
public class ContainerRegistryClientsTestBase extends TestBase {
45-
46-
private static final Pattern JSON_PROPERTY_VALUE_REDACTION_PATTERN
47-
= Pattern.compile("(\".*_token\":\"(.*)\".*)");
42+
public class ContainerRegistryClientsTestBase extends TestProxyTestBase {
4843

4944
protected static ArtifactTagProperties tagWriteableProperties = new ArtifactTagProperties()
5045
.setDeleteEnabled(false)
@@ -85,21 +80,36 @@ public class ContainerRegistryClientsTestBase extends TestBase {
8580
.setWriteEnabled(true);
8681
//.setTeleportEnabled(false);
8782

83+
@Override
84+
protected void beforeTest() {
85+
if (!interceptorManager.isLiveMode()) {
86+
List<TestProxySanitizer> sanitizers = new ArrayList<>();
87+
sanitizers.add(new TestProxySanitizer("token=(?<token>[^\\u0026]+)($|\\u0026)", "REDACTED", TestProxySanitizerType.BODY_REGEX).setGroupForReplace("token"));
88+
sanitizers.add(new TestProxySanitizer("service=(?<service>[^\\u0026]+)\\u0026", "REDACTED", TestProxySanitizerType.BODY_REGEX).setGroupForReplace("service"));
89+
sanitizers.add(new TestProxySanitizer("WWW-Authenticate", "realm=\\u0022https://(?<realm>[^\\u0022]+)\\u0022", "REDACTED", TestProxySanitizerType.HEADER).setGroupForReplace("realm"));
90+
sanitizers.add(new TestProxySanitizer("WWW-Authenticate", "service=\\u0022(?<service>[^\\u0022]+)\\u0022", "REDACTED", TestProxySanitizerType.HEADER).setGroupForReplace("service"));
91+
92+
interceptorManager.addSanitizers(sanitizers);
93+
}
94+
}
95+
8896
ContainerRegistryClientBuilder getContainerRegistryBuilder(HttpClient httpClient) {
8997
TokenCredential credential = getCredentialsByEndpoint(getTestMode(), REGISTRY_ENDPOINT);
9098
return getContainerRegistryBuilder(httpClient, credential);
9199
}
92100

93101
ContainerRegistryClientBuilder getContainerRegistryBuilder(HttpClient httpClient, TokenCredential credential, String endpoint) {
94-
List<Function<String, String>> redactors = new ArrayList<>();
95-
redactors.add(data -> redact(data, JSON_PROPERTY_VALUE_REDACTION_PATTERN.matcher(data), "REDACTED"));
96-
97-
return new ContainerRegistryClientBuilder()
102+
ContainerRegistryClientBuilder builder = new ContainerRegistryClientBuilder()
98103
.endpoint(getEndpoint(endpoint))
99-
.httpClient(httpClient == null ? interceptorManager.getPlaybackClient() : httpClient)
104+
.httpClient(interceptorManager.isPlaybackMode() ? interceptorManager.getPlaybackClient() : httpClient)
100105
.httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS))
101-
.addPolicy(interceptorManager.getRecordPolicy(redactors))
102106
.credential(credential);
107+
108+
if (interceptorManager.isRecordMode()) {
109+
builder.addPolicy(interceptorManager.getRecordPolicy());
110+
}
111+
112+
return builder;
103113
}
104114

105115
ContainerRegistryClientBuilder getContainerRegistryBuilder(HttpClient httpClient, TokenCredential credential) {
@@ -118,19 +128,23 @@ ContainerRegistryContentClientBuilder getContentClientBuilder(String repositoryN
118128

119129
ContainerRegistryContentClientBuilder getContentClientBuilder(String repositoryName, HttpClient httpClient,
120130
TokenCredential credential, String endpoint) {
121-
List<Function<String, String>> redactors = new ArrayList<>();
122-
redactors.add(data -> redact(data, JSON_PROPERTY_VALUE_REDACTION_PATTERN.matcher(data), "REDACTED"));
123-
124-
return new ContainerRegistryContentClientBuilder()
131+
ContainerRegistryContentClientBuilder builder = new ContainerRegistryContentClientBuilder()
125132
.endpoint(getEndpoint(endpoint))
126133
.repositoryName(repositoryName)
127-
.httpClient(httpClient == null ? interceptorManager.getPlaybackClient() : httpClient)
134+
.httpClient(interceptorManager.isPlaybackMode() ? interceptorManager.getPlaybackClient() : httpClient)
128135
.httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS)
129136
.addAllowedHeaderName("Docker-Content-Digest")
130137
.addAllowedHeaderName("Range")
138+
.addAllowedHeaderName("Location")
139+
.addAllowedHeaderName("x-recording-id")
140+
.addAllowedHeaderName("x-recording-upstream-base-uri")
131141
.addAllowedHeaderName("Content-Range"))
132-
.addPolicy(interceptorManager.getRecordPolicy(redactors))
133142
.credential(credential);
143+
144+
if (interceptorManager.isRecordMode()) {
145+
builder.addPolicy(interceptorManager.getRecordPolicy());
146+
}
147+
return builder;
134148
}
135149

136150
List<String> getChildArtifacts(Collection<ArtifactManifestPlatform> artifacts) {
@@ -329,17 +343,4 @@ protected String getEndpoint(String endpoint) {
329343
return interceptorManager.isPlaybackMode() ? REGISTRY_ENDPOINT_PLAYBACK
330344
: endpoint;
331345
}
332-
333-
private String redact(String content, Matcher matcher, String replacement) {
334-
while (matcher.find()) {
335-
if (matcher.groupCount() == 2) {
336-
String captureGroup = matcher.group(1);
337-
if (!CoreUtils.isNullOrEmpty(captureGroup)) {
338-
content = content.replace(matcher.group(2), replacement);
339-
}
340-
}
341-
}
342-
343-
return content;
344-
}
345346
}

sdk/containerregistry/azure-containers-containerregistry/src/test/java/com/azure/containers/containerregistry/ContainerRegistryContentClientIntegrationTests.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import com.azure.core.http.rest.Response;
1919
import com.azure.core.test.TestMode;
2020
import com.azure.core.test.http.AssertingHttpClientBuilder;
21-
import com.azure.core.test.implementation.TestingHelpers;
2221
import com.azure.core.util.BinaryData;
2322
import com.azure.core.util.Context;
2423
import com.azure.core.util.FluxUtil;
@@ -84,7 +83,7 @@ private HttpClient buildSyncAssertingClient(HttpClient httpClient) {
8483

8584
@BeforeAll
8685
static void beforeAll() {
87-
importImage(TestingHelpers.getTestMode(), HELLO_WORLD_REPOSITORY_NAME, Collections.singletonList("latest"));
86+
importImage(TestUtils.getTestMode(), HELLO_WORLD_REPOSITORY_NAME, Collections.singletonList("latest"));
8887
}
8988

9089
@BeforeEach
@@ -242,6 +241,7 @@ public void canUploadBlob(HttpClient httpClient) {
242241
@ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS)
243242
@MethodSource("getHttpClients")
244243
public void canUploadHugeBlobInChunks(HttpClient httpClient) throws IOException, InterruptedException {
244+
// test is too long for innerloop
245245
assumeTrue(super.getTestMode() == TestMode.LIVE);
246246

247247
client = getContentClient("oci-artifact", httpClient);
@@ -260,6 +260,7 @@ public void canUploadHugeBlobInChunks(HttpClient httpClient) throws IOException,
260260
@ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS)
261261
@MethodSource("getHttpClients")
262262
public void canUploadHugeBlobInChunksAsync(HttpClient httpClient) {
263+
// test is too long for innerloop
263264
assumeTrue(super.getTestMode() == TestMode.LIVE);
264265

265266
asyncClient = getBlobAsyncClient("oci-artifact", httpClient);
@@ -382,6 +383,8 @@ public void getManifestAsync(HttpClient httpClient) {
382383
@ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS)
383384
@MethodSource("getHttpClients")
384385
public void getManifestListManifest(HttpClient httpClient) {
386+
// TODO (limolkova) enable other modes after https://github.com/Azure/azure-sdk-tools/issues/6194 is released
387+
assumeTrue(super.getTestMode() == TestMode.LIVE);
385388
client = getContentClient(HELLO_WORLD_REPOSITORY_NAME, httpClient);
386389
ManifestMediaType dockerListType = ManifestMediaType.fromString("application/vnd.docker.distribution.manifest.list.v2+json");
387390
Response<GetManifestResult> manifestResult = client.getManifestWithResponse("latest", Context.NONE);
@@ -409,6 +412,8 @@ public void getManifestIncompatibleType(HttpClient httpClient) {
409412
@ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS)
410413
@MethodSource("getHttpClients")
411414
public void getManifestDifferentType(HttpClient httpClient) {
415+
// TODO (limolkova) enable other modes after https://github.com/Azure/azure-sdk-tools/issues/6194 is released
416+
assumeTrue(super.getTestMode() == TestMode.LIVE);
412417
client = getContentClient(HELLO_WORLD_REPOSITORY_NAME, httpClient);
413418

414419
// the original content there is docker v2 manifest list
@@ -421,6 +426,8 @@ public void getManifestDifferentType(HttpClient httpClient) {
421426
@ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS)
422427
@MethodSource("getHttpClients")
423428
public void getManifestListManifestAsync(HttpClient httpClient) {
429+
// TODO (limolkova) enable other modes after https://github.com/Azure/azure-sdk-tools/issues/6194 is released
430+
assumeTrue(super.getTestMode() == TestMode.LIVE);
424431
asyncClient = getBlobAsyncClient(HELLO_WORLD_REPOSITORY_NAME, httpClient);
425432
ManifestMediaType dockerListType = ManifestMediaType.fromString("application/vnd.docker.distribution.manifest.list.v2+json");
426433

@@ -512,7 +519,7 @@ private void validateManifest(OciImageManifest originalManifest, OciImageManifes
512519
}
513520

514521
private ContainerRegistryContentClient getContentClient(String repositoryName, HttpClient httpClient) {
515-
return getContentClientBuilder(repositoryName, buildSyncAssertingClient(httpClient == null ? interceptorManager.getPlaybackClient() : httpClient)).buildClient();
522+
return getContentClientBuilder(repositoryName, buildSyncAssertingClient(interceptorManager.isPlaybackMode() ? interceptorManager.getPlaybackClient() : httpClient)).buildClient();
516523
}
517524

518525
private ContainerRegistryContentAsyncClient getBlobAsyncClient(String repositoryName, HttpClient httpClient) {

sdk/containerregistry/azure-containers-containerregistry/src/test/java/com/azure/containers/containerregistry/ContainerRepositoryAnonymousAccessTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public void listAnonymousRepositories(HttpClient httpClient) {
4242
Assumptions.assumeFalse(ANONYMOUS_REGISTRY_ENDPOINT == null);
4343
Assumptions.assumeTrue(getAuthority(ANONYMOUS_REGISTRY_ENDPOINT).equals(AzureAuthorityHosts.AZURE_PUBLIC_CLOUD));
4444

45-
ContainerRegistryClient client = getContainerRegistryBuilder(buildSyncAssertingClient(httpClient == null ? interceptorManager.getPlaybackClient() : httpClient), null, ANONYMOUS_REGISTRY_ENDPOINT).buildClient();
45+
ContainerRegistryClient client = getContainerRegistryBuilder(buildSyncAssertingClient(interceptorManager.isPlaybackMode() ? interceptorManager.getPlaybackClient() : httpClient), null, ANONYMOUS_REGISTRY_ENDPOINT).buildClient();
4646
List<String> repositories = client.listRepositoryNames().stream().collect(Collectors.toList());
4747
assertTrue(repositories.stream().anyMatch(HELLO_WORLD_REPOSITORY_NAME::equals));
4848
}

sdk/containerregistry/azure-containers-containerregistry/src/test/java/com/azure/containers/containerregistry/ContainerRepositoryAsyncIntegrationTests.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,25 +73,25 @@ private HttpClient buildSyncAssertingClient(HttpClient httpClient) {
7373
}
7474

7575
private ContainerRepositoryAsync getContainerRepositoryAsync(HttpClient httpClient) {
76-
return getContainerRegistryBuilder(buildAsyncAssertingClient(httpClient == null ? interceptorManager.getPlaybackClient() : httpClient))
76+
return getContainerRegistryBuilder(buildAsyncAssertingClient(interceptorManager.isPlaybackMode() ? interceptorManager.getPlaybackClient() : httpClient))
7777
.buildAsyncClient()
7878
.getRepository(HELLO_WORLD_REPOSITORY_NAME);
7979
}
8080

8181
private ContainerRepositoryAsync getUnknownContainerRepositoryAsync(HttpClient httpClient) {
82-
return getContainerRegistryBuilder(buildAsyncAssertingClient(httpClient == null ? interceptorManager.getPlaybackClient() : httpClient))
82+
return getContainerRegistryBuilder(buildAsyncAssertingClient(interceptorManager.isPlaybackMode() ? interceptorManager.getPlaybackClient() : httpClient))
8383
.buildAsyncClient()
8484
.getRepository(TAG_UNKNOWN);
8585
}
8686

8787
private ContainerRepository getContainerRepository(HttpClient httpClient) {
88-
return getContainerRegistryBuilder(buildSyncAssertingClient(httpClient == null ? interceptorManager.getPlaybackClient() : httpClient))
88+
return getContainerRegistryBuilder(buildSyncAssertingClient(interceptorManager.isPlaybackMode() ? interceptorManager.getPlaybackClient() : httpClient))
8989
.buildClient()
9090
.getRepository(HELLO_WORLD_REPOSITORY_NAME);
9191
}
9292

9393
private ContainerRepository getUnknownContainerRepository(HttpClient httpClient) {
94-
return getContainerRegistryBuilder(buildSyncAssertingClient(httpClient == null ? interceptorManager.getPlaybackClient() : httpClient))
94+
return getContainerRegistryBuilder(buildSyncAssertingClient(interceptorManager.isPlaybackMode() ? interceptorManager.getPlaybackClient() : httpClient))
9595
.buildClient()
9696
.getRepository(TAG_UNKNOWN);
9797
}

sdk/containerregistry/azure-containers-containerregistry/src/test/java/com/azure/containers/containerregistry/RegistryArtifactAsyncIntegrationTests.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,19 +73,19 @@ private HttpClient buildSyncAssertingClient(HttpClient httpClient) {
7373
}
7474

7575
private String getDigest(HttpClient httpClient) {
76-
return getContainerRegistryBuilder(buildSyncAssertingClient(httpClient == null ? interceptorManager.getPlaybackClient() : httpClient))
76+
return getContainerRegistryBuilder(buildSyncAssertingClient(interceptorManager.isPlaybackMode() ? interceptorManager.getPlaybackClient() : httpClient))
7777
.buildClient()
7878
.getArtifact(HELLO_WORLD_REPOSITORY_NAME, LATEST_TAG_NAME).getManifestProperties().getDigest();
7979
}
8080

8181
private RegistryArtifactAsync getRegistryArtifactAsyncClient(HttpClient httpClient, String digest) {
82-
return getContainerRegistryBuilder(buildAsyncAssertingClient(httpClient == null ? interceptorManager.getPlaybackClient() : httpClient))
82+
return getContainerRegistryBuilder(buildAsyncAssertingClient(interceptorManager.isPlaybackMode() ? interceptorManager.getPlaybackClient() : httpClient))
8383
.buildAsyncClient()
8484
.getArtifact(HELLO_WORLD_REPOSITORY_NAME, digest);
8585
}
8686

8787
private RegistryArtifact getRegistryArtifactClient(HttpClient httpClient, String digest) {
88-
return getContainerRegistryBuilder(buildSyncAssertingClient(httpClient == null ? interceptorManager.getPlaybackClient() : httpClient))
88+
return getContainerRegistryBuilder(buildSyncAssertingClient(interceptorManager.isPlaybackMode() ? interceptorManager.getPlaybackClient() : httpClient))
8989
.buildClient()
9090
.getArtifact(HELLO_WORLD_REPOSITORY_NAME, digest);
9191
}

sdk/containerregistry/azure-containers-containerregistry/src/test/java/com/azure/containers/containerregistry/RegistryArtifactTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,13 @@ private HttpClient buildSyncAssertingClient(HttpClient httpClient) {
9090
}
9191

9292
private RegistryArtifactAsync getRegistryArtifactAsyncClient(String digest) {
93-
return getContainerRegistryBuilder(buildAsyncAssertingClient(httpClient == null ? interceptorManager.getPlaybackClient() : httpClient))
93+
return getContainerRegistryBuilder(buildAsyncAssertingClient(interceptorManager.isPlaybackMode() ? interceptorManager.getPlaybackClient() : httpClient))
9494
.buildAsyncClient()
9595
.getArtifact(repositoryName, digest);
9696
}
9797

9898
private RegistryArtifact getRegistryArtifactClient(String digest) {
99-
return getContainerRegistryBuilder(buildSyncAssertingClient(httpClient == null ? interceptorManager.getPlaybackClient() : httpClient))
99+
return getContainerRegistryBuilder(buildSyncAssertingClient(interceptorManager.isPlaybackMode() ? interceptorManager.getPlaybackClient() : httpClient))
100100
.buildClient()
101101
.getArtifact(repositoryName, digest);
102102
}

0 commit comments

Comments
 (0)