blob: 858841f7effe45e78b0456fe95cd6394b64548de [file] [log] [blame]
tomb86066b2014-09-15 09:52:24 -07001package org.onlab.onos.net.trivial.topology.impl;
2
3import org.junit.After;
4import org.junit.Before;
5import org.junit.Test;
6import org.onlab.onos.event.Event;
7import org.onlab.onos.event.impl.TestEventDispatcher;
8import org.onlab.onos.net.Device;
9import org.onlab.onos.net.Link;
10import org.onlab.onos.net.device.DeviceEvent;
11import org.onlab.onos.net.link.LinkEvent;
12import org.onlab.onos.net.provider.AbstractProviderService;
13import org.onlab.onos.net.provider.ProviderId;
14import org.onlab.onos.net.topology.GraphDescription;
15import org.onlab.onos.net.topology.TopologyProvider;
16import org.onlab.onos.net.topology.TopologyProviderRegistry;
17import org.onlab.onos.net.topology.TopologyProviderService;
tom41a2c5f2014-09-19 09:20:35 -070018import org.onlab.onos.net.trivial.device.impl.DeviceManager;
tomb86066b2014-09-15 09:52:24 -070019import org.onlab.onos.net.trivial.link.impl.SimpleLinkManager;
20
21import java.util.List;
22import java.util.Set;
23
24import static com.google.common.collect.ImmutableSet.of;
25import static org.junit.Assert.assertEquals;
26import static org.junit.Assert.assertNotNull;
27import static org.onlab.junit.TestTools.assertAfter;
28import static org.onlab.onos.net.device.DeviceEvent.Type.DEVICE_ADDED;
29import static org.onlab.onos.net.link.LinkEvent.Type.LINK_ADDED;
30import static org.onlab.onos.net.trivial.topology.impl.SimpleTopologyManagerTest.device;
31import static org.onlab.onos.net.trivial.topology.impl.SimpleTopologyManagerTest.link;
32
33/**
34 * Test of the default topology provider implementation.
35 */
36public 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);
Ayaka Koshibecc4c4c82014-09-16 11:23:37 -070062 assertEquals("incorrect provider", provider, providerService.provider());
tomb86066b2014-09-15 09:52:24 -070063 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
tom41a2c5f2014-09-19 09:20:35 -0700125 private class TestDeviceService extends DeviceManager {
tomb86066b2014-09-15 09:52:24 -0700126 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}