@@ -664,6 +664,52 @@ var methods = map[string][]retryFunc{
664
664
return fmt .Errorf ("Reader.Read: %v" , err )
665
665
}
666
666
667
+ if d := cmp .Diff (content , randomBytes3MiB ); d != "" {
668
+ return fmt .Errorf ("content mismatch, got %v bytes, want %v bytes" , len (content ), len (randomBytes3MiB ))
669
+ }
670
+ return nil
671
+ },
672
+ // Appendable upload using Flush() and FinalizeOnClose=false.
673
+ func (ctx context.Context , c * Client , fs * resources , preconditions bool ) error {
674
+ bucketName := fmt .Sprintf ("%s-appendable" , bucketIDs .New ())
675
+ b := c .Bucket (bucketName )
676
+ if err := b .Create (ctx , projectID , nil ); err != nil {
677
+ return err
678
+ }
679
+ defer b .Delete (ctx )
680
+
681
+ obj := b .Object (objectIDs .New ())
682
+ if preconditions {
683
+ obj = obj .If (Conditions {DoesNotExist : true })
684
+ }
685
+
686
+ objW := obj .NewWriter (ctx )
687
+ objW .Append = true
688
+ objW .ChunkSize = MiB
689
+
690
+ if _ , err := objW .Write (randomBytes3MiB ); err != nil {
691
+ return fmt .Errorf ("Writer.Write: %w" , err )
692
+ }
693
+ if _ , err := objW .Flush (); err != nil {
694
+ return fmt .Errorf ("Writer.Flush: %w" , err )
695
+
696
+ }
697
+
698
+ if err := objW .Close (); err != nil {
699
+ return fmt .Errorf ("Writer.Close: %w" , err )
700
+ }
701
+
702
+ // Don't reuse obj, in case preconditions were set on the write request.
703
+ r , err := b .Object (obj .ObjectName ()).NewReader (ctx )
704
+ defer r .Close ()
705
+ if err != nil {
706
+ return fmt .Errorf ("obj.NewReader: %w" , err )
707
+ }
708
+ content , err := io .ReadAll (r )
709
+ if err != nil {
710
+ return fmt .Errorf ("Reader.Read: %w" , err )
711
+ }
712
+
667
713
if d := cmp .Diff (content , randomBytes3MiB ); d != "" {
668
714
return fmt .Errorf ("content mismatch, got %v bytes, want %v bytes" , len (content ), len (randomBytes3MiB ))
669
715
}
0 commit comments