--- /dev/null
+/*
+ * 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();
+ }
+
+}
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;
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;
}
}
- 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)
private List<PolicyMap> policyMaps;
- public BandwidthProfileHelper(DataBroker dataBroker, FcPort port) {
+ public BandwidthProfileHelper(DataBroker dataBroker, ServicePort port) {
bandwidthProfiles = BandwidthProfileHelper.retrieveBandwidthProfiles(dataBroker, port);
policyMaps = new ArrayList<>();
}
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<>();
.build()
);
-
policyMaps.add(new PolicyMapBuilder()
.setName(PolicyMapNameGenerator.generate(fcName, direction, applicability))
.setPolicyMapRule(policyMapRules)
.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
*/
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;
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;
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(":")) {
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);
}
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;
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();
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;
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;
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;
}
@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 {
}
protected void doDeactivate(String nodeName,
- String outerName,
- String innerName,
InstanceIdentifier<P2pXconnect> xconnectId,
InstanceIdentifier<InterfaceConfiguration> interfaceConfigurationId) throws TransactionCommitFailedException {
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);
.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
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;
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;
*
* @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)
}
@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)
}
@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)
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;
+ }
}
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;
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;
*
* @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)
}
@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)
}
@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();
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(":","_");
+ }
}
+++ /dev/null
-/*
- * 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);
- }
-}
+++ /dev/null
-/*
- * 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);
- }
-}
--- /dev/null
+/*
+ * 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);
+ }
+}
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;
attachmentCircuits = new LinkedList<>();
}
- public AttachmentCircuitHelper addPort(FcPort port) {
+ public AttachmentCircuitHelper addPort(ServicePort port) {
attachmentCircuits.add(
new AttachmentCircuitBuilder()
.setName(InterfaceHelper.getInterfaceName(port))
*/
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;
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;
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;
*/
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;
<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>
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;
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;
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;
@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);
IngressBwpUni expectedIngressUniBwp = null;
EgressBwpUni expectedEgressUniBwp = null;
- DataBroker dataBroker = mockDatastore(fcPort,
+ DataBroker dataBroker = mockDatastore(servicePort,
Optional.ofNullable(expectedIngressDefaultBwp),
Optional.ofNullable(expectedEgressDefaultBwp),
Optional.ofNullable(expectedIngressEvcBwp),
Optional.ofNullable(expectedEgressUniBwp));
//when
- List<BandwidthProfileComposition> actual = new BandwidthProfileHelper(dataBroker, fcPort).getBandwidthProfiles();
+ List<BandwidthProfileComposition> actual = new BandwidthProfileHelper(dataBroker, servicePort).getBandwidthProfiles();
//then
assertNotNull(actual);
@Test
public void testRetrieveBandwidthProfilesNoQos() {
//given
- FcPort fcPort = mock(FcPort.class);
+ ServicePort fcPort = mock(ServicePort.class);
DataBroker dataBroker = mockDatastore(fcPort,
Optional.empty(),
@Test
public void testRetrieveBandwidthProfilesEmpty() {
//given
- FcPort fcPort = mock(FcPort.class);
+ ServicePort fcPort = mock(ServicePort.class);
DataBroker dataBroker = mockDatastoreEmpty(fcPort);
assertEquals(0, actual.size());
}
- private DataBroker mockDatastore(FcPort fcPort,
+ private DataBroker mockDatastore(ServicePort servicePort,
Optional<IngressBwpFlow> ingressDefaultBwp,
Optional<EgressBwpFlow> egressDefaultBwp,
Optional<IngressBwpFlow> ingressEvcBwp,
}
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;
}
*/
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;
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.*;
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);
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");
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;
@Test
public void testLoopbackAddress(){
//given
- FcPort port = L2vpnActivatorTestUtils.port(topoName, nodeName, portNumber);
+ ServicePort port = L2vpnTestUtils.port(topoName, nodeName, portNumber);
createAndPersistNode(true);
//when
@Test
public void testAbsenceOfLoopbackAddress(){
//given
- FcPort port = L2vpnActivatorTestUtils.port(topoName, nodeName, portNumber);
+ ServicePort port = L2vpnTestUtils.port(topoName, nodeName, portNumber);
createAndPersistNode(false);
//when
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;
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;
*/
@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
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);
(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.");
}
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.");
}
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;
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;
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;
*/
@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(){
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
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.");
}
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.");
}
* 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;
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);
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) {
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());
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)));
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
+++ /dev/null
-/*
- * 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());
- }
-}
+++ /dev/null
-/*
- * 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());
- }
-}
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
//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);
<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>