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

      */