Move tests to test the file system API. Move the prefix and delimiter tests from BaseContainerLiveTest to BaseContainerIntegrationTest, as that class is subclassed in Filesystem integration tests. This will make sure the file system blob store will not regress.
The ListContainerTest is updated to _not_ use a file separator character, as that leads to a possible creation of directories. Instead, "-" is used as the delimiter for the delimiter option tests. Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/e4161a59 Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/e4161a59 Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/e4161a59 Branch: refs/heads/master Commit: e4161a59bbfd84e834081b0efe85d5b938798a86 Parents: 613b6bf Author: Timur Alperovich <[email protected]> Authored: Mon Jul 13 17:20:50 2015 -0700 Committer: Andrew Gaul <[email protected]> Committed: Tue Jul 14 14:11:34 2015 -0700 ---------------------------------------------------------------------- .../AtmosContainerIntegrationLiveTest.java | 10 ++++ .../integration/AtmosContainerLiveTest.java | 11 ---- .../integration/SwiftContainerLiveTest.java | 11 ---- .../internal/BaseContainerIntegrationTest.java | 55 +++++++++++++++++ .../internal/BaseContainerLiveTest.java | 62 +------------------- .../strategy/internal/ListContainerTest.java | 18 +++--- ...jectStorageContainerIntegrationLiveTest.java | 6 ++ .../HPCloudObjectStorageContainerLiveTest.java | 6 -- 8 files changed, 81 insertions(+), 98 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/e4161a59/apis/atmos/src/test/java/org/jclouds/atmos/blobstore/integration/AtmosContainerIntegrationLiveTest.java ---------------------------------------------------------------------- diff --git a/apis/atmos/src/test/java/org/jclouds/atmos/blobstore/integration/AtmosContainerIntegrationLiveTest.java b/apis/atmos/src/test/java/org/jclouds/atmos/blobstore/integration/AtmosContainerIntegrationLiveTest.java index 9963451..4db5244 100644 --- a/apis/atmos/src/test/java/org/jclouds/atmos/blobstore/integration/AtmosContainerIntegrationLiveTest.java +++ b/apis/atmos/src/test/java/org/jclouds/atmos/blobstore/integration/AtmosContainerIntegrationLiveTest.java @@ -50,4 +50,14 @@ public class AtmosContainerIntegrationLiveTest extends BaseContainerIntegrationT public void testListContainerWithZeroMaxResults() throws Exception { throw new SkipException("Atmos requires a positive integer for max results"); } + + @Override + public void testContainerListWithPrefix() { + throw new SkipException("Prefix option has not been plumbed down to Atmos"); + } + + @Override + public void testDelimiterList() { + throw new SkipException("Delimiter support is not yet implemented"); + } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/e4161a59/apis/atmos/src/test/java/org/jclouds/atmos/blobstore/integration/AtmosContainerLiveTest.java ---------------------------------------------------------------------- diff --git a/apis/atmos/src/test/java/org/jclouds/atmos/blobstore/integration/AtmosContainerLiveTest.java b/apis/atmos/src/test/java/org/jclouds/atmos/blobstore/integration/AtmosContainerLiveTest.java index 7c9e0b1..8c45388 100644 --- a/apis/atmos/src/test/java/org/jclouds/atmos/blobstore/integration/AtmosContainerLiveTest.java +++ b/apis/atmos/src/test/java/org/jclouds/atmos/blobstore/integration/AtmosContainerLiveTest.java @@ -17,7 +17,6 @@ package org.jclouds.atmos.blobstore.integration; import org.jclouds.blobstore.integration.internal.BaseContainerLiveTest; -import org.testng.SkipException; import org.testng.annotations.Test; @Test(groups = { "live" }) @@ -25,14 +24,4 @@ public class AtmosContainerLiveTest extends BaseContainerLiveTest { public AtmosContainerLiveTest() { provider = "atmos"; } - - @Override - public void testContainerListWithPrefix() { - throw new SkipException("Prefix option has not been plumbed down to Atmos"); - } - - @Override - public void testDelimiterList() { - throw new SkipException("Delimiter support is not yet implemented"); - } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/e4161a59/apis/swift/src/test/java/org/jclouds/openstack/swift/blobstore/integration/SwiftContainerLiveTest.java ---------------------------------------------------------------------- diff --git a/apis/swift/src/test/java/org/jclouds/openstack/swift/blobstore/integration/SwiftContainerLiveTest.java b/apis/swift/src/test/java/org/jclouds/openstack/swift/blobstore/integration/SwiftContainerLiveTest.java index 6569b4c..7291e5a 100644 --- a/apis/swift/src/test/java/org/jclouds/openstack/swift/blobstore/integration/SwiftContainerLiveTest.java +++ b/apis/swift/src/test/java/org/jclouds/openstack/swift/blobstore/integration/SwiftContainerLiveTest.java @@ -22,7 +22,6 @@ import java.util.Properties; import org.jclouds.blobstore.integration.internal.BaseContainerLiveTest; import org.jclouds.openstack.keystone.v2_0.config.KeystoneProperties; -import org.testng.SkipException; import org.testng.annotations.Test; @Test(groups = "live", testName = "SwiftContainerLiveTest" ) @@ -53,14 +52,4 @@ public class SwiftContainerLiveTest extends BaseContainerLiveTest { IOException { super.testPublicAccessInNonDefaultLocationWithBigBlob(); } - - @Override - public void testContainerListWithPrefix() { - throw new SkipException("Prefix option has not been plumbed down to Swift"); - } - - @Override - public void testDelimiterList() { - throw new SkipException("The test fails as the path parameter elides subdirectories"); - } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/e4161a59/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerIntegrationTest.java ---------------------------------------------------------------------- diff --git a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerIntegrationTest.java b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerIntegrationTest.java index 66f3274..832848d 100644 --- a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerIntegrationTest.java +++ b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerIntegrationTest.java @@ -30,6 +30,7 @@ import static org.testng.Assert.assertTrue; import java.io.File; import java.io.IOException; +import java.util.HashSet; import java.util.Iterator; import java.util.Set; import java.util.concurrent.ExecutionException; @@ -49,6 +50,7 @@ import org.jclouds.blobstore.options.ListContainerOptions; import org.testng.annotations.Test; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; import com.google.common.io.ByteSource; import com.google.common.util.concurrent.Uninterruptibles; @@ -516,6 +518,59 @@ public class BaseContainerIntegrationTest extends BaseBlobStoreIntegrationTest { } } + @Test(groups = {"integration", "live"}) + public void testContainerListWithPrefix() throws InterruptedException { + final String containerName = getContainerName(); + BlobStore blobStore = view.getBlobStore(); + String prefix = "blob"; + try { + blobStore.putBlob(containerName, blobStore.blobBuilder(prefix).payload("").build()); + blobStore.putBlob(containerName, blobStore.blobBuilder(prefix + "foo").payload("").build()); + blobStore.putBlob(containerName, blobStore.blobBuilder(prefix + "bar").payload("").build()); + blobStore.putBlob(containerName, blobStore.blobBuilder("foo").payload("").build()); + checkEqualNames(ImmutableSet.of(prefix, prefix + "foo", prefix + "bar"), + blobStore.list(containerName, ListContainerOptions.Builder.prefix(prefix))); + } + finally { + returnContainer(containerName); + } + } + + @Test(groups = {"integration", "live"}) + public void testDelimiterList() throws InterruptedException { + final String containerName = getContainerName(); + BlobStore blobStore = view.getBlobStore(); + String payload = "foo"; + try { + blobStore.putBlob(containerName, blobStore.blobBuilder("test-foo-foo").payload(payload).build()); + blobStore.putBlob(containerName, blobStore.blobBuilder("test-bar-foo").payload(payload).build()); + blobStore.putBlob(containerName, blobStore.blobBuilder("foo").payload(payload).build()); + // NOTE: the test does not work if we use a file separator character ("/" or "\"), as the file system blob + // store will create directories when putting such a blob. When listing results, these directories will also + // show up in the result set. + checkEqualNames(ImmutableSet.of("foo", "test-"), blobStore.list(containerName, + ListContainerOptions.Builder.delimiter("-"))); + checkEqualNames(ImmutableSet.of("test-foo-foo", "test-bar-foo", "foo"), + blobStore.list(containerName, ListContainerOptions.Builder.delimiter("."))); + + blobStore.putBlob(containerName, blobStore.blobBuilder("bar").payload(payload).build()); + blobStore.putBlob(containerName, blobStore.blobBuilder("bazar").payload(payload).build()); + checkEqualNames(ImmutableSet.of("bar", "baza"), blobStore.list(containerName, + ListContainerOptions.Builder.delimiter("a").prefix("ba"))); + } finally { + returnContainer(containerName); + } + } + + private void checkEqualNames(ImmutableSet<String> expectedSet, PageSet<? extends StorageMetadata> results) { + Set<String> names = new HashSet<String>(); + for (StorageMetadata sm : results) { + names.add(sm.getName()); + } + + assertThat(names).containsOnlyElementsOf(expectedSet); + } + protected void addAlphabetUnderRoot(String containerName) throws InterruptedException { for (char letter = 'a'; letter <= 'z'; letter++) { view.getBlobStore().putBlob(containerName, http://git-wip-us.apache.org/repos/asf/jclouds/blob/e4161a59/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerLiveTest.java ---------------------------------------------------------------------- diff --git a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerLiveTest.java b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerLiveTest.java index 9a9c5e9..cd234cd 100644 --- a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerLiveTest.java +++ b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerLiveTest.java @@ -18,7 +18,6 @@ package org.jclouds.blobstore.integration.internal; import static java.util.concurrent.TimeUnit.SECONDS; -import static org.assertj.core.api.Assertions.assertThat; import static org.jclouds.blobstore.options.CreateContainerOptions.Builder.publicRead; import static org.jclouds.util.Predicates2.retry; import static org.testng.Assert.assertEquals; @@ -28,17 +27,12 @@ import static org.testng.Assert.assertTrue; import java.io.IOException; import java.net.MalformedURLException; import java.util.Collections; -import java.util.HashSet; import java.util.List; -import java.util.Set; import java.util.logging.Logger; -import com.google.common.net.HostAndPort; import org.jclouds.blobstore.BlobStore; import org.jclouds.blobstore.domain.BlobMetadata; -import org.jclouds.blobstore.domain.PageSet; import org.jclouds.blobstore.domain.StorageMetadata; -import org.jclouds.blobstore.options.ListContainerOptions; import org.jclouds.domain.Location; import org.jclouds.javax.annotation.Nullable; import org.jclouds.predicates.SocketOpen; @@ -49,9 +43,9 @@ import org.testng.annotations.Test; import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.base.Strings; -import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; +import com.google.common.net.HostAndPort; public class BaseContainerLiveTest extends BaseBlobStoreIntegrationTest { @@ -121,60 +115,6 @@ public class BaseContainerLiveTest extends BaseBlobStoreIntegrationTest { runCreateContainerInLocation(payload, nonDefault); } - @Test(groups = "live") - public void testContainerListWithPrefix() throws InterruptedException { - final String containerName = getContainerName(); - BlobStore blobStore = view.getBlobStore(); - String prefix = "blob"; - try { - blobStore.putBlob(containerName, blobStore.blobBuilder(prefix).payload("").build()); - blobStore.putBlob(containerName, blobStore.blobBuilder(prefix + "foo").payload("").build()); - blobStore.putBlob(containerName, blobStore.blobBuilder(prefix + "bar").payload("").build()); - blobStore.putBlob(containerName, blobStore.blobBuilder("foo").payload("").build()); - checkEqualNames(ImmutableSet.of(prefix, prefix + "foo", prefix + "bar"), - blobStore.list(containerName, ListContainerOptions.Builder.prefix(prefix))); - } - finally { - returnContainer(containerName); - } - } - - @Test(groups = "live") - public void testDelimiterList() throws InterruptedException { - final String containerName = getContainerName(); - BlobStore blobStore = view.getBlobStore(); - String payload = "foo"; - try { - blobStore.putBlob(containerName, blobStore.blobBuilder("test/foo/foo").payload(payload).build()); - blobStore.putBlob(containerName, blobStore.blobBuilder("test/bar/foo").payload(payload).build()); - blobStore.putBlob(containerName, blobStore.blobBuilder("foo").payload(payload).build()); - blobStore.putBlob(containerName, blobStore.blobBuilder("test-foo").payload(payload).build()); - blobStore.putBlob(containerName, blobStore.blobBuilder("test-bar").payload(payload).build()); - checkEqualNames(ImmutableSet.of("foo", "test/", "test-foo", "test-bar"), blobStore.list( - containerName, ListContainerOptions.Builder.delimiter("/"))); - checkEqualNames(ImmutableSet.of("test/foo/foo", "test/bar/foo", "foo", "test-foo", "test-bar"), - blobStore.list(containerName, ListContainerOptions.Builder.delimiter("\\"))); - checkEqualNames(ImmutableSet.of("test-", "test/foo/foo", "test/bar/foo", "foo"), blobStore.list( - containerName, ListContainerOptions.Builder.delimiter("-"))); - - blobStore.putBlob(containerName, blobStore.blobBuilder("bar").payload(payload).build()); - blobStore.putBlob(containerName, blobStore.blobBuilder("bazar").payload(payload).build()); - checkEqualNames(ImmutableSet.of("bar", "baza"), blobStore.list(containerName, - ListContainerOptions.Builder.delimiter("a").prefix("ba"))); - } finally { - returnContainer(containerName); - } - } - - private void checkEqualNames(ImmutableSet<String> expectedSet, PageSet<? extends StorageMetadata> results) { - Set<String> names = new HashSet<String>(); - for (StorageMetadata sm : results) { - names.add(sm.getName()); - } - - assertThat(names).containsOnlyElementsOf(expectedSet); - } - private void runCreateContainerInLocation(String payload, Location nonDefault) throws InterruptedException, IOException { String blobName = "hello"; http://git-wip-us.apache.org/repos/asf/jclouds/blob/e4161a59/blobstore/src/test/java/org/jclouds/blobstore/strategy/internal/ListContainerTest.java ---------------------------------------------------------------------- diff --git a/blobstore/src/test/java/org/jclouds/blobstore/strategy/internal/ListContainerTest.java b/blobstore/src/test/java/org/jclouds/blobstore/strategy/internal/ListContainerTest.java index acef128..3a87d37 100644 --- a/blobstore/src/test/java/org/jclouds/blobstore/strategy/internal/ListContainerTest.java +++ b/blobstore/src/test/java/org/jclouds/blobstore/strategy/internal/ListContainerTest.java @@ -71,25 +71,25 @@ public class ListContainerTest { assertThat(Iterables.get(results, 2).getType()).isEqualTo(StorageType.BLOB); } - public void testListWithPrefixAndSeparator() { + public void testListWithPrefixAndDelimiter() { String containerName = "prefixWithSeparator"; String prefix = "foo"; blobStore.createContainerInLocation(null, containerName); - blobStore.putBlob(containerName, blobStore.blobBuilder(prefix + "/object").payload("").build()); - blobStore.putBlob(containerName, blobStore.blobBuilder(prefix + "bar/object").payload("") + blobStore.putBlob(containerName, blobStore.blobBuilder(prefix + "-object").payload("").build()); + blobStore.putBlob(containerName, blobStore.blobBuilder(prefix + "bar-object").payload("") .build()); - blobStore.putBlob(containerName, blobStore.blobBuilder(prefix + "baz/object").payload("") + blobStore.putBlob(containerName, blobStore.blobBuilder(prefix + "baz-object").payload("") .build()); - blobStore.putBlob(containerName, blobStore.blobBuilder("bar/object").payload("").build()); + blobStore.putBlob(containerName, blobStore.blobBuilder("bar-object").payload("").build()); Iterable<? extends StorageMetadata> results = concatter.execute(containerName, - ListContainerOptions.Builder.prefix(prefix)); + ListContainerOptions.Builder.prefix(prefix).delimiter("-")); assertThat(Iterables.size(results)).isEqualTo(3); assertThat(Iterables.get(results, 0).getType()).isEqualTo(StorageType.RELATIVE_PATH); - assertThat(Iterables.get(results, 0).getName()).isEqualTo(prefix + "/"); - assertThat(Iterables.get(results, 1).getName()).isEqualTo(prefix + "bar/"); + assertThat(Iterables.get(results, 0).getName()).isEqualTo(prefix + "-"); + assertThat(Iterables.get(results, 1).getName()).isEqualTo(prefix + "bar-"); assertThat(Iterables.get(results, 1).getType()).isEqualTo(StorageType.RELATIVE_PATH); - assertThat(Iterables.get(results, 2).getName()).isEqualTo(prefix + "baz/"); + assertThat(Iterables.get(results, 2).getName()).isEqualTo(prefix + "baz-"); assertThat(Iterables.get(results, 2).getType()).isEqualTo(StorageType.RELATIVE_PATH); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/e4161a59/providers/hpcloud-objectstorage/src/test/java/org/jclouds/hpcloud/objectstorage/blobstore/integration/HPCloudObjectStorageContainerIntegrationLiveTest.java ---------------------------------------------------------------------- diff --git a/providers/hpcloud-objectstorage/src/test/java/org/jclouds/hpcloud/objectstorage/blobstore/integration/HPCloudObjectStorageContainerIntegrationLiveTest.java b/providers/hpcloud-objectstorage/src/test/java/org/jclouds/hpcloud/objectstorage/blobstore/integration/HPCloudObjectStorageContainerIntegrationLiveTest.java index 3c810c5..c16a2df 100644 --- a/providers/hpcloud-objectstorage/src/test/java/org/jclouds/hpcloud/objectstorage/blobstore/integration/HPCloudObjectStorageContainerIntegrationLiveTest.java +++ b/providers/hpcloud-objectstorage/src/test/java/org/jclouds/hpcloud/objectstorage/blobstore/integration/HPCloudObjectStorageContainerIntegrationLiveTest.java @@ -17,6 +17,7 @@ package org.jclouds.hpcloud.objectstorage.blobstore.integration; import org.jclouds.openstack.swift.blobstore.integration.SwiftContainerIntegrationLiveTest; +import org.testng.SkipException; import org.testng.annotations.Test; @Test(groups = "live") @@ -25,4 +26,9 @@ public class HPCloudObjectStorageContainerIntegrationLiveTest extends SwiftConta provider = "hpcloud-objectstorage"; } + @Override + @Test + public void testDelimiterList() { + throw new SkipException("\"path\" parameter elides subdirectories"); + } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/e4161a59/providers/hpcloud-objectstorage/src/test/java/org/jclouds/hpcloud/objectstorage/blobstore/integration/HPCloudObjectStorageContainerLiveTest.java ---------------------------------------------------------------------- diff --git a/providers/hpcloud-objectstorage/src/test/java/org/jclouds/hpcloud/objectstorage/blobstore/integration/HPCloudObjectStorageContainerLiveTest.java b/providers/hpcloud-objectstorage/src/test/java/org/jclouds/hpcloud/objectstorage/blobstore/integration/HPCloudObjectStorageContainerLiveTest.java index ca112cd..5b92754 100644 --- a/providers/hpcloud-objectstorage/src/test/java/org/jclouds/hpcloud/objectstorage/blobstore/integration/HPCloudObjectStorageContainerLiveTest.java +++ b/providers/hpcloud-objectstorage/src/test/java/org/jclouds/hpcloud/objectstorage/blobstore/integration/HPCloudObjectStorageContainerLiveTest.java @@ -33,10 +33,4 @@ public class HPCloudObjectStorageContainerLiveTest extends BaseContainerLiveTest @Override @Test public void testPublicAccessInNonDefaultLocationWithBigBlob() { throw new SkipException("Locations are ignored"); } - - @Override - @Test - public void testDelimiterList() { - throw new SkipException("\"path\" parameter elides subdirectories"); - } }
