@@ -390,47 +390,11 @@ public void testExtractPartEtags() {
390390    public  void  testPreventObjectOverwrite () throws  InterruptedException  {
391391        final  var  handler  = new  S3HttpHandler ("bucket" , "path" );
392392
393-         Consumer <TestWriteTask > putObjectConsumer  = (task ) -> task .status  = handleRequest (
394-             handler ,
395-             "PUT" ,
396-             "/bucket/path/blob" ,
397-             task .body ,
398-             ifNoneMatchHeader ()
399-         ).status ();
400- 
401-         Consumer <TestWriteTask > prepareMultipartUploadConsumer  = (task ) -> {
402-             final  var  createUploadResponse  = handleRequest (handler , "POST" , "/bucket/path/blob?uploads" );
403-             task .uploadId  = getUploadId (createUploadResponse .body ());
404- 
405-             final  var  uploadPart1Response  = handleRequest (
406-                 handler ,
407-                 "PUT" ,
408-                 "/bucket/path/blob?uploadId="  + task .uploadId  + "&partNumber=1" ,
409-                 task .body 
410-             );
411-             task .etag  = Objects .requireNonNull (uploadPart1Response .etag ());
412-         };
413- 
414-         Consumer <TestWriteTask > completeMultipartUploadConsumer  = (task ) -> task .status  = handleRequest (
415-             handler ,
416-             "POST" ,
417-             "/bucket/path/blob?uploadId="  + task .uploadId ,
418-             new  BytesArray (Strings .format (""" 
419-                 <?xml version="1.0" encoding="UTF-8"?> 
420-                 <CompleteMultipartUpload xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
421-                    <Part> 
422-                       <ETag>%s</ETag> 
423-                       <PartNumber>1</PartNumber> 
424-                    </Part> 
425-                 </CompleteMultipartUpload>""" , task .etag )),
426-             ifNoneMatchHeader ()
427-         ).status ();
428- 
429393        var  tasks  = List .of (
430-             new   TestWriteTask ( putObjectConsumer ),
431-             new   TestWriteTask ( putObjectConsumer ),
432-             new   TestWriteTask ( completeMultipartUploadConsumer ,  prepareMultipartUploadConsumer ),
433-             new   TestWriteTask ( completeMultipartUploadConsumer ,  prepareMultipartUploadConsumer )
394+             createPutObjectTask ( handler ),
395+             createPutObjectTask ( handler ),
396+             createMultipartUploadTask ( handler ),
397+             createMultipartUploadTask ( handler )
434398        );
435399
436400        try  (var  executor  = Executors .newVirtualThreadPerTaskExecutor ()) {
@@ -457,18 +421,51 @@ public void testPreventObjectOverwrite() throws InterruptedException {
457421        );
458422    }
459423
424+     private  static  TestWriteTask  createPutObjectTask (S3HttpHandler  handler ) {
425+         return  new  TestWriteTask (
426+             (task ) -> task .status  = handleRequest (handler , "PUT" , "/bucket/path/blob" , task .body , ifNoneMatchHeader ()).status ()
427+         );
428+     }
429+ 
430+     private  static  TestWriteTask  createMultipartUploadTask (S3HttpHandler  handler ) {
431+         final  var  multipartUploadTask  = new  TestWriteTask (
432+             (task ) -> task .status  = handleRequest (
433+                 handler ,
434+                 "POST" ,
435+                 "/bucket/path/blob?uploadId="  + task .uploadId ,
436+                 new  BytesArray (Strings .format (""" 
437+                     <?xml version="1.0" encoding="UTF-8"?> 
438+                     <CompleteMultipartUpload xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
439+                        <Part> 
440+                           <ETag>%s</ETag> 
441+                           <PartNumber>1</PartNumber> 
442+                        </Part> 
443+                     </CompleteMultipartUpload>""" , task .etag )),
444+                 ifNoneMatchHeader ()
445+             ).status ()
446+         );
447+ 
448+         final  var  createUploadResponse  = handleRequest (handler , "POST" , "/bucket/path/blob?uploads" );
449+         multipartUploadTask .uploadId  = getUploadId (createUploadResponse .body ());
450+ 
451+         final  var  uploadPart1Response  = handleRequest (
452+             handler ,
453+             "PUT" ,
454+             "/bucket/path/blob?uploadId="  + multipartUploadTask .uploadId  + "&partNumber=1" ,
455+             multipartUploadTask .body 
456+         );
457+         multipartUploadTask .etag  = Objects .requireNonNull (uploadPart1Response .etag ());
458+ 
459+         return  multipartUploadTask ;
460+     }
461+ 
460462    private  static  class  TestWriteTask  {
461463        final  BytesReference  body ;
462464        final  Runnable  consumer ;
463465        String  uploadId ;
464466        String  etag ;
465467        RestStatus  status ;
466468
467-         TestWriteTask (Consumer <TestWriteTask > consumer , Consumer <TestWriteTask > prepare ) {
468-             this (consumer );
469-             prepare .accept (this );
470-         }
471- 
472469        TestWriteTask (Consumer <TestWriteTask > consumer ) {
473470            this .body  = randomBytesReference (50 );
474471            this .consumer  = () -> consumer .accept (this );
0 commit comments