From a564620383d88dfbecd2cbe4283dc451772703aa Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Tue, 7 Apr 2020 20:59:32 +0200 Subject: [PATCH] sinttest: add 'dnsResolver' setting --- documentation/developer/integrationtest.md | 1 + smack-integration-test/build.gradle | 1 + .../smack/inttest/Configuration.java | 28 +++++++++++++++++++ .../SmackIntegrationTestFramework.java | 16 +++++++++++ 4 files changed, 46 insertions(+) diff --git a/documentation/developer/integrationtest.md b/documentation/developer/integrationtest.md index e9caed4e3..16119c6f1 100644 --- a/documentation/developer/integrationtest.md +++ b/documentation/developer/integrationtest.md @@ -80,6 +80,7 @@ debugger=console | disabledConnections | List of disabled connection's nicknames | | testPackages | List of packages with tests | | verbose | If `true` set output to verbose | +| dnsResolver | One of 'minidns', 'javax' or 'dnsjava'. Defaults to 'minidns'. | ### Where to place the properties file diff --git a/smack-integration-test/build.gradle b/smack-integration-test/build.gradle index f0b380cca..27e983dd4 100644 --- a/smack-integration-test/build.gradle +++ b/smack-integration-test/build.gradle @@ -8,6 +8,7 @@ applicationDefaultJvmArgs = ["-enableassertions"] dependencies { api project(':smack-java8-full') + api project(':smack-resolver-dnsjava') compile 'org.reflections:reflections:0.9.11' compile 'eu.geekplace.javapinning:java-pinning-java7:1.1.0-alpha1' compile group: 'commons-io', name: 'commons-io', version: "$commonsIoVersion" diff --git a/smack-integration-test/src/main/java/org/igniterealtime/smack/inttest/Configuration.java b/smack-integration-test/src/main/java/org/igniterealtime/smack/inttest/Configuration.java index 9b308df3b..258fb3c1f 100644 --- a/smack-integration-test/src/main/java/org/igniterealtime/smack/inttest/Configuration.java +++ b/smack-integration-test/src/main/java/org/igniterealtime/smack/inttest/Configuration.java @@ -62,6 +62,12 @@ public final class Configuration { enhanced, } + public enum DnsResolver { + minidns, + javax, + dnsjava, + } + public final DomainBareJid service; public final String serviceTlsPin; @@ -108,6 +114,8 @@ public final class Configuration { public final boolean verbose; + public final DnsResolver dnsResolver; + private Configuration(Configuration.Builder builder) throws KeyManagementException, NoSuchAlgorithmException { service = Objects.requireNonNull(builder.service, "'service' must be set. Either via 'properties' files or via system property 'sinttest.service'."); @@ -180,6 +188,8 @@ public final class Configuration { }; this.verbose = builder.verbose; + + this.dnsResolver = builder.dnsResolver; } public boolean isAccountRegistrationPossible() { @@ -232,6 +242,8 @@ public final class Configuration { private boolean verbose; + private DnsResolver dnsResolver = DnsResolver.minidns; + private Builder() { } @@ -399,6 +411,20 @@ public final class Configuration { return setVerbose(verbose); } + public Builder setDnsResolver(DnsResolver dnsResolver) { + this.dnsResolver = Objects.requireNonNull(dnsResolver); + return this; + } + + public Builder setDnsResolver(String dnsResolverString) { + if (dnsResolverString == null) { + return this; + } + + DnsResolver dnsResolver = DnsResolver.valueOf(dnsResolverString); + return setDnsResolver(dnsResolver); + } + public Configuration build() throws KeyManagementException, NoSuchAlgorithmException { return new Configuration(this); } @@ -470,6 +496,8 @@ public final class Configuration { builder.setVerbose(properties.getProperty("verbose")); + builder.setDnsResolver(properties.getProperty("dnsResolver")); + return builder.build(); } diff --git a/smack-integration-test/src/main/java/org/igniterealtime/smack/inttest/SmackIntegrationTestFramework.java b/smack-integration-test/src/main/java/org/igniterealtime/smack/inttest/SmackIntegrationTestFramework.java index b7c66f3c6..a8c541d8f 100644 --- a/smack-integration-test/src/main/java/org/igniterealtime/smack/inttest/SmackIntegrationTestFramework.java +++ b/smack-integration-test/src/main/java/org/igniterealtime/smack/inttest/SmackIntegrationTestFramework.java @@ -57,6 +57,9 @@ import org.jivesoftware.smack.XMPPException; import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration; import org.jivesoftware.smack.util.StringUtils; import org.jivesoftware.smack.util.TLSUtils; +import org.jivesoftware.smack.util.dns.dnsjava.DNSJavaResolver; +import org.jivesoftware.smack.util.dns.javax.JavaxResolver; +import org.jivesoftware.smack.util.dns.minidns.MiniDnsResolver; import org.jivesoftware.smackx.debugger.EnhancedDebuggerWindow; import org.jivesoftware.smackx.iqregister.AccountManager; @@ -149,6 +152,19 @@ public class SmackIntegrationTestFramework { public synchronized TestRunResult run() throws KeyManagementException, NoSuchAlgorithmException, SmackException, IOException, XMPPException, InterruptedException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { + // The DNS resolver is not really a per sinttest run setting. It is not even a per connection setting. Instead + // it is a global setting, but we treat it like a per sinttest run setting. + switch (config.dnsResolver) { + case minidns: + MiniDnsResolver.setup(); + break; + case javax: + JavaxResolver.setup(); + break; + case dnsjava: + DNSJavaResolver.setup(); + break; + } testRunResult = new TestRunResult(); // Create a connection manager *after* we created the testRunId (in testRunResult).