diff --git a/core/src/main/java/com/backblaze/b2/client/structures/B2ReplicationRule.java b/core/src/main/java/com/backblaze/b2/client/structures/B2ReplicationRule.java index 145647554..2eb0f155a 100644 --- a/core/src/main/java/com/backblaze/b2/client/structures/B2ReplicationRule.java +++ b/core/src/main/java/com/backblaze/b2/client/structures/B2ReplicationRule.java @@ -53,21 +53,30 @@ public class B2ReplicationRule { @B2Json.required private final boolean isEnabled; + /** + * Indicates if existing files in the bucket will be replicated (if they have not already been replicated + * to the destination bucket this rule specifies). + */ + @B2Json.optionalWithDefault(defaultValue = "false") + private final boolean includeExistingFiles; + /** * Initializes a new, immutable rule. */ @B2Json.constructor(params = "replicationRuleName, destinationBucketId, priority, " + - "fileNamePrefix, isEnabled") + "fileNamePrefix, isEnabled, includeExistingFiles") public B2ReplicationRule(String replicationRuleName, String destinationBucketId, int priority, String fileNamePrefix, - boolean isEnabled) { + boolean isEnabled, + boolean includeExistingFiles) { this.replicationRuleName = replicationRuleName; this.destinationBucketId = destinationBucketId; this.priority = priority; this.fileNamePrefix = fileNamePrefix; this.isEnabled = isEnabled; + this.includeExistingFiles = includeExistingFiles; } public String getReplicationRuleName() { @@ -90,6 +99,10 @@ public boolean isEnabled() { return isEnabled; } + public boolean includeExistingFiles() { + return includeExistingFiles; + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -97,6 +110,7 @@ public boolean equals(Object o) { B2ReplicationRule that = (B2ReplicationRule) o; return priority == that.priority && isEnabled == that.isEnabled && + includeExistingFiles == that.includeExistingFiles && Objects.equals(replicationRuleName, that.replicationRuleName) && Objects.equals(destinationBucketId, that.destinationBucketId) && Objects.equals(fileNamePrefix, that.fileNamePrefix); @@ -109,7 +123,8 @@ public int hashCode() { destinationBucketId, priority, fileNamePrefix, - isEnabled + isEnabled, + includeExistingFiles ); } @@ -121,6 +136,7 @@ public String toString() { ", priority=" + priority + ", fileNamePrefix='" + fileNamePrefix + '\'' + ", isEnabled=" + isEnabled + + ", includeExistingFiles=" + includeExistingFiles + '}'; } } diff --git a/core/src/test/java/com/backblaze/b2/client/B2StorageClientImplTest.java b/core/src/test/java/com/backblaze/b2/client/B2StorageClientImplTest.java index d87926e28..6bdd148b1 100644 --- a/core/src/test/java/com/backblaze/b2/client/B2StorageClientImplTest.java +++ b/core/src/test/java/com/backblaze/b2/client/B2StorageClientImplTest.java @@ -239,14 +239,16 @@ public void testCreateBucket() throws B2Exception { "000011112222333344445555", 3, "", - false + false, + true ), new B2ReplicationRule( "my-replication-rule-2", "777011112222333344445555", 1, "abc", - true + true, + false ) ); final Map sourceToDestinationKeyMapping = new TreeMap<>(); @@ -310,10 +312,10 @@ public void testCreateBucket() throws B2Exception { "sourceApplicationKeyId='123a0a1a2a3a4a50000bc614e', " + "replicationRules=[B2ReplicationRule{replicationRuleName='my-replication-rule', " + "destinationBucketId='000011112222333344445555', priority=3, fileNamePrefix='', " + - "isEnabled=false}, " + + "isEnabled=false, includeExistingFiles=true}, " + "B2ReplicationRule{replicationRuleName='my-replication-rule-2', " + "destinationBucketId='777011112222333344445555', priority=1, fileNamePrefix='abc', " + - "isEnabled=true}]}, " + + "isEnabled=true, includeExistingFiles=false}]}, " + "asReplicationDestination=B2DestinationConfig{" + "sourceToDestinationKeyMapping={123a0a1a2a3a4a50000bc614e=555a0a1a2a3a4a70000bc929a, " + "456a0b9a8a7a6a50000fc614e=555a0a1a2a3a4a70000bc929a}}}}),v1)", @@ -345,10 +347,10 @@ public void testCreateBucket() throws B2Exception { "sourceApplicationKeyId='123a0a1a2a3a4a50000bc614e', " + "replicationRules=[B2ReplicationRule{replicationRuleName='my-replication-rule', " + "destinationBucketId='000011112222333344445555', priority=3, fileNamePrefix='', " + - "isEnabled=false}, " + + "isEnabled=false, includeExistingFiles=true}, " + "B2ReplicationRule{replicationRuleName='my-replication-rule-2', " + "destinationBucketId='777011112222333344445555', priority=1, fileNamePrefix='abc', " + - "isEnabled=true}]}, " + + "isEnabled=true, includeExistingFiles=false}]}, " + "asReplicationDestination=B2DestinationConfig{" + "sourceToDestinationKeyMapping={123a0a1a2a3a4a50000bc614e=555a0a1a2a3a4a70000bc929a, " + "456a0b9a8a7a6a50000fc614e=555a0a1a2a3a4a70000bc929a}}}}),v1)", diff --git a/core/src/test/java/com/backblaze/b2/client/structures/B2BucketReplicationConfigurationTest.java b/core/src/test/java/com/backblaze/b2/client/structures/B2BucketReplicationConfigurationTest.java index 3836042b9..019459a7c 100644 --- a/core/src/test/java/com/backblaze/b2/client/structures/B2BucketReplicationConfigurationTest.java +++ b/core/src/test/java/com/backblaze/b2/client/structures/B2BucketReplicationConfigurationTest.java @@ -29,6 +29,7 @@ public void testToJsonAndBack_sourceOnly() { " {\n" + " \"destinationBucketId\": \"000011112222333344445555\",\n" + " \"fileNamePrefix\": \"\",\n" + + " \"includeExistingFiles\": true,\n" + " \"isEnabled\": false,\n" + " \"priority\": 3,\n" + " \"replicationRuleName\": \"my-replication-rule\"\n" + @@ -36,6 +37,7 @@ public void testToJsonAndBack_sourceOnly() { " {\n" + " \"destinationBucketId\": \"777011112222333344445555\",\n" + " \"fileNamePrefix\": \"abc\",\n" + + " \"includeExistingFiles\": false,\n" + " \"isEnabled\": true,\n" + " \"priority\": 1,\n" + " \"replicationRuleName\": \"my-replication-rule-2\"\n" + @@ -58,7 +60,8 @@ public void testToJsonAndBack_sourceOnly() { "000011112222333344445555", 3, "", - false + false, + true ) ); replicationRules.add( @@ -67,7 +70,8 @@ public void testToJsonAndBack_sourceOnly() { "777011112222333344445555", 1, "abc", - true + true, + false ) ); final B2BucketReplicationConfiguration defaultConfig = @@ -129,6 +133,7 @@ public void testToJsonAndBack_sourceAndDestination() { " {\n" + " \"destinationBucketId\": \"000011112222333344445555\",\n" + " \"fileNamePrefix\": \"\",\n" + + " \"includeExistingFiles\": true,\n" + " \"isEnabled\": false,\n" + " \"priority\": 3,\n" + " \"replicationRuleName\": \"my-replication-rule\"\n" + @@ -136,6 +141,7 @@ public void testToJsonAndBack_sourceAndDestination() { " {\n" + " \"destinationBucketId\": \"777011112222333344445555\",\n" + " \"fileNamePrefix\": \"abc\",\n" + + " \"includeExistingFiles\": false,\n" + " \"isEnabled\": true,\n" + " \"priority\": 1,\n" + " \"replicationRuleName\": \"my-replication-rule-2\"\n" + @@ -157,14 +163,16 @@ public void testToJsonAndBack_sourceAndDestination() { "000011112222333344445555", 3, "", - false + false, + true ), new B2ReplicationRule( "my-replication-rule-2", "777011112222333344445555", 1, "abc", - true + true, + false ) ); diff --git a/core/src/test/java/com/backblaze/b2/client/structures/B2BucketTest.java b/core/src/test/java/com/backblaze/b2/client/structures/B2BucketTest.java index 258aeb32c..4846308e4 100644 --- a/core/src/test/java/com/backblaze/b2/client/structures/B2BucketTest.java +++ b/core/src/test/java/com/backblaze/b2/client/structures/B2BucketTest.java @@ -59,14 +59,16 @@ public B2BucketTest() { "000011112222333344445555", 3, "", - false + false, + true ), new B2ReplicationRule( "my-replication-rule-2", "777011112222333344445555", 1, "abc", - true + true, + false ) ); @@ -296,6 +298,7 @@ public void testFromJson() { " {\n" + " \"destinationBucketId\": \"000011112222333344445555\",\n" + " \"fileNamePrefix\": \"\",\n" + + " \"includeExistingFiles\": true,\n" + " \"isEnabled\": false,\n" + " \"priority\": 3,\n" + " \"replicationRuleName\": \"my-replication-rule\"\n" + @@ -303,6 +306,7 @@ public void testFromJson() { " {\n" + " \"destinationBucketId\": \"777011112222333344445555\",\n" + " \"fileNamePrefix\": \"abc\",\n" + + " \"includeExistingFiles\": false,\n" + " \"isEnabled\": true,\n" + " \"priority\": 1,\n" + " \"replicationRuleName\": \"my-replication-rule-2\"\n" + @@ -380,6 +384,7 @@ public void testUnauthorizedToReadServerSideEncryptionThrowsException() throws B " {\n" + " \"destinationBucketId\": \"000011112222333344445555\",\n" + " \"fileNamePrefix\": \"\",\n" + + " \"includeExistingFiles\": true,\n" + " \"isEnabled\": false,\n" + " \"priority\": 3,\n" + " \"replicationRuleName\": \"my-replication-rule\"\n" + @@ -387,6 +392,7 @@ public void testUnauthorizedToReadServerSideEncryptionThrowsException() throws B " {\n" + " \"destinationBucketId\": \"777011112222333344445555\",\n" + " \"fileNamePrefix\": \"abc\",\n" + + " \"includeExistingFiles\": false,\n" + " \"isEnabled\": true,\n" + " \"priority\": 1,\n" + " \"replicationRuleName\": \"my-replication-rule-2\"\n" + diff --git a/core/src/test/java/com/backblaze/b2/client/structures/B2CreateBucketRequestRealTest.java b/core/src/test/java/com/backblaze/b2/client/structures/B2CreateBucketRequestRealTest.java index 01a6ad7b4..0ddded33a 100644 --- a/core/src/test/java/com/backblaze/b2/client/structures/B2CreateBucketRequestRealTest.java +++ b/core/src/test/java/com/backblaze/b2/client/structures/B2CreateBucketRequestRealTest.java @@ -66,14 +66,16 @@ public void testFullCreateBucketRequestReal() { "000011112222333344445555", 3, "", - false + false, + true ), new B2ReplicationRule( "my-replication-rule-2", "777011112222333344445555", 1, "abc", - true + true, + false ) ); final Map sourceToDestinationKeyMapping = mapOf( @@ -151,6 +153,7 @@ public void testFullCreateBucketRequestReal() { " {\n" + " \"destinationBucketId\": \"000011112222333344445555\",\n" + " \"fileNamePrefix\": \"\",\n" + + " \"includeExistingFiles\": true,\n" + " \"isEnabled\": false,\n" + " \"priority\": 3,\n" + " \"replicationRuleName\": \"my-replication-rule\"\n" + @@ -158,6 +161,7 @@ public void testFullCreateBucketRequestReal() { " {\n" + " \"destinationBucketId\": \"777011112222333344445555\",\n" + " \"fileNamePrefix\": \"abc\",\n" + + " \"includeExistingFiles\": false,\n" + " \"isEnabled\": true,\n" + " \"priority\": 1,\n" + " \"replicationRuleName\": \"my-replication-rule-2\"\n" + diff --git a/core/src/test/java/com/backblaze/b2/client/structures/B2ReplicationRuleTest.java b/core/src/test/java/com/backblaze/b2/client/structures/B2ReplicationRuleTest.java index 7032a06a5..61903c4f4 100644 --- a/core/src/test/java/com/backblaze/b2/client/structures/B2ReplicationRuleTest.java +++ b/core/src/test/java/com/backblaze/b2/client/structures/B2ReplicationRuleTest.java @@ -16,6 +16,7 @@ public void testToJsonAndBack() { final String jsonString = "{\n" + " \"destinationBucketId\": \"000011112222333344445555\",\n" + " \"fileNamePrefix\": \"\",\n" + + " \"includeExistingFiles\": true,\n" + " \"isEnabled\": false,\n" + " \"priority\": 3,\n" + " \"replicationRuleName\": \"my-replication-rule\"\n" + @@ -31,10 +32,37 @@ public void testToJsonAndBack() { "000011112222333344445555", 3, "", - false + false, + true ); final String convertedJson = B2Json.toJsonOrThrowRuntime(defaultConfig); assertEquals(defaultConfig, converted); assertEquals(jsonString, convertedJson); } -} \ No newline at end of file + + @Test + public void testFromJsonWithOptionalFieldsNotSet() { + final String jsonString = "{\n" + + " \"destinationBucketId\": \"000011112222333344445555\",\n" + + " \"fileNamePrefix\": \"\",\n" + + " \"isEnabled\": false,\n" + + " \"priority\": 3,\n" + + " \"replicationRuleName\": \"my-replication-rule\"\n" + + "}"; + final B2ReplicationRule converted = + B2Json.fromJsonOrThrowRuntime( + jsonString, + B2ReplicationRule.class + ); + final B2ReplicationRule defaultConfig = + new B2ReplicationRule( + "my-replication-rule", + "000011112222333344445555", + 3, + "", + false, + false + ); + assertEquals(defaultConfig, converted); + } +} diff --git a/core/src/test/java/com/backblaze/b2/client/structures/B2UpdateBucketRequestTest.java b/core/src/test/java/com/backblaze/b2/client/structures/B2UpdateBucketRequestTest.java index bc1095631..f7d22a747 100644 --- a/core/src/test/java/com/backblaze/b2/client/structures/B2UpdateBucketRequestTest.java +++ b/core/src/test/java/com/backblaze/b2/client/structures/B2UpdateBucketRequestTest.java @@ -87,14 +87,16 @@ public void testFullUpdateBucketRequest() { "000011112222333344445555", 3, "", - false + false, + true ), new B2ReplicationRule( "my-replication-rule-2", "777011112222333344445555", 1, "abc", - true + true, + false ) ); final Map sourceToDestinationKeyMapping = mapOf( @@ -189,6 +191,7 @@ public void testFullUpdateBucketRequest() { " {\n" + " \"destinationBucketId\": \"000011112222333344445555\",\n" + " \"fileNamePrefix\": \"\",\n" + + " \"includeExistingFiles\": true,\n" + " \"isEnabled\": false,\n" + " \"priority\": 3,\n" + " \"replicationRuleName\": \"my-replication-rule\"\n" + @@ -196,6 +199,7 @@ public void testFullUpdateBucketRequest() { " {\n" + " \"destinationBucketId\": \"777011112222333344445555\",\n" + " \"fileNamePrefix\": \"abc\",\n" + + " \"includeExistingFiles\": false,\n" + " \"isEnabled\": true,\n" + " \"priority\": 1,\n" + " \"replicationRuleName\": \"my-replication-rule-2\"\n" +