blob: 40999c5c93b35c34e05f2887d5ed6a9e317b8467 [file] [log] [blame]
YuanyouZhangf26445a2015-07-22 17:13:18 +08001/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2015-present Open Networking Laboratory
YuanyouZhangf26445a2015-07-22 17:13:18 +08003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.onosproject.ovsdb.provider.host;
17
18import static org.junit.Assert.assertEquals;
19import static org.junit.Assert.assertNotNull;
20
21import java.util.List;
22import java.util.Set;
jaegonkim1af0ae52017-01-01 10:46:55 +090023import java.util.function.Consumer;
YuanyouZhangf26445a2015-07-22 17:13:18 +080024
25import org.junit.After;
26import org.junit.Before;
27import org.junit.Test;
samanwita palc40e5ed2015-09-24 11:01:51 -070028import org.onlab.packet.IpAddress;
YuanyouZhangf26445a2015-07-22 17:13:18 +080029import org.onlab.packet.MacAddress;
Hyunsun Moon5fb20a52015-09-25 17:02:33 -070030import org.onlab.packet.TpPort;
YuanyouZhangf26445a2015-07-22 17:13:18 +080031import org.onosproject.net.DeviceId;
32import org.onosproject.net.HostId;
Charles Chan888e20a2017-05-01 15:44:23 -070033import org.onosproject.net.HostLocation;
YuanyouZhangf26445a2015-07-22 17:13:18 +080034import org.onosproject.net.host.HostDescription;
35import org.onosproject.net.host.HostProvider;
36import org.onosproject.net.host.HostProviderRegistry;
37import org.onosproject.net.host.HostProviderService;
38import org.onosproject.net.provider.AbstractProviderService;
39import org.onosproject.net.provider.ProviderId;
40import org.onosproject.ovsdb.controller.DefaultEventSubject;
41import org.onosproject.ovsdb.controller.EventSubject;
42import org.onosproject.ovsdb.controller.OvsdbClientService;
43import org.onosproject.ovsdb.controller.OvsdbController;
44import org.onosproject.ovsdb.controller.OvsdbDatapathId;
45import org.onosproject.ovsdb.controller.OvsdbEvent;
46import org.onosproject.ovsdb.controller.OvsdbEventListener;
47import org.onosproject.ovsdb.controller.OvsdbIfaceId;
48import org.onosproject.ovsdb.controller.OvsdbNodeId;
49import org.onosproject.ovsdb.controller.OvsdbNodeListener;
50import org.onosproject.ovsdb.controller.OvsdbPortName;
51import org.onosproject.ovsdb.controller.OvsdbPortNumber;
52import org.onosproject.ovsdb.controller.OvsdbPortType;
53
54/**
55 * Test for ovsdb host provider.
56 */
57public class OvsdbHostProviderTest {
58 private static final MacAddress MAC = MacAddress
59 .valueOf("00:00:11:00:00:01");
60 private final OvsdbHostProvider provider = new OvsdbHostProvider();
61 private final TestHostRegistry hostRegistry = new TestHostRegistry();
62 protected OvsdbControllerTest controller = new OvsdbControllerTest();
63 private TestHostProviderService providerService;
64
65 @Before
66 public void setUp() {
67 provider.providerRegistry = hostRegistry;
68 provider.controller = controller;
69 provider.activate();
70 }
71
72 @Test
73 public void basics() {
74 assertNotNull("registration expected", providerService);
75 assertEquals("incorrect provider", provider, providerService.provider());
76 }
77
78 @Test
79 public void portAdded() {
80 DefaultEventSubject eventSubject = new DefaultEventSubject(MAC, null,
81 new OvsdbPortName("portName"),
82 new OvsdbPortNumber(0L),
83 new OvsdbDatapathId("10002"),
84 new OvsdbPortType("vxlan"),
85 new OvsdbIfaceId("102345"));
86 controller.ovsdbEventListener
87 .handle(new OvsdbEvent<EventSubject>(
88 OvsdbEvent.Type.PORT_ADDED,
89 eventSubject));
90 assertNotNull("never went throught the provider service",
91 providerService.added);
92
93 }
94
95 @Test
96 public void portRemoved() {
97 DefaultEventSubject eventSubject = new DefaultEventSubject(MAC, null,
98 new OvsdbPortName("portName"),
99 new OvsdbPortNumber(0L),
100 new OvsdbDatapathId("10002"),
101 new OvsdbPortType("vxlan"),
102 new OvsdbIfaceId("102345"));
103 controller.ovsdbEventListener
104 .handle(new OvsdbEvent<EventSubject>(
105 OvsdbEvent.Type.PORT_REMOVED,
106 eventSubject));
107 assertEquals("port status unhandled", 1, providerService.removeCount);
108 }
109
110 @After
111 public void tearDown() {
112 provider.deactivate();
113 provider.coreService = null;
114 provider.providerRegistry = null;
115 }
116
117 private class TestHostRegistry implements HostProviderRegistry {
118
119 @Override
120 public HostProviderService register(HostProvider provider) {
121 providerService = new TestHostProviderService(provider);
122 return providerService;
123 }
124
125 @Override
126 public void unregister(HostProvider provider) {
127 }
128
129 @Override
130 public Set<ProviderId> getProviders() {
131 return null;
132 }
133
134 }
135
136 private class TestHostProviderService
137 extends AbstractProviderService<HostProvider>
138 implements HostProviderService {
139
140 DeviceId added = null;
141 DeviceId moved = null;
142 DeviceId spine = null;
143 public int removeCount;
144
145 protected TestHostProviderService(HostProvider provider) {
146 super(provider);
147 }
148
149 @Override
Brian O'Connorf107bd72015-09-21 15:31:03 -0700150 public void hostDetected(HostId hostId, HostDescription hostDescription, boolean replaceIps) {
YuanyouZhangf26445a2015-07-22 17:13:18 +0800151 DeviceId descr = hostDescription.location().deviceId();
152 if (added == null) {
153 added = descr;
154 } else if ((moved == null) && !descr.equals(added)) {
155 moved = descr;
156 } else {
157 spine = descr;
158 }
159 }
160
161 @Override
162 public void hostVanished(HostId hostId) {
163 removeCount++;
164 }
165
samanwita palc40e5ed2015-09-24 11:01:51 -0700166 @Override
167 public void removeIpFromHost(HostId hostId, IpAddress ipAddress) {
168
169 }
170
Charles Chan888e20a2017-05-01 15:44:23 -0700171 @Override
172 public void removeLocationFromHost(HostId hostId, HostLocation location) {
173
174 }
YuanyouZhangf26445a2015-07-22 17:13:18 +0800175 }
176
177 private class OvsdbControllerTest implements OvsdbController {
178 private OvsdbEventListener ovsdbEventListener = null;
179
180 @Override
181 public void addNodeListener(OvsdbNodeListener listener) {
182
183 }
184
185 @Override
186 public void removeNodeListener(OvsdbNodeListener listener) {
187
188 }
189
190 @Override
191 public void addOvsdbEventListener(OvsdbEventListener listener) {
192 ovsdbEventListener = listener;
193
194 }
195
196 @Override
197 public void removeOvsdbEventListener(OvsdbEventListener listener) {
198 ovsdbEventListener = null;
199
200 }
201
202 @Override
203 public List<OvsdbNodeId> getNodeIds() {
204 return null;
205 }
206
207 @Override
208 public OvsdbClientService getOvsdbClient(OvsdbNodeId nodeId) {
209 return null;
210 }
Hyunsun Moon5fb20a52015-09-25 17:02:33 -0700211
212 @Override
213 public void connect(IpAddress ip, TpPort port) {
214
215 }
jaegonkim1af0ae52017-01-01 10:46:55 +0900216
217 @Override
218 public void connect(IpAddress ip, TpPort port, Consumer<Exception> failhandler) {
219
220 }
YuanyouZhangf26445a2015-07-22 17:13:18 +0800221 }
222}