You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ma...@apache.org on 2018/10/15 17:59:07 UTC

svn commit: r1843932 - in /jackrabbit/oak/trunk/oak-blob-cloud/src/test/java/org/apache/jackrabbit/oak/blob/cloud/s3: TestS3DataStore.java TestS3Ds.java

Author: mattryan
Date: Mon Oct 15 17:59:07 2018
New Revision: 1843932

URL: http://svn.apache.org/viewvc?rev=1843932&view=rev
Log:
OAK-7807: Fix S3 bucket cleanup in tests.

Two approaches used to accomplish this:
- Backdate the test start date by one minute to account for drift between test system and S3
- Remember all created buckets and verify deletion at the end of the test suite

Modified:
    jackrabbit/oak/trunk/oak-blob-cloud/src/test/java/org/apache/jackrabbit/oak/blob/cloud/s3/TestS3DataStore.java
    jackrabbit/oak/trunk/oak-blob-cloud/src/test/java/org/apache/jackrabbit/oak/blob/cloud/s3/TestS3Ds.java

Modified: jackrabbit/oak/trunk/oak-blob-cloud/src/test/java/org/apache/jackrabbit/oak/blob/cloud/s3/TestS3DataStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob-cloud/src/test/java/org/apache/jackrabbit/oak/blob/cloud/s3/TestS3DataStore.java?rev=1843932&r1=1843931&r2=1843932&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-blob-cloud/src/test/java/org/apache/jackrabbit/oak/blob/cloud/s3/TestS3DataStore.java (original)
+++ jackrabbit/oak/trunk/oak-blob-cloud/src/test/java/org/apache/jackrabbit/oak/blob/cloud/s3/TestS3DataStore.java Mon Oct 15 17:59:07 2018
@@ -16,6 +16,19 @@
  */
 package org.apache.jackrabbit.oak.blob.cloud.s3;
 
+import static org.apache.commons.codec.binary.Hex.encodeHexString;
+import static org.apache.commons.io.FileUtils.copyInputStreamToFile;
+import static org.apache.jackrabbit.oak.blob.cloud.s3.S3DataStoreUtils.getFixtures;
+import static org.apache.jackrabbit.oak.blob.cloud.s3.S3DataStoreUtils.getS3DataStore;
+import static org.apache.jackrabbit.oak.blob.cloud.s3.S3DataStoreUtils.isS3Configured;
+import static org.apache.jackrabbit.oak.plugins.blob.datastore.DataStoreUtils.randomStream;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeTrue;
+
 import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.InputStream;
@@ -35,6 +48,7 @@ import com.google.common.base.Strings;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.time.DateUtils;
 import org.apache.jackrabbit.core.data.DataRecord;
 import org.apache.jackrabbit.core.data.DataStore;
 import org.junit.After;
@@ -48,19 +62,6 @@ import org.junit.runners.Parameterized;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static org.apache.commons.codec.binary.Hex.encodeHexString;
-import static org.apache.commons.io.FileUtils.copyInputStreamToFile;
-import static org.apache.jackrabbit.oak.blob.cloud.s3.S3DataStoreUtils.getFixtures;
-import static org.apache.jackrabbit.oak.blob.cloud.s3.S3DataStoreUtils.getS3DataStore;
-import static org.apache.jackrabbit.oak.blob.cloud.s3.S3DataStoreUtils.isS3Configured;
-import static org.apache.jackrabbit.oak.plugins.blob.datastore.DataStoreUtils.randomStream;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.junit.Assume.assumeTrue;
-
 /**
  * Simple tests for S3DataStore.
  */
@@ -93,7 +94,9 @@ public class TestS3DataStore {
 
     @Before
     public void setUp() throws Exception {
-        startTime = new Date();
+        // Backdate by 1 minute, to allow for time drift when deleting
+        // resources created by the test.
+        startTime = DateUtils.addMinutes(new Date(), -1);
 
         dataStoreDir = folder.newFolder();
         props = new Properties();

Modified: jackrabbit/oak/trunk/oak-blob-cloud/src/test/java/org/apache/jackrabbit/oak/blob/cloud/s3/TestS3Ds.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob-cloud/src/test/java/org/apache/jackrabbit/oak/blob/cloud/s3/TestS3Ds.java?rev=1843932&r1=1843931&r2=1843932&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-blob-cloud/src/test/java/org/apache/jackrabbit/oak/blob/cloud/s3/TestS3Ds.java (original)
+++ jackrabbit/oak/trunk/oak-blob-cloud/src/test/java/org/apache/jackrabbit/oak/blob/cloud/s3/TestS3Ds.java Mon Oct 15 17:59:07 2018
@@ -16,30 +16,31 @@
  */
 package org.apache.jackrabbit.oak.blob.cloud.s3;
 
+import static org.apache.jackrabbit.oak.blob.cloud.s3.S3DataStoreUtils.getFixtures;
+import static org.apache.jackrabbit.oak.blob.cloud.s3.S3DataStoreUtils.getS3Config;
+import static org.apache.jackrabbit.oak.blob.cloud.s3.S3DataStoreUtils.getS3DataStore;
+import static org.apache.jackrabbit.oak.blob.cloud.s3.S3DataStoreUtils.isS3Configured;
+import static org.junit.Assume.assumeTrue;
+
 import java.util.Date;
 import java.util.List;
 import java.util.Properties;
 
 import javax.jcr.RepositoryException;
 
+import com.google.common.collect.Lists;
+import org.apache.commons.lang3.time.DateUtils;
 import org.apache.jackrabbit.core.data.DataStore;
 import org.apache.jackrabbit.oak.plugins.blob.datastore.AbstractDataStoreTest;
 import org.junit.After;
-import org.junit.Assume;
+import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
-import org.mockito.internal.matchers.Equals;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static org.apache.jackrabbit.oak.blob.cloud.s3.S3DataStoreUtils.getFixtures;
-import static org.apache.jackrabbit.oak.blob.cloud.s3.S3DataStoreUtils.getS3Config;
-import static org.apache.jackrabbit.oak.blob.cloud.s3.S3DataStoreUtils.getS3DataStore;
-import static org.apache.jackrabbit.oak.blob.cloud.s3.S3DataStoreUtils.isS3Configured;
-import static org.junit.Assume.assumeTrue;
-
 /**
  * Test {@link S3DataStore} with S3Backend and local cache on.
  * It requires to pass aws config file via system property or system properties by prefixing with 'ds.'.
@@ -52,7 +53,8 @@ public class TestS3Ds extends AbstractDa
 
     protected static final Logger LOG = LoggerFactory.getLogger(TestS3Ds.class);
 
-    private Date startTime = null;
+    private static Date overallStartTime = getBackdatedDate();
+    private Date thisTestStartTime = null;
 
     protected Properties props;
 
@@ -66,19 +68,27 @@ public class TestS3Ds extends AbstractDa
         return getFixtures();
     }
 
+    public static Date getBackdatedDate() {
+        // Use a backdated date to accommodate time drift when deleting created resources.
+        return DateUtils.addMinutes(new Date(), -1);
+    }
+
     @BeforeClass
     public static void assumptions() {
         assumeTrue(isS3Configured());
     }
 
+    private static List<String> createdBucketNames = Lists.newArrayList();
+
     @Override
     @Before
     public void setUp() throws Exception {
         props = getS3Config();
-        startTime = new Date();
+        thisTestStartTime = getBackdatedDate();
         bucket =
             String.valueOf(randomGen.nextInt(9999)) + "-" + String.valueOf(randomGen.nextInt(9999))
-                + "-test";
+                + "-s3ds-unittest-autogenerated";
+        createdBucketNames.add(bucket);
         props.setProperty(S3Constants.S3_BUCKET, bucket);
         props.setProperty("secret", "123456");
         super.setUp();
@@ -89,9 +99,22 @@ public class TestS3Ds extends AbstractDa
     public void tearDown() {
         try {
             super.tearDown();
-            S3DataStoreUtils.deleteBucket(bucket, startTime);
-        } catch (Exception ignore) {
+        }
+        catch (Exception ignore) { }
+
+        try {
+            S3DataStoreUtils.deleteBucket(bucket, thisTestStartTime);
+        }
+        catch (Exception ignore) { }
+    }
 
+    @AfterClass
+    public static void verifyAllBucketsDeleted() {
+        for (String bucket : createdBucketNames) {
+            try {
+                S3DataStoreUtils.deleteBucket(bucket, overallStartTime);
+            }
+            catch (Exception ignore) { }
         }
     }