@Override public HttpRequest signPutBlob(String container, Blob blob, long timeInSeconds) { return sign("PUT", container, blob.getMetadata().getName(), GetOptions.NONE, timestamp.get() + timeInSeconds, blob.getMetadata().getContentMetadata().getContentType()); }
public Blob apply(String key, Blob blob) { blob.getMetadata().setName(prefixer.apply(key)); return blob; } }
private static void convertUserMetadataKeysToLowercase(MutableBlobMetadata metadata) { Map<String, String> lowerCaseUserMetadata = Maps.newHashMap(); for (Map.Entry<String, String> entry : metadata.getUserMetadata().entrySet()) { lowerCaseUserMetadata.put(entry.getKey().toLowerCase(), entry.getValue()); } metadata.setUserMetadata(lowerCaseUserMetadata); } }
@Test(groups = { "integration", "live" }) public void testPutObjectStream() throws InterruptedException, IOException, ExecutionException { PayloadBlobBuilder blobBuilder = view.getBlobStore().blobBuilder("streaming").payload( new StreamingPayload(new WriteTo() { @Override public void writeTo(OutputStream outstream) throws IOException { outstream.write("foo".getBytes()); } })); addContentMetadata(blobBuilder); Blob blob = blobBuilder.build(); String container = getContainerName(); try { assertNotNull(view.getBlobStore().putBlob(container, blob)); blob = view.getBlobStore().getBlob(container, blob.getMetadata().getName()); String returnedString = getContentAsStringOrNullAndClose(blob); assertEquals(returnedString, "foo"); validateMetadata(blob.getMetadata(), container, blob.getMetadata().getName()); checkContentMetadata(blob); PageSet<? extends StorageMetadata> set = view.getBlobStore().list(container); assert set.size() == 1 : set; } finally { returnContainer(container); } }
@Test public void testNoNameChange() { MutableBlobMetadata md = blobMetadataProvider.get(); md.setName("dir"); md.setId("dir"); StorageMetadata rd = parser.apply(md); assertEquals(rd.getName(), "dir"); assertEquals(rd.getProviderId(), "dir"); assertEquals(rd.getType(), StorageType.RELATIVE_PATH); } }
@Test(dataProvider = "ignoreOnMacOSX") public void testGetDirectoryBlob() throws IOException { String blobKey = TestUtils.createRandomBlobKey("a/b/c/directory-", "/"); Blob blob = storageStrategy.newBlob(blobKey); storageStrategy.putBlob(CONTAINER_NAME, blob); assertTrue(storageStrategy.blobExists(CONTAINER_NAME, blobKey)); blob = storageStrategy.getBlob(CONTAINER_NAME, blobKey); assertEquals(blob.getMetadata().getName(), blobKey, "Created blob name is different"); assertTrue(!storageStrategy.blobExists(CONTAINER_NAME, blobKey.substring(0, blobKey.length() - 1))); }
@Test public void testCorrect() throws SecurityException, NoSuchMethodException { Blob blob = BLOB_FACTORY.create(null); blob.getMetadata().setName("foo"); assertEquals(fn.apply(blob), "foo"); }
@Test public void testCorrect() throws SecurityException, NoSuchMethodException { HttpRequest request = HttpRequest.builder().method("GET").endpoint("http://momma").build(); BindUserMetadataToHeadersWithPrefix binder = new BindUserMetadataToHeadersWithPrefix( new BindMapToHeadersWithPrefix("prefix:")); Blob blob = ContextBuilder.newBuilder("transient").buildInjector().getInstance(Blob.Factory.class).create(null); blob.getMetadata().setUserMetadata(ImmutableMap.of("imageName", "foo", "serverId", "2")); assertEquals( binder.bindToRequest(request, blob), HttpRequest.builder().method("GET").endpoint("http://momma") .addHeader("prefix:imagename", "foo") .addHeader("prefix:serverid", "2").build()); }
@Override @Test(groups = { "integration", "live" }, dataProvider = "gcsPutTest") public void testPutObject(String name, String type, Object content, Object realObject) throws InterruptedException, IOException { PayloadBlobBuilder blobBuilder = view.getBlobStore().blobBuilder(name).payload(Payloads.newPayload(content)) .contentType(type); addContentMetadata(blobBuilder); Blob blob = blobBuilder.build(); blob.getPayload().setContentMetadata(blob.getMetadata().getContentMetadata()); String container = getContainerName(); try { assertNotNull(view.getBlobStore().putBlob(container, blob)); blob = view.getBlobStore().getBlob(container, blob.getMetadata().getName()); validateMetadata(blob.getMetadata(), container, name); checkContentMetadata(blob); String returnedString = getContentAsStringOrNullAndClose(blob); assertEquals(returnedString, realObject); PageSet<? extends StorageMetadata> set = view.getBlobStore().list(container); assertThat(set).isNotEmpty(); } finally { returnContainer(container); } }
@Test(dataProvider = "ignoreOnMacOSX") public void testOverwriteBlobMetadata() throws Exception { String blobKey = TestUtils.createRandomBlobKey("writePayload-", ".img"); // write blob Blob blob = new BlobBuilderImpl() .name(blobKey) .payload(randomByteSource().slice(0, 1024)) .userMetadata(ImmutableMap.of("key1", "value1")) .build(); storageStrategy.putBlob(CONTAINER_NAME, blob); blob = storageStrategy.getBlob(CONTAINER_NAME, blobKey); assertEquals(blob.getMetadata().getUserMetadata().get("key1"), "value1"); // overwrite blob blob = new BlobBuilderImpl() .name(blobKey) .payload(randomByteSource().slice(0, 1024)) // no metadata .build(); Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS); storageStrategy.putBlob(CONTAINER_NAME, blob); blob = storageStrategy.getBlob(CONTAINER_NAME, blobKey); assertFalse(blob.getMetadata().getUserMetadata().containsKey("key1")); }
public void testSignPutBlob() throws ArrayIndexOutOfBoundsException, SecurityException, IllegalArgumentException, NoSuchMethodException, IOException { Blob blob = blobFactory.create(null); blob.getMetadata().setName("name"); blob.setPayload(""); blob.getPayload().getContentMetadata().setContentLength(2l); blob.getPayload().getContentMetadata().setContentMD5(new byte[] { 0, 2, 4, 8 }); blob.getPayload().getContentMetadata().setContentType("text/plain"); blob.getPayload().getContentMetadata().setExpires(new Date(1000)); HttpRequest request = signer.signPutBlob("container", blob); assertRequestLineEquals(request, "PUT https://identity.blob.core.windows.net/container/name HTTP/1.1"); assertNonPayloadHeadersEqual( request, "Authorization: SharedKeyLite identity:ssvK6ZB8GMqRcp1lBpY9vIzbLKL9Goxh7wZ2YhfHNzQ=\nDate: Thu, 05 Jun 2008 16:38:19 GMT\nExpect: 100-continue\nx-ms-blob-type: BlockBlob\nx-ms-version: 2009-09-19\n"); assertContentHeadersEqual(request, "text/plain", null, null, null, 2L, new byte[] { 0, 2, 4, 8 }, new Date(1000)); assertEquals(request.getFilters().size(), 0); }
@Test public void testSignPutUrl() throws Exception { String name = "hello"; String text = "fooooooooooooooooooooooo"; Blob blob = view.getBlobStore().blobBuilder(name).payload(text).contentType("image/png").build(); String container = getContainerName(); try { HttpRequest request = view.getSigner().signPutBlob(container, blob); assertEquals(request.getFilters().size(), 0); Strings2.toStringAndClose(view.utils().http().invoke(request).getPayload().openStream()); blob = view.getBlobStore().getBlob(container, name); assertThat(blob.getMetadata().getContentMetadata().getContentType()).isEqualTo("image/png"); } finally { returnContainer(container); } }
@Test(dataProvider = "ignoreOnMacOSX") public void testGetBlobContentType_AutoDetect_False() throws IOException { String blobKey = TestUtils.createRandomBlobKey("file-", ".jpg"); TestUtils.createBlobsInContainer(CONTAINER_NAME, blobKey); Blob blob = storageStrategy.getBlob(CONTAINER_NAME, blobKey); assertEquals(blob.getMetadata().getContentMetadata().getContentType(), null); }
@Test public void testAddUserMetadataTo() { HttpResponse from = HttpResponse.builder() .statusCode(200).message("ok") .payload("") .addHeader("prefix" + "key", "value").build(); MutableBlobMetadata metadata = blobMetadataProvider.get(); parser.addUserMetadataTo(from, metadata); assertEquals(metadata.getUserMetadata().get("key"), "value"); } }
@Test(groups = { "integration", "live" }) public void testMetadata() throws InterruptedException, IOException { String name = "hello"; // NOTE all metadata in jclouds comes out as lowercase, in an effort to // normalize the // providers. Blob blob = view.getBlobStore().blobBuilder(name).userMetadata(ImmutableMap.of("Adrian", "powderpuff")) .payload(TEST_STRING).contentType(MediaType.TEXT_PLAIN).calculateMD5().build(); String container = getContainerName(); try { assertNull(view.getBlobStore().blobMetadata(container, "powderpuff")); addBlobToContainer(container, blob); Blob newObject = validateContent(container, name); BlobMetadata metadata = newObject.getMetadata(); validateMetadata(metadata); validateMetadata(metadata, container, name); validateMetadata(view.getBlobStore().blobMetadata(container, name)); // write 2 items with the same name to ensure that provider doesn't // accept dupes blob.getMetadata().getUserMetadata().put("Adrian", "wonderpuff"); blob.getMetadata().getUserMetadata().put("Adrian", "powderpuff"); addBlobToContainer(container, blob); validateMetadata(view.getBlobStore().blobMetadata(container, name)); } finally { returnContainer(container); } }
public void testNewBlob() { String blobKey; Blob newBlob; blobKey = TestUtils.createRandomBlobKey("blobtest-", ".txt"); newBlob = storageStrategy.newBlob(blobKey); assertNotNull(newBlob, "Created blob was null"); assertNotNull(newBlob.getMetadata(), "Created blob metadata were null"); assertEquals(newBlob.getMetadata().getName(), blobKey, "Created blob name is different"); blobKey = TestUtils.createRandomBlobKey("blobtest-", ""); newBlob = storageStrategy.newBlob(blobKey); assertEquals(newBlob.getMetadata().getName(), blobKey, "Created blob name is different"); blobKey = TestUtils.createRandomBlobKey("asd" + FS + "asd" + FS + "asdasd" + FS + "afadsf-", ""); newBlob = storageStrategy.newBlob(blobKey); assertEquals(newBlob.getMetadata().getName(), blobKey, "Created blob name is different"); }
@Test(groups = { "integration", "live" }) public void testPut() throws IOException, InterruptedException { String bucketName = getContainerName(); try { Map<String, Blob> map = createMap(view, bucketName); Blob blob = view.getBlobStore().blobBuilder("one").payload(Strings2.toInputStream("apple")).calculateMD5() .build(); Blob old = map.put(blob.getMetadata().getName(), blob); getOneReturnsAppleAndOldValueIsNull(map, old); blob.setPayload(Strings2.toInputStream("bear")); Payloads.calculateMD5(blob); Blob apple = map.put(blob.getMetadata().getName(), blob); getOneReturnsBearAndOldValueIsApple(map, apple); } finally { returnContainer(bucketName); } }
private Blob createUpdatedCopyOfBlobInContainer(String containerName, Blob in, byte[] input, HashCode contentMd5) { checkNotNull(containerName, "containerName"); checkNotNull(in, "blob"); checkNotNull(input, "input"); checkNotNull(contentMd5, "contentMd5"); Payload payload = Payloads.newByteSourcePayload(ByteSource.wrap(input)); MutableContentMetadata oldMd = in.getPayload().getContentMetadata(); HttpUtils.copy(oldMd, payload.getContentMetadata()); payload.getContentMetadata().setContentMD5(contentMd5); payload.getContentMetadata().setContentLength((long) input.length); Blob blob = blobFactory.create(BlobStoreUtils.copy(in.getMetadata())); blob.setPayload(payload); blob.getMetadata().setContainer(containerName); blob.getMetadata().setLastModified(new Date()); blob.getMetadata().setSize((long) input.length); String eTag = base16().lowerCase().encode(contentMd5.asBytes()); blob.getMetadata().setETag(eTag); // Set HTTP headers to match metadata blob.getAllHeaders().replaceValues(HttpHeaders.LAST_MODIFIED, ImmutableList.of(dateService.rfc822DateFormat(blob.getMetadata().getLastModified()))); blob.getAllHeaders().replaceValues(HttpHeaders.ETAG, ImmutableList.of(eTag)); copyPayloadHeadersToBlob(payload, blob); blob.getAllHeaders().putAll(Multimaps.forMap(blob.getMetadata().getUserMetadata())); return blob; }
@Override protected void checkContentDisposition(Blob blob, String contentDisposition) { assert blob.getPayload().getContentMetadata().getContentDisposition() == null; assert blob.getMetadata().getContentMetadata().getContentDisposition() == null; } }