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