attributes.put(BUCKET_ATTR, blob.getBucket()); attributes.put(KEY_ATTR, blob.getName()); if (blob.getSize() != null) { attributes.put(SIZE_ATTR, String.valueOf(blob.getSize())); if (blob.getCacheControl() != null) { attributes.put(CACHE_CONTROL_ATTR, blob.getCacheControl()); if (blob.getComponentCount() != null) { attributes.put(COMPONENT_COUNT_ATTR, String.valueOf(blob.getComponentCount())); if (blob.getContentDisposition() != null) { attributes.put(CONTENT_DISPOSITION_ATTR, blob.getContentDisposition()); final Util.ParsedContentDisposition parsed = Util.parseContentDisposition(blob.getContentDisposition()); if (blob.getContentEncoding() != null) { attributes.put(CONTENT_ENCODING_ATTR, blob.getContentEncoding()); if (blob.getContentLanguage() != null) { attributes.put(CONTENT_LANGUAGE_ATTR, blob.getContentLanguage()); if (blob.getContentType() != null) { attributes.put(CoreAttributes.MIME_TYPE.key(), blob.getContentType()); if (blob.getCrc32c() != null) { attributes.put(CRC32C_ATTR, blob.getCrc32c()); if (blob.getCustomerEncryption() != null) {
@Test public void testForceDeleteNoTimeout() { Storage storageMock = EasyMock.createMock(Storage.class); EasyMock.expect(blob1.getBlobId()).andReturn(BLOB_ID1); EasyMock.expect(blob2.getBlobId()).andReturn(BLOB_ID2); ArrayList<BlobId> ids = new ArrayList<>(); ids.add(BLOB_ID1); ids.add(BLOB_ID2); EasyMock.expect(storageMock.delete(ids)).andReturn(Collections.nCopies(2, true)).anyTimes(); EasyMock.expect(storageMock.list(BUCKET_NAME, BlobListOption.versions(true))) .andReturn(blobPage); EasyMock.expect(storageMock.delete(BUCKET_NAME)).andReturn(true); EasyMock.replay(storageMock, blob1, blob2); RemoteStorageHelper.forceDelete(storageMock, BUCKET_NAME); EasyMock.verify(storageMock); }
@Test public void testReader() throws Exception { initializeExpectedBlob(2); ReadChannel channel = createMock(ReadChannel.class); expect(storage.getOptions()).andReturn(mockOptions); expect(storage.reader(BLOB_INFO.getBlobId())).andReturn(channel); replay(storage); initializeBlob(); assertSame(channel, blob.reader()); }
/** * Sends a copy request for the current blob to the target bucket, preserving its name. Possibly * copying also some of the metadata (e.g. content-type). * * <p>Example of copying the blob to a different bucket, keeping the original name. * * <pre>{@code * String bucketName = "my_unique_bucket"; * CopyWriter copyWriter = blob.copyTo(bucketName); * Blob copiedBlob = copyWriter.getResult(); * }</pre> * * @param targetBucket target bucket's name * @param options source blob options * @return a {@link CopyWriter} object that can be used to get information on the newly created * blob or to complete the copy if more than one RPC request is needed * @throws StorageException upon failure */ public CopyWriter copyTo(String targetBucket, BlobSourceOption... options) { return copyTo(targetBucket, getName(), options); }
/** Example of moving a blob to a different bucket with a different name. */ // [TARGET copyTo(String, String, BlobSourceOption...)] // [VARIABLE "my_unique_bucket"] // [VARIABLE "move_blob_name"] public Blob moveTo(String destBucket, String destBlob) { // [START storageMoveFile] CopyWriter copyWriter = blob.copyTo(destBucket, destBlob); Blob copiedBlob = copyWriter.getResult(); boolean deleted = blob.delete(); // [END storageMoveFile] if (deleted) { return copiedBlob; } else { return null; } }
System.out.println("Bucket: " + blob.getBucket()); System.out.println("CacheControl: " + blob.getCacheControl()); System.out.println("ComponentCount: " + blob.getComponentCount()); System.out.println("ContentDisposition: " + blob.getContentDisposition()); System.out.println("ContentEncoding: " + blob.getContentEncoding()); System.out.println("ContentLanguage: " + blob.getContentLanguage()); System.out.println("ContentType: " + blob.getContentType()); System.out.println("Crc32c: " + blob.getCrc32c()); System.out.println("ETag: " + blob.getEtag()); System.out.println("Generation: " + blob.getGeneration()); System.out.println("Id: " + blob.getBlobId()); System.out.println("KmsKeyName: " + blob.getKmsKeyName()); System.out.println("Md5Hash: " + blob.getMd5()); System.out.println("MediaLink: " + blob.getMediaLink()); System.out.println("Metageneration: " + blob.getMetageneration()); System.out.println("Name: " + blob.getName()); System.out.println("Size: " + blob.getSize()); System.out.println("StorageClass: " + blob.getStorageClass()); System.out.println("TimeCreated: " + new Date(blob.getCreateTime())); System.out.println("Last Metadata Update: " + new Date(blob.getUpdateTime())); Boolean temporaryHoldIsEnabled = (blob.getTemporaryHold() != null && blob.getTemporaryHold()); System.out.println("temporaryHold: " + (temporaryHoldIsEnabled ? "enabled" : "disabled")); Boolean eventBasedHoldIsEnabled = (blob.getEventBasedHold() != null && blob.getEventBasedHold()); System.out.println("eventBasedHold: " + (eventBasedHoldIsEnabled ? "enabled" : "disabled")); if (blob.getRetentionExpirationTime() != null) { System.out.println("retentionExpirationTime: " + new Date(blob.getRetentionExpirationTime())); if (blob.getMetadata() != null) {
@Test public void testCopyToBucket() throws Exception { initializeExpectedBlob(2); BlobInfo target = BlobInfo.newBuilder(BlobId.of("bt", "n")).build(); CopyWriter copyWriter = createMock(CopyWriter.class); Capture<CopyRequest> capturedCopyRequest = Capture.newInstance(); expect(storage.getOptions()).andReturn(mockOptions); expect(storage.copy(capture(capturedCopyRequest))).andReturn(copyWriter); replay(storage); initializeBlob(); CopyWriter returnedCopyWriter = blob.copyTo("bt"); assertEquals(copyWriter, returnedCopyWriter); assertEquals(capturedCopyRequest.getValue().getSource(), blob.getBlobId()); assertEquals(capturedCopyRequest.getValue().getTarget(), target); assertFalse(capturedCopyRequest.getValue().overrideInfo()); assertTrue(capturedCopyRequest.getValue().getSourceOptions().isEmpty()); assertTrue(capturedCopyRequest.getValue().getTargetOptions().isEmpty()); }
@Test public void testBuilder() { initializeExpectedBlob(4); expect(storage.getOptions()).andReturn(mockOptions).times(6); replay(storage); Blob.Builder builder = new Blob.Builder(new Blob(storage, new BlobInfo.BuilderImpl(BLOB_INFO))); Blob blob = builder .setUpdateTime(UPDATE_TIME) .build(); assertEquals("b", blob.getBucket()); assertEquals("n", blob.getName()); assertEquals(ACLS, blob.getAcl()); assertEquals(COMPONENT_COUNT, blob.getComponentCount()); assertEquals(CONTENT_TYPE, blob.getContentType()); assertEquals(CACHE_CONTROL, blob.getCacheControl()); assertEquals(CONTENT_DISPOSITION, blob.getContentDisposition()); assertEquals(CONTENT_ENCODING, blob.getContentEncoding()); assertEquals(CONTENT_LANGUAGE, blob.getContentLanguage()); assertEquals(CRC32, blob.getCrc32c()); assertEquals(CREATE_TIME, blob.getCreateTime()); assertEquals(CUSTOMER_ENCRYPTION, blob.getCustomerEncryption()); assertEquals(KMS_KEY_NAME, blob.getKmsKeyName()); assertEquals(EVENT_BASED_HOLD, blob.getEventBasedHold()); assertEquals(TEMPORARY_HOLD, blob.getTemporaryHold()); assertEquals(RETENTION_EXPIRATION_TIME, blob.getRetentionExpirationTime()); assertEquals(DELETE_TIME, blob.getDeleteTime()); assertEquals(ETAG, blob.getEtag()); assertEquals(GENERATED_ID, blob.getGeneratedId());
@Test public void testExists_False() throws Exception { Storage.BlobGetOption[] expectedOptions = {Storage.BlobGetOption.fields()}; expect(storage.getOptions()).andReturn(null); expect(storage.get(BLOB_INFO.getBlobId(), expectedOptions)).andReturn(null); replay(storage); initializeBlob(); assertFalse(blob.exists()); }
@Test public void testExists_True() throws Exception { initializeExpectedBlob(1); Storage.BlobGetOption[] expectedOptions = {Storage.BlobGetOption.fields()}; expect(storage.getOptions()).andReturn(mockOptions); expect(storage.get(expectedBlob.getBlobId(), expectedOptions)).andReturn(expectedBlob); replay(storage); initializeBlob(); assertTrue(blob.exists()); }
@Test public void testCopyBlobNoContentType() { String sourceBlobName = "test-copy-blob-no-content-type-source"; BlobId source = BlobId.of(BUCKET, sourceBlobName); Blob remoteSourceBlob = storage.create(BlobInfo.newBuilder(source).build(), BLOB_BYTE_CONTENT); assertNotNull(remoteSourceBlob); String targetBlobName = "test-copy-blob-no-content-type-target"; ImmutableMap<String, String> metadata = ImmutableMap.of("k", "v"); BlobInfo target = BlobInfo.newBuilder(BUCKET, targetBlobName).setMetadata(metadata).build(); Storage.CopyRequest req = Storage.CopyRequest.of(source, target); CopyWriter copyWriter = storage.copy(req); assertEquals(BUCKET, copyWriter.getResult().getBucket()); assertEquals(targetBlobName, copyWriter.getResult().getName()); assertNull(copyWriter.getResult().getContentType()); assertEquals(metadata, copyWriter.getResult().getMetadata()); assertTrue(copyWriter.isDone()); assertTrue(remoteSourceBlob.delete()); assertTrue(storage.delete(BUCKET, targetBlobName)); }
@Test public void testUpdateBlob() { String blobName = "test-update-blob"; BlobInfo blob = BlobInfo.newBuilder(BUCKET, blobName).build(); Blob remoteBlob = storage.create(blob); assertNotNull(remoteBlob); Blob updatedBlob = remoteBlob.toBuilder().setContentType(CONTENT_TYPE).build().update(); assertNotNull(updatedBlob); assertEquals(blob.getName(), updatedBlob.getName()); assertEquals(blob.getBucket(), updatedBlob.getBucket()); assertEquals(CONTENT_TYPE, updatedBlob.getContentType()); }
@Test public void testCreateBlob() { String blobName = "test-create-blob"; BlobInfo blob = BlobInfo.newBuilder(BUCKET, blobName).build(); Blob remoteBlob = storage.create(blob, BLOB_BYTE_CONTENT); assertNotNull(remoteBlob); assertEquals(blob.getBucket(), remoteBlob.getBucket()); assertEquals(blob.getName(), remoteBlob.getName()); byte[] readBytes = storage.readAllBytes(BUCKET, blobName); assertArrayEquals(BLOB_BYTE_CONTENT, readBytes); assertTrue(remoteBlob.delete()); }
@Test public void testCreateBlobStream() { String blobName = "test-create-blob-stream"; BlobInfo blob = BlobInfo.newBuilder(BUCKET, blobName).setContentType(CONTENT_TYPE).build(); ByteArrayInputStream stream = new ByteArrayInputStream(BLOB_STRING_CONTENT.getBytes(UTF_8)); Blob remoteBlob = storage.create(blob, stream); assertNotNull(remoteBlob); assertEquals(blob.getBucket(), remoteBlob.getBucket()); assertEquals(blob.getName(), remoteBlob.getName()); assertEquals(blob.getContentType(), remoteBlob.getContentType()); byte[] readBytes = storage.readAllBytes(BUCKET, blobName); assertEquals(BLOB_STRING_CONTENT, new String(readBytes, UTF_8)); }
@Test public void testGetBlobKmsKeyNameField() { String blobName = "test-get-selected-kms-key-name-field-blob"; BlobInfo blob = BlobInfo.newBuilder(BUCKET, blobName).setContentType(CONTENT_TYPE).build(); assertNotNull(storage.create(blob, Storage.BlobTargetOption.kmsKeyName(kmsKeyOneResourcePath))); Blob remoteBlob = storage.get(blob.getBlobId(), Storage.BlobGetOption.fields(BlobField.KMS_KEY_NAME)); assertEquals(blob.getBlobId(), remoteBlob.getBlobId()); assertTrue(remoteBlob.getKmsKeyName().startsWith(kmsKeyOneResourcePath)); assertNull(remoteBlob.getContentType()); }
@Test public void testGetBlobs() { String sourceBlobName1 = "test-get-blobs-1"; String sourceBlobName2 = "test-get-blobs-2"; BlobInfo sourceBlob1 = BlobInfo.newBuilder(BUCKET, sourceBlobName1).build(); BlobInfo sourceBlob2 = BlobInfo.newBuilder(BUCKET, sourceBlobName2).build(); assertNotNull(storage.create(sourceBlob1)); assertNotNull(storage.create(sourceBlob2)); List<Blob> remoteBlobs = storage.get(sourceBlob1.getBlobId(), sourceBlob2.getBlobId()); assertEquals(sourceBlob1.getBucket(), remoteBlobs.get(0).getBucket()); assertEquals(sourceBlob1.getName(), remoteBlobs.get(0).getName()); assertEquals(sourceBlob2.getBucket(), remoteBlobs.get(1).getBucket()); assertEquals(sourceBlob2.getName(), remoteBlobs.get(1).getName()); }
"test-list-blobs-empty-selected-fields-blob1", "test-list-blobs-empty-selected-fields-blob2" }; BlobInfo blob1 = BlobInfo.newBuilder(BUCKET, blobNames[0]).setContentType(CONTENT_TYPE).build(); BlobInfo blob2 = BlobInfo.newBuilder(BUCKET, blobNames[1]).setContentType(CONTENT_TYPE).build(); Blob remoteBlob1 = storage.create(blob1); Blob remoteBlob2 = storage.create(blob2); assertNotNull(remoteBlob1); assertNotNull(remoteBlob2); Page<Blob> page = storage.list( BUCKET, Storage.BlobListOption.prefix("test-list-blobs-empty-selected-fields-blob"), while (iterator.hasNext()) { Blob remoteBlob = iterator.next(); assertEquals(BUCKET, remoteBlob.getBucket()); assertTrue(blobSet.contains(remoteBlob.getName())); assertNull(remoteBlob.getContentType());
@Test public void testGetBlobAllSelectedFields() { String blobName = "test-get-all-selected-fields-blob"; BlobInfo blob = BlobInfo.newBuilder(BUCKET, blobName) .setContentType(CONTENT_TYPE) .setMetadata(ImmutableMap.of("k", "v")) .build(); assertNotNull(storage.create(blob)); Blob remoteBlob = storage.get(blob.getBlobId(), Storage.BlobGetOption.fields(BlobField.values())); assertEquals(blob.getBucket(), remoteBlob.getBucket()); assertEquals(blob.getName(), remoteBlob.getName()); assertEquals(ImmutableMap.of("k", "v"), remoteBlob.getMetadata()); assertNotNull(remoteBlob.getGeneratedId()); assertNotNull(remoteBlob.getSelfLink()); }
@Test public void testPostSignedUrl() throws IOException { if (storage.getOptions().getCredentials() != null) { assumeTrue(storage.getOptions().getCredentials() instanceof ServiceAccountSigner); } String blobName = "test-post-signed-url-blob"; BlobInfo blob = BlobInfo.newBuilder(BUCKET, blobName).build(); assertNotNull(storage.create(blob)); URL url = storage.signUrl(blob, 1, TimeUnit.HOURS, Storage.SignUrlOption.httpMethod(HttpMethod.POST)); URLConnection connection = url.openConnection(); connection.setDoOutput(true); connection.connect(); Blob remoteBlob = storage.get(BUCKET, blobName); assertNotNull(remoteBlob); assertEquals(blob.getBucket(), remoteBlob.getBucket()); assertEquals(blob.getName(), remoteBlob.getName()); }