public MutableBlobProperties apply(BlobMetadata from) { if (from == null) return null; MutableBlobProperties to = new MutableBlobPropertiesImpl(); HttpUtils.copy(from.getContentMetadata(), to.getContentMetadata()); to.setETag(from.getETag()); to.setName(from.getName()); to.setUrl(from.getUri()); to.setLastModified(from.getLastModified()); if (from.getUserMetadata() != null) { for (Entry<String, String> entry : from.getUserMetadata().entrySet()) to.getMetadata().put(entry.getKey().toLowerCase(), entry.getValue()); } return to; }
public MutableBlobProperties apply(BlobMetadata from) { if (from == null) return null; MutableBlobProperties to = new MutableBlobPropertiesImpl(); HttpUtils.copy(from.getContentMetadata(), to.getContentMetadata()); to.setETag(from.getETag()); to.setName(from.getName()); to.setUrl(from.getUri()); to.setLastModified(from.getLastModified()); if (from.getUserMetadata() != null) { for (Entry<String, String> entry : from.getUserMetadata().entrySet()) to.getMetadata().put(entry.getKey().toLowerCase(), entry.getValue()); } return to; }
public MutableBlobProperties apply(BlobMetadata from) { if (from == null) return null; MutableBlobProperties to = new MutableBlobPropertiesImpl(); HttpUtils.copy(from.getContentMetadata(), to.getContentMetadata()); to.setETag(from.getETag()); to.setName(from.getName()); to.setUrl(from.getUri()); to.setLastModified(from.getLastModified()); if (from.getUserMetadata() != null) { for (Entry<String, String> entry : from.getUserMetadata().entrySet()) to.getMetadata().put(entry.getKey().toLowerCase(), entry.getValue()); } return to; }
public MutableBlobProperties apply(BlobMetadata from) { if (from == null) return null; MutableBlobProperties to = new MutableBlobPropertiesImpl(); HttpUtils.copy(from.getContentMetadata(), to.getContentMetadata()); to.setETag(from.getETag()); to.setName(from.getName()); to.setUrl(from.getUri()); to.setLastModified(from.getLastModified()); if (from.getUserMetadata() != null) { for (Entry<String, String> entry : from.getUserMetadata().entrySet()) to.getMetadata().put(entry.getKey().toLowerCase(), entry.getValue()); } return to; }
public MutableBlobProperties apply(BlobMetadata from) { if (from == null) return null; MutableBlobProperties to = new MutableBlobPropertiesImpl(); HttpUtils.copy(from.getContentMetadata(), to.getContentMetadata()); to.setETag(from.getETag()); to.setName(from.getName()); to.setUrl(from.getUri()); to.setLastModified(from.getLastModified()); if (from.getUserMetadata() != null) { for (Entry<String, String> entry : from.getUserMetadata().entrySet()) to.getMetadata().put(entry.getKey().toLowerCase(), entry.getValue()); } return to; }
@Override public String completeMultipartUpload(MultipartUpload mpu, List<MultipartPart> parts) { AzureBlob azureBlob = sync.newBlob(); // fake values to satisfy BindAzureBlobMetadataToMultipartRequest azureBlob.setPayload(new byte[0]); azureBlob.getProperties().setContainer(mpu.containerName()); azureBlob.getProperties().setName(mpu.blobName()); azureBlob.getProperties().setContentMetadata((MutableContentMetadata) mpu.blobMetadata().getContentMetadata()); azureBlob.getProperties().setMetadata(mpu.blobMetadata().getUserMetadata()); ImmutableList.Builder<String> blocks = ImmutableList.builder(); for (MultipartPart part : parts) { String blockId = BaseEncoding.base64().encode(Ints.toByteArray(part.partNumber())); blocks.add(blockId); } return sync.putBlockList(mpu.containerName(), azureBlob, blocks.build()); }
@Override public String completeMultipartUpload(MultipartUpload mpu, List<MultipartPart> parts) { AzureBlob azureBlob = sync.newBlob(); // fake values to satisfy BindAzureBlobMetadataToMultipartRequest azureBlob.setPayload(new byte[0]); azureBlob.getProperties().setContainer(mpu.containerName()); azureBlob.getProperties().setName(mpu.blobName()); azureBlob.getProperties().setContentMetadata((MutableContentMetadata) mpu.blobMetadata().getContentMetadata()); azureBlob.getProperties().setMetadata(mpu.blobMetadata().getUserMetadata()); ImmutableList.Builder<String> blocks = ImmutableList.builder(); for (MultipartPart part : parts) { String blockId = BaseEncoding.base64().encode(Ints.toByteArray(part.partNumber())); blocks.add(blockId); } return sync.putBlockList(mpu.containerName(), azureBlob, blocks.build()); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testNoContentLengthIsBad() { AzureBlob blob = injector.getInstance(AzureBlob.Factory.class).create(null); Payload payload = Payloads.newStringPayload(""); payload.getContentMetadata().setContentLength(null); blob.setPayload(payload); blob.getProperties().setName("foo"); HttpRequest request = HttpRequest.builder().method("PUT").endpoint("http://localhost").build(); BindAzureBlobMetadataToRequest binder = injector.getInstance(BindAzureBlobMetadataToRequest.class); binder.bindToRequest(request, blob); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testOver64MBIsBad() { AzureBlob blob = injector.getInstance(AzureBlob.Factory.class).create(null); Payload payload = Payloads.newStringPayload(""); payload.getContentMetadata().setContentLength(64 * 1024 * 1024l + 1); blob.setPayload(payload); blob.getProperties().setName("foo"); HttpRequest request = HttpRequest.builder().method("PUT").endpoint("http://localhost").build(); BindAzureBlobMetadataToRequest binder = injector.getInstance(BindAzureBlobMetadataToRequest.class); binder.bindToRequest(request, blob); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testNoContentLengthIsBad() { AzureBlob blob = injector.getInstance(AzureBlob.Factory.class).create(null); Payload payload = Payloads.newStringPayload(""); payload.getContentMetadata().setContentLength(null); blob.setPayload(payload); blob.getProperties().setName("foo"); HttpRequest request = HttpRequest.builder().method("PUT").endpoint("http://localhost").build(); BindAzureBlobMetadataToRequest binder = injector.getInstance(BindAzureBlobMetadataToRequest.class); binder.bindToRequest(request, blob); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testOver256MBIsBad() { AzureBlob blob = injector.getInstance(AzureBlob.Factory.class).create(null); Payload payload = Payloads.newStringPayload(""); payload.getContentMetadata().setContentLength(256 * 1024 * 1024L + 1); blob.setPayload(payload); blob.getProperties().setName("foo"); HttpRequest request = HttpRequest.builder().method("PUT").endpoint("http://localhost").build(); BindAzureBlobMetadataToRequest binder = injector.getInstance(BindAzureBlobMetadataToRequest.class); binder.bindToRequest(request, blob); }
@Test public void testPassWithMinimumDetailsAndPayload64MB() { AzureBlob blob = injector.getInstance(AzureBlob.Factory.class).create(null); Payload payload = Payloads.newStringPayload(""); payload.getContentMetadata().setContentLength(64 * 1024 * 1024l); blob.setPayload(payload); blob.getProperties().setName("foo"); HttpRequest request = HttpRequest.builder().method("PUT").endpoint("http://localhost").build(); BindAzureBlobMetadataToRequest binder = injector.getInstance(BindAzureBlobMetadataToRequest.class); assertEquals( binder.bindToRequest(request, blob), HttpRequest.builder().method("PUT").endpoint("http://localhost") .addHeader("x-ms-blob-type", "BlockBlob").build()); }
@Test public void testPassWithMinimumDetailsAndPayload256MB() { AzureBlob blob = injector.getInstance(AzureBlob.Factory.class).create(null); Payload payload = Payloads.newStringPayload(""); payload.getContentMetadata().setContentLength(256 * 1024 * 1024L); blob.setPayload(payload); blob.getProperties().setName("foo"); HttpRequest request = HttpRequest.builder().method("PUT").endpoint("http://localhost").build(); BindAzureBlobMetadataToRequest binder = injector.getInstance(BindAzureBlobMetadataToRequest.class); assertEquals( binder.bindToRequest(request, blob), HttpRequest.builder().method("PUT").endpoint("http://localhost") .addHeader("x-ms-blob-type", "BlockBlob").build()); }
@Test public void testExtendedPropertiesBind() { AzureBlob blob = injector.getInstance(AzureBlob.Factory.class).create(null); Payload payload = Payloads.newStringPayload(""); payload.getContentMetadata().setContentLength(64 * 1024 * 1024l); blob.setPayload(payload); blob.getProperties().setName("foo"); blob.getProperties().setMetadata(ImmutableMap.of("foo", "bar")); HttpRequest request = HttpRequest.builder().method("PUT").endpoint("http://localhost").build(); BindAzureBlobMetadataToRequest binder = injector.getInstance(BindAzureBlobMetadataToRequest.class); assertEquals( binder.bindToRequest(request, blob), HttpRequest.builder().method("PUT").endpoint("http://localhost") .addHeader("x-ms-blob-type", "BlockBlob") .addHeader("x-ms-meta-foo", "bar").build()); }
@Test public void testExtendedPropertiesBind() { AzureBlob blob = injector.getInstance(AzureBlob.Factory.class).create(null); Payload payload = Payloads.newStringPayload(""); payload.getContentMetadata().setContentLength(256 * 1024 * 1024L); blob.setPayload(payload); blob.getProperties().setName("foo"); blob.getProperties().setMetadata(ImmutableMap.of("foo", "bar")); HttpRequest request = HttpRequest.builder().method("PUT").endpoint("http://localhost").build(); BindAzureBlobMetadataToRequest binder = injector.getInstance(BindAzureBlobMetadataToRequest.class); assertEquals( binder.bindToRequest(request, blob), HttpRequest.builder().method("PUT").endpoint("http://localhost") .addHeader("x-ms-blob-type", "BlockBlob") .addHeader("x-ms-meta-foo", "bar").build()); }
@Test(timeOut = 5 * 60 * 1000, dependsOnMethods = { "testCreateContainer" }) public void testCopyBlobIfUnmodifiedSince() throws Exception { ByteSource byteSource = TestUtils.randomByteSource().slice(0, 1024); // create blob AzureBlob object = getApi().newBlob(); object.getProperties().setName("from"); object.setPayload(byteSource.read()); String eTag = getApi().putBlob(privateContainer, object); long now = System.currentTimeMillis(); Date before = new Date(now - 1000 * 1000); Date after = new Date(now + 1000 * 1000); URI copySource = view.getSigner().signGetBlob(privateContainer, "from").getEndpoint(); // failure case try { getApi().copyBlob(copySource, privateContainer, "to-if-unmodifed-since", CopyBlobOptions.builder().ifUnmodifiedSince(before).build()); failBecauseExceptionWasNotThrown(AzureStorageResponseException.class); } catch (AzureStorageResponseException asre) { assertThat(asre.getResponse().getStatusCode()).as("status code").isEqualTo(412); } // success case getApi().copyBlob(copySource, privateContainer, "to-if-unmodifed-since", CopyBlobOptions.builder().ifUnmodifiedSince(after).build()); AzureBlob getBlob = getApi().getBlob(privateContainer, "to-if-unmodifed-since"); assertEquals(ByteStreams2.toByteArrayAndClose(getBlob.getPayload().openStream()), byteSource.read()); }
@Test(timeOut = 5 * 60 * 1000, dependsOnMethods = { "testCreateContainer" }) public void testCopyBlob() throws Exception { ByteSource byteSource = TestUtils.randomByteSource().slice(0, 1024); // create blob AzureBlob object = getApi().newBlob(); object.getProperties().setName("from"); object.setPayload(byteSource.read()); getApi().putBlob(privateContainer, object); // copy blob URI copySource = view.getSigner().signGetBlob(privateContainer, "from").getEndpoint(); getApi().copyBlob(copySource, privateContainer, "to", CopyBlobOptions.NONE); // ensure copied blob matches original AzureBlob getBlob = getApi().getBlob(privateContainer, "to"); assertEquals(ByteStreams2.toByteArrayAndClose(getBlob.getPayload().openStream()), byteSource.read()); assertThat(getBlob.getProperties().getMetadata().isEmpty()); }
@Test(timeOut = 5 * 60 * 1000, dependsOnMethods = { "testCreateContainer" }) public void testCopyBlobReplaceMetadata() throws Exception { ByteSource byteSource = TestUtils.randomByteSource().slice(0, 1024); // create blob AzureBlob object = getApi().newBlob(); object.getProperties().setName("from"); object.setPayload(byteSource.read()); getApi().putBlob(privateContainer, object); // copy blob URI copySource = view.getSigner().signGetBlob(privateContainer, "from").getEndpoint(); Map<String, String> newMetadata = ImmutableMap.of("foo", "bar"); getApi().copyBlob(copySource, privateContainer, "to", CopyBlobOptions.builder().overrideUserMetadata(newMetadata).build()); // ensure copied blob matches original AzureBlob getBlob = getApi().getBlob(privateContainer, "to"); assertEquals(ByteStreams2.toByteArrayAndClose(getBlob.getPayload().openStream()), byteSource.read()); assertThat(getBlob.getProperties().getMetadata()).isEqualTo(newMetadata); }
@Test(timeOut = 5 * 60 * 1000, dependsOnMethods = { "testCreateContainer" }) public void testCopyBlobIfNoneMatch() throws Exception { ByteSource byteSource = TestUtils.randomByteSource().slice(0, 1024); // create blob AzureBlob object = getApi().newBlob(); object.getProperties().setName("from"); object.setPayload(byteSource.read()); String eTag = getApi().putBlob(privateContainer, object); String fakeETag = "0x8CEB669D794AFE2"; URI copySource = view.getSigner().signGetBlob(privateContainer, "from").getEndpoint(); // failure case try { getApi().copyBlob(copySource, privateContainer, "to-if-none-match", CopyBlobOptions.builder().ifNoneMatch(eTag).build()); failBecauseExceptionWasNotThrown(AzureStorageResponseException.class); } catch (AzureStorageResponseException asre) { assertThat(asre.getResponse().getStatusCode()).as("status code").isEqualTo(412); } // success case getApi().copyBlob(copySource, privateContainer, "to-if-none-match", CopyBlobOptions.builder().ifNoneMatch(fakeETag).build()); AzureBlob getBlob = getApi().getBlob(privateContainer, "to-if-none-match"); assertEquals(ByteStreams2.toByteArrayAndClose(getBlob.getPayload().openStream()), byteSource.read()); }
public void testPutBlob() throws Exception { Invokable<?, ?> method = method(AzureBlobClient.class, "putBlob", String.class, AzureBlob.class); String payload = "payload"; String cacheControl = "max-age=3600"; AzureBlob object = getAzureBlobClient().newBlob(); object.setPayload(payload); object.getProperties().setName("blob"); object.getProperties().getContentMetadata().setCacheControl(cacheControl); object.getProperties().getContentMetadata().setContentLength(7L); GeneratedHttpRequest request = processor.createRequest(method, ImmutableList.<Object> of("container", object)); assertRequestLineEquals(request, "PUT https://identity.blob.core.windows.net/container/blob HTTP/1.1"); assertNonPayloadHeadersEqual(request, "Expect: 100-continue\n" + "x-ms-blob-cache-control: " + cacheControl + "\n" + "x-ms-blob-type: BlockBlob\n" + "x-ms-version: 2017-04-17\n"); assertPayloadEquals(request, payload, "application/unknown", false); assertResponseParserClassEquals(method, request, ParseETagHeader.class); assertSaxResponseParserClassEquals(method, null); assertFallbackClassEquals(method, null); }