/** * 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.filesystem.utils; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertTrue; import java.io.File; import java.io.IOException; import java.util.Iterator; import java.util.Random; import java.util.Set; import java.util.UUID; import org.jclouds.filesystem.util.Utils; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterators; import com.google.common.collect.Sets; import com.google.common.io.ByteStreams; import com.google.common.io.Files; /** * Utility class for test * * @author Alfredo "Rainbowbreeze" Morresi */ public class TestUtils { private static final String TARGET_RESOURCE_DIR = "." + File.separator + "target" + File.separator + "resources" + File.separator; /** All the files available for the tests */ private static final Iterable<File> IMAGE_RESOURCES = ImmutableList.of( new File(TARGET_RESOURCE_DIR + "image1.jpg"), new File(TARGET_RESOURCE_DIR + "image2.jpg"), new File(TARGET_RESOURCE_DIR + "image3.jpg"), new File(TARGET_RESOURCE_DIR + "image4.jpg")); public static final String TARGET_BASE_DIR = "." + File.separator + "target" + File.separator + "basedir" + File.separator; private static final Iterator<File> IMAGE_RESOURCES_ITERATOR = Iterators.cycle(IMAGE_RESOURCES); /** * Generate a random blob key simple name (with no path in the key) * @return */ public static String createRandomBlobKey() { return createRandomBlobKey("", ""); } /** * Generate a random blob key simple name (with no path in the key) * @param prefix a prefix to the id, default "testkey-" * @param extension a extension for the blob key, default ".jpg" * @return */ public static String createRandomBlobKey(String prefix, String extension) { String okPrefix = (null != prefix && !"".equals(prefix)) ? prefix : "testkey-"; String okExtension = (null != extension && !"".equals(extension)) ? extension : ".jpg"; return okPrefix + UUID.randomUUID().toString() + okExtension; } /** * Creates blobs in container * @param containerName * @param blobNames * @return a Set with all blobs created * @throws IOException */ public static Set<String> createBlobsInContainer(String containerName, String... blobNames) throws IOException { Set<String> blobNamesCreatedInContainer = Sets.newHashSet(); for (String blobName : blobNames) { createBlobAsFile(containerName, blobName, getImageForBlobPayload()); blobNamesCreatedInContainer.add(blobName); } return blobNamesCreatedInContainer; } /** * Creates a container object creating a directory * @param containerName * @throws IOException */ public static void createContainerAsDirectory(String containerName) throws IOException { File file = new File(TARGET_BASE_DIR, containerName); if (!file.mkdirs()) { throw new IOException("Could not mkdir: " + file); }; } /** * * @param directoryFullPath the directory path * @return */ public static boolean directoryExists(String directoryFullPath) { File file = new File(directoryFullPath); boolean exists = file.exists() || file.isDirectory(); return exists; } /** * * @param directoryFullPath * @param checkResult * @param expectedResult * @return */ public static boolean directoryExists(String directoryFullPath, boolean expectedResult) { boolean exists = directoryExists(directoryFullPath); if (expectedResult) { assertTrue(exists, "Directory " + directoryFullPath + " doens't exists"); } else { assertFalse(exists, "Directory " + directoryFullPath + " still exists"); } return exists; } public static boolean fileExists(String fileFullName) { File file = new File(fileFullName); boolean exists = file.exists() || file.isFile(); return exists; } /** * * @param fileFullName * @param checkResult * @param expectedResult * @return */ public static boolean fileExists(String fileFullName, boolean expectedResult) { boolean exists = fileExists(fileFullName); if (expectedResult) { assertTrue(exists, "File " + fileFullName + " doens't exists"); } else { assertFalse(exists, "File " + fileFullName + " still exists"); } return exists; } /** * Empty a directory * * @param directoryName * @throws IOException */ public static void cleanDirectoryContent(String directoryName) throws IOException { File parentDirectory = new File(directoryName); File[] children = parentDirectory.listFiles(); if (null != children) { for (File child : children) { Utils.deleteRecursively(child); } } } /** * Create a blob object from a given file * @param source * @param containerName * @param blobKey * @throws IOException */ public static void createBlobAsFile(String containerName, String blobKey, File source) throws IOException { String filePath; if (blobKey.startsWith("\\")) filePath = containerName + blobKey; else filePath = containerName + File.separator + blobKey; File file = new File(TARGET_BASE_DIR + filePath); Files.createParentDirs(file); Files.copy(source, file); } /** * Returns a pointer to an image, cycling between the ones that are available * @return */ public static File getImageForBlobPayload() { return IMAGE_RESOURCES_ITERATOR.next(); } /** Create resources used by tests. */ public static void createResources() throws IOException { File resourceDir = new File(TestUtils.TARGET_RESOURCE_DIR); if (resourceDir.exists()) { Utils.deleteRecursively(resourceDir); } if (!resourceDir.mkdir()) { throw new IOException("Could not create: " + TARGET_RESOURCE_DIR); } Random random = new Random(); for (File file : IMAGE_RESOURCES) { byte[] buffer = new byte[random.nextInt(2 * 1024 * 1024)]; random.nextBytes(buffer); Files.copy(ByteStreams.newInputStreamSupplier(buffer), file); } } }