[ONOS-8087] Per device purgeOnDisconnection Flag
Change-Id: I7cb1db12a4d910d70123f116107a898bf9e6d278
diff --git a/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java b/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
index a948bfd..12bd9e4 100644
--- a/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
+++ b/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
@@ -486,10 +486,6 @@
l2TunnelHandler = new DefaultL2TunnelHandler(this);
topologyHandler = new TopologyHandler(this);
- compCfgService.preSetProperty("org.onosproject.net.group.impl.GroupManager",
- "purgeOnDisconnection", "true", false);
- compCfgService.preSetProperty("org.onosproject.net.flow.impl.FlowRuleManager",
- "purgeOnDisconnection", "true", false);
compCfgService.preSetProperty("org.onosproject.provider.host.impl.HostLocationProvider",
"requestInterceptsEnabled", "false", false);
compCfgService.preSetProperty("org.onosproject.net.neighbour.impl.NeighbourResolutionManager",
diff --git a/app/src/main/java/org/onosproject/segmentrouting/config/DeviceConfiguration.java b/app/src/main/java/org/onosproject/segmentrouting/config/DeviceConfiguration.java
index 123da37..5013e83 100644
--- a/app/src/main/java/org/onosproject/segmentrouting/config/DeviceConfiguration.java
+++ b/app/src/main/java/org/onosproject/segmentrouting/config/DeviceConfiguration.java
@@ -35,6 +35,7 @@
import org.onosproject.net.HostId;
import org.onosproject.net.PortNumber;
import org.onosproject.net.config.ConfigException;
+import org.onosproject.net.config.basics.BasicDeviceConfig;
import org.onosproject.net.config.basics.InterfaceConfig;
import org.onosproject.net.host.InterfaceIpAddress;
import org.onosproject.net.intf.Interface;
@@ -109,6 +110,12 @@
Set<DeviceId> deviceSubjects =
srManager.cfgService.getSubjects(DeviceId.class, SegmentRoutingDeviceConfig.class);
deviceSubjects.forEach(subject -> {
+ //Setting purge on disconnection flag for the device SR has control over.
+ // addConfig returns a config if it exists or creates a new one.
+ log.info("PurgeOnDisconnection set to true for device {}", subject);
+ BasicDeviceConfig basicDeviceConfig = srManager.cfgService.addConfig(subject, BasicDeviceConfig.class);
+ basicDeviceConfig.purgeOnDisconnection(true);
+ srManager.cfgService.applyConfig(subject, BasicDeviceConfig.class, basicDeviceConfig.node());
SegmentRoutingDeviceConfig config =
srManager.cfgService.getConfig(subject, SegmentRoutingDeviceConfig.class);
SegmentRouterInfo info = new SegmentRouterInfo();
diff --git a/app/src/test/java/org/onosproject/segmentrouting/IcmpHandlerTest.java b/app/src/test/java/org/onosproject/segmentrouting/IcmpHandlerTest.java
index cc7c6a8..68472de 100644
--- a/app/src/test/java/org/onosproject/segmentrouting/IcmpHandlerTest.java
+++ b/app/src/test/java/org/onosproject/segmentrouting/IcmpHandlerTest.java
@@ -139,6 +139,7 @@
// Apply config
MockNetworkConfigRegistry mockNetworkConfigRegistry = new MockNetworkConfigRegistry();
+
mockNetworkConfigRegistry.applyConfig(remoteLeafConfig);
mockNetworkConfigRegistry.applyConfig(remoteLeafPorts1Config);
mockNetworkConfigRegistry.applyConfig(remoteLeafPorts2Config);
diff --git a/app/src/test/java/org/onosproject/segmentrouting/MockNetworkConfigRegistry.java b/app/src/test/java/org/onosproject/segmentrouting/MockNetworkConfigRegistry.java
index e18483e..12d57ea 100644
--- a/app/src/test/java/org/onosproject/segmentrouting/MockNetworkConfigRegistry.java
+++ b/app/src/test/java/org/onosproject/segmentrouting/MockNetworkConfigRegistry.java
@@ -16,10 +16,14 @@
package org.onosproject.segmentrouting;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
+import org.onosproject.net.DeviceId;
import org.onosproject.net.config.Config;
import org.onosproject.net.config.NetworkConfigRegistryAdapter;
+import org.onosproject.net.config.basics.BasicDeviceConfig;
import java.util.Objects;
import java.util.Set;
@@ -44,6 +48,25 @@
}
@Override
+ public <S, C extends Config<S>> C addConfig(S subject, Class<C> configClass) {
+ Config c = configs.stream()
+ .filter(config -> subject.equals(config.subject()))
+ .filter(config -> configClass.equals(config.getClass()))
+ .findFirst().orElseGet(() -> {
+ if (configClass.equals(BasicDeviceConfig.class)) {
+ BasicDeviceConfig deviceConfig = new BasicDeviceConfig();
+ ObjectMapper mapper = new ObjectMapper();
+ deviceConfig.init((DeviceId) subject, ((DeviceId) subject).toString(),
+ JsonNodeFactory.instance.objectNode(), mapper, config -> {
+ });
+ return deviceConfig;
+ }
+ return null;
+ });
+ return (C) c;
+ }
+
+ @Override
public <S, C extends Config<S>> Set<S> getSubjects(Class<S> subject, Class<C> configClass) {
ImmutableSet.Builder<S> builder = ImmutableSet.builder();
String cName = configClass.getName();
diff --git a/app/src/test/java/org/onosproject/segmentrouting/config/DeviceConfigurationTest.java b/app/src/test/java/org/onosproject/segmentrouting/config/DeviceConfigurationTest.java
index 469def0..1674f6c 100644
--- a/app/src/test/java/org/onosproject/segmentrouting/config/DeviceConfigurationTest.java
+++ b/app/src/test/java/org/onosproject/segmentrouting/config/DeviceConfigurationTest.java
@@ -18,6 +18,7 @@
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import org.junit.Before;
@@ -29,6 +30,7 @@
import org.onosproject.net.DeviceId;
import org.onosproject.net.PortNumber;
import org.onosproject.net.config.NetworkConfigRegistry;
+import org.onosproject.net.config.basics.BasicDeviceConfig;
import org.onosproject.net.config.basics.InterfaceConfig;
import org.onosproject.net.host.InterfaceIpAddress;
import org.onosproject.net.intf.Interface;
@@ -73,10 +75,12 @@
private DeviceConfiguration devConfig;
+ private NetworkConfigRegistry networkConfigService;
+
@Before
public void setUp() throws Exception {
InterfaceService interfaceService;
- NetworkConfigRegistry networkConfigService;
+ networkConfigService = null;
NeighbourResolutionService neighbourResolutionService;
SegmentRoutingManager srManager;
@@ -86,6 +90,10 @@
JsonNode jsonNode = mapper.readTree(jsonStream);
SegmentRoutingDeviceConfig srDevConfig = new SegmentRoutingDeviceConfig();
srDevConfig.init(DEV1, CONFIG_KEY, jsonNode, mapper, config -> { });
+ BasicDeviceConfig basicDeviceConfig = new BasicDeviceConfig();
+ basicDeviceConfig.init(DEV1, DEV1.toString(), JsonNodeFactory.instance.objectNode(), mapper, config -> { });
+ BasicDeviceConfig purgeOnDisconnectConfig = basicDeviceConfig.purgeOnDisconnection(true);
+
// Mock interface netcfg
jsonStream = InterfaceConfig.class.getResourceAsStream("/interface1.json");
@@ -102,6 +110,12 @@
.andReturn(Sets.newHashSet(DEV1)).anyTimes();
expect(networkConfigService.getConfig(DEV1, SegmentRoutingDeviceConfig.class))
.andReturn(srDevConfig).anyTimes();
+ expect(networkConfigService.addConfig(DEV1, BasicDeviceConfig.class))
+ .andReturn(basicDeviceConfig).anyTimes();
+ expect(networkConfigService.getConfig(DEV1, BasicDeviceConfig.class))
+ .andReturn(basicDeviceConfig).anyTimes();
+ expect(networkConfigService.applyConfig(DEV1, BasicDeviceConfig.class, purgeOnDisconnectConfig.node()))
+ .andReturn(purgeOnDisconnectConfig).anyTimes();
expect(networkConfigService.getSubjects(ConnectPoint.class, InterfaceConfig.class))
.andReturn(Sets.newHashSet(CP1, CP2)).anyTimes();
expect(networkConfigService.getConfig(CP1, InterfaceConfig.class)).andReturn(interfaceConfig1).anyTimes();
@@ -157,4 +171,10 @@
assertTrue(devConfig.inSameSubnet(DEV1, PREFIX2.address()));
assertFalse(devConfig.inSameSubnet(DEV1, ROUTE1.address()));
}
+
+ @Test
+ public void getPurgeOnDisconnect() {
+ assertNotNull(networkConfigService.getConfig(DEV1, BasicDeviceConfig.class));
+ assertTrue(networkConfigService.getConfig(DEV1, BasicDeviceConfig.class).purgeOnDisconnection());
+ }
}
\ No newline at end of file