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