Added ability to load all of the zones defined in a yml file. The test files often do define overlapping zones, so this allow testing a full file without reloading the fake server.
git-svn-id: https://svn.apache.org/repos/asf/james/jspf/trunk@782407 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/tester/src/main/java/org/apache/james/jspf/tester/DNSTestingServerLauncher.java b/tester/src/main/java/org/apache/james/jspf/tester/DNSTestingServerLauncher.java
index 47fd9e6..460a94d 100644
--- a/tester/src/main/java/org/apache/james/jspf/tester/DNSTestingServerLauncher.java
+++ b/tester/src/main/java/org/apache/james/jspf/tester/DNSTestingServerLauncher.java
@@ -42,6 +42,17 @@
import java.util.Locale;
import java.util.Set;
+/**
+ * Run a fake dnsserver listening both TCP and UDP ports.
+ *
+ * Mandatory parameters are -f (yaml zone definition) and -t (test name).
+ * if testname is "ALL" then all of the zones in the file are merged in a single
+ * zone and loaded.
+ *
+ * e.g: DNSTestingServerLauncher -f rfc4408-tests.yml -t ALL
+ *
+ * by default listen to port 53 of every interface, but ip and port can be updated.
+ */
public class DNSTestingServerLauncher {
private static final char CHAR_TESTNAME = 't';
@@ -93,26 +104,19 @@
Constructor ctor = fact.createConstructor(fact.createComposer(fact.createParser(fact.createScanner(br)),fact.createResolver()));
boolean found = false;
+ HashMap zonedata = new HashMap();
HashMap testMap = null;
while(ctor.checkData() && !found) {
Object o = ctor.getData();
if (o instanceof HashMap) {
testMap = (HashMap) o;
- if (test.equals(testMap.get("description"))) {
+ if (test.equals(testMap.get("description")) || "ALL".equalsIgnoreCase(test)) {
found = true;
+ loadZoneData(testMap, zonedata);
}
}
}
if (found) {
- HashMap loadedZoneData = (HashMap) testMap.get("zonedata");
- HashMap zonedata = new HashMap();
- Set keys = loadedZoneData.keySet();
- for (Iterator i = keys.iterator(); i.hasNext(); ) {
- String hostname = (String) i.next();
- String lowercase = hostname.toLowerCase(Locale.US);
- zonedata.put(lowercase, loadedZoneData.get(hostname));
- }
-
DNSTestingServer testingServer = new DNSTestingServer(ip, port);
testingServer.setData(zonedata);
@@ -156,6 +160,19 @@
}
+ private static void loadZoneData(HashMap testMap, HashMap zonedata) {
+ HashMap loadedZoneData = (HashMap) testMap.get("zonedata");
+ Set keys = loadedZoneData.keySet();
+ for (Iterator i = keys.iterator(); i.hasNext(); ) {
+ String hostname = (String) i.next();
+ String lowercase = hostname.toLowerCase(Locale.US);
+ if (zonedata.containsKey(lowercase)) {
+ System.err.println("Replace zone entry for "+lowercase+" to "+loadedZoneData.get(hostname));
+ }
+ zonedata.put(lowercase, loadedZoneData.get(hostname));
+ }
+ }
+
/**
* Print out the usage
*/