@@ -971,6 +971,7 @@ func TestOpenAppendableWriterEmulated(t *testing.T) {
971971 vc := & Client {tc : client }
972972 w := vc .Bucket (bucket ).Object (objName ).NewWriter (ctx )
973973 w .Append = true
974+ w .FinalizeOnClose = true
974975 _ , err = w .Write (randomBytesToWrite )
975976 if err != nil {
976977 t .Fatalf ("writing test data: got %v; want ok" , err )
@@ -996,6 +997,14 @@ func TestOpenAppendableWriterEmulated(t *testing.T) {
996997 if diff := cmp .Diff (got , randomBytesToWrite ); diff != "" {
997998 t .Fatalf ("checking written content: got(-), want(+):\n %s" , diff )
998999 }
1000+
1001+ o , err := veneerClient .Bucket (bucket ).Object (objName ).Attrs (ctx )
1002+ if err != nil {
1003+ t .Fatalf ("getting object attrs: got %v; want ok" , err )
1004+ }
1005+ if o .Finalized .IsZero () {
1006+ t .Errorf ("expected valid finalize time: got %v; want non-zero" , o .Finalized )
1007+ }
9991008 })
10001009}
10011010
@@ -1014,6 +1023,7 @@ func TestOpenAppendableWriterMultipleChunksEmulated(t *testing.T) {
10141023 vc := & Client {tc : client }
10151024 w := vc .Bucket (bucket ).Object (objName ).NewWriter (ctx )
10161025 w .Append = true
1026+ w .FinalizeOnClose = true
10171027 // This should chunk the request into three separate flushes to storage.
10181028 w .ChunkSize = MiB
10191029 var lastReportedOffset int64
@@ -1051,6 +1061,59 @@ func TestOpenAppendableWriterMultipleChunksEmulated(t *testing.T) {
10511061 if diff := cmp .Diff (got , randomBytes3MiB ); diff != "" {
10521062 t .Fatalf ("checking written content: got(-), want(+):\n %s" , diff )
10531063 }
1064+
1065+ o , err := veneerClient .Bucket (bucket ).Object (objName ).Attrs (ctx )
1066+ if err != nil {
1067+ t .Fatalf ("getting object attrs: got %v; want ok" , err )
1068+ }
1069+ if o .Finalized .IsZero () {
1070+ t .Errorf ("expected valid finalize time: got %v; want non-zero" , o .Finalized )
1071+ }
1072+ })
1073+ }
1074+
1075+ func TestOpenAppendableWriterLeaveUnfinalizedEmulated (t * testing.T ) {
1076+ transportClientTest (skipHTTP ("appends only supported via gRPC" ), t , func (t * testing.T , ctx context.Context , project , bucket string , client storageClient ) {
1077+ // Populate test data.
1078+ _ , err := client .CreateBucket (ctx , project , bucket , & BucketAttrs {
1079+ Name : bucket ,
1080+ }, nil )
1081+ if err != nil {
1082+ t .Fatalf ("client.CreateBucket: %v" , err )
1083+ }
1084+ prefix := time .Now ().Nanosecond ()
1085+ objName := fmt .Sprintf ("%d-object-%d" , prefix , time .Now ().Nanosecond ())
1086+
1087+ vc := & Client {tc : client }
1088+ w := vc .Bucket (bucket ).Object (objName ).NewWriter (ctx )
1089+ w .Append = true
1090+ w .FinalizeOnClose = false
1091+ var lastReportedOffset int64
1092+ w .ProgressFunc = func (offset int64 ) {
1093+ lastReportedOffset = offset
1094+ }
1095+ _ , err = w .Write (randomBytesToWrite )
1096+ wantLen := int64 (len (randomBytesToWrite ))
1097+ if err != nil {
1098+ t .Fatalf ("writing test data: got %v; want ok" , err )
1099+ }
1100+ if err := w .Close (); err != nil {
1101+ t .Fatalf ("closing test data writer: got %v; want ok" , err )
1102+ }
1103+ if lastReportedOffset != wantLen {
1104+ t .Errorf ("incorrect final progress report: got %d; want %d" , lastReportedOffset , wantLen )
1105+ }
1106+ // No finalize time on the object.
1107+ o , err := vc .Bucket (bucket ).Object (objName ).Attrs (ctx )
1108+ if err != nil {
1109+ t .Fatalf ("getting object attrs: got %v; want ok" , err )
1110+ }
1111+ if o .Created .IsZero () {
1112+ t .Errorf ("expected valid create time: got %v; want non-zero" , o .Created )
1113+ }
1114+ if ! o .Finalized .IsZero () {
1115+ t .Errorf ("unexpected valid finalize time: got %v; want zero" , o .Finalized )
1116+ }
10541117 })
10551118}
10561119
@@ -1069,6 +1132,7 @@ func TestWriterFlushEmulated(t *testing.T) {
10691132 vc := & Client {tc : client }
10701133 w := vc .Bucket (bucket ).Object (objName ).NewWriter (ctx )
10711134 w .Append = true
1135+ w .FinalizeOnClose = true
10721136 w .ChunkSize = 3 * MiB
10731137 var gotOffsets []int64
10741138 w .ProgressFunc = func (offset int64 ) {
@@ -1188,6 +1252,7 @@ func TestWriterFlushAtCloseEmulated(t *testing.T) {
11881252 vc := & Client {tc : client }
11891253 w := vc .Bucket (bucket ).Object (objName ).NewWriter (ctx )
11901254 w .Append = true
1255+ w .FinalizeOnClose = true
11911256 w .ChunkSize = MiB
11921257 var gotOffsets []int64
11931258 w .ProgressFunc = func (offset int64 ) {
@@ -1268,6 +1333,7 @@ func TestWriterSmallFlushEmulated(t *testing.T) {
12681333 vc := & Client {tc : client }
12691334 w := vc .Bucket (bucket ).Object (objName ).NewWriter (ctx )
12701335 w .Append = true
1336+ w .FinalizeOnClose = true
12711337 w .ChunkSize = MiB
12721338 var gotOffsets []int64
12731339 w .ProgressFunc = func (offset int64 ) {
0 commit comments