You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ad...@apache.org on 2018/04/06 13:20:24 UTC
[05/24] james-project git commit: JAMES-2366 Mappings should be
sorted when building the list
JAMES-2366 Mappings should be sorted when building the list
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/048e3625
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/048e3625
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/048e3625
Branch: refs/heads/master
Commit: 048e362529ba5605c9551dc63ac14611ab4a5ee2
Parents: 71a465e
Author: Antoine Duprat <ad...@linagora.com>
Authored: Thu Mar 29 15:28:16 2018 +0200
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Fri Apr 6 14:39:17 2018 +0200
----------------------------------------------------------------------
.../rrt/lib/AbstractRecipientRewriteTable.java | 16 +------
.../org/apache/james/rrt/lib/MappingsImpl.java | 18 ++++++-
.../lib/AbstractRecipientRewriteTableTest.java | 36 --------------
.../apache/james/rrt/lib/MappingsImplTest.java | 49 +++++++++++++-------
4 files changed, 50 insertions(+), 69 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/048e3625/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java
----------------------------------------------------------------------
diff --git a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java
index 2b11cee..8b314b1 100644
--- a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java
+++ b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java
@@ -40,8 +40,6 @@ import org.apache.james.rrt.lib.Mapping.Type;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.common.annotations.VisibleForTesting;
-
/**
*
*/
@@ -423,24 +421,12 @@ public abstract class AbstractRecipientRewriteTable implements RecipientRewriteT
String mappings = mapAddressInternal(user, domain);
if (mappings != null) {
- return sortMappings(MappingsImpl.fromRawString(mappings));
+ return MappingsImpl.fromRawString(mappings);
} else {
return null;
}
}
- @VisibleForTesting static Mappings sortMappings(Mappings mappings) {
- if (mappings.contains(Mapping.Type.Domain)) {
- return
- MappingsImpl.builder()
- .addAll(mappings.select(Mapping.Type.Domain))
- .addAll(mappings.exclude(Mapping.Type.Domain))
- .build();
- } else {
- return mappings;
- }
- }
-
private void checkMapping(String user, Domain domain, Mapping mapping) throws RecipientRewriteTableException {
Mappings mappings = getUserDomainMappings(user, domain);
if (mappings != null && mappings.contains(mapping)) {
http://git-wip-us.apache.org/repos/asf/james-project/blob/048e3625/server/data/data-library/src/main/java/org/apache/james/rrt/lib/MappingsImpl.java
----------------------------------------------------------------------
diff --git a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/MappingsImpl.java b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/MappingsImpl.java
index 73949f6..eab5fd8 100644
--- a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/MappingsImpl.java
+++ b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/MappingsImpl.java
@@ -23,6 +23,7 @@ package org.apache.james.rrt.lib;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Comparator;
import java.util.Iterator;
import java.util.Optional;
import java.util.StringTokenizer;
@@ -110,8 +111,23 @@ public class MappingsImpl implements Mappings, Serializable {
}
public MappingsImpl build() {
- return new MappingsImpl(mappings.build());
+ Comparator<? super Mapping> byTypeComparator = (mapping1, mapping2) -> {
+ if (mapping1.getType() == mapping2.getType()) {
+ return mapping1.asString().compareTo(mapping2.asString());
+ }
+ if (mapping1.getType() == Type.Domain) {
+ return -1;
+ }
+ if (mapping2.getType() == Type.Domain) {
+ return 1;
+ }
+ return mapping1.asString().compareTo(mapping2.asString());
+ };
+ return new MappingsImpl(mappings.build().stream()
+ .sorted(byTypeComparator)
+ .collect(Guavate.toImmutableList()));
}
+
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/048e3625/server/data/data-library/src/test/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTableTest.java
----------------------------------------------------------------------
diff --git a/server/data/data-library/src/test/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTableTest.java b/server/data/data-library/src/test/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTableTest.java
index 26b3187..3c69fab 100644
--- a/server/data/data-library/src/test/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTableTest.java
+++ b/server/data/data-library/src/test/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTableTest.java
@@ -231,42 +231,6 @@ public abstract class AbstractRecipientRewriteTableTest {
}
@Test
- public void sortMappingsShouldReturnEmptyWhenEmpty() {
- assertThat(AbstractRecipientRewriteTable.sortMappings(MappingsImpl.empty())).isEmpty();
- }
-
- @Test
- public void sortMappingsShouldReturnSameStringWhenSingleDomainAlias() {
- String singleDomainAlias = Type.Domain.asPrefix() + "first";
- assertThat(AbstractRecipientRewriteTable.sortMappings(MappingsImpl.fromRawString(singleDomainAlias)))
- .containsExactly(MappingImpl.domain(Domain.of("first")));
- }
-
- @Test
- public void sortMappingsShouldReturnSameStringWhenTwoDomainAliases() {
- MappingsImpl mappings = MappingsImpl.builder()
- .add(Type.Domain.asPrefix() + "first")
- .add(Type.Domain.asPrefix() + "second")
- .build();
- assertThat(AbstractRecipientRewriteTable.sortMappings(mappings)).isEqualTo(mappings);
- }
-
- @Test
- public void sortMappingsShouldPutDomainAliasFirstWhenVariousMappings() {
- String regexMapping = Type.Regex.asPrefix() + "first";
- String domainMapping = Type.Domain.asPrefix() + "second";
- MappingsImpl mappings = MappingsImpl.builder()
- .add(regexMapping)
- .add(domainMapping)
- .build();
- assertThat(AbstractRecipientRewriteTable.sortMappings(mappings))
- .isEqualTo(MappingsImpl.builder()
- .add(domainMapping)
- .add(regexMapping)
- .build());
- }
-
- @Test
public void addMappingShouldThrowWhenMappingAlreadyExists() throws Exception {
String user = "test";
Domain domain = Domain.LOCALHOST;
http://git-wip-us.apache.org/repos/asf/james-project/blob/048e3625/server/data/data-library/src/test/java/org/apache/james/rrt/lib/MappingsImplTest.java
----------------------------------------------------------------------
diff --git a/server/data/data-library/src/test/java/org/apache/james/rrt/lib/MappingsImplTest.java b/server/data/data-library/src/test/java/org/apache/james/rrt/lib/MappingsImplTest.java
index 496c74e..efb5add 100644
--- a/server/data/data-library/src/test/java/org/apache/james/rrt/lib/MappingsImplTest.java
+++ b/server/data/data-library/src/test/java/org/apache/james/rrt/lib/MappingsImplTest.java
@@ -45,82 +45,82 @@ public class MappingsImplTest {
@Test
public void fromRawStringShouldReturnSingletonCollectionWhenSingleElementString() {
MappingsImpl actual = MappingsImpl.fromRawString("value");
- assertThat(actual).containsExactly(MappingImpl.address("value"));
+ assertThat(actual).containsOnly(MappingImpl.address("value"));
}
@Test
public void fromRawStringShouldReturnCollectionWhenSeveralElementsString() {
MappingsImpl actual = MappingsImpl.fromRawString("value1;value2");
- assertThat(actual).containsExactly(MappingImpl.address("value1"), MappingImpl.address("value2"));
+ assertThat(actual).containsOnly(MappingImpl.address("value1"), MappingImpl.address("value2"));
}
@Test
public void fromRawStringShouldReturnSingleElementCollectionWhenTrailingDelimiterString() {
MappingsImpl actual = MappingsImpl.fromRawString("value1;");
- assertThat(actual).containsExactly(MappingImpl.address("value1"));
+ assertThat(actual).containsOnly(MappingImpl.address("value1"));
}
@Test
public void fromRawStringShouldReturnSingleElementCollectionWhenHeadingDelimiterString() {
MappingsImpl actual = MappingsImpl.fromRawString(";value1");
- assertThat(actual).containsExactly(MappingImpl.address("value1"));
+ assertThat(actual).containsOnly(MappingImpl.address("value1"));
}
@Test
public void fromRawStringShouldTrimValues() {
MappingsImpl actual = MappingsImpl.fromRawString("value1 ; value2 ");
- assertThat(actual).containsExactly(MappingImpl.address("value1"), MappingImpl.address("value2"));
+ assertThat(actual).containsOnly(MappingImpl.address("value1"), MappingImpl.address("value2"));
}
@Test
public void fromRawStringShouldNotSkipEmptyValue() {
MappingsImpl actual = MappingsImpl.fromRawString("value1; ;value2");
- assertThat(actual).containsExactly(MappingImpl.address("value1"), MappingImpl.address(""), MappingImpl.address("value2"));
+ assertThat(actual).containsOnly(MappingImpl.address("value1"), MappingImpl.address(""), MappingImpl.address("value2"));
}
@Test
public void fromRawStringShouldReturnCollectionWhenValueContainsCommaSeperatedValues() {
MappingsImpl actual = MappingsImpl.fromRawString("value1,value2");
- assertThat(actual).containsExactly(MappingImpl.address("value1"),MappingImpl.address("value2"));
+ assertThat(actual).containsOnly(MappingImpl.address("value1"),MappingImpl.address("value2"));
}
@Test
public void fromRawStringShouldReturnCollectionWhenValueContainsColonSeperatedValues() {
MappingsImpl actual = MappingsImpl.fromRawString("value1:value2");
- assertThat(actual).containsExactly(MappingImpl.address("value1"),MappingImpl.address("value2"));
+ assertThat(actual).containsOnly(MappingImpl.address("value1"),MappingImpl.address("value2"));
}
@Test
public void fromRawStringShouldUseCommaDelimiterBeforeSemicolonWhenValueContainsBoth() {
MappingsImpl actual = MappingsImpl.fromRawString("value1;value1,value2");
- assertThat(actual).containsExactly(MappingImpl.address("value1;value1"),MappingImpl.address("value2"));
+ assertThat(actual).containsOnly(MappingImpl.address("value1;value1"),MappingImpl.address("value2"));
}
@Test
public void fromRawStringShouldUseSemicolonDelimiterBeforeColonWhenValueContainsBoth() {
MappingsImpl actual = MappingsImpl.fromRawString("value1:value1;value2");
- assertThat(actual).containsExactly(MappingImpl.address("value1:value1"),MappingImpl.address("value2"));
+ assertThat(actual).containsOnly(MappingImpl.address("value1:value1"),MappingImpl.address("value2"));
}
@Test
public void fromRawStringShouldNotUseColonDelimiterWhenValueStartsWithError() {
MappingsImpl actual = MappingsImpl.fromRawString("error:test");
- assertThat(actual).containsExactly(MappingImpl.error("test"));
+ assertThat(actual).containsOnly(MappingImpl.error("test"));
}
@Test
public void fromRawStringShouldNotUseColonDelimiterWhenValueStartsWithDomain() {
MappingsImpl actual = MappingsImpl.fromRawString("domain:test");
- assertThat(actual).containsExactly(MappingImpl.domain(Domain.of("test")));
+ assertThat(actual).containsOnly(MappingImpl.domain(Domain.of("test")));
}
@Test
public void fromRawStringShouldNotUseColonDelimiterWhenValueStartsWithRegex() {
MappingsImpl actual = MappingsImpl.fromRawString("regex:test");
- assertThat(actual).containsExactly(MappingImpl.regex("test"));
+ assertThat(actual).containsOnly(MappingImpl.regex("test"));
}
@Test
@@ -252,7 +252,7 @@ public class MappingsImplTest {
@Test
public void unionShouldReturnMergedWhenBothContainsData() {
Mappings mappings = MappingsImpl.fromRawString("toto").union(MappingsImpl.fromRawString("tata"));
- assertThat(mappings).containsExactly(MappingImpl.address("toto"),MappingImpl.address("tata"));
+ assertThat(mappings).containsOnly(MappingImpl.address("toto"),MappingImpl.address("tata"));
}
@Test
@@ -286,7 +286,7 @@ public class MappingsImplTest {
MappingsImpl mappingsImpl = MappingsImpl.Builder
.merge(left, empty)
.build();
- assertThat(mappingsImpl).containsExactly(expectedMapping);
+ assertThat(mappingsImpl).containsOnly(expectedMapping);
}
@Test
@@ -297,7 +297,7 @@ public class MappingsImplTest {
MappingsImpl mappingsImpl = MappingsImpl.Builder
.merge(empty, right)
.build();
- assertThat(mappingsImpl).containsExactly(expectedMapping);
+ assertThat(mappingsImpl).containsOnly(expectedMapping);
}
@Test
@@ -309,6 +309,21 @@ public class MappingsImplTest {
MappingsImpl mappingsImpl = MappingsImpl.Builder
.merge(left, right)
.build();
- assertThat(mappingsImpl).containsExactly(leftMapping, rightMapping);
+ assertThat(mappingsImpl).containsOnly(leftMapping, rightMapping);
+ }
+
+ @Test
+ public void builderShouldPutDomainAliasFirstWhenVariousMappings() {
+ MappingImpl addressMapping = MappingImpl.address("aaa");
+ MappingImpl errorMapping = MappingImpl.error("error");
+ MappingImpl domainMapping = MappingImpl.domain(Domain.of("domain"));
+ MappingImpl domain2Mapping = MappingImpl.domain(Domain.of("domain2"));
+ MappingsImpl mappingsImpl = MappingsImpl.builder()
+ .add(domainMapping)
+ .add(addressMapping)
+ .add(errorMapping)
+ .add(domain2Mapping)
+ .build();
+ assertThat(mappingsImpl).containsExactly(domainMapping, domain2Mapping, addressMapping, errorMapping);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org