Enable integration tests again. 11/22011/1
authorShigeru Yasuda <s-yasuda@da.jp.nec.com>
Fri, 5 Jun 2015 23:30:26 +0000 (08:30 +0900)
committerShigeru Yasuda <s-yasuda@da.jp.nec.com>
Fri, 5 Jun 2015 23:31:42 +0000 (08:31 +0900)
Other changes:

  * manager/config
    * Describe required YANG models and applications in capabilities.
  * manager/it/option
    * Load inventory-manager and topology-manager.
    * Don't load forwardingrules-manager because it is unnecessary for
      VTN Manager.
  * Fixed several bugs in integration test modules.
    * Don't send any notification after tests.
    * Ensure that node-connector is created before notifying link
      discovery because topology-manager will remove links on newly
      created node-connector.
    * VTNManagerIT.testRoutingTable(): Synchronize packet processing
      before solving path faults.

Change-Id: I947419324932a38adcdf060211f8643a64da82e1
Signed-off-by: Shigeru Yasuda <s-yasuda@da.jp.nec.com>
manager/config/src/main/resources/initial/80-vtn.xml
manager/it/core/src/test/java/org/opendaylight/vtn/manager/it/core/VTNManagerIT.java
manager/it/ofmock/src/main/java/org/opendaylight/vtn/manager/it/ofmock/impl/OfMockProvider.java
manager/it/ofmock/src/main/java/org/opendaylight/vtn/manager/it/ofmock/impl/OfNode.java
manager/it/option/src/main/java/org/opendaylight/vtn/manager/it/option/TestOption.java
manager/it/option/src/main/resources/controller.xml
manager/it/pom.xml

index 8d1765cec2f346102091dc6ba652e5106dc5c5a7..858e07bddbd27ac5ff8fca4f77ccfa806ea54ef8 100644 (file)
   </configuration>
 
   <required-capabilities>
+    <!-- openflowplugin applications -->
+    <capability>
+      urn:opendaylight:params:xml:ns:yang:inventory-manager:impl?module=inventory-manager-impl&amp;revision=2015-05-30
+    </capability>
+    <capability>
+      urn:opendaylight:params:xml:ns:yang:topology-manager:impl?module=topology-manager-impl&amp;revision=2015-05-30
+    </capability>
+    <capability>
+      urn:opendaylight:params:xml:ns:yang:openflowplugin:app:statistics-manager?module=statistics-manager&amp;revision=2014-09-25
+    </capability>
+
+    <!-- Required YANG models: openflowplugin -->
+    <capability>
+      urn:opendaylight:flow:service?module=sal-flow&amp;revision=2013-08-19
+    </capability>
+    <capability>
+      urn:opendaylight:flow:statistics?module=opendaylight-flow-statistics&amp;revision=2013-08-19
+    </capability>
+    <capability>
+      urn:opendaylight:packet:service?module=packet-processing&amp;revision=2013-07-09
+    </capability>
+
+    <!-- Required YANG models: VTN -->
+    <capability>
+      urn:opendaylight:vtn?module=vtn&amp;revision=2015-03-28
+    </capability>
+    <capability>
+      urn:opendaylight:vtn:config?module=vtn-config&amp;revision=2015-02-09
+    </capability>
+    <capability>
+      urn:opendaylight:vtn:pathmap?module=vtn-path-map&amp;revision=2015-03-28
+    </capability>
+    <capability>
+      urn:opendaylight:vtn:pathpolicy?module=vtn-path-policy&amp;revision=2015-02-09
+    </capability>
+    <capability>
+      urn:opendaylight:vtn:impl:flow?module=vtn-flow-impl&amp;revision=2015-03-13
+    </capability>
+    <capability>
+      urn:opendaylight:vtn:impl:inventory?module=vtn-inventory&amp;revision=2015-02-09
+    </capability>
+    <capability>
+      urn:opendaylight:vtn:impl:topology?module=vtn-topology&amp;revision=2015-02-09
+    </capability>
+
+    <!-- VTN Manager -->
     <capability>
       urn:opendaylight:vtn:impl:provider?module=vtn-provider&amp;revision=2015-02-09
     </capability>
index 3494b4281408adbd838f39455655912f8f632d1f..879a3ef89aad70bb98ac4219745ad0217c797679 100644 (file)
@@ -4148,7 +4148,7 @@ public final class VTNManagerIT extends ModelDrivenTestBase {
 
         // Create port 1.
         // This will establish port mapping on bipathNode2Port1.
-        pids[2][1] = ofMockService.addPort(nid2, 1L, false);
+        pids[2][1] = ofMockService.addPort(nid2, 1L);
         waiter.set(bipathNode2Port1, VnodeState.DOWN, VnodeState.DOWN).await();
 
         // Enable port 1.
@@ -4966,6 +4966,31 @@ public final class VTNManagerIT extends ModelDrivenTestBase {
         // Cause path fault.
         unicastTest(bridge, islPorts, false);
 
+        // Packet processing for previous test may not complete.
+        // So we need to install a valid flow entry here in order to
+        // synchronize packet processing.
+        Map<String, List<TestHost>> hostMap = bridge.getTestHosts();
+        Set<String> edgeNodes = new HashSet<>();
+        for (Map.Entry<String, List<TestHost>> entry: hostMap.entrySet()) {
+            List<TestHost> hosts = entry.getValue();
+            if (hosts.size() >= 2) {
+                edgeNodes.add(entry.getKey());
+                TestHost src = hosts.get(0);
+                TestHost dst = hosts.get(1);
+                ArpFlowFactory factory = new ArpFlowFactory(ofMockService);
+                List<OfMockLink> route = Collections.<OfMockLink>emptyList();
+                UnicastFlow unicast = factory.create(src, dst, route);
+                unicast.runTest();
+                assertEquals(1, unicast.getFlowCount());
+            }
+        }
+        assertFalse(edgeNodes.isEmpty());
+
+        for (String nid: ofMockService.getNodes()) {
+            int expected = (edgeNodes.contains(nid)) ? 1 : 0;
+            assertEquals(expected, ofMockService.getFlowCount(nid));
+        }
+
         // Resolve path fault.
         unicastTest(bridge, islPorts, true);
 
@@ -5255,7 +5280,7 @@ public final class VTNManagerIT extends ModelDrivenTestBase {
             for (int j = 1; j <= numNodes; j++) {
                 String pid = ofMockService.addPort(nid, (long)j, false);
                 assertEquals(null, allPorts.put(pid, null));
-                ofMockService.setPortState(pid, true, false);
+                ofMockService.setPortState(pid, true);
             }
         }
 
index 5d9d07452d90d2a366eee1f7ab780c3eb2e2d934..eee2086ad927aa25c0c8d982d9ebb8aa9eb5dbc0 100644 (file)
@@ -161,11 +161,6 @@ public class OfMockProvider implements AutoCloseable, Executor, OfMockService {
      */
     private VtnConfig  vtnConfig;
 
-    /**
-     * Keep {@code true} if inventory information is not yet initialized.
-     */
-    private boolean  firstRun = true;
-
     /**
      * Construct a new instance.
      *
@@ -199,7 +194,9 @@ public class OfMockProvider implements AutoCloseable, Executor, OfMockService {
      * @param n  A {@link Notification} instance.
      */
     public void publish(Notification n) {
-        notificationService.publish(n, globalExecutor);
+        if (serviceAvailable) {
+            notificationService.publish(n, globalExecutor);
+        }
     }
 
     /**
@@ -384,12 +381,16 @@ public class OfMockProvider implements AutoCloseable, Executor, OfMockService {
      *
      * @param allPorts  A list of {@link OfPort} instances which represents
      *                  all the physical ports present in the test environment.
+     * @param links     A map that keeps inter-switch links to be configured.
+     *                  {@code null} is specified if inventory information is
+     *                  already initialized.
      * @throws InterruptedException
      *    The calling thread was interrupted.
      */
-    private void initInventory(List<OfPort> allPorts)
+    private void initInventory(List<OfPort> allPorts,
+                               Map<String, String> links)
         throws InterruptedException {
-        if (!firstRun) {
+        if (links == null) {
             for (OfPort port: allPorts) {
                 String src = port.getPortIdentifier();
                 String peer = port.getPeerIdentifier();
@@ -403,21 +404,26 @@ public class OfMockProvider implements AutoCloseable, Executor, OfMockService {
             return;
         }
 
-        firstRun = false;
-
-        // OpenFlow application, such as topology manager, may not be started.
-        // So we need to resend inventory and topology notifications for
-        // missing inventories.
+        // MD-SAL inventory manager may not be started.
+        // So we need to resend notifications for missing inventories.
         for (OfNode node: switches.values()) {
             verify(node);
         }
 
-        List<OfPort> isl = new ArrayList<>();
+        // We need to ensure that all the switch ports are registered into
+        // MD-SAL nodes container before notifying link discovery.
+        // MD-SAL topology manager will delete links on newly created ports.
         for (OfPort port: allPorts) {
             verify(port);
+        }
 
-            String peer = port.getPeerIdentifier();
-            if (peer != null && port.isUp()) {
+        // Set up inter-switch links.
+        List<OfPort> isl = new ArrayList<>();
+        for (OfPort port: allPorts) {
+            String pid = port.getPortIdentifier();
+            String peer = links.get(pid);
+            if (peer != null) {
+                port.setPeerIdentifier(this, peer);
                 isl.add(port);
             }
         }
@@ -574,10 +580,13 @@ public class OfMockProvider implements AutoCloseable, Executor, OfMockService {
     public void initialize() throws InterruptedException {
         boolean done = false;
         List<OfPort> allPorts = new ArrayList<>();
+        Map<String, String> links = null;
+
         Lock wrlock = rwLock.writeLock();
         wrlock.lock();
         try {
             if (switches.isEmpty()) {
+                links = new HashMap<>();
                 VtnOpenflowVersion of13 = VtnOpenflowVersion.OF13;
                 VtnOpenflowVersion[] vers = {
                     VtnOpenflowVersion.OF10,
@@ -601,8 +610,10 @@ public class OfMockProvider implements AutoCloseable, Executor, OfMockService {
                     OfPort peer = node1.addPort((long)(i + 1));
                     allPorts.add(port);
                     allPorts.add(peer);
-                    port.setPeerIdentifier(this, peer.getPortIdentifier());
-                    peer.setPeerIdentifier(this, port.getPortIdentifier());
+                    String portId = port.getPortIdentifier();
+                    String peerId = peer.getPortIdentifier();
+                    links.put(portId, peerId);
+                    links.put(peerId, portId);
 
                     // Create 2 edge ports.
                     for (long p = MIN_EDGE_PORT_ID; p <= MAX_EDGE_PORT_ID;
@@ -630,7 +641,7 @@ public class OfMockProvider implements AutoCloseable, Executor, OfMockService {
         }
 
         // Ensure that all inventory events have been notified.
-        initInventory(allPorts);
+        initInventory(allPorts, links);
 
         LOG.debug("Test environment has been initialized.");
     }
index 49dbd8622f901efa4d89f54aa7d42b7db4641583..01367f0a51bee9d9e786f3c70367c3c21e9fbfd4 100644 (file)
@@ -290,7 +290,7 @@ public final class OfNode
         /**
          * Construct a new instance.
          *
-         * @param xid
+         * @param xid   OpenFlow transaction ID.
          * @param cond  The MD-SAL flow entry which specifies the condition to
          *              select flow entries.
          */
index 1fb4bf13f01c183a74bf9e6659a9669d87c41415..ec54a4769c6caf2104c4bfcf5a7a6e981948fa54 100644 (file)
@@ -382,7 +382,6 @@ public final class TestOption {
             mavenBundle(OPENFLOW, "openflowplugin-common"),
             mavenBundle(OPENFLOW_APPS, "inventory-manager"),
             mavenBundle(OPENFLOW_APPS, "topology-manager"),
-            mavenBundle(OPENFLOW_APPS, "forwardingrules-manager"),
 
             // VTN Manager bundels.
             mavenBundle(VTN, "manager"),
index db40642b7bf3963b6ba5afcb56a47438a0884fb1..887d7fe6651505b859b8a4eb32cc51e95fd91bc5 100644 (file)
             <module>
               <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">prefix:binding-notification-broker</type>
               <name>binding-notification-broker</name>
+              <notification-adapter xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">
+                <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">prefix:binding-new-notification-service</type>
+                <name>binding-notification-adapter</name>
+              </notification-adapter>
+              <notification-publish-adapter xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">
+                <type  xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">prefix:binding-new-notification-publish-service</type>
+                <name>binding-notification-publish-adapter</name>
+              </notification-publish-adapter>
             </module>
             <module>
               <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">prefix:binding-broker-impl</type>
               </binding-forwarded-data-broker>
             </module>
 
-            <!-- forwardingrules-manager configuration -->
+            <!-- inventory-manager configuration -->
             <module>
-              <type xmlns:frm="urn:opendaylight:params:xml:ns:yang:openflowplugin:app:forwardingrules-manager">
-                frm:forwardingrules-manager
+              <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:inventory-manager:impl">
+                prefix:inventory-manager-impl
               </type>
-              <name>forwardingrules-manager</name>
+              <name>inventory-manager-default</name>
 
-              <data-broker>
+              <broker>
                 <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">
-                  binding:binding-async-data-broker
+                  binding:binding-broker-osgi-registry
                 </type>
-                <name>binding-data-broker</name>
-              </data-broker>
+                <name>binding-osgi-broker</name>
+              </broker>
+            </module>
 
-              <rpc-registry>
+            <!-- topology-manager configuration -->
+            <module>
+              <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:topology-manager:impl">
+                prefix:topology-manager-impl
+              </type>
+              <name>topology-manager-default</name>
+              <broker>
                 <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">
-                  binding:binding-rpc-registry
+                  binding:binding-broker-osgi-registry
                 </type>
-                <name>binding-rpc-broker</name>
-              </rpc-registry>
+                <name>binding-osgi-broker</name>
+              </broker>
             </module>
 
             <!-- openflowplugin mock-up configuration -->
         <capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:core:spi:operational-dom-store?module=opendaylight-operational-dom-datastore&amp;revision=2014-06-17</capability>
         <capability>urn:opendaylight:params:xml:ns:yang:controller:inmemory-datastore-provider?module=opendaylight-inmemory-datastore-provider&amp;revision=2014-06-17</capability>
 
-        <!-- forwardingrules-manager capabilities -->
+        <!-- Required YANG models: yangtools -->
+        <capability>urn:TBD:params:xml:ns:yang:network-topology?module=network-topology&amp;revision=2013-10-21</capability>
+
+        <!-- Required YANG models: controller -->
+        <capability>urn:opendaylight:inventory?module=opendaylight-inventory&amp;revision=2013-08-19</capability>
+
+        <!-- Required YANG models: openflowplugin -->
+        <capability>urn:opendaylight:flow:inventory?module=flow-node-inventory&amp;revision=2013-08-19</capability>
+        <capability>urn:opendaylight:flow:topology:discovery?module=flow-topology-discovery&amp;revision=2013-08-19</capability>
+        <capability>urn:opendaylight:flow:types?module=opendaylight-flow-types&amp;revision=2013-10-26</capability>
+        <capability>urn:opendaylight:flow:service?module=sal-flow&amp;revision=2013-08-19</capability>
+        <capability>urn:opendaylight:group:service?module=sal-group&amp;revision=2013-09-18</capability>
+        <capability>urn:opendaylight:meter:service?module=sal-meter&amp;revision=2013-09-18</capability>
+        <capability>urn:opendaylight:port:service?module=sal-port&amp;revision=2013-11-07</capability>
+        <capability>urn:opendaylight:queue:service?module=sal-queue&amp;revision=2015-03-05</capability>
+        <capability>urn:opendaylight:table:service?module=sal-table&amp;revision=2013-10-26</capability>
+        <capability>urn:opendaylight:packet:service?module=packet-processing&amp;revision=2013-07-09</capability>
+        <capability>urn:opendaylight:flow:statistics?module=opendaylight-flow-statistics&amp;revision=2013-08-19</capability>
+
+        <!-- Required YANG models: VTN -->
+        <capability>
+          urn:opendaylight:vtn?module=vtn&amp;revision=2015-03-28
+        </capability>
+        <capability>
+          urn:opendaylight:vtn:config?module=vtn-config&amp;revision=2015-02-09
+        </capability>
+        <capability>
+          urn:opendaylight:vtn:pathmap?module=vtn-path-map&amp;revision=2015-03-28
+        </capability>
+        <capability>
+          urn:opendaylight:vtn:pathpolicy?module=vtn-path-policy&amp;revision=2015-02-09
+        </capability>
+        <capability>
+          urn:opendaylight:vtn:impl:flow?module=vtn-flow-impl&amp;revision=2015-03-13
+        </capability>
+        <capability>
+          urn:opendaylight:vtn:impl:inventory?module=vtn-inventory&amp;revision=2015-02-09
+        </capability>
+        <capability>
+          urn:opendaylight:vtn:impl:topology?module=vtn-topology&amp;revision=2015-02-09
+        </capability>
+
+        <!-- inventory-manager capabilities -->
         <capability>
-          urn:opendaylight:params:xml:ns:yang:openflowplugin:app:forwardingrules-manager?module=forwardingrules-manager&amp;revision=2014-09-25
+          urn:opendaylight:params:xml:ns:yang:inventory-manager:impl?module=inventory-manager-impl&amp;revision=2015-05-30
         </capability>
 
+        <!-- topology-manager capabilities -->
+        <capability>
+          urn:opendaylight:params:xml:ns:yang:topology-manager:impl?module=topology-manager-impl&amp;revision=2015-05-30
+       </capability>
+
         <!-- openflowplugin mock-up capabilities -->
         <capability>
           urn:opendaylight:vtn:it:ofmock:provider?module=ofmock-provider&amp;revision=2015-02-09
index 01b3746c5abc58a691723dbfd2e994122e82ea20..6712d1cf94963e39764a890cb168829eba0d46c8 100644 (file)
@@ -40,9 +40,7 @@
     <module>option</module>
     <module>util</module>
     <module>common</module>
-    <!--
     <module>core</module>
     <module>northbound</module>
-    -->
   </modules>
 </project>