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 bt...@apache.org on 2019/08/28 10:32:19 UTC
[james-project] 11/12: JAMES-2513 AbstractDomainList can return
duplicates
This is an automated email from the ASF dual-hosted git repository.
btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 34c1a44a95d301b2e005e3c219c5f2c7e3bbc315
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Aug 27 13:49:29 2019 +0700
JAMES-2513 AbstractDomainList can return duplicates
A domain both added and detected will be returned as duplicated.
---
.../james/domainlist/lib/AbstractDomainList.java | 27 ++++++++++++----------
.../lib/AbstractDomainListPrivateMethodsTest.java | 24 +++++++++++++++++++
2 files changed, 39 insertions(+), 12 deletions(-)
diff --git a/server/data/data-library/src/main/java/org/apache/james/domainlist/lib/AbstractDomainList.java b/server/data/data-library/src/main/java/org/apache/james/domainlist/lib/AbstractDomainList.java
index 3db1408..8d532e9 100644
--- a/server/data/data-library/src/main/java/org/apache/james/domainlist/lib/AbstractDomainList.java
+++ b/server/data/data-library/src/main/java/org/apache/james/domainlist/lib/AbstractDomainList.java
@@ -21,6 +21,7 @@ package org.apache.james.domainlist.lib;
import java.net.InetAddress;
import java.net.UnknownHostException;
+import java.util.Collection;
import java.util.List;
import java.util.stream.Stream;
@@ -39,7 +40,7 @@ import com.github.steveash.guavate.Guavate;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
+import com.google.common.collect.ImmutableSet;
/**
* All implementations of the DomainList interface should extends this abstract
@@ -155,13 +156,15 @@ public abstract class AbstractDomainList implements DomainList, Configurable {
public ImmutableList<Domain> getDomains() throws DomainListException {
List<Domain> domains = getDomainListInternal();
ImmutableList<Domain> detectedDomains = detectDomains();
- // Guava does not support concatenating ImmutableLists at this time:
- // https://stackoverflow.com/questions/37919648/concatenating-immutablelists
- // A work-around is to use Iterables.concat() until something like
- // https://github.com/google/guava/issues/1029 is implemented.
- Iterable<Domain> domainsWithoutIp = Iterables.concat(domains, detectedDomains);
- ImmutableList<Domain> detectedIps = detectIps(domainsWithoutIp);
- ImmutableList<Domain> allDomains = ImmutableList.copyOf(Iterables.concat(domainsWithoutIp, detectedIps));
+
+ ImmutableList<Domain> domainsWithoutIp = ImmutableList.<Domain>builder()
+ .addAll(domains)
+ .addAll(detectedDomains)
+ .build();
+ ImmutableSet<Domain> allDomains = ImmutableSet.<Domain>builder()
+ .addAll(domainsWithoutIp)
+ .addAll(detectIps(domainsWithoutIp))
+ .build();
if (LOGGER.isDebugEnabled()) {
for (Domain domain : allDomains) {
@@ -169,10 +172,10 @@ public abstract class AbstractDomainList implements DomainList, Configurable {
}
}
- return allDomains;
+ return ImmutableList.copyOf(allDomains);
}
- private ImmutableList<Domain> detectIps(Iterable<Domain> domains) {
+ private ImmutableList<Domain> detectIps(Collection<Domain> domains) {
if (autoDetectIP) {
return getDomainsIpStream(domains, dns, LOGGER)
.collect(Guavate.toImmutableList());
@@ -204,8 +207,8 @@ public abstract class AbstractDomainList implements DomainList, Configurable {
* Iterable of domains
* @return Stream of ipaddress for domains
*/
- private static Stream<Domain> getDomainsIpStream(Iterable<Domain> domains, DNSService dns, Logger log) {
- return Guavate.stream(domains)
+ private static Stream<Domain> getDomainsIpStream(Collection<Domain> domains, DNSService dns, Logger log) {
+ return domains.stream()
.flatMap(domain -> getDomainIpStream(domain, dns, log))
.distinct();
}
diff --git a/server/data/data-library/src/test/java/org/apache/james/domainlist/lib/AbstractDomainListPrivateMethodsTest.java b/server/data/data-library/src/test/java/org/apache/james/domainlist/lib/AbstractDomainListPrivateMethodsTest.java
index 96a59ae..c711436 100644
--- a/server/data/data-library/src/test/java/org/apache/james/domainlist/lib/AbstractDomainListPrivateMethodsTest.java
+++ b/server/data/data-library/src/test/java/org/apache/james/domainlist/lib/AbstractDomainListPrivateMethodsTest.java
@@ -208,6 +208,30 @@ public class AbstractDomainListPrivateMethodsTest {
}
@Test
+ public void getDomainsShouldNotReturnDuplicates() throws Exception {
+ domainList.configure(DomainListConfiguration.builder()
+ .autoDetect(true)
+ .autoDetectIp(true));
+
+ String added = "added.tld";
+ String detected = "detected.tld";
+ String ip = "148.25.32.1";
+
+ when(dnsService.getLocalHost()).thenReturn(InetAddress.getByName("127.0.0.1"));
+ when(dnsService.getHostName(any(InetAddress.class))).thenReturn(detected);
+ InetAddress address = mock(InetAddress.class);
+ when(address.getHostAddress()).thenReturn(ip);
+ when(dnsService.getAllByName(any())).thenReturn(ImmutableList.of(address));
+
+ domainList.addDomain(Domain.of(added));
+ domainList.addDomain(Domain.of(ip));
+
+ assertThat(domainList.getDomains())
+ .extracting(Domain::name)
+ .containsOnlyOnce(added, detected, ip);
+ }
+
+ @Test
public void getDomainsShouldListAddedDomain() throws Exception {
Domain defaultDomain = Domain.of("default.tld");
Domain domain = Domain.of("added.tld");
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org