import static org.junit.Assert.fail;
import static org.opendaylight.unimgr.mef.nrp.api.TapiConstants.PRESTO_SYSTEM_TOPO;
+import com.google.common.base.Optional;
+
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import com.google.common.base.Optional;
import org.junit.Before;
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.unimgr.mef.nrp.api.EndPoint;
import org.opendaylight.unimgr.mef.nrp.api.TapiConstants;
-import org.opendaylight.unimgr.mef.nrp.api.TopologyManager;
import org.opendaylight.unimgr.mef.nrp.common.NrpDao;
import org.opendaylight.unimgr.mef.nrp.common.TapiUtils;
-import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.tapi.common.rev171113.*;
-import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.tapi.common.rev171113.context.attrs.ServiceInterfacePointBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.tapi.connectivity.rev171113.ConnectivityServiceEndPoint;
-import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.tapi.connectivity.rev171113.create.connectivity.service.input.EndPointBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.tapi.topology.rev171113.Context1;
-import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.tapi.topology.rev171113.link.*;
-import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.tapi.topology.rev171113.node.OwnedNodeEdgePointBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.tapi.topology.rev171113.risk.parameter.pac.RiskCharacteristicBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.tapi.topology.rev171113.topology.*;
-import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.tapi.topology.rev171113.topology.context.*;
-import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.tapi.topology.rev171113.topology.context.TopologyKey;
-import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.tapi.topology.rev171113.transfer.cost.pac.CostCharacteristicBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.tapi.topology.rev171113.transfer.timing.pac.LatencyCharacteristicBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.tapi.topology.rev171113.validation.pac.ValidationMechanismBuilder;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.common.types.rev180321.NaturalNumber;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.common.types.rev180321.PositiveInteger;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.nrm.connectivity.rev180321.carrier.eth.connectivity.end.point.resource.CeVlanIdListAndUntag;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.nrm.connectivity.rev180321.carrier.eth.connectivity.end.point.resource.CeVlanIdListAndUntagBuilder;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.nrm.connectivity.rev180321.vlan.id.list.and.untag.VlanIdBuilder;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp._interface.rev180321.EndPoint2Builder;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp._interface.rev180321.NrpConnectivityServiceEndPointAttrs;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp._interface.rev180321.ServiceInterfacePoint1;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp._interface.rev180321.ServiceInterfacePoint1Builder;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp._interface.rev180321.nrp.connectivity.service.end.point.attrs.NrpCarrierEthConnectivityEndPointResourceBuilder;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp._interface.rev180321.nrp.sip.attrs.NrpCarrierEthInniNResourceBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev180307.Context;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev180307.ForwardingDirection;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev180307.LayerProtocolName;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev180307.LifecycleState;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev180307.OperationalState;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev180307.PortDirection;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev180307.PortRole;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev180307.TerminationDirection;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev180307.Uuid;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev180307.tapi.context.ServiceInterfacePointBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.ConnectivityServiceEndPoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.connection.ConnectionEndPoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.connection.RouteBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.connectivity.context.Connection;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.connectivity.context.ConnectionBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.connectivity.context.ConnectionKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.connectivity.service.end.point.ServiceInterfacePoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.create.connectivity.service.input.EndPointBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev180307.Context1;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev180307.OwnedNodeEdgePointRef;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev180307.link.NodeEdgePoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev180307.link.NodeEdgePointBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev180307.node.OwnedNodeEdgePointBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev180307.node.edge.point.MappedServiceInterfacePoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev180307.topology.Link;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev180307.topology.LinkBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev180307.topology.LinkKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev180307.topology.Node;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev180307.topology.NodeKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev180307.topology.context.Topology;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev180307.topology.context.TopologyKey;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-/**
- * @author bartosz.michalik@amartus.com
- */
public abstract class AbstractTestWithTopo extends AbstractConcurrentDataBrokerTest {
protected static final InstanceIdentifier<Node> NRP_ABSTRACT_NODE_IID = InstanceIdentifier
.create(Context.class)
dataBroker = getDataBroker();
topologyManager = new NrpInitializer(dataBroker);
topologyManager.init();
+ new AbstractNodeHandler(dataBroker).init();
}
protected EndPoint ep(String nepId) {
}
protected EndPoint ep(String nepId, PortDirection pd) {
+
ConnectivityServiceEndPoint ep = new EndPointBuilder()
.setLocalId("ep_" + nepId)
.setDirection(pd)
- .setServiceInterfacePoint(new Uuid("sip:" + nepId))
+ .setServiceInterfacePoint(TapiUtils.toSipRef(new Uuid("sip:" + nepId), ServiceInterfacePoint.class))
.build();
- return new EndPoint(ep, null);
+ return new EndPoint(ep, someAttributes());
+ }
+
+ CeVlanIdListAndUntag toVlanList(long... vlans) {
+ List<org.opendaylight.yang.gen.v1.urn.mef.yang.nrm.connectivity.rev180321
+ .vlan.id.list.and.untag.VlanId> vlanList = Arrays.stream(vlans)
+ .mapToObj(vlan -> new VlanIdBuilder().setVlanId(new PositiveInteger(vlan)).build())
+ .collect(Collectors.toList());
+ return new CeVlanIdListAndUntagBuilder().setVlanId(vlanList).build();
+
+ }
+
+ private NrpConnectivityServiceEndPointAttrs someAttributes() {
+ return new EndPoint2Builder()
+ .setNrpCarrierEthConnectivityEndPointResource(
+ new NrpCarrierEthConnectivityEndPointResourceBuilder()
+ .setCeVlanIdListAndUntag(toVlanList(1004L)
+ ).build()
+ ).build();
}
- protected Link l(ReadWriteTransaction tx, String nA, String nepA, String nB, String nepB, OperationalState state) {
- return l(tx, nA, nepA, nB, nepB, state, ForwardingDirection.BIDIRECTIONAL);
+ protected Link l(ReadWriteTransaction tx, String nameA, String nepA, String nameB, String nepB,
+ OperationalState state) {
+ return l(tx, nameA, nepA, nameB, nepB, state, ForwardingDirection.BIDIRECTIONAL);
}
- protected Link l(ReadWriteTransaction tx, String nA, String nepA, String nB, String nepB, OperationalState state, ForwardingDirection dir) {
+ protected Link l(ReadWriteTransaction tx, String nameA, String nepA, String nameB, String nepB,
+ OperationalState state, ForwardingDirection dir) {
Uuid uuid = new Uuid(nepA + "-" + nepB);
NrpDao dao = new NrpDao(tx);
- if(dao.hasSip(nepA)) {
+ if (dao.hasSip(nepA)) {
dao.removeSip(new Uuid("sip:" + nepA));
}
- if(dao.hasSip(nepB)) {
+ if (dao.hasSip(nepB)) {
dao.removeSip(new Uuid("sip:" + nepB));
}
+ NodeEdgePointBuilder builder = new NodeEdgePointBuilder()
+ .setTopologyId(new Uuid(TapiConstants.PRESTO_SYSTEM_TOPO));
+
+ NodeEdgePoint nepRefA = builder
+ .setNodeId(new Uuid(nameA))
+ .setOwnedNodeEdgePointId(new Uuid(nepA))
+ .build();
+
+ NodeEdgePoint nepRefB = builder
+ .setNodeId(new Uuid(nameB))
+ .setOwnedNodeEdgePointId(new Uuid(nepB))
+ .build();
+
+
Link link = new LinkBuilder()
.setUuid(uuid)
- .setKey(new LinkKey(uuid))
+ .withKey(new LinkKey(uuid))
.setDirection(dir)
- .setLayerProtocolName(Collections.singletonList(ETH.class))
- .setNode(toIds(nA, nB).collect(Collectors.toList()))
- .setNodeEdgePoint(toIds(nepA, nepB).collect(Collectors.toList()))
- .setState(new StateBuilder().setOperationalState(state).build())
- .setTransferCost(emptyCost())
- .setTransferTiming(emptyTiming())
- .setRiskParameter(emptyRisk())
- .setValidation(emptyValidation())
- .setLpTransition(emptyLpTransition())
+ .setLayerProtocolName(Collections.singletonList(LayerProtocolName.ETH))
+ .setOperationalState(state)
+ .setTransitionedLayerProtocolName(Collections.emptyList())
+ .setCostCharacteristic(Collections.emptyList())
+ .setLatencyCharacteristic(Collections.emptyList())
+ .setRiskCharacteristic(Collections.emptyList())
+ .setValidationMechanism(Collections.emptyList())
+ .setNodeEdgePoint(Stream.of(nepRefA, nepRefB).collect(Collectors.toList()))
+
.build();
- tx.put(LogicalDatastoreType.OPERATIONAL, NrpDao.topo(PRESTO_SYSTEM_TOPO).child(Link.class, new LinkKey(uuid)), link);
+ tx.put(LogicalDatastoreType.OPERATIONAL,
+ NrpDao.topo(PRESTO_SYSTEM_TOPO).child(Link.class, new LinkKey(uuid)), link);
return link;
}
- private LpTransition emptyLpTransition() {
- return new LpTransitionBuilder()
- .setTransitionedLayerProtocolName(Collections.singletonList("n/a"))
- .build();
- }
+ protected org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307
+ .connectivity.context.Connection
+ c(ReadWriteTransaction tx, String nodeUuid, List<Uuid> route, String... neps) {
- private Validation emptyValidation() {
- return new ValidationBuilder()
- .setValidationMechanism(Collections.singletonList(
- new ValidationMechanismBuilder()
- .setValidationMechanism("empty")
- .setLayerProtocolAdjacencyValidated("n/a")
- .setValidationRobustness("n/a")
- .build()
- ))
- .build();
- }
+ ConnectionBuilder builder = new ConnectionBuilder()
+ .setUuid(new Uuid("c:" + nodeUuid))
+ .setConnectionEndPoint(ceps(tx, nodeUuid, neps));
- private RiskParameter emptyRisk() {
- return new RiskParameterBuilder()
- .setRiskCharacteristic(Collections.singletonList(
- new RiskCharacteristicBuilder()
- .setRiskCharacteristicName("empty").build()
- )).build();
+ if (!route.isEmpty()) {
+ builder.setRoute(Collections.singletonList(new RouteBuilder()
+ .setConnectionEndPoint(route)
+ .setLocalId("route")
+ .build()
+ ));
+ }
- }
+ Connection connection = builder.build();
+ InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang
+ .tapi.connectivity.rev180307.Context1> connectivityCtx = NrpDao.ctx()
+ .augmentation(
+ org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.Context1.class);
+ tx.put(LogicalDatastoreType.OPERATIONAL, connectivityCtx.child(Connection.class,
+ new ConnectionKey(connection.getUuid())), connection);
- private TransferTiming emptyTiming() {
- return new TransferTimingBuilder()
- .setLatencyCharacteristic(Collections.singletonList(
- new LatencyCharacteristicBuilder()
- .setTrafficPropertyName("empty")
- .setTrafficPropertyQueingLatency("0")
- .build()
- )).build();
+ return connection;
}
- private TransferCost emptyCost() {
- return new TransferCostBuilder()
- .setCostCharacteristic(Collections.singletonList(
- new CostCharacteristicBuilder()
- .setCostName("empty")
- .setCostAlgorithm("n/a")
- .setCostValue("0")
- .build()
- )).build();
- }
+ protected org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307
+ .connectivity.context.Connection c(ReadWriteTransaction tx, String nodeUuid, String... neps) {
+ return c(tx, nodeUuid, Collections.emptyList(), neps);
+ }
+ private List<ConnectionEndPoint> ceps(ReadWriteTransaction tx, String nodeId, String... neps) {
+ NrpDao nrpDao = new NrpDao(tx);
- protected Stream<Uuid> toIds(String ... uuids) {
- return toIds(Arrays.stream(uuids));
- }
+ return Arrays.stream(neps).map(nep -> {
+ OwnedNodeEdgePointRef nepRef = toRef(nodeId, nep);
+ return nrpDao.addConnectionEndPoint(nepRef, dummyCep(nepRef));
- protected Stream<Uuid> toIds(Stream<String> uuids) {
- return uuids.map(Uuid::new);
+ }).collect(Collectors.toList());
}
- protected Node n(ReadWriteTransaction tx, boolean addSips, String node, String ... endpoints) {
- return n(tx, addSips, node, Arrays.stream(endpoints).map(i -> new Pair(i, PortDirection.BIDIRECTIONAL)));
+ private OwnedNodeEdgePointRef toRef(String nodeId, String nepId) {
+ return new NodeEdgePointBuilder()
+ .setTopologyId(new Uuid(
+ TapiConstants.PRESTO_ABSTRACT_NODE.equals(nodeId)
+ ? TapiConstants.PRESTO_EXT_TOPO
+ : TapiConstants.PRESTO_SYSTEM_TOPO))
+ .setNodeId(new Uuid(nodeId))
+ .setOwnedNodeEdgePointId(new Uuid(nepId))
+ .build();
}
- protected Node n(ReadWriteTransaction tx, boolean addSips, String node, Stream<Pair> endpoints) {
- List<Pair> eps = endpoints.collect(Collectors.toList());
- NrpDao nrpDao = new NrpDao(tx);
- if (addSips) {
- eps.stream().map(e -> new ServiceInterfacePointBuilder()
- .setUuid(new Uuid("sip:" + e.getId()))
- .setLayerProtocol(Collections.singletonList(TapiUtils.toSipPN(ETH.class)))
- .build())
- .forEach(nrpDao::addSip);
- }
-
- return nrpDao.createNode(TapiConstants.PRESTO_SYSTEM_TOPO, node, ETH.class, eps.stream()
- .map(e-> {
- OwnedNodeEdgePointBuilder builder = new OwnedNodeEdgePointBuilder()
- .setLinkPortDirection(e.getDir())
- .setLayerProtocol(Collections.singletonList(TapiUtils.toNepPN(ETH.class)))
- .setUuid(new Uuid(e.getId()));
- if (addSips) {
- builder.setMappedServiceInterfacePoint(Collections.singletonList(new Uuid("sip:" + e.getId())));
- }
- return builder.build();
- }).collect(Collectors.toList()));
+ private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307
+ .cep.list.ConnectionEndPoint dummyCep(OwnedNodeEdgePointRef nepRef) {
+ org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307
+ .cep.list.ConnectionEndPointBuilder builder
+ = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307
+ .cep.list.ConnectionEndPointBuilder();
+
+ return builder
+ .setUuid(new Uuid("cep:" + nepRef.getOwnedNodeEdgePointId().getValue()))
+ .setConnectionPortRole(PortRole.SYMMETRIC)
+ .setTerminationDirection(TerminationDirection.BIDIRECTIONAL)
+ .setLifecycleState(LifecycleState.INSTALLED)
+ .setOperationalState(OperationalState.ENABLED)
+ .build();
}
+ @SuppressWarnings("checkstyle:illegalcatch")
protected Node getAbstractNode() {
- try(ReadOnlyTransaction tx = dataBroker.newReadOnlyTransaction()) {
+ try (ReadOnlyTransaction tx = dataBroker.newReadOnlyTransaction()) {
Optional<Node> opt =
- tx.read(LogicalDatastoreType.OPERATIONAL,NRP_ABSTRACT_NODE_IID).checkedGet();
+ tx.read(LogicalDatastoreType.OPERATIONAL,NRP_ABSTRACT_NODE_IID).get();
if (opt.isPresent()) {
return opt.get();
} else {
return null;
}
-
+ @SuppressWarnings("checkstyle:emptyblock")
protected Node getAbstractNode(Predicate<Node> nodePredicate) {
- for(int i = 0; i < 5; ++i) {
+ for (int i = 0; i < 5; ++i) {
Node node = getAbstractNode();
- if(node != null && nodePredicate.test(node)) {
+ if (node != null && nodePredicate.test(node)) {
return node;
}
try {
TimeUnit.MILLISECONDS.sleep(10);
} catch (InterruptedException e) {
- e.printStackTrace();
}
}
throw new IllegalStateException("No NEPs matching predicate");
}
-
-
protected static class Pair {
private String id;
private PortDirection dir;
}
protected Node n(ReadWriteTransaction tx, String node, String ... endpoints) {
- return n(tx,true, node, endpoints);
+ return n(tx,true, new Uuid(node), node, endpoints);
+ }
+
+ protected Node n(ReadWriteTransaction tx, Uuid node, String activationDriverId, String ... endpoints) {
+ return n(tx,true, node, activationDriverId, endpoints);
+ }
+
+ protected Node n(ReadWriteTransaction tx, boolean addSips, Uuid node,
+ String activationDriverId, String ... endpoints) {
+ return n(tx, addSips, node.getValue(), activationDriverId, Arrays.stream(endpoints)
+ .map(i -> new Pair(i, PortDirection.BIDIRECTIONAL)));
+ }
+
+ protected Node n(ReadWriteTransaction tx, boolean addSips, String node,
+ String activationDriverId, Stream<Pair> endpoints) {
+ List<Pair> eps = endpoints.collect(Collectors.toList());
+ NrpDao nrpDao = new NrpDao(tx);
+ if (addSips) {
+ ServiceInterfacePoint1Builder sipBuilder = new ServiceInterfacePoint1Builder();
+ sipBuilder.setNrpCarrierEthInniNResource(new NrpCarrierEthInniNResourceBuilder()
+ .setMaxFrameSize(new NaturalNumber(2048L))
+ .build());
+
+ eps.stream().map(e -> new ServiceInterfacePointBuilder()
+ .setUuid(new Uuid("sip:" + e.getId()))
+ .setLayerProtocolName(Collections.singletonList(LayerProtocolName.ETH))
+ .addAugmentation(ServiceInterfacePoint1.class, sipBuilder.build())
+ .build())
+ .forEach(nrpDao::addSip);
+ }
+
+ return nrpDao.createNode(TapiConstants.PRESTO_SYSTEM_TOPO, node,
+ activationDriverId, LayerProtocolName.ETH, eps.stream()
+ .map(e -> {
+ OwnedNodeEdgePointBuilder builder = new OwnedNodeEdgePointBuilder()
+ .setLinkPortDirection(e.getDir())
+ .setLayerProtocolName(LayerProtocolName.ETH)
+ .setUuid(new Uuid(e.getId()));
+ if (addSips) {
+ builder.setMappedServiceInterfacePoint(
+ Collections.singletonList(
+ TapiUtils.toSipRef(
+ new Uuid("sip:" + e.getId()),
+ MappedServiceInterfacePoint.class)));
+ }
+ return builder.build();
+ }).collect(Collectors.toList()));
}
}