Bug 996: Fixed UT bug due to incorrect VTN event synchronization. 24/8324/1
authorShigeru Yasuda <s-yasuda@da.jp.nec.com>
Wed, 25 Jun 2014 10:57:16 +0000 (19:57 +0900)
committerShigeru Yasuda <s-yasuda@da.jp.nec.com>
Wed, 25 Jun 2014 10:58:28 +0000 (19:58 +0900)
If the test code verifies the number of VTN events delivered to the
listener instance, it needs to ensure that no VTN event is pending
before adding the listener.

Additional changes:

  * VTNThreadDataTest: Fixed too short timeout.
  * Add some test cases for IVTNModeListener.

Change-Id: Ic6efdab85e9cdbda9f73d27bf1319263edba67ab
Signed-off-by: Shigeru Yasuda <s-yasuda@da.jp.nec.com>
manager/implementation/src/test/java/org/opendaylight/vtn/manager/internal/VTNManagerImplTest.java
manager/implementation/src/test/java/org/opendaylight/vtn/manager/internal/VTNManagerImplWithNodesTest.java
manager/implementation/src/test/java/org/opendaylight/vtn/manager/internal/VTNThreadDataTest.java

index 18c530f4b2ffdba2c8c60c2b532b576a7b530385..e997e388b4c01c52da1454d52309ff2e9b4d3148 100644 (file)
@@ -949,15 +949,15 @@ public class VTNManagerImplTest extends VTNManagerImplTestCommon {
         VTNModeListenerStub stub1 = new VTNModeListenerStub();
         VTNModeListenerStub stub2 = new VTNModeListenerStub();
 
+        mgr.addVTNModeListener(stub1);
+        stub1.checkCalledInfo(1, Boolean.FALSE);
+
         VTenantPath tpath = new VTenantPath("tenant");
         Status st = mgr.addTenant(tpath, new VTenantConfig(null));
         assertEquals(StatusCode.SUCCESS, st.getCode());
         flushTasks();
-        stub1.checkCalledInfo(0);
-        stub2.checkCalledInfo(0);
-
-        mgr.addVTNModeListener(stub1);
         stub1.checkCalledInfo(1, Boolean.TRUE);
+        stub2.checkCalledInfo(0);
 
         mgr.addVTNModeListener(stub2);
         stub2.checkCalledInfo(1, Boolean.TRUE);
index abda577b428826944de9b6b0e96f3e505046573e..6c3b096d12891d6dd99e35b50011b9bd25af73b1 100644 (file)
@@ -2182,8 +2182,8 @@ public class VTNManagerImplWithNodesTest extends VTNManagerImplTestCommon {
         pmapAware.checkPmapInfo(3, ifp2, pmconf, UpdateType.ADDED);
         mgr.removeVTNManagerAware(pmapAware);
 
-        mgr.addVTNManagerAware(awareStub);
         flushTasks();
+        mgr.addVTNManagerAware(awareStub);
         awareStub.checkVtnInfo(1, tpath, UpdateType.ADDED);
         awareStub.checkVbrInfo(1, bpath, UpdateType.ADDED);
         awareStub.checkVIfInfo(3, ifp2, UpdateType.ADDED);
@@ -3585,6 +3585,7 @@ public class VTNManagerImplWithNodesTest extends VTNManagerImplTestCommon {
         // Add an IVTNManagerAware listener. This should report current
         // configuration, including MAC mapping.
         OrderedVTNListener listener = new OrderedVTNListener();
+        flushTasks();
         mgr.addVTNManagerAware(listener);
         listener.checkEvent(VTNListenerType.VTN, tpath, vtn, UpdateType.ADDED);
         for (int i = 0; i < bridges.size(); i++) {
index e1c5eec14c1093128e9bbf67e183bec83f8b29a2..257694ff7b836aa988a7168b926b2b1ffa3a1657 100644 (file)
@@ -336,13 +336,13 @@ public class VTNThreadDataTest extends TestUseVTNManagerBase {
 
         VTNModeListenerStub stub = new VTNModeListenerStub();
         vtnMgr.addVTNModeListener(stub);
-        stub.checkCalledInfo(1);
+        stub.checkCalledInfo(1, Boolean.FALSE);
 
         // create tenant and bridges
         VTenantPath tpath = new VTenantPath("tenant");
         Status st = vtnMgr.addTenant(tpath, new VTenantConfig("desc"));
         assertEquals(StatusCode.SUCCESS, st.getCode());
-        stub.checkCalledInfo(1);
+        stub.checkCalledInfo(1, Boolean.TRUE);
 
         ReentrantReadWriteLock  rwLock = new ReentrantReadWriteLock();
         VTNThreadData data = VTNThreadData.create(rwLock.writeLock());
@@ -350,7 +350,7 @@ public class VTNThreadDataTest extends TestUseVTNManagerBase {
         // setModeChanged() and cleanup() are called in removeTenant().
         st = vtnMgr.removeTenant(tpath);
         assertEquals(StatusCode.SUCCESS, st.getCode());
-        stub.checkCalledInfo(1);
+        stub.checkCalledInfo(1, Boolean.FALSE);
 
         data = VTNThreadData.create(rwLock.writeLock());
         data.cleanUp(vtnMgr);
@@ -400,6 +400,10 @@ public class VTNThreadDataTest extends TestUseVTNManagerBase {
         private int calledCount = 0;
         private Boolean oldactive = null;
 
+        /**
+         * The number of milliseconds to wait for VTN events.
+         */
+        private static final long  EVENT_TIMEOUT = 10000L;
 
         @Override
         public synchronized void vtnModeChanged(boolean active) {
@@ -410,7 +414,7 @@ public class VTNThreadDataTest extends TestUseVTNManagerBase {
 
         private synchronized int getCalledCount(int expected) {
             if (calledCount < expected) {
-                long milli = 1000;
+                long milli = EVENT_TIMEOUT;
                 long limit = System.currentTimeMillis() + milli;
                 do {
                     try {
@@ -432,7 +436,7 @@ public class VTNThreadDataTest extends TestUseVTNManagerBase {
 
         private synchronized Boolean getCalledArg() {
             if (oldactive == null) {
-                long milli = 1000;
+                long milli = EVENT_TIMEOUT;
                 long limit = System.currentTimeMillis() + milli;
                 do {
                     try {