You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ad...@apache.org on 2014/10/05 22:18:23 UTC

[2/3] git commit: JCLOUDS-40 Remove AsyncBlobStore references from filesystem api

JCLOUDS-40 Remove AsyncBlobStore references from filesystem api


Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/a22a7252
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/a22a7252
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/a22a7252

Branch: refs/heads/master
Commit: a22a72529332a2d8620c21c0aaa7ae39a435b2fb
Parents: a4e3c1a
Author: Adrian Cole <ad...@gmail.com>
Authored: Sun Oct 5 11:41:36 2014 -0700
Committer: Adrian Cole <ad...@gmail.com>
Committed: Sun Oct 5 13:18:02 2014 -0700

----------------------------------------------------------------------
 .../util/internal/FileSystemBlobUtilsImpl.java  |   2 +-
 .../FilesystemAsyncBlobStoreTest.java           | 859 -------------------
 .../filesystem/FilesystemBlobStoreTest.java     | 817 ++++++++++++++++++
 .../src/test/resources/logging.properties       |   2 -
 4 files changed, 818 insertions(+), 862 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/a22a7252/apis/filesystem/src/main/java/org/jclouds/filesystem/util/internal/FileSystemBlobUtilsImpl.java
----------------------------------------------------------------------
diff --git a/apis/filesystem/src/main/java/org/jclouds/filesystem/util/internal/FileSystemBlobUtilsImpl.java b/apis/filesystem/src/main/java/org/jclouds/filesystem/util/internal/FileSystemBlobUtilsImpl.java
index 3dfcd31..2dbd2ad 100644
--- a/apis/filesystem/src/main/java/org/jclouds/filesystem/util/internal/FileSystemBlobUtilsImpl.java
+++ b/apis/filesystem/src/main/java/org/jclouds/filesystem/util/internal/FileSystemBlobUtilsImpl.java
@@ -30,7 +30,7 @@ import com.google.inject.Inject;
 
 /**
  * Implements the {@link BlobUtils} interfaced and act as a bridge to
- * {@link LocalStorageStrategy} when used inside {@link AsyncBlobStore}
+ * {@link LocalStorageStrategy} when used inside {@link BlobStore}
  */
 public class FileSystemBlobUtilsImpl implements BlobUtils {
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/a22a7252/apis/filesystem/src/test/java/org/jclouds/filesystem/FilesystemAsyncBlobStoreTest.java
----------------------------------------------------------------------
diff --git a/apis/filesystem/src/test/java/org/jclouds/filesystem/FilesystemAsyncBlobStoreTest.java b/apis/filesystem/src/test/java/org/jclouds/filesystem/FilesystemAsyncBlobStoreTest.java
deleted file mode 100644
index 3129241..0000000
--- a/apis/filesystem/src/test/java/org/jclouds/filesystem/FilesystemAsyncBlobStoreTest.java
+++ /dev/null
@@ -1,859 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF 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;
-
-import static com.google.common.io.BaseEncoding.base16;
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertNotSame;
-import static org.testng.Assert.assertNull;
-import static org.testng.Assert.assertTrue;
-import static org.testng.Assert.fail;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URI;
-import java.util.Iterator;
-import java.util.Properties;
-import java.util.Set;
-
-import org.jclouds.ContextBuilder;
-import org.jclouds.blobstore.BlobRequestSigner;
-import org.jclouds.blobstore.BlobStore;
-import org.jclouds.blobstore.BlobStoreContext;
-import org.jclouds.blobstore.ContainerNotFoundException;
-import org.jclouds.blobstore.domain.Blob;
-import org.jclouds.blobstore.domain.BlobMetadata;
-import org.jclouds.blobstore.domain.MutableBlobMetadata;
-import org.jclouds.blobstore.domain.PageSet;
-import org.jclouds.blobstore.domain.StorageMetadata;
-import org.jclouds.blobstore.domain.StorageType;
-import org.jclouds.blobstore.options.GetOptions;
-import org.jclouds.blobstore.options.ListContainerOptions;
-import org.jclouds.filesystem.reference.FilesystemConstants;
-import org.jclouds.filesystem.util.Utils;
-import org.jclouds.filesystem.utils.TestUtils;
-import org.jclouds.http.HttpRequest;
-import org.jclouds.io.ByteStreams2;
-import org.jclouds.io.Payload;
-import org.jclouds.io.payloads.PhantomPayload;
-import org.jclouds.io.payloads.StringPayload;
-import org.jclouds.util.Closeables2;
-import org.jclouds.util.Strings2;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import com.google.common.collect.Sets;
-import com.google.common.io.ByteSource;
-import com.google.common.io.Files;
-import com.google.inject.CreationException;
-
-/**
- * Test class for {@link FilesystemAsyncBlobStore} class
- */
-@Test(groups = "unit", testName = "filesystem.FilesystemAsyncBlobStoreTest", singleThreaded = true)
-public class FilesystemAsyncBlobStoreTest {
-
-    private static final String CONTAINER_NAME = "fun-blobstore-test";
-    private static final String TARGET_CONTAINER_NAME = TestUtils.TARGET_BASE_DIR + CONTAINER_NAME;
-    private static final String LOGGING_CONFIG_KEY = "java.util.logging.config.file";
-    private static final String LOGGING_CONFIG_VALUE = "src/main/resources/logging.properties";
-
-    private static final String PROVIDER = "filesystem";
-
-    static {
-        System.setProperty(LOGGING_CONFIG_KEY, LOGGING_CONFIG_VALUE);
-    }
-
-    private BlobStoreContext context = null;
-    private BlobStore blobStore = null;
-
-    @BeforeMethod
-    protected void setUp() throws Exception {
-        // create context for filesystem container
-        Properties prop = new Properties();
-        prop.setProperty(FilesystemConstants.PROPERTY_BASEDIR, TestUtils.TARGET_BASE_DIR);
-        context = ContextBuilder.newBuilder(PROVIDER).overrides(prop).build(BlobStoreContext.class);
-        // create a container in the default location
-        blobStore = context.getBlobStore();
-        new File(TestUtils.TARGET_BASE_DIR).mkdir();
-        TestUtils.createResources();
-    }
-
-    @AfterMethod
-    protected void tearDown() throws IOException {
-        context.close();
-        Utils.deleteRecursively(new File(TestUtils.TARGET_BASE_DIR));
-    }
-
-    /**
-     * Checks if context parameters are managed in the correct way
-     */
-    public void testParameters() {
-        // no base directory declared in properties
-        try {
-            Properties props = new Properties();
-            context = ContextBuilder.newBuilder(PROVIDER).overrides(props).build(BlobStoreContext.class);
-            fail("No error if base directory is not specified");
-        } catch (CreationException e) {
-        }
-
-        // no base directory declared in properties
-        try {
-            Properties props = new Properties();
-            props.setProperty(FilesystemConstants.PROPERTY_BASEDIR, null);
-            context = ContextBuilder.newBuilder(PROVIDER).overrides(props).build(BlobStoreContext.class);
-            fail("No error if base directory is null in the option");
-        } catch (NullPointerException e) {
-        }
-    }
-
-    /**
-     * Test of list method of the root context
-     */
-    public void testList_Root() throws IOException {
-        PageSet<? extends StorageMetadata> containersRetrieved;
-        Set<String> containersCreated = Sets.newHashSet();
-
-        // Testing list with no containers
-        containersRetrieved = blobStore.list();
-        assertTrue(containersRetrieved.isEmpty(), "List operation returns a not empty set of container");
-
-        // Testing list with some containers
-        String[] containerNames = {"34343", "aaaa", "bbbbb"};
-        containersCreated = Sets.newHashSet();
-        for (String containerName : containerNames) {
-            blobStore.createContainerInLocation(null, containerName);
-            containersCreated.add(containerName);
-        }
-
-        containersRetrieved = blobStore.list();
-        assertEquals(containersCreated.size(), containersRetrieved.size(), "Different numbers of container");
-
-        for (StorageMetadata data : containersRetrieved) {
-            String containerName = data.getName();
-            if (!containersCreated.remove(containerName)) {
-                fail("Container list contains unexpected value [" + containerName + "]");
-            }
-        }
-        assertTrue(containersCreated.isEmpty(), "List operation doesn't return all values.");
-
-        for (String containerName : containerNames) {
-            // delete all creaded containers
-            blobStore.deleteContainer(containerName);
-        }
-        containersRetrieved = blobStore.list();
-        assertTrue(containersRetrieved.isEmpty(), "List operation returns a not empty set of container");
-    }
-
-    /**
-     * Test of list method, of class FilesystemAsyncBlobStore.
-     */
-    public void testList_NoOptionSingleContainer() throws IOException {
-        blobStore.createContainerInLocation(null, CONTAINER_NAME);
-        // Testing list for an empty container
-        checkForContainerContent(CONTAINER_NAME, null);
-
-        // creates blobs in first container
-        Set<String> blobsExpected = TestUtils.createBlobsInContainer(CONTAINER_NAME, "bbb" + File.separator + "ccc"
-                + File.separator + "ddd" + File.separator + "1234.jpg", "4rrr.jpg", "rrr" + File.separator + "sss"
-                + File.separator + "788.jpg", "xdc" + File.separator + "wert.kpg");
-
-        checkForContainerContent(CONTAINER_NAME, blobsExpected);
-    }
-
-    public void testList_NotExistingContainer() {
-        // Testing list for a not existing container
-        try {
-            blobStore.list(CONTAINER_NAME);
-            fail("Found a not existing container");
-        } catch (ContainerNotFoundException e) {
-            // ok if arriver here
-        }
-    }
-
-    /**
-     * Test of list method, of class FilesystemAsyncBlobStore.
-     */
-    public void testList_NoOptionDoubleContainer() throws IOException {
-        final String CONTAINER_NAME2 = "container2";
-
-        // create first container
-        blobStore.createContainerInLocation(null, CONTAINER_NAME);
-        // checks for empty container
-        checkForContainerContent(CONTAINER_NAME, null);
-
-        // create second container
-        blobStore.createContainerInLocation(null, CONTAINER_NAME2);
-        // checks for empty
-        checkForContainerContent(CONTAINER_NAME2, null);
-
-        // creates blobs in first container
-
-        Set<String> blobNamesCreatedInContainer1 = TestUtils.createBlobsInContainer(CONTAINER_NAME, "bbb"
-                + File.separator + "ccc" + File.separator + "ddd" + File.separator + "1234.jpg",
-                TestUtils.createRandomBlobKey(), "rrr" + File.separator + "sss" + File.separator + "788.jpg", "xdc"
-                + File.separator + "wert.kpg");
-
-        // creates blobs in second container
-        blobStore.createContainerInLocation(null, CONTAINER_NAME2);
-        Set<String> blobNamesCreatedInContainer2 = TestUtils.createBlobsInContainer(CONTAINER_NAME2, "asd"
-                + File.separator + "bbb" + File.separator + "ccc" + File.separator + "ddd" + File.separator + "1234.jpg",
-                TestUtils.createRandomBlobKey(), "rrr" + File.separator + "sss" + File.separator + "788.jpg", "xdc"
-                + File.separator + "wert.kpg");
-
-        // test blobs in first container
-        checkForContainerContent(CONTAINER_NAME, blobNamesCreatedInContainer1);
-        // test blobs in second container
-        checkForContainerContent(CONTAINER_NAME2, blobNamesCreatedInContainer2);
-    }
-
-    public void testList_Subdirectory() throws IOException {
-        blobStore.createContainerInLocation(null, CONTAINER_NAME);
-        // Testing list for an empty container
-        checkForContainerContent(CONTAINER_NAME, null);
-
-        // creates blobs in first container
-        Set<String> blobsExpected = TestUtils.createBlobsInContainer(CONTAINER_NAME, "bbb" + File.separator + "ccc"
-                + File.separator + "ddd" + File.separator + "1234.jpg", "4rrr.jpg", "rrr" + File.separator + "sss"
-                + File.separator + "788.jpg", "rrr" + File.separator + "wert.kpg");
-
-        // remove not expected values
-        blobsExpected.remove("bbb" + File.separator + "ccc" + File.separator + "ddd" + File.separator + "1234.jpg");
-        blobsExpected.remove("4rrr.jpg");
-
-        checkForContainerContent(CONTAINER_NAME, "rrr", blobsExpected);
-    }
-
-    /**
-     * TODO Should throws an exception?
-     */
-    public void testClearContainer_NotExistingContainer() {
-        blobStore.clearContainer(CONTAINER_NAME);
-    }
-
-    /**
-     * Integration test, because clearContainer is not redefined in
-     * {@link FilesystemAsyncBlobStore} class
-     */
-    public void testClearContainer_NoOptions() throws IOException {
-        final String CONTAINER_NAME2 = "containerToClear";
-
-        // create containers
-        blobStore.createContainerInLocation(null, CONTAINER_NAME);
-        blobStore.createContainerInLocation(null, CONTAINER_NAME2);
-
-        // creates blobs in first container
-        Set<String> blobNamesCreatedInContainer1 = TestUtils.createBlobsInContainer(CONTAINER_NAME, "bbb"
-                + File.separator + "ccc" + File.separator + "ddd" + File.separator + "1234.jpg",
-                TestUtils.createRandomBlobKey(), "rrr" + File.separator + "sss" + File.separator + "788.jpg", "xdc"
-                + File.separator + "wert.kpg");
-
-        // creates blobs in second container
-        blobStore.createContainerInLocation(null, CONTAINER_NAME2);
-        Set<String> blobNamesCreatedInContainer2 = TestUtils.createBlobsInContainer(CONTAINER_NAME2, "asd"
-                + File.separator + "bbb" + File.separator + "ccc" + File.separator + "ddd" + File.separator + "1234.jpg",
-                TestUtils.createRandomBlobKey(), "rrr" + File.separator + "sss" + File.separator + "788.jpg", "xdc"
-                + File.separator + "wert.kpg");
-
-        // test blobs in containers
-        checkForContainerContent(CONTAINER_NAME, blobNamesCreatedInContainer1);
-        checkForContainerContent(CONTAINER_NAME2, blobNamesCreatedInContainer2);
-
-        // delete blobs in first container
-        blobStore.clearContainer(CONTAINER_NAME);
-        checkForContainerContent(CONTAINER_NAME, null);
-        checkForContainerContent(CONTAINER_NAME2, blobNamesCreatedInContainer2);
-        // delete blobs in second container
-        blobStore.clearContainer(CONTAINER_NAME2);
-        checkForContainerContent(CONTAINER_NAME2, null);
-    }
-
-    /**
-     * Integration test, because countBlobs is not redefined in
-     * {@link FilesystemAsyncBlobStore} class
-     */
-    public void testCountBlobs_NotExistingContainer() {
-        blobStore.countBlobs(PROVIDER);
-    }
-
-    /**
-     * Integration test, because countBlobs is not redefined in
-     * {@link FilesystemAsyncBlobStore} class
-     */
-    public void testCountBlobs_NoOptionsEmptyContainer() {
-        blobStore.createContainerInLocation(null, CONTAINER_NAME);
-        blobStore.countBlobs(PROVIDER);
-    }
-
-    /**
-     * Integration test, because countBlobs is not redefined in
-     * {@link FilesystemAsyncBlobStore} class
-     */
-    public void testCountBlobs_NoOptions() {
-        blobStore.createContainerInLocation(null, CONTAINER_NAME);
-        blobStore.countBlobs(PROVIDER);
-    }
-
-    public void testRemoveBlob_SimpleBlobKey() throws IOException {
-        final String BLOB_KEY = TestUtils.createRandomBlobKey(null, ".txt");
-        boolean result;
-
-        blobStore.createContainerInLocation(null, CONTAINER_NAME);
-
-        // checks that blob doesn't exists
-        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY);
-        assertFalse(result, "Blob exists");
-
-        // create the blob
-        TestUtils.createBlobsInContainer(CONTAINER_NAME, BLOB_KEY);
-        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY);
-        assertTrue(result, "Blob exists");
-
-        // remove it
-        blobStore.removeBlob(CONTAINER_NAME, BLOB_KEY);
-        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY);
-        assertFalse(result, "Blob still exists");
-        TestUtils.fileExists(TARGET_CONTAINER_NAME + File.separator + BLOB_KEY, false);
-    }
-
-    public void testRemoveBlob_TwoSimpleBlobKeys() throws IOException {
-        final String BLOB_KEY1 = TestUtils.createRandomBlobKey(null, null);
-        final String BLOB_KEY2 = TestUtils.createRandomBlobKey(null, null);
-        boolean result;
-
-        // create the container and checks that blob doesn't exists
-        blobStore.createContainerInLocation(null, CONTAINER_NAME);
-        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY1);
-        assertFalse(result, "Blob1 exists");
-        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY2);
-        assertFalse(result, "Blob2 exists");
-
-        // create the blob
-        TestUtils.createBlobsInContainer(CONTAINER_NAME, BLOB_KEY1, BLOB_KEY2);
-        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY1);
-        assertTrue(result, "Blob " + BLOB_KEY1 + " doesn't exist");
-        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY2);
-        assertTrue(result, "Blob " + BLOB_KEY2 + " doesn't exist");
-
-        // remove first blob
-        blobStore.removeBlob(CONTAINER_NAME, BLOB_KEY1);
-        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY1);
-        assertFalse(result, "Blob1 still exists");
-        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY2);
-        assertTrue(result, "Blob2 doesn't exist");
-        TestUtils.fileExists(TARGET_CONTAINER_NAME + File.separator + BLOB_KEY1, false);
-        TestUtils.fileExists(TARGET_CONTAINER_NAME + File.separator + BLOB_KEY2, true);
-        // remove second blob
-        blobStore.removeBlob(CONTAINER_NAME, BLOB_KEY2);
-        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY2);
-        assertFalse(result, "Blob2 still exists");
-        TestUtils.fileExists(TARGET_CONTAINER_NAME + File.separator + BLOB_KEY2, false);
-    }
-
-    /**
-     * Test of removeBlob method, with only one blob with a complex path as key
-     */
-    @Test
-    public void testRemoveBlob_ComplexBlobKey() throws IOException {
-        final String BLOB_KEY = TestUtils.createRandomBlobKey("aa/bb/cc/dd/", null);
-        boolean result;
-
-        // checks that blob doesn't exists
-        blobStore.createContainerInLocation(null, CONTAINER_NAME);
-        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY);
-        assertFalse(result, "Blob exists");
-        TestUtils.fileExists(TARGET_CONTAINER_NAME + File.separator + BLOB_KEY, false);
-
-        // create the blob
-        TestUtils.createBlobsInContainer(CONTAINER_NAME, BLOB_KEY);
-        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY);
-        assertTrue(result, "Blob doesn't exist");
-
-        // remove it
-        blobStore.removeBlob(CONTAINER_NAME, BLOB_KEY);
-        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY);
-        assertFalse(result, "Blob still exists");
-        // file removed
-        TestUtils.fileExists(TARGET_CONTAINER_NAME + File.separator + BLOB_KEY, false);
-        // also the entire directory structure was removed
-        TestUtils.directoryExists(TARGET_CONTAINER_NAME + "/aa", false);
-    }
-
-    /**
-     * Test of removeBlob method, with two blobs with a complex path as key and
-     * when first blob is removed, not all of its key's path is removed, because
-     * it is shared with the second blob's key
-     */
-    @Test
-    public void testRemoveBlob_TwoComplexBlobKeys() throws IOException {
-        final String BLOB_KEY1 = TestUtils.createRandomBlobKey("aa/bb/cc/dd/", null);
-        final String BLOB_KEY2 = TestUtils.createRandomBlobKey("aa/bb/ee/ff/", null);
-        boolean result;
-
-        blobStore.createContainerInLocation(null, CONTAINER_NAME);
-
-        // checks that blob doesn't exist
-        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY1);
-        assertFalse(result, "Blob1 exists");
-        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY2);
-        assertFalse(result, "Blob2 exists");
-
-        // create the blobs
-        TestUtils.createBlobsInContainer(CONTAINER_NAME, BLOB_KEY1, BLOB_KEY2);
-        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY1);
-        assertTrue(result, "Blob " + BLOB_KEY1 + " doesn't exist");
-        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY2);
-        assertTrue(result, "Blob " + BLOB_KEY2 + " doesn't exist");
-
-        // remove first blob
-        blobStore.removeBlob(CONTAINER_NAME, BLOB_KEY1);
-        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY1);
-        assertFalse(result, "Blob still exists");
-        // first file deleted, not the second
-        TestUtils.fileExists(TARGET_CONTAINER_NAME + File.separator + BLOB_KEY1, false);
-        TestUtils.fileExists(TARGET_CONTAINER_NAME + File.separator + BLOB_KEY2, true);
-        // only partial directory structure was removed, because it shares a path
-        // with the second blob created
-        TestUtils.directoryExists(TARGET_CONTAINER_NAME + "/aa/bb/cc/dd", false);
-        TestUtils.directoryExists(TARGET_CONTAINER_NAME + "/aa/bb", true);
-        // remove second blob
-        blobStore.removeBlob(CONTAINER_NAME, BLOB_KEY2);
-        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY2);
-        assertFalse(result, "Blob still exists");
-        TestUtils.fileExists(TARGET_CONTAINER_NAME + File.separator + BLOB_KEY2, false);
-        // now all the directory structure is empty
-        TestUtils.directoryExists(TARGET_CONTAINER_NAME + "/aa", false);
-    }
-
-    /**
-     * Test of containerExists method, of class FilesystemAsyncBlobStore.
-     */
-    public void testContainerExists() throws IOException {
-        boolean result;
-
-        result = blobStore.containerExists(CONTAINER_NAME);
-        assertFalse(result, "Container exists");
-
-        // create container
-        TestUtils.createContainerAsDirectory(CONTAINER_NAME);
-
-        result = blobStore.containerExists(CONTAINER_NAME);
-        assertTrue(result, "Container doesn't exist");
-    }
-
-    /**
-     * Test of createContainerInLocation method, of class
-     * FilesystemAsyncBlobStore.
-     */
-    public void testCreateContainerInLocation() throws IOException {
-        final String CONTAINER_NAME2 = "funambol-test-2";
-        final String TARGET_CONTAINER_NAME2 = TestUtils.TARGET_BASE_DIR + CONTAINER_NAME2;
-
-        boolean result;
-
-        result = blobStore.containerExists(CONTAINER_NAME);
-        assertFalse(result, "Container exists");
-        result = blobStore.createContainerInLocation(null, CONTAINER_NAME);
-        assertTrue(result, "Container not created");
-        result = blobStore.containerExists(CONTAINER_NAME);
-        assertTrue(result, "Container doesn't exist");
-        TestUtils.directoryExists(TARGET_CONTAINER_NAME, true);
-
-        result = blobStore.containerExists(CONTAINER_NAME2);
-        assertFalse(result, "Container exists");
-        result = blobStore.createContainerInLocation(null, CONTAINER_NAME2);
-        assertTrue(result, "Container not created");
-        result = blobStore.containerExists(CONTAINER_NAME2);
-        assertTrue(result, "Container doesn't exist");
-        TestUtils.directoryExists(TestUtils.TARGET_BASE_DIR + CONTAINER_NAME2, true);
-    }
-
-    /**
-     * Test of putBlob method, of class FilesystemAsyncBlobStore. with a simple
-     * filename - no path in the filename, eg filename.jpg
-     */
-    public void testPutBlobSimpleName() {
-        blobStore.createContainerInLocation(null, CONTAINER_NAME);
-        putBlobAndCheckIt(TestUtils.createRandomBlobKey("putBlob-", ".jpg"));
-        putBlobAndCheckIt(TestUtils.createRandomBlobKey("putBlob-", ".jpg"));
-    }
-
-    /**
-     * Test of putBlob method with a complex key, with path in the filename, eg
-     * picture/filename.jpg
-     */
-    public void testPutBlobComplexName1() {
-        blobStore.createContainerInLocation(null, CONTAINER_NAME);
-        putBlobAndCheckIt(TestUtils.createRandomBlobKey("picture/putBlob-", ".jpg"));
-        putBlobAndCheckIt(TestUtils.createRandomBlobKey("video/putBlob-", ".jpg"));
-        putBlobAndCheckIt(TestUtils.createRandomBlobKey("putBlob-", ".jpg"));
-        putBlobAndCheckIt(TestUtils.createRandomBlobKey("video/putBlob-", ".jpg"));
-    }
-
-    /**
-     * Test of putBlob method with a complex key, with path in the filename, eg
-     * picture/filename.jpg
-     */
-    public void testPutBlobComplexName2() {
-        blobStore.createContainerInLocation(null, CONTAINER_NAME);
-        putBlobAndCheckIt(TestUtils.createRandomBlobKey("aa/bb/cc/dd/ee/putBlob-", ".jpg"));
-        putBlobAndCheckIt(TestUtils.createRandomBlobKey("aa/bb/cc/dd/ee/putBlob-", ".jpg"));
-        putBlobAndCheckIt(TestUtils.createRandomBlobKey("putBlob-", ".jpg"));
-    }
-
-    /**
-     * Test of blobExists method, of class FilesystemAsyncBlobStore.
-     */
-    public void testBlobExists() throws IOException {
-        boolean result;
-        String blobKey;
-
-        // when location doesn't exists
-        blobKey = TestUtils.createRandomBlobKey();
-        try {
-            blobStore.blobExists(CONTAINER_NAME, blobKey);
-            fail();
-        } catch (ContainerNotFoundException cnfe) {
-            // expected
-        }
-
-        // when location exists
-        blobStore.createContainerInLocation(null, CONTAINER_NAME);
-        result = blobStore.blobExists(CONTAINER_NAME, blobKey);
-        assertFalse(result, "Blob exists");
-
-        // create blob
-        TestUtils.createBlobAsFile(CONTAINER_NAME, blobKey, TestUtils.getImageForBlobPayload());
-        result = blobStore.blobExists(CONTAINER_NAME, blobKey);
-        assertTrue(result, "Blob doesn't exist");
-
-        // complex path test
-        blobKey = TestUtils.createRandomBlobKey("ss/asdas/", "");
-        result = blobStore.blobExists(CONTAINER_NAME, blobKey);
-        assertFalse(result, "Blob exists");
-        TestUtils.createBlobAsFile(CONTAINER_NAME, blobKey, TestUtils.getImageForBlobPayload());
-        result = blobStore.blobExists(CONTAINER_NAME, blobKey);
-        assertTrue(result, "Blob doesn't exist");
-    }
-
-    public void testGetBlob_NotExistingContainer() {
-        try {
-            blobStore.getBlob(CONTAINER_NAME, TestUtils.createRandomBlobKey(), null);
-            fail("Retrieve must fail, container does not exist.");
-        } catch (ContainerNotFoundException e) {
-            // correct if arrive here
-        }
-    }
-
-    /**
-     * Test of getBlob method, of class FilesystemAsyncBlobStore.
-     */
-    public void testGetBlob() throws IOException {
-        String blobKey = TestUtils.createRandomBlobKey();
-        GetOptions options = null;
-        Blob resultBlob;
-
-        blobStore.createContainerInLocation(null, CONTAINER_NAME);
-
-        resultBlob = blobStore.getBlob(CONTAINER_NAME, blobKey, options);
-        assertNull(resultBlob, "Blob exists");
-
-        // create blob
-        TestUtils.createBlobsInContainer(CONTAINER_NAME, blobKey);
-
-        resultBlob = blobStore.getBlob(CONTAINER_NAME, blobKey, options);
-
-        assertNotNull(resultBlob, "Blob exists");
-        // checks file content
-        ByteSource expectedFile = Files.asByteSource(new File(TARGET_CONTAINER_NAME, blobKey));
-        assertEquals(expectedFile.read(), ByteStreams2.toByteArrayAndClose(resultBlob.getPayload().openStream()),
-                "Blob payload differs from file content");
-        // metadata are verified in the test for blobMetadata, so no need to
-        // perform a complete test here
-        assertNotNull(resultBlob.getMetadata(), "Metadata null");
-        MutableBlobMetadata metadata = resultBlob.getMetadata();
-        assertEquals(blobKey, metadata.getName(), "Wrong blob metadata");
-    }
-
-    public void testBlobMetadata_withDefaultMetadata() throws IOException {
-        String BLOB_KEY = TestUtils.createRandomBlobKey(null, null);
-        // create the blob
-        blobStore.createContainerInLocation(null, CONTAINER_NAME);
-        Blob blob = blobStore.blobBuilder(BLOB_KEY)
-           .payload(TestUtils.getImageForBlobPayload())
-           .build();
-        blobStore.putBlob(CONTAINER_NAME, blob);
-
-        BlobMetadata metadata = blobStore.blobMetadata(CONTAINER_NAME, BLOB_KEY);
-        assertNotNull(metadata, "Metadata null");
-
-        assertEquals(metadata.getName(), BLOB_KEY, "Wrong blob name");
-        assertEquals(metadata.getType(), StorageType.BLOB, "Wrong blob type");
-        assertEquals(metadata.getContentMetadata().getContentType(), "application/unknown", "Wrong blob content-type");
-        assertEquals(base16().lowerCase().encode(metadata.getContentMetadata().getContentMD5()), metadata.getETag(),
-                "Wrong blob MD5");
-        assertEquals(metadata.getLocation(), null, "Wrong blob location");
-        assertEquals(metadata.getProviderId(), null, "Wrong blob provider id");
-        assertEquals(metadata.getUri(), null, "Wrong blob URI");
-        assertNotNull(metadata.getUserMetadata(), "No blob UserMetadata");
-        assertEquals(metadata.getUserMetadata().size(), 0, "Wrong blob UserMetadata");
-        // metadata.getLastModified()
-        File file = new File(TARGET_CONTAINER_NAME, BLOB_KEY);
-        assertEquals(metadata.getContentMetadata().getContentLength(), Long.valueOf(file.length()), "Wrong blob size");
-    }
-
-    public void testDeleteContainer_NotExistingContainer() {
-        blobStore.deleteContainer(CONTAINER_NAME);
-    }
-
-    public void testDeleteContainer_EmptyContanier() {
-        boolean result;
-        blobStore.createContainerInLocation(null, CONTAINER_NAME);
-
-        result = blobStore.containerExists(CONTAINER_NAME);
-        assertTrue(result, "Container doesn't exists");
-        TestUtils.directoryExists(TARGET_CONTAINER_NAME, true);
-
-        // delete container
-        blobStore.deleteContainer(CONTAINER_NAME);
-        result = blobStore.containerExists(CONTAINER_NAME);
-        assertFalse(result, "Container still exists");
-        TestUtils.directoryExists(TARGET_CONTAINER_NAME, false);
-    }
-
-    public void testDeleteContainer() throws IOException {
-        boolean result;
-        String CONTAINER_NAME2 = "container-to-delete";
-        String TARGET_CONTAINER_NAME2 = TestUtils.TARGET_BASE_DIR + CONTAINER_NAME2;
-        blobStore.createContainerInLocation(null, CONTAINER_NAME);
-        blobStore.createContainerInLocation(null, CONTAINER_NAME2);
-
-        result = blobStore.containerExists(CONTAINER_NAME);
-        assertTrue(result, "Container [" + CONTAINER_NAME + "] doesn't exists");
-        TestUtils.directoryExists(TARGET_CONTAINER_NAME, true);
-        result = blobStore.containerExists(CONTAINER_NAME2);
-        assertTrue(result, "Container [" + CONTAINER_NAME2 + "] doesn't exists");
-        TestUtils.directoryExists(TARGET_CONTAINER_NAME2, true);
-
-        // create blobs inside container
-        TestUtils.createBlobsInContainer(CONTAINER_NAME, TestUtils.createRandomBlobKey("testutils-", null),
-                TestUtils.createRandomBlobKey("testutils-", null),
-                TestUtils.createRandomBlobKey("ab123s" + File.separator + "testutils-", null));
-        TestUtils.createBlobsInContainer(CONTAINER_NAME, TestUtils.createRandomBlobKey("testutils-", null),
-                TestUtils.createRandomBlobKey("testutils-", null),
-                TestUtils.createRandomBlobKey("asda123s" + File.separator + "testutils-", null),
-                TestUtils.createRandomBlobKey("123-_3s" + File.separator + "testutils-", null));
-
-        // delete first container
-        blobStore.deleteContainer(CONTAINER_NAME);
-        result = blobStore.containerExists(CONTAINER_NAME);
-        assertFalse(result, "Container [" + CONTAINER_NAME + "] still exists");
-        TestUtils.directoryExists(TARGET_CONTAINER_NAME, false);
-        result = blobStore.containerExists(CONTAINER_NAME2);
-        assertTrue(result, "Container [" + CONTAINER_NAME2 + "] still exists");
-        TestUtils.directoryExists(TARGET_CONTAINER_NAME2, true);
-        // delete second container
-        blobStore.deleteContainer(CONTAINER_NAME2);
-        result = blobStore.containerExists(CONTAINER_NAME2);
-        assertFalse(result, "Container [" + CONTAINER_NAME2 + "] still exists");
-        TestUtils.directoryExists(TARGET_CONTAINER_NAME2, false);
-    }
-
-    @Test
-    public void testInvalidContainerName() {
-	String containerName = "file" + File.separator + "system";
-        try {
-            blobStore.createContainerInLocation(null, containerName);
-            fail("Wrong container name not recognized");
-        } catch (IllegalArgumentException e) {
-        }
-        try {
-            blobStore.containerExists(containerName);
-            fail("Wrong container name not recognized");
-        } catch (IllegalArgumentException e) {
-        }
-    }
-
-    public void testRanges() throws IOException {
-        blobStore.createContainerInLocation(null, CONTAINER_NAME);
-        String input = "abcdefgh";
-        Payload payload;
-        Blob blob = blobStore.blobBuilder("test").payload(new StringPayload(input)).build();
-        blobStore.putBlob(CONTAINER_NAME, blob);
-
-        GetOptions getOptionsRangeStartAt = new GetOptions();
-        getOptionsRangeStartAt.startAt(1);
-        Blob blobRangeStartAt = blobStore.getBlob(CONTAINER_NAME, blob.getMetadata().getName(), getOptionsRangeStartAt);
-        payload = blobRangeStartAt.getPayload();
-        try {
-            assertEquals(input.substring(1), Strings2.toStringAndClose(payload.openStream()));
-        } finally {
-            Closeables2.closeQuietly(payload);
-        }
-
-        GetOptions getOptionsRangeTail = new GetOptions();
-        getOptionsRangeTail.tail(3);
-        Blob blobRangeTail = blobStore.getBlob(CONTAINER_NAME, blob.getMetadata().getName(), getOptionsRangeTail);
-        payload = blobRangeTail.getPayload();
-        try {
-            assertEquals(input.substring(5), Strings2.toStringAndClose(payload.openStream()));
-        } finally {
-            Closeables2.closeQuietly(payload);
-        }
-
-        GetOptions getOptionsFragment = new GetOptions();
-        getOptionsFragment.range(4, 6);
-        Blob blobFragment = blobStore.getBlob(CONTAINER_NAME, blob.getMetadata().getName(), getOptionsFragment);
-        payload = blobFragment.getPayload();
-        try {
-            assertEquals(input.substring(4, 7), Strings2.toStringAndClose(payload.openStream()));
-        } finally {
-            Closeables2.closeQuietly(payload);
-        }
-    }
-
-    /** Test that BlobRequestSigner creates expected URIs.  */
-    public void testBlobRequestSigner() throws Exception {
-        String containerName = "container";
-        String blobName = "blob";
-        URI endPoint = new URI("http", "localhost",
-                String.format("/transient/%s/%s", containerName, blobName),
-                /*fragment=*/ null);
-        BlobRequestSigner signer = context.getSigner();
-        HttpRequest request;
-        HttpRequest expected;
-
-        request = signer.signGetBlob(containerName, blobName);
-        expected = HttpRequest.builder()
-                .method("GET")
-                .endpoint(endPoint)
-                .headers(request.getHeaders())
-                .build();
-        assertEquals(expected, request);
-
-        request = signer.signRemoveBlob(containerName, blobName);
-        expected = HttpRequest.builder()
-                .method("DELETE")
-                .endpoint(endPoint)
-                .headers(request.getHeaders())
-                .build();
-        assertEquals(expected, request);
-
-        Blob blob = blobStore.blobBuilder(blobName).forSigning().build();
-        request = signer.signPutBlob(containerName, blob);
-        expected = HttpRequest.builder()
-                .method("PUT")
-                .endpoint(endPoint)
-                .headers(request.getHeaders())
-                .payload(new PhantomPayload())
-                .build();
-        assertEquals(expected, request);
-    }
-
-    // public void testInvalidBlobKey() {
-    // try {
-    // blobStore.newBlob(File.separator + "testwrongblobkey");
-    // fail("Wrong blob key not recognized");
-    // } catch (IllegalArgumentException e) {}
-    //
-    // try {
-    // blobStore.newBlob("testwrongblobkey" + File.separator);
-    // fail("Wrong blob key not recognized");
-    // } catch (IllegalArgumentException e) {}
-    // }
-
-    // ---------------------------------------------------------- Private Methods
-
-    /**
-     * Creates a {@link Blob} object filled with data from a file
-     *
-     * @param keyName
-     * @param fileContent
-     * @return
-     */
-    private Blob createBlob(String keyName, File filePayload) {
-        return blobStore.blobBuilder(keyName).payload(filePayload).build();
-    }
-
-    /**
-     * Tests if container contains only the expected blobs
-     *
-     * @param containerName
-     * @param expectedBlobKeys
-     */
-    private void checkForContainerContent(final String containerName, Set<String> expectedBlobKeys) {
-        checkForContainerContent(containerName, null, expectedBlobKeys);
-    }
-
-    private void checkForContainerContent(final String containerName, String inDirectory, Set<String> expectedBlobKeys) {
-        ListContainerOptions options = ListContainerOptions.Builder.recursive();
-        if (null != inDirectory && !"".equals(inDirectory))
-            options.inDirectory(inDirectory);
-
-        PageSet<? extends StorageMetadata> blobsRetrieved = blobStore.list(containerName, options);
-        for (Iterator<? extends StorageMetadata> it = blobsRetrieved.iterator(); it.hasNext();) {
-           // TODO: FluentIterable
-           if (it.next().getType() != StorageType.BLOB) {
-              it.remove();
-           }
-        }
-
-        // nothing expected
-        if (null == expectedBlobKeys || 0 == expectedBlobKeys.size()) {
-            assertTrue(blobsRetrieved.isEmpty(), "Wrong blob number retrieved in the container [" + containerName + "]");
-            return;
-        }
-
-        // copies values
-        Set<String> expectedBlobKeysCopy = Sets.newHashSet();
-        for (String value : expectedBlobKeys) {
-            expectedBlobKeysCopy.add(value);
-        }
-        assertEquals(blobsRetrieved.size(), expectedBlobKeysCopy.size(),
-                "Wrong blob number retrieved in the container [" + containerName + "]");
-        for (StorageMetadata data : blobsRetrieved) {
-            String blobName = data.getName();
-            if (!expectedBlobKeysCopy.remove(blobName)) {
-                fail("List for container [" + containerName + "] contains unexpected value [" + blobName + "]");
-            }
-        }
-        assertTrue(expectedBlobKeysCopy.isEmpty(), "List operation for container [" + containerName
-                + "] doesn't return all values.");
-    }
-
-    /**
-     * Create a blob with putBlob method
-     */
-    private void putBlobAndCheckIt(String blobKey) {
-        Blob blob;
-
-        TestUtils.fileExists(TARGET_CONTAINER_NAME + File.separator + blobKey, false);
-
-        // create the blob
-        blob = createBlob(blobKey, TestUtils.getImageForBlobPayload());
-        String eTag = blobStore.putBlob(CONTAINER_NAME, blob);
-        assertNotNull(eTag, "putBlob result null");
-        assertNotSame(eTag, "", "putBlob result empty");
-
-        // checks if the blob exists
-        TestUtils.fileExists(TARGET_CONTAINER_NAME + File.separator + blobKey, true);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/a22a7252/apis/filesystem/src/test/java/org/jclouds/filesystem/FilesystemBlobStoreTest.java
----------------------------------------------------------------------
diff --git a/apis/filesystem/src/test/java/org/jclouds/filesystem/FilesystemBlobStoreTest.java b/apis/filesystem/src/test/java/org/jclouds/filesystem/FilesystemBlobStoreTest.java
new file mode 100644
index 0000000..ad2bc92
--- /dev/null
+++ b/apis/filesystem/src/test/java/org/jclouds/filesystem/FilesystemBlobStoreTest.java
@@ -0,0 +1,817 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF 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;
+
+import static com.google.common.io.BaseEncoding.base16;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertNotSame;
+import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URI;
+import java.util.Iterator;
+import java.util.Properties;
+import java.util.Set;
+
+import org.jclouds.ContextBuilder;
+import org.jclouds.blobstore.BlobRequestSigner;
+import org.jclouds.blobstore.BlobStore;
+import org.jclouds.blobstore.BlobStoreContext;
+import org.jclouds.blobstore.ContainerNotFoundException;
+import org.jclouds.blobstore.domain.Blob;
+import org.jclouds.blobstore.domain.BlobMetadata;
+import org.jclouds.blobstore.domain.MutableBlobMetadata;
+import org.jclouds.blobstore.domain.PageSet;
+import org.jclouds.blobstore.domain.StorageMetadata;
+import org.jclouds.blobstore.domain.StorageType;
+import org.jclouds.blobstore.options.GetOptions;
+import org.jclouds.blobstore.options.ListContainerOptions;
+import org.jclouds.filesystem.reference.FilesystemConstants;
+import org.jclouds.filesystem.util.Utils;
+import org.jclouds.filesystem.utils.TestUtils;
+import org.jclouds.http.HttpRequest;
+import org.jclouds.io.ByteStreams2;
+import org.jclouds.io.Payload;
+import org.jclouds.io.payloads.PhantomPayload;
+import org.jclouds.io.payloads.StringPayload;
+import org.jclouds.util.Closeables2;
+import org.jclouds.util.Strings2;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.Sets;
+import com.google.common.io.ByteSource;
+import com.google.common.io.Files;
+import com.google.inject.CreationException;
+
+@Test(groups = "unit", testName = "FilesystemBlobStoreTest", singleThreaded = true)
+public class FilesystemBlobStoreTest {
+
+    private static final String CONTAINER_NAME = "fun-blobstore-test";
+    private static final String TARGET_CONTAINER_NAME = TestUtils.TARGET_BASE_DIR + CONTAINER_NAME;
+    private static final String LOGGING_CONFIG_KEY = "java.util.logging.config.file";
+    private static final String LOGGING_CONFIG_VALUE = "src/main/resources/logging.properties";
+
+    private static final String PROVIDER = "filesystem";
+
+    static {
+        System.setProperty(LOGGING_CONFIG_KEY, LOGGING_CONFIG_VALUE);
+    }
+
+    private BlobStoreContext context = null;
+    private BlobStore blobStore = null;
+
+    @BeforeMethod
+    protected void setUp() throws Exception {
+        // create context for filesystem container
+        Properties prop = new Properties();
+        prop.setProperty(FilesystemConstants.PROPERTY_BASEDIR, TestUtils.TARGET_BASE_DIR);
+        context = ContextBuilder.newBuilder(PROVIDER).overrides(prop).build(BlobStoreContext.class);
+        // create a container in the default location
+        blobStore = context.getBlobStore();
+        new File(TestUtils.TARGET_BASE_DIR).mkdir();
+        TestUtils.createResources();
+    }
+
+    @AfterMethod
+    protected void tearDown() throws IOException {
+        context.close();
+        Utils.deleteRecursively(new File(TestUtils.TARGET_BASE_DIR));
+    }
+
+    /**
+     * Checks if context parameters are managed in the correct way
+     */
+    public void testParameters() {
+        // no base directory declared in properties
+        try {
+            Properties props = new Properties();
+            context = ContextBuilder.newBuilder(PROVIDER).overrides(props).build(BlobStoreContext.class);
+            fail("No error if base directory is not specified");
+        } catch (CreationException e) {
+        }
+
+        // no base directory declared in properties
+        try {
+            Properties props = new Properties();
+            props.setProperty(FilesystemConstants.PROPERTY_BASEDIR, null);
+            context = ContextBuilder.newBuilder(PROVIDER).overrides(props).build(BlobStoreContext.class);
+            fail("No error if base directory is null in the option");
+        } catch (NullPointerException e) {
+        }
+    }
+
+    /**
+     * Test of list method of the root context
+     */
+    public void testList_Root() throws IOException {
+        PageSet<? extends StorageMetadata> containersRetrieved;
+        Set<String> containersCreated = Sets.newHashSet();
+
+        // Testing list with no containers
+        containersRetrieved = blobStore.list();
+        assertTrue(containersRetrieved.isEmpty(), "List operation returns a not empty set of container");
+
+        // Testing list with some containers
+        String[] containerNames = {"34343", "aaaa", "bbbbb"};
+        containersCreated = Sets.newHashSet();
+        for (String containerName : containerNames) {
+            blobStore.createContainerInLocation(null, containerName);
+            containersCreated.add(containerName);
+        }
+
+        containersRetrieved = blobStore.list();
+        assertEquals(containersCreated.size(), containersRetrieved.size(), "Different numbers of container");
+
+        for (StorageMetadata data : containersRetrieved) {
+            String containerName = data.getName();
+            if (!containersCreated.remove(containerName)) {
+                fail("Container list contains unexpected value [" + containerName + "]");
+            }
+        }
+        assertTrue(containersCreated.isEmpty(), "List operation doesn't return all values.");
+
+        for (String containerName : containerNames) {
+            // delete all creaded containers
+            blobStore.deleteContainer(containerName);
+        }
+        containersRetrieved = blobStore.list();
+        assertTrue(containersRetrieved.isEmpty(), "List operation returns a not empty set of container");
+    }
+
+    public void testList_NoOptionSingleContainer() throws IOException {
+        blobStore.createContainerInLocation(null, CONTAINER_NAME);
+        // Testing list for an empty container
+        checkForContainerContent(CONTAINER_NAME, null);
+
+        // creates blobs in first container
+        Set<String> blobsExpected = TestUtils.createBlobsInContainer(CONTAINER_NAME, "bbb" + File.separator + "ccc"
+                + File.separator + "ddd" + File.separator + "1234.jpg", "4rrr.jpg", "rrr" + File.separator + "sss"
+                + File.separator + "788.jpg", "xdc" + File.separator + "wert.kpg");
+
+        checkForContainerContent(CONTAINER_NAME, blobsExpected);
+    }
+
+    public void testList_NotExistingContainer() {
+        // Testing list for a not existing container
+        try {
+            blobStore.list(CONTAINER_NAME);
+            fail("Found a not existing container");
+        } catch (ContainerNotFoundException e) {
+            // ok if arriver here
+        }
+    }
+
+    public void testList_NoOptionDoubleContainer() throws IOException {
+        final String CONTAINER_NAME2 = "container2";
+
+        // create first container
+        blobStore.createContainerInLocation(null, CONTAINER_NAME);
+        // checks for empty container
+        checkForContainerContent(CONTAINER_NAME, null);
+
+        // create second container
+        blobStore.createContainerInLocation(null, CONTAINER_NAME2);
+        // checks for empty
+        checkForContainerContent(CONTAINER_NAME2, null);
+
+        // creates blobs in first container
+
+        Set<String> blobNamesCreatedInContainer1 = TestUtils.createBlobsInContainer(CONTAINER_NAME, "bbb"
+                + File.separator + "ccc" + File.separator + "ddd" + File.separator + "1234.jpg",
+                TestUtils.createRandomBlobKey(), "rrr" + File.separator + "sss" + File.separator + "788.jpg", "xdc"
+                + File.separator + "wert.kpg");
+
+        // creates blobs in second container
+        blobStore.createContainerInLocation(null, CONTAINER_NAME2);
+        Set<String> blobNamesCreatedInContainer2 = TestUtils.createBlobsInContainer(CONTAINER_NAME2, "asd"
+                + File.separator + "bbb" + File.separator + "ccc" + File.separator + "ddd" + File.separator + "1234.jpg",
+                TestUtils.createRandomBlobKey(), "rrr" + File.separator + "sss" + File.separator + "788.jpg", "xdc"
+                + File.separator + "wert.kpg");
+
+        // test blobs in first container
+        checkForContainerContent(CONTAINER_NAME, blobNamesCreatedInContainer1);
+        // test blobs in second container
+        checkForContainerContent(CONTAINER_NAME2, blobNamesCreatedInContainer2);
+    }
+
+    public void testList_Subdirectory() throws IOException {
+        blobStore.createContainerInLocation(null, CONTAINER_NAME);
+        // Testing list for an empty container
+        checkForContainerContent(CONTAINER_NAME, null);
+
+        // creates blobs in first container
+        Set<String> blobsExpected = TestUtils.createBlobsInContainer(CONTAINER_NAME, "bbb" + File.separator + "ccc"
+                + File.separator + "ddd" + File.separator + "1234.jpg", "4rrr.jpg", "rrr" + File.separator + "sss"
+                + File.separator + "788.jpg", "rrr" + File.separator + "wert.kpg");
+
+        // remove not expected values
+        blobsExpected.remove("bbb" + File.separator + "ccc" + File.separator + "ddd" + File.separator + "1234.jpg");
+        blobsExpected.remove("4rrr.jpg");
+
+        checkForContainerContent(CONTAINER_NAME, "rrr", blobsExpected);
+    }
+
+    /**
+     * TODO Should throws an exception?
+     */
+    public void testClearContainer_NotExistingContainer() {
+        blobStore.clearContainer(CONTAINER_NAME);
+    }
+
+    public void testClearContainer_NoOptions() throws IOException {
+        final String CONTAINER_NAME2 = "containerToClear";
+
+        // create containers
+        blobStore.createContainerInLocation(null, CONTAINER_NAME);
+        blobStore.createContainerInLocation(null, CONTAINER_NAME2);
+
+        // creates blobs in first container
+        Set<String> blobNamesCreatedInContainer1 = TestUtils.createBlobsInContainer(CONTAINER_NAME, "bbb"
+                + File.separator + "ccc" + File.separator + "ddd" + File.separator + "1234.jpg",
+                TestUtils.createRandomBlobKey(), "rrr" + File.separator + "sss" + File.separator + "788.jpg", "xdc"
+                + File.separator + "wert.kpg");
+
+        // creates blobs in second container
+        blobStore.createContainerInLocation(null, CONTAINER_NAME2);
+        Set<String> blobNamesCreatedInContainer2 = TestUtils.createBlobsInContainer(CONTAINER_NAME2, "asd"
+                + File.separator + "bbb" + File.separator + "ccc" + File.separator + "ddd" + File.separator + "1234.jpg",
+                TestUtils.createRandomBlobKey(), "rrr" + File.separator + "sss" + File.separator + "788.jpg", "xdc"
+                + File.separator + "wert.kpg");
+
+        // test blobs in containers
+        checkForContainerContent(CONTAINER_NAME, blobNamesCreatedInContainer1);
+        checkForContainerContent(CONTAINER_NAME2, blobNamesCreatedInContainer2);
+
+        // delete blobs in first container
+        blobStore.clearContainer(CONTAINER_NAME);
+        checkForContainerContent(CONTAINER_NAME, null);
+        checkForContainerContent(CONTAINER_NAME2, blobNamesCreatedInContainer2);
+        // delete blobs in second container
+        blobStore.clearContainer(CONTAINER_NAME2);
+        checkForContainerContent(CONTAINER_NAME2, null);
+    }
+
+    public void testCountBlobs_NotExistingContainer() {
+        blobStore.countBlobs(PROVIDER);
+    }
+
+    public void testCountBlobs_NoOptionsEmptyContainer() {
+        blobStore.createContainerInLocation(null, CONTAINER_NAME);
+        blobStore.countBlobs(PROVIDER);
+    }
+
+    public void testCountBlobs_NoOptions() {
+        blobStore.createContainerInLocation(null, CONTAINER_NAME);
+        blobStore.countBlobs(PROVIDER);
+    }
+
+    public void testRemoveBlob_SimpleBlobKey() throws IOException {
+        final String BLOB_KEY = TestUtils.createRandomBlobKey(null, ".txt");
+        boolean result;
+
+        blobStore.createContainerInLocation(null, CONTAINER_NAME);
+
+        // checks that blob doesn't exists
+        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY);
+        assertFalse(result, "Blob exists");
+
+        // create the blob
+        TestUtils.createBlobsInContainer(CONTAINER_NAME, BLOB_KEY);
+        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY);
+        assertTrue(result, "Blob exists");
+
+        // remove it
+        blobStore.removeBlob(CONTAINER_NAME, BLOB_KEY);
+        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY);
+        assertFalse(result, "Blob still exists");
+        TestUtils.fileExists(TARGET_CONTAINER_NAME + File.separator + BLOB_KEY, false);
+    }
+
+    public void testRemoveBlob_TwoSimpleBlobKeys() throws IOException {
+        final String BLOB_KEY1 = TestUtils.createRandomBlobKey(null, null);
+        final String BLOB_KEY2 = TestUtils.createRandomBlobKey(null, null);
+        boolean result;
+
+        // create the container and checks that blob doesn't exists
+        blobStore.createContainerInLocation(null, CONTAINER_NAME);
+        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY1);
+        assertFalse(result, "Blob1 exists");
+        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY2);
+        assertFalse(result, "Blob2 exists");
+
+        // create the blob
+        TestUtils.createBlobsInContainer(CONTAINER_NAME, BLOB_KEY1, BLOB_KEY2);
+        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY1);
+        assertTrue(result, "Blob " + BLOB_KEY1 + " doesn't exist");
+        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY2);
+        assertTrue(result, "Blob " + BLOB_KEY2 + " doesn't exist");
+
+        // remove first blob
+        blobStore.removeBlob(CONTAINER_NAME, BLOB_KEY1);
+        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY1);
+        assertFalse(result, "Blob1 still exists");
+        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY2);
+        assertTrue(result, "Blob2 doesn't exist");
+        TestUtils.fileExists(TARGET_CONTAINER_NAME + File.separator + BLOB_KEY1, false);
+        TestUtils.fileExists(TARGET_CONTAINER_NAME + File.separator + BLOB_KEY2, true);
+        // remove second blob
+        blobStore.removeBlob(CONTAINER_NAME, BLOB_KEY2);
+        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY2);
+        assertFalse(result, "Blob2 still exists");
+        TestUtils.fileExists(TARGET_CONTAINER_NAME + File.separator + BLOB_KEY2, false);
+    }
+
+    /**
+     * Test of removeBlob method, with only one blob with a complex path as key
+     */
+    @Test
+    public void testRemoveBlob_ComplexBlobKey() throws IOException {
+        final String BLOB_KEY = TestUtils.createRandomBlobKey("aa/bb/cc/dd/", null);
+        boolean result;
+
+        // checks that blob doesn't exists
+        blobStore.createContainerInLocation(null, CONTAINER_NAME);
+        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY);
+        assertFalse(result, "Blob exists");
+        TestUtils.fileExists(TARGET_CONTAINER_NAME + File.separator + BLOB_KEY, false);
+
+        // create the blob
+        TestUtils.createBlobsInContainer(CONTAINER_NAME, BLOB_KEY);
+        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY);
+        assertTrue(result, "Blob doesn't exist");
+
+        // remove it
+        blobStore.removeBlob(CONTAINER_NAME, BLOB_KEY);
+        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY);
+        assertFalse(result, "Blob still exists");
+        // file removed
+        TestUtils.fileExists(TARGET_CONTAINER_NAME + File.separator + BLOB_KEY, false);
+        // also the entire directory structure was removed
+        TestUtils.directoryExists(TARGET_CONTAINER_NAME + "/aa", false);
+    }
+
+    /**
+     * Test of removeBlob method, with two blobs with a complex path as key and
+     * when first blob is removed, not all of its key's path is removed, because
+     * it is shared with the second blob's key
+     */
+    @Test
+    public void testRemoveBlob_TwoComplexBlobKeys() throws IOException {
+        final String BLOB_KEY1 = TestUtils.createRandomBlobKey("aa/bb/cc/dd/", null);
+        final String BLOB_KEY2 = TestUtils.createRandomBlobKey("aa/bb/ee/ff/", null);
+        boolean result;
+
+        blobStore.createContainerInLocation(null, CONTAINER_NAME);
+
+        // checks that blob doesn't exist
+        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY1);
+        assertFalse(result, "Blob1 exists");
+        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY2);
+        assertFalse(result, "Blob2 exists");
+
+        // create the blobs
+        TestUtils.createBlobsInContainer(CONTAINER_NAME, BLOB_KEY1, BLOB_KEY2);
+        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY1);
+        assertTrue(result, "Blob " + BLOB_KEY1 + " doesn't exist");
+        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY2);
+        assertTrue(result, "Blob " + BLOB_KEY2 + " doesn't exist");
+
+        // remove first blob
+        blobStore.removeBlob(CONTAINER_NAME, BLOB_KEY1);
+        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY1);
+        assertFalse(result, "Blob still exists");
+        // first file deleted, not the second
+        TestUtils.fileExists(TARGET_CONTAINER_NAME + File.separator + BLOB_KEY1, false);
+        TestUtils.fileExists(TARGET_CONTAINER_NAME + File.separator + BLOB_KEY2, true);
+        // only partial directory structure was removed, because it shares a path
+        // with the second blob created
+        TestUtils.directoryExists(TARGET_CONTAINER_NAME + "/aa/bb/cc/dd", false);
+        TestUtils.directoryExists(TARGET_CONTAINER_NAME + "/aa/bb", true);
+        // remove second blob
+        blobStore.removeBlob(CONTAINER_NAME, BLOB_KEY2);
+        result = blobStore.blobExists(CONTAINER_NAME, BLOB_KEY2);
+        assertFalse(result, "Blob still exists");
+        TestUtils.fileExists(TARGET_CONTAINER_NAME + File.separator + BLOB_KEY2, false);
+        // now all the directory structure is empty
+        TestUtils.directoryExists(TARGET_CONTAINER_NAME + "/aa", false);
+    }
+
+    public void testContainerExists() throws IOException {
+        boolean result;
+
+        result = blobStore.containerExists(CONTAINER_NAME);
+        assertFalse(result, "Container exists");
+
+        // create container
+        TestUtils.createContainerAsDirectory(CONTAINER_NAME);
+
+        result = blobStore.containerExists(CONTAINER_NAME);
+        assertTrue(result, "Container doesn't exist");
+    }
+
+    public void testCreateContainerInLocation() throws IOException {
+        final String CONTAINER_NAME2 = "funambol-test-2";
+        final String TARGET_CONTAINER_NAME2 = TestUtils.TARGET_BASE_DIR + CONTAINER_NAME2;
+
+        boolean result;
+
+        result = blobStore.containerExists(CONTAINER_NAME);
+        assertFalse(result, "Container exists");
+        result = blobStore.createContainerInLocation(null, CONTAINER_NAME);
+        assertTrue(result, "Container not created");
+        result = blobStore.containerExists(CONTAINER_NAME);
+        assertTrue(result, "Container doesn't exist");
+        TestUtils.directoryExists(TARGET_CONTAINER_NAME, true);
+
+        result = blobStore.containerExists(CONTAINER_NAME2);
+        assertFalse(result, "Container exists");
+        result = blobStore.createContainerInLocation(null, CONTAINER_NAME2);
+        assertTrue(result, "Container not created");
+        result = blobStore.containerExists(CONTAINER_NAME2);
+        assertTrue(result, "Container doesn't exist");
+        TestUtils.directoryExists(TestUtils.TARGET_BASE_DIR + CONTAINER_NAME2, true);
+    }
+
+    public void testPutBlobSimpleName() {
+        blobStore.createContainerInLocation(null, CONTAINER_NAME);
+        putBlobAndCheckIt(TestUtils.createRandomBlobKey("putBlob-", ".jpg"));
+        putBlobAndCheckIt(TestUtils.createRandomBlobKey("putBlob-", ".jpg"));
+    }
+
+    /**
+     * Test of putBlob method with a complex key, with path in the filename, eg
+     * picture/filename.jpg
+     */
+    public void testPutBlobComplexName1() {
+        blobStore.createContainerInLocation(null, CONTAINER_NAME);
+        putBlobAndCheckIt(TestUtils.createRandomBlobKey("picture/putBlob-", ".jpg"));
+        putBlobAndCheckIt(TestUtils.createRandomBlobKey("video/putBlob-", ".jpg"));
+        putBlobAndCheckIt(TestUtils.createRandomBlobKey("putBlob-", ".jpg"));
+        putBlobAndCheckIt(TestUtils.createRandomBlobKey("video/putBlob-", ".jpg"));
+    }
+
+    /**
+     * Test of putBlob method with a complex key, with path in the filename, eg
+     * picture/filename.jpg
+     */
+    public void testPutBlobComplexName2() {
+        blobStore.createContainerInLocation(null, CONTAINER_NAME);
+        putBlobAndCheckIt(TestUtils.createRandomBlobKey("aa/bb/cc/dd/ee/putBlob-", ".jpg"));
+        putBlobAndCheckIt(TestUtils.createRandomBlobKey("aa/bb/cc/dd/ee/putBlob-", ".jpg"));
+        putBlobAndCheckIt(TestUtils.createRandomBlobKey("putBlob-", ".jpg"));
+    }
+
+    public void testBlobExists() throws IOException {
+        boolean result;
+        String blobKey;
+
+        // when location doesn't exists
+        blobKey = TestUtils.createRandomBlobKey();
+        try {
+            blobStore.blobExists(CONTAINER_NAME, blobKey);
+            fail();
+        } catch (ContainerNotFoundException cnfe) {
+            // expected
+        }
+
+        // when location exists
+        blobStore.createContainerInLocation(null, CONTAINER_NAME);
+        result = blobStore.blobExists(CONTAINER_NAME, blobKey);
+        assertFalse(result, "Blob exists");
+
+        // create blob
+        TestUtils.createBlobAsFile(CONTAINER_NAME, blobKey, TestUtils.getImageForBlobPayload());
+        result = blobStore.blobExists(CONTAINER_NAME, blobKey);
+        assertTrue(result, "Blob doesn't exist");
+
+        // complex path test
+        blobKey = TestUtils.createRandomBlobKey("ss/asdas/", "");
+        result = blobStore.blobExists(CONTAINER_NAME, blobKey);
+        assertFalse(result, "Blob exists");
+        TestUtils.createBlobAsFile(CONTAINER_NAME, blobKey, TestUtils.getImageForBlobPayload());
+        result = blobStore.blobExists(CONTAINER_NAME, blobKey);
+        assertTrue(result, "Blob doesn't exist");
+    }
+
+    public void testGetBlob_NotExistingContainer() {
+        try {
+            blobStore.getBlob(CONTAINER_NAME, TestUtils.createRandomBlobKey(), null);
+            fail("Retrieve must fail, container does not exist.");
+        } catch (ContainerNotFoundException e) {
+            // correct if arrive here
+        }
+    }
+
+    public void testGetBlob() throws IOException {
+        String blobKey = TestUtils.createRandomBlobKey();
+        GetOptions options = null;
+        Blob resultBlob;
+
+        blobStore.createContainerInLocation(null, CONTAINER_NAME);
+
+        resultBlob = blobStore.getBlob(CONTAINER_NAME, blobKey, options);
+        assertNull(resultBlob, "Blob exists");
+
+        // create blob
+        TestUtils.createBlobsInContainer(CONTAINER_NAME, blobKey);
+
+        resultBlob = blobStore.getBlob(CONTAINER_NAME, blobKey, options);
+
+        assertNotNull(resultBlob, "Blob exists");
+        // checks file content
+        ByteSource expectedFile = Files.asByteSource(new File(TARGET_CONTAINER_NAME, blobKey));
+        assertEquals(expectedFile.read(), ByteStreams2.toByteArrayAndClose(resultBlob.getPayload().openStream()),
+                "Blob payload differs from file content");
+        // metadata are verified in the test for blobMetadata, so no need to
+        // perform a complete test here
+        assertNotNull(resultBlob.getMetadata(), "Metadata null");
+        MutableBlobMetadata metadata = resultBlob.getMetadata();
+        assertEquals(blobKey, metadata.getName(), "Wrong blob metadata");
+    }
+
+    public void testBlobMetadata_withDefaultMetadata() throws IOException {
+        String BLOB_KEY = TestUtils.createRandomBlobKey(null, null);
+        // create the blob
+        blobStore.createContainerInLocation(null, CONTAINER_NAME);
+        Blob blob = blobStore.blobBuilder(BLOB_KEY)
+           .payload(TestUtils.getImageForBlobPayload())
+           .build();
+        blobStore.putBlob(CONTAINER_NAME, blob);
+
+        BlobMetadata metadata = blobStore.blobMetadata(CONTAINER_NAME, BLOB_KEY);
+        assertNotNull(metadata, "Metadata null");
+
+        assertEquals(metadata.getName(), BLOB_KEY, "Wrong blob name");
+        assertEquals(metadata.getType(), StorageType.BLOB, "Wrong blob type");
+        assertEquals(metadata.getContentMetadata().getContentType(), "application/unknown", "Wrong blob content-type");
+        assertEquals(base16().lowerCase().encode(metadata.getContentMetadata().getContentMD5()), metadata.getETag(),
+                "Wrong blob MD5");
+        assertEquals(metadata.getLocation(), null, "Wrong blob location");
+        assertEquals(metadata.getProviderId(), null, "Wrong blob provider id");
+        assertEquals(metadata.getUri(), null, "Wrong blob URI");
+        assertNotNull(metadata.getUserMetadata(), "No blob UserMetadata");
+        assertEquals(metadata.getUserMetadata().size(), 0, "Wrong blob UserMetadata");
+        // metadata.getLastModified()
+        File file = new File(TARGET_CONTAINER_NAME, BLOB_KEY);
+        assertEquals(metadata.getContentMetadata().getContentLength(), Long.valueOf(file.length()), "Wrong blob size");
+    }
+
+    public void testDeleteContainer_NotExistingContainer() {
+        blobStore.deleteContainer(CONTAINER_NAME);
+    }
+
+    public void testDeleteContainer_EmptyContanier() {
+        boolean result;
+        blobStore.createContainerInLocation(null, CONTAINER_NAME);
+
+        result = blobStore.containerExists(CONTAINER_NAME);
+        assertTrue(result, "Container doesn't exists");
+        TestUtils.directoryExists(TARGET_CONTAINER_NAME, true);
+
+        // delete container
+        blobStore.deleteContainer(CONTAINER_NAME);
+        result = blobStore.containerExists(CONTAINER_NAME);
+        assertFalse(result, "Container still exists");
+        TestUtils.directoryExists(TARGET_CONTAINER_NAME, false);
+    }
+
+    public void testDeleteContainer() throws IOException {
+        boolean result;
+        String CONTAINER_NAME2 = "container-to-delete";
+        String TARGET_CONTAINER_NAME2 = TestUtils.TARGET_BASE_DIR + CONTAINER_NAME2;
+        blobStore.createContainerInLocation(null, CONTAINER_NAME);
+        blobStore.createContainerInLocation(null, CONTAINER_NAME2);
+
+        result = blobStore.containerExists(CONTAINER_NAME);
+        assertTrue(result, "Container [" + CONTAINER_NAME + "] doesn't exists");
+        TestUtils.directoryExists(TARGET_CONTAINER_NAME, true);
+        result = blobStore.containerExists(CONTAINER_NAME2);
+        assertTrue(result, "Container [" + CONTAINER_NAME2 + "] doesn't exists");
+        TestUtils.directoryExists(TARGET_CONTAINER_NAME2, true);
+
+        // create blobs inside container
+        TestUtils.createBlobsInContainer(CONTAINER_NAME, TestUtils.createRandomBlobKey("testutils-", null),
+                TestUtils.createRandomBlobKey("testutils-", null),
+                TestUtils.createRandomBlobKey("ab123s" + File.separator + "testutils-", null));
+        TestUtils.createBlobsInContainer(CONTAINER_NAME, TestUtils.createRandomBlobKey("testutils-", null),
+                TestUtils.createRandomBlobKey("testutils-", null),
+                TestUtils.createRandomBlobKey("asda123s" + File.separator + "testutils-", null),
+                TestUtils.createRandomBlobKey("123-_3s" + File.separator + "testutils-", null));
+
+        // delete first container
+        blobStore.deleteContainer(CONTAINER_NAME);
+        result = blobStore.containerExists(CONTAINER_NAME);
+        assertFalse(result, "Container [" + CONTAINER_NAME + "] still exists");
+        TestUtils.directoryExists(TARGET_CONTAINER_NAME, false);
+        result = blobStore.containerExists(CONTAINER_NAME2);
+        assertTrue(result, "Container [" + CONTAINER_NAME2 + "] still exists");
+        TestUtils.directoryExists(TARGET_CONTAINER_NAME2, true);
+        // delete second container
+        blobStore.deleteContainer(CONTAINER_NAME2);
+        result = blobStore.containerExists(CONTAINER_NAME2);
+        assertFalse(result, "Container [" + CONTAINER_NAME2 + "] still exists");
+        TestUtils.directoryExists(TARGET_CONTAINER_NAME2, false);
+    }
+
+    @Test
+    public void testInvalidContainerName() {
+	String containerName = "file" + File.separator + "system";
+        try {
+            blobStore.createContainerInLocation(null, containerName);
+            fail("Wrong container name not recognized");
+        } catch (IllegalArgumentException e) {
+        }
+        try {
+            blobStore.containerExists(containerName);
+            fail("Wrong container name not recognized");
+        } catch (IllegalArgumentException e) {
+        }
+    }
+
+    public void testRanges() throws IOException {
+        blobStore.createContainerInLocation(null, CONTAINER_NAME);
+        String input = "abcdefgh";
+        Payload payload;
+        Blob blob = blobStore.blobBuilder("test").payload(new StringPayload(input)).build();
+        blobStore.putBlob(CONTAINER_NAME, blob);
+
+        GetOptions getOptionsRangeStartAt = new GetOptions();
+        getOptionsRangeStartAt.startAt(1);
+        Blob blobRangeStartAt = blobStore.getBlob(CONTAINER_NAME, blob.getMetadata().getName(), getOptionsRangeStartAt);
+        payload = blobRangeStartAt.getPayload();
+        try {
+            assertEquals(input.substring(1), Strings2.toStringAndClose(payload.openStream()));
+        } finally {
+            Closeables2.closeQuietly(payload);
+        }
+
+        GetOptions getOptionsRangeTail = new GetOptions();
+        getOptionsRangeTail.tail(3);
+        Blob blobRangeTail = blobStore.getBlob(CONTAINER_NAME, blob.getMetadata().getName(), getOptionsRangeTail);
+        payload = blobRangeTail.getPayload();
+        try {
+            assertEquals(input.substring(5), Strings2.toStringAndClose(payload.openStream()));
+        } finally {
+            Closeables2.closeQuietly(payload);
+        }
+
+        GetOptions getOptionsFragment = new GetOptions();
+        getOptionsFragment.range(4, 6);
+        Blob blobFragment = blobStore.getBlob(CONTAINER_NAME, blob.getMetadata().getName(), getOptionsFragment);
+        payload = blobFragment.getPayload();
+        try {
+            assertEquals(input.substring(4, 7), Strings2.toStringAndClose(payload.openStream()));
+        } finally {
+            Closeables2.closeQuietly(payload);
+        }
+    }
+
+    /** Test that BlobRequestSigner creates expected URIs.  */
+    public void testBlobRequestSigner() throws Exception {
+        String containerName = "container";
+        String blobName = "blob";
+        URI endPoint = new URI("http", "localhost",
+                String.format("/transient/%s/%s", containerName, blobName),
+                /*fragment=*/ null);
+        BlobRequestSigner signer = context.getSigner();
+        HttpRequest request;
+        HttpRequest expected;
+
+        request = signer.signGetBlob(containerName, blobName);
+        expected = HttpRequest.builder()
+                .method("GET")
+                .endpoint(endPoint)
+                .headers(request.getHeaders())
+                .build();
+        assertEquals(expected, request);
+
+        request = signer.signRemoveBlob(containerName, blobName);
+        expected = HttpRequest.builder()
+                .method("DELETE")
+                .endpoint(endPoint)
+                .headers(request.getHeaders())
+                .build();
+        assertEquals(expected, request);
+
+        Blob blob = blobStore.blobBuilder(blobName).forSigning().build();
+        request = signer.signPutBlob(containerName, blob);
+        expected = HttpRequest.builder()
+                .method("PUT")
+                .endpoint(endPoint)
+                .headers(request.getHeaders())
+                .payload(new PhantomPayload())
+                .build();
+        assertEquals(expected, request);
+    }
+
+    // public void testInvalidBlobKey() {
+    // try {
+    // blobStore.newBlob(File.separator + "testwrongblobkey");
+    // fail("Wrong blob key not recognized");
+    // } catch (IllegalArgumentException e) {}
+    //
+    // try {
+    // blobStore.newBlob("testwrongblobkey" + File.separator);
+    // fail("Wrong blob key not recognized");
+    // } catch (IllegalArgumentException e) {}
+    // }
+
+    // ---------------------------------------------------------- Private Methods
+
+    /**
+     * Creates a {@link Blob} object filled with data from a file
+     *
+     * @param keyName
+     * @param fileContent
+     * @return
+     */
+    private Blob createBlob(String keyName, File filePayload) {
+        return blobStore.blobBuilder(keyName).payload(filePayload).build();
+    }
+
+    /**
+     * Tests if container contains only the expected blobs
+     *
+     * @param containerName
+     * @param expectedBlobKeys
+     */
+    private void checkForContainerContent(final String containerName, Set<String> expectedBlobKeys) {
+        checkForContainerContent(containerName, null, expectedBlobKeys);
+    }
+
+    private void checkForContainerContent(final String containerName, String inDirectory, Set<String> expectedBlobKeys) {
+        ListContainerOptions options = ListContainerOptions.Builder.recursive();
+        if (null != inDirectory && !"".equals(inDirectory))
+            options.inDirectory(inDirectory);
+
+        PageSet<? extends StorageMetadata> blobsRetrieved = blobStore.list(containerName, options);
+        for (Iterator<? extends StorageMetadata> it = blobsRetrieved.iterator(); it.hasNext();) {
+           // TODO: FluentIterable
+           if (it.next().getType() != StorageType.BLOB) {
+              it.remove();
+           }
+        }
+
+        // nothing expected
+        if (null == expectedBlobKeys || 0 == expectedBlobKeys.size()) {
+            assertTrue(blobsRetrieved.isEmpty(), "Wrong blob number retrieved in the container [" + containerName + "]");
+            return;
+        }
+
+        // copies values
+        Set<String> expectedBlobKeysCopy = Sets.newHashSet();
+        for (String value : expectedBlobKeys) {
+            expectedBlobKeysCopy.add(value);
+        }
+        assertEquals(blobsRetrieved.size(), expectedBlobKeysCopy.size(),
+                "Wrong blob number retrieved in the container [" + containerName + "]");
+        for (StorageMetadata data : blobsRetrieved) {
+            String blobName = data.getName();
+            if (!expectedBlobKeysCopy.remove(blobName)) {
+                fail("List for container [" + containerName + "] contains unexpected value [" + blobName + "]");
+            }
+        }
+        assertTrue(expectedBlobKeysCopy.isEmpty(), "List operation for container [" + containerName
+                + "] doesn't return all values.");
+    }
+
+    /**
+     * Create a blob with putBlob method
+     */
+    private void putBlobAndCheckIt(String blobKey) {
+        Blob blob;
+
+        TestUtils.fileExists(TARGET_CONTAINER_NAME + File.separator + blobKey, false);
+
+        // create the blob
+        blob = createBlob(blobKey, TestUtils.getImageForBlobPayload());
+        String eTag = blobStore.putBlob(CONTAINER_NAME, blob);
+        assertNotNull(eTag, "putBlob result null");
+        assertNotSame(eTag, "", "putBlob result empty");
+
+        // checks if the blob exists
+        TestUtils.fileExists(TARGET_CONTAINER_NAME + File.separator + blobKey, true);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/a22a7252/apis/filesystem/src/test/resources/logging.properties
----------------------------------------------------------------------
diff --git a/apis/filesystem/src/test/resources/logging.properties b/apis/filesystem/src/test/resources/logging.properties
index 2b76983..6f45f70 100644
--- a/apis/filesystem/src/test/resources/logging.properties
+++ b/apis/filesystem/src/test/resources/logging.properties
@@ -25,5 +25,3 @@
 handlers = java.util.logging.ConsoleHandler
 java.util.logging.ConsoleHandler.level = ALL
 java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
-org.jclouds.filesystem.FilesystemAsyncBlobStore.level=ALL
-org.jclouds.filesystem.FilesystemAsyncBlobStore.handler=java.util.logging.ConsoleHandler