3232import com .google .common .collect .ImmutableSet ;
3333import com .google .protobuf .ByteString ;
3434import com .google .storage .v2 .Object ;
35+ import com .google .storage .v2 .ObjectChecksums ;
3536import com .google .storage .v2 .StartResumableWriteRequest ;
3637import com .google .storage .v2 .StartResumableWriteResponse ;
3738import com .google .storage .v2 .StorageClient ;
@@ -63,8 +64,9 @@ public final class ITGapicUnbufferedWritableByteChannelTest {
6364 private static final Logger LOGGER =
6465 Logger .getLogger (ITGapicUnbufferedWritableByteChannelTest .class .getName ());
6566
67+ private static final Hasher HASHER = Hasher .enabled ();
6668 private static final ChunkSegmenter segmenter =
67- new ChunkSegmenter (Hasher . noop () , ByteStringStrategy .copy (), 10 , 5 );
69+ new ChunkSegmenter (HASHER , ByteStringStrategy .copy (), 10 , 5 );
6870
6971 private static final String uploadId = "upload-id" ;
7072
@@ -80,31 +82,35 @@ public final class ITGapicUnbufferedWritableByteChannelTest {
8082 private static final WriteObjectRequest req1 =
8183 WriteObjectRequest .newBuilder ()
8284 .setUploadId (uploadId )
83- .setChecksummedData (TestUtils . getChecksummedData (ByteString .copyFrom (bytes , 0 , 10 )))
85+ .setChecksummedData (getChecksummedData (ByteString .copyFrom (bytes , 0 , 10 ), HASHER ))
8486 .build ();
8587 private static final WriteObjectRequest req2 =
8688 WriteObjectRequest .newBuilder ()
8789 .setUploadId (uploadId )
8890 .setWriteOffset (10 )
89- .setChecksummedData (TestUtils . getChecksummedData (ByteString .copyFrom (bytes , 10 , 10 )))
91+ .setChecksummedData (getChecksummedData (ByteString .copyFrom (bytes , 10 , 10 ), HASHER ))
9092 .build ();
9193 private static final WriteObjectRequest req3 =
9294 WriteObjectRequest .newBuilder ()
9395 .setUploadId (uploadId )
9496 .setWriteOffset (20 )
95- .setChecksummedData (TestUtils . getChecksummedData (ByteString .copyFrom (bytes , 20 , 10 )))
97+ .setChecksummedData (getChecksummedData (ByteString .copyFrom (bytes , 20 , 10 ), HASHER ))
9698 .build ();
9799 private static final WriteObjectRequest req4 =
98100 WriteObjectRequest .newBuilder ()
99101 .setUploadId (uploadId )
100102 .setWriteOffset (30 )
101- .setChecksummedData (TestUtils . getChecksummedData (ByteString .copyFrom (bytes , 30 , 10 )))
103+ .setChecksummedData (getChecksummedData (ByteString .copyFrom (bytes , 30 , 10 ), HASHER ))
102104 .build ();
103105 private static final WriteObjectRequest req5 =
104106 WriteObjectRequest .newBuilder ()
105107 .setUploadId (uploadId )
106108 .setWriteOffset (40 )
107109 .setFinishWrite (true )
110+ .setObjectChecksums (
111+ ObjectChecksums .newBuilder ()
112+ .setCrc32C (HASHER .hash (ByteBuffer .wrap (bytes )).getValue ())
113+ .build ())
108114 .build ();
109115
110116 private static final WriteObjectResponse resp1 =
@@ -123,35 +129,24 @@ public final class ITGapicUnbufferedWritableByteChannelTest {
123129
124130 @ Test
125131 public void directUpload () throws IOException , InterruptedException , ExecutionException {
126- Object obj = Object .newBuilder ().setBucket ("buck" ).setName ("obj" ).build ();
127- WriteObjectSpec spec = WriteObjectSpec .newBuilder ().setResource (obj ).build ();
128132
129133 byte [] bytes = DataGenerator .base64Characters ().genBytes (40 );
130134 WriteObjectRequest req1 =
131- WriteObjectRequest .newBuilder ()
135+ ITGapicUnbufferedWritableByteChannelTest .req1
136+ .toBuilder ()
137+ .clearUploadId ()
132138 .setWriteObjectSpec (spec )
133- .setChecksummedData (TestUtils .getChecksummedData (ByteString .copyFrom (bytes , 0 , 10 )))
134139 .build ();
135140 WriteObjectRequest req2 =
136- WriteObjectRequest .newBuilder ()
137- .setWriteOffset (10 )
138- .setChecksummedData (TestUtils .getChecksummedData (ByteString .copyFrom (bytes , 10 , 10 )))
139- .build ();
141+ ITGapicUnbufferedWritableByteChannelTest .req2 .toBuilder ().clearUploadId ().build ();
140142 WriteObjectRequest req3 =
141- WriteObjectRequest .newBuilder ()
142- .setWriteOffset (20 )
143- .setChecksummedData (TestUtils .getChecksummedData (ByteString .copyFrom (bytes , 20 , 10 )))
144- .build ();
143+ ITGapicUnbufferedWritableByteChannelTest .req3 .toBuilder ().clearUploadId ().build ();
145144 WriteObjectRequest req4 =
146- WriteObjectRequest .newBuilder ()
147- .setWriteOffset (30 )
148- .setChecksummedData (TestUtils .getChecksummedData (ByteString .copyFrom (bytes , 30 , 10 )))
149- .build ();
145+ ITGapicUnbufferedWritableByteChannelTest .req4 .toBuilder ().clearUploadId ().build ();
150146 WriteObjectRequest req5 =
151- WriteObjectRequest . newBuilder (). setWriteOffset ( 40 ). setFinishWrite ( true ).build ();
147+ ITGapicUnbufferedWritableByteChannelTest . req5 . toBuilder (). clearUploadId ( ).build ();
152148
153- WriteObjectResponse resp =
154- WriteObjectResponse .newBuilder ().setResource (obj .toBuilder ().setSize (40 )).build ();
149+ WriteObjectResponse resp = resp5 ;
155150
156151 WriteObjectRequest base = WriteObjectRequest .newBuilder ().setWriteObjectSpec (spec ).build ();
157152 WriteObjectRequestBuilderFactory reqFactory = WriteObjectRequestBuilderFactory .simple (base );
@@ -314,10 +309,7 @@ public boolean shouldRetry(Throwable t, Object ignore) {
314309
315310 @ Test
316311 public void resumableUpload_finalizeWhenWriteAndCloseCalledEvenWhenQuantumAligned ()
317- throws IOException , InterruptedException , ExecutionException {
318- int quantum = 10 ;
319- ChunkSegmenter segmenter =
320- new ChunkSegmenter (Hasher .noop (), ByteStringStrategy .copy (), 50 , quantum );
312+ throws IOException {
321313 SettableApiFuture <WriteObjectResponse > result = SettableApiFuture .create ();
322314
323315 AtomicReference <List <WriteObjectRequest >> actualFlush = new AtomicReference <>();
@@ -342,18 +334,10 @@ public void close(@Nullable WriteObjectRequest req) {
342334 }
343335 });
344336
345- byte [] bytes = DataGenerator .base64Characters ().genBytes (quantum );
346-
347337 long written = c .writeAndClose (ByteBuffer .wrap (bytes ));
348- WriteObjectRequest expectedRequest =
349- WriteObjectRequest .newBuilder ()
350- .setUploadId (uploadId )
351- .setChecksummedData (getChecksummedData (ByteString .copyFrom (bytes ), Hasher .noop ()))
352- .setFinishWrite (true )
353- .build ();
354338
355- assertThat (written ).isEqualTo (10 );
356- assertThat (actualFlush .get ()).isEqualTo (ImmutableList .of (expectedRequest ));
339+ assertThat (written ).isEqualTo (40 );
340+ assertThat (actualFlush .get ()).isEqualTo (ImmutableList .of (req1 , req2 , req3 , req4 , req5 ));
357341 // calling close is okay, as long as the provided request is null
358342 assertThat (actualClose .get ()).isAnyOf (closeRequestSentinel , null );
359343 }
0 commit comments