[ONOS-4166] Store device capapbilities using network config
Change-Id: Ib085c516bec0ecf9845e009eca090aad9302fbb0
diff --git a/providers/pcep/topology/src/test/java/org/onosproject/provider/pcep/topology/impl/PcepTopologyProviderTest.java b/providers/pcep/topology/src/test/java/org/onosproject/provider/pcep/topology/impl/PcepTopologyProviderTest.java
index 65a4c02..2f8827c 100644
--- a/providers/pcep/topology/src/test/java/org/onosproject/provider/pcep/topology/impl/PcepTopologyProviderTest.java
+++ b/providers/pcep/topology/src/test/java/org/onosproject/provider/pcep/topology/impl/PcepTopologyProviderTest.java
@@ -12,13 +12,7 @@
*/
package org.onosproject.provider.pcep.topology.impl;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
import static org.onosproject.net.Link.State.ACTIVE;
-import static org.onosproject.provider.pcep.topology.impl.PcepTopologyProvider.LABEL_STACK_CAPABILITY;
-import static org.onosproject.provider.pcep.topology.impl.PcepTopologyProvider.LSRID;
-import static org.onosproject.provider.pcep.topology.impl.PcepTopologyProvider.PCECC_CAPABILITY;
-import static org.onosproject.provider.pcep.topology.impl.PcepTopologyProvider.SR_CAPABILITY;
import java.util.Collection;
import java.util.HashMap;
@@ -39,6 +33,10 @@
import org.onosproject.net.DeviceId;
import org.onosproject.net.Link;
import org.onosproject.net.MastershipRole;
+import org.onosproject.net.config.Config;
+import org.onosproject.net.config.ConfigApplyDelegate;
+import org.onosproject.net.config.ConfigFactory;
+import org.onosproject.net.config.NetworkConfigRegistryAdapter;
import org.onosproject.net.device.DeviceDescription;
import org.onosproject.net.device.DeviceProvider;
import org.onosproject.net.device.DeviceProviderRegistry;
@@ -51,11 +49,19 @@
import org.onosproject.net.link.LinkProviderRegistry;
import org.onosproject.net.link.LinkProviderService;
import org.onosproject.net.provider.ProviderId;
+import org.onosproject.pcep.api.DeviceCapability;
import org.onosproject.pcep.controller.ClientCapability;
import org.onosproject.pcep.controller.PccId;
import org.onosproject.pcep.controller.PcepClient;
import org.onosproject.pcep.controller.PcepNodeListener;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.JsonNodeFactory;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+import static org.hamcrest.core.IsNull.nullValue;
/**
* Test for PCEP topology provider.
*/
@@ -68,6 +74,7 @@
private final PcepControllerAdapter controller = new PcepControllerAdapter();
private final MockLinkRegistry linkRegistry = new MockLinkRegistry();
private final MockDeviceService deviceService = new MockDeviceService();
+ private final MockNetConfigRegistryAdapter netConfigRegistry = new MockNetConfigRegistryAdapter();
private Map<DeviceId, Device> deviceMap = new HashMap<>();
@Before
@@ -77,6 +84,8 @@
provider.linkProviderRegistry = linkRegistry;
provider.controller = controller;
provider.deviceService = deviceService;
+ provider.netConfigRegistry = netConfigRegistry;
+ provider.netConfigService = netConfigRegistry;
provider.activate();
}
@@ -88,6 +97,8 @@
provider.linkProviderRegistry = null;
provider.controller = null;
provider.deviceService = null;
+ provider.netConfigRegistry = null;
+ provider.netConfigService = null;
}
/* Class implement device test registry */
@@ -217,24 +228,104 @@
}
}
+ /* Mock test for device service */
+ private class MockNetConfigRegistryAdapter extends NetworkConfigRegistryAdapter {
+ private ConfigFactory cfgFactory;
+ private Map<DeviceId, DeviceCapability> classConfig = new HashMap<>();
+
+ @Override
+ public void registerConfigFactory(ConfigFactory configFactory) {
+ cfgFactory = configFactory;
+ }
+
+ @Override
+ public void unregisterConfigFactory(ConfigFactory configFactory) {
+ cfgFactory = null;
+ }
+
+ @Override
+ public <S, C extends Config<S>> C addConfig(S subject, Class<C> configClass) {
+ if (configClass == DeviceCapability.class) {
+ DeviceCapability devCap = new DeviceCapability();
+ classConfig.put((DeviceId) subject, devCap);
+
+ JsonNode node = new ObjectNode(new MockJsonNode());
+ ObjectMapper mapper = new ObjectMapper();
+ ConfigApplyDelegate delegate = new InternalApplyDelegate();
+ devCap.init((DeviceId) subject, null, node, mapper, delegate);
+ return (C) devCap;
+ }
+
+ return null;
+ }
+
+ @Override
+ public <S, C extends Config<S>> void removeConfig(S subject, Class<C> configClass) {
+ classConfig.remove(subject);
+ }
+
+ @Override
+ public <S, C extends Config<S>> C getConfig(S subject, Class<C> configClass) {
+ if (configClass == DeviceCapability.class) {
+ return (C) classConfig.get(subject);
+ }
+ return null;
+ }
+
+ private class MockJsonNode extends JsonNodeFactory {
+ }
+
+ // Auxiliary delegate to receive notifications about changes applied to
+ // the network configuration - by the apps.
+ private class InternalApplyDelegate implements ConfigApplyDelegate {
+ @Override
+ public void onApply(Config config) {
+ //configs.put(config.subject(), config.node());
+ }
+ }
+ }
+
/**
- * Adds the PCEP device and removes it.
+ * Adds the PCEP device with SR, label stack and local label capabilities and deletes the device.
*/
@Test
public void testPcepTopologyProviderTestAddDevice1() {
PcepClient pc = clientController.getClient(PccId.pccId(IpAddress.valueOf("1.1.1.1")));
for (PcepNodeListener l : clientController.pcepNodeListener) {
pc.setCapability(new ClientCapability(true, true, false, true, true));
- l.addNode(pc);
- assertThat(nodeRegistry.connected.size(), is(1));
- assertThat(deviceMap.keySet().iterator().next(), is(DeviceId.deviceId("l3:1.1.1.1")));
- assertThat(deviceMap.values().iterator().next().annotations().value(LABEL_STACK_CAPABILITY), is("true"));
- assertThat(deviceMap.values().iterator().next().annotations().value(LSRID), is("1.1.1.1"));
- assertThat(deviceMap.values().iterator().next().annotations().value(PCECC_CAPABILITY), is("true"));
- assertThat(deviceMap.values().iterator().next().annotations().value(SR_CAPABILITY), is("true"));
+ l.addDevicePcepConfig(pc);
- l.deleteNode(pc.getPccId());
- assertThat(nodeRegistry.connected.size(), is(0));
+ DeviceId pccDeviceId = DeviceId.deviceId(String.valueOf(pc.getPccId().ipAddress()));
+ DeviceCapability deviceCap = netConfigRegistry.getConfig(pccDeviceId, DeviceCapability.class);
+ assertThat(deviceCap.srCap(), is(true));
+ assertThat(deviceCap.labelStackCap(), is(true));
+ assertThat(deviceCap.localLabelCap(), is(true));
+
+ l.deleteDevicePcepConfig(pc.getPccId());
+ deviceCap = netConfigRegistry.getConfig(pccDeviceId, DeviceCapability.class);
+ assertThat(deviceCap, is(nullValue()));
+ }
+ }
+
+ /**
+ * Adds the PCEP device with SR, and local label capabilities and deletes the device.
+ */
+ @Test
+ public void testPcepTopologyProviderTestAddDevice2() {
+ PcepClient pc = clientController.getClient(PccId.pccId(IpAddress.valueOf("1.1.1.1")));
+ for (PcepNodeListener l : clientController.pcepNodeListener) {
+ pc.setCapability(new ClientCapability(true, true, false, false, true));
+ l.addDevicePcepConfig(pc);
+
+ DeviceId pccDeviceId = DeviceId.deviceId(String.valueOf(pc.getPccId().ipAddress()));
+ DeviceCapability deviceCap = netConfigRegistry.getConfig(pccDeviceId, DeviceCapability.class);
+ assertThat(deviceCap.srCap(), is(true));
+ assertThat(deviceCap.labelStackCap(), is(false));
+ assertThat(deviceCap.localLabelCap(), is(true));
+
+ l.deleteDevicePcepConfig(pc.getPccId());
+ deviceCap = netConfigRegistry.getConfig(pccDeviceId, DeviceCapability.class);
+ assertThat(deviceCap, is(nullValue()));
}
}
}