/** * Licensed to jclouds, Inc. (jclouds) under one or more * contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. jclouds licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.jclouds.blobstore; import static com.google.common.base.Preconditions.checkNotNull; import static org.testng.Assert.assertEquals; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.util.List; import java.util.Map; import java.util.Set; import java.util.Map.Entry; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeoutException; import org.jclouds.logging.log4j.config.Log4JLoggingModule; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeClass; import org.testng.annotations.Optional; import org.testng.annotations.Parameters; import org.testng.annotations.Test; import com.google.common.base.Charsets; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.google.common.io.Files; /** * * @author Adrian Cole */ @Test(groups = "live", sequential = true) public class GetPathLiveTest { public static final String PROPERTY_GETPATH_CONTAINER = "jclouds.getpath.container"; public static final String PROPERTY_GETPATH_PATH = "jclouds.getpath.path"; private Set<BlobStoreContext> contexts; private String container; private String path; private String tmpDirectory; protected static final String XML_STRING_FORMAT = "<apples><apple name=\"%s\"></apple> </apples>"; protected Map<String, String> fiveStrings = ImmutableMap.of("one.txt", String.format( XML_STRING_FORMAT, "apple"), "two.txt", String.format(XML_STRING_FORMAT, "bear"), "three.txt", String.format(XML_STRING_FORMAT, "candy"), "four.txt", String.format( XML_STRING_FORMAT, "dogma"), "five.txt", String.format(XML_STRING_FORMAT, "emma")); List<String> urisToTest = Lists.newArrayList(); @BeforeClass(groups = { "integration", "live" }) void clearAndCreateContainers() throws InterruptedException, ExecutionException, TimeoutException { container = checkNotNull(System.getProperty(PROPERTY_GETPATH_CONTAINER)); path = checkNotNull(System.getProperty(PROPERTY_GETPATH_PATH)); contexts = Sets.newLinkedHashSet(); BlobStoreContextFactory factory = new BlobStoreContextFactory(); for (String provider : new String[] { "s3", "cloudfiles", "azureblob" }) { String identity = checkNotNull(System.getProperty("test.identity." + provider), "test.identity." + provider); String credential = checkNotNull( System.getProperty("test.credential." + provider), "test.credential." + provider); contexts.add(factory.createContext(provider, identity, credential, ImmutableSet .of(new Log4JLoggingModule()))); urisToTest.add(String.format("blobstore://%s:%s@%s/%s/%s", identity, credential, provider, container, path)); } boolean deleted = false; for (BlobStoreContext context : contexts) { if (context.getBlobStore().containerExists(container)) { System.err.printf("deleting container %s at %s%n", container, context .getProviderSpecificContext().getEndpoint()); context.getBlobStore().deleteContainer(container); deleted = true; } } if (deleted) { System.err.println("sleeping 30 seconds to allow containers to clear"); Thread.sleep(30000); } for (BlobStoreContext context : contexts) { System.err.printf("creating container %s at %s%n", container, context .getProviderSpecificContext().getEndpoint()); context.getBlobStore().createContainerInLocation(null, container); } if (deleted) { System.err.println("sleeping 5 seconds to allow containers to create"); Thread.sleep(30000); } for (BlobStoreContext context : contexts) { System.err.printf("creating directory %s in container %s at %s%n", container, path, context.getProviderSpecificContext().getEndpoint()); context.getBlobStore().createDirectory(container, path); } } @BeforeClass(dependsOnMethods = "clearAndCreateContainers", groups = { "integration", "live" }) protected void addFiles() { for (BlobStoreContext context : contexts) { System.err.printf("adding files to container %s at %s%n", container, context .getProviderSpecificContext().getEndpoint()); context.createInputStreamMap(container + "/" + path).putAllStrings(fiveStrings); } } @BeforeClass(groups = { "integration", "live" }) @Parameters( { "basedir" }) protected void setUpTempDir(@Optional String basedir) throws InterruptedException, ExecutionException, FileNotFoundException, IOException, TimeoutException { if (basedir == null) { basedir = System.getProperty("java.io.tmpdir"); } tmpDirectory = basedir + File.separator + "target" + File.separator + "testFiles" + File.separator + getClass().getSimpleName(); new File(tmpDirectory).mkdirs(); } @Test public void testAllContainers() throws IOException, InterruptedException { for (String uriKey : urisToTest) { System.out.println("storing at context: " + uriKey); new File(tmpDirectory).delete(); new File(tmpDirectory).mkdirs(); GetPath.main(uriKey, tmpDirectory); for (Entry<String, String> entry : fiveStrings.entrySet()) { assertEquals(Files.toString(new File(tmpDirectory, entry.getKey()), Charsets.UTF_8), entry.getValue()); } } } @AfterTest public void closeContexts() { for (BlobStoreContext context : contexts) { context.close(); } } }