Yuta HIGUCHI

remove timing sensitive portion from DefaultTopologyProviderTest.

Change-Id: I7fa496c421470520df4cb79c036ac8ea25b31c96
1 package org.onlab.onos.net.topology.impl; 1 package org.onlab.onos.net.topology.impl;
2 2
3 import com.google.common.collect.ImmutableSet; 3 import com.google.common.collect.ImmutableSet;
4 +
4 import org.junit.After; 5 import org.junit.After;
5 import org.junit.Before; 6 import org.junit.Before;
6 import org.junit.Test; 7 import org.junit.Test;
...@@ -21,10 +22,12 @@ import org.onlab.onos.net.topology.TopologyProviderService; ...@@ -21,10 +22,12 @@ import org.onlab.onos.net.topology.TopologyProviderService;
21 22
22 import java.util.List; 23 import java.util.List;
23 import java.util.Set; 24 import java.util.Set;
25 +import java.util.concurrent.Phaser;
26 +import java.util.concurrent.TimeUnit;
27 +import java.util.concurrent.TimeoutException;
24 28
25 -import static org.junit.Assert.assertEquals; 29 +import static org.junit.Assert.*;
26 -import static org.junit.Assert.assertNotNull; 30 +import static org.hamcrest.Matchers.*;
27 -import static org.onlab.junit.TestTools.assertAfter;
28 import static org.onlab.onos.net.NetTestTools.device; 31 import static org.onlab.onos.net.NetTestTools.device;
29 import static org.onlab.onos.net.NetTestTools.link; 32 import static org.onlab.onos.net.NetTestTools.link;
30 import static org.onlab.onos.net.device.DeviceEvent.Type.DEVICE_ADDED; 33 import static org.onlab.onos.net.device.DeviceEvent.Type.DEVICE_ADDED;
...@@ -41,6 +44,9 @@ public class DefaultTopologyProviderTest { ...@@ -41,6 +44,9 @@ public class DefaultTopologyProviderTest {
41 private TestLinkService linkService = new TestLinkService(); 44 private TestLinkService linkService = new TestLinkService();
42 private TestTopoProviderService providerService; 45 private TestTopoProviderService providerService;
43 46
47 + // phase corresponds to number of topologyChanged called
48 + private Phaser topologyChangedCounts = new Phaser(1);
49 +
44 @Before 50 @Before
45 public void setUp() { 51 public void setUp() {
46 provider.deviceService = deviceService; 52 provider.deviceService = deviceService;
...@@ -66,27 +72,24 @@ public class DefaultTopologyProviderTest { ...@@ -66,27 +72,24 @@ public class DefaultTopologyProviderTest {
66 } 72 }
67 73
68 @Test 74 @Test
69 - public void basics() { 75 + public void basics() throws InterruptedException, TimeoutException {
70 - assertAfter(100, new Runnable() { 76 + assertEquals(1, topologyChangedCounts.awaitAdvanceInterruptibly(0, 1, TimeUnit.SECONDS));
71 - @Override
72 - public void run() {
73 validateSubmission(); 77 validateSubmission();
74 } 78 }
75 - });
76 - }
77 79
78 @Test 80 @Test
79 - public void eventDriven() { 81 + public void eventDriven() throws InterruptedException, TimeoutException {
80 - assertAfter(100, new Runnable() { 82 + assertEquals(1, topologyChangedCounts.awaitAdvanceInterruptibly(0, 1, TimeUnit.SECONDS));
81 - @Override
82 - public void run() {
83 validateSubmission(); 83 validateSubmission();
84 +
84 deviceService.post(new DeviceEvent(DEVICE_ADDED, device("z"), null)); 85 deviceService.post(new DeviceEvent(DEVICE_ADDED, device("z"), null));
85 linkService.post(new LinkEvent(LINK_ADDED, link("z", 1, "a", 4))); 86 linkService.post(new LinkEvent(LINK_ADDED, link("z", 1, "a", 4)));
87 + assertThat(topologyChangedCounts.awaitAdvanceInterruptibly(1, 1, TimeUnit.SECONDS),
88 + is(greaterThanOrEqualTo(2)));
89 + // Note: posting event, to trigger topologyChanged call,
90 + // but dummy topology will not change.
86 validateSubmission(); 91 validateSubmission();
87 } 92 }
88 - });
89 - }
90 93
91 94
92 private class TestTopoRegistry implements TopologyProviderRegistry { 95 private class TestTopoRegistry implements TopologyProviderRegistry {
...@@ -119,6 +122,7 @@ public class DefaultTopologyProviderTest { ...@@ -119,6 +122,7 @@ public class DefaultTopologyProviderTest {
119 @Override 122 @Override
120 public void topologyChanged(GraphDescription graphDescription, List<Event> reasons) { 123 public void topologyChanged(GraphDescription graphDescription, List<Event> reasons) {
121 graphDesc = graphDescription; 124 graphDesc = graphDescription;
125 + topologyChangedCounts.arrive();
122 } 126 }
123 } 127 }
124 128
......