tom

Adding topology test suite.

...@@ -48,7 +48,7 @@ public class SimpleDeviceManager ...@@ -48,7 +48,7 @@ public class SimpleDeviceManager
48 48
49 private final Logger log = getLogger(getClass()); 49 private final Logger log = getLogger(getClass());
50 50
51 - private final AbstractListenerRegistry<DeviceEvent, DeviceListener> 51 + protected final AbstractListenerRegistry<DeviceEvent, DeviceListener>
52 listenerRegistry = new AbstractListenerRegistry<>(); 52 listenerRegistry = new AbstractListenerRegistry<>();
53 53
54 private final SimpleDeviceStore store = new SimpleDeviceStore(); 54 private final SimpleDeviceStore store = new SimpleDeviceStore();
......
...@@ -45,7 +45,7 @@ public class SimpleLinkManager ...@@ -45,7 +45,7 @@ public class SimpleLinkManager
45 45
46 private final Logger log = getLogger(getClass()); 46 private final Logger log = getLogger(getClass());
47 47
48 - private final AbstractListenerRegistry<LinkEvent, LinkListener> 48 + protected final AbstractListenerRegistry<LinkEvent, LinkListener>
49 listenerRegistry = new AbstractListenerRegistry<>(); 49 listenerRegistry = new AbstractListenerRegistry<>();
50 50
51 private final SimpleLinkStore store = new SimpleLinkStore(); 51 private final SimpleLinkStore store = new SimpleLinkStore();
......
1 +package org.onlab.onos.net.trivial.topology.impl;
2 +
3 +import org.junit.After;
4 +import org.junit.Before;
5 +import org.junit.Test;
6 +import org.onlab.onos.event.Event;
7 +import org.onlab.onos.event.impl.TestEventDispatcher;
8 +import org.onlab.onos.net.Device;
9 +import org.onlab.onos.net.Link;
10 +import org.onlab.onos.net.device.DeviceEvent;
11 +import org.onlab.onos.net.link.LinkEvent;
12 +import org.onlab.onos.net.provider.AbstractProviderService;
13 +import org.onlab.onos.net.provider.ProviderId;
14 +import org.onlab.onos.net.topology.GraphDescription;
15 +import org.onlab.onos.net.topology.TopologyProvider;
16 +import org.onlab.onos.net.topology.TopologyProviderRegistry;
17 +import org.onlab.onos.net.topology.TopologyProviderService;
18 +import org.onlab.onos.net.trivial.device.impl.SimpleDeviceManager;
19 +import org.onlab.onos.net.trivial.link.impl.SimpleLinkManager;
20 +
21 +import java.util.List;
22 +import java.util.Set;
23 +
24 +import static com.google.common.collect.ImmutableSet.of;
25 +import static org.junit.Assert.assertEquals;
26 +import static org.junit.Assert.assertNotNull;
27 +import static org.onlab.junit.TestTools.assertAfter;
28 +import static org.onlab.onos.net.device.DeviceEvent.Type.DEVICE_ADDED;
29 +import static org.onlab.onos.net.link.LinkEvent.Type.LINK_ADDED;
30 +import static org.onlab.onos.net.trivial.topology.impl.SimpleTopologyManagerTest.device;
31 +import static org.onlab.onos.net.trivial.topology.impl.SimpleTopologyManagerTest.link;
32 +
33 +/**
34 + * Test of the default topology provider implementation.
35 + */
36 +public class DefaultTopologyProviderTest {
37 +
38 + private DefaultTopologyProvider provider = new DefaultTopologyProvider();
39 + private TestTopoRegistry topologyService = new TestTopoRegistry();
40 + private TestDeviceService deviceService = new TestDeviceService();
41 + private TestLinkService linkService = new TestLinkService();
42 + private TestTopoProviderService providerService;
43 +
44 + @Before
45 + public void setUp() {
46 + provider.deviceService = deviceService;
47 + provider.linkService = linkService;
48 + provider.providerRegistry = topologyService;
49 + provider.activate();
50 + }
51 +
52 + @After
53 + public void tearDown() {
54 + provider.deactivate();
55 + provider.providerRegistry = null;
56 + provider.deviceService = null;
57 + provider.linkService = null;
58 + }
59 +
60 + private void validateSubmission() {
61 + assertNotNull("registration expected", providerService);
62 + assertEquals("incorrect providert", provider, providerService.provider());
63 + assertNotNull("topo change should be submitted", providerService.graphDesc);
64 + assertEquals("incorrect vertex count", 6, providerService.graphDesc.vertexes().size());
65 + assertEquals("incorrect edge count", 10, providerService.graphDesc.edges().size());
66 + }
67 +
68 + @Test
69 + public void basics() {
70 + assertAfter(100, new Runnable() {
71 + @Override
72 + public void run() {
73 + validateSubmission();
74 + }
75 + });
76 + }
77 +
78 + @Test
79 + public void eventDriven() {
80 + assertAfter(100, new Runnable() {
81 + @Override
82 + public void run() {
83 + validateSubmission();
84 + deviceService.post(new DeviceEvent(DEVICE_ADDED, device("z"), null));
85 + linkService.post(new LinkEvent(LINK_ADDED, link("z", 1, "a", 4)));
86 + validateSubmission();
87 + }
88 + });
89 + }
90 +
91 +
92 + private class TestTopoRegistry implements TopologyProviderRegistry {
93 +
94 + @Override
95 + public TopologyProviderService register(TopologyProvider provider) {
96 + providerService = new TestTopoProviderService(provider);
97 + return providerService;
98 + }
99 +
100 + @Override
101 + public void unregister(TopologyProvider provider) {
102 + }
103 +
104 + @Override
105 + public Set<ProviderId> getProviders() {
106 + return null;
107 + }
108 + }
109 +
110 + private class TestTopoProviderService
111 + extends AbstractProviderService<TopologyProvider>
112 + implements TopologyProviderService {
113 + GraphDescription graphDesc;
114 +
115 + protected TestTopoProviderService(TopologyProvider provider) {
116 + super(provider);
117 + }
118 +
119 + @Override
120 + public void topologyChanged(GraphDescription graphDescription, List<Event> reasons) {
121 + graphDesc = graphDescription;
122 + }
123 + }
124 +
125 + private class TestDeviceService extends SimpleDeviceManager {
126 + TestDeviceService() {
127 + eventDispatcher = new TestEventDispatcher();
128 + eventDispatcher.addSink(DeviceEvent.class, listenerRegistry);
129 + }
130 +
131 + @Override
132 + public Iterable<Device> getDevices() {
133 + return of(device("a"), device("b"),
134 + device("c"), device("d"),
135 + device("e"), device("f"));
136 + }
137 +
138 + void post(DeviceEvent event) {
139 + eventDispatcher.post(event);
140 + }
141 + }
142 +
143 + private class TestLinkService extends SimpleLinkManager {
144 + TestLinkService() {
145 + eventDispatcher = new TestEventDispatcher();
146 + eventDispatcher.addSink(LinkEvent.class, listenerRegistry);
147 + }
148 +
149 + @Override
150 + public Iterable<Link> getLinks() {
151 + return of(link("a", 1, "b", 1), link("b", 1, "a", 1),
152 + link("b", 2, "c", 1), link("c", 1, "b", 2),
153 + link("c", 2, "d", 1), link("d", 1, "c", 2),
154 + link("d", 2, "a", 2), link("a", 2, "d", 2),
155 + link("e", 1, "f", 1), link("f", 1, "e", 1));
156 + }
157 +
158 + void post(LinkEvent event) {
159 + eventDispatcher.post(event);
160 + }
161 + }
162 +}
...\ No newline at end of file ...\ No newline at end of file
...@@ -182,20 +182,20 @@ public class SimpleTopologyManagerTest { ...@@ -182,20 +182,20 @@ public class SimpleTopologyManagerTest {
182 } 182 }
183 183
184 // Short-hand for creating a link. 184 // Short-hand for creating a link.
185 - private Link link(String src, int sp, String dst, int dp) { 185 + static Link link(String src, int sp, String dst, int dp) {
186 return new DefaultLink(PID, new ConnectPoint(did(src), portNumber(sp)), 186 return new DefaultLink(PID, new ConnectPoint(did(src), portNumber(sp)),
187 new ConnectPoint(did(dst), portNumber(dp)), 187 new ConnectPoint(did(dst), portNumber(dp)),
188 Link.Type.DIRECT); 188 Link.Type.DIRECT);
189 } 189 }
190 190
191 // Crates a new device with the specified id 191 // Crates a new device with the specified id
192 - private Device device(String id) { 192 + static Device device(String id) {
193 return new DefaultDevice(PID, did(id), Device.Type.SWITCH, 193 return new DefaultDevice(PID, did(id), Device.Type.SWITCH,
194 "mfg", "1.0", "1.1", "1234"); 194 "mfg", "1.0", "1.1", "1234");
195 } 195 }
196 196
197 // Short-hand for producing a device id from a string 197 // Short-hand for producing a device id from a string
198 - private DeviceId did(String id) { 198 + static DeviceId did(String id) {
199 return deviceId("of:" + id); 199 return deviceId("of:" + id);
200 } 200 }
201 201
......