Committed by
Gerrit Code Review
[ONOS-4166] Store device capapbilities using network config
Change-Id: Ib085c516bec0ecf9845e009eca090aad9302fbb0
Showing
9 changed files
with
259 additions
and
81 deletions
| ... | @@ -132,5 +132,10 @@ | ... | @@ -132,5 +132,10 @@ |
| 132 | <artifactId>onlab-misc</artifactId> | 132 | <artifactId>onlab-misc</artifactId> |
| 133 | <version>${project.version}</version> | 133 | <version>${project.version}</version> |
| 134 | </dependency> | 134 | </dependency> |
| 135 | + <dependency> | ||
| 136 | + <groupId>org.onosproject</groupId> | ||
| 137 | + <artifactId>onos-app-pcep-api</artifactId> | ||
| 138 | + <version>${project.version}</version> | ||
| 139 | + </dependency> | ||
| 135 | </dependencies> | 140 | </dependencies> |
| 136 | </project> | 141 | </project> | ... | ... |
| 1 | +/* | ||
| 2 | + * Copyright 2016-present 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.pcep.api; | ||
| 17 | + | ||
| 18 | +import org.onosproject.net.DeviceId; | ||
| 19 | +import org.onosproject.net.config.Config; | ||
| 20 | + | ||
| 21 | +/** | ||
| 22 | + * Configuration to specify device capabilities. | ||
| 23 | + */ | ||
| 24 | +public class DeviceCapability extends Config<DeviceId> { | ||
| 25 | + public static final String SRCAP = "srCapabaility"; | ||
| 26 | + public static final String LABELSTACKCAP = "labelStackCapability"; | ||
| 27 | + public static final String LOCALLABELCAP = "localLabelCapability"; | ||
| 28 | + | ||
| 29 | + @Override | ||
| 30 | + public boolean isValid() { | ||
| 31 | + return true; | ||
| 32 | + } | ||
| 33 | + | ||
| 34 | + /** | ||
| 35 | + * Gets the SR capability of the router. | ||
| 36 | + * | ||
| 37 | + * @return SR capability | ||
| 38 | + */ | ||
| 39 | + public boolean srCap() { | ||
| 40 | + String srCap = get(SRCAP, null); | ||
| 41 | + return srCap != null ? | ||
| 42 | + Boolean.valueOf(srCap) : | ||
| 43 | + false; | ||
| 44 | + } | ||
| 45 | + | ||
| 46 | + /** | ||
| 47 | + * Gets the label stack capability of the router. | ||
| 48 | + * | ||
| 49 | + * @return label stack capability | ||
| 50 | + */ | ||
| 51 | + public boolean labelStackCap() { | ||
| 52 | + String labelStackCap = get(LABELSTACKCAP, null); | ||
| 53 | + return labelStackCap != null ? | ||
| 54 | + Boolean.valueOf(labelStackCap) : | ||
| 55 | + false; | ||
| 56 | + } | ||
| 57 | + | ||
| 58 | + /** | ||
| 59 | + * Gets the local label capability of the router. | ||
| 60 | + * | ||
| 61 | + * @return local label capability | ||
| 62 | + */ | ||
| 63 | + public boolean localLabelCap() { | ||
| 64 | + String localLabelCap = get(LOCALLABELCAP, null); | ||
| 65 | + return localLabelCap != null ? | ||
| 66 | + Boolean.valueOf(localLabelCap) : | ||
| 67 | + false; | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + /** | ||
| 71 | + * Sets the SR capability of the router. | ||
| 72 | + * | ||
| 73 | + * @param srCap SR capability of the router. | ||
| 74 | + * @return the capability configuration of the device. | ||
| 75 | + */ | ||
| 76 | + public DeviceCapability setSrCap(boolean srCap) { | ||
| 77 | + return (DeviceCapability) setOrClear(SRCAP, srCap); | ||
| 78 | + } | ||
| 79 | + | ||
| 80 | + /** | ||
| 81 | + * Sets the label stack capability of the router. | ||
| 82 | + * | ||
| 83 | + * @param labelStackCap label stack capability of the router. | ||
| 84 | + * @return the capability configuration of the device. | ||
| 85 | + */ | ||
| 86 | + public DeviceCapability setLabelStackCap(boolean labelStackCap) { | ||
| 87 | + return (DeviceCapability) setOrClear(LABELSTACKCAP, labelStackCap); | ||
| 88 | + } | ||
| 89 | + | ||
| 90 | + /** | ||
| 91 | + * Sets the local label capability of the router. | ||
| 92 | + * | ||
| 93 | + * @param localLabelCap local label capability of the router. | ||
| 94 | + * @return the capability configuration of the device. | ||
| 95 | + */ | ||
| 96 | + public DeviceCapability setLocalLabelCap(boolean localLabelCap) { | ||
| 97 | + return (DeviceCapability) setOrClear(LOCALLABELCAP, localLabelCap); | ||
| 98 | + } | ||
| 99 | +} | ||
| 100 | + |
| ... | @@ -25,12 +25,12 @@ public interface PcepNodeListener { | ... | @@ -25,12 +25,12 @@ public interface PcepNodeListener { |
| 25 | * | 25 | * |
| 26 | * @param pc PCEP client details | 26 | * @param pc PCEP client details |
| 27 | */ | 27 | */ |
| 28 | - void addNode(PcepClient pc); | 28 | + void addDevicePcepConfig(PcepClient pc); |
| 29 | 29 | ||
| 30 | /** | 30 | /** |
| 31 | * Notifies that the node was removed. | 31 | * Notifies that the node was removed. |
| 32 | * | 32 | * |
| 33 | * @param pccId PCEP client ID | 33 | * @param pccId PCEP client ID |
| 34 | */ | 34 | */ |
| 35 | - void deleteNode(PccId pccId); | 35 | + void deleteDevicePcepConfig(PccId pccId); |
| 36 | } | 36 | } | ... | ... |
| ... | @@ -261,7 +261,7 @@ class PcepChannelHandler extends IdleStateAwareChannelHandler { | ... | @@ -261,7 +261,7 @@ class PcepChannelHandler extends IdleStateAwareChannelHandler { |
| 261 | disconnectDuplicate(h); | 261 | disconnectDuplicate(h); |
| 262 | } else { | 262 | } else { |
| 263 | h.setState(ESTABLISHED); | 263 | h.setState(ESTABLISHED); |
| 264 | - //Session is established, add a PCEP device | 264 | + //Session is established, add a network configuration with LSR id and device capabilities. |
| 265 | h.addNode(); | 265 | h.addNode(); |
| 266 | } | 266 | } |
| 267 | } | 267 | } |
| ... | @@ -472,14 +472,14 @@ class PcepChannelHandler extends IdleStateAwareChannelHandler { | ... | @@ -472,14 +472,14 @@ class PcepChannelHandler extends IdleStateAwareChannelHandler { |
| 472 | } | 472 | } |
| 473 | 473 | ||
| 474 | /** | 474 | /** |
| 475 | - * Adds PCEP device once session is established. | 475 | + * Adds PCEP device configuration with capabilities once session is established. |
| 476 | */ | 476 | */ |
| 477 | private void addNode() { | 477 | private void addNode() { |
| 478 | pc.addNode(pc); | 478 | pc.addNode(pc); |
| 479 | } | 479 | } |
| 480 | 480 | ||
| 481 | /** | 481 | /** |
| 482 | - * Deletes PCEP device when session is disconnected. | 482 | + * Deletes PCEP device configuration when session is disconnected. |
| 483 | */ | 483 | */ |
| 484 | private void deleteNode() { | 484 | private void deleteNode() { |
| 485 | pc.deleteNode(pc.getPccId()); | 485 | pc.deleteNode(pc.getPccId()); | ... | ... |
| ... | @@ -385,14 +385,14 @@ public class PcepClientControllerImpl implements PcepClientController { | ... | @@ -385,14 +385,14 @@ public class PcepClientControllerImpl implements PcepClientController { |
| 385 | @Override | 385 | @Override |
| 386 | public void addNode(PcepClient pc) { | 386 | public void addNode(PcepClient pc) { |
| 387 | for (PcepNodeListener l : pcepNodeListener) { | 387 | for (PcepNodeListener l : pcepNodeListener) { |
| 388 | - l.addNode(pc); | 388 | + l.addDevicePcepConfig(pc); |
| 389 | } | 389 | } |
| 390 | } | 390 | } |
| 391 | 391 | ||
| 392 | @Override | 392 | @Override |
| 393 | public void deleteNode(PccId pccId) { | 393 | public void deleteNode(PccId pccId) { |
| 394 | for (PcepNodeListener l : pcepNodeListener) { | 394 | for (PcepNodeListener l : pcepNodeListener) { |
| 395 | - l.deleteNode(pccId); | 395 | + l.deleteDevicePcepConfig(pccId); |
| 396 | } | 396 | } |
| 397 | } | 397 | } |
| 398 | 398 | ... | ... |
| ... | @@ -29,6 +29,10 @@ import org.onosproject.net.DefaultAnnotations; | ... | @@ -29,6 +29,10 @@ import org.onosproject.net.DefaultAnnotations; |
| 29 | import org.onosproject.net.Device; | 29 | import org.onosproject.net.Device; |
| 30 | import org.onosproject.net.DeviceId; | 30 | import org.onosproject.net.DeviceId; |
| 31 | import org.onosproject.net.Link.Type; | 31 | import org.onosproject.net.Link.Type; |
| 32 | +import org.onosproject.net.config.ConfigFactory; | ||
| 33 | +import org.onosproject.net.config.NetworkConfigRegistry; | ||
| 34 | +import org.onosproject.net.config.NetworkConfigService; | ||
| 35 | +import org.onosproject.net.config.basics.SubjectFactories; | ||
| 32 | import org.onosproject.net.MastershipRole; | 36 | import org.onosproject.net.MastershipRole; |
| 33 | import org.onosproject.net.OchPort; | 37 | import org.onosproject.net.OchPort; |
| 34 | import org.onosproject.net.OduCltPort; | 38 | import org.onosproject.net.OduCltPort; |
| ... | @@ -54,6 +58,7 @@ import org.onosproject.net.link.LinkProviderService; | ... | @@ -54,6 +58,7 @@ import org.onosproject.net.link.LinkProviderService; |
| 54 | import org.onosproject.net.link.LinkService; | 58 | import org.onosproject.net.link.LinkService; |
| 55 | import org.onosproject.net.provider.AbstractProvider; | 59 | import org.onosproject.net.provider.AbstractProvider; |
| 56 | import org.onosproject.net.provider.ProviderId; | 60 | import org.onosproject.net.provider.ProviderId; |
| 61 | +import org.onosproject.pcep.api.DeviceCapability; | ||
| 57 | import org.onosproject.pcep.api.PcepController; | 62 | import org.onosproject.pcep.api.PcepController; |
| 58 | import org.onosproject.pcep.api.PcepDpid; | 63 | import org.onosproject.pcep.api.PcepDpid; |
| 59 | import org.onosproject.pcep.api.PcepLink; | 64 | import org.onosproject.pcep.api.PcepLink; |
| ... | @@ -122,29 +127,26 @@ public class PcepTopologyProvider extends AbstractProvider | ... | @@ -122,29 +127,26 @@ public class PcepTopologyProvider extends AbstractProvider |
| 122 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 127 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
| 123 | protected PcepClientController pcepClientController; | 128 | protected PcepClientController pcepClientController; |
| 124 | 129 | ||
| 130 | + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
| 131 | + protected NetworkConfigRegistry netConfigRegistry; | ||
| 132 | + | ||
| 133 | + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
| 134 | + protected NetworkConfigService netConfigService; | ||
| 135 | + | ||
| 125 | private DeviceProviderService deviceProviderService; | 136 | private DeviceProviderService deviceProviderService; |
| 126 | private LinkProviderService linkProviderService; | 137 | private LinkProviderService linkProviderService; |
| 127 | 138 | ||
| 128 | private HashMap<Long, List<PortDescription>> portMap = new HashMap<>(); | 139 | private HashMap<Long, List<PortDescription>> portMap = new HashMap<>(); |
| 129 | private InternalLinkProvider listener = new InternalLinkProvider(); | 140 | private InternalLinkProvider listener = new InternalLinkProvider(); |
| 130 | 141 | ||
| 131 | - /* | 142 | + private final ConfigFactory<DeviceId, DeviceCapability> configFactory = |
| 132 | - * For the client supporting SR capability. | 143 | + new ConfigFactory<DeviceId, DeviceCapability>(SubjectFactories.DEVICE_SUBJECT_FACTORY, |
| 133 | - */ | 144 | + DeviceCapability.class, "deviceCapability", true) { |
| 134 | - public static final String SR_CAPABILITY = "srCapability"; | 145 | + @Override |
| 135 | - | 146 | + public DeviceCapability createConfig() { |
| 136 | - /* | 147 | + return new DeviceCapability(); |
| 137 | - * For the client supporting PCECC capability. | 148 | + } |
| 138 | - */ | 149 | + }; |
| 139 | - public static final String PCECC_CAPABILITY = "pceccCapability"; | ||
| 140 | - | ||
| 141 | - /* | ||
| 142 | - * For the client supporting label stack capability. | ||
| 143 | - */ | ||
| 144 | - public static final String LABEL_STACK_CAPABILITY = "labelStackCapability"; | ||
| 145 | - | ||
| 146 | - public static final String LSRID = "lsrId"; | ||
| 147 | - private static final String UNKNOWN = "unknown"; | ||
| 148 | 150 | ||
| 149 | @Activate | 151 | @Activate |
| 150 | public void activate() { | 152 | public void activate() { |
| ... | @@ -153,6 +155,7 @@ public class PcepTopologyProvider extends AbstractProvider | ... | @@ -153,6 +155,7 @@ public class PcepTopologyProvider extends AbstractProvider |
| 153 | controller.addListener(listener); | 155 | controller.addListener(listener); |
| 154 | controller.addLinkListener(listener); | 156 | controller.addLinkListener(listener); |
| 155 | pcepClientController.addNodeListener(listener); | 157 | pcepClientController.addNodeListener(listener); |
| 158 | + netConfigRegistry.registerConfigFactory(configFactory); | ||
| 156 | } | 159 | } |
| 157 | 160 | ||
| 158 | @Deactivate | 161 | @Deactivate |
| ... | @@ -162,6 +165,7 @@ public class PcepTopologyProvider extends AbstractProvider | ... | @@ -162,6 +165,7 @@ public class PcepTopologyProvider extends AbstractProvider |
| 162 | controller.removeListener(listener); | 165 | controller.removeListener(listener); |
| 163 | controller.removeLinkListener(listener); | 166 | controller.removeLinkListener(listener); |
| 164 | pcepClientController.removeNodeListener(listener); | 167 | pcepClientController.removeNodeListener(listener); |
| 168 | + netConfigRegistry.unregisterConfigFactory(configFactory); | ||
| 165 | } | 169 | } |
| 166 | 170 | ||
| 167 | private List<PortDescription> buildPortDescriptions(PcepDpid dpid, | 171 | private List<PortDescription> buildPortDescriptions(PcepDpid dpid, |
| ... | @@ -334,49 +338,27 @@ public class PcepTopologyProvider extends AbstractProvider | ... | @@ -334,49 +338,27 @@ public class PcepTopologyProvider extends AbstractProvider |
| 334 | } | 338 | } |
| 335 | 339 | ||
| 336 | @Override | 340 | @Override |
| 337 | - public void addNode(PcepClient pc) { | 341 | + public void addDevicePcepConfig(PcepClient pc) { |
| 338 | - if (deviceProviderService == null) { | 342 | + if (netConfigRegistry == null) { |
| 343 | + log.error("Cannot add PCEP device capability as network config service is not available."); | ||
| 339 | return; | 344 | return; |
| 340 | } | 345 | } |
| 341 | - | 346 | + DeviceId pccDeviceId = DeviceId.deviceId(String.valueOf(pc.getPccId().ipAddress())); |
| 342 | - //Right now device URI for PCEP devices is their LSRID | 347 | + DeviceCapability deviceCap = netConfigService.addConfig(pccDeviceId, DeviceCapability.class); |
| 343 | - DeviceId deviceId = deviceId(uri(new PcepDpid(pc.getPccId().id().getIp4Address().toInt()))); | 348 | + deviceCap.setLabelStackCap(pc.capability().labelStackCapability()) |
| 344 | - ChassisId cId = new ChassisId(); | 349 | + .setLocalLabelCap(pc.capability().pceccCapability()) |
| 345 | - | 350 | + .setSrCap(pc.capability().srCapability()) |
| 346 | - Device.Type deviceType = Device.Type.ROUTER; | 351 | + .apply(); |
| 347 | - | ||
| 348 | - DefaultAnnotations.Builder annotationBuilder = DefaultAnnotations.builder(); | ||
| 349 | - //PCC capabilities (SR, PCECC and PCECC-SR) | ||
| 350 | - annotationBuilder.set(SR_CAPABILITY, String.valueOf(pc.capability().srCapability())); | ||
| 351 | - annotationBuilder.set(PCECC_CAPABILITY, String.valueOf(pc.capability().pceccCapability())); | ||
| 352 | - annotationBuilder.set(LABEL_STACK_CAPABILITY, String.valueOf(pc.capability().labelStackCapability())); | ||
| 353 | - //PccId is the lsrId contained in openMsg, if not present it will be the socket address | ||
| 354 | - annotationBuilder.set(LSRID, String.valueOf(pc.getPccId().id())); | ||
| 355 | - | ||
| 356 | - DeviceDescription description = new DefaultDeviceDescription( | ||
| 357 | - deviceId.uri(), | ||
| 358 | - deviceType, | ||
| 359 | - UNKNOWN, | ||
| 360 | - UNKNOWN, | ||
| 361 | - UNKNOWN, | ||
| 362 | - UNKNOWN, | ||
| 363 | - cId, | ||
| 364 | - annotationBuilder.build()); | ||
| 365 | - | ||
| 366 | - deviceProviderService.deviceConnected(deviceId, description); | ||
| 367 | } | 352 | } |
| 368 | 353 | ||
| 369 | @Override | 354 | @Override |
| 370 | - public void deleteNode(PccId pccId) { | 355 | + public void deleteDevicePcepConfig(PccId pccId) { |
| 371 | - if (deviceProviderService == null || deviceService == null) { | 356 | + if (netConfigRegistry == null) { |
| 372 | - return; | 357 | + log.error("Cannot remove PCEP device capability as network config service is not available."); |
| 373 | - } | ||
| 374 | - //TODO: In device manager, in deviceDisconnected() method, get the device but null check is not validated | ||
| 375 | - if (deviceService.getDevice(DeviceId.deviceId(uri(new PcepDpid(pccId.id() | ||
| 376 | - .getIp4Address().toInt())))) == null) { | ||
| 377 | return; | 358 | return; |
| 378 | } | 359 | } |
| 379 | - deviceProviderService.deviceDisconnected(deviceId(uri(new PcepDpid(pccId.id().getIp4Address().toInt())))); | 360 | + DeviceId pccDeviceId = DeviceId.deviceId(String.valueOf(pccId.ipAddress())); |
| 361 | + netConfigService.removeConfig(pccDeviceId, DeviceCapability.class); | ||
| 380 | } | 362 | } |
| 381 | } | 363 | } |
| 382 | 364 | ... | ... |
| ... | @@ -271,14 +271,14 @@ public class PcepClientControllerAdapter implements PcepClientController { | ... | @@ -271,14 +271,14 @@ public class PcepClientControllerAdapter implements PcepClientController { |
| 271 | @Override | 271 | @Override |
| 272 | public void addNode(PcepClient pc) { | 272 | public void addNode(PcepClient pc) { |
| 273 | for (PcepNodeListener l : pcepNodeListener) { | 273 | for (PcepNodeListener l : pcepNodeListener) { |
| 274 | - l.addNode(pc); | 274 | + l.addDevicePcepConfig(pc); |
| 275 | } | 275 | } |
| 276 | } | 276 | } |
| 277 | 277 | ||
| 278 | @Override | 278 | @Override |
| 279 | public void deleteNode(PccId pccId) { | 279 | public void deleteNode(PccId pccId) { |
| 280 | for (PcepNodeListener l : pcepNodeListener) { | 280 | for (PcepNodeListener l : pcepNodeListener) { |
| 281 | - l.deleteNode(pccId); | 281 | + l.deleteDevicePcepConfig(pccId); |
| 282 | } | 282 | } |
| 283 | } | 283 | } |
| 284 | 284 | ... | ... |
| ... | @@ -12,13 +12,7 @@ | ... | @@ -12,13 +12,7 @@ |
| 12 | */ | 12 | */ |
| 13 | package org.onosproject.provider.pcep.topology.impl; | 13 | package org.onosproject.provider.pcep.topology.impl; |
| 14 | 14 | ||
| 15 | -import static org.hamcrest.MatcherAssert.assertThat; | ||
| 16 | -import static org.hamcrest.core.Is.is; | ||
| 17 | import static org.onosproject.net.Link.State.ACTIVE; | 15 | import static org.onosproject.net.Link.State.ACTIVE; |
| 18 | -import static org.onosproject.provider.pcep.topology.impl.PcepTopologyProvider.LABEL_STACK_CAPABILITY; | ||
| 19 | -import static org.onosproject.provider.pcep.topology.impl.PcepTopologyProvider.LSRID; | ||
| 20 | -import static org.onosproject.provider.pcep.topology.impl.PcepTopologyProvider.PCECC_CAPABILITY; | ||
| 21 | -import static org.onosproject.provider.pcep.topology.impl.PcepTopologyProvider.SR_CAPABILITY; | ||
| 22 | 16 | ||
| 23 | import java.util.Collection; | 17 | import java.util.Collection; |
| 24 | import java.util.HashMap; | 18 | import java.util.HashMap; |
| ... | @@ -39,6 +33,10 @@ import org.onosproject.net.Device; | ... | @@ -39,6 +33,10 @@ import org.onosproject.net.Device; |
| 39 | import org.onosproject.net.DeviceId; | 33 | import org.onosproject.net.DeviceId; |
| 40 | import org.onosproject.net.Link; | 34 | import org.onosproject.net.Link; |
| 41 | import org.onosproject.net.MastershipRole; | 35 | import org.onosproject.net.MastershipRole; |
| 36 | +import org.onosproject.net.config.Config; | ||
| 37 | +import org.onosproject.net.config.ConfigApplyDelegate; | ||
| 38 | +import org.onosproject.net.config.ConfigFactory; | ||
| 39 | +import org.onosproject.net.config.NetworkConfigRegistryAdapter; | ||
| 42 | import org.onosproject.net.device.DeviceDescription; | 40 | import org.onosproject.net.device.DeviceDescription; |
| 43 | import org.onosproject.net.device.DeviceProvider; | 41 | import org.onosproject.net.device.DeviceProvider; |
| 44 | import org.onosproject.net.device.DeviceProviderRegistry; | 42 | import org.onosproject.net.device.DeviceProviderRegistry; |
| ... | @@ -51,11 +49,19 @@ import org.onosproject.net.link.LinkProvider; | ... | @@ -51,11 +49,19 @@ import org.onosproject.net.link.LinkProvider; |
| 51 | import org.onosproject.net.link.LinkProviderRegistry; | 49 | import org.onosproject.net.link.LinkProviderRegistry; |
| 52 | import org.onosproject.net.link.LinkProviderService; | 50 | import org.onosproject.net.link.LinkProviderService; |
| 53 | import org.onosproject.net.provider.ProviderId; | 51 | import org.onosproject.net.provider.ProviderId; |
| 52 | +import org.onosproject.pcep.api.DeviceCapability; | ||
| 54 | import org.onosproject.pcep.controller.ClientCapability; | 53 | import org.onosproject.pcep.controller.ClientCapability; |
| 55 | import org.onosproject.pcep.controller.PccId; | 54 | import org.onosproject.pcep.controller.PccId; |
| 56 | import org.onosproject.pcep.controller.PcepClient; | 55 | import org.onosproject.pcep.controller.PcepClient; |
| 57 | import org.onosproject.pcep.controller.PcepNodeListener; | 56 | import org.onosproject.pcep.controller.PcepNodeListener; |
| 57 | +import com.fasterxml.jackson.databind.JsonNode; | ||
| 58 | +import com.fasterxml.jackson.databind.ObjectMapper; | ||
| 59 | +import com.fasterxml.jackson.databind.node.JsonNodeFactory; | ||
| 60 | +import com.fasterxml.jackson.databind.node.ObjectNode; | ||
| 58 | 61 | ||
| 62 | +import static org.hamcrest.MatcherAssert.assertThat; | ||
| 63 | +import static org.hamcrest.core.Is.is; | ||
| 64 | +import static org.hamcrest.core.IsNull.nullValue; | ||
| 59 | /** | 65 | /** |
| 60 | * Test for PCEP topology provider. | 66 | * Test for PCEP topology provider. |
| 61 | */ | 67 | */ |
| ... | @@ -68,6 +74,7 @@ public class PcepTopologyProviderTest { | ... | @@ -68,6 +74,7 @@ public class PcepTopologyProviderTest { |
| 68 | private final PcepControllerAdapter controller = new PcepControllerAdapter(); | 74 | private final PcepControllerAdapter controller = new PcepControllerAdapter(); |
| 69 | private final MockLinkRegistry linkRegistry = new MockLinkRegistry(); | 75 | private final MockLinkRegistry linkRegistry = new MockLinkRegistry(); |
| 70 | private final MockDeviceService deviceService = new MockDeviceService(); | 76 | private final MockDeviceService deviceService = new MockDeviceService(); |
| 77 | + private final MockNetConfigRegistryAdapter netConfigRegistry = new MockNetConfigRegistryAdapter(); | ||
| 71 | private Map<DeviceId, Device> deviceMap = new HashMap<>(); | 78 | private Map<DeviceId, Device> deviceMap = new HashMap<>(); |
| 72 | 79 | ||
| 73 | @Before | 80 | @Before |
| ... | @@ -77,6 +84,8 @@ public class PcepTopologyProviderTest { | ... | @@ -77,6 +84,8 @@ public class PcepTopologyProviderTest { |
| 77 | provider.linkProviderRegistry = linkRegistry; | 84 | provider.linkProviderRegistry = linkRegistry; |
| 78 | provider.controller = controller; | 85 | provider.controller = controller; |
| 79 | provider.deviceService = deviceService; | 86 | provider.deviceService = deviceService; |
| 87 | + provider.netConfigRegistry = netConfigRegistry; | ||
| 88 | + provider.netConfigService = netConfigRegistry; | ||
| 80 | provider.activate(); | 89 | provider.activate(); |
| 81 | } | 90 | } |
| 82 | 91 | ||
| ... | @@ -88,6 +97,8 @@ public class PcepTopologyProviderTest { | ... | @@ -88,6 +97,8 @@ public class PcepTopologyProviderTest { |
| 88 | provider.linkProviderRegistry = null; | 97 | provider.linkProviderRegistry = null; |
| 89 | provider.controller = null; | 98 | provider.controller = null; |
| 90 | provider.deviceService = null; | 99 | provider.deviceService = null; |
| 100 | + provider.netConfigRegistry = null; | ||
| 101 | + provider.netConfigService = null; | ||
| 91 | } | 102 | } |
| 92 | 103 | ||
| 93 | /* Class implement device test registry */ | 104 | /* Class implement device test registry */ |
| ... | @@ -217,24 +228,104 @@ public class PcepTopologyProviderTest { | ... | @@ -217,24 +228,104 @@ public class PcepTopologyProviderTest { |
| 217 | } | 228 | } |
| 218 | } | 229 | } |
| 219 | 230 | ||
| 231 | + /* Mock test for device service */ | ||
| 232 | + private class MockNetConfigRegistryAdapter extends NetworkConfigRegistryAdapter { | ||
| 233 | + private ConfigFactory cfgFactory; | ||
| 234 | + private Map<DeviceId, DeviceCapability> classConfig = new HashMap<>(); | ||
| 235 | + | ||
| 236 | + @Override | ||
| 237 | + public void registerConfigFactory(ConfigFactory configFactory) { | ||
| 238 | + cfgFactory = configFactory; | ||
| 239 | + } | ||
| 240 | + | ||
| 241 | + @Override | ||
| 242 | + public void unregisterConfigFactory(ConfigFactory configFactory) { | ||
| 243 | + cfgFactory = null; | ||
| 244 | + } | ||
| 245 | + | ||
| 246 | + @Override | ||
| 247 | + public <S, C extends Config<S>> C addConfig(S subject, Class<C> configClass) { | ||
| 248 | + if (configClass == DeviceCapability.class) { | ||
| 249 | + DeviceCapability devCap = new DeviceCapability(); | ||
| 250 | + classConfig.put((DeviceId) subject, devCap); | ||
| 251 | + | ||
| 252 | + JsonNode node = new ObjectNode(new MockJsonNode()); | ||
| 253 | + ObjectMapper mapper = new ObjectMapper(); | ||
| 254 | + ConfigApplyDelegate delegate = new InternalApplyDelegate(); | ||
| 255 | + devCap.init((DeviceId) subject, null, node, mapper, delegate); | ||
| 256 | + return (C) devCap; | ||
| 257 | + } | ||
| 258 | + | ||
| 259 | + return null; | ||
| 260 | + } | ||
| 261 | + | ||
| 262 | + @Override | ||
| 263 | + public <S, C extends Config<S>> void removeConfig(S subject, Class<C> configClass) { | ||
| 264 | + classConfig.remove(subject); | ||
| 265 | + } | ||
| 266 | + | ||
| 267 | + @Override | ||
| 268 | + public <S, C extends Config<S>> C getConfig(S subject, Class<C> configClass) { | ||
| 269 | + if (configClass == DeviceCapability.class) { | ||
| 270 | + return (C) classConfig.get(subject); | ||
| 271 | + } | ||
| 272 | + return null; | ||
| 273 | + } | ||
| 274 | + | ||
| 275 | + private class MockJsonNode extends JsonNodeFactory { | ||
| 276 | + } | ||
| 277 | + | ||
| 278 | + // Auxiliary delegate to receive notifications about changes applied to | ||
| 279 | + // the network configuration - by the apps. | ||
| 280 | + private class InternalApplyDelegate implements ConfigApplyDelegate { | ||
| 281 | + @Override | ||
| 282 | + public void onApply(Config config) { | ||
| 283 | + //configs.put(config.subject(), config.node()); | ||
| 284 | + } | ||
| 285 | + } | ||
| 286 | + } | ||
| 287 | + | ||
| 220 | /** | 288 | /** |
| 221 | - * Adds the PCEP device and removes it. | 289 | + * Adds the PCEP device with SR, label stack and local label capabilities and deletes the device. |
| 222 | */ | 290 | */ |
| 223 | @Test | 291 | @Test |
| 224 | public void testPcepTopologyProviderTestAddDevice1() { | 292 | public void testPcepTopologyProviderTestAddDevice1() { |
| 225 | PcepClient pc = clientController.getClient(PccId.pccId(IpAddress.valueOf("1.1.1.1"))); | 293 | PcepClient pc = clientController.getClient(PccId.pccId(IpAddress.valueOf("1.1.1.1"))); |
| 226 | for (PcepNodeListener l : clientController.pcepNodeListener) { | 294 | for (PcepNodeListener l : clientController.pcepNodeListener) { |
| 227 | pc.setCapability(new ClientCapability(true, true, false, true, true)); | 295 | pc.setCapability(new ClientCapability(true, true, false, true, true)); |
| 228 | - l.addNode(pc); | 296 | + l.addDevicePcepConfig(pc); |
| 229 | - assertThat(nodeRegistry.connected.size(), is(1)); | 297 | + |
| 230 | - assertThat(deviceMap.keySet().iterator().next(), is(DeviceId.deviceId("l3:1.1.1.1"))); | 298 | + DeviceId pccDeviceId = DeviceId.deviceId(String.valueOf(pc.getPccId().ipAddress())); |
| 231 | - assertThat(deviceMap.values().iterator().next().annotations().value(LABEL_STACK_CAPABILITY), is("true")); | 299 | + DeviceCapability deviceCap = netConfigRegistry.getConfig(pccDeviceId, DeviceCapability.class); |
| 232 | - assertThat(deviceMap.values().iterator().next().annotations().value(LSRID), is("1.1.1.1")); | 300 | + assertThat(deviceCap.srCap(), is(true)); |
| 233 | - assertThat(deviceMap.values().iterator().next().annotations().value(PCECC_CAPABILITY), is("true")); | 301 | + assertThat(deviceCap.labelStackCap(), is(true)); |
| 234 | - assertThat(deviceMap.values().iterator().next().annotations().value(SR_CAPABILITY), is("true")); | 302 | + assertThat(deviceCap.localLabelCap(), is(true)); |
| 235 | - | 303 | + |
| 236 | - l.deleteNode(pc.getPccId()); | 304 | + l.deleteDevicePcepConfig(pc.getPccId()); |
| 237 | - assertThat(nodeRegistry.connected.size(), is(0)); | 305 | + deviceCap = netConfigRegistry.getConfig(pccDeviceId, DeviceCapability.class); |
| 306 | + assertThat(deviceCap, is(nullValue())); | ||
| 307 | + } | ||
| 308 | + } | ||
| 309 | + | ||
| 310 | + /** | ||
| 311 | + * Adds the PCEP device with SR, and local label capabilities and deletes the device. | ||
| 312 | + */ | ||
| 313 | + @Test | ||
| 314 | + public void testPcepTopologyProviderTestAddDevice2() { | ||
| 315 | + PcepClient pc = clientController.getClient(PccId.pccId(IpAddress.valueOf("1.1.1.1"))); | ||
| 316 | + for (PcepNodeListener l : clientController.pcepNodeListener) { | ||
| 317 | + pc.setCapability(new ClientCapability(true, true, false, false, true)); | ||
| 318 | + l.addDevicePcepConfig(pc); | ||
| 319 | + | ||
| 320 | + DeviceId pccDeviceId = DeviceId.deviceId(String.valueOf(pc.getPccId().ipAddress())); | ||
| 321 | + DeviceCapability deviceCap = netConfigRegistry.getConfig(pccDeviceId, DeviceCapability.class); | ||
| 322 | + assertThat(deviceCap.srCap(), is(true)); | ||
| 323 | + assertThat(deviceCap.labelStackCap(), is(false)); | ||
| 324 | + assertThat(deviceCap.localLabelCap(), is(true)); | ||
| 325 | + | ||
| 326 | + l.deleteDevicePcepConfig(pc.getPccId()); | ||
| 327 | + deviceCap = netConfigRegistry.getConfig(pccDeviceId, DeviceCapability.class); | ||
| 328 | + assertThat(deviceCap, is(nullValue())); | ||
| 238 | } | 329 | } |
| 239 | } | 330 | } |
| 240 | } | 331 | } | ... | ... |
| ... | @@ -275,14 +275,14 @@ public class PcepClientControllerAdapter implements PcepClientController { | ... | @@ -275,14 +275,14 @@ public class PcepClientControllerAdapter implements PcepClientController { |
| 275 | @Override | 275 | @Override |
| 276 | public void addNode(PcepClient pc) { | 276 | public void addNode(PcepClient pc) { |
| 277 | for (PcepNodeListener l : pcepNodeListener) { | 277 | for (PcepNodeListener l : pcepNodeListener) { |
| 278 | - l.addNode(pc); | 278 | + l.addDevicePcepConfig(pc); |
| 279 | } | 279 | } |
| 280 | } | 280 | } |
| 281 | 281 | ||
| 282 | @Override | 282 | @Override |
| 283 | public void deleteNode(PccId pccId) { | 283 | public void deleteNode(PccId pccId) { |
| 284 | for (PcepNodeListener l : pcepNodeListener) { | 284 | for (PcepNodeListener l : pcepNodeListener) { |
| 285 | - l.deleteNode(pccId); | 285 | + l.deleteDevicePcepConfig(pccId); |
| 286 | } | 286 | } |
| 287 | } | 287 | } |
| 288 | 288 | ... | ... |
-
Please register or login to post a comment