cisco-xr-driver refactored to support new TAPI-based presto NRP model. 72/58172/2
authormarek.ryznar <marek.ryznar@amartus.com>
Thu, 1 Jun 2017 14:45:32 +0000 (16:45 +0200)
committermarek.ryznar <marek.ryznar@amartus.com>
Fri, 2 Jun 2017 12:21:41 +0000 (14:21 +0200)
Change-Id: Idd05d0ec395ee3d8704168e86abd03bb957599d8
Signed-off-by: marek.ryznar <marek.ryznar@amartus.com>
24 files changed:
cisco-xr-driver/src/main/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/TopologyDataHandler.java [new file with mode: 0644]
cisco-xr-driver/src/main/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/common/helper/BandwidthProfileHelper.java
cisco-xr-driver/src/main/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/common/helper/InterfaceHelper.java
cisco-xr-driver/src/main/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/common/util/LoopbackUtils.java
cisco-xr-driver/src/main/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/activator/AbstractL2vpnActivator.java
cisco-xr-driver/src/main/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/activator/L2vpnLocalConnectActivator.java [moved from cisco-xr-driver/src/main/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/activator/L2vpnBridgeActivator.java with 81% similarity]
cisco-xr-driver/src/main/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/activator/L2vpnP2pConnectActivator.java [moved from cisco-xr-driver/src/main/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/activator/L2vpnXconnectActivator.java with 72% similarity]
cisco-xr-driver/src/main/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/driver/L2vpnBridgeDriverBuilder.java [deleted file]
cisco-xr-driver/src/main/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/driver/L2vpnXconnectDriverBuilder.java [deleted file]
cisco-xr-driver/src/main/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/driver/XrDriverBuilder.java [new file with mode: 0644]
cisco-xr-driver/src/main/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/helper/AttachmentCircuitHelper.java
cisco-xr-driver/src/main/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/helper/PseudowireHelper.java
cisco-xr-driver/src/main/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/helper/XConnectHelper.java
cisco-xr-driver/src/main/resources/org/opendaylight/blueprint/cisco-xr-driver.xml
cisco-xr-driver/src/test/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/common/helper/BandwidthProfileHelperTest.java
cisco-xr-driver/src/test/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/common/helper/InterfaceHelperTest.java
cisco-xr-driver/src/test/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/common/util/LoopbackUtilsTest.java
cisco-xr-driver/src/test/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/activator/L2vpnLocalConnectionActivatorTest.java [moved from cisco-xr-driver/src/test/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/activator/L2vpnBridgeActivatorTest.java with 75% similarity]
cisco-xr-driver/src/test/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/activator/L2vpnP2pConnectionActivatorTest.java [moved from cisco-xr-driver/src/test/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/activator/L2vpnXconnectActivatorTest.java with 75% similarity]
cisco-xr-driver/src/test/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/activator/L2vpnTestUtils.java [moved from cisco-xr-driver/src/test/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/activator/L2vpnActivatorTestUtils.java with 83% similarity]
cisco-xr-driver/src/test/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/driver/L2vpnBridgeDriverBuilderTest.java [deleted file]
cisco-xr-driver/src/test/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/driver/L2vpnXconnectDriverBuilderTest.java [deleted file]
cisco-xr-driver/src/test/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/helper/AttachmentCircuitHelperTest.java
features/features-unimgr/src/main/features/features.xml

diff --git a/cisco-xr-driver/src/main/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/TopologyDataHandler.java b/cisco-xr-driver/src/main/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/TopologyDataHandler.java
new file mode 100644 (file)
index 0000000..3e06f69
--- /dev/null
@@ -0,0 +1,269 @@
+/*
+ * Copyright (c) 2016 Cisco Systems Inc and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.unimgr.mef.nrp.cisco.xr;
+
+import com.google.common.base.Optional;
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.LoadingCache;
+import com.google.common.util.concurrent.FutureCallback;
+import com.google.common.util.concurrent.Futures;
+import org.opendaylight.controller.md.sal.binding.api.*;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
+import org.opendaylight.unimgr.mef.nrp.cisco.xr.common.helper.InterfaceHelper;
+import org.opendaylight.unimgr.mef.nrp.common.NrpDao;
+import org.opendaylight.unimgr.utils.CapabilitiesService;
+import org.opendaylight.unimgr.utils.DriverConstants;
+import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.ifmgr.cfg.rev150730.InterfaceConfigurations;
+import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.ifmgr.cfg.rev150730._interface.configurations.InterfaceConfiguration;
+import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.ifmgr.cfg.rev150730._interface.configurations.InterfaceConfigurationKey;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.tapicommon.rev170227.LayerProtocolName;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.tapicommon.rev170227.TerminationDirection;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.tapicommon.rev170227.UniversalId;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.tapicommon.rev170227.context.attrs.ServiceInterfacePoint;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.tapicommon.rev170227.context.attrs.ServiceInterfacePointBuilder;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.tapicommon.rev170227.service._interface.point.LayerProtocolBuilder;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.tapitopology.rev170227.node.OwnedNodeEdgePoint;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.tapitopology.rev170227.node.OwnedNodeEdgePointBuilder;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.tapitopology.rev170227.node.OwnedNodeEdgePointKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.network.topology.topology.topology.types.TopologyNetconf;
+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.TopologyId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+import java.util.concurrent.TimeUnit;
+import java.util.function.Function;
+import java.util.function.Predicate;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import static org.opendaylight.unimgr.utils.CapabilitiesService.Capability.Mode.AND;
+import static org.opendaylight.unimgr.utils.CapabilitiesService.NodeContext.NodeCapability.*;
+
+/**
+ * @author bartosz.michalik@amartus.com
+ */
+public class TopologyDataHandler implements DataTreeChangeListener<Node> {
+    private static final Logger log = LoggerFactory.getLogger(TopologyDataHandler.class);
+    public static final InstanceIdentifier<Topology> NETCONF_TOPO_IID =
+            InstanceIdentifier
+                    .create(NetworkTopology.class)
+                    .child(Topology.class,
+                            new TopologyKey(new TopologyId(TopologyNetconf.QNAME.getLocalName())));
+
+
+    LoadingCache<NodeKey, KeyedInstanceIdentifier<Node, NodeKey>> mountIds = CacheBuilder.newBuilder()
+            .maximumSize(20)
+            .build(
+                    new CacheLoader<NodeKey, KeyedInstanceIdentifier<Node, NodeKey>>() {
+                        public KeyedInstanceIdentifier<Node, NodeKey> load(final NodeKey key) {
+                            return NETCONF_TOPO_IID.child(Node.class, key);
+                        }
+                    });
+
+
+    private final DataBroker dataBroker;
+    private final MountPointService mountService;
+
+
+    private ListenerRegistration<TopologyDataHandler> registration;
+    private CapabilitiesService capabilitiesService;
+
+
+    public TopologyDataHandler(DataBroker dataBroker, MountPointService mountService) {
+        Objects.requireNonNull(dataBroker);
+        Objects.requireNonNull(mountService);
+        this.dataBroker = dataBroker;
+        this.mountService = mountService;
+    }
+
+    public void init() {
+        log.debug("initializing topology handler for {}", DriverConstants.XR_NODE);
+        ReadWriteTransaction tx = dataBroker.newReadWriteTransaction();
+
+        NrpDao dao = new NrpDao(tx);
+        dao.createSystemNode(DriverConstants.XR_NODE, null);
+
+        Futures.addCallback(tx.submit(), new FutureCallback<Void>() {
+            @Override
+            public void onSuccess(@Nullable Void result) {
+                log.info("Node {} created", DriverConstants.XR_NODE);
+                capabilitiesService = new CapabilitiesService(dataBroker);
+                registerNetconfTreeListener();
+
+            }
+
+            @Override
+            public void onFailure(Throwable t) {
+                log.error("No node created due to the error", t);
+                try {
+                    TimeUnit.SECONDS.sleep(3);
+                } catch (InterruptedException _e) {
+
+                }
+                log.info("retrying initialization of Topology handler for {}", DriverConstants.XR_NODE);
+                init();
+            }
+        });
+
+
+
+
+    }
+
+    public void close() {
+        if(registration != null) {
+            log.info("closing netconf tree listener");
+            registration.close();
+        }
+
+    }
+
+    private void registerNetconfTreeListener() {
+
+        InstanceIdentifier<Node> nodeId = NETCONF_TOPO_IID.child(Node.class);
+
+        registration = dataBroker.registerDataTreeChangeListener(new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL, nodeId), this);
+        log.info("netconf tree listener registered");
+    }
+
+
+
+    Function<DataObjectModification<Node>, Node> addedNode = mod -> (mod.getModificationType() == DataObjectModification.ModificationType.WRITE || mod.getModificationType() == DataObjectModification.ModificationType.SUBTREE_MODIFIED) ?
+            mod.getDataAfter() : null;
+
+    @Override
+    public void onDataTreeChanged(@Nonnull Collection<DataTreeModification<Node>> changes) {
+
+        List<Node> addedNodes = changes.stream().map(DataTreeModification::getRootNode)
+                .map(addedNode::apply)
+                .filter(n -> {
+                    if (n == null) return false;
+                    return capabilitiesService.node(n).isSupporting(AND, NETCONF, NETCONF_CISCO_IOX_IFMGR, NETCONF_CISCO_IOX_L2VPN);
+                }).collect(Collectors.toList());
+        try {
+            onAddedNodes(addedNodes);
+        } catch(Exception e) {
+            //TODO improve error handling
+            log.error("error while processing new Cisco nodes", e);
+        }
+    }
+
+    private void onAddedNodes(@Nonnull Collection<Node> added) throws ReadFailedException {
+        if(added.isEmpty()) return;
+        log.debug("found {} added XR nodes", added.size());
+
+        final ReadWriteTransaction topoTx = dataBroker.newReadWriteTransaction();
+        NrpDao dao = new NrpDao(topoTx);
+        toTp(added).forEach(nep -> {
+
+            ServiceInterfacePoint sip = new ServiceInterfacePointBuilder()
+                    .setUuid(new UniversalId("sip:" + nep.getUuid().getValue()))
+//                    .setState(St)
+                    .setDirection(TerminationDirection.Bidirectional)
+                    .setLayerProtocol(Collections.singletonList(new LayerProtocolBuilder().setLocalId("eth").setLayerProtocolName(LayerProtocolName.Eth).build()))
+                    .build();
+            dao.addSip(sip);
+            nep = new OwnedNodeEdgePointBuilder(nep).setMappedServiceInterfacePoint(Collections.singletonList(sip.getUuid())).build();
+            log.trace("Adding nep {} to {} node", nep.getUuid(), DriverConstants.XR_NODE);
+            dao.updateNep(DriverConstants.XR_NODE, nep);
+        });
+
+        Futures.addCallback(topoTx.submit(), new FutureCallback<Void>() {
+
+            @Override
+            public void onSuccess(@Nullable Void result) {
+                log.debug("TAPI node upadate successful");
+            }
+
+            @Override
+            public void onFailure(Throwable t) {
+                log.warn("TAPI node upadate failed due to an error", t);
+            }
+        });
+    }
+
+    //simplyfied version of selecting
+    private Pattern gbPort = Pattern.compile(".*(GigabitEthernet|TenGigE)[^.]+$");
+
+    final Predicate<InterfaceConfiguration> isNep = ic -> {
+        final String name = ic.getKey().getInterfaceName().getValue();
+        return gbPort.matcher(name).matches();
+    };
+
+    private List<OwnedNodeEdgePoint> toTp(Collection<Node> nodes) {
+        OwnedNodeEdgePointBuilder tpBuilder = new OwnedNodeEdgePointBuilder();
+        return nodes.stream().flatMap(cn -> {
+            final NodeKey key = cn.getKey();
+            try {
+                KeyedInstanceIdentifier<Node, NodeKey> id = mountIds.get(key);
+                Optional<MountPoint> mountPoint = mountService.getMountPoint(id);
+                if(mountPoint.isPresent()) {
+                    DataBroker deviceBroker = mountPoint.get().getService(DataBroker.class).get();
+                    log.debug(deviceBroker.toString());
+                    List<OwnedNodeEdgePoint> tps;
+                    try(ReadOnlyTransaction tx = deviceBroker.newReadOnlyTransaction()) {
+                        tps = ports(tx)
+                                .filter(i -> {
+                                    boolean shutdown = i != null && i.isShutdown() != null && i.isShutdown();
+                                    return !shutdown;
+                                })
+                                .filter(isNep::test)
+                                .map(i -> {
+                                    InterfaceConfigurationKey ikey = i.getKey();
+                                    log.debug("found {} interface", ikey);
+
+                                    UniversalId tpId = new UniversalId(cn.getNodeId().getValue() + ":" + ikey.getInterfaceName().getValue());
+                                    return tpBuilder
+                                            .setUuid(tpId)
+                                            .setKey(new OwnedNodeEdgePointKey(tpId))
+                                            .build();
+                                }).collect(Collectors.toList());
+
+                    }
+
+                    return tps.stream();
+
+                } else {
+                    log.warn("no mount point for {}", key);
+                }
+
+            } catch (Exception e) {
+                log.warn("error while processing " + key, e);
+            }
+            return Stream.empty();
+        }).collect(Collectors.toList());
+    }
+
+    private Stream<InterfaceConfiguration> ports(ReadOnlyTransaction tx) throws ReadFailedException {
+        Optional<InterfaceConfigurations> interfaces = tx.read(LogicalDatastoreType.OPERATIONAL, InterfaceHelper.getInterfaceConfigurationsId()).checkedGet();
+        if(interfaces.isPresent()) {
+            return interfaces.get().getInterfaceConfiguration().stream();
+        }
+
+        return Stream.empty();
+    }
+
+}
index 07e13e127dd85572a8461f59c42fe33e09e8fb14..e8add9a5ddcee1354a6c0f90699155b135d91284 100644 (file)
@@ -8,6 +8,8 @@
 package org.opendaylight.unimgr.mef.nrp.cisco.xr.common.helper;
 
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.unimgr.mef.nrp.common.ServicePort;
 import org.opendaylight.unimgr.utils.MdsalUtils;
 import org.opendaylight.unimgr.utils.NullAwareDatastoreGetter;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.asr9k.policymgr.cfg.rev150518.PolicyManager;
@@ -26,8 +28,15 @@ import org.opendaylight.yang.gen.v1.urn.mef.nrp.bandwidth.profile.rev160630.GNRP
 import org.opendaylight.yang.gen.v1.urn.mef.nrp.specs.rev160630.AdapterSpec1;
 import org.opendaylight.yang.gen.v1.urn.mef.nrp.specs.rev160630.TerminationSpec1;
 import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.TerminationPoint1;
-import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.g_forwardingconstruct.FcPort;
 import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.g_layerprotocol.LpSpec;
+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.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointKey;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -61,9 +70,9 @@ public class BandwidthProfileHelper {
         }
     }
 
-    private static List<BandwidthProfileComposition> retrieveBandwidthProfiles(DataBroker dataBroker, FcPort port) {
+    private static List<BandwidthProfileComposition> retrieveBandwidthProfiles(DataBroker dataBroker, ServicePort port) {
         List<BandwidthProfileComposition> bwCompositionList = new ArrayList<>();
-        List<NullAwareDatastoreGetter<LpSpec>> lpSpecNadgs = new NullAwareDatastoreGetter<>(MdsalUtils.readTerminationPoint(dataBroker, CONFIGURATION, port))
+        List<NullAwareDatastoreGetter<LpSpec>> lpSpecNadgs = new NullAwareDatastoreGetter<>(readTerminationPoint(dataBroker, CONFIGURATION, port))
                 .collect(x -> x::getAugmentation, TerminationPoint1.class)
                 .collect(x -> x::getLtpAttrs)
                 .collectMany(x -> x::getLpList)
@@ -99,7 +108,7 @@ public class BandwidthProfileHelper {
 
     private List<PolicyMap> policyMaps;
 
-    public BandwidthProfileHelper(DataBroker dataBroker, FcPort port) {
+    public BandwidthProfileHelper(DataBroker dataBroker, ServicePort port) {
         bandwidthProfiles = BandwidthProfileHelper.retrieveBandwidthProfiles(dataBroker, port);
         policyMaps = new ArrayList<>();
     }
@@ -151,8 +160,7 @@ public class BandwidthProfileHelper {
 
     public BandwidthProfileHelper addPolicyMap(String fcName, BandwidthProfileComposition.BwpDirection direction, BandwidthProfileComposition.BwpApplicability applicability) {
         if(bandwidthProfiles.size() > 0) {
-            //TODO .get(0) ?
-            Optional<GNRPBwpFlow> bwProfileOptional = bandwidthProfiles.get(0).get(direction, applicability);
+            Optional<GNRPBwpFlow> bwProfileOptional = bandwidthProfiles.stream().findFirst().get().get(direction, applicability);
 
             if (bwProfileOptional.isPresent()) {
                 List<PolicyMapRule> policyMapRules = new ArrayList<>();
@@ -163,7 +171,6 @@ public class BandwidthProfileHelper {
                                 .build()
                 );
 
-
                 policyMaps.add(new PolicyMapBuilder()
                         .setName(PolicyMapNameGenerator.generate(fcName, direction, applicability))
                         .setPolicyMapRule(policyMapRules)
@@ -188,4 +195,14 @@ public class BandwidthProfileHelper {
                 .build()
         );
     }
+
+    public static com.google.common.base.Optional<TerminationPoint> readTerminationPoint(DataBroker dataBroker, LogicalDatastoreType store, ServicePort port) {
+        InstanceIdentifier tpIid = InstanceIdentifier.builder(NetworkTopology.class)
+                .child(Topology.class, new TopologyKey(port.getTopology()))
+                .child(Node.class, new NodeKey(port.getNode()))
+                .child(TerminationPoint.class, new TerminationPointKey(port.getTp()))
+                .build();
+
+        return MdsalUtils.readOptional(dataBroker, store, tpIid);
+    }
 }
\ No newline at end of file
index 83e4c93b97fa1e956046013599509fe2d3dfa127..bceafb4036b18b076fe3d01ff96dd1bc5f111bfb 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.unimgr.mef.nrp.cisco.xr.common.helper;
 
+import org.opendaylight.unimgr.mef.nrp.common.ServicePort;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.ifmgr.cfg.rev150730.InterfaceActive;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.ifmgr.cfg.rev150730.InterfaceConfigurations;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.ifmgr.cfg.rev150730.InterfaceConfigurationsBuilder;
@@ -18,7 +19,6 @@ import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cf
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109._interface.configurations._interface.configuration.L2Transport;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109._interface.configurations._interface.configuration.L2TransportBuilder;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.xr.types.rev150629.InterfaceName;
-import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.g_forwardingconstruct.FcPort;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 
 import java.util.LinkedList;
@@ -33,7 +33,7 @@ import java.util.Optional;
 public class InterfaceHelper {
     private List<InterfaceConfiguration> configurations;
 
-    public static InterfaceName getInterfaceName(FcPort port) {
+    public static InterfaceName getInterfaceName(ServicePort port) {
         String interfaceName = port.getTp().getValue();
 
         if(interfaceName.contains(":")) {
@@ -51,7 +51,7 @@ public class InterfaceHelper {
         configurations = new LinkedList<>();
     }
 
-    public InterfaceHelper addInterface(FcPort port, Optional<Mtus> mtus, boolean setL2Transport) {
+    public InterfaceHelper addInterface(ServicePort port, Optional<Mtus> mtus, boolean setL2Transport) {
         return addInterface(getInterfaceName(port), mtus, setL2Transport);
     }
 
index 6ceea565945588d73c53b335aa2625adb06902e2..cb894461f080b85a4f816300ff2ae9b47926853d 100644 (file)
@@ -8,14 +8,11 @@
 package org.opendaylight.unimgr.mef.nrp.cisco.xr.common.util;
 
 import com.google.common.base.Optional;
-import com.google.common.util.concurrent.CheckedFuture;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
+import org.opendaylight.unimgr.mef.nrp.common.ServicePort;
 import org.opendaylight.unimgr.utils.MdsalUtils;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone;
-import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.g_forwardingconstruct.FcPort;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.LoopbackAugmentation;
 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;
@@ -39,7 +36,8 @@ public class LoopbackUtils {
 
     private static final String DEFAULT_LOOPBACK = "127.0.0.1";
 
-    public static Ipv4AddressNoZone getIpv4Address(FcPort port, DataBroker dataBroker) {
+    //First, loopback address must be added with netconf device on POST request
+    public static Ipv4AddressNoZone getIpv4Address(ServicePort port, DataBroker dataBroker) {
         String loopback = null;
         NodeId nodeId = port.getNode();
         TopologyId topologyId = port.getTopology();
index 96eb89b747a1fcffb8527ca6df3498757a856a30..b6066d237804f64448573f8d5bf79d873ed05acf 100644 (file)
@@ -18,7 +18,7 @@ import org.opendaylight.unimgr.mef.nrp.cisco.xr.common.helper.InterfaceHelper;
 import org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.helper.L2vpnHelper;
 import org.opendaylight.unimgr.mef.nrp.common.MountPointHelper;
 import org.opendaylight.unimgr.mef.nrp.common.ResourceActivator;
-import org.opendaylight.unimgr.mef.nrp.common.ResourceActivatorException;
+import org.opendaylight.unimgr.mef.nrp.common.ServicePort;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.asr9k.policymgr.cfg.rev150518.PolicyManager;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.ifmgr.cfg.rev150730.InterfaceActive;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.ifmgr.cfg.rev150730.InterfaceConfigurations;
@@ -34,7 +34,6 @@ import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cf
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.xconnect.group.p2p.xconnects.P2pXconnectKey;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.xconnect.group.p2p.xconnects.p2p.xconnect.Pseudowires;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.xr.types.rev150629.CiscoIosXrString;
-import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.g_forwardingconstruct.FcPort;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -50,6 +49,8 @@ import java.util.List;
 public abstract class AbstractL2vpnActivator implements ResourceActivator {
 
     private static final Logger LOG = LoggerFactory.getLogger(AbstractL2vpnActivator.class);
+    private static final String NETCONF_TOPOLODY_NAME = "topology-netconf";
+    private static final long mtu = 1500;
 
     protected DataBroker dataBroker;
 
@@ -61,27 +62,42 @@ public abstract class AbstractL2vpnActivator implements ResourceActivator {
     }
 
     @Override
-    public void activate(List<EndPoint> endPoints, String serviceName) throws ResourceActivatorException, TransactionCommitFailedException {
-//        java.util.Optional<PolicyManager> qosConfig = activateQos(innerName, port);
-//        InterfaceConfigurations interfaceConfigurations = activateInterface(port, neighbor, mtu);
-//        Pseudowires pseudowires = activatePseudowire(neighbor);
-//        XconnectGroups xconnectGroups = activateXConnect(outerName, innerName, port, neighbor, pseudowires);
-//        L2vpn l2vpn = activateL2Vpn(xconnectGroups);
-//
-//        doActivate(nodeName, outerName, innerName, interfaceConfigurations, l2vpn, qosConfig);
+    public void activate(List<EndPoint> endPoints, String serviceId) throws TransactionCommitFailedException {
+        String innerName = getInnerName(serviceId);
+        String outerName = getOuterName(serviceId);
+        ServicePort port = null;
+        ServicePort neighbor = null;
+        for(EndPoint endPoint: endPoints){
+            if(port==null){
+                port = ServicePort.toServicePort(endPoint, NETCONF_TOPOLODY_NAME);
+            } else {
+                neighbor = ServicePort.toServicePort(endPoint, NETCONF_TOPOLODY_NAME);
+            }
+        }
+
+        java.util.Optional<PolicyManager> qosConfig = activateQos(innerName, port);
+        InterfaceConfigurations interfaceConfigurations = activateInterface(port, neighbor, mtu);
+        Pseudowires pseudowires = activatePseudowire(neighbor);
+        XconnectGroups xconnectGroups = activateXConnect(outerName, innerName, port, neighbor, pseudowires);
+        L2vpn l2vpn = activateL2Vpn(xconnectGroups);
+
+        doActivate(port.getNode().getValue(), interfaceConfigurations, l2vpn, qosConfig);
     }
 
     @Override
-    public void deactivate(List<EndPoint> endPoints, String serviceName) throws TransactionCommitFailedException, ResourceActivatorException {
-//        InstanceIdentifier<P2pXconnect> xconnectId = deactivateXConnect(outerName, innerName);
-//        InstanceIdentifier<InterfaceConfiguration> interfaceConfigurationId = deactivateInterface(port);
-//
-//        doDeactivate(nodeName, outerName, innerName, xconnectId, interfaceConfigurationId);
+    public void deactivate(List<EndPoint> endPoints, String serviceId) throws TransactionCommitFailedException {
+        String innerName = getInnerName(serviceId);
+        String outerName = getOuterName(serviceId);
+        ServicePort port = ServicePort.toServicePort(endPoints.stream().findFirst().get(), NETCONF_TOPOLODY_NAME);
+
+        InstanceIdentifier<P2pXconnect> xconnectId = deactivateXConnect(outerName, innerName);
+        InstanceIdentifier<InterfaceConfiguration> interfaceConfigurationId = deactivateInterface(port);
+
+        doDeactivate(port.getNode().getValue(), xconnectId, interfaceConfigurationId);
     }
 
+    // for now QoS is ignored
     protected void doActivate(String nodeName,
-                              String outerName,
-                              String innerName,
                               InterfaceConfigurations interfaceConfigurations,
                               L2vpn l2vpn,
                               java.util.Optional<PolicyManager> qosConfig) throws TransactionCommitFailedException {
@@ -99,8 +115,6 @@ public abstract class AbstractL2vpnActivator implements ResourceActivator {
     }
 
     protected void doDeactivate(String nodeName,
-                                String outerName,
-                                String innerName,
                                 InstanceIdentifier<P2pXconnect> xconnectId,
                                 InstanceIdentifier<InterfaceConfiguration> interfaceConfigurationId) throws TransactionCommitFailedException {
 
@@ -116,13 +130,13 @@ public abstract class AbstractL2vpnActivator implements ResourceActivator {
         transaction.submit().checkedGet();
     }
 
-    protected abstract java.util.Optional<PolicyManager> activateQos(String name, FcPort port);
+    protected abstract java.util.Optional<PolicyManager> activateQos(String name, ServicePort port);
 
-    protected abstract InterfaceConfigurations activateInterface(FcPort portA, FcPort portZ, long mtu);
+    protected abstract InterfaceConfigurations activateInterface(ServicePort portA, ServicePort portZ, long mtu);
 
-    protected abstract Pseudowires activatePseudowire(FcPort neighbor);
+    protected abstract Pseudowires activatePseudowire(ServicePort neighbor);
 
-    protected abstract XconnectGroups activateXConnect(String outerName, String innerName, FcPort portA, FcPort portZ, Pseudowires pseudowires);
+    protected abstract XconnectGroups activateXConnect(String outerName, String innerName, ServicePort portA, ServicePort portZ, Pseudowires pseudowires);
 
     protected abstract L2vpn activateL2Vpn(XconnectGroups xconnectGroups);
 
@@ -135,9 +149,12 @@ public abstract class AbstractL2vpnActivator implements ResourceActivator {
                 .build();
     }
 
-    private InstanceIdentifier<InterfaceConfiguration> deactivateInterface(FcPort port) {
+    private InstanceIdentifier<InterfaceConfiguration> deactivateInterface(ServicePort port) {
         return InstanceIdentifier.builder(InterfaceConfigurations.class)
                 .child(InterfaceConfiguration.class, new InterfaceConfigurationKey(new InterfaceActive("act"), InterfaceHelper.getInterfaceName(port)))
                 .build();
     }
+
+    protected abstract String getInnerName(String serviceId);
+    protected abstract String getOuterName(String serviceId);
 }
\ No newline at end of file
@@ -16,6 +16,7 @@ import org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.helper.AttachmentCircuitHe
 import org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.helper.L2vpnHelper;
 import org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.helper.PseudowireHelper;
 import org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.helper.XConnectHelper;
+import org.opendaylight.unimgr.mef.nrp.common.ServicePort;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.asr9k.policymgr.cfg.rev150518.PolicyManager;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.ifmgr.cfg.rev150730.InterfaceConfigurations;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.L2vpn;
@@ -23,7 +24,6 @@ import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cf
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.XconnectGroup;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.xconnect.group.p2p.xconnects.p2p.xconnect.AttachmentCircuits;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.xconnect.group.p2p.xconnects.p2p.xconnect.Pseudowires;
-import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.g_forwardingconstruct.FcPort;
 
 import java.util.Optional;
 
@@ -36,14 +36,16 @@ import static org.opendaylight.unimgr.mef.nrp.cisco.xr.common.helper.BandwidthPr
  *
  * @author krzysztof.bijakowski@amartus.com
  */
-public class L2vpnBridgeActivator extends AbstractL2vpnActivator {
+public class L2vpnLocalConnectActivator extends AbstractL2vpnActivator {
 
-    public L2vpnBridgeActivator(DataBroker dataBroker, MountPointService mountService) {
+    private static final String GROUP_NAME = "local";
+
+    public L2vpnLocalConnectActivator(DataBroker dataBroker, MountPointService mountService) {
         super(dataBroker, mountService);
     }
 
     @Override
-    protected Optional<PolicyManager> activateQos(String name, FcPort port) {
+    protected Optional<PolicyManager> activateQos(String name, ServicePort port) {
         return new BandwidthProfileHelper(dataBroker, port)
                 .addPolicyMap(name, INGRESS, UNI)
                 .addPolicyMap(name, EGRESS, UNI)
@@ -51,7 +53,7 @@ public class L2vpnBridgeActivator extends AbstractL2vpnActivator {
     }
 
     @Override
-    protected InterfaceConfigurations activateInterface(FcPort port, FcPort neighbor, long mtu) {
+    protected InterfaceConfigurations activateInterface(ServicePort port, ServicePort neighbor, long mtu) {
         return new InterfaceHelper()
             .addInterface(port, Optional.empty(), true)
             .addInterface(neighbor, Optional.empty(), true)
@@ -59,12 +61,12 @@ public class L2vpnBridgeActivator extends AbstractL2vpnActivator {
     }
 
     @Override
-    protected Pseudowires activatePseudowire(FcPort neighbor) {
+    protected Pseudowires activatePseudowire(ServicePort neighbor) {
         return new PseudowireHelper().build();
     }
 
     @Override
-    protected XconnectGroups activateXConnect(String outerName, String innerName, FcPort portA, FcPort portZ, Pseudowires pseudowires) {
+    protected XconnectGroups activateXConnect(String outerName, String innerName, ServicePort portA, ServicePort portZ, Pseudowires pseudowires) {
         AttachmentCircuits attachmentCircuits = new AttachmentCircuitHelper()
             .addPort(portA)
             .addPort(portZ)
@@ -81,4 +83,14 @@ public class L2vpnBridgeActivator extends AbstractL2vpnActivator {
     protected L2vpn activateL2Vpn(XconnectGroups xconnectGroups) {
         return L2vpnHelper.build(xconnectGroups);
     }
+
+    @Override
+    protected String getInnerName(String serviceId) {
+        return GROUP_NAME;
+    }
+
+    @Override
+    protected String getOuterName(String serviceId) {
+        return GROUP_NAME;
+    }
 }
@@ -17,6 +17,8 @@ import org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.helper.AttachmentCircuitHe
 import org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.helper.L2vpnHelper;
 import org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.helper.PseudowireHelper;
 import org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.helper.XConnectHelper;
+import org.opendaylight.unimgr.mef.nrp.common.FixedServiceNaming;
+import org.opendaylight.unimgr.mef.nrp.common.ServicePort;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.asr9k.policymgr.cfg.rev150518.PolicyManager;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.ifmgr.cfg.rev150730.InterfaceConfigurations;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.ifmgr.cfg.rev150730._interface.configurations._interface.configuration.Mtus;
@@ -26,7 +28,6 @@ import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cf
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.xconnect.group.p2p.xconnects.p2p.xconnect.AttachmentCircuits;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.xconnect.group.p2p.xconnects.p2p.xconnect.Pseudowires;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.xr.types.rev150629.CiscoIosXrString;
-import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.g_forwardingconstruct.FcPort;
 
 import java.util.Optional;
 
@@ -40,14 +41,17 @@ import static org.opendaylight.unimgr.mef.nrp.cisco.xr.common.helper.BandwidthPr
  *
  * @author krzysztof.bijakowski@amartus.com
  */
-public class L2vpnXconnectActivator extends AbstractL2vpnActivator {
+public class L2vpnP2pConnectActivator extends AbstractL2vpnActivator {
 
-    public L2vpnXconnectActivator(DataBroker dataBroker, MountPointService mountService) {
+    private final FixedServiceNaming namingProvider;
+
+    public L2vpnP2pConnectActivator(DataBroker dataBroker, MountPointService mountService) {
         super(dataBroker, mountService);
+        namingProvider = new FixedServiceNaming();
     }
 
     @Override
-    protected Optional<PolicyManager> activateQos(String name, FcPort port) {
+    protected Optional<PolicyManager> activateQos(String name, ServicePort port) {
         return new BandwidthProfileHelper(dataBroker, port)
                 .addPolicyMap(name, INGRESS, UNI)
                 .addPolicyMap(name, EGRESS, UNI)
@@ -55,8 +59,9 @@ public class L2vpnXconnectActivator extends AbstractL2vpnActivator {
     }
 
     @Override
-    public InterfaceConfigurations activateInterface(FcPort port, FcPort neighbor, long mtu) {
-        Mtus mtus = new MtuUtils().generateMtus(mtu, new CiscoIosXrString("GigabitEthernet"));
+    public InterfaceConfigurations activateInterface(ServicePort port, ServicePort neighbor, long mtu) {
+        String interfraceName = port.getInterfaceName();
+        Mtus mtus = new MtuUtils().generateMtus(mtu, new CiscoIosXrString(interfraceName));
 
         return new InterfaceHelper()
             .addInterface(port, Optional.of(mtus), true)
@@ -64,14 +69,14 @@ public class L2vpnXconnectActivator extends AbstractL2vpnActivator {
     }
 
     @Override
-    public Pseudowires activatePseudowire(FcPort neighbor) {
+    public Pseudowires activatePseudowire(ServicePort neighbor) {
         return new PseudowireHelper()
              .addPseudowire(LoopbackUtils.getIpv4Address(neighbor, dataBroker))
              .build();
     }
 
     @Override
-    public XconnectGroups activateXConnect(String outerName, String innerName, FcPort port, FcPort neighbor, Pseudowires pseudowires) {
+    public XconnectGroups activateXConnect(String outerName, String innerName, ServicePort port, ServicePort neighbor, Pseudowires pseudowires) {
         AttachmentCircuits attachmentCircuits = new AttachmentCircuitHelper()
              .addPort(port)
              .build();
@@ -87,4 +92,25 @@ public class L2vpnXconnectActivator extends AbstractL2vpnActivator {
     public L2vpn activateL2Vpn(XconnectGroups xconnectGroups) {
         return L2vpnHelper.build(xconnectGroups);
     }
+
+    @Override
+    protected String getInnerName(String serviceId) {
+        return namingProvider.getInnerName(replaceForbidenCharacters(serviceId));
+    }
+
+    @Override
+    protected String getOuterName(String serviceId) {
+        return namingProvider.getOuterName(replaceForbidenCharacters(serviceId));
+    }
+
+    /**
+     * ASR 9000 can't accept colon in xconnect group name, so it have to be replaced with underscore.
+     * If any other restriction will be found, this is a good place to change serviceId name.
+     *
+     * @param serviceId old service id
+     * @return new service id
+     */
+    private String replaceForbidenCharacters(String serviceId){
+        return serviceId.replace(":","_");
+    }
 }
diff --git a/cisco-xr-driver/src/main/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/driver/L2vpnBridgeDriverBuilder.java b/cisco-xr-driver/src/main/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/driver/L2vpnBridgeDriverBuilder.java
deleted file mode 100644 (file)
index 863082f..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco Systems Inc and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.driver;
-
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.MountPointService;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
-import org.opendaylight.unimgr.mef.nrp.api.ActivationDriver;
-import org.opendaylight.unimgr.mef.nrp.api.ActivationDriverBuilder;
-import org.opendaylight.unimgr.mef.nrp.api.EndPoint;
-import org.opendaylight.unimgr.mef.nrp.common.ResourceActivatorException;
-import org.opendaylight.unimgr.utils.CapabilitiesService;
-import org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.activator.L2vpnBridgeActivator;
-import org.opendaylight.unimgr.utils.DriverConstants;
-import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp_interface.rev170227.NrpCreateConnectivityServiceAttrs;
-import org.opendaylight.yang.gen.v1.urn.mef.yang.tapicommon.rev170227.UniversalId;
-import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.forwarding.constructs.ForwardingConstruct;
-import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.g_forwardingconstruct.FcPort;
-
-import java.util.List;
-import java.util.Optional;
-
-import static org.opendaylight.unimgr.utils.CapabilitiesService.Capability.Mode.AND;
-import static org.opendaylight.unimgr.utils.CapabilitiesService.NodeContext.NodeCapability.*;
-
-/**
- * Provides drivers for binding two ports on the same node.
- * @author bartosz.michalik@amartus.com
- */
-public class L2vpnBridgeDriverBuilder implements ActivationDriverBuilder {
-
-    private final DataBroker dataBroker;
-
-    private L2vpnBridgeActivator activator;
-
-    private static final String GROUP_NAME = "local";
-
-    public L2vpnBridgeDriverBuilder(DataBroker dataBroker, MountPointService mountPointService) {
-        this.dataBroker = dataBroker;
-        activator = new L2vpnBridgeActivator(dataBroker, mountPointService);
-    }
-
-    @Override
-    public Optional<ActivationDriver> driverFor(BuilderContext context) {
-        return Optional.of(getDriver());
-    }
-
-    protected ActivationDriver getDriver() {
-        final ActivationDriver driver = new ActivationDriver() {
-            public FcPort aEnd;
-            public FcPort zEnd;
-
-            @Override
-            public void commit() {
-                //ignore for the moment
-            }
-
-            @Override
-            public void rollback() {
-                //ignore for the moment
-            }
-
-            @Override
-            public void initialize(List<EndPoint> endPoints, String serviceId, NrpCreateConnectivityServiceAttrs context) {
-
-            }
-
-            @Override
-            public void activate() throws TransactionCommitFailedException, ResourceActivatorException {
-                activator.activate(null,null);
-            }
-
-            @Override
-            public void deactivate() throws TransactionCommitFailedException, ResourceActivatorException {
-                activator.deactivate(null,null);
-            }
-
-            @Override
-            public int priority() {
-                return 0;
-            }
-        };
-        return driver;
-    }
-
-    @Override
-    public UniversalId getNodeUuid() {
-        return UniversalId.getDefaultInstance(DriverConstants.XR_NODE);
-    }
-}
diff --git a/cisco-xr-driver/src/main/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/driver/L2vpnXconnectDriverBuilder.java b/cisco-xr-driver/src/main/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/driver/L2vpnXconnectDriverBuilder.java
deleted file mode 100644 (file)
index b0c49ea..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco Systems Inc and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.driver;
-
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.MountPointService;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
-import org.opendaylight.unimgr.mef.nrp.api.ActivationDriver;
-import org.opendaylight.unimgr.mef.nrp.api.ActivationDriverBuilder;
-import org.opendaylight.unimgr.mef.nrp.api.EndPoint;
-import org.opendaylight.unimgr.mef.nrp.common.ResourceActivatorException;
-import org.opendaylight.unimgr.mef.nrp.common.ResourceNotAvailableException;
-import org.opendaylight.unimgr.utils.CapabilitiesService;
-import org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.activator.L2vpnXconnectActivator;
-import org.opendaylight.unimgr.mef.nrp.common.FixedServiceNaming;
-import org.opendaylight.unimgr.utils.DriverConstants;
-import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp_interface.rev170227.NrpCreateConnectivityServiceAttrs;
-import org.opendaylight.yang.gen.v1.urn.mef.yang.tapicommon.rev170227.UniversalId;
-import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.forwarding.constructs.ForwardingConstruct;
-import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.g_forwardingconstruct.FcPort;
-
-import java.util.List;
-import java.util.Optional;
-
-import static org.opendaylight.unimgr.utils.CapabilitiesService.NodeContext.NodeCapability.NETCONF;
-import static org.opendaylight.unimgr.utils.CapabilitiesService.Capability.Mode.AND;
-import static org.opendaylight.unimgr.utils.CapabilitiesService.NodeContext.NodeCapability.NETCONF_CISCO_IOX_IFMGR;
-import static org.opendaylight.unimgr.utils.CapabilitiesService.NodeContext.NodeCapability.NETCONF_CISCO_IOX_L2VPN;
-
-/**
- * Xconnect builder
- * @author bartosz.michalik@amartus.com
- */
-public class L2vpnXconnectDriverBuilder implements ActivationDriverBuilder {
-
-    private final DataBroker dataBroker;
-
-    private final FixedServiceNaming namingProvider;
-
-    private L2vpnXconnectActivator xconnectActivator;
-
-    public L2vpnXconnectDriverBuilder(DataBroker dataBroker, MountPointService mountPointService) {
-        this.dataBroker = dataBroker;
-        xconnectActivator = new L2vpnXconnectActivator(dataBroker, mountPointService);
-        namingProvider = new FixedServiceNaming();
-    }
-
-    @Override
-    public Optional<ActivationDriver> driverFor(BuilderContext context) {
-        return Optional.of(getDriver());
-    }
-
-    protected ActivationDriver getDriver() {
-        final ActivationDriver driver = new ActivationDriver() {
-            public ForwardingConstruct ctx;
-            public FcPort aEnd;
-            public FcPort zEnd;
-
-            @Override
-            public void commit() {
-                //ignore for the moment
-            }
-
-            @Override
-            public void rollback() {
-                //ignore for the moment
-            }
-
-            @Override
-            public void initialize(List<EndPoint> endPoints, String serviceId, NrpCreateConnectivityServiceAttrs context) {
-
-            }
-
-            @Override
-            public void activate() throws TransactionCommitFailedException, ResourceActivatorException {
-                xconnectActivator.activate(null,null);
-            }
-
-            @Override
-            public void deactivate() throws TransactionCommitFailedException, ResourceActivatorException {
-                xconnectActivator.deactivate(null,null);
-            }
-
-            @Override
-            public int priority() {
-                return 0;
-            }
-        };
-
-        return driver;
-    }
-
-    @Override
-    public UniversalId getNodeUuid() {
-        return UniversalId.getDefaultInstance(DriverConstants.XR_NODE);
-    }
-}
diff --git a/cisco-xr-driver/src/main/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/driver/XrDriverBuilder.java b/cisco-xr-driver/src/main/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/driver/XrDriverBuilder.java
new file mode 100644 (file)
index 0000000..f5bd8b8
--- /dev/null
@@ -0,0 +1,152 @@
+/*
+ * Copyright (c) 2016 Cisco Systems Inc and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.driver;
+
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.MountPointService;
+import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
+import org.opendaylight.unimgr.mef.nrp.api.ActivationDriver;
+import org.opendaylight.unimgr.mef.nrp.api.ActivationDriverBuilder;
+import org.opendaylight.unimgr.mef.nrp.api.EndPoint;
+import org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.activator.AbstractL2vpnActivator;
+import org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.activator.L2vpnLocalConnectActivator;
+import org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.activator.L2vpnP2pConnectActivator;
+import org.opendaylight.unimgr.utils.DriverConstants;
+import org.opendaylight.unimgr.utils.SipHandler;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp_interface.rev170227.NrpCreateConnectivityServiceAttrs;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.tapicommon.rev170227.UniversalId;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.*;
+import java.util.function.BiConsumer;
+
+/**
+ * @author marek.ryznar@amartus.com
+ */
+public class XrDriverBuilder implements ActivationDriverBuilder {
+    private static final Logger LOG = LoggerFactory.getLogger(XrDriverBuilder.class);
+    private DataBroker dataBroker;
+    private MountPointService mountPointService;
+    private L2vpnLocalConnectActivator localActivator;
+    private L2vpnP2pConnectActivator p2pActivator;
+
+    public XrDriverBuilder(DataBroker dataBroker, MountPointService mountPointService){
+        this.dataBroker = dataBroker;
+        this.mountPointService = mountPointService;
+    }
+
+    protected ActivationDriver getDriver() {
+        final ActivationDriver driver = new ActivationDriver() {
+            List<Map.Entry<EndPoint,EndPoint>> bridgeActivatedPairs = null;
+            List<EndPoint> endPoints;
+            String serviceId;
+
+            @Override
+            public void commit() {
+                //ignore for the moment
+            }
+
+            @Override
+            public void rollback() {
+                //ignore for the moment
+            }
+
+            @Override
+            public void initialize(List<EndPoint> endPoints, String serviceId, NrpCreateConnectivityServiceAttrs context) {
+                this.endPoints = endPoints;
+                this.serviceId = serviceId;
+
+                localActivator = new L2vpnLocalConnectActivator(dataBroker,mountPointService);
+                p2pActivator = new L2vpnP2pConnectActivator(dataBroker,mountPointService);
+            }
+
+            @Override
+            public void activate() throws TransactionCommitFailedException {
+                handleEndpoints(activate);
+            }
+
+            @Override
+            public void deactivate() throws TransactionCommitFailedException {
+                handleEndpoints(deactivate);
+            }
+
+            @Override
+            public int priority() {
+                return 0;
+            }
+
+            private void handleEndpoints(BiConsumer<List<EndPoint>,AbstractL2vpnActivator> action){
+                endPoints.forEach(endPoint -> connectWithAllNeighbors(action,endPoint,endPoints));
+            }
+
+            private void connectWithAllNeighbors(BiConsumer<List<EndPoint>,AbstractL2vpnActivator> action, EndPoint endPoint, List<EndPoint> neighbors){
+                neighbors.stream()
+                        .filter(neighbor -> !neighbor.equals(endPoint))
+                        .forEach(neighbor -> activateNeighbors(action,endPoint,neighbor));
+            }
+
+            private void activateNeighbors(BiConsumer<List<EndPoint>,AbstractL2vpnActivator> action, EndPoint portA, EndPoint portZ) {
+                List<EndPoint> endPointsToActivate = Arrays.asList(portA,portZ);
+
+                if(SipHandler.isTheSameDevice(portA.getEndpoint().getServiceInterfacePoint(),portZ.getEndpoint().getServiceInterfacePoint())){
+                    if(bridgeActivatedPairs==null){
+                        bridgeActivatedPairs = new ArrayList<>();
+                    }
+                    if(isPairActivated(portA,portZ)){
+                        return;
+                    }
+                    action.accept(endPointsToActivate, localActivator);
+                    bridgeActivatedPairs.add(new AbstractMap.SimpleEntry<>(portA,portZ));
+                } else {
+                    action.accept(endPointsToActivate, p2pActivator);
+                }
+            }
+
+            private boolean isPairActivated(EndPoint a, EndPoint z){
+                return bridgeActivatedPairs.stream()
+                        .anyMatch( entry -> {
+                            if( (entry.getKey().equals(a) && entry.getValue().equals(z))
+                                    || (entry.getKey().equals(z) && entry.getValue().equals(a))){
+                                return true;
+                            }
+                            return false;
+                        });
+            }
+
+            BiConsumer<List<EndPoint>,AbstractL2vpnActivator> activate = (neighbors, activator) -> {
+                try {
+                    activator.activate(neighbors, serviceId);
+                } catch (TransactionCommitFailedException e) {
+                    LOG.error("Activation error occured: {}",e.getMessage());
+                }
+            };
+
+            BiConsumer<List<EndPoint>,AbstractL2vpnActivator> deactivate = (neighbors, activator) -> {
+                try {
+                    activator.deactivate(neighbors, serviceId);
+                } catch (TransactionCommitFailedException e) {
+                    LOG.error("Deactivation error occured: {}",e.getMessage());
+                }
+            };
+
+        };
+
+        return driver;
+    }
+
+    @Override
+    public Optional<ActivationDriver> driverFor(BuilderContext context) {
+        return Optional.of(getDriver());
+    }
+
+    @Override
+    public UniversalId getNodeUuid() {
+        return new UniversalId(DriverConstants.XR_NODE);
+    }
+}
index 45c17bb011c8585b875ef53b557aaeb5a88c23fa..2a28f2584825b329ee09ccc401bf1b54b2aafd6a 100644 (file)
@@ -9,11 +9,11 @@ package org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.helper;
 
 
 import org.opendaylight.unimgr.mef.nrp.cisco.xr.common.helper.InterfaceHelper;
+import org.opendaylight.unimgr.mef.nrp.common.ServicePort;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.xconnect.group.p2p.xconnects.p2p.xconnect.AttachmentCircuits;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.xconnect.group.p2p.xconnects.p2p.xconnect.AttachmentCircuitsBuilder;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.xconnect.group.p2p.xconnects.p2p.xconnect.attachment.circuits.AttachmentCircuit;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.xconnect.group.p2p.xconnects.p2p.xconnect.attachment.circuits.AttachmentCircuitBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.g_forwardingconstruct.FcPort;
 
 import java.util.LinkedList;
 import java.util.List;
@@ -31,7 +31,7 @@ public class AttachmentCircuitHelper {
         attachmentCircuits = new LinkedList<>();
     }
 
-    public AttachmentCircuitHelper addPort(FcPort port) {
+    public AttachmentCircuitHelper addPort(ServicePort port) {
         attachmentCircuits.add(
             new AttachmentCircuitBuilder()
                 .setName(InterfaceHelper.getInterfaceName(port))
index e99ca52de37a5c57ad0c0e1644d114587d8dc94c..9ef344109ce5ca95b4771b553525ce1e2249859c 100644 (file)
@@ -7,11 +7,6 @@
  */
 package org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.helper;
 
-/**
- * Helper, supports configuration of VPLS neighbors and pseudowires
- *
- * @author krzysztof.bijakowski@amartus.com
- */
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.PseudowireIdRange;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.PseudowireLabelRange;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.xconnect.group.p2p.xconnects.p2p.xconnect.Pseudowires;
@@ -20,9 +15,9 @@ import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cf
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.xconnect.group.p2p.xconnects.p2p.xconnect.pseudowires.PseudowireBuilder;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.xconnect.group.p2p.xconnects.p2p.xconnect.pseudowires.pseudowire.Neighbor;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.xconnect.group.p2p.xconnects.p2p.xconnect.pseudowires.pseudowire.NeighborBuilder;
+import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.xconnect.group.p2p.xconnects.p2p.xconnect.pseudowires.pseudowire.pseudowire.content.MplsStaticLabels;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.xconnect.group.p2p.xconnects.p2p.xconnect.pseudowires.pseudowire.pseudowire.content.MplsStaticLabelsBuilder;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.xr.types.rev150629.CiscoIosXrString;
-import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.xconnect.group.p2p.xconnects.p2p.xconnect.pseudowires.pseudowire.pseudowire.content.MplsStaticLabels;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone;
 
 import java.util.Collections;
@@ -30,6 +25,11 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicLong;
 
+/**
+ * Helper, supports configuration of VPLS neighbors and pseudowires
+ *
+ * @author krzysztof.bijakowski@amartus.com
+ */
 public class PseudowireHelper {
 
     private long pseudowireId;
index c25f03ef39ddd5c8b51d5c13386da5503764082b..a1acd540d22b8e3e68b25a817f2007d080cbcd50 100644 (file)
@@ -7,8 +7,8 @@
  */
 package org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.helper;
 
-import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.XconnectGroupsBuilder;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.XconnectGroups;
+import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.XconnectGroupsBuilder;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.XconnectGroup;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.XconnectGroupBuilder;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.XconnectGroupKey;
index 43d315949c47096e64f2e64a00f94e3af0f5366b..566145fe15a3abb84319683fa77b4ba5b0f04046 100644 (file)
@@ -12,18 +12,16 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <reference id="dataBroker" interface="org.opendaylight.controller.md.sal.binding.api.DataBroker" />
   <reference id="mountPointService" interface="org.opendaylight.controller.md.sal.binding.api.MountPointService" />
 
-  <service id="bridgeDriverService" interface="org.opendaylight.unimgr.mef.nrp.api.ActivationDriverBuilder">
-    <bean class="org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.driver.L2vpnBridgeDriverBuilder">
+  <service id="xrDriverService" interface="org.opendaylight.unimgr.mef.nrp.api.ActivationDriverBuilder">
+    <bean class="org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.driver.XrDriverBuilder">
       <argument ref="dataBroker" />
       <argument ref="mountPointService" />
     </bean>
   </service>
 
-  <service id="xconnectDriverService" interface="org.opendaylight.unimgr.mef.nrp.api.ActivationDriverBuilder">
-    <bean class="org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.driver.L2vpnXconnectDriverBuilder">
-      <argument ref="dataBroker" />
-      <argument ref="mountPointService" />
-    </bean>
-  </service>
+  <bean id="topologyHandler" class="org.opendaylight.unimgr.mef.nrp.cisco.xr.TopologyDataHandler" init-method="init" destroy-method="close">
+    <argument ref="dataBroker" />
+    <argument ref="mountPointService" />
+  </bean>
 
 </blueprint>
index a98b606c53e45c79571ccc95370a8f5026635820..585478ab27c141f39d629aafdd47b0e2a2d05c0c 100644 (file)
@@ -9,8 +9,8 @@ package org.opendaylight.unimgr.mef.nrp.cisco.xr.common.helper;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Mock;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.unimgr.mef.nrp.common.ServicePort;
 import org.opendaylight.unimgr.utils.MdsalUtils;
 import org.opendaylight.yang.gen.v1.urn.mef.nrp.specs.rev160630.AdapterSpec1;
 import org.opendaylight.yang.gen.v1.urn.mef.nrp.specs.rev160630.TerminationSpec1;
@@ -22,16 +22,11 @@ import org.opendaylight.yang.gen.v1.urn.mef.nrp.specs.rev160630.network.topology
 import org.opendaylight.yang.gen.v1.urn.mef.nrp.specs.rev160630.network.topology.topology.node.termination.point.ltp.attrs.lplist.lpspec.adapterspec.NrpEvcEndpointConnAdaptSpecAttrs;
 import org.opendaylight.yang.gen.v1.urn.mef.nrp.specs.rev160630.network.topology.topology.node.termination.point.ltp.attrs.lplist.lpspec.terminationspec.NrpUniTerminationAttrs;
 import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.TerminationPoint1;
-import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.g_forwardingconstruct.FcPort;
 import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.g_layerprotocol.LpSpec;
 import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.g_logicalterminationpoint.LpList;
 import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.network.topology.topology.node.termination.point.LtpAttrs;
 import org.opendaylight.yang.gen.v1.urn.onf.core.specs.rev160630.g_layerprotocolspec.AdapterSpec;
 import org.opendaylight.yang.gen.v1.urn.onf.core.specs.rev160630.g_layerprotocolspec.TerminationSpec;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.QosEntries;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.QosEntriesBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.Queues;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.queues.QueuesOtherConfig;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
 import org.powermock.api.mockito.PowerMockito;
 import org.powermock.core.classloader.annotations.PrepareForTest;
@@ -42,7 +37,6 @@ import java.util.List;
 import java.util.Optional;
 
 import static org.junit.Assert.*;
-import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.mock;
 import static org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType.CONFIGURATION;
 import static org.powermock.api.mockito.PowerMockito.when;
@@ -54,7 +48,7 @@ public class BandwidthProfileHelperTest {
     @Test
     public void testRetrieveBandwidthProfiles() {
         //given
-        FcPort fcPort = mock(FcPort.class);
+        ServicePort servicePort = mock(ServicePort.class);
 
         IngressBwpFlow expectedIngressDefaultBwp = mock(IngressBwpFlow.class);
         EgressBwpFlow expectedEgressDefaultBwp = mock(EgressBwpFlow.class);
@@ -63,7 +57,7 @@ public class BandwidthProfileHelperTest {
         IngressBwpUni expectedIngressUniBwp = null;
         EgressBwpUni expectedEgressUniBwp = null;
 
-        DataBroker dataBroker = mockDatastore(fcPort,
+        DataBroker dataBroker = mockDatastore(servicePort,
                 Optional.ofNullable(expectedIngressDefaultBwp),
                 Optional.ofNullable(expectedEgressDefaultBwp),
                 Optional.ofNullable(expectedIngressEvcBwp),
@@ -72,7 +66,7 @@ public class BandwidthProfileHelperTest {
                 Optional.ofNullable(expectedEgressUniBwp));
 
         //when
-        List<BandwidthProfileComposition> actual  = new BandwidthProfileHelper(dataBroker, fcPort).getBandwidthProfiles();
+        List<BandwidthProfileComposition> actual  = new BandwidthProfileHelper(dataBroker, servicePort).getBandwidthProfiles();
 
         //then
         assertNotNull(actual);
@@ -100,7 +94,7 @@ public class BandwidthProfileHelperTest {
     @Test
     public void testRetrieveBandwidthProfilesNoQos() {
         //given
-        FcPort fcPort = mock(FcPort.class);
+        ServicePort fcPort = mock(ServicePort.class);
 
         DataBroker dataBroker = mockDatastore(fcPort,
                 Optional.empty(),
@@ -130,7 +124,7 @@ public class BandwidthProfileHelperTest {
     @Test
     public void testRetrieveBandwidthProfilesEmpty() {
         //given
-        FcPort fcPort = mock(FcPort.class);
+        ServicePort fcPort = mock(ServicePort.class);
 
         DataBroker dataBroker = mockDatastoreEmpty(fcPort);
 
@@ -142,7 +136,7 @@ public class BandwidthProfileHelperTest {
         assertEquals(0, actual.size());
     }
 
-    private DataBroker mockDatastore(FcPort fcPort,
+    private DataBroker mockDatastore(ServicePort servicePort,
                                      Optional<IngressBwpFlow> ingressDefaultBwp,
                                      Optional<EgressBwpFlow> egressDefaultBwp,
                                      Optional<IngressBwpFlow> ingressEvcBwp,
@@ -207,16 +201,16 @@ public class BandwidthProfileHelperTest {
         }
 
         PowerMockito.mockStatic(MdsalUtils.class);
-        when(MdsalUtils.readTerminationPoint(eq(dataBroker), eq(CONFIGURATION), eq(fcPort))).thenReturn(com.google.common.base.Optional.of(tp));
+        when(BandwidthProfileHelper.readTerminationPoint(dataBroker, CONFIGURATION, servicePort)).thenReturn(com.google.common.base.Optional.of(tp));
 
         return dataBroker;
     }
 
-    private DataBroker mockDatastoreEmpty(FcPort fcPort) {
+    private DataBroker mockDatastoreEmpty(ServicePort servicePort) {
         DataBroker dataBroker = mock(DataBroker.class);
 
         PowerMockito.mockStatic(MdsalUtils.class);
-        when(MdsalUtils.readTerminationPoint(eq(dataBroker), eq(CONFIGURATION), eq(fcPort))).thenReturn(com.google.common.base.Optional.absent());
+        when(BandwidthProfileHelper.readTerminationPoint(dataBroker, CONFIGURATION, servicePort)).thenReturn(com.google.common.base.Optional.absent());
 
         return dataBroker;
     }
index 118243943b8e31768e3710bd5a61c923647d7dc9..443ed11d28c18fb7745ef1da0232f76d95741109 100644 (file)
@@ -7,10 +7,10 @@
  */
 package org.opendaylight.unimgr.mef.nrp.cisco.xr.common.helper;
 
-import java.util.Optional;
 import org.junit.Test;
 import org.mockito.Mockito;
 import org.opendaylight.unimgr.mef.nrp.cisco.xr.common.util.MtuUtils;
+import org.opendaylight.unimgr.mef.nrp.common.ServicePort;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.ifmgr.cfg.rev150730.InterfaceConfigurations;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.ifmgr.cfg.rev150730._interface.configurations.InterfaceConfiguration;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.ifmgr.cfg.rev150730._interface.configurations._interface.configuration.Mtus;
@@ -18,10 +18,10 @@ import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.ifmgr.cf
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.InterfaceConfiguration3;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.xr.types.rev150629.CiscoIosXrString;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.xr.types.rev150629.InterfaceName;
-import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.g_forwardingconstruct.FcPort;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TpId;
 
 import java.util.List;
+import java.util.Optional;
 
 import static org.junit.Assert.*;
 
@@ -38,7 +38,7 @@ public class InterfaceHelperTest {
         TpId tp = Mockito.mock(TpId.class);
         Mockito.when(tp.getValue()).thenReturn(interfaceName);
 
-        FcPort port = Mockito.mock(FcPort.class);
+        ServicePort port = Mockito.mock(ServicePort.class);
         Mockito.when(port.getTp()).thenReturn(tp);
 
         InterfaceName expected = new InterfaceName(interfaceName);
@@ -58,7 +58,7 @@ public class InterfaceHelperTest {
         TpId tp = Mockito.mock(TpId.class);
         Mockito.when(tp.getValue()).thenReturn(interfaceName);
 
-        FcPort port = Mockito.mock(FcPort.class);
+        ServicePort port = Mockito.mock(ServicePort.class);
         Mockito.when(port.getTp()).thenReturn(tp);
 
         InterfaceName expected = new InterfaceName("GigabitEthernet0/0/1");
index 09f6bcd7b21d9e496193754abcb3fca46e60b6f8..c610cc87080f5a485c617a653c9c7f4046546e11 100644 (file)
@@ -16,11 +16,11 @@ import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
 import org.opendaylight.controller.md.sal.binding.test.AbstractDataBrokerTest;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
-import org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.activator.L2vpnActivatorTestUtils;
+import org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.L2vpnTestUtils;
+import org.opendaylight.unimgr.mef.nrp.common.ServicePort;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone;
-import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.g_forwardingconstruct.FcPort;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.LoopbackAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.LoopbackAugmentationBuilder;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
@@ -58,7 +58,7 @@ public class LoopbackUtilsTest extends AbstractDataBrokerTest {
     @Test
     public void testLoopbackAddress(){
         //given
-        FcPort port = L2vpnActivatorTestUtils.port(topoName, nodeName, portNumber);
+        ServicePort port = L2vpnTestUtils.port(topoName, nodeName, portNumber);
         createAndPersistNode(true);
 
         //when
@@ -71,7 +71,7 @@ public class LoopbackUtilsTest extends AbstractDataBrokerTest {
     @Test
     public void testAbsenceOfLoopbackAddress(){
         //given
-        FcPort port = L2vpnActivatorTestUtils.port(topoName, nodeName, portNumber);
+        ServicePort port = L2vpnTestUtils.port(topoName, nodeName, portNumber);
         createAndPersistNode(false);
 
         //when
@@ -10,7 +10,6 @@ package org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.activator;
 import com.google.common.base.Optional;
 import com.google.common.util.concurrent.CheckedFuture;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
@@ -20,15 +19,15 @@ import org.opendaylight.controller.md.sal.binding.test.AbstractDataBrokerTest;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
+import org.opendaylight.unimgr.mef.nrp.api.EndPoint;
+import org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.L2vpnTestUtils;
 import org.opendaylight.unimgr.mef.nrp.common.MountPointHelper;
-import org.opendaylight.unimgr.mef.nrp.common.ResourceActivatorException;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.ifmgr.cfg.rev150730.InterfaceConfigurations;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.ifmgr.cfg.rev150730._interface.configurations.InterfaceConfiguration;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.L2vpn;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.XconnectGroup;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.xconnect.group.p2p.xconnects.P2pXconnect;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.xconnect.group.p2p.xconnects.p2p.xconnect.attachment.circuits.AttachmentCircuit;
-import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.g_forwardingconstruct.FcPort;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
@@ -45,40 +44,35 @@ import static org.junit.Assert.*;
  */
 @RunWith(PowerMockRunner.class)
 @PrepareForTest(MountPointHelper.class)
-public class L2vpnBridgeActivatorTest extends AbstractDataBrokerTest{
-    private static final Logger log = LoggerFactory.getLogger(L2vpnBridgeActivatorTest.class);
+public class L2vpnLocalConnectionActivatorTest extends AbstractDataBrokerTest{
+    private static final Logger log = LoggerFactory.getLogger(L2vpnLocalConnectionActivatorTest.class);
 
-    private L2vpnBridgeActivator l2vpnBridgeActivator;
+    private L2vpnLocalConnectActivator l2VpnLocalConnectActivator;
     private MountPointService mountService;
     private Optional<DataBroker> optBroker;
-    private String nodeName;
     private String outerName;
     private String innerName;
     private String portNo1;
     private String portNo2;
-    private FcPort port;
-    private FcPort neighbor;
-    private Long mtu ;
+    private String deviceName = "localhost";
+    private List<EndPoint> endPoints;
+    private String serviceId = "serviceId";
 
     @Before
     public void setUp(){
         //given
         DataBroker broker = getDataBroker();
         optBroker = Optional.of(broker);
-        mountService = L2vpnActivatorTestUtils.getMockedMountPointService(optBroker);
-        l2vpnBridgeActivator = new L2vpnBridgeActivator(broker,mountService);
+        mountService = L2vpnTestUtils.getMockedMountPointService(optBroker);
+        l2VpnLocalConnectActivator = new L2vpnLocalConnectActivator(broker,mountService);
 
-        nodeName = "NodeNameExample";
-        outerName = "OuterNameExample";
-        innerName = "InnerNameExample";
+        outerName = "local";
+        innerName = "local";
         portNo1 = "80";
         portNo2 = "8080";
-        port = L2vpnActivatorTestUtils.port("a", "localhost", portNo1);
-        neighbor = L2vpnActivatorTestUtils.port("z", "localhost", portNo2);
-        mtu = 1500L;
+        endPoints = L2vpnTestUtils.mockEndpoints(deviceName,deviceName,portNo1,portNo2);
     }
 
-    @Ignore
     @Test
     public void testActivateAndDeactivate(){
         //when
@@ -104,40 +98,36 @@ public class L2vpnBridgeActivatorTest extends AbstractDataBrokerTest{
         deactivate();
 
         //then
-        L2vpnActivatorTestUtils.checkDeactivated(optBroker,portNo1);
+        L2vpnTestUtils.checkDeactivated(optBroker,portNo1);
     }
 
     private void deactivate(){
         try {
-            l2vpnBridgeActivator.deactivate(null,null);
+            l2VpnLocalConnectActivator.deactivate(endPoints,serviceId);
         } catch (TransactionCommitFailedException e) {
             fail("Error during deactivation : " + e.getMessage());
-        } catch (ResourceActivatorException e) {
-            e.printStackTrace();
         }
     }
 
     private void activate(){
         log.debug("activate L2VPN");
         try {
-            l2vpnBridgeActivator.activate(null,null);
+            l2VpnLocalConnectActivator.activate(endPoints,serviceId);
         } catch (TransactionCommitFailedException e) {
             fail("Error during activation : " + e.getMessage());
-        } catch (ResourceActivatorException e) {
-            e.printStackTrace();
         }
     }
 
     private void checkL2vpnTree(CheckedFuture<Optional<L2vpn>, ReadFailedException> driverL2vpn) throws InterruptedException, ExecutionException {
         if (driverL2vpn.get().isPresent()){
             L2vpn l2vpn = driverL2vpn.get().get();
-            L2vpnActivatorTestUtils.checkL2vpn(l2vpn);
+            L2vpnTestUtils.checkL2vpn(l2vpn);
 
             XconnectGroup xconnectGroup = l2vpn.getDatabase().getXconnectGroups().getXconnectGroup().get(0);
-            L2vpnActivatorTestUtils.checkXConnectGroup(xconnectGroup,outerName);
+            L2vpnTestUtils.checkXConnectGroup(xconnectGroup,outerName);
 
             P2pXconnect p2pXconnect = xconnectGroup.getP2pXconnects().getP2pXconnect().get(0);
-            L2vpnActivatorTestUtils.checkP2pXconnect(p2pXconnect,innerName);
+            L2vpnTestUtils.checkP2pXconnect(p2pXconnect,innerName);
 
             List<AttachmentCircuit> attachmentCircuits = p2pXconnect.getAttachmentCircuits().getAttachmentCircuit();
             assertNotNull(attachmentCircuits);
@@ -147,8 +137,8 @@ public class L2vpnBridgeActivatorTest extends AbstractDataBrokerTest{
                     (AttachmentCircuit ac1, AttachmentCircuit ac2)
                             -> ac1.getName().getValue().compareTo(ac2.getName().getValue()));
 
-            L2vpnActivatorTestUtils.checkAttachmentCircuit(attachmentCircuits.get(0), portNo1);
-            L2vpnActivatorTestUtils.checkAttachmentCircuit(attachmentCircuits.get(1), portNo2);
+            L2vpnTestUtils.checkAttachmentCircuit(attachmentCircuits.get(0), portNo1);
+            L2vpnTestUtils.checkAttachmentCircuit(attachmentCircuits.get(1), portNo2);
         } else {
             fail("L2vpn was not found.");
         }
@@ -157,15 +147,15 @@ public class L2vpnBridgeActivatorTest extends AbstractDataBrokerTest{
     private void checkInterfaceConfigurationTree(CheckedFuture<Optional<InterfaceConfigurations>, ReadFailedException> driverInterfaceConfigurations) throws InterruptedException, ExecutionException{
         if (driverInterfaceConfigurations.get().isPresent()){
             InterfaceConfigurations interfaceConfigurations = driverInterfaceConfigurations.get().get();
-            L2vpnActivatorTestUtils.checkInterfaceConfigurations(interfaceConfigurations);
+            L2vpnTestUtils.checkInterfaceConfigurations(interfaceConfigurations);
 
             List<InterfaceConfiguration> interfaceConfigurationList = interfaceConfigurations.getInterfaceConfiguration();
             interfaceConfigurationList.sort(
                     (InterfaceConfiguration ic1, InterfaceConfiguration ic2)
                             -> ic1.getInterfaceName().getValue().compareTo(ic2.getInterfaceName().getValue()));
 
-            L2vpnActivatorTestUtils.checkInterfaceConfiguration(interfaceConfigurationList.get(0),portNo1,false);
-            L2vpnActivatorTestUtils.checkInterfaceConfiguration(interfaceConfigurationList.get(1),portNo2,false);
+            L2vpnTestUtils.checkInterfaceConfiguration(interfaceConfigurationList.get(0),portNo1,false);
+            L2vpnTestUtils.checkInterfaceConfiguration(interfaceConfigurationList.get(1),portNo2,false);
         } else {
             fail("InterfaceConfigurations was not found.");
         }
@@ -10,7 +10,6 @@ package org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.activator;
 import com.google.common.base.Optional;
 import com.google.common.util.concurrent.CheckedFuture;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
@@ -20,8 +19,9 @@ import org.opendaylight.controller.md.sal.binding.test.AbstractDataBrokerTest;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
+import org.opendaylight.unimgr.mef.nrp.api.EndPoint;
+import org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.L2vpnTestUtils;
 import org.opendaylight.unimgr.mef.nrp.common.MountPointHelper;
-import org.opendaylight.unimgr.mef.nrp.common.ResourceActivatorException;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.ifmgr.cfg.rev150730.InterfaceConfigurations;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.ifmgr.cfg.rev150730._interface.configurations.InterfaceConfiguration;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.ifmgr.cfg.rev150730._interface.configurations._interface.configuration.mtus.Mtu;
@@ -32,11 +32,11 @@ import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cf
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.xconnect.group.p2p.xconnects.p2p.xconnect.pseudowires.Pseudowire;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.xconnect.group.p2p.xconnects.p2p.xconnect.pseudowires.pseudowire.Neighbor;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.xconnect.group.p2p.xconnects.p2p.xconnect.pseudowires.pseudowire.pseudowire.content.MplsStaticLabels;
-import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.g_forwardingconstruct.FcPort;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 
+import java.util.List;
 import java.util.concurrent.ExecutionException;
 
 import static org.junit.Assert.fail;
@@ -46,19 +46,17 @@ import static org.junit.Assert.fail;
  */
 @RunWith(PowerMockRunner.class)
 @PrepareForTest(MountPointHelper.class)
-public class L2vpnXconnectActivatorTest extends AbstractDataBrokerTest {
+public class L2vpnP2pConnectionActivatorTest extends AbstractDataBrokerTest {
 
-    private L2vpnXconnectActivator l2vpnXconnectActivator;
+    private L2vpnP2pConnectActivator l2VpnP2PConnectActivator;
     private MountPointService mountService;
     private Optional<DataBroker> optBroker;
-    private String nodeName;
-    private String outerName;
-    private String innerName;
-    private String portNo;
-    private FcPort port;
-    private FcPort neighbor;
     private Long mtu;
-
+    private String deviceName = "localhost";
+    private String portNo1="80";
+    private String portNo2="8080";
+    private String serviceId = "serviceId";
+    private List<EndPoint> endPoints;
 
     @Before
     public void setUp(){
@@ -66,28 +64,20 @@ public class L2vpnXconnectActivatorTest extends AbstractDataBrokerTest {
         DataBroker broker = getDataBroker();
         optBroker = Optional.of(broker);
 
-        mountService = L2vpnActivatorTestUtils.getMockedMountPointService(optBroker);
-        l2vpnXconnectActivator = new L2vpnXconnectActivator(broker,mountService);
+        mountService = L2vpnTestUtils.getMockedMountPointService(optBroker);
+        l2VpnP2PConnectActivator = new L2vpnP2pConnectActivator(broker,mountService);
 
-        nodeName = "NodeNameExample";
-        outerName = "OuterNameExample";
-        innerName = "InnerNameExample";
-        portNo = "80";
-        port = L2vpnActivatorTestUtils.port("a", "localhost", portNo);
-        neighbor = L2vpnActivatorTestUtils.port("z", "localhost", "8080");
         mtu = Long.valueOf(1500);
+        endPoints = L2vpnTestUtils.mockEndpoints(deviceName,deviceName,portNo1,portNo2);
     }
 
-    @Ignore
     @Test
     public void testActivateAndDeactivate(){
         //when
         try {
-            l2vpnXconnectActivator.activate(null,null);
+            l2VpnP2PConnectActivator.activate(endPoints,serviceId);
         } catch (TransactionCommitFailedException e) {
             fail("Error during activation : " + e.getMessage());
-        } catch (ResourceActivatorException e) {
-            e.printStackTrace();
         }
 
         //then
@@ -110,42 +100,40 @@ public class L2vpnXconnectActivatorTest extends AbstractDataBrokerTest {
         deactivate();
 
         //then
-        L2vpnActivatorTestUtils.checkDeactivated(optBroker,portNo);
+        L2vpnTestUtils.checkDeactivated(optBroker,portNo1);
     }
 
     private void deactivate(){
         //when
         try {
-            l2vpnXconnectActivator.deactivate(null,null);
+            l2VpnP2PConnectActivator.deactivate(endPoints,serviceId);
         } catch (TransactionCommitFailedException e) {
             fail("Error during deactivation : " + e.getMessage());
-        } catch (ResourceActivatorException e) {
-            e.printStackTrace();
         }
     }
 
     private void checkL2vpnTree(CheckedFuture<Optional<L2vpn>, ReadFailedException> driverL2vpn) throws InterruptedException, ExecutionException{
         if (driverL2vpn.get().isPresent()){
             L2vpn l2vpn = driverL2vpn.get().get();
-            L2vpnActivatorTestUtils.checkL2vpn(l2vpn);
+            L2vpnTestUtils.checkL2vpn(l2vpn);
 
             XconnectGroup xconnectGroup = l2vpn.getDatabase().getXconnectGroups().getXconnectGroup().get(0);
-            L2vpnActivatorTestUtils.checkXConnectGroup(xconnectGroup,outerName);
+            L2vpnTestUtils.checkXConnectGroup(xconnectGroup,"EUR16-"+serviceId);
 
             P2pXconnect p2pXconnect = xconnectGroup.getP2pXconnects().getP2pXconnect().get(0);
-            L2vpnActivatorTestUtils.checkP2pXconnect(p2pXconnect,innerName);
+            L2vpnTestUtils.checkP2pXconnect(p2pXconnect,"EUR16-p2p-"+serviceId);
 
             AttachmentCircuit attachmentCircuit = p2pXconnect.getAttachmentCircuits().getAttachmentCircuit().get(0);
-            L2vpnActivatorTestUtils.checkAttachmentCircuit(attachmentCircuit,portNo);
+            L2vpnTestUtils.checkAttachmentCircuit(attachmentCircuit,portNo1);
 
             Pseudowire pseudowire = p2pXconnect.getPseudowires().getPseudowire().get(0);
-            L2vpnActivatorTestUtils.checkPseudowire(pseudowire);
+            L2vpnTestUtils.checkPseudowire(pseudowire);
 
             Neighbor neighbor = pseudowire.getNeighbor().get(0);
-            L2vpnActivatorTestUtils.checkNeighbor(neighbor);
+            L2vpnTestUtils.checkNeighbor(neighbor);
 
             MplsStaticLabels mplsStaticLabels = neighbor.getMplsStaticLabels();
-            L2vpnActivatorTestUtils.checkMplsStaticLabels(mplsStaticLabels);
+            L2vpnTestUtils.checkMplsStaticLabels(mplsStaticLabels);
         } else {
             fail("L2vpn was not found.");
         }
@@ -154,13 +142,13 @@ public class L2vpnXconnectActivatorTest extends AbstractDataBrokerTest {
     private void checkInterfaceConfigurationTree(CheckedFuture<Optional<InterfaceConfigurations>, ReadFailedException> driverInterfaceConfigurations) throws InterruptedException, ExecutionException{
         if (driverInterfaceConfigurations.get().isPresent()){
             InterfaceConfigurations interfaceConfigurations = driverInterfaceConfigurations.get().get();
-            L2vpnActivatorTestUtils.checkInterfaceConfigurations(interfaceConfigurations);
+            L2vpnTestUtils.checkInterfaceConfigurations(interfaceConfigurations);
 
             InterfaceConfiguration interfaceConfiguration = interfaceConfigurations.getInterfaceConfiguration().get(0);
-            L2vpnActivatorTestUtils.checkInterfaceConfiguration(interfaceConfiguration,portNo,true);
+            L2vpnTestUtils.checkInterfaceConfiguration(interfaceConfiguration,portNo1,true);
 
             Mtu mtu1 = interfaceConfiguration.getMtus().getMtu().get(0);
-            L2vpnActivatorTestUtils.checkMtu(mtu1,mtu);
+            L2vpnTestUtils.checkMtu(mtu1,mtu);
         } else {
             fail("InterfaceConfigurations was not found.");
         }
similarity index 83%
rename from cisco-xr-driver/src/test/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/activator/L2vpnActivatorTestUtils.java
rename to cisco-xr-driver/src/test/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/activator/L2vpnTestUtils.java
index ba92712edeea78c7df19dad2b49ed2d825438263..8b4abb25760e443c7dec20a1621a779b1c75a2ea 100644 (file)
@@ -5,18 +5,19 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-package org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.activator;
+package org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn;
 
 import com.google.common.base.Optional;
 import com.google.common.util.concurrent.CheckedFuture;
-import org.junit.runner.RunWith;
 import org.mockito.Mockito;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.MountPointService;
 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
+import org.opendaylight.unimgr.mef.nrp.api.EndPoint;
 import org.opendaylight.unimgr.mef.nrp.common.MountPointHelper;
+import org.opendaylight.unimgr.mef.nrp.common.ServicePort;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.ifmgr.cfg.rev150730.InterfaceConfigurations;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.ifmgr.cfg.rev150730._interface.configurations.InterfaceConfiguration;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.ifmgr.cfg.rev150730._interface.configurations._interface.configuration.mtus.Mtu;
@@ -27,27 +28,29 @@ import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cf
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.xconnect.group.p2p.xconnects.p2p.xconnect.pseudowires.Pseudowire;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.xconnect.group.p2p.xconnects.p2p.xconnect.pseudowires.pseudowire.Neighbor;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.xconnect.group.p2p.xconnects.p2p.xconnect.pseudowires.pseudowire.pseudowire.content.MplsStaticLabels;
-import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.g_forwardingconstruct.FcPort;
-import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.g_forwardingconstruct.FcPortBuilder;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp_interface.rev170227.NrpCreateConnectivityServiceEndPointAttrs;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.tapicommon.rev170227.UniversalId;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.tapiconnectivity.rev170227.ConnectivityServiceEndPoint;
 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.TpId;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.ExecutionException;
 
 import static org.junit.Assert.*;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 /**
  * Util class responsible for executing suitable assert operations on given objects.
  *
  * @author marek.ryznar@amartus.com
  */
-public class L2vpnActivatorTestUtils {
+public class L2vpnTestUtils {
 
     public static MountPointService getMockedMountPointService(Optional<DataBroker> optBroker){
         PowerMockito.mockStatic(MountPointHelper.class);
@@ -124,12 +127,8 @@ public class L2vpnActivatorTestUtils {
         assertNotNull(mtu.getOwner());
     }
 
-    public static FcPort port(String topo, String host, String port) {
-        return new FcPortBuilder()
-                .setTopology(new TopologyId(topo))
-                .setNode(new NodeId(host))
-                .setTp(new TpId(port))
-                .build();
+    public static ServicePort port(String topo, String host, String port) {
+        return new ServicePort(new TopologyId(topo), new NodeId(host), new TpId(port));
     }
 
     public static void checkDeactivated(Optional<DataBroker> optBroker, String deactivatedPort)  {
@@ -153,7 +152,7 @@ public class L2vpnActivatorTestUtils {
     private static void checkL2vpnDeactivation(CheckedFuture<Optional<L2vpn>, ReadFailedException>driverL2vpn) throws ExecutionException, InterruptedException {
         if (driverL2vpn.get().isPresent()){
             L2vpn l2vpn = driverL2vpn.get().get();
-            L2vpnActivatorTestUtils.checkL2vpn(l2vpn);
+            L2vpnTestUtils.checkL2vpn(l2vpn);
 
             XconnectGroup xconnectGroup = l2vpn.getDatabase().getXconnectGroups().getXconnectGroup().get(0);
             assertTrue(xconnectGroup.getP2pXconnects().getP2pXconnect().isEmpty());
@@ -165,7 +164,7 @@ public class L2vpnActivatorTestUtils {
     private static void checkInterfaceConfigurationDeactivation(CheckedFuture<Optional<InterfaceConfigurations>, ReadFailedException> driverInterfaceConfigurations, String deactivatedPort) throws InterruptedException, ExecutionException{
         if (driverInterfaceConfigurations.get().isPresent()){
             InterfaceConfigurations interfaceConfigurations = driverInterfaceConfigurations.get().get();
-            L2vpnActivatorTestUtils.checkInterfaceConfigurations(interfaceConfigurations);
+            L2vpnTestUtils.checkInterfaceConfigurations(interfaceConfigurations);
 
             List<InterfaceConfiguration> interfaceConfigurationList = interfaceConfigurations.getInterfaceConfiguration();
             assertFalse(interfaceConfigurationList.stream().anyMatch(x -> x.getInterfaceName().getValue().equals(deactivatedPort)));
@@ -173,4 +172,21 @@ public class L2vpnActivatorTestUtils {
             fail("InterfaceConfigurations was not found.");
         }
     }
+
+    public static List<EndPoint> mockEndpoints(String device1Name, String device2Name, String portNo1, String portNo2){
+        List<EndPoint> endPoints = new ArrayList<>();
+        endPoints.add(mockEndPoint("sip:"+device1Name+":"+portNo1));
+        endPoints.add(mockEndPoint("sip:"+device2Name+":"+portNo2));
+        return endPoints;
+    }
+
+    private static EndPoint mockEndPoint(String portName){
+        ConnectivityServiceEndPoint connectivityServiceEndPoint = mock(ConnectivityServiceEndPoint.class);
+        NrpCreateConnectivityServiceEndPointAttrs attrs = mock(NrpCreateConnectivityServiceEndPointAttrs.class);
+        //UNI port mock
+        when(connectivityServiceEndPoint.getServiceInterfacePoint())
+                .thenReturn(new UniversalId(portName));
+
+        return new EndPoint(connectivityServiceEndPoint,attrs);
+    }
 }
\ No newline at end of file
diff --git a/cisco-xr-driver/src/test/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/driver/L2vpnBridgeDriverBuilderTest.java b/cisco-xr-driver/src/test/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/driver/L2vpnBridgeDriverBuilderTest.java
deleted file mode 100644 (file)
index f89925c..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco Systems Inc and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.driver;
-
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.opendaylight.unimgr.mef.nrp.api.ActivationDriver;
-import org.opendaylight.unimgr.mef.nrp.api.ActivationDriverBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.g_forwardingconstruct.FcPort;
-
-import java.util.Optional;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.opendaylight.unimgr.utils.NodeTestUtils.*;
-
-public class L2vpnBridgeDriverBuilderTest {
-
-    private ActivationDriverBuilder.BuilderContext context;
-
-    @Before
-    public void setUp() {
-        context = new ActivationDriverBuilder.BuilderContext();
-    }
-
-    @Ignore
-    @Test
-    public void testDriverForSinglePortNoNode() {
-        //given
-        FcPort port = mockFcPort();
-        //when
-        Optional<ActivationDriver> result =  null;//new L2vpnBridgeDriverBuilder(mockDataBroker(com.google.common.base.Optional.absent()), null).driverFor(port, context);
-
-        //then
-        assertFalse(result.isPresent());
-    }
-
-    @Ignore
-    @Test
-    public void testDriverForSinglePortNetconfNode() {
-        //given
-        FcPort port = mockFcPort();
-
-        //when
-        Optional<ActivationDriver> result =  null;//new L2vpnBridgeDriverBuilder(mockDataBroker(mockNetconfNode(false)), null).driverFor(port, context);
-
-        //then
-        assertFalse(result.isPresent());
-    }
-
-    @Ignore
-    @Test
-    public void testDriverForSinglePortNetconfNodeCapabilities() {
-        //given
-        FcPort port = mockFcPort();
-
-        //when
-        Optional<ActivationDriver> result =  null;//new L2vpnBridgeDriverBuilder(mockDataBroker(mockNetconfNode(true)), null).driverFor(port, context);
-
-        //then
-        assertFalse(result.isPresent());
-    }
-
-    @Ignore
-    @Test
-    public void testDriverForTwoPortsNoNode() {
-        //given
-        FcPort portA = mockFcPort(1);
-        FcPort portZ = mockFcPort(2);
-
-        //when
-        Optional<ActivationDriver> result =  null;//new L2vpnBridgeDriverBuilder(mockDataBroker(com.google.common.base.Optional.absent()), null).driverFor(portA, portZ, context);
-
-        //then
-        assertFalse(result.isPresent());
-    }
-
-    @Ignore
-    @Test
-    public void testDriverForTwoPortsNetconfNode() {
-        //given
-        FcPort portA = mockFcPort(1);
-        FcPort portZ = mockFcPort(2);
-
-        //when
-        Optional<ActivationDriver> result =  null;//new L2vpnBridgeDriverBuilder(mockDataBroker(mockNetconfNode(false)), null).driverFor(portA, portZ, context);
-
-        //then
-        assertFalse(result.isPresent());
-    }
-
-    @Ignore
-    @Test
-    public void testDriverForTwoPortsNetconfNodeCapabilities() {
-        //given
-        FcPort portA = mockFcPort(1);
-        FcPort portZ = mockFcPort(2);
-
-        //when
-        L2vpnBridgeDriverBuilder driverBuilder = new L2vpnBridgeDriverBuilder(mockDataBroker(mockNetconfNode(true)), null);
-        Optional<ActivationDriver> result =  null;//driverBuilder.driverFor(portA, portZ, context);
-
-        //then
-        assertTrue(result.isPresent());
-        assertEquals(driverBuilder.getDriver().getClass(), result.get().getClass());
-    }
-}
diff --git a/cisco-xr-driver/src/test/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/driver/L2vpnXconnectDriverBuilderTest.java b/cisco-xr-driver/src/test/java/org/opendaylight/unimgr/mef/nrp/cisco/xr/l2vpn/driver/L2vpnXconnectDriverBuilderTest.java
deleted file mode 100644 (file)
index d0f4219..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco Systems Inc and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.driver;
-
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.opendaylight.unimgr.mef.nrp.api.ActivationDriver;
-import org.opendaylight.unimgr.mef.nrp.api.ActivationDriverBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.g_forwardingconstruct.FcPort;
-
-import java.util.Optional;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.opendaylight.unimgr.utils.NodeTestUtils.*;
-
-public class L2vpnXconnectDriverBuilderTest {
-
-    private ActivationDriverBuilder.BuilderContext context;
-
-    @Before
-    public void setUp() {
-        context = new ActivationDriverBuilder.BuilderContext();
-    }
-
-    @Ignore
-    @Test
-    public void testDriverForSinglePortNoNode() {
-        //given
-        FcPort port = mockFcPort();
-
-        //when
-        Optional<ActivationDriver> result =  null;//new L2vpnXconnectDriverBuilder(mockDataBroker(com.google.common.base.Optional.absent()), null).driverFor(port, context);
-
-        //then
-        assertFalse(result.isPresent());
-    }
-
-    @Ignore
-    @Test
-    public void testDriverForSinglePortNetconfNode() {
-        //given
-        FcPort port = mockFcPort();
-
-        //when
-        Optional<ActivationDriver> result =  null;//new L2vpnXconnectDriverBuilder(mockDataBroker(mockNetconfNode(false)), null).driverFor(port, context);
-
-        //then
-        assertFalse(result.isPresent());
-    }
-
-    @Ignore
-    @Test
-    public void testDriverForSinglePortNetconfNodeCapabilities() {
-        //given
-        FcPort port = mockFcPort();
-
-        //when
-        L2vpnXconnectDriverBuilder driverBuilder = new L2vpnXconnectDriverBuilder(mockDataBroker(mockNetconfNode(true)), null);
-        Optional<ActivationDriver> result = null;//driverBuilder.driverFor(port, context);
-
-        //then
-        assertTrue(result.isPresent());
-        assertEquals(driverBuilder.getDriver().getClass(), result.get().getClass());
-    }
-
-    @Ignore
-    @Test
-    public void testDriverForTwoPortsNoNode() {
-        //given
-        FcPort portA = mockFcPort(1);
-        FcPort portZ = mockFcPort(2);
-
-        //when
-        Optional<ActivationDriver> result =  null;//new L2vpnXconnectDriverBuilder(mockDataBroker(com.google.common.base.Optional.absent()), null).driverFor(portA, portZ, context);
-
-        //then
-        assertFalse(result.isPresent());
-    }
-
-    @Ignore
-    @Test
-    public void testDriverForTwoPortsNetconfNode() {
-        //given
-        FcPort portA = mockFcPort(1);
-        FcPort portZ = mockFcPort(2);
-
-        //when
-        Optional<ActivationDriver> result =  null;//new L2vpnXconnectDriverBuilder(mockDataBroker(mockNetconfNode(false)), null).driverFor(portA, portZ, context);
-
-        //then
-        assertFalse(result.isPresent());
-    }
-
-    @Ignore
-    @Test
-    public void testDriverForTwoPortsNetconfNodeCapabilities() {
-        //given
-        FcPort portA = mockFcPort(1);
-        FcPort portZ = mockFcPort(2);
-
-        //when
-        Optional<ActivationDriver> result =  null;// new L2vpnXconnectDriverBuilder(mockDataBroker(mockNetconfNode(true)), null).driverFor(portA, portZ, context);
-
-        //then
-        assertFalse(result.isPresent());
-    }
-}
index 006ac92964ce2dba470c2be2a3282293497b4bc8..3c84c11aa991d364e45d4872f5073cd345447bdd 100644 (file)
@@ -12,19 +12,17 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mockito;
 import org.opendaylight.unimgr.mef.nrp.cisco.xr.common.helper.InterfaceHelper;
+import org.opendaylight.unimgr.mef.nrp.common.ServicePort;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.xconnect.group.p2p.xconnects.p2p.xconnect.AttachmentCircuits;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.xconnect.group.p2p.xconnects.p2p.xconnect.attachment.circuits.AttachmentCircuit;
 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.xr.types.rev150629.InterfaceName;
-import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.g_forwardingconstruct.FcPort;
 import org.powermock.api.mockito.PowerMockito;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 
 import java.util.List;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 /**
  * @author krzysztof.bijakowski@amartus.com
@@ -38,7 +36,7 @@ public class AttachmentCircuitHelperTest {
         //given
         InterfaceName interfaceName = new InterfaceName("GigabitEthernet0/0/1");
 
-        FcPort port = Mockito.mock(FcPort.class);
+        ServicePort port = Mockito.mock(ServicePort.class);
         PowerMockito.mockStatic(InterfaceHelper.class);
         PowerMockito.when(InterfaceHelper.getInterfaceName(port)).thenReturn(interfaceName);
 
index 9a0276b69bcd03aab2bc292366c1c47091fa763b..251cdaf96bdbe076cb472339ed39bf1721112919 100755 (executable)
@@ -95,6 +95,7 @@
 
   <feature name='odl-unimgr-cisco-xr-driver' version='${project.version}' description='OpenDaylight :: UniMgr :: Cisco XR Driver'>
     <feature version='${project.version}'>odl-unimgr</feature>
+    <feature version="${netconf.version}">odl-netconf-topology</feature>
     <bundle>mvn:org.opendaylight.unimgr/cisco-xrmodels/{{VERSION}}</bundle>
     <bundle>mvn:org.opendaylight.unimgr/unimgr-cisco-xr-driver/{{VERSION}}</bundle>
   </feature>