Bug 6486: Add support for two node DockerOvs 94/44694/1
authorSam Hague <shague@redhat.com>
Fri, 26 Aug 2016 01:23:08 +0000 (21:23 -0400)
committerSam Hague <shague@redhat.com>
Fri, 26 Aug 2016 01:23:45 +0000 (21:23 -0400)
Change-Id: I61996cc2bc5b573309f6c389c670e09540aa2710
Signed-off-by: Sam Hague <shague@redhat.com>
utils/ovsdb-it-utils/src/main/java/org/opendaylight/ovsdb/utils/ovsdb/it/utils/DockerOvs.java
utils/ovsdb-it-utils/src/main/resources/docker-compose-files/two_ovs-2.5.0-hwvtep.yml [new file with mode: 0644]

index ee11d04b0ef55e28ea38c2c48d7f14d0324198c2..c6816a0e4830598d2d2cf2f042ec28f13f62ae73 100644 (file)
@@ -24,6 +24,7 @@ import java.nio.charset.Charset;
 import java.nio.charset.CharsetDecoder;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
@@ -128,7 +129,7 @@ public class DockerOvs implements AutoCloseable {
         public String name;
         public String port;
     }
-    private List<DockerComposeServiceInfo> dockerComposeServices = new ArrayList<DockerComposeServiceInfo>();
+    private Map<String, DockerComposeServiceInfo> dockerComposeServices = new HashMap<>();
 
     /**
      * Get the array of system properties as pax exam Option objects for use in pax exam
@@ -302,7 +303,14 @@ public class DockerOvs implements AutoCloseable {
         if (!runDocker) {
             return envServerPort;
         }
-        return dockerComposeServices.get(ovsNumber).port;
+        return dockerComposeServices.get(getOvsNumString(ovsNumber)).port;
+    }
+
+    public String getOvsdbPort(String ovsName) {
+        if (!runDocker) {
+            return envServerPort;
+        }
+        return dockerComposeServices.get(ovsName).port;
     }
 
     /**
@@ -313,10 +321,17 @@ public class DockerOvs implements AutoCloseable {
         return dockerComposeServices.size();
     }
 
+    private String getOvsNumString(int numOvs) {
+        if (numOvs == 0) {
+            return "ovs";
+        } else {
+            return "ovs" + numOvs;
+        }
+    }
     public String[] getExecCmdPrefix(int numOvs) {
         String[] res = new String[execCmd.length];
         System.arraycopy(execCmd, 0, res, 0, execCmd.length);
-        res[res.length - 1] = dockerComposeServices.get(numOvs).name;
+        res[res.length - 1] = dockerComposeServices.get(getOvsNumString(numOvs)).name;
         return res;
     }
 
@@ -337,7 +352,17 @@ public class DockerOvs implements AutoCloseable {
         return ProcUtils.runProcess(reserved, waitFor, null, cmd);
     }
 
-    public void tryInContainer(String logText, int waitFor, int numOvs, String ... cmdWords) throws IOException, InterruptedException {
+    public int runInContainer(int reserved, int waitFor, StringBuilder capturedStdout, int numOvs, String ... cmdWords)
+            throws IOException, InterruptedException {
+        String[] pfx = getExecCmdPrefix(numOvs);
+        String[] cmd = new String[pfx.length + cmdWords.length];
+        System.arraycopy(pfx, 0, cmd, 0, pfx.length);
+        System.arraycopy(cmdWords, 0, cmd, pfx.length, cmdWords.length);
+        return ProcUtils.runProcess(reserved, waitFor, capturedStdout, cmd);
+    }
+
+    public void tryInContainer(String logText, int waitFor, int numOvs, String ... cmdWords)
+            throws IOException, InterruptedException {
         String[] pfx = getExecCmdPrefix(numOvs);
         String[] cmd = new String[pfx.length + cmdWords.length];
         System.arraycopy(pfx, 0, cmd, 0, pfx.length);
@@ -390,7 +415,7 @@ public class DockerOvs implements AutoCloseable {
                 svc.port = port;
             }
             //TODO: think this through. What if there is no port?
-            dockerComposeServices.add(svc);
+            dockerComposeServices.put(svc.name, svc);
         }
 
         return ports;
@@ -499,9 +524,14 @@ public class DockerOvs implements AutoCloseable {
         }
 
         OvsdbPing[] pingers = new OvsdbPing[numOvs];
-        for (int i = 0; i < numOvs; i++) {
-            pingers[i] = new OvsdbPing(i, numRunningOvs);
-            pingers[i].start();
+        if (numOvs == 1) {
+            pingers[0] = new OvsdbPing(0, numRunningOvs);
+            pingers[0].start();
+        } else {
+            for (int i = 0; i < numOvs; i++) {
+                pingers[i] = new OvsdbPing(i+1, numRunningOvs);
+                pingers[i].start();
+            }
         }
 
         long startTime = System.currentTimeMillis();
@@ -563,5 +593,4 @@ public class DockerOvs implements AutoCloseable {
         tryInContainer(logText, 5000, dockerInstance, "ovs-ofctl", "-OOpenFlow13", "dump-flows", "br-int");
         tryInContainer(logText, 5000, dockerInstance, "ip", "netns", "list");
     }
-
 }
diff --git a/utils/ovsdb-it-utils/src/main/resources/docker-compose-files/two_ovs-2.5.0-hwvtep.yml b/utils/ovsdb-it-utils/src/main/resources/docker-compose-files/two_ovs-2.5.0-hwvtep.yml
new file mode 100644 (file)
index 0000000..5390b20
--- /dev/null
@@ -0,0 +1,12 @@
+ovs1:
+ image: vpickard/openvswitch:2.5.0
+ ports:
+   - "6641:6640"
+ command: "/usr/bin/supervisord -n"
+ privileged: true
+ovs2:
+ image: vpickard/openvswitch:2.5.0
+ ports:
+   - "6642:6640"
+ command: "/usr/bin/supervisord -n"
+ privileged: true