@@ -225,149 +225,3 @@ public void downloadStreamWithResponseContentValidationVeryLargeBlob() throws IO
225225 .verifyComplete ();
226226 }
227227}
228-
229- @ Test
230- public void downloadStreamWithResponseContentValidationSmartRetryAfterInterruption () throws IOException {
231- // Test smart retry functionality by simulating download interruption and retry
232- byte [] randomData = getRandomByteArray (3 * Constants .KB );
233- StructuredMessageEncoder encoder
234- = new StructuredMessageEncoder (randomData .length , 1024 , StructuredMessageFlags .STORAGE_CRC64 );
235- ByteBuffer encodedData = encoder .encode (ByteBuffer .wrap (randomData ));
236-
237- Flux <ByteBuffer > input = Flux .just (encodedData );
238-
239- DownloadContentValidationOptions validationOptions
240- = new DownloadContentValidationOptions ().setStructuredMessageValidationEnabled (true );
241-
242- // Configure retry options to enable automatic retry
243- DownloadRetryOptions retryOptions = new DownloadRetryOptions ().setMaxRetryRequests (3 );
244-
245- StepVerifier
246- .create (bc .upload (input , null , true )
247- .then (bc .downloadStreamWithResponse ((BlobRange ) null , retryOptions ,
248- (BlobRequestConditions ) null , false , validationOptions ))
249- .flatMap (r -> FluxUtil .collectBytesInByteBufferStream (r .getValue ())))
250- .assertNext (r -> {
251- assertNotNull (r );
252- TestUtils .assertArraysEqual (r , randomData );
253- })
254- .verifyComplete ();
255- }
256-
257- @ Test
258- public void downloadStreamWithResponseContentValidationSmartRetryMultipleSegments () throws IOException {
259- // Test smart retry with multiple segments to ensure state is preserved across segments
260- byte [] randomData = getRandomByteArray (4 * Constants .KB );
261- // Use 512-byte segments to create multiple segments
262- StructuredMessageEncoder encoder
263- = new StructuredMessageEncoder (randomData .length , 512 , StructuredMessageFlags .STORAGE_CRC64 );
264- ByteBuffer encodedData = encoder .encode (ByteBuffer .wrap (randomData ));
265-
266- Flux <ByteBuffer > input = Flux .just (encodedData );
267-
268- DownloadContentValidationOptions validationOptions
269- = new DownloadContentValidationOptions ().setStructuredMessageValidationEnabled (true );
270-
271- DownloadRetryOptions retryOptions = new DownloadRetryOptions ().setMaxRetryRequests (5 );
272-
273- StepVerifier
274- .create (bc .upload (input , null , true )
275- .then (bc .downloadStreamWithResponse ((BlobRange ) null , retryOptions ,
276- (BlobRequestConditions ) null , false , validationOptions ))
277- .flatMap (r -> FluxUtil .collectBytesInByteBufferStream (r .getValue ())))
278- .assertNext (r -> {
279- assertNotNull (r );
280- TestUtils .assertArraysEqual (r , randomData );
281- // With 4KB data and 512-byte segments, we should have 8 segments
282- // Verify complete decoding
283- assertEquals (randomData .length , r .length );
284- })
285- .verifyComplete ();
286- }
287-
288- @ Test
289- public void downloadStreamWithResponseContentValidationSmartRetryLargeData () throws IOException {
290- // Test smart retry with large data to verify it works with substantial content
291- byte [] randomData = getRandomByteArray (8 * Constants .KB );
292- StructuredMessageEncoder encoder
293- = new StructuredMessageEncoder (randomData .length , 2048 , StructuredMessageFlags .STORAGE_CRC64 );
294- ByteBuffer encodedData = encoder .encode (ByteBuffer .wrap (randomData ));
295-
296- Flux <ByteBuffer > input = Flux .just (encodedData );
297-
298- DownloadContentValidationOptions validationOptions
299- = new DownloadContentValidationOptions ().setStructuredMessageValidationEnabled (true );
300-
301- DownloadRetryOptions retryOptions = new DownloadRetryOptions ().setMaxRetryRequests (3 );
302-
303- StepVerifier
304- .create (bc .upload (input , null , true )
305- .then (bc .downloadStreamWithResponse ((BlobRange ) null , retryOptions ,
306- (BlobRequestConditions ) null , false , validationOptions ))
307- .flatMap (r -> FluxUtil .collectBytesInByteBufferStream (r .getValue ())))
308- .assertNext (r -> {
309- assertNotNull (r );
310- TestUtils .assertArraysEqual (r , randomData );
311- })
312- .verifyComplete ();
313- }
314-
315- @ Test
316- public void downloadStreamWithResponseContentValidationSmartRetrySmallSegments () throws IOException {
317- // Test smart retry with very small segments to stress-test segment boundary handling
318- byte [] randomData = getRandomByteArray (2 * Constants .KB );
319- // Use 256-byte segments to create many small segments
320- StructuredMessageEncoder encoder
321- = new StructuredMessageEncoder (randomData .length , 256 , StructuredMessageFlags .STORAGE_CRC64 );
322- ByteBuffer encodedData = encoder .encode (ByteBuffer .wrap (randomData ));
323-
324- Flux <ByteBuffer > input = Flux .just (encodedData );
325-
326- DownloadContentValidationOptions validationOptions
327- = new DownloadContentValidationOptions ().setStructuredMessageValidationEnabled (true );
328-
329- DownloadRetryOptions retryOptions = new DownloadRetryOptions ().setMaxRetryRequests (5 );
330-
331- StepVerifier
332- .create (bc .upload (input , null , true )
333- .then (bc .downloadStreamWithResponse ((BlobRange ) null , retryOptions ,
334- (BlobRequestConditions ) null , false , validationOptions ))
335- .flatMap (r -> FluxUtil .collectBytesInByteBufferStream (r .getValue ())))
336- .assertNext (r -> {
337- assertNotNull (r );
338- TestUtils .assertArraysEqual (r , randomData );
339- // Verify all data was decoded
340- assertEquals (randomData .length , r .length );
341- })
342- .verifyComplete ();
343- }
344-
345- @ Test
346- public void downloadStreamWithResponseContentValidationChecksumIntegrity () throws IOException {
347- // Test that checksums are properly validated during smart retry
348- // This ensures data integrity is maintained across network interruptions
349- byte [] randomData = getRandomByteArray (5 * Constants .KB );
350- StructuredMessageEncoder encoder
351- = new StructuredMessageEncoder (randomData .length , 1024 , StructuredMessageFlags .STORAGE_CRC64 );
352- ByteBuffer encodedData = encoder .encode (ByteBuffer .wrap (randomData ));
353-
354- Flux <ByteBuffer > input = Flux .just (encodedData );
355-
356- DownloadContentValidationOptions validationOptions
357- = new DownloadContentValidationOptions ().setStructuredMessageValidationEnabled (true );
358-
359- DownloadRetryOptions retryOptions = new DownloadRetryOptions ().setMaxRetryRequests (3 );
360-
361- StepVerifier
362- .create (bc .upload (input , null , true )
363- .then (bc .downloadStreamWithResponse ((BlobRange ) null , retryOptions ,
364- (BlobRequestConditions ) null , false , validationOptions ))
365- .flatMap (r -> FluxUtil .collectBytesInByteBufferStream (r .getValue ())))
366- .assertNext (r -> {
367- assertNotNull (r );
368- // The fact that we get here without checksum errors proves integrity
369- TestUtils .assertArraysEqual (r , randomData );
370- })
371- .verifyComplete ();
372- }
373- }
0 commit comments