@Test
 public void testReadAndWriteCaptureChannels() throws IOException {
   String blobName = "test-read-and-write-capture-channels-blob";
   BlobInfo blob = BlobInfo.builder(BUCKET, blobName).build();
   byte[] stringBytes;
   BlobWriteChannel writer = storage.writer(blob);
   stringBytes = BLOB_STRING_CONTENT.getBytes(UTF_8);
   writer.write(ByteBuffer.wrap(BLOB_BYTE_CONTENT));
   RestorableState<BlobWriteChannel> writerState = writer.capture();
   BlobWriteChannel secondWriter = writerState.restore();
   secondWriter.write(ByteBuffer.wrap(stringBytes));
   secondWriter.close();
   ByteBuffer readBytes;
   ByteBuffer readStringBytes;
   BlobReadChannel reader = storage.reader(blob.blobId());
   reader.chunkSize(BLOB_BYTE_CONTENT.length);
   readBytes = ByteBuffer.allocate(BLOB_BYTE_CONTENT.length);
   reader.read(readBytes);
   RestorableState<BlobReadChannel> readerState = reader.capture();
   BlobReadChannel secondReader = readerState.restore();
   readStringBytes = ByteBuffer.allocate(stringBytes.length);
   secondReader.read(readStringBytes);
   reader.close();
   secondReader.close();
   assertArrayEquals(BLOB_BYTE_CONTENT, readBytes.array());
   assertEquals(BLOB_STRING_CONTENT, new String(readStringBytes.array(), UTF_8));
   assertTrue(storage.delete(BUCKET, blobName));
 }
 @Test
 public void testReadChannelFail() throws IOException {
   String blobName = "test-read-channel-blob-fail";
   BlobInfo blob = BlobInfo.builder(BUCKET, blobName).build();
   assertNotNull(storage.create(blob));
   try (BlobReadChannel reader =
       storage.reader(blob.blobId(), Storage.BlobSourceOption.metagenerationMatch(-1L))) {
     reader.read(ByteBuffer.allocate(42));
     fail("StorageException was expected");
   } catch (StorageException ex) {
     // expected
   }
   assertTrue(storage.delete(BUCKET, blobName));
 }
 @Test
 public void testReadAndWriteChannels() throws IOException {
   String blobName = "test-read-and-write-channels-blob";
   BlobInfo blob = BlobInfo.builder(BUCKET, blobName).build();
   byte[] stringBytes;
   try (BlobWriteChannel writer = storage.writer(blob)) {
     stringBytes = BLOB_STRING_CONTENT.getBytes(UTF_8);
     writer.write(ByteBuffer.wrap(BLOB_BYTE_CONTENT));
     writer.write(ByteBuffer.wrap(stringBytes));
   }
   ByteBuffer readBytes;
   ByteBuffer readStringBytes;
   try (BlobReadChannel reader = storage.reader(blob.blobId())) {
     readBytes = ByteBuffer.allocate(BLOB_BYTE_CONTENT.length);
     readStringBytes = ByteBuffer.allocate(stringBytes.length);
     reader.read(readBytes);
     reader.read(readStringBytes);
   }
   assertArrayEquals(BLOB_BYTE_CONTENT, readBytes.array());
   assertEquals(BLOB_STRING_CONTENT, new String(readStringBytes.array(), UTF_8));
   assertTrue(storage.delete(BUCKET, blobName));
 }