blob: 0556e1fa7987715eb109ebca319eb4158262e08b [file] [log] [blame]
tombe988312014-09-19 18:38:47 -07001package org.onlab.onos.net.topology.impl;
tomb86066b2014-09-15 09:52:24 -07002
tombe988312014-09-19 18:38:47 -07003import com.google.common.collect.ImmutableSet;
tomb86066b2014-09-15 09:52:24 -07004import org.junit.After;
5import org.junit.Before;
6import org.junit.Test;
7import org.onlab.onos.event.Event;
8import org.onlab.onos.event.impl.TestEventDispatcher;
9import org.onlab.onos.net.Device;
10import org.onlab.onos.net.Link;
11import org.onlab.onos.net.device.DeviceEvent;
tombe988312014-09-19 18:38:47 -070012import org.onlab.onos.net.device.impl.DeviceManager;
tomb86066b2014-09-15 09:52:24 -070013import org.onlab.onos.net.link.LinkEvent;
tombe988312014-09-19 18:38:47 -070014import org.onlab.onos.net.link.impl.LinkManager;
tomb86066b2014-09-15 09:52:24 -070015import org.onlab.onos.net.provider.AbstractProviderService;
16import org.onlab.onos.net.provider.ProviderId;
17import org.onlab.onos.net.topology.GraphDescription;
18import org.onlab.onos.net.topology.TopologyProvider;
19import org.onlab.onos.net.topology.TopologyProviderRegistry;
20import org.onlab.onos.net.topology.TopologyProviderService;
tomb86066b2014-09-15 09:52:24 -070021
22import java.util.List;
23import java.util.Set;
24
tomb86066b2014-09-15 09:52:24 -070025import 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;
tomb86066b2014-09-15 09:52:24 -070030
31/**
32 * Test of the default topology provider implementation.
33 */
34public class DefaultTopologyProviderTest {
35
36 private DefaultTopologyProvider provider = new DefaultTopologyProvider();
37 private TestTopoRegistry topologyService = new TestTopoRegistry();
38 private TestDeviceService deviceService = new TestDeviceService();
39 private TestLinkService linkService = new TestLinkService();
40 private TestTopoProviderService providerService;
41
42 @Before
43 public void setUp() {
44 provider.deviceService = deviceService;
45 provider.linkService = linkService;
46 provider.providerRegistry = topologyService;
47 provider.activate();
48 }
49
50 @After
51 public void tearDown() {
52 provider.deactivate();
53 provider.providerRegistry = null;
54 provider.deviceService = null;
55 provider.linkService = null;
56 }
57
58 private void validateSubmission() {
59 assertNotNull("registration expected", providerService);
Ayaka Koshibecc4c4c82014-09-16 11:23:37 -070060 assertEquals("incorrect provider", provider, providerService.provider());
tomb86066b2014-09-15 09:52:24 -070061 assertNotNull("topo change should be submitted", providerService.graphDesc);
62 assertEquals("incorrect vertex count", 6, providerService.graphDesc.vertexes().size());
63 assertEquals("incorrect edge count", 10, providerService.graphDesc.edges().size());
64 }
65
66 @Test
67 public void basics() {
68 assertAfter(100, new Runnable() {
69 @Override
70 public void run() {
71 validateSubmission();
72 }
73 });
74 }
75
76 @Test
77 public void eventDriven() {
78 assertAfter(100, new Runnable() {
79 @Override
80 public void run() {
81 validateSubmission();
tombe988312014-09-19 18:38:47 -070082 deviceService.post(new DeviceEvent(DEVICE_ADDED, TopologyManagerTest.device("z"), null));
83 linkService.post(new LinkEvent(LINK_ADDED, TopologyManagerTest.link("z", 1, "a", 4)));
tomb86066b2014-09-15 09:52:24 -070084 validateSubmission();
85 }
86 });
87 }
88
89
90 private class TestTopoRegistry implements TopologyProviderRegistry {
91
92 @Override
93 public TopologyProviderService register(TopologyProvider provider) {
94 providerService = new TestTopoProviderService(provider);
95 return providerService;
96 }
97
98 @Override
99 public void unregister(TopologyProvider provider) {
100 }
101
102 @Override
103 public Set<ProviderId> getProviders() {
104 return null;
105 }
106 }
107
108 private class TestTopoProviderService
109 extends AbstractProviderService<TopologyProvider>
110 implements TopologyProviderService {
111 GraphDescription graphDesc;
112
113 protected TestTopoProviderService(TopologyProvider provider) {
114 super(provider);
115 }
116
117 @Override
118 public void topologyChanged(GraphDescription graphDescription, List<Event> reasons) {
119 graphDesc = graphDescription;
120 }
121 }
122
tom41a2c5f2014-09-19 09:20:35 -0700123 private class TestDeviceService extends DeviceManager {
tomb86066b2014-09-15 09:52:24 -0700124 TestDeviceService() {
125 eventDispatcher = new TestEventDispatcher();
126 eventDispatcher.addSink(DeviceEvent.class, listenerRegistry);
127 }
128
129 @Override
130 public Iterable<Device> getDevices() {
tombe988312014-09-19 18:38:47 -0700131 return ImmutableSet.of(TopologyManagerTest.device("a"), TopologyManagerTest.device("b"),
132 TopologyManagerTest.device("c"), TopologyManagerTest.device("d"),
133 TopologyManagerTest.device("e"), TopologyManagerTest.device("f"));
tomb86066b2014-09-15 09:52:24 -0700134 }
135
136 void post(DeviceEvent event) {
137 eventDispatcher.post(event);
138 }
139 }
140
tom35c0dc32014-09-19 10:00:58 -0700141 private class TestLinkService extends LinkManager {
tomb86066b2014-09-15 09:52:24 -0700142 TestLinkService() {
143 eventDispatcher = new TestEventDispatcher();
144 eventDispatcher.addSink(LinkEvent.class, listenerRegistry);
145 }
146
147 @Override
148 public Iterable<Link> getLinks() {
tombe988312014-09-19 18:38:47 -0700149 return ImmutableSet.of(TopologyManagerTest.link("a", 1, "b", 1), TopologyManagerTest.link("b", 1, "a", 1),
150 TopologyManagerTest.link("b", 2, "c", 1), TopologyManagerTest.link("c", 1, "b", 2),
151 TopologyManagerTest.link("c", 2, "d", 1), TopologyManagerTest.link("d", 1, "c", 2),
152 TopologyManagerTest.link("d", 2, "a", 2), TopologyManagerTest.link("a", 2, "d", 2),
153 TopologyManagerTest.link("e", 1, "f", 1), TopologyManagerTest.link("f", 1, "e", 1));
tomb86066b2014-09-15 09:52:24 -0700154 }
155
156 void post(LinkEvent event) {
157 eventDispatcher.post(event);
158 }
159 }
160}