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);
+ }
}