Author: amitj
Date: Thu Nov 24 05:02:09 2016
New Revision: 1771076

URL: http://svn.apache.org/viewvc?rev=1771076&view=rev
Log:
OAK-5146: S3 getOrCreateReferenceKey() should provide a default implementation

* Delegating to super.getOrCreateReferenceKey() to use a transient key when 
secret not configured
* Tests

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

Modified: 
jackrabbit/oak/trunk/oak-blob-cloud/src/main/java/org/apache/jackrabbit/oak/blob/cloud/s3/S3Backend.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob-cloud/src/main/java/org/apache/jackrabbit/oak/blob/cloud/s3/S3Backend.java?rev=1771076&r1=1771075&r2=1771076&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-blob-cloud/src/main/java/org/apache/jackrabbit/oak/blob/cloud/s3/S3Backend.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-blob-cloud/src/main/java/org/apache/jackrabbit/oak/blob/cloud/s3/S3Backend.java
 Thu Nov 24 05:02:09 2016
@@ -527,7 +527,7 @@ public class S3Backend extends AbstractS
                 return secret.getBytes("UTF-8");
             }
             LOG.warn("secret not defined");
-            throw new DataStoreException("secret not defined");
+            return super.getOrCreateReferenceKey();
         } catch (UnsupportedEncodingException e) {
             throw new DataStoreException(e);
         }

Modified: 
jackrabbit/oak/trunk/oak-blob-cloud/src/test/java/org/apache/jackrabbit/oak/blob/cloud/s3/S3DataStoreUtils.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob-cloud/src/test/java/org/apache/jackrabbit/oak/blob/cloud/s3/S3DataStoreUtils.java?rev=1771076&r1=1771075&r2=1771076&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-blob-cloud/src/test/java/org/apache/jackrabbit/oak/blob/cloud/s3/S3DataStoreUtils.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-blob-cloud/src/test/java/org/apache/jackrabbit/oak/blob/cloud/s3/S3DataStoreUtils.java
 Thu Nov 24 05:02:09 2016
@@ -52,8 +52,8 @@ public class S3DataStoreUtils extends Da
 
     private static final String DEFAULT_CONFIG_PATH = 
"./src/test/resources/aws.properties";
 
-    private static Class JR2_S3 = SharedS3DataStore.class;
-    private static Class S3 = S3DataStore.class;
+    protected static Class JR2_S3 = SharedS3DataStore.class;
+    protected static Class S3 = S3DataStore.class;
 
     public static List<String> getFixtures() {
         return ImmutableList.of(

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=1771076&r1=1771075&r2=1771076&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
 Thu Nov 24 05:02:09 2016
@@ -22,6 +22,8 @@ import java.util.List;
 import java.util.Properties;
 import java.util.Random;
 
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
 import javax.jcr.RepositoryException;
 
 import org.apache.jackrabbit.core.data.DataRecord;
@@ -37,9 +39,12 @@ 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.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.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assume.assumeTrue;
 
@@ -90,14 +95,54 @@ public class TestS3DataStore {
     @Test
     public void testNoSecretDefined() throws Exception {
         assumeTrue(isS3Configured());
-        Random randomGen = new Random();
+        assumeTrue(s3Class.equals(S3DataStoreUtils.JR2_S3.getName()));
 
+        Random randomGen = new Random();
         props = S3DataStoreUtils.getS3Config();
         ds = getS3DataStore(s3Class, props, dataStoreDir.getAbsolutePath());
         byte[] data = new byte[4096];
         randomGen.nextBytes(data);
         DataRecord rec = ds.addRecord(new ByteArrayInputStream(data));
-        Assert.assertEquals(data.length, rec.getLength());
+        assertEquals(data.length, rec.getLength());
         assertNull(rec.getReference());
     }
+
+    @Test
+    public void testNoSecretDefinedUseDefault() throws Exception {
+        assumeTrue(isS3Configured());
+        assumeTrue(s3Class.equals(S3DataStoreUtils.S3.getName()));
+
+        Random randomGen = new Random();
+        props = S3DataStoreUtils.getS3Config();
+        ds = getS3DataStore(s3Class, props, dataStoreDir.getAbsolutePath());
+        byte[] data = new byte[4096];
+        randomGen.nextBytes(data);
+        DataRecord rec = ds.addRecord(new ByteArrayInputStream(data));
+        assertEquals(data.length, rec.getLength());
+        assertNotNull(rec.getReference());
+    }
+
+    @Test
+    public void testSecretDefined() throws Exception {
+        assumeTrue(isS3Configured());
+
+        Random randomGen = new Random();
+        props = S3DataStoreUtils.getS3Config();
+        props.setProperty("secret", "123456");
+        ds = getS3DataStore(s3Class, props, dataStoreDir.getAbsolutePath());
+        byte[] data = new byte[4096];
+        randomGen.nextBytes(data);
+        DataRecord rec = ds.addRecord(new ByteArrayInputStream(data));
+        assertEquals(data.length, rec.getLength());
+        String ref = rec.getReference();
+        assertNotNull(ref);
+
+        String id = rec.getIdentifier().toString();
+        Mac mac = Mac.getInstance("HmacSHA1");
+        mac.init(new SecretKeySpec("123456".getBytes("UTF-8"), "HmacSHA1"));
+        byte[] hash = mac.doFinal(id.getBytes("UTF-8"));
+        id = id + ':' + encodeHexString(hash);
+
+        assertEquals(id, ref);
+    }
 }


Reply via email to