Skip to content

Commit 96f01a6

Browse files
committed
capture client wip
1 parent 9727651 commit 96f01a6

File tree

2 files changed

+66
-0
lines changed

2 files changed

+66
-0
lines changed

sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/contentValidation/BlobMessageEncoderUploadTests.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,21 @@
33

44
package com.azure.storage.blob.contentValidation;
55

6+
import com.azure.core.http.HttpMethod;
7+
import com.azure.core.http.HttpRequest;
68
import com.azure.core.http.rest.Response;
79
import com.azure.core.util.BinaryData;
810
import com.azure.core.util.Context;
911
import com.azure.core.util.ProgressListener;
1012
import com.azure.storage.blob.BlobClient;
13+
import com.azure.storage.blob.BlobClientBuilder;
1114
import com.azure.storage.blob.BlobTestBase;
1215
import com.azure.storage.blob.models.BlockBlobItem;
1316
import com.azure.storage.blob.models.ParallelTransferOptions;
1417
import com.azure.storage.blob.options.BlobParallelUploadOptions;
1518
import com.azure.storage.common.implementation.Constants;
1619
import com.azure.storage.common.implementation.structuredmessage.StorageChecksumAlgorithm;
20+
import com.azure.storage.common.test.shared.StorageCommonTestUtils;
1721
import com.azure.storage.common.test.shared.extensions.LiveOnly;
1822
import org.junit.jupiter.api.BeforeEach;
1923
import org.junit.jupiter.api.Disabled;
@@ -23,6 +27,8 @@
2327
import java.io.ByteArrayInputStream;
2428
import java.io.ByteArrayOutputStream;
2529
import java.nio.ByteBuffer;
30+
import java.util.List;
31+
import java.util.stream.Collectors;
2632

2733
import static com.azure.storage.common.implementation.Constants.HeaderConstants.CONTENT_CRC64_HEADER_NAME;
2834
import static com.azure.storage.common.implementation.Constants.HeaderConstants.STRUCTURED_BODY_TYPE_HEADER_NAME;
@@ -32,6 +38,7 @@
3238
import static org.junit.jupiter.api.Assertions.assertEquals;
3339
import static org.junit.jupiter.api.Assertions.assertNotNull;
3440
import static org.junit.jupiter.api.Assertions.assertNull;
41+
import static org.junit.jupiter.api.Assertions.assertTrue;
3542

3643
@LiveOnly
3744
public class BlobMessageEncoderUploadTests extends BlobTestBase {
@@ -88,6 +95,40 @@ public void uploadBinaryDataChunkedStructMess() {
8895
assertArrayEquals(data, outStream.toByteArray());
8996
}
9097

98+
@Test
99+
void verifyUploadUsingChunkedStructMess() {
100+
byte[] data = getRandomByteArray(Constants.MB * 10);
101+
102+
BlobParallelUploadOptions options = new BlobParallelUploadOptions(BinaryData.fromBytes(data))
103+
.setStorageChecksumAlgorithm(StorageChecksumAlgorithm.AUTO)
104+
.setParallelTransferOptions(
105+
new ParallelTransferOptions().setMaxSingleUploadSizeLong((long) Constants.MB * 2)
106+
.setBlockSizeLong((long) Constants.MB * 2));
107+
108+
StorageCommonTestUtils.CaptureAllRequestsHttpClient httpClient
109+
= new StorageCommonTestUtils.CaptureAllRequestsHttpClient(
110+
StorageCommonTestUtils.getHttpClient(interceptorManager));
111+
BlobClient capturingBlobClient = new BlobClientBuilder().endpoint(bc.getBlobUrl())
112+
.credential(ENVIRONMENT.getPrimaryAccount().getCredential())
113+
.httpClient(httpClient)
114+
.buildClient();
115+
116+
capturingBlobClient.uploadWithResponse(options, null, Context.NONE);
117+
118+
List<HttpRequest> putRequests = httpClient.getCapturedRequests()
119+
.stream()
120+
.filter(r -> r.getHttpMethod() == HttpMethod.PUT)
121+
.collect(Collectors.toList());
122+
123+
// Multipart upload should have at least 2 PUTs (staged + final)
124+
assertTrue(putRequests.size() >= 2, "Expected multipart upload with multiple PUT requests.");
125+
126+
for (int i = 0; i < putRequests.size() - 1; i++) {
127+
String headerValue = putRequests.get(i).getHeaders().getValue(STRUCTURED_BODY_TYPE_HEADER_NAME);
128+
assertNotNull(headerValue, "Missing structured body header on staged PUT index " + i);
129+
}
130+
}
131+
91132
@Test
92133
@Disabled
93134
public void uploadBinaryDataChunkedStructMessProgressListenerBehavior() {

sdk/storage/azure-storage-common/src/test-shared/java/com/azure/storage/common/test/shared/StorageCommonTestUtils.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import com.azure.core.client.traits.HttpTrait;
66
import com.azure.core.credential.TokenCredential;
77
import com.azure.core.http.HttpClient;
8+
import com.azure.core.http.HttpRequest;
9+
import com.azure.core.http.HttpResponse;
810
import com.azure.core.http.netty.NettyAsyncHttpClientProvider;
911
import com.azure.core.http.okhttp.OkHttpAsyncClientProvider;
1012
import com.azure.core.http.policy.HttpLogOptions;
@@ -25,6 +27,7 @@
2527
import com.azure.identity.DefaultAzureCredentialBuilder;
2628
import com.azure.identity.EnvironmentCredentialBuilder;
2729
import com.azure.storage.common.implementation.Constants;
30+
import reactor.core.publisher.Mono;
2831
import reactor.core.scheduler.Schedulers;
2932

3033
import java.io.ByteArrayOutputStream;
@@ -38,7 +41,10 @@
3841
import java.nio.ByteBuffer;
3942
import java.nio.charset.StandardCharsets;
4043
import java.nio.file.Files;
44+
import java.util.ArrayList;
4145
import java.util.Arrays;
46+
import java.util.Collections;
47+
import java.util.List;
4248
import java.util.Locale;
4349
import java.util.Random;
4450
import java.util.UUID;
@@ -389,4 +395,23 @@ public static TokenCredential getTokenCredential(InterceptorManager interceptorM
389395
return builder.build();
390396
}
391397
}
398+
399+
public static class CaptureAllRequestsHttpClient implements HttpClient {
400+
private final List<HttpRequest> capturedRequests = new ArrayList<>();
401+
private final HttpClient inner;
402+
403+
public CaptureAllRequestsHttpClient(HttpClient inner) {
404+
this.inner = inner;
405+
}
406+
407+
@Override
408+
public Mono<HttpResponse> send(HttpRequest request) {
409+
capturedRequests.add(request);
410+
return inner.send(request);
411+
}
412+
413+
public List<HttpRequest> getCapturedRequests() {
414+
return Collections.unmodifiableList(capturedRequests);
415+
}
416+
}
392417
}

0 commit comments

Comments
 (0)