From: Matej Perina Date: Fri, 21 Oct 2016 13:45:29 +0000 (+0200) Subject: fix for netconf model change X-Git-Tag: release/carbon~84 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=63cc40934c3aa78da472e5b8bd9f67acb0ae8a1d;p=groupbasedpolicy.git fix for netconf model change - fixes changes made in https://git.opendaylight.org/gerrit/#/c/43972/ Change-Id: I7c7521eb0c831842f8ea6119734f1bf71a840f16 Signed-off-by: Matej Perina --- diff --git a/renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/manager/NodeManager.java b/renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/manager/NodeManager.java index 73f6a039b..50f1a65b1 100644 --- a/renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/manager/NodeManager.java +++ b/renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/manager/NodeManager.java @@ -12,17 +12,13 @@ import static org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topolog import static org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus.ConnectionStatus.Connecting; import static org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus.ConnectionStatus.UnableToConnect; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; import java.util.Arrays; import java.util.List; import java.util.function.Function; -import com.google.common.base.Optional; -import com.google.common.base.Preconditions; -import com.google.common.util.concurrent.CheckedFuture; -import com.google.common.util.concurrent.FutureCallback; -import com.google.common.util.concurrent.Futures; -import com.google.common.util.concurrent.ListenableFuture; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.MountPoint; import org.opendaylight.controller.md.sal.binding.api.MountPointService; @@ -41,6 +37,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev15 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionParameters; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus.ConnectionStatus; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.AvailableCapabilities; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.available.capabilities.AvailableCapability; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.available.capabilities.AvailableCapabilityBuilder; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId; @@ -52,13 +50,20 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; +import com.google.common.util.concurrent.CheckedFuture; +import com.google.common.util.concurrent.FutureCallback; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; + public class NodeManager { private static final TopologyId TOPOLOGY_ID = new TopologyId("topology-netconf"); private static final Logger LOG = LoggerFactory.getLogger(NodeManager.class); private final DataBroker dataBroker; private final MountPointService mountService; - private final List requiredCapabilities; + private final List requiredCapabilities; public NodeManager(final DataBroker dataBroker, final BindingAwareBroker.ProviderContext session) { this.dataBroker = Preconditions.checkNotNull(dataBroker); @@ -240,8 +245,8 @@ public class NodeManager { return true; } - private boolean capabilityCheck(final List capabilities) { - for (String requiredCapability : requiredCapabilities) { + private boolean capabilityCheck(final List capabilities) { + for (AvailableCapability requiredCapability : requiredCapabilities) { if (!capabilities.contains(requiredCapability)) { return false; } @@ -315,14 +320,20 @@ public class NodeManager { return netconfNode; } - private class RequiredCapabilities { + private static class RequiredCapabilities { - private static final String NED = "(urn:ios?revision=2016-03-08)ned"; - private static final String TAILF_COMMON = "(http://tail-f.com/yang/common?revision=2015-05-22)tailf-common"; - private static final String TAILF_CLI_EXTENSION = "(http://tail-f.com/yang/common?revision=2015-03-19)tailf-cli-extensions"; - private static final String TAILF_META_EXTENSION = "(http://tail-f.com/yang/common?revision=2013-11-07)tailf-meta-extensions"; - private static final String IETF_YANG_TYPES = "(urn:ietf:params:xml:ns:yang:ietf-yang-types?revision=2013-07-15)ietf-yang-types"; - private static final String IETF_INET_TYPES = "(urn:ietf:params:xml:ns:yang:ietf-inet-types?revision=2013-07-15)ietf-inet-types"; + private static final AvailableCapability NED = + new AvailableCapabilityBuilder().setCapability("(urn:ios?revision=2016-03-08)ned").build(); + private static final AvailableCapability TAILF_COMMON = new AvailableCapabilityBuilder() + .setCapability("(http://tail-f.com/yang/common?revision=2015-05-22)tailf-common").build(); + private static final AvailableCapability TAILF_CLI_EXTENSION = new AvailableCapabilityBuilder() + .setCapability("(http://tail-f.com/yang/common?revision=2015-03-19)tailf-cli-extensions").build(); + private static final AvailableCapability TAILF_META_EXTENSION = new AvailableCapabilityBuilder() + .setCapability("(http://tail-f.com/yang/common?revision=2013-11-07)tailf-meta-extensions").build(); + private static final AvailableCapability IETF_YANG_TYPES = new AvailableCapabilityBuilder() + .setCapability("(urn:ietf:params:xml:ns:yang:ietf-yang-types?revision=2013-07-15)ietf-yang-types").build(); + private static final AvailableCapability IETF_INET_TYPES = new AvailableCapabilityBuilder() + .setCapability("(urn:ietf:params:xml:ns:yang:ietf-inet-types?revision=2013-07-15)ietf-inet-types").build(); /** * Initialize all common capabilities required by IOS-XE renderer. Any connected node is examined whether it's @@ -331,8 +342,8 @@ public class NodeManager { * * @return list of string representations of required capabilities */ - List initializeRequiredCapabilities() { - final String capabilityEntries[] = {NED, TAILF_COMMON, TAILF_CLI_EXTENSION, TAILF_META_EXTENSION, + List initializeRequiredCapabilities() { + final AvailableCapability capabilityEntries[] = {NED, TAILF_COMMON, TAILF_CLI_EXTENSION, TAILF_META_EXTENSION, IETF_YANG_TYPES, IETF_INET_TYPES}; return Arrays.asList(capabilityEntries); } diff --git a/renderers/ios-xe/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/manager/NodeManagerTest.java b/renderers/ios-xe/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/manager/NodeManagerTest.java index 3b026b7c0..21ff7f149 100644 --- a/renderers/ios-xe/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/manager/NodeManagerTest.java +++ b/renderers/ios-xe/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/manager/NodeManagerTest.java @@ -18,13 +18,13 @@ import static org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topolog import static org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus.ConnectionStatus.Connecting; import static org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus.ConnectionStatus.UnableToConnect; -import javax.annotation.Nonnull; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; -import com.google.common.base.Optional; -import com.google.common.util.concurrent.CheckedFuture; + +import javax.annotation.Nonnull; + import org.junit.Before; import org.junit.Test; import org.opendaylight.controller.md.sal.binding.api.DataBroker; @@ -46,6 +46,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev15 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.AvailableCapabilities; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.AvailableCapabilitiesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.available.capabilities.AvailableCapability; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.available.capabilities.AvailableCapabilityBuilder; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId; @@ -56,6 +58,9 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology. import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import com.google.common.base.Optional; +import com.google.common.util.concurrent.CheckedFuture; + public class NodeManagerTest extends CustomDataBrokerTest { @@ -336,23 +341,41 @@ public class NodeManagerTest extends CustomDataBrokerTest { } private AvailableCapabilities partialCapabilities() { - final String c1 = "(urn:ios?revision=2016-03-08)ned"; - final String c2 = "(http://tail-f.com/yang/common?revision=2015-05-22)tailf-common"; - final String c3 = "(http://tail-f.com/yang/common?revision=2015-03-19)tailf-cli-extensions"; - String[] capabilityList = {c1, c2, c3}; + final AvailableCapability c1 = new AvailableCapabilityBuilder() + .setCapability("(urn:ios?revision=2016-03-08)ned") + .build(); + final AvailableCapability c2 = new AvailableCapabilityBuilder() + .setCapability("(http://tail-f.com/yang/common?revision=2015-05-22)tailf-common") + .build(); + final AvailableCapability c3 = new AvailableCapabilityBuilder() + .setCapability("(http://tail-f.com/yang/common?revision=2015-03-19)tailf-cli-extensions") + .build(); + AvailableCapability[] capabilityList = {c1, c2, c3}; AvailableCapabilitiesBuilder availableCapabilitiesBuilder = new AvailableCapabilitiesBuilder(); availableCapabilitiesBuilder.setAvailableCapability(Arrays.asList(capabilityList)); return availableCapabilitiesBuilder.build(); } private AvailableCapabilities fullCapabilities() { - final String c1 = "(urn:ios?revision=2016-03-08)ned"; - final String c2 = "(http://tail-f.com/yang/common?revision=2015-05-22)tailf-common"; - final String c3 = "(http://tail-f.com/yang/common?revision=2015-03-19)tailf-cli-extensions"; - final String c4 = "(http://tail-f.com/yang/common?revision=2013-11-07)tailf-meta-extensions"; - final String c5 = "(urn:ietf:params:xml:ns:yang:ietf-yang-types?revision=2013-07-15)ietf-yang-types"; - final String c6 = "(urn:ietf:params:xml:ns:yang:ietf-inet-types?revision=2013-07-15)ietf-inet-types"; - String[] capabilityList = {c1, c2, c3, c4, c5, c6}; + final AvailableCapability c1 = new AvailableCapabilityBuilder() + .setCapability("(urn:ios?revision=2016-03-08)ned") + .build(); + final AvailableCapability c2 = new AvailableCapabilityBuilder() + .setCapability("(http://tail-f.com/yang/common?revision=2015-05-22)tailf-common") + .build(); + final AvailableCapability c3 = new AvailableCapabilityBuilder() + .setCapability("(http://tail-f.com/yang/common?revision=2015-03-19)tailf-cli-extensions") + .build(); + final AvailableCapability c4 = new AvailableCapabilityBuilder() + .setCapability("(http://tail-f.com/yang/common?revision=2013-11-07)tailf-meta-extensions") + .build(); + final AvailableCapability c5 = new AvailableCapabilityBuilder() + .setCapability("(urn:ietf:params:xml:ns:yang:ietf-yang-types?revision=2013-07-15)ietf-yang-types") + .build(); + final AvailableCapability c6 = new AvailableCapabilityBuilder() + .setCapability("(urn:ietf:params:xml:ns:yang:ietf-inet-types?revision=2013-07-15)ietf-inet-types") + .build(); + AvailableCapability[] capabilityList = {c1, c2, c3, c4, c5, c6}; AvailableCapabilitiesBuilder availableCapabilitiesBuilder = new AvailableCapabilitiesBuilder(); availableCapabilitiesBuilder.setAvailableCapability(Arrays.asList(capabilityList)); return availableCapabilitiesBuilder.build(); diff --git a/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/manager/VppNodeManager.java b/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/manager/VppNodeManager.java index 8b19e7af4..256b96615 100644 --- a/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/manager/VppNodeManager.java +++ b/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/manager/VppNodeManager.java @@ -26,6 +26,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.r import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.nodes.RendererNodeKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.available.capabilities.AvailableCapability; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.available.capabilities.AvailableCapabilityBuilder; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId; @@ -45,13 +47,14 @@ public class VppNodeManager { private static final TopologyId TOPOLOGY_ID = new TopologyId("topology-netconf"); private static final Logger LOG = LoggerFactory.getLogger(VppNodeManager.class); private static final Map, DataBroker> netconfNodeCache = new HashMap<>(); - private static final String V3PO_CAPABILITY = "(urn:opendaylight:params:xml:ns:yang:v3po?revision=2016-12-14)v3po"; - private static final String INTERFACES_CAPABILITY = - "(urn:ietf:params:xml:ns:yang:ietf-interfaces?revision=2014-05-08)ietf-interfaces"; + private static final AvailableCapability V3PO_CAPABILITY = new AvailableCapabilityBuilder() + .setCapability("(urn:opendaylight:params:xml:ns:yang:v3po?revision=2016-12-14)v3po").build(); + private static final AvailableCapability INTERFACES_CAPABILITY = new AvailableCapabilityBuilder() + .setCapability("(urn:ietf:params:xml:ns:yang:ietf-interfaces?revision=2014-05-08)ietf-interfaces").build(); private static final NodeId CONTROLLER_CONFIG_NODE = new NodeId("controller-config"); private final DataBroker dataBroker; private final MountPointService mountService; - private final List requiredCapabilities; + private final List requiredCapabilities; public VppNodeManager(DataBroker dataBroker, BindingAwareBroker.ProviderContext session) { this.dataBroker = Preconditions.checkNotNull(dataBroker); @@ -184,8 +187,8 @@ public class VppNodeManager { return true; } - private boolean capabilityCheck(final List capabilities) { - for (String requiredCapability : requiredCapabilities) { + private boolean capabilityCheck(final List capabilities) { + for (AvailableCapability requiredCapability : requiredCapabilities) { if (!capabilities.contains(requiredCapability)) { return false; } @@ -230,10 +233,10 @@ public class VppNodeManager { * * @return list of string representations of required capabilities */ - private List initializeRequiredCapabilities() { + private List initializeRequiredCapabilities() { // Required device capabilities - String[] capabilityEntries = {V3PO_CAPABILITY, INTERFACES_CAPABILITY}; + AvailableCapability[] capabilityEntries = {V3PO_CAPABILITY, INTERFACES_CAPABILITY}; return Arrays.asList(capabilityEntries); } diff --git a/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/manager/VppManagerDataStoreTest.java b/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/manager/VppManagerDataStoreTest.java index 167ca9ba6..48eb9e810 100644 --- a/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/manager/VppManagerDataStoreTest.java +++ b/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/manager/VppManagerDataStoreTest.java @@ -42,6 +42,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev15 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.AvailableCapabilitiesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.UnavailableCapabilitiesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.available.capabilities.AvailableCapability; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.available.capabilities.AvailableCapabilityBuilder; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey; @@ -96,9 +98,9 @@ public class VppManagerDataStoreTest extends VppRendererDataBrokerTest { Host host = new Host(new IpAddress(new Ipv4Address("192.168.255.101"))); PortNumber portNumber = new PortNumber(2830); - List avaibleCapabilitiesList = new ArrayList<>(); - avaibleCapabilitiesList.add(V3PO_CAPABILITY); - avaibleCapabilitiesList.add(INTERFACES_CAPABILITY); + List avaibleCapabilitiesList = new ArrayList<>(); + avaibleCapabilitiesList.add(new AvailableCapabilityBuilder().setCapability(V3PO_CAPABILITY).build()); + avaibleCapabilitiesList.add(new AvailableCapabilityBuilder().setCapability(INTERFACES_CAPABILITY).build()); NetconfNode netconfNode = new NetconfNodeBuilder().setHost(host) .setPort(portNumber) @@ -112,13 +114,13 @@ public class VppManagerDataStoreTest extends VppRendererDataBrokerTest { } @Test - public void connectNode() throws ReadFailedException { + public void connectNode() throws Exception { WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction(); Node testVppNode = createNode(NODE_NAME, NetconfNodeConnectionStatus.ConnectionStatus.Connected); writeTransaction.put(LogicalDatastoreType.OPERATIONAL, NODE_IID, testVppNode, true); - writeTransaction.submit(); + writeTransaction.submit().get(); ReadOnlyTransaction readOnlyTransaction = dataBroker.newReadOnlyTransaction(); CheckedFuture, ReadFailedException> future = @@ -132,13 +134,13 @@ public class VppManagerDataStoreTest extends VppRendererDataBrokerTest { } @Test - public void disconnectNode() throws ReadFailedException, InterruptedException { + public void disconnectNode() throws Exception { WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction(); Node testVppNode = createNode(NODE_NAME, NetconfNodeConnectionStatus.ConnectionStatus.Connected); writeTransaction.put(LogicalDatastoreType.OPERATIONAL, NODE_IID, testVppNode, true); - writeTransaction.submit(); + writeTransaction.submit().get(); ReadOnlyTransaction readOnlyTransaction = dataBroker.newReadOnlyTransaction(); CheckedFuture, ReadFailedException> future =