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