blob: 65a4c025244ed7f4f70150365cbb1cb2dce58469 [file] [log] [blame]
Priyanka B94395bf2016-05-21 18:39:46 +05301/*
2 * Copyright 2016-present Open Networking Laboratory
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 * the License. You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 * specific language governing permissions and limitations under the License.
12 */
13package org.onosproject.provider.pcep.topology.impl;
14
15import static org.hamcrest.MatcherAssert.assertThat;
16import static org.hamcrest.core.Is.is;
17import static org.onosproject.net.Link.State.ACTIVE;
18import static org.onosproject.provider.pcep.topology.impl.PcepTopologyProvider.LABEL_STACK_CAPABILITY;
19import static org.onosproject.provider.pcep.topology.impl.PcepTopologyProvider.LSRID;
20import static org.onosproject.provider.pcep.topology.impl.PcepTopologyProvider.PCECC_CAPABILITY;
21import static org.onosproject.provider.pcep.topology.impl.PcepTopologyProvider.SR_CAPABILITY;
22
23import java.util.Collection;
24import java.util.HashMap;
25import java.util.HashSet;
26import java.util.List;
27import java.util.Map;
28import java.util.Set;
29
30import org.junit.After;
31import org.junit.Before;
32import org.junit.Test;
33import org.onlab.packet.ChassisId;
34import org.onlab.packet.IpAddress;
35import org.onosproject.net.ConnectPoint;
36import org.onosproject.net.DefaultDevice;
37import org.onosproject.net.DefaultLink;
38import org.onosproject.net.Device;
39import org.onosproject.net.DeviceId;
40import org.onosproject.net.Link;
41import org.onosproject.net.MastershipRole;
42import org.onosproject.net.device.DeviceDescription;
43import org.onosproject.net.device.DeviceProvider;
44import org.onosproject.net.device.DeviceProviderRegistry;
45import org.onosproject.net.device.DeviceProviderService;
46import org.onosproject.net.device.DeviceServiceAdapter;
47import org.onosproject.net.device.PortDescription;
48import org.onosproject.net.device.PortStatistics;
49import org.onosproject.net.link.LinkDescription;
50import org.onosproject.net.link.LinkProvider;
51import org.onosproject.net.link.LinkProviderRegistry;
52import org.onosproject.net.link.LinkProviderService;
53import org.onosproject.net.provider.ProviderId;
54import org.onosproject.pcep.controller.ClientCapability;
55import org.onosproject.pcep.controller.PccId;
56import org.onosproject.pcep.controller.PcepClient;
57import org.onosproject.pcep.controller.PcepNodeListener;
58
59/**
60 * Test for PCEP topology provider.
61 */
62public class PcepTopologyProviderTest {
63 private static final String UNKNOWN = new String("unknown");
64 public static ProviderId providerId = new ProviderId("l3", "foo");
65 private final PcepClientControllerAdapter clientController = new PcepClientControllerAdapter();
66 private final PcepTopologyProvider provider = new PcepTopologyProvider();
67 private final MockDeviceRegistry nodeRegistry = new MockDeviceRegistry();
68 private final PcepControllerAdapter controller = new PcepControllerAdapter();
69 private final MockLinkRegistry linkRegistry = new MockLinkRegistry();
70 private final MockDeviceService deviceService = new MockDeviceService();
71 private Map<DeviceId, Device> deviceMap = new HashMap<>();
72
73 @Before
74 public void startUp() {
75 provider.pcepClientController = clientController;
76 provider.deviceProviderRegistry = nodeRegistry;
77 provider.linkProviderRegistry = linkRegistry;
78 provider.controller = controller;
79 provider.deviceService = deviceService;
80 provider.activate();
81 }
82
83 @After
84 public void tearDown() {
85 provider.deactivate();
86 provider.deviceProviderRegistry = null;
87 provider.pcepClientController = null;
88 provider.linkProviderRegistry = null;
89 provider.controller = null;
90 provider.deviceService = null;
91 }
92
93 /* Class implement device test registry */
94 private class MockLinkRegistry implements LinkProviderRegistry {
95 LinkProvider linkProvider;
96 Set<Link> links = new HashSet<>();
97
98 @Override
99 public LinkProviderService register(LinkProvider provider) {
100 this.linkProvider = provider;
101 return new MockProviderService();
102 }
103
104 @Override
105 public void unregister(LinkProvider provider) {
106 // TODO Auto-generated method stub
107 }
108
109 @Override
110 public Set<ProviderId> getProviders() {
111 return null;
112 }
113
114 private class MockProviderService implements LinkProviderService {
115
116 @Override
117 public void linkDetected(LinkDescription linkDescription) {
118 links.add(DefaultLink.builder().src(linkDescription.src())
119 .dst(linkDescription.dst()).state(ACTIVE).type(linkDescription.type())
120 .providerId(ProviderId.NONE).build());
121 }
122
123 @Override
124 public void linkVanished(LinkDescription linkDescription) {
125 links.remove(DefaultLink.builder().src(linkDescription.src())
126 .dst(linkDescription.dst()).state(ACTIVE).type(linkDescription.type())
127 .providerId(ProviderId.NONE).build());
128 }
129
130 @Override
131 public void linksVanished(ConnectPoint connectPoint) {
132 // TODO Auto-generated method stub
133 }
134
135 @Override
136 public void linksVanished(DeviceId deviceId) {
137 // TODO Auto-generated method stub
138 }
139
140 @Override
141 public LinkProvider provider() {
142 // TODO Auto-generated method stub
143 return null;
144 }
145 }
146 }
147
148 /* Class implement device test registry */
149 private class MockDeviceRegistry implements DeviceProviderRegistry {
150 DeviceProvider provider;
151
152 Set<DeviceId> connected = new HashSet<>();
153
154 @Override
155 public DeviceProviderService register(DeviceProvider provider) {
156 this.provider = provider;
157 return new MockProviderService();
158 }
159
160 @Override
161 public void unregister(DeviceProvider provider) {
162 }
163
164 @Override
165 public Set<ProviderId> getProviders() {
166 return null;
167 }
168
169 private class MockProviderService implements DeviceProviderService {
170
171 @Override
172 public DeviceProvider provider() {
173 return null;
174 }
175
176 @Override
177 public void deviceConnected(DeviceId deviceId, DeviceDescription deviceDescription) {
178 connected.add(deviceId);
179 Device device = new DefaultDevice(ProviderId.NONE, deviceId, Device.Type.ROUTER, UNKNOWN, UNKNOWN,
180 UNKNOWN, UNKNOWN, new ChassisId(), deviceDescription.annotations());
181 deviceMap.put(deviceId, device);
182 }
183
184 @Override
185 public void deviceDisconnected(DeviceId deviceId) {
186 connected.remove(deviceId);
187 deviceMap.remove(deviceId);
188 }
189
190 @Override
191 public void updatePorts(DeviceId deviceId, List<PortDescription> portDescriptions) {
192 // TODO Auto-generated method stub
193 }
194
195 @Override
196 public void portStatusChanged(DeviceId deviceId, PortDescription portDescription) {
197 // TODO Auto-generated method stub
198 }
199
200 @Override
201 public void receivedRoleReply(DeviceId deviceId, MastershipRole requested, MastershipRole response) {
202 // TODO Auto-generated method stub
203 }
204
205 @Override
206 public void updatePortStatistics(DeviceId deviceId, Collection<PortStatistics> portStatistics) {
207 // TODO Auto-generated method stub
208 }
209 }
210 }
211
212 /* Mock test for device service */
213 private class MockDeviceService extends DeviceServiceAdapter {
214 @Override
215 public Device getDevice(DeviceId deviceId) {
216 return deviceMap.get(deviceId);
217 }
218 }
219
220 /**
221 * Adds the PCEP device and removes it.
222 */
223 @Test
224 public void testPcepTopologyProviderTestAddDevice1() {
225 PcepClient pc = clientController.getClient(PccId.pccId(IpAddress.valueOf("1.1.1.1")));
226 for (PcepNodeListener l : clientController.pcepNodeListener) {
227 pc.setCapability(new ClientCapability(true, true, false, true, true));
228 l.addNode(pc);
229 assertThat(nodeRegistry.connected.size(), is(1));
230 assertThat(deviceMap.keySet().iterator().next(), is(DeviceId.deviceId("l3:1.1.1.1")));
231 assertThat(deviceMap.values().iterator().next().annotations().value(LABEL_STACK_CAPABILITY), is("true"));
232 assertThat(deviceMap.values().iterator().next().annotations().value(LSRID), is("1.1.1.1"));
233 assertThat(deviceMap.values().iterator().next().annotations().value(PCECC_CAPABILITY), is("true"));
234 assertThat(deviceMap.values().iterator().next().annotations().value(SR_CAPABILITY), is("true"));
235
236 l.deleteNode(pc.getPccId());
237 assertThat(nodeRegistry.connected.size(), is(0));
238 }
239 }
240}