diff --git a/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/BlobStoreFixture.java b/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/BlobStoreFixture.java
index 4c8f8741b2..3abdda6d29 100644
--- a/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/BlobStoreFixture.java
+++ b/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/BlobStoreFixture.java
@@ -23,18 +23,25 @@ import java.io.Closeable;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.util.Dictionary;
 import java.util.Enumeration;
 import java.util.Map;
+import java.util.Properties;
 
 import javax.annotation.CheckForNull;
 
+import com.google.common.base.Predicate;
 import com.google.common.base.Strings;
 import com.google.common.collect.Maps;
 import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
 import org.apache.felix.cm.file.ConfigurationHandler;
 import org.apache.jackrabbit.core.data.DataStore;
+import org.apache.jackrabbit.core.data.DataStoreException;
 import org.apache.jackrabbit.core.data.FileDataStore;
+import org.apache.jackrabbit.oak.blob.cloud.s3.S3Constants;
+import org.apache.jackrabbit.oak.blob.cloud.s3.S3DataStore;
 import org.apache.jackrabbit.oak.commons.PropertiesUtil;
 import org.apache.jackrabbit.oak.plugins.blob.BlobStoreStats;
 import org.apache.jackrabbit.oak.plugins.blob.datastore.DataStoreBlobStore;
@@ -95,6 +102,8 @@ public abstract class BlobStoreFixture implements Closeable{
             return getFileBlobStore(basedir);
         } else if ("MEM".equals(blobStore)) {
             return getMemoryBlobStore();
+        } else if ("S3DS".equals(blobStore)) {
+            return getS3DataStore(basedir);
         }
 
         return null;
@@ -132,6 +141,70 @@ public abstract class BlobStoreFixture implements Closeable{
         };
     }
 
+    public static BlobStoreFixture getS3DataStore(final File dataStoreDir) {
+        return new BlobStoreFixture("S3DS") {
+            private File storeDir;
+            private S3DataStore s3ds;
+            private Properties props = getS3Config();
+
+            @Override
+            public BlobStore setUp() {
+                storeDir = dataStoreDir;
+                s3ds = new S3DataStore();
+                s3ds.setProperties(props);
+                try {
+                    s3ds.init(storeDir.getPath());
+                } catch (DataStoreException dse) {
+                    dse.printStackTrace();
+                }
+                return new DataStoreBlobStore(s3ds);
+            }
+
+            @Override
+            public void tearDown() {
+                try {
+                    s3ds.close();
+                } catch (DataStoreException dse) {
+                    dse.printStackTrace();
+                }
+                FileUtils.deleteQuietly(storeDir);
+            }
+
+            @Override
+            public long size() {
+                return FileUtils.sizeOfDirectory(storeDir);
+            }
+
+            private  Properties getS3Config() {
+                String config = System.getProperty("s3.config");
+                if (Strings.isNullOrEmpty(config)) {
+                    throw new IllegalArgumentException("Setup -Ds3.config to point to aws.properties file");
+                }
+                Properties props = new Properties();
+                if (new File(config).exists()) {
+                    InputStream is = null;
+                    try {
+                        is = new FileInputStream(config);
+                        props.load(is);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    } finally {
+                        IOUtils.closeQuietly(is);
+                    }
+                    props.putAll(getConfig());
+                    Map filtered = Maps.filterEntries(Maps.fromProperties(props), new Predicate<Map.Entry<? extends Object, ? extends Object>>() {
+                        @Override public boolean apply(Map.Entry<? extends Object, ? extends Object> input) {
+                            return !Strings.isNullOrEmpty((String) input.getValue());
+                        }
+                    });
+                    props = new Properties();
+                    props.putAll(filtered);
+                }
+                return props;
+            }
+        };
+    }
+
     public static BlobStoreFixture getFileBlobStore(final File basedir) {
         return new BlobStoreFixture("FBS") {
             private File storeDir;
