blob: c5eeedd614e64ebf50560c1bb1c07075735f05b8 [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;
33import org.onosproject.net.host.HostDescription;
34import org.onosproject.net.host.HostProvider;
35import org.onosproject.net.host.HostProviderRegistry;
36import org.onosproject.net.host.HostProviderService;
37import org.onosproject.net.provider.AbstractProviderService;
38import org.onosproject.net.provider.ProviderId;
39import org.onosproject.ovsdb.controller.DefaultEventSubject;
40import org.onosproject.ovsdb.controller.EventSubject;
41import org.onosproject.ovsdb.controller.OvsdbClientService;
42import org.onosproject.ovsdb.controller.OvsdbController;
43import org.onosproject.ovsdb.controller.OvsdbDatapathId;
44import org.onosproject.ovsdb.controller.OvsdbEvent;
45import org.onosproject.ovsdb.controller.OvsdbEventListener;
46import org.onosproject.ovsdb.controller.OvsdbIfaceId;
47import org.onosproject.ovsdb.controller.OvsdbNodeId;
48import org.onosproject.ovsdb.controller.OvsdbNodeListener;
49import org.onosproject.ovsdb.controller.OvsdbPortName;
50import org.onosproject.ovsdb.controller.OvsdbPortNumber;
51import org.onosproject.ovsdb.controller.OvsdbPortType;
52
53/**
54 * Test for ovsdb host provider.
55 */
56public class OvsdbHostProviderTest {
57 private static final MacAddress MAC = MacAddress
58 .valueOf("00:00:11:00:00:01");
59 private final OvsdbHostProvider provider = new OvsdbHostProvider();
60 private final TestHostRegistry hostRegistry = new TestHostRegistry();
61 protected OvsdbControllerTest controller = new OvsdbControllerTest();
62 private TestHostProviderService providerService;
63
64 @Before
65 public void setUp() {
66 provider.providerRegistry = hostRegistry;
67 provider.controller = controller;
68 provider.activate();
69 }
70
71 @Test
72 public void basics() {
73 assertNotNull("registration expected", providerService);
74 assertEquals("incorrect provider", provider, providerService.provider());
75 }
76
77 @Test
78 public void portAdded() {
79 DefaultEventSubject eventSubject = new DefaultEventSubject(MAC, null,
80 new OvsdbPortName("portName"),
81 new OvsdbPortNumber(0L),
82 new OvsdbDatapathId("10002"),
83 new OvsdbPortType("vxlan"),
84 new OvsdbIfaceId("102345"));
85 controller.ovsdbEventListener
86 .handle(new OvsdbEvent<EventSubject>(
87 OvsdbEvent.Type.PORT_ADDED,
88 eventSubject));
89 assertNotNull("never went throught the provider service",
90 providerService.added);
91
92 }
93
94 @Test
95 public void portRemoved() {
96 DefaultEventSubject eventSubject = new DefaultEventSubject(MAC, null,
97 new OvsdbPortName("portName"),
98 new OvsdbPortNumber(0L),
99 new OvsdbDatapathId("10002"),
100 new OvsdbPortType("vxlan"),
101 new OvsdbIfaceId("102345"));
102 controller.ovsdbEventListener
103 .handle(new OvsdbEvent<EventSubject>(
104 OvsdbEvent.Type.PORT_REMOVED,
105 eventSubject));
106 assertEquals("port status unhandled", 1, providerService.removeCount);
107 }
108
109 @After
110 public void tearDown() {
111 provider.deactivate();
112 provider.coreService = null;
113 provider.providerRegistry = null;
114 }
115
116 private class TestHostRegistry implements HostProviderRegistry {
117
118 @Override
119 public HostProviderService register(HostProvider provider) {
120 providerService = new TestHostProviderService(provider);
121 return providerService;
122 }
123
124 @Override
125 public void unregister(HostProvider provider) {
126 }
127
128 @Override
129 public Set<ProviderId> getProviders() {
130 return null;
131 }
132
133 }
134
135 private class TestHostProviderService
136 extends AbstractProviderService<HostProvider>
137 implements HostProviderService {
138
139 DeviceId added = null;
140 DeviceId moved = null;
141 DeviceId spine = null;
142 public int removeCount;
143
144 protected TestHostProviderService(HostProvider provider) {
145 super(provider);
146 }
147
148 @Override
Brian O'Connorf107bd72015-09-21 15:31:03 -0700149 public void hostDetected(HostId hostId, HostDescription hostDescription, boolean replaceIps) {
YuanyouZhangf26445a2015-07-22 17:13:18 +0800150 DeviceId descr = hostDescription.location().deviceId();
151 if (added == null) {
152 added = descr;
153 } else if ((moved == null) && !descr.equals(added)) {
154 moved = descr;
155 } else {
156 spine = descr;
157 }
158 }
159
160 @Override
161 public void hostVanished(HostId hostId) {
162 removeCount++;
163 }
164
samanwita palc40e5ed2015-09-24 11:01:51 -0700165 @Override
166 public void removeIpFromHost(HostId hostId, IpAddress ipAddress) {
167
168 }
169
YuanyouZhangf26445a2015-07-22 17:13:18 +0800170 }
171
172 private class OvsdbControllerTest implements OvsdbController {
173 private OvsdbEventListener ovsdbEventListener = null;
174
175 @Override
176 public void addNodeListener(OvsdbNodeListener listener) {
177
178 }
179
180 @Override
181 public void removeNodeListener(OvsdbNodeListener listener) {
182
183 }
184
185 @Override
186 public void addOvsdbEventListener(OvsdbEventListener listener) {
187 ovsdbEventListener = listener;
188
189 }
190
191 @Override
192 public void removeOvsdbEventListener(OvsdbEventListener listener) {
193 ovsdbEventListener = null;
194
195 }
196
197 @Override
198 public List<OvsdbNodeId> getNodeIds() {
199 return null;
200 }
201
202 @Override
203 public OvsdbClientService getOvsdbClient(OvsdbNodeId nodeId) {
204 return null;
205 }
Hyunsun Moon5fb20a52015-09-25 17:02:33 -0700206
207 @Override
208 public void connect(IpAddress ip, TpPort port) {
209
210 }
jaegonkim1af0ae52017-01-01 10:46:55 +0900211
212 @Override
213 public void connect(IpAddress ip, TpPort port, Consumer<Exception> failhandler) {
214
215 }
YuanyouZhangf26445a2015-07-22 17:13:18 +0800216 }
217}