import org.opendaylight.nemo.intent.computation.PNComputationUnit;\r
import org.opendaylight.nemo.intent.computation.VNComputationUnit;\r
import org.opendaylight.nemo.intent.computation.VNMappingUnit;\r
+import org.opendaylight.nemo.intent.condition.ConditionManager;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.PhysicalNetwork;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.PhysicalPaths;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.paths.PhysicalPath;\r
*/\r
private OperationResolver operationResolver;\r
\r
+ /**\r
+ * The condition manager to resolve and manage the condition in the user's operation.\r
+ */\r
+ private ConditionManager conditionManager;\r
+\r
/**\r
* The physical network computation unit.\r
*/\r
nodeMapper = new NodeMapper(dataBroker);\r
connectionMapper = new ConnectionMapper(dataBroker, nodeMapper);\r
flowManager = new FlowManager(dataBroker);\r
- operationResolver = new OperationResolver(dataBroker);\r
+ conditionManager = new ConditionManager(this);\r
\r
pnComputationUnit = new PNComputationUnit(dataBroker);\r
vnComputationUnits = new HashMap<UserId, VNComputationUnit>();\r
vnMappingUnit = new VNMappingUnit(dataBroker, pnComputationUnit);\r
\r
+ operationResolver = new OperationResolver(dataBroker, conditionManager, vnComputationUnits);\r
+\r
LOG.debug("Initialized the renderer common intent resolver.");\r
\r
return;\r
.build();\r
\r
if ( null != vnComputationUnit ) {\r
+ conditionManager.clear(userId);\r
+\r
vnComputationUnit.close();\r
vnComputationUnits.remove(userId);\r
\r
}\r
}\r
\r
+ List<Operation> operationsApplyingToNode = new LinkedList<Operation>();\r
+ List<Operation> operationsApplyingToConnection = new LinkedList<Operation>();\r
+ List<Operation> operationsApplyingToFlow = new LinkedList<Operation>();\r
+\r
if ( null != user.getOperations() ) {\r
List<Operation> operations = user.getOperations().getOperation();\r
\r
if ( null != operations ) {\r
- for ( Operation operation : operations ) {\r
- operationResolver.resolveOperation(user, operation, virtualNetwork, userIntentVnMapping);\r
- }\r
+ operationResolver.classifyOperations(user, operations, operationsApplyingToNode,\r
+ operationsApplyingToConnection, operationsApplyingToFlow);\r
+ }\r
+ }\r
+\r
+ if ( !operationsApplyingToNode.isEmpty() ) {\r
+ for ( Operation operation : operationsApplyingToNode ) {\r
+ operationResolver.resolveOperation(user, operation, virtualNetwork, userIntentVnMapping);\r
+ }\r
+ }\r
+\r
+ if ( !operationsApplyingToConnection.isEmpty() ) {\r
+ for ( Operation operation : operationsApplyingToConnection ) {\r
+ operationResolver.resolveOperation(user, operation, virtualNetwork, userIntentVnMapping);\r
}\r
}\r
\r
vnComputationUnit = new VNComputationUnit(dataBroker, virtualNetwork);\r
vnComputationUnits.put(userId, vnComputationUnit);\r
\r
+ int currentVirtualLinkNum = virtualLinks.getVirtualLink().size();\r
+\r
+ if ( !operationsApplyingToFlow.isEmpty() ) {\r
+ for ( Operation operation : operationsApplyingToFlow ) {\r
+ operationResolver.resolveOperation(user, operation, virtualNetwork, userIntentVnMapping);\r
+ }\r
+ }\r
+\r
+ List<VirtualLink> virtualLinkList = virtualLinks.getVirtualLink();\r
+ List<VirtualLink> unmappedVirtualLinkList =\r
+ virtualLinkList.subList(currentVirtualLinkNum, virtualLinkList.size());\r
+\r
+ vnMappingUnit.virtualNetworkMapping(virtualNetwork,\r
+ unmappedVirtualLinkList, userVnPnMapping, physicalPaths);\r
+\r
LOG.debug("{}", virtualNetwork);\r
LOG.debug("{}", userIntentVnMapping);\r
LOG.debug("{}", userVnPnMapping);\r
* @param propertyName TODO\r
* @return TODO\r
*/\r
- protected static Property getNodeProperty(List<Property> properties, PropertyName propertyName) {\r
+ public static Property getNodeProperty(List<Property> properties, PropertyName propertyName) {\r
if ( null != properties ) {\r
for ( Property property : properties ) {\r
if ( property.getPropertyName().equals(propertyName) ) {\r
* @param intentId TODO\r
* @return TODO\r
*/\r
- protected static IntentVnMappingResult getIntentVnMappingResult(\r
+ public static IntentVnMappingResult getIntentVnMappingResult(\r
List<IntentVnMappingResult> intentVnMappingResults, IntentId intentId) {\r
for ( IntentVnMappingResult intentVnMappingResult : intentVnMappingResults ) {\r
if ( intentVnMappingResult.getIntentId().equals(intentId) ) {\r
* @param virtualNodeId TODO\r
* @return TODO\r
*/\r
- protected static VirtualNode getVirtualNode(List<VirtualNode> virtualNodes,\r
- VirtualNodeId virtualNodeId) {\r
+ public static VirtualNode getVirtualNode(List<VirtualNode> virtualNodes,\r
+ VirtualNodeId virtualNodeId) {\r
for ( VirtualNode virtualNode : virtualNodes ) {\r
if ( virtualNode.getNodeId().equals(virtualNodeId) ) {\r
return virtualNode;\r
* @param nodeId TODO\r
* @return TODO\r
*/\r
- protected static Node getNode(List<Node> nodes, NodeId nodeId) {\r
+ public static Node getNode(List<Node> nodes, NodeId nodeId) {\r
for ( Node node : nodes ) {\r
if ( node.getNodeId().equals(nodeId) ) {\r
return node;\r
* @param propertyName TODO\r
* @return TODO\r
*/\r
- protected static org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.connection.instance.Property getConnectionProperty(\r
+ public static org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.connection.instance.Property getConnectionProperty(\r
List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.connection.instance.Property> properties,\r
PropertyName propertyName) {\r
if ( null != properties ) {\r
* @param nodes TODO\r
* @return TODO\r
*/\r
- protected static boolean checkAllLayer2OperatingMode(List<SubNode> subNodes, List<Node> nodes) {\r
+ public static boolean checkAllLayer2OperatingMode(List<SubNode> subNodes, List<Node> nodes) {\r
if ( subNodes.isEmpty() ) {\r
return false;\r
}\r
* @param nodes TODO\r
* @return TODO\r
*/\r
- protected static boolean checkAllLayer3OperatingMode(List<SubNode> subNodes, List<Node> nodes) {\r
+ public static boolean checkAllLayer3OperatingMode(List<SubNode> subNodes, List<Node> nodes) {\r
if ( subNodes.isEmpty() ) {\r
return false;\r
}\r
* @param destVirtualNodeId TODO\r
* @return TODO\r
*/\r
- protected static VirtualLink getVirtualLink(List<VirtualLink> virtualLinks,\r
- VirtualNodeId srcVirtualNodeId,\r
- VirtualNodeId destVirtualNodeId) {\r
+ public static VirtualLink getVirtualLink(List<VirtualLink> virtualLinks,\r
+ VirtualNodeId srcVirtualNodeId,\r
+ VirtualNodeId destVirtualNodeId) {\r
for ( VirtualLink virtualLink : virtualLinks ) {\r
if ( virtualLink.getSrcNodeId().equals(srcVirtualNodeId)\r
&& virtualLink.getDestNodeId().equals(destVirtualNodeId) ) {\r
return null;\r
}\r
\r
- /**\r
- * TODO\r
- *\r
- * @param actions TODO\r
- * @param actionName TODO\r
- * @return TODO\r
- */\r
- protected static Action getAction(List<Action> actions, ActionName actionName) {\r
- for ( Action action : actions ) {\r
- if ( action.getActionName().equals(actionName) ) {\r
- return action;\r
- }\r
- }\r
-\r
- return null;\r
- }\r
-\r
- /**\r
- * TODO\r
- *\r
- * @param virtualNodes TODO\r
- * @param flow TODO\r
- * @param nodes TODO\r
- * @param intentVnMappingResults TODO\r
- * @return TODO\r
- */\r
- protected static VirtualNode getSourceVirtualRouterOfFlow(List<VirtualNode> virtualNodes,\r
- Flow flow, List<Node> nodes,\r
- List<IntentVnMappingResult> intentVnMappingResults) {\r
- MatchItemName matchItemName = new MatchItemName("src-ip");\r
- MatchItem matchItem = getMatchItem(flow.getMatchItem(), matchItemName);\r
-\r
- if ( null == matchItem ) {\r
- return null;\r
- }\r
-\r
- String matchItemValue = matchItem.getMatchItemValue().getStringValue();\r
- VirtualNode virtualNode = getVirtualRouterWithIpPrefix(virtualNodes,\r
- matchItemValue, nodes, intentVnMappingResults);\r
-\r
- return virtualNode;\r
- }\r
-\r
- /**\r
- * TODO\r
- *\r
- * @param virtualNodes TODO\r
- * @param flow TODO\r
- * @param nodes TODO\r
- * @param intentVnMappingResults TODO\r
- * @return TODO\r
- */\r
- protected static VirtualNode getDestinationVirtualRouterOfFlow(List<VirtualNode> virtualNodes,\r
- Flow flow, List<Node> nodes,\r
- List<IntentVnMappingResult> intentVnMappingResults) {\r
- MatchItemName matchItemName = new MatchItemName("dst-ip");\r
- MatchItem matchItem = getMatchItem(flow.getMatchItem(), matchItemName);\r
-\r
- if ( null == matchItem ) {\r
- return null;\r
- }\r
-\r
- String matchItemValue = matchItem.getMatchItemValue().getStringValue();\r
- VirtualNode virtualNode = getVirtualRouterWithIpPrefix(virtualNodes,\r
- matchItemValue, nodes, intentVnMappingResults);\r
-\r
- return virtualNode;\r
- }\r
-\r
- /**\r
- * TODO\r
- *\r
- * @param virtualResources TODO\r
- * @return TODO\r
- */\r
- protected static List<VirtualResource> sortVirtualResources(List<VirtualResource> virtualResources) {\r
- if ( virtualResources.isEmpty() || 1 == virtualResources.size() ) {\r
- return virtualResources;\r
- }\r
-\r
- List<VirtualResource> sortedVirtualResources = new ArrayList<VirtualResource>(virtualResources.size());\r
- sortedVirtualResources.addAll(virtualResources);\r
-\r
- for ( VirtualResource virtualResource : virtualResources ) {\r
- sortedVirtualResources.set(virtualResource.getOrder().intValue(), virtualResource);\r
- }\r
-\r
- return sortedVirtualResources;\r
- }\r
-\r
/**\r
* TODO\r
*\r
\r
return null;\r
}\r
-\r
- /**\r
- * TODO\r
- *\r
- * @param matchItems TODO\r
- * @param matchItemName TODO\r
- * @return TODO\r
- */\r
- private static MatchItem getMatchItem(List<MatchItem> matchItems, MatchItemName matchItemName) {\r
- if ( null != matchItems ) {\r
- for ( MatchItem matchItem : matchItems ) {\r
- if ( matchItem.getMatchItemName().equals(matchItemName) ) {\r
- return matchItem;\r
- }\r
- }\r
- }\r
-\r
- return null;\r
- }\r
-\r
- /**\r
- * TODO\r
- *\r
- * @param virtualNodes TODO\r
- * @param ipPrefix TODO\r
- * @param nodes TODO\r
- * @param intentVnMappingResults TODO\r
- * @return TODO\r
- */\r
- private static VirtualNode getVirtualRouterWithIpPrefix(List<VirtualNode> virtualNodes,\r
- String ipPrefix, List<Node> nodes,\r
- List<IntentVnMappingResult> intentVnMappingResults) {\r
- NodeType layer2GroupNodeType = new NodeType("l2-group");\r
- NodeType externalGroupNodeType = new NodeType("ext-group");\r
- PropertyName propertyName = new PropertyName("ip-prefix");\r
- Property property;\r
- List<StringValue> propertyValues;\r
- IntentVnMappingResult intentVnMappingResult;\r
- VirtualResource virtualResource;\r
- VirtualNodeId virtualNodeId;\r
- VirtualNode virtualNode;\r
-\r
- for ( Node node : nodes ) {\r
- if ( node.getNodeType().equals(layer2GroupNodeType)\r
- || node.getNodeType().equals(externalGroupNodeType) ) {\r
- property = getNodeProperty(node.getProperty(), propertyName);\r
-\r
- if ( null != property ) {\r
- propertyValues = property.getPropertyValues().getStringValue();\r
-\r
- if ( containPropertyValue(propertyValues, ipPrefix) ) {\r
- intentVnMappingResult = getIntentVnMappingResult(intentVnMappingResults,\r
- new IntentId(node.getNodeId().getValue()));\r
-\r
- if ( null == intentVnMappingResult ) {\r
- return null;\r
- }\r
-\r
- virtualResource = intentVnMappingResult.getVirtualResource().get(0);\r
-\r
- if ( VirtualResource.VirtualResourceType.Vport\r
- == virtualResource.getVirtualResourceType() ) {\r
- virtualNodeId = new VirtualNodeId(\r
- virtualResource.getParentVirtualResourceEntityId().getValue());\r
- } else if ( VirtualResource.VirtualResourceType.Vnode\r
- == virtualResource.getVirtualResourceType() ) {\r
- virtualNodeId = new VirtualNodeId(\r
- virtualResource.getVirtualResourceEntityId().getValue());\r
- } else {\r
- return null;\r
- }\r
-\r
- virtualNode = getVirtualNode(virtualNodes, virtualNodeId);\r
-\r
- if ( null == virtualNode ) {\r
- return null;\r
- }\r
-\r
- if ( VirtualNode.NodeType.Vrouter == virtualNode.getNodeType() ) {\r
- return virtualNode;\r
- }\r
- }\r
- }\r
- }\r
- }\r
-\r
- return null;\r
- }\r
-\r
- /**\r
- * TODO\r
- *\r
- * @param propertyValues TODO\r
- * @param propertyValue TODO\r
- * @return TODO\r
- */\r
- private static boolean containPropertyValue(List<StringValue> propertyValues, String propertyValue) {\r
- for ( StringValue stringValue : propertyValues ) {\r
- if ( stringValue.getValue().equals(propertyValue) ) {\r
- return true;\r
- }\r
- }\r
-\r
- return false;\r
- }\r
}\r
package org.opendaylight.nemo.intent;\r
\r
import org.opendaylight.controller.md.sal.binding.api.DataBroker;\r
+import org.opendaylight.nemo.intent.action.ActionResolver;\r
+import org.opendaylight.nemo.intent.computation.VNComputationUnit;\r
+import org.opendaylight.nemo.intent.condition.ConditionDeterminer;\r
+import org.opendaylight.nemo.intent.condition.ConditionManager;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.VirtualNetwork;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.links.VirtualLink;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.links.VirtualLinkBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.nodes.VirtualNode;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.paths.VirtualPath;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.paths.VirtualPathBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.node.instance.VirtualPort;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.node.instance.VirtualPortBuilder;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.intent.vn.mapping.results.UserIntentVnMapping;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.intent.vn.mapping.results.user.intent.vn.mapping.IntentVnMappingResult;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.intent.vn.mapping.results.user.intent.vn.mapping.IntentVnMappingResultBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.intent.vn.mapping.results.user.intent.vn.mapping.intent.vn.mapping.result.VirtualResource;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.intent.vn.mapping.results.user.intent.vn.mapping.intent.vn.mapping.result.VirtualResourceBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.ActionName;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.IntentId;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.NodeId;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.NodeType;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.*;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.UserId;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Connection;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Flow;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Node;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.operations.Operation;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.users.User;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.StringValue;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.condition.instance.ConditionSegment;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.operation.instance.Action;\r
import org.opendaylight.yangtools.yang.binding.DataObject;\r
import org.slf4j.Logger;\r
import org.slf4j.LoggerFactory;\r
\r
-import java.util.ArrayList;\r
import java.util.LinkedList;\r
import java.util.List;\r
-import java.util.UUID;\r
+import java.util.Map;\r
\r
/**\r
* Resolve the user's operation intent that might act on the node, connection\r
\r
private final DataBroker dataBroker;\r
\r
+ /**\r
+ * The condition manager to resolve and manage the condition in the operation.\r
+ */\r
+ private ConditionManager conditionManager;\r
+\r
/**\r
* The action resolver to resolve actions in the operation.\r
*/\r
private ActionResolver actionResolver;\r
\r
- public OperationResolver(DataBroker dataBroker) {\r
+ public OperationResolver(DataBroker dataBroker, ConditionManager conditionManager,\r
+ Map<UserId, VNComputationUnit> vnComputationUnits) {\r
super();\r
\r
this.dataBroker = dataBroker;\r
\r
- actionResolver = new ActionResolver();\r
+ this.conditionManager = conditionManager;\r
+ actionResolver = new ActionResolver(dataBroker, vnComputationUnits);\r
\r
LOG.debug("Initialized the renderer common operation resolver.");\r
\r
\r
List<ConditionSegment> conditionSegments = operation.getConditionSegment();\r
\r
- if ( null != conditionSegments && !conditionSegments.isEmpty() ) {\r
- // TODO\r
+ if ( !ConditionDeterminer.isConditionMet(conditionSegments) ) {\r
+ conditionManager.handleOperation(user.getUserId(), operation);\r
\r
return;\r
}\r
return;\r
}\r
\r
- /**\r
- * Perform the monitoring for the operation that contains a condition\r
- * which determines when to execute the operation.\r
- *\r
- * @author Zhigang Ji\r
- */\r
- private class ConditionMonitor {\r
- // TODO\r
- }\r
-\r
- /**\r
- * Resolve the actions included in the operation and decide how to\r
- * implement them on the physical network.\r
- *\r
- * @author Zhigang Ji\r
- */\r
- private class ActionResolver {\r
- /**\r
- * TODO\r
- *\r
- * @param user TODO\r
- * @param operation TODO\r
- * @param node TODO\r
- * @param virtualNetwork TODO\r
- * @param userIntentVnMapping TODO\r
- */\r
- protected void resolveActions(User user, Operation operation, Node node,\r
- VirtualNetwork virtualNetwork,\r
- UserIntentVnMapping userIntentVnMapping)\r
- throws IntentResolutionException {\r
- // TODO\r
-\r
- return;\r
- }\r
-\r
- /**\r
- * TODO\r
- *\r
- * @param user TODO\r
- * @param operation TODO\r
- * @param connection TODO\r
- * @param virtualNetwork TODO\r
- * @param userIntentVnMapping TODO\r
- */\r
- protected void resolveActions(User user, Operation operation, Connection connection,\r
- VirtualNetwork virtualNetwork,\r
- UserIntentVnMapping userIntentVnMapping)\r
- throws IntentResolutionException {\r
- // TODO\r
-\r
- return;\r
- }\r
-\r
- /**\r
- * TODO\r
- *\r
- * @param user TODO\r
- * @param operation TODO\r
- * @param flow TODO\r
- * @param virtualNetwork TODO\r
- * @param userIntentVnMapping TODO\r
- */\r
- protected void resolveActions(User user, Operation operation, Flow flow,\r
- VirtualNetwork virtualNetwork,\r
- UserIntentVnMapping userIntentVnMapping)\r
- throws IntentResolutionException {\r
- List<Action> actions = operation.getAction();\r
-\r
- ActionName actionName = new ActionName("go-through");\r
- Action goThroughAction = IntentResolverUtils.getAction(actions, actionName);\r
-\r
- if ( null != goThroughAction ) {\r
- resolveGoThroughAction(user, operation, flow, goThroughAction,\r
- virtualNetwork, userIntentVnMapping);\r
-\r
- return;\r
- }\r
-\r
- throw new IntentResolutionException("Unsupported action combination.");\r
-\r
-// return;\r
- }\r
- }\r
-\r
/**\r
* TODO\r
*\r
* @param user TODO\r
- * @param operation TODO\r
- * @param flow TODO\r
- * @param goThroughAction TODO\r
- * @param virtualNetwork TODO\r
- * @param userIntentVnMapping TODO\r
+ * @param operations TODO\r
+ * @param operationsApplyingToNode TODO\r
+ * @param operationsApplyingToConnection TODO\r
+ * @param operationsApplyingToFlow TODO\r
+ * @throws IntentResolutionException\r
*/\r
- private void resolveGoThroughAction(User user, Operation operation, Flow flow,\r
- Action goThroughAction,\r
- VirtualNetwork virtualNetwork,\r
- UserIntentVnMapping userIntentVnMapping)\r
+ protected void classifyOperations(User user, List<Operation> operations,\r
+ List<Operation> operationsApplyingToNode,\r
+ List<Operation> operationsApplyingToConnection,\r
+ List<Operation> operationsApplyingToFlow)\r
throws IntentResolutionException {\r
- List<StringValue> parameterValues = goThroughAction.getParameterValues().getStringValue();\r
-\r
- if ( !parameterValues.isEmpty() ) {\r
- List<Node> nodes = user.getObjects().getNode();\r
-\r
- if ( null == nodes || nodes.isEmpty() ) {\r
- throw new IntentResolutionException("The nodes specified by the action parameters " +\r
- "of the operation " + operation.getOperationId().getValue() + " does not exist.");\r
- }\r
+ DataObject dataObject;\r
\r
- NodeId nodeId = new NodeId(parameterValues.get(0).getValue());\r
- Node node = IntentResolverUtils.getNode(nodes, nodeId);\r
+ for ( Operation operation : operations ) {\r
+ dataObject = IntentResolverUtils\r
+ .getObject(user.getObjects(), operation.getTargetObject());\r
\r
- if ( null == node ) {\r
- throw new IntentResolutionException("The node " + nodeId.getValue() + " specified by the" +\r
- " action parameter of the operation " + operation.getOperationId().getValue() +\r
- " does not exist.");\r
+ if ( null == dataObject ) {\r
+ throw new IntentResolutionException("The target object of the operation " +\r
+ operation.getOperationId().getValue() + " does not exist.");\r
}\r
\r
- List<VirtualNode> virtualNodes = virtualNetwork.getVirtualNodes().getVirtualNode();\r
- List<VirtualLink> virtualLinks = virtualNetwork.getVirtualLinks().getVirtualLink();\r
- List<VirtualPath> virtualPaths = virtualNetwork.getVirtualPaths().getVirtualPath();\r
- List<IntentVnMappingResult> intentVnMappingResults = userIntentVnMapping.getIntentVnMappingResult();\r
- List<VirtualResource> virtualResources = null;\r
-\r
- if ( node.getNodeType().equals(new NodeType("chain-group")) ) {\r
- if ( IntentResolverUtils.checkAllLayer2OperatingMode(node.getSubNode(), nodes) ) {\r
- // TODO\r
- } else if ( IntentResolverUtils.checkAllLayer3OperatingMode(node.getSubNode(), nodes) ) {\r
- IntentVnMappingResult intentVnMappingResult = IntentResolverUtils.getIntentVnMappingResult(\r
- intentVnMappingResults, new IntentId(node.getNodeId().getValue()));\r
-\r
- if ( null == intentVnMappingResult ) {\r
- throw new IntentResolutionException("Can not get the intent-vn mapping result " +\r
- "for the node " + node.getNodeId().getValue() + ".");\r
- }\r
-\r
- VirtualNode sourceVirtualNode = IntentResolverUtils.getSourceVirtualRouterOfFlow(\r
- virtualNodes, flow, nodes, intentVnMappingResults);\r
-\r
- if ( null == sourceVirtualNode ) {\r
- throw new IntentResolutionException("Can not get the source virtual node " +\r
- "of the flow " + flow.getFlowId().getValue() + ".");\r
- }\r
-\r
- VirtualNode destinationVirtualNode = IntentResolverUtils.getDestinationVirtualRouterOfFlow(\r
- virtualNodes, flow, nodes, intentVnMappingResults);\r
-\r
- if ( null == destinationVirtualNode ) {\r
- throw new IntentResolutionException("Can not get the destination virtual node " +\r
- "of the flow " + flow.getFlowId().getValue() + ".");\r
- }\r
-\r
- List<VirtualResource> virtualResources1 = IntentResolverUtils\r
- .sortVirtualResources(intentVnMappingResult.getVirtualResource());\r
-\r
- VirtualNodeId virtualNodeId = new VirtualNodeId(virtualResources1.get(0)\r
- .getParentVirtualResourceEntityId().getValue());\r
- VirtualNode virtualNode = IntentResolverUtils.getVirtualNode(virtualNodes, virtualNodeId);\r
-\r
- if ( null == virtualNode ) {\r
- throw new IntentResolutionException("Can not get the virtual node" +\r
- " created for the first sub-node of the node " +\r
- intentVnMappingResult.getIntentId().getValue() + ".");\r
- }\r
-\r
- virtualNodeId = new VirtualNodeId(virtualResources1.get(virtualResources1.size() - 1)\r
- .getParentVirtualResourceEntityId().getValue());\r
- VirtualNode virtualNode1 = IntentResolverUtils.getVirtualNode(virtualNodes, virtualNodeId);\r
-\r
- if ( null == virtualNode1 ) {\r
- throw new IntentResolutionException("Can not get the virtual node" +\r
- " created for the last sub-node of the node " +\r
- intentVnMappingResult.getIntentId().getValue() + ".");\r
- }\r
-\r
- virtualResources = new ArrayList<VirtualResource>(virtualResources1.size() + 2);\r
- VirtualLink virtualLink = IntentResolverUtils.getVirtualLink(virtualLinks,\r
- sourceVirtualNode.getNodeId(), virtualNode.getNodeId());\r
-\r
- if ( null == virtualLink ) {\r
- VirtualPort virtualPort = new VirtualPortBuilder()\r
- .setPortId(new VirtualPortId(UUID.randomUUID().toString()))\r
- .setPortType(VirtualPort.PortType.Internal)\r
- .build();\r
- sourceVirtualNode.getVirtualPort().add(virtualPort);\r
-\r
- VirtualPort virtualPort1 = new VirtualPortBuilder()\r
- .setPortId(new VirtualPortId(UUID.randomUUID().toString()))\r
- .setPortType(VirtualPort.PortType.Internal)\r
- .build();\r
- virtualNode.getVirtualPort().add(virtualPort1);\r
-\r
- virtualLink = new VirtualLinkBuilder()\r
- .setLinkId(new VirtualLinkId(UUID.randomUUID().toString()))\r
- .setSrcNodeId(virtualNode.getNodeId())\r
- .setSrcPortId(virtualPort1.getPortId())\r
- .setDestNodeId(sourceVirtualNode.getNodeId())\r
- .setDestPortId(virtualPort.getPortId())\r
- .setBandwidth(0L)\r
- .build();\r
- virtualLinks.add(virtualLink);\r
-\r
- virtualLink = new VirtualLinkBuilder()\r
- .setLinkId(new VirtualLinkId(UUID.randomUUID().toString()))\r
- .setSrcNodeId(sourceVirtualNode.getNodeId())\r
- .setSrcPortId(virtualPort.getPortId())\r
- .setDestNodeId(virtualNode.getNodeId())\r
- .setDestPortId(virtualPort1.getPortId())\r
- .setBandwidth(0L)\r
- .build();\r
- virtualLinks.add(virtualLink);\r
- }\r
-\r
- List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.path.instance.VirtualLink> virtualLinks1 =\r
- new ArrayList<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.path.instance.VirtualLink>(1);\r
- org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.path.instance.VirtualLink virtualLink1 =\r
- new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.path.instance.VirtualLinkBuilder()\r
- .setLinkId(virtualLink.getLinkId())\r
- .setOrder(0L)\r
- .build();\r
- virtualLinks1.add(virtualLink1);\r
-\r
- VirtualPath virtualPath = new VirtualPathBuilder()\r
- .setPathId(new VirtualPathId(UUID.randomUUID().toString()))\r
- .setVirtualLink(virtualLinks1)\r
- .setBandwidth(0L)\r
- .build();\r
- virtualPaths.add(virtualPath);\r
-\r
- VirtualResource virtualResource = new VirtualResourceBuilder()\r
- .setVirtualResourceId(new VirtualResourceId(UUID.randomUUID().toString()))\r
- .setVirtualResourceType(VirtualResource.VirtualResourceType.Vpath)\r
- .setVirtualResourceEntityId(new VirtualResourceEntityId(virtualPath.getPathId().getValue()))\r
- .setOrder(0L)\r
- .build();\r
- virtualResources.add(virtualResource);\r
-\r
- for ( VirtualResource virtualResource1 : virtualResources1 ) {\r
- virtualResource = new VirtualResourceBuilder(virtualResource1)\r
- .setVirtualResourceId(new VirtualResourceId(UUID.randomUUID().toString()))\r
- .setOrder((long)virtualResources.size())\r
- .build();\r
- virtualResources.add(virtualResource);\r
- }\r
-\r
- virtualLink = IntentResolverUtils.getVirtualLink(virtualLinks,\r
- virtualNode1.getNodeId(), destinationVirtualNode.getNodeId());\r
-\r
- if ( null == virtualLink ) {\r
- VirtualPort virtualPort = new VirtualPortBuilder()\r
- .setPortId(new VirtualPortId(UUID.randomUUID().toString()))\r
- .setPortType(VirtualPort.PortType.Internal)\r
- .build();\r
- virtualNode1.getVirtualPort().add(virtualPort);\r
-\r
- VirtualPort virtualPort1 = new VirtualPortBuilder()\r
- .setPortId(new VirtualPortId(UUID.randomUUID().toString()))\r
- .setPortType(VirtualPort.PortType.Internal)\r
- .build();\r
- destinationVirtualNode.getVirtualPort().add(virtualPort1);\r
-\r
- virtualLink = new VirtualLinkBuilder()\r
- .setLinkId(new VirtualLinkId(UUID.randomUUID().toString()))\r
- .setSrcNodeId(destinationVirtualNode.getNodeId())\r
- .setSrcPortId(virtualPort1.getPortId())\r
- .setDestNodeId(virtualNode1.getNodeId())\r
- .setDestPortId(virtualPort.getPortId())\r
- .setBandwidth(0L)\r
- .build();\r
- virtualLinks.add(virtualLink);\r
-\r
- virtualLink = new VirtualLinkBuilder()\r
- .setLinkId(new VirtualLinkId(UUID.randomUUID().toString()))\r
- .setSrcNodeId(virtualNode1.getNodeId())\r
- .setSrcPortId(virtualPort.getPortId())\r
- .setDestNodeId(destinationVirtualNode.getNodeId())\r
- .setDestPortId(virtualPort1.getPortId())\r
- .setBandwidth(0L)\r
- .build();\r
- virtualLinks.add(virtualLink);\r
- }\r
-\r
- virtualLinks1 = new ArrayList<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.path.instance.VirtualLink>(1);\r
- virtualLink1 = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.path.instance.VirtualLinkBuilder()\r
- .setLinkId(virtualLink.getLinkId())\r
- .setOrder(0L)\r
- .build();\r
- virtualLinks1.add(virtualLink1);\r
-\r
- virtualPath = new VirtualPathBuilder()\r
- .setPathId(new VirtualPathId(UUID.randomUUID().toString()))\r
- .setVirtualLink(virtualLinks1)\r
- .setBandwidth(0L)\r
- .build();\r
- virtualPaths.add(virtualPath);\r
-\r
- virtualResource = new VirtualResourceBuilder()\r
- .setVirtualResourceId(new VirtualResourceId(UUID.randomUUID().toString()))\r
- .setVirtualResourceType(VirtualResource.VirtualResourceType.Vpath)\r
- .setVirtualResourceEntityId(new VirtualResourceEntityId(virtualPath.getPathId().getValue()))\r
- .setOrder((long) virtualResources.size())\r
- .build();\r
- virtualResources.add(virtualResource);\r
- } else {\r
- // TODO\r
- }\r
+ if ( dataObject instanceof Node ) {\r
+ operationsApplyingToNode.add(operation);\r
+ } else if ( dataObject instanceof Connection ) {\r
+ operationsApplyingToConnection.add(operation);\r
} else {\r
- // TODO\r
+ operationsApplyingToFlow.add(operation);\r
}\r
-\r
- IntentVnMappingResult intentVnMappingResult = new IntentVnMappingResultBuilder()\r
- .setIntentId(new IntentId(operation.getOperationId().getValue()))\r
- .setIntentType(IntentVnMappingResult.IntentType.Operation)\r
- .setVirtualResource(virtualResources)\r
- .build();\r
-\r
- intentVnMappingResults.add(intentVnMappingResult);\r
}\r
\r
return;\r
--- /dev/null
+/*\r
+ * Copyright (c) 2015 Huawei, Inc. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.nemo.intent.action;\r
+\r
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;\r
+import org.opendaylight.nemo.intent.IntentResolutionException;\r
+import org.opendaylight.nemo.intent.IntentResolverUtils;\r
+import org.opendaylight.nemo.intent.computation.VNComputationUnit;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.VirtualNetwork;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.links.VirtualLink;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.links.VirtualLinkBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.nodes.VirtualNode;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.paths.VirtualPath;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.paths.VirtualPathBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.node.instance.VirtualPort;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.node.instance.VirtualPortBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.intent.vn.mapping.results.UserIntentVnMapping;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.intent.vn.mapping.results.user.intent.vn.mapping.IntentVnMappingResult;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.intent.vn.mapping.results.user.intent.vn.mapping.IntentVnMappingResultBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.intent.vn.mapping.results.user.intent.vn.mapping.intent.vn.mapping.result.VirtualResource;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.intent.vn.mapping.results.user.intent.vn.mapping.intent.vn.mapping.result.VirtualResourceBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.*;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.*;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Connection;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Flow;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Node;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.operations.Operation;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.users.User;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.connection.instance.Property;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.IntValue;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.StringValue;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.operation.instance.Action;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+\r
+import java.util.*;\r
+\r
+/**\r
+ * Resolve the actions included in the operation and decide how to\r
+ * implement them on the physical network.\r
+ *\r
+ * @author Zhigang Ji\r
+ */\r
+public class ActionResolver {\r
+ private static final Logger LOG = LoggerFactory.getLogger(ActionResolver.class);\r
+\r
+ private final DataBroker dataBroker;\r
+\r
+ /**\r
+ * The virtual network computation unit for all users.\r
+ */\r
+ private Map<UserId, VNComputationUnit> vnComputationUnits;\r
+\r
+ public ActionResolver(DataBroker dataBroker, Map<UserId, VNComputationUnit> vnComputationUnits) {\r
+ super();\r
+\r
+ this.dataBroker = dataBroker;\r
+ this.vnComputationUnits = vnComputationUnits;\r
+\r
+ LOG.debug("Initialized the renderer common action resolver.");\r
+\r
+ return;\r
+ }\r
+\r
+ /**\r
+ * TODO\r
+ *\r
+ * @param user TODO\r
+ * @param operation TODO\r
+ * @param node TODO\r
+ * @param virtualNetwork TODO\r
+ * @param userIntentVnMapping TODO\r
+ * @throws IntentResolutionException\r
+ */\r
+ public void resolveActions(User user, Operation operation, Node node,\r
+ VirtualNetwork virtualNetwork,\r
+ UserIntentVnMapping userIntentVnMapping)\r
+ throws IntentResolutionException {\r
+ // TODO\r
+\r
+ return;\r
+ }\r
+\r
+ /**\r
+ * TODO\r
+ *\r
+ * @param user TODO\r
+ * @param operation TODO\r
+ * @param connection TODO\r
+ * @param virtualNetwork TODO\r
+ * @param userIntentVnMapping TODO\r
+ * @throws IntentResolutionException\r
+ */\r
+ public void resolveActions(User user, Operation operation, Connection connection,\r
+ VirtualNetwork virtualNetwork,\r
+ UserIntentVnMapping userIntentVnMapping)\r
+ throws IntentResolutionException {\r
+ List<Action> actions = operation.getAction();\r
+\r
+ ActionName actionName = new ActionName("qos-bandwidth");\r
+ Action qosBandwidthAction = ActionResolverUtils.getAction(actions, actionName);\r
+\r
+ if ( null != qosBandwidthAction ) {\r
+ resolveQosBandwidthAction(user, operation, connection, qosBandwidthAction,\r
+ virtualNetwork, userIntentVnMapping);\r
+\r
+ return;\r
+ }\r
+\r
+ return;\r
+ }\r
+\r
+ /**\r
+ * TODO\r
+ *\r
+ * @param user TODO\r
+ * @param operation TODO\r
+ * @param flow TODO\r
+ * @param virtualNetwork TODO\r
+ * @param userIntentVnMapping TODO\r
+ * @throws IntentResolutionException\r
+ */\r
+ public void resolveActions(User user, Operation operation, Flow flow,\r
+ VirtualNetwork virtualNetwork,\r
+ UserIntentVnMapping userIntentVnMapping)\r
+ throws IntentResolutionException {\r
+ List<Action> actions = operation.getAction();\r
+\r
+ ActionName actionName = new ActionName("deny");\r
+ Action denyAction = ActionResolverUtils.getAction(actions, actionName);\r
+\r
+ if ( null != denyAction ) {\r
+ resolveDenyAction(user, operation, flow, denyAction,\r
+ virtualNetwork, userIntentVnMapping);\r
+\r
+ return;\r
+ }\r
+\r
+ actionName = new ActionName("allow");\r
+ Action allowAction = ActionResolverUtils.getAction(actions, actionName);\r
+\r
+ if ( null != allowAction ) {\r
+ resolveAllowAction(user, operation, flow, allowAction,\r
+ virtualNetwork, userIntentVnMapping);\r
+\r
+ return;\r
+ }\r
+\r
+ actionName = new ActionName("go-through");\r
+ Action goThroughAction = ActionResolverUtils.getAction(actions, actionName);\r
+\r
+ if ( null != goThroughAction ) {\r
+ resolveGoThroughAction(user, operation, flow, goThroughAction,\r
+ virtualNetwork, userIntentVnMapping);\r
+\r
+ return;\r
+ }\r
+\r
+ throw new IntentResolutionException("Unsupported action combination.");\r
+\r
+// return;\r
+ }\r
+\r
+ /**\r
+ * TODO\r
+ *\r
+ * @param user TODO\r
+ * @param operation TODO\r
+ * @param connection TODO\r
+ * @param qosBandwidthAction TODO\r
+ * @param virtualNetwork TODO\r
+ * @param userIntentVnMapping TODO\r
+ * @throws IntentResolutionException\r
+ */\r
+ private void resolveQosBandwidthAction(User user, Operation operation, Connection connection,\r
+ Action qosBandwidthAction,\r
+ VirtualNetwork virtualNetwork,\r
+ UserIntentVnMapping userIntentVnMapping)\r
+ throws IntentResolutionException {\r
+ List<IntValue> parameterValues = qosBandwidthAction.getParameterValues().getIntValue();\r
+\r
+ if ( parameterValues.isEmpty() ) {\r
+ return;\r
+ }\r
+\r
+ IntValue parameterValue = parameterValues.get(0);\r
+ long requiredBandwidth = parameterValue.getValue();\r
+\r
+ PropertyName propertyName = new PropertyName("bandwidth");\r
+ Property property = IntentResolverUtils\r
+ .getConnectionProperty(connection.getProperty(), propertyName);\r
+ long currentBandwidth;\r
+\r
+ if ( null == property ) {\r
+ currentBandwidth = 0;\r
+ } else {\r
+ currentBandwidth = property.getPropertyValues().getIntValue().get(0).getValue();\r
+ }\r
+\r
+ if ( currentBandwidth == requiredBandwidth ) {\r
+ return;\r
+ }\r
+\r
+ List<IntentVnMappingResult> intentVnMappingResults = userIntentVnMapping.getIntentVnMappingResult();\r
+ IntentVnMappingResult intentVnMappingResult = IntentResolverUtils\r
+ .getIntentVnMappingResult(intentVnMappingResults, new IntentId(connection.getConnectionId()));\r
+\r
+ if ( null == intentVnMappingResult ) {\r
+ throw new IntentResolutionException("Can not get the intent-vn mapping result for " +\r
+ "the connection " + connection.getConnectionId().getValue() + ".");\r
+ }\r
+\r
+ List<VirtualResource> virtualResources = intentVnMappingResult.getVirtualResource();\r
+ List<VirtualLink> virtualLinks = virtualNetwork.getVirtualLinks().getVirtualLink();\r
+ VirtualLinkId virtualLinkId;\r
+\r
+ for ( VirtualResource virtualResource : virtualResources ) {\r
+ virtualLinkId = new VirtualLinkId(virtualResource.getVirtualResourceEntityId().getValue());\r
+\r
+ ActionResolverUtils.modifyVirtualLinkBandwidth(virtualLinks, virtualLinkId, requiredBandwidth);\r
+ }\r
+\r
+ return;\r
+ }\r
+\r
+ /**\r
+ * TODO\r
+ *\r
+ * @param user TODO\r
+ * @param operation TODO\r
+ * @param flow TODO\r
+ * @param denyAction TODO\r
+ * @param virtualNetwork TODO\r
+ * @param userIntentVnMapping TODO\r
+ * @throws IntentResolutionException\r
+ */\r
+ private void resolveDenyAction(User user, Operation operation, Flow flow,\r
+ Action denyAction,\r
+ VirtualNetwork virtualNetwork,\r
+ UserIntentVnMapping userIntentVnMapping)\r
+ throws IntentResolutionException {\r
+ List<Node> nodes = user.getObjects().getNode();\r
+ List<VirtualNode> virtualNodes = virtualNetwork.getVirtualNodes().getVirtualNode();\r
+ List<IntentVnMappingResult> intentVnMappingResults = userIntentVnMapping.getIntentVnMappingResult();\r
+\r
+ VirtualNode virtualNode = ActionResolverUtils\r
+ .getSourceVirtualRouterOfFlow(virtualNodes, flow, nodes, intentVnMappingResults);\r
+\r
+ if ( null == virtualNode ) {\r
+ throw new IntentResolutionException("Can not get the source virtual node " +\r
+ "of the flow " + flow.getFlowId().getValue() + ".");\r
+ }\r
+\r
+ List<VirtualResource> virtualResources = new ArrayList<VirtualResource>(1);\r
+\r
+ VirtualResource virtualResource = new VirtualResourceBuilder()\r
+ .setVirtualResourceId(new VirtualResourceId(UUID.randomUUID().toString()))\r
+ .setVirtualResourceType(VirtualResource.VirtualResourceType.Vnode)\r
+ .setVirtualResourceEntityId(new VirtualResourceEntityId(virtualNode.getNodeId().getValue()))\r
+ .setOrder(0L)\r
+ .build();\r
+ virtualResources.add(virtualResource);\r
+\r
+ IntentVnMappingResult intentVnMappingResult = new IntentVnMappingResultBuilder()\r
+ .setIntentId(new IntentId(operation.getOperationId().getValue()))\r
+ .setIntentType(IntentVnMappingResult.IntentType.Operation)\r
+ .setVirtualResource(virtualResources)\r
+ .build();\r
+ intentVnMappingResults.add(intentVnMappingResult);\r
+\r
+ return;\r
+ }\r
+\r
+ /**\r
+ * TODO\r
+ *\r
+ * @param user TODO\r
+ * @param operation TODO\r
+ * @param flow TODO\r
+ * @param allowAction TODO\r
+ * @param virtualNetwork TODO\r
+ * @param userIntentVnMapping TODO\r
+ * @throws IntentResolutionException\r
+ */\r
+ private void resolveAllowAction(User user, Operation operation, Flow flow,\r
+ Action allowAction,\r
+ VirtualNetwork virtualNetwork,\r
+ UserIntentVnMapping userIntentVnMapping)\r
+ throws IntentResolutionException {\r
+ List<Node> nodes = user.getObjects().getNode();\r
+ List<VirtualNode> virtualNodes = virtualNetwork.getVirtualNodes().getVirtualNode();\r
+ List<IntentVnMappingResult> intentVnMappingResults = userIntentVnMapping.getIntentVnMappingResult();\r
+\r
+ VirtualNode sourceVirtualNode = ActionResolverUtils\r
+ .getSourceVirtualRouterOfFlow(virtualNodes, flow, nodes, intentVnMappingResults);\r
+\r
+ if ( null == sourceVirtualNode ) {\r
+ throw new IntentResolutionException("Can not get the source virtual node " +\r
+ "of the flow " + flow.getFlowId().getValue() + ".");\r
+ }\r
+\r
+ VirtualNode destinationVirtualNode = ActionResolverUtils\r
+ .getDestinationVirtualRouterOfFlow(virtualNodes, flow, nodes, intentVnMappingResults);\r
+\r
+ if ( null == destinationVirtualNode ) {\r
+ throw new IntentResolutionException("Can not get the destination virtual node " +\r
+ "of the flow " + flow.getFlowId().getValue() + ".");\r
+ }\r
+\r
+ VNComputationUnit vnComputationUnit = vnComputationUnits.get(user.getUserId());\r
+\r
+ if ( null == vnComputationUnit ) {\r
+ throw new IntentResolutionException("Can not get the virtual network computation " +\r
+ "unit for the user " + user.getUserId().getValue() + ".");\r
+ }\r
+\r
+ VirtualPath virtualPath = vnComputationUnit\r
+ .computePath(sourceVirtualNode.getNodeId(), destinationVirtualNode.getNodeId());\r
+\r
+ if ( null == virtualPath || virtualPath.getVirtualLink().isEmpty() ) {\r
+ throw new IntentResolutionException("Can not compute an available virtual path in " +\r
+ "the virtual network for the flow " + flow.getFlowId().getValue() + ".");\r
+ }\r
+\r
+ virtualNetwork.getVirtualPaths().getVirtualPath().add(virtualPath);\r
+\r
+ List<VirtualResource> virtualResources = new ArrayList<VirtualResource>(1);\r
+\r
+ VirtualResource virtualResource = new VirtualResourceBuilder()\r
+ .setVirtualResourceId(new VirtualResourceId(UUID.randomUUID().toString()))\r
+ .setVirtualResourceType(VirtualResource.VirtualResourceType.Vpath)\r
+ .setVirtualResourceEntityId(new VirtualResourceEntityId(virtualPath.getPathId().getValue()))\r
+ .setOrder(0L)\r
+ .build();\r
+ virtualResources.add(virtualResource);\r
+\r
+ IntentVnMappingResult intentVnMappingResult = new IntentVnMappingResultBuilder()\r
+ .setIntentId(new IntentId(operation.getOperationId().getValue()))\r
+ .setIntentType(IntentVnMappingResult.IntentType.Operation)\r
+ .setVirtualResource(virtualResources)\r
+ .build();\r
+ intentVnMappingResults.add(intentVnMappingResult);\r
+\r
+ return;\r
+ }\r
+\r
+ /**\r
+ * TODO\r
+ *\r
+ * @param user TODO\r
+ * @param operation TODO\r
+ * @param flow TODO\r
+ * @param goThroughAction TODO\r
+ * @param virtualNetwork TODO\r
+ * @param userIntentVnMapping TODO\r
+ * @throws IntentResolutionException\r
+ */\r
+ private void resolveGoThroughAction(User user, Operation operation, Flow flow,\r
+ Action goThroughAction,\r
+ VirtualNetwork virtualNetwork,\r
+ UserIntentVnMapping userIntentVnMapping)\r
+ throws IntentResolutionException {\r
+ List<StringValue> parameterValues = goThroughAction.getParameterValues().getStringValue();\r
+\r
+ if ( !parameterValues.isEmpty() ) {\r
+ List<Node> nodes = user.getObjects().getNode();\r
+\r
+ if ( null == nodes || nodes.isEmpty() ) {\r
+ throw new IntentResolutionException("The nodes specified by the action parameters " +\r
+ "of the operation " + operation.getOperationId().getValue() + " does not exist.");\r
+ }\r
+\r
+ NodeId nodeId = new NodeId(parameterValues.get(0).getValue());\r
+ Node node = IntentResolverUtils.getNode(nodes, nodeId);\r
+\r
+ if ( null == node ) {\r
+ throw new IntentResolutionException("The node " + nodeId.getValue() + " specified by the" +\r
+ " action parameter of the operation " + operation.getOperationId().getValue() +\r
+ " does not exist.");\r
+ }\r
+\r
+ if ( node.getNodeType().equals(new NodeType("chain-group")) ) {\r
+ resolveGoThroughChainGroupAction(user, operation, flow, goThroughAction, node,\r
+ virtualNetwork, userIntentVnMapping);\r
+ } else {\r
+ resolveGoThroughNormalGroupAction(user, operation, flow, goThroughAction,\r
+ virtualNetwork, userIntentVnMapping);\r
+ }\r
+ }\r
+\r
+ return;\r
+ }\r
+\r
+ /**\r
+ * TODO\r
+ *\r
+ * @param user TODO\r
+ * @param operation TODO\r
+ * @param flow TODO\r
+ * @param goThroughAction TODO\r
+ * @param virtualNetwork TODO\r
+ * @param userIntentVnMapping TODO\r
+ * @throws IntentResolutionException\r
+ */\r
+ private void resolveGoThroughNormalGroupAction(User user, Operation operation, Flow flow,\r
+ Action goThroughAction,\r
+ VirtualNetwork virtualNetwork,\r
+ UserIntentVnMapping userIntentVnMapping)\r
+ throws IntentResolutionException {\r
+ List<Node> nodes = user.getObjects().getNode();\r
+ List<StringValue> parameterValues = goThroughAction.getParameterValues().getStringValue();\r
+ NodeId nodeId;\r
+ Node node;\r
+\r
+ for ( StringValue parameterValue : parameterValues ) {\r
+ nodeId = new NodeId(parameterValue.getValue());\r
+ node = IntentResolverUtils.getNode(nodes, nodeId);\r
+\r
+ if ( null == node ) {\r
+ throw new IntentResolutionException("The node " + nodeId.getValue() + " specified by the" +\r
+ " action parameter of the operation " + operation.getOperationId().getValue() +\r
+ " does not exist.");\r
+ }\r
+ }\r
+\r
+ List<VirtualNode> virtualNodes = virtualNetwork.getVirtualNodes().getVirtualNode();\r
+ List<IntentVnMappingResult> intentVnMappingResults = userIntentVnMapping.getIntentVnMappingResult();\r
+ parameterValues = ActionResolverUtils.sortParameterValues(parameterValues);\r
+\r
+ List<VirtualNode> virtualNodes1 = new ArrayList<VirtualNode>(parameterValues.size());\r
+ IntentVnMappingResult intentVnMappingResult;\r
+ List<VirtualResource> virtualResources;\r
+ VirtualResource virtualResource;\r
+ VirtualNodeId virtualNodeId;\r
+ VirtualNode virtualNode;\r
+\r
+ for ( StringValue parameterValue : parameterValues ) {\r
+ intentVnMappingResult = IntentResolverUtils.getIntentVnMappingResult(\r
+ intentVnMappingResults, new IntentId(parameterValue.getValue()));\r
+\r
+ if ( null == intentVnMappingResult ) {\r
+ throw new IntentResolutionException("Can not get the intent-vn mapping result " +\r
+ "for the node " + parameterValue.getValue() + ".");\r
+ }\r
+\r
+ virtualResources = intentVnMappingResult.getVirtualResource();\r
+\r
+ if ( 1 != virtualResources.size() ) {\r
+ throw new IntentResolutionException("The type of the node " + parameterValue.getValue() +\r
+ " specified by the action parameter of the operation " +\r
+ operation.getOperationId().getValue() + " is not required," +\r
+ " according to the intent-vn mapping result.");\r
+ }\r
+\r
+ virtualResource = virtualResources.get(0);\r
+\r
+ if ( VirtualResource.VirtualResourceType.Vport\r
+ == virtualResource.getVirtualResourceType() ) {\r
+ virtualNodeId = new VirtualNodeId(virtualResource.getParentVirtualResourceEntityId().getValue());\r
+ } else if ( VirtualResource.VirtualResourceType.Vnode\r
+ == virtualResource.getVirtualResourceType() ) {\r
+ virtualNodeId = new VirtualNodeId(virtualResource.getVirtualResourceEntityId().getValue());\r
+ } else {\r
+ throw new IntentResolutionException("The type of the node " + parameterValue.getValue() +\r
+ " specified by the action parameter of the operation " +\r
+ operation.getOperationId().getValue() + " is not required," +\r
+ " according to the intent-vn mapping result.");\r
+ }\r
+\r
+ virtualNode = IntentResolverUtils.getVirtualNode(virtualNodes, virtualNodeId);\r
+\r
+ if ( null == virtualNode ) {\r
+ throw new IntentResolutionException("Can not get the virtual node created for" +\r
+ " the node " + parameterValue.getValue() + ".");\r
+ }\r
+\r
+ if ( VirtualNode.NodeType.Vrouter != virtualNode.getNodeType() ) {\r
+ throw new IntentResolutionException("The type of the node " + parameterValue.getValue() +\r
+ " specified by the action parameter of the operation " +\r
+ operation.getOperationId().getValue() + " is not required," +\r
+ " according to the virtual node created for it.");\r
+ }\r
+\r
+ virtualNodes1.add(virtualNode);\r
+ }\r
+\r
+ VirtualNode sourceVirtualNode = ActionResolverUtils\r
+ .getSourceVirtualRouterOfFlow(virtualNodes, flow, nodes, intentVnMappingResults);\r
+\r
+ if ( null == sourceVirtualNode ) {\r
+ throw new IntentResolutionException("Can not get the source virtual node " +\r
+ "of the flow " + flow.getFlowId().getValue() + ".");\r
+ }\r
+\r
+ VirtualNode destinationVirtualNode = ActionResolverUtils\r
+ .getDestinationVirtualRouterOfFlow(virtualNodes, flow, nodes, intentVnMappingResults);\r
+\r
+ if ( null == destinationVirtualNode ) {\r
+ throw new IntentResolutionException("Can not get the destination virtual node " +\r
+ "of the flow " + flow.getFlowId().getValue() + ".");\r
+ }\r
+\r
+ VNComputationUnit vnComputationUnit = vnComputationUnits.get(user.getUserId());\r
+\r
+ if ( null == vnComputationUnit ) {\r
+ throw new IntentResolutionException("Can not get the virtual network computation " +\r
+ "unit for the user " + user.getUserId().getValue() + ".");\r
+ }\r
+\r
+ List<VirtualPath> virtualPaths = new ArrayList<VirtualPath>(virtualNodes1.size() + 1);\r
+ Iterator<VirtualNode> iterator = virtualNodes1.iterator();\r
+ VirtualNode firstVirtualNode = iterator.next();\r
+ VirtualNode secondVirtualNode;\r
+ VirtualPath virtualPath;\r
+\r
+ if ( !sourceVirtualNode.getNodeId().equals(firstVirtualNode.getNodeId()) ) {\r
+ virtualPath = vnComputationUnit\r
+ .computePath(sourceVirtualNode.getNodeId(), firstVirtualNode.getNodeId());\r
+\r
+ if ( null == virtualPath || virtualPath.getVirtualLink().isEmpty() ) {\r
+ throw new IntentResolutionException("Can not compute an available virtual path" +\r
+ " from the virtual node " + sourceVirtualNode.getNodeId().getValue() +\r
+ " to " + firstVirtualNode.getNodeId().getValue() + " in the virtual" +\r
+ " network for the flow " + flow.getFlowId().getValue() + ".");\r
+ }\r
+\r
+ virtualPaths.add(virtualPath);\r
+ }\r
+\r
+ while ( iterator.hasNext() ) {\r
+ secondVirtualNode = iterator.next();\r
+\r
+ if ( !firstVirtualNode.getNodeId().equals(secondVirtualNode.getNodeId()) ) {\r
+ virtualPath = vnComputationUnit\r
+ .computePath(firstVirtualNode.getNodeId(), secondVirtualNode.getNodeId());\r
+\r
+ if ( null == virtualPath || virtualPath.getVirtualLink().isEmpty() ) {\r
+ throw new IntentResolutionException("Can not compute an available virtual path" +\r
+ " from the virtual node " + firstVirtualNode.getNodeId().getValue() +\r
+ " to " + secondVirtualNode.getNodeId().getValue() + " in the virtual" +\r
+ " network for the flow " + flow.getFlowId().getValue() + ".");\r
+ }\r
+\r
+ virtualPaths.add(virtualPath);\r
+ }\r
+\r
+ firstVirtualNode = secondVirtualNode;\r
+ }\r
+\r
+ if ( !destinationVirtualNode.getNodeId().equals(firstVirtualNode.getNodeId()) ) {\r
+ virtualPath = vnComputationUnit\r
+ .computePath(firstVirtualNode.getNodeId(), destinationVirtualNode.getNodeId());\r
+\r
+ if ( null == virtualPath || virtualPath.getVirtualLink().isEmpty() ) {\r
+ throw new IntentResolutionException("Can not compute an available virtual path" +\r
+ " from the virtual node " + firstVirtualNode.getNodeId().getValue() +\r
+ " to " + destinationVirtualNode.getNodeId().getValue() + " in the virtual" +\r
+ " network for the flow " + flow.getFlowId().getValue() + ".");\r
+ }\r
+\r
+ virtualPaths.add(virtualPath);\r
+ }\r
+\r
+ virtualPath = ActionResolverUtils.mergeVirtualPaths(virtualPaths);\r
+ virtualNetwork.getVirtualPaths().getVirtualPath().add(virtualPath);\r
+\r
+ virtualResources = new ArrayList<VirtualResource>(1);\r
+\r
+ virtualResource = new VirtualResourceBuilder()\r
+ .setVirtualResourceId(new VirtualResourceId(UUID.randomUUID().toString()))\r
+ .setVirtualResourceType(VirtualResource.VirtualResourceType.Vpath)\r
+ .setVirtualResourceEntityId(new VirtualResourceEntityId(virtualPath.getPathId().getValue()))\r
+ .setOrder(0L)\r
+ .build();\r
+ virtualResources.add(virtualResource);\r
+\r
+ intentVnMappingResult = new IntentVnMappingResultBuilder()\r
+ .setIntentId(new IntentId(operation.getOperationId().getValue()))\r
+ .setIntentType(IntentVnMappingResult.IntentType.Operation)\r
+ .setVirtualResource(virtualResources)\r
+ .build();\r
+ intentVnMappingResults.add(intentVnMappingResult);\r
+\r
+ return;\r
+ }\r
+\r
+ /**\r
+ * TODO\r
+ *\r
+ * @param user TODO\r
+ * @param operation TODO\r
+ * @param flow TODO\r
+ * @param goThroughAction TODO\r
+ * @param chainGroup TODO\r
+ * @param virtualNetwork TODO\r
+ * @param userIntentVnMapping TODO\r
+ * @throws IntentResolutionException\r
+ */\r
+ private void resolveGoThroughChainGroupAction(User user, Operation operation, Flow flow,\r
+ Action goThroughAction, Node chainGroup,\r
+ VirtualNetwork virtualNetwork,\r
+ UserIntentVnMapping userIntentVnMapping)\r
+ throws IntentResolutionException {\r
+ List<Node> nodes = user.getObjects().getNode();\r
+ List<VirtualNode> virtualNodes = virtualNetwork.getVirtualNodes().getVirtualNode();\r
+ List<VirtualLink> virtualLinks = virtualNetwork.getVirtualLinks().getVirtualLink();\r
+ List<VirtualPath> virtualPaths = virtualNetwork.getVirtualPaths().getVirtualPath();\r
+ List<IntentVnMappingResult> intentVnMappingResults = userIntentVnMapping.getIntentVnMappingResult();\r
+ List<VirtualResource> virtualResources = null;\r
+\r
+ if ( IntentResolverUtils.checkAllLayer2OperatingMode(chainGroup.getSubNode(), nodes) ) {\r
+ // TODO\r
+ } else if ( IntentResolverUtils.checkAllLayer3OperatingMode(chainGroup.getSubNode(), nodes) ) {\r
+ IntentVnMappingResult intentVnMappingResult = IntentResolverUtils.getIntentVnMappingResult(\r
+ intentVnMappingResults, new IntentId(chainGroup.getNodeId().getValue()));\r
+\r
+ if ( null == intentVnMappingResult ) {\r
+ throw new IntentResolutionException("Can not get the intent-vn mapping result " +\r
+ "for the node " + chainGroup.getNodeId().getValue() + ".");\r
+ }\r
+\r
+ VirtualNode sourceVirtualNode = ActionResolverUtils.getSourceVirtualRouterOfFlow(\r
+ virtualNodes, flow, nodes, intentVnMappingResults);\r
+\r
+ if ( null == sourceVirtualNode ) {\r
+ throw new IntentResolutionException("Can not get the source virtual node " +\r
+ "of the flow " + flow.getFlowId().getValue() + ".");\r
+ }\r
+\r
+ VirtualNode destinationVirtualNode = ActionResolverUtils.getDestinationVirtualRouterOfFlow(\r
+ virtualNodes, flow, nodes, intentVnMappingResults);\r
+\r
+ if ( null == destinationVirtualNode ) {\r
+ throw new IntentResolutionException("Can not get the destination virtual node " +\r
+ "of the flow " + flow.getFlowId().getValue() + ".");\r
+ }\r
+\r
+ List<VirtualResource> virtualResources1 = ActionResolverUtils\r
+ .sortVirtualResources(intentVnMappingResult.getVirtualResource());\r
+\r
+ VirtualNodeId virtualNodeId = new VirtualNodeId(virtualResources1.get(0)\r
+ .getParentVirtualResourceEntityId().getValue());\r
+ VirtualNode virtualNode = IntentResolverUtils.getVirtualNode(virtualNodes, virtualNodeId);\r
+\r
+ if ( null == virtualNode ) {\r
+ throw new IntentResolutionException("Can not get the virtual node" +\r
+ " created for the first sub-node of the node " +\r
+ intentVnMappingResult.getIntentId().getValue() + ".");\r
+ }\r
+\r
+ virtualNodeId = new VirtualNodeId(virtualResources1.get(virtualResources1.size() - 1)\r
+ .getParentVirtualResourceEntityId().getValue());\r
+ VirtualNode virtualNode1 = IntentResolverUtils.getVirtualNode(virtualNodes, virtualNodeId);\r
+\r
+ if ( null == virtualNode1 ) {\r
+ throw new IntentResolutionException("Can not get the virtual node" +\r
+ " created for the last sub-node of the node " +\r
+ intentVnMappingResult.getIntentId().getValue() + ".");\r
+ }\r
+\r
+ virtualResources = new ArrayList<VirtualResource>(virtualResources1.size() + 2);\r
+ VirtualLink virtualLink = IntentResolverUtils.getVirtualLink(virtualLinks,\r
+ sourceVirtualNode.getNodeId(), virtualNode.getNodeId());\r
+\r
+ if ( null == virtualLink ) {\r
+ VirtualPort virtualPort = new VirtualPortBuilder()\r
+ .setPortId(new VirtualPortId(UUID.randomUUID().toString()))\r
+ .setPortType(VirtualPort.PortType.Internal)\r
+ .build();\r
+ sourceVirtualNode.getVirtualPort().add(virtualPort);\r
+\r
+ VirtualPort virtualPort1 = new VirtualPortBuilder()\r
+ .setPortId(new VirtualPortId(UUID.randomUUID().toString()))\r
+ .setPortType(VirtualPort.PortType.Internal)\r
+ .build();\r
+ virtualNode.getVirtualPort().add(virtualPort1);\r
+\r
+ virtualLink = new VirtualLinkBuilder()\r
+ .setLinkId(new VirtualLinkId(UUID.randomUUID().toString()))\r
+ .setSrcNodeId(virtualNode.getNodeId())\r
+ .setSrcPortId(virtualPort1.getPortId())\r
+ .setDestNodeId(sourceVirtualNode.getNodeId())\r
+ .setDestPortId(virtualPort.getPortId())\r
+ .setBandwidth(0L)\r
+ .build();\r
+ virtualLinks.add(virtualLink);\r
+\r
+ virtualLink = new VirtualLinkBuilder()\r
+ .setLinkId(new VirtualLinkId(UUID.randomUUID().toString()))\r
+ .setSrcNodeId(sourceVirtualNode.getNodeId())\r
+ .setSrcPortId(virtualPort.getPortId())\r
+ .setDestNodeId(virtualNode.getNodeId())\r
+ .setDestPortId(virtualPort1.getPortId())\r
+ .setBandwidth(0L)\r
+ .build();\r
+ virtualLinks.add(virtualLink);\r
+ }\r
+\r
+ List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.path.instance.VirtualLink> virtualLinks1 =\r
+ new ArrayList<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.path.instance.VirtualLink>(1);\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.path.instance.VirtualLink virtualLink1 =\r
+ new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.path.instance.VirtualLinkBuilder()\r
+ .setLinkId(virtualLink.getLinkId())\r
+ .setOrder(0L)\r
+ .build();\r
+ virtualLinks1.add(virtualLink1);\r
+\r
+ VirtualPath virtualPath = new VirtualPathBuilder()\r
+ .setPathId(new VirtualPathId(UUID.randomUUID().toString()))\r
+ .setVirtualLink(virtualLinks1)\r
+ .setBandwidth(0L)\r
+ .build();\r
+ virtualPaths.add(virtualPath);\r
+\r
+ VirtualResource virtualResource = new VirtualResourceBuilder()\r
+ .setVirtualResourceId(new VirtualResourceId(UUID.randomUUID().toString()))\r
+ .setVirtualResourceType(VirtualResource.VirtualResourceType.Vpath)\r
+ .setVirtualResourceEntityId(new VirtualResourceEntityId(virtualPath.getPathId().getValue()))\r
+ .setOrder(0L)\r
+ .build();\r
+ virtualResources.add(virtualResource);\r
+\r
+ for ( VirtualResource virtualResource1 : virtualResources1 ) {\r
+ virtualResource = new VirtualResourceBuilder(virtualResource1)\r
+ .setVirtualResourceId(new VirtualResourceId(UUID.randomUUID().toString()))\r
+ .setOrder((long)virtualResources.size())\r
+ .build();\r
+ virtualResources.add(virtualResource);\r
+ }\r
+\r
+ virtualLink = IntentResolverUtils.getVirtualLink(virtualLinks,\r
+ virtualNode1.getNodeId(), destinationVirtualNode.getNodeId());\r
+\r
+ if ( null == virtualLink ) {\r
+ VirtualPort virtualPort = new VirtualPortBuilder()\r
+ .setPortId(new VirtualPortId(UUID.randomUUID().toString()))\r
+ .setPortType(VirtualPort.PortType.Internal)\r
+ .build();\r
+ virtualNode1.getVirtualPort().add(virtualPort);\r
+\r
+ VirtualPort virtualPort1 = new VirtualPortBuilder()\r
+ .setPortId(new VirtualPortId(UUID.randomUUID().toString()))\r
+ .setPortType(VirtualPort.PortType.Internal)\r
+ .build();\r
+ destinationVirtualNode.getVirtualPort().add(virtualPort1);\r
+\r
+ virtualLink = new VirtualLinkBuilder()\r
+ .setLinkId(new VirtualLinkId(UUID.randomUUID().toString()))\r
+ .setSrcNodeId(destinationVirtualNode.getNodeId())\r
+ .setSrcPortId(virtualPort1.getPortId())\r
+ .setDestNodeId(virtualNode1.getNodeId())\r
+ .setDestPortId(virtualPort.getPortId())\r
+ .setBandwidth(0L)\r
+ .build();\r
+ virtualLinks.add(virtualLink);\r
+\r
+ virtualLink = new VirtualLinkBuilder()\r
+ .setLinkId(new VirtualLinkId(UUID.randomUUID().toString()))\r
+ .setSrcNodeId(virtualNode1.getNodeId())\r
+ .setSrcPortId(virtualPort.getPortId())\r
+ .setDestNodeId(destinationVirtualNode.getNodeId())\r
+ .setDestPortId(virtualPort1.getPortId())\r
+ .setBandwidth(0L)\r
+ .build();\r
+ virtualLinks.add(virtualLink);\r
+ }\r
+\r
+ virtualLinks1 = new ArrayList<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.path.instance.VirtualLink>(1);\r
+ virtualLink1 = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.path.instance.VirtualLinkBuilder()\r
+ .setLinkId(virtualLink.getLinkId())\r
+ .setOrder(0L)\r
+ .build();\r
+ virtualLinks1.add(virtualLink1);\r
+\r
+ virtualPath = new VirtualPathBuilder()\r
+ .setPathId(new VirtualPathId(UUID.randomUUID().toString()))\r
+ .setVirtualLink(virtualLinks1)\r
+ .setBandwidth(0L)\r
+ .build();\r
+ virtualPaths.add(virtualPath);\r
+\r
+ virtualResource = new VirtualResourceBuilder()\r
+ .setVirtualResourceId(new VirtualResourceId(UUID.randomUUID().toString()))\r
+ .setVirtualResourceType(VirtualResource.VirtualResourceType.Vpath)\r
+ .setVirtualResourceEntityId(new VirtualResourceEntityId(virtualPath.getPathId().getValue()))\r
+ .setOrder((long) virtualResources.size())\r
+ .build();\r
+ virtualResources.add(virtualResource);\r
+ } else {\r
+ // TODO\r
+ }\r
+\r
+ IntentVnMappingResult intentVnMappingResult = new IntentVnMappingResultBuilder()\r
+ .setIntentId(new IntentId(operation.getOperationId().getValue()))\r
+ .setIntentType(IntentVnMappingResult.IntentType.Operation)\r
+ .setVirtualResource(virtualResources)\r
+ .build();\r
+\r
+ intentVnMappingResults.add(intentVnMappingResult);\r
+\r
+ return;\r
+ }\r
+}\r
--- /dev/null
+/*\r
+ * Copyright (c) 2015 Huawei, Inc. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.nemo.intent.action;\r
+\r
+import org.opendaylight.nemo.intent.IntentResolverUtils;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.nodes.VirtualNode;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.paths.VirtualPath;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.paths.VirtualPathBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.path.instance.VirtualLink;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.path.instance.VirtualLinkBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.intent.vn.mapping.results.user.intent.vn.mapping.IntentVnMappingResult;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.intent.vn.mapping.results.user.intent.vn.mapping.intent.vn.mapping.result.VirtualResource;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.*;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.VirtualLinkId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.VirtualNodeId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.VirtualPathId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Flow;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Node;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.flow.instance.MatchItem;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.node.instance.Property;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.property.instance.property.values.StringValue;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.operation.instance.Action;\r
+\r
+import java.util.ArrayList;\r
+import java.util.LinkedList;\r
+import java.util.List;\r
+import java.util.UUID;\r
+\r
+/**\r
+ * Implement the common utilities frequently used in\r
+ * the action resolution.\r
+ *\r
+ * @author Zhigang Ji\r
+ */\r
+public class ActionResolverUtils {\r
+ /**\r
+ * TODO\r
+ *\r
+ * @param actions TODO\r
+ * @param actionName TODO\r
+ * @return TODO\r
+ */\r
+ protected static Action getAction(List<Action> actions, ActionName actionName) {\r
+ for ( Action action : actions ) {\r
+ if ( action.getActionName().equals(actionName) ) {\r
+ return action;\r
+ }\r
+ }\r
+\r
+ return null;\r
+ }\r
+\r
+ /**\r
+ * TODO\r
+ *\r
+ * @param virtualLinks TODO\r
+ * @param virtualLinkId TODO\r
+ * @param bandwidth TODO\r
+ */\r
+ protected static void modifyVirtualLinkBandwidth(\r
+ List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.links.VirtualLink> virtualLinks,\r
+ VirtualLinkId virtualLinkId, long bandwidth) {\r
+ int i = 0;\r
+\r
+ for ( org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.links.VirtualLink\r
+ virtualLink : virtualLinks ) {\r
+ if ( virtualLink.getLinkId().equals(virtualLinkId) ) {\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.links.VirtualLink virtualLink1 =\r
+ new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.links.VirtualLinkBuilder(virtualLink)\r
+ .setBandwidth(bandwidth)\r
+ .build();\r
+\r
+ virtualLinks.set(i, virtualLink1);\r
+\r
+ return;\r
+ }\r
+\r
+ i++;\r
+ }\r
+\r
+ return;\r
+ }\r
+\r
+ /**\r
+ * TODO\r
+ *\r
+ * @param virtualResources TODO\r
+ * @return TODO\r
+ */\r
+ protected static List<VirtualResource> sortVirtualResources(List<VirtualResource> virtualResources) {\r
+ if ( virtualResources.isEmpty() || 1 == virtualResources.size() ) {\r
+ return virtualResources;\r
+ }\r
+\r
+ List<VirtualResource> sortedVirtualResources = new ArrayList<VirtualResource>(virtualResources.size());\r
+ sortedVirtualResources.addAll(virtualResources);\r
+\r
+ for ( VirtualResource virtualResource : virtualResources ) {\r
+ sortedVirtualResources.set(virtualResource.getOrder().intValue(), virtualResource);\r
+ }\r
+\r
+ return sortedVirtualResources;\r
+ }\r
+\r
+ /**\r
+ * TODO\r
+ *\r
+ * @param parameterValues TODO\r
+ * @return TODO\r
+ */\r
+ protected static List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.StringValue> sortParameterValues(\r
+ List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.StringValue> parameterValues) {\r
+ if ( parameterValues.isEmpty() || 1 == parameterValues.size() ) {\r
+ return parameterValues;\r
+ }\r
+\r
+ List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.StringValue> sortedParameterValues =\r
+ new ArrayList<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.StringValue>(parameterValues.size());\r
+ sortedParameterValues.addAll(parameterValues);\r
+\r
+ for ( org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.StringValue\r
+ parameterValue : parameterValues ) {\r
+ sortedParameterValues.set(parameterValue.getOrder().intValue(), parameterValue);\r
+ }\r
+\r
+ return sortedParameterValues;\r
+ }\r
+\r
+ /**\r
+ * TODO\r
+ *\r
+ * @param virtualNodes TODO\r
+ * @param flow TODO\r
+ * @param nodes TODO\r
+ * @param intentVnMappingResults TODO\r
+ * @return TODO\r
+ */\r
+ protected static VirtualNode getSourceVirtualRouterOfFlow(List<VirtualNode> virtualNodes,\r
+ Flow flow, List<Node> nodes,\r
+ List<IntentVnMappingResult> intentVnMappingResults) {\r
+ MatchItemName matchItemName = new MatchItemName("src-ip");\r
+ MatchItem matchItem = getMatchItem(flow.getMatchItem(), matchItemName);\r
+\r
+ if ( null == matchItem ) {\r
+ return null;\r
+ }\r
+\r
+ String matchItemValue = matchItem.getMatchItemValue().getStringValue();\r
+ VirtualNode virtualNode = getVirtualRouterWithIpPrefix(virtualNodes,\r
+ matchItemValue, nodes, intentVnMappingResults);\r
+\r
+ return virtualNode;\r
+ }\r
+\r
+ /**\r
+ * TODO\r
+ *\r
+ * @param virtualNodes TODO\r
+ * @param flow TODO\r
+ * @param nodes TODO\r
+ * @param intentVnMappingResults TODO\r
+ * @return TODO\r
+ */\r
+ protected static VirtualNode getDestinationVirtualRouterOfFlow(List<VirtualNode> virtualNodes,\r
+ Flow flow, List<Node> nodes,\r
+ List<IntentVnMappingResult> intentVnMappingResults) {\r
+ MatchItemName matchItemName = new MatchItemName("dst-ip");\r
+ MatchItem matchItem = getMatchItem(flow.getMatchItem(), matchItemName);\r
+\r
+ if ( null == matchItem ) {\r
+ return null;\r
+ }\r
+\r
+ String matchItemValue = matchItem.getMatchItemValue().getStringValue();\r
+ VirtualNode virtualNode = getVirtualRouterWithIpPrefix(virtualNodes,\r
+ matchItemValue, nodes, intentVnMappingResults);\r
+\r
+ return virtualNode;\r
+ }\r
+\r
+ /**\r
+ * TODO\r
+ *\r
+ * @param virtualPaths TODO\r
+ * @return TODO\r
+ */\r
+ protected static VirtualPath mergeVirtualPaths(List<VirtualPath> virtualPaths) {\r
+ if ( virtualPaths.isEmpty() ) {\r
+ VirtualPath virtualPath = new VirtualPathBuilder()\r
+ .setPathId(new VirtualPathId(UUID.randomUUID().toString()))\r
+ .setVirtualLink(new ArrayList<VirtualLink>(0))\r
+ .setMetric(0L)\r
+ .setBandwidth(0L)\r
+ .setDelay(0L)\r
+ .build();\r
+\r
+ return virtualPath;\r
+ }\r
+\r
+ if ( 1 == virtualPaths.size() ) {\r
+ return virtualPaths.get(0);\r
+ }\r
+\r
+ List<VirtualLink> virtualLinks = new LinkedList<VirtualLink>();\r
+ VirtualLink virtualLink;\r
+ long metric = 0;\r
+ long bandwidth = Long.MAX_VALUE;\r
+ long delay = 0;\r
+\r
+ for ( VirtualPath virtualPath : virtualPaths ) {\r
+ for ( VirtualLink virtualLink1 : virtualPath.getVirtualLink() ) {\r
+ virtualLink = new VirtualLinkBuilder(virtualLink1)\r
+ .setOrder((long)virtualLinks.size())\r
+ .build();\r
+ virtualLinks.add(virtualLink);\r
+ }\r
+\r
+ metric += virtualPath.getMetric();\r
+ delay += virtualPath.getDelay();\r
+\r
+ if ( virtualPath.getBandwidth() < bandwidth ) {\r
+ bandwidth = virtualPath.getBandwidth();\r
+ }\r
+ }\r
+\r
+ VirtualPath virtualPath = new VirtualPathBuilder()\r
+ .setPathId(new VirtualPathId(UUID.randomUUID().toString()))\r
+ .setVirtualLink(virtualLinks)\r
+ .setMetric(metric)\r
+ .setBandwidth(bandwidth)\r
+ .setDelay(delay)\r
+ .build();\r
+\r
+ return virtualPath;\r
+ }\r
+\r
+ /**\r
+ * TODO\r
+ *\r
+ * @param matchItems TODO\r
+ * @param matchItemName TODO\r
+ * @return TODO\r
+ */\r
+ private static MatchItem getMatchItem(List<MatchItem> matchItems, MatchItemName matchItemName) {\r
+ if ( null != matchItems ) {\r
+ for ( MatchItem matchItem : matchItems ) {\r
+ if ( matchItem.getMatchItemName().equals(matchItemName) ) {\r
+ return matchItem;\r
+ }\r
+ }\r
+ }\r
+\r
+ return null;\r
+ }\r
+\r
+ /**\r
+ * TODO\r
+ *\r
+ * @param virtualNodes TODO\r
+ * @param ipPrefix TODO\r
+ * @param nodes TODO\r
+ * @param intentVnMappingResults TODO\r
+ * @return TODO\r
+ */\r
+ private static VirtualNode getVirtualRouterWithIpPrefix(List<VirtualNode> virtualNodes,\r
+ String ipPrefix, List<Node> nodes,\r
+ List<IntentVnMappingResult> intentVnMappingResults) {\r
+ NodeType layer2GroupNodeType = new NodeType("l2-group");\r
+ NodeType externalGroupNodeType = new NodeType("ext-group");\r
+ PropertyName propertyName = new PropertyName("ip-prefix");\r
+ Property property;\r
+ List<StringValue> propertyValues;\r
+ IntentVnMappingResult intentVnMappingResult;\r
+ VirtualResource virtualResource;\r
+ VirtualNodeId virtualNodeId;\r
+ VirtualNode virtualNode;\r
+\r
+ for ( Node node : nodes ) {\r
+ if ( node.getNodeType().equals(layer2GroupNodeType)\r
+ || node.getNodeType().equals(externalGroupNodeType) ) {\r
+ property = IntentResolverUtils.getNodeProperty(node.getProperty(), propertyName);\r
+\r
+ if ( null != property ) {\r
+ propertyValues = property.getPropertyValues().getStringValue();\r
+\r
+ if ( containPropertyValue(propertyValues, ipPrefix) ) {\r
+ intentVnMappingResult = IntentResolverUtils.getIntentVnMappingResult(\r
+ intentVnMappingResults, new IntentId(node.getNodeId().getValue()));\r
+\r
+ if ( null == intentVnMappingResult ) {\r
+ return null;\r
+ }\r
+\r
+ virtualResource = intentVnMappingResult.getVirtualResource().get(0);\r
+\r
+ if ( VirtualResource.VirtualResourceType.Vport\r
+ == virtualResource.getVirtualResourceType() ) {\r
+ virtualNodeId = new VirtualNodeId(\r
+ virtualResource.getParentVirtualResourceEntityId().getValue());\r
+ } else if ( VirtualResource.VirtualResourceType.Vnode\r
+ == virtualResource.getVirtualResourceType() ) {\r
+ virtualNodeId = new VirtualNodeId(\r
+ virtualResource.getVirtualResourceEntityId().getValue());\r
+ } else {\r
+ return null;\r
+ }\r
+\r
+ virtualNode = IntentResolverUtils.getVirtualNode(virtualNodes, virtualNodeId);\r
+\r
+ if ( null == virtualNode ) {\r
+ return null;\r
+ }\r
+\r
+ if ( VirtualNode.NodeType.Vrouter == virtualNode.getNodeType() ) {\r
+ return virtualNode;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ return null;\r
+ }\r
+\r
+ /**\r
+ * TODO\r
+ *\r
+ * @param propertyValues TODO\r
+ * @param propertyValue TODO\r
+ * @return TODO\r
+ */\r
+ private static boolean containPropertyValue(List<StringValue> propertyValues, String propertyValue) {\r
+ for ( StringValue stringValue : propertyValues ) {\r
+ if ( stringValue.getValue().equals(propertyValue) ) {\r
+ return true;\r
+ }\r
+ }\r
+\r
+ return false;\r
+ }\r
+}\r
return;\r
}\r
\r
- @Override\r
- public void close() throws Exception {\r
- for ( Map<PhysicalPortId, ListenerRegistration<DataChangeListener>>\r
- physicalPortChangeListenerRegs1 : physicalPortChangeListenerRegs.values() ) {\r
- for ( ListenerRegistration<DataChangeListener>\r
- physicalPortChangeListenerReg : physicalPortChangeListenerRegs1.values() ) {\r
- if ( null != physicalPortChangeListenerReg ) {\r
- physicalPortChangeListenerReg.close();\r
- }\r
+ /**\r
+ * TODO\r
+ *\r
+ * @param virtualNetwork TODO\r
+ * @param unmappedVirtualLinks TODO\r
+ * @param userVnPnMapping TODO\r
+ * @param physicalPaths TODO\r
+ * @throws VNMappingException\r
+ */\r
+ public void virtualNetworkMapping(VirtualNetwork virtualNetwork, List<VirtualLink> unmappedVirtualLinks,\r
+ UserVnPnMapping userVnPnMapping, List<PhysicalPath> physicalPaths)\r
+ throws VNMappingException {\r
+ List<VirtualLink> virtualLinks = virtualNetwork.getVirtualLinks().getVirtualLink();\r
+ List<VnPnMappingResult> vnPnMappingResults = userVnPnMapping.getVnPnMappingResult();\r
+ PhysicalPath physicalPath;\r
+ VirtualLink newVirtualLink;\r
+ VnPnMappingResult vnPnMappingResult;\r
+ int i = virtualLinks.size() - unmappedVirtualLinks.size();\r
+\r
+ for ( VirtualLink virtualLink : unmappedVirtualLinks ) {\r
+ physicalPath = virtualLinkMapping(virtualNetwork.getNetworkId(), virtualLink, userVnPnMapping);\r
+\r
+ if ( null == physicalPath ) {\r
+ throw new VNMappingException("Failed mapping for the virtual link " +\r
+ virtualLink.getLinkId().getValue() + " in the virtual network " +\r
+ virtualNetwork.getNetworkId().getValue());\r
}\r
- }\r
\r
- if ( null != physicalNodeChangeListenerReg ) {\r
- physicalNodeChangeListenerReg.close();\r
- }\r
+ physicalPaths.add(physicalPath);\r
+\r
+ newVirtualLink = new VirtualLinkBuilder(virtualLink)\r
+ .setMetric(physicalPath.getMetric())\r
+ .setDelay(physicalPath.getDelay())\r
+ .build();\r
+\r
+ virtualLinks.set(i++, newVirtualLink);\r
\r
- if ( null != physicalLinkChangeListenerReg ) {\r
- physicalLinkChangeListenerReg.close();\r
+ vnPnMappingResult = new VnPnMappingResultBuilder()\r
+ .setVirtualResourceId(new VirtualResourceId(UUID.randomUUID().toString()))\r
+ .setVirtualResourceType(VirtualResourceInstance.VirtualResourceType.Vlink)\r
+ .setVirtualResourceEntityId(new VirtualResourceEntityId(virtualLink.getLinkId().getValue()))\r
+ .setPhysicalResourceId(new PhysicalResourceId(UUID.randomUUID().toString()))\r
+ .setPhysicalResourceType(PhysicalResourceInstance.PhysicalResourceType.Path)\r
+ .setPhysicalResourceEntityId(new PhysicalResourceEntityId(physicalPath.getPathId().getValue()))\r
+ .build();\r
+\r
+ vnPnMappingResults.add(vnPnMappingResult);\r
}\r
\r
return;\r
}\r
\r
+ @Override\r
+ public void close() throws Exception {\r
+ return;\r
+ }\r
+\r
/**\r
* TODO\r
*\r
* @return TODO\r
*/\r
private PhysicalPort virtualPortMapping(VirtualNetworkId virtualNetworkId, VirtualNodeId virtualNodeId,\r
- VirtualPort virtualPort, PhysicalNode physicalNode)\r
+ VirtualPort virtualPort, PhysicalNode physicalNode)\r
throws VNMappingException {\r
if ( VirtualPort.PortType.Internal == virtualPort.getPortType() ) {\r
return null;\r
public NemoEngine() {
rpcRegistration = rpcProviderRegistry.addRpcImplementation(NemoIntentService.class, userManager);
}
-
+
@Override
public void close() throws Exception {
if (null != rpcRegistration) {
rpcRegistration.close();
}
-
+
if ( null != intentResolver ) {
intentResolver.close();
}
+++ /dev/null
-package org.opendaylight.nemo.intent;
-
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.opendaylight.nemo.intent.IntentResolverUtils;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.VirtualResourceEntityId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.VirtualResourceInstance.VirtualResourceType;
-import static org.junit.Assert.*;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.hosts.PhysicalHost;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.links.VirtualLink;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.nodes.VirtualNode;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.intent.vn.mapping.results.user.intent.vn.mapping.IntentVnMappingResult;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.intent.vn.mapping.results.user.intent.vn.mapping.intent.vn.mapping.result.VirtualResource;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.*;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.PhysicalHostId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.PhysicalNodeId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.VirtualNodeId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.Objects;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Connection;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Flow;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Node;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.operations.Operation;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.flow.instance.MatchItem;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.node.instance.Property;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.node.instance.SubNode;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.property.instance.property.values.StringValue;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.operation.instance.Action;
-import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.match.item.instance.MatchItemValue;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.property.instance.PropertyValues;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.NodeId;
-//import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.connection.instance.Property;
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
-import static org.mockito.Mockito.*;
-
-/**
- * Created by zhangmeng on 2015/11/26.
- */
-public class IntentResolverUtilsTest extends IntentResolverUtils {
-
- @Before
- public void setUp() throws Exception {
-
- }
-
- @Test
- public void testCheckExternalLayer3Group() throws Exception {
- Node node = mock(Node.class);
- List<Property> properties = new LinkedList<Property>();
- Property property = mock(Property.class);
- properties.add(property);
-
- when(node.getProperty()).thenReturn(null);//avoid testing method "getNodeProperty"
- IntentResolverUtils.checkExternalLayer3Group(node);
- verify(node).getProperty();
-
- //test method "getNodeProperty". and method "CheckExternalLayer3Group"`s another branch
-// when(node.getProperty()).thenReturn(properties);
-// when(property.getPropertyName()).thenReturn(new PropertyName("ac-info-network"));
-
- /* anther branch can`t be tested. The reason is that I cannot known the method property.getPropertyValues() returns what object.
- So I cant`t mock the needed object
- */
- }
-
- @Test
- public void testGetPhysicalHost() throws Exception {
- List<PhysicalHost> physicalHosts = new LinkedList<PhysicalHost>();
- Node node = mock(Node.class);
- NodeId nodeId = mock(NodeId.class);
-
- when(node.getNodeId()).thenReturn(nodeId);
- when(nodeId.getValue()).thenReturn(new String("00001111-0000-0000-0000-000011112222"));
-
- // test private method "getPhysicalHost"
- PhysicalHost physicalHost = mock(PhysicalHost.class);
- physicalHosts.add(physicalHost);
- when(physicalHost.getHostId())
- .thenReturn(new PhysicalHostId("00001111-0000-0000-0000-000011112222"))
- .thenReturn(new PhysicalHostId("00001111-0000-0000-0000-000011112221"));
-
- IntentResolverUtils.getPhysicalHost(physicalHosts, node);
- IntentResolverUtils.getPhysicalHost(physicalHosts,node);
- verify(node,times(2)).getNodeId();
- verify(nodeId,times(2)).getValue();
- verify(physicalHost,times(2)).getHostId();
- }
-
- @Test
- public void testGetNodeProperty() throws Exception {
- List<Property> properties = new LinkedList<Property>();
- PropertyName propertyName = new PropertyName("test");
- Property property = mock(Property.class);
- properties.add(property);
-
- when(property.getPropertyName()).thenReturn(propertyName);
- IntentResolverUtils.getNodeProperty(properties, propertyName);
- verify(property).getPropertyName();
-
- IntentResolverUtils.getNodeProperty(null, propertyName);
- }
-
- @Test
- public void testGeneratePhysicalNodeIdFromNodeLocationProperty() throws Exception {
- //method can`t be tested because of "String propertyValue = property.getPropertyValues().getStringValue().get(0).getValue();"
-
- }
-
- @Test
- public void testGetIntentVnMappingResult() throws Exception {
- List<IntentVnMappingResult> intentVnMappingResults = new LinkedList<IntentVnMappingResult>();
- IntentId intentId = mock(IntentId.class);
- IntentVnMappingResult intentVnMappingResult = mock(IntentVnMappingResult.class);
- intentVnMappingResults.add(intentVnMappingResult);
-
- when(intentVnMappingResult.getIntentId())
- .thenReturn(intentId)
- .thenReturn(new IntentId("00001111-0000-0000-0000-000011112222"));
-
- IntentResolverUtils.getIntentVnMappingResult(intentVnMappingResults, intentId);
- IntentResolverUtils.getIntentVnMappingResult(intentVnMappingResults, intentId);
- verify(intentVnMappingResult,times(2)).getIntentId();
- }
-
- @Test
- public void testGetVirtualNode() throws Exception {
- List<VirtualNode> virtualNodes = new LinkedList<VirtualNode>();
- VirtualNodeId virtualNodeId = mock(VirtualNodeId.class);
- VirtualNode virtualNode = mock(VirtualNode.class);
- virtualNodes.add(virtualNode);
-
- when(virtualNode.getNodeId())
- .thenReturn(virtualNodeId)
- .thenReturn(new VirtualNodeId("00001111-0000-0000-0000-000011112222"));
-
- IntentResolverUtils.getVirtualNode(virtualNodes, virtualNodeId);
- IntentResolverUtils.getVirtualNode(virtualNodes, virtualNodeId);
- verify(virtualNode,times(2)).getNodeId();
- }
-
- @Test
- public void testGetNode() throws Exception {
- List<Node> nodes = new LinkedList<Node>();
- NodeId nodeId = mock(NodeId.class);
- Node node = mock(Node.class);
- nodes.add(node);
-
- when(node.getNodeId())
- .thenReturn(nodeId)
- .thenReturn(new NodeId("00001111-0000-0000-0000-000011112222"));
-
- IntentResolverUtils.getNode(nodes, nodeId);
- IntentResolverUtils.getNode(nodes, nodeId);
- verify(node,times(2)).getNodeId();
- }
-
- @Test
- public void testGetConnectionProperty() throws Exception {
- List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.connection.instance.Property>
- properties = new LinkedList<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.connection.instance.Property>();
- PropertyName propertyName = mock(PropertyName.class);
- org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.connection.instance.Property
- property = mock(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.connection.instance.Property.class);
- properties.add(property);
-
- when(property.getPropertyName()).thenReturn(propertyName);
-
- IntentResolverUtils.getConnectionProperty(properties, propertyName);
- verify(property).getPropertyName();
-
- IntentResolverUtils.getConnectionProperty(null,propertyName);
- }
-
- @Test
- public void testSortSubNodes() throws Exception {
- List<SubNode> subNodes = new LinkedList<SubNode>();
- SubNode subNode = mock(SubNode.class);
- SubNode subNode1 = mock(SubNode.class);
- long first = 0;
- long second = 1;
-
- //test empty
- Assert.assertTrue(subNodes.size() == 0);
- IntentResolverUtils.sortSubNodes(subNodes);
- //test size = 1;
- subNodes.add(subNode);
- Assert.assertTrue(subNodes.size() == 1);
- IntentResolverUtils.sortSubNodes(subNodes);
- //test size > 1
- subNodes.add(subNode1);
- when(subNode.getOrder()).thenReturn(first);
- when(subNode1.getOrder()).thenReturn(second);
-
- }
-
- @Test
- public void testCheckAllLayer2OperatingMode() throws Exception {
- List<SubNode> subNodes = new LinkedList<SubNode>();
- List<Node> nodes = new LinkedList<Node>();
- List<Property> properties = new LinkedList<Property>();
- //List<StringValue> stringValues = new LinkedList<StringValue>();
- List<StringValue> stringValues = mock(List.class);
- Property property = mock(Property.class);
- NodeId nodeId = mock(NodeId.class);
- Node node = mock(Node.class);
- SubNode subNode = mock(SubNode.class);
- PropertyName propertyName = mock(PropertyName.class);
- PropertyValues propertyValues = mock(PropertyValues.class);
- StringValue stringValue = mock(StringValue.class);
-
- //test empty
- Assert.assertTrue(subNodes.size() == 0);
- Assert.assertFalse(IntentResolverUtils.checkAllLayer2OperatingMode(subNodes, nodes));
-
- //test not empty
- subNodes.add(subNode);
- nodes.add(node);
- properties.add(property);
- //stringValues.add(stringValue);
- when(subNode.getNodeId()).thenReturn(nodeId);
- when(node.getNodeId())
- .thenReturn(new NodeId("00001111-0000-0000-0000-000011112222"))
- .thenReturn(nodeId)
- .thenReturn(nodeId)
- .thenReturn(nodeId);
- Assert.assertFalse(IntentResolverUtils.checkAllLayer2OperatingMode(subNodes, nodes));
- when(node.getProperty()).thenReturn(properties);
- when(property.getPropertyName())
- .thenReturn(propertyName)
- .thenReturn(new PropertyName("operating-mode"))
- .thenReturn(new PropertyName("operating-mode"));
- Assert.assertFalse(IntentResolverUtils.checkAllLayer2OperatingMode(subNodes, nodes));
- when(property.getPropertyValues()).thenReturn(propertyValues);
- when(propertyValues.getStringValue()).thenReturn(stringValues);
- when(stringValues.get(anyInt())).thenReturn(stringValue);
- when(stringValue.getValue())
- .thenReturn(new String("layer2"))
- .thenReturn(new String("test"));
-
- Assert.assertTrue(IntentResolverUtils.checkAllLayer2OperatingMode(subNodes, nodes));
- Assert.assertFalse(IntentResolverUtils.checkAllLayer2OperatingMode(subNodes, nodes));
-
- verify(subNode,times(4)).getNodeId();
- verify(node,times(4)).getNodeId();
- verify(node,times(3)).getProperty();
- verify(property,times(3)).getPropertyName();
- verify(property, times(2)).getPropertyValues();
- verify(propertyValues,times(2)).getStringValue();
- verify(stringValues,times(2)).get(anyInt());
- verify(stringValue,times(2)).getValue();
-
- }
-
- @Test
- public void testCheckAllLayer3OperatingMode() throws Exception {
- List<SubNode> subNodes = new LinkedList<SubNode>();
- List<Node> nodes = new LinkedList<Node>();
- List<Property> properties = new LinkedList<Property>();
- //List<StringValue> stringValues = new LinkedList<StringValue>();
- List<StringValue> stringValues = mock(List.class);
- Property property = mock(Property.class);
- NodeId nodeId = mock(NodeId.class);
- Node node = mock(Node.class);
- SubNode subNode = mock(SubNode.class);
- PropertyName propertyName = mock(PropertyName.class);
- PropertyValues propertyValues = mock(PropertyValues.class);
- StringValue stringValue = mock(StringValue.class);
-
- //test empty
- Assert.assertTrue(subNodes.size() == 0);
- Assert.assertFalse(IntentResolverUtils.checkAllLayer3OperatingMode(subNodes, nodes));
-
- //test not empty
- subNodes.add(subNode);
- nodes.add(node);
- properties.add(property);
- //stringValues.add(stringValue);
- when(subNode.getNodeId()).thenReturn(nodeId);
- when(node.getNodeId())
- .thenReturn(new NodeId("00001111-0000-0000-0000-000011112222"))
- .thenReturn(nodeId)
- .thenReturn(nodeId)
- .thenReturn(nodeId);
- Assert.assertFalse(IntentResolverUtils.checkAllLayer3OperatingMode(subNodes, nodes));
- when(node.getProperty()).thenReturn(properties);
- when(property.getPropertyName())
- .thenReturn(propertyName)
- .thenReturn(new PropertyName("operating-mode"))
- .thenReturn(new PropertyName("operating-mode"));
- Assert.assertFalse(IntentResolverUtils.checkAllLayer3OperatingMode(subNodes, nodes));
- when(property.getPropertyValues()).thenReturn(propertyValues);
- when(propertyValues.getStringValue()).thenReturn(stringValues);
- when(stringValues.get(anyInt())).thenReturn(stringValue);
- when(stringValue.getValue())
- .thenReturn(new String("layer3"))
- .thenReturn(new String("test"));
-
- Assert.assertTrue(IntentResolverUtils.checkAllLayer3OperatingMode(subNodes, nodes));
- Assert.assertFalse(IntentResolverUtils.checkAllLayer3OperatingMode(subNodes, nodes));
-
- verify(subNode,times(4)).getNodeId();
- verify(node,times(4)).getNodeId();
- verify(node,times(3)).getProperty();
- verify(property,times(3)).getPropertyName();
- verify(property, times(2)).getPropertyValues();
- verify(propertyValues,times(2)).getStringValue();
- verify(stringValues,times(2)).get(anyInt());
- verify(stringValue,times(2)).getValue();
- }
-
- @Test
- public void testGetVirtualLink() throws Exception {
- List<VirtualLink> virtualLinks = new LinkedList<VirtualLink>();
- VirtualNodeId srcVirtualNodeId = mock(VirtualNodeId.class);
- VirtualNodeId destVirtualNodeId = mock(VirtualNodeId.class);
- VirtualLink virtualLink = mock(VirtualLink.class);
- VirtualLink virtualLink_test ;
- virtualLinks.add(virtualLink);
- //test not null and null
- when(virtualLink.getSrcNodeId())
- .thenReturn(srcVirtualNodeId)
- .thenReturn(new VirtualNodeId("00001111-0000-0000-0000-000011112222"));
- when(virtualLink.getDestNodeId())
- .thenReturn(destVirtualNodeId)
- .thenReturn(new VirtualNodeId("00001111-0000-0000-0000-000011112222"));
- virtualLink_test = IntentResolverUtils.getVirtualLink(virtualLinks, srcVirtualNodeId, destVirtualNodeId);
- Assert.assertTrue(virtualLink_test != null);
- virtualLink_test = IntentResolverUtils.getVirtualLink(virtualLinks,srcVirtualNodeId,destVirtualNodeId);
- Assert.assertTrue(virtualLink_test == null);
- verify(virtualLink,times(2)).getSrcNodeId();
- verify(virtualLink).getDestNodeId();
-
- }
-
- @Test
- public void testGetObject() throws Exception {
- DataObject dataObject ;
- Objects objects = mock(Objects.class);
- ObjectId objectId = mock(ObjectId.class);
- Node node = mock(Node.class);
- Connection connection = mock(Connection.class);
- Flow flow = mock(Flow.class);
- List<Node> nodes = new LinkedList<Node>();
- List<Connection> connections = new LinkedList<Connection>();
- List<Flow> flows = new LinkedList<Flow>();
-
- when(objects.getNode()).thenReturn(nodes);
- when(objects.getConnection()).thenReturn(connections);
- when(objects.getFlow()).thenReturn(flows);
- when(objectId.getValue()).thenReturn(new String("00001111-0000-0000-0000-000011112222"));
- // when nodes and connections and flows are all empty
- dataObject = IntentResolverUtils.getObject(objects, objectId);
- Assert.assertTrue(dataObject == null);
- //test flow
- flows.add(flow);
- when(flow.getFlowId())
- .thenReturn(new FlowId(new String("00001111-0000-0000-0000-000011112222")))
- .thenReturn(mock(FlowId.class));
- //return true
- dataObject = IntentResolverUtils.getObject(objects, objectId);
- Assert.assertTrue(dataObject != null);
- //return null
- dataObject = IntentResolverUtils.getObject(objects, objectId);
- Assert.assertTrue(dataObject == null);
-
- //test connection
- connections.add(connection);
- when(connection.getConnectionId())
- .thenReturn(new ConnectionId(new String("00001111-0000-0000-0000-000011112222")))
- .thenReturn(mock(ConnectionId.class));
- //return true
- dataObject = IntentResolverUtils.getObject(objects, objectId);
- Assert.assertTrue(dataObject != null);
- //return null
- dataObject = IntentResolverUtils.getObject(objects, objectId);
- Assert.assertTrue(dataObject == null);
-
- //test node
- nodes.add(node);
- when(node.getNodeId())
- .thenReturn(new NodeId(new String("00001111-0000-0000-0000-000011112222")))
- .thenReturn(mock(NodeId.class));
- //return true
- dataObject = IntentResolverUtils.getObject(objects, objectId);
- Assert.assertTrue(dataObject != null);
- //return null
- dataObject = IntentResolverUtils.getObject(objects, objectId);
- Assert.assertTrue(dataObject == null);
-
- }
-
- @Test
- public void testGetSameTargetObjectOperations() throws Exception {
- List<Operation> operations = new LinkedList<Operation>();
- Operation operation = mock(Operation.class);
-
- List<Operation> list ;
- list = IntentResolverUtils.getSameTargetObjectOperations(operations,operation);
- Assert.assertTrue(list.size() == 0);
- }
-
- @Test
- public void testGetGreaterAndEqualPriorityOperations() throws Exception {
- List<Operation> operations = new LinkedList<Operation>();
- Operation operation = mock(Operation.class);
- List<Operation> greaterPriorityOperations = new LinkedList<Operation>();
- List<Operation> equalPriorityOperations = new LinkedList<Operation>();
-
- IntentResolverUtils.getGreaterAndEqualPriorityOperations(operations,operation,greaterPriorityOperations,equalPriorityOperations);
- }
-
- @Test
- public void testGetConflictingOperation() throws Exception {
- List<Operation> operations = new LinkedList<Operation>();
- Operation operation = mock(Operation.class);
-
- Operation operation1 = IntentResolverUtils.getConflictingOperation(operations,operation);
- Assert.assertTrue(operation1 == null);
- }
-
- @Test
- public void testGetConflictingOperations() throws Exception {
- List<Operation> operations = new LinkedList<Operation>();
- Operation operation = mock(Operation.class);
-
- List<Operation> operations1 = IntentResolverUtils.getConflictingOperations(operations, operation);
- Assert.assertTrue(operations1 == null);
- }
-
- @Test
- public void testGetAction() throws Exception {
- List<Action> actions = new LinkedList<Action>();
- ActionName actionName = mock(ActionName.class);
- Action action = mock(Action.class);
- Action action_test ;
-
- actions.add(action);
- when(action.getActionName())
- .thenReturn(actionName)
- .thenReturn(new ActionName("a"));
- action_test = IntentResolverUtils.getAction(actions,actionName);
- Assert.assertTrue(action_test != null);
- action_test = IntentResolverUtils.getAction(actions,actionName);
- Assert.assertTrue(action_test == null);
- verify(action,times(2)).getActionName();
- }
-
- @Test
- public void testGetSourceVirtualRouterOfFlow() throws Exception {
- VirtualNode virtualNode_test;
- VirtualNode virtualNode = mock(VirtualNode.class);
- Flow flow = mock(Flow.class);
- MatchItemName matchItemName = mock(MatchItemName.class);
- MatchItem matchItem = mock(MatchItem.class);
- MatchItemValue matchItemValue = mock(MatchItemValue.class);
- Node node = mock(Node.class);
- IntentVnMappingResult intentVnMappingResult = mock(IntentVnMappingResult.class);
- List<VirtualNode> virtualNodes = new ArrayList<VirtualNode>();
- List<MatchItem> matchItems = new ArrayList<MatchItem>();
- List<Node> nodes = new ArrayList<Node>();
- List<IntentVnMappingResult> intentVnMappingResults = new ArrayList<IntentVnMappingResult>();
-
- virtualNodes.add(virtualNode);
- nodes.add(node);
- intentVnMappingResults.add(intentVnMappingResult);
- //test private method "getMatchItem"
- when(flow.getMatchItem())
- .thenReturn(null) //test null
- .thenReturn(matchItems) //not null since this time
- .thenReturn(matchItems);
-
- virtualNode_test = IntentResolverUtils.getSourceVirtualRouterOfFlow(virtualNodes,flow,nodes,intentVnMappingResults);
- Assert.assertTrue(virtualNode_test == null);
-
- matchItems.add(matchItem);
- when(matchItem.getMatchItemName())
- .thenReturn(matchItemName)//not same as matchItemName , the value to be return is null
- .thenReturn(new MatchItemName("src-ip"));//same as matchItemName, value to be return is not null
-
- when(matchItem.getMatchItemValue()).thenReturn(matchItemValue);
- when(matchItemValue.getStringValue()).thenReturn(new String("test"));
-
- virtualNode_test = IntentResolverUtils.getSourceVirtualRouterOfFlow(virtualNodes,flow,nodes,intentVnMappingResults);
- Assert.assertTrue(virtualNode_test == null);
-
- ///////////////////////////////////////////////////////
- //test private method "getVirtualRouterWithIpPrefix"
- //test null
- nodes.clear();
- virtualNode_test = IntentResolverUtils.getSourceVirtualRouterOfFlow(virtualNodes,flow,nodes,intentVnMappingResults);
- Assert.assertTrue(virtualNode_test == null);
-
- //test not null
- NodeType layer2GroupNodeType = new NodeType("l2-group");
- NodeType externalGroupNodeType = new NodeType("ext-group");
- org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.VirtualNodeInstance.NodeType VrouterNodeType =
- VirtualNode.NodeType.Vrouter;
- NodeId nodeId = mock(NodeId.class);
- IntentId intentId = new IntentId(new String("00001111-0000-0000-0000-000011112222"));
- List<Property> properties = new ArrayList<Property>();
- List<StringValue> propertyValues_list = new ArrayList<StringValue>();
- List<VirtualResource> virtualResources = new ArrayList<VirtualResource>();
- StringValue stringValue = mock(StringValue.class);
- Property property = mock(Property.class);
- PropertyName propertyName = new PropertyName("ip-prefix");
- PropertyValues propertyValues = mock(PropertyValues.class);
- VirtualResource virtualResource = mock(VirtualResource.class);
- VirtualResourceType virtualResourceType_Vport = VirtualResource.VirtualResourceType.Vport;
- VirtualResourceType virtualResourceType_Vnode = VirtualResource.VirtualResourceType.Vnode;
- VirtualResourceType virtualResourceType_Other = null;
- VirtualResourceEntityId virtualResourceEntityId = mock(VirtualResourceEntityId.class);
-
- virtualResources.add(virtualResource);
- nodes.add(node);
- properties.add(property);
- propertyValues_list.add(stringValue);
-
- when(node.getNodeType())
- .thenReturn(mock(NodeType.class))
- .thenReturn(layer2GroupNodeType)
- .thenReturn(externalGroupNodeType);
- virtualNode_test = IntentResolverUtils.getSourceVirtualRouterOfFlow(virtualNodes, flow, nodes,intentVnMappingResults);
- Assert.assertTrue(virtualNode_test == null);
-
-
- when(node.getProperty()).thenReturn(properties);
- when(property.getPropertyName())
- .thenReturn(mock(PropertyName.class))
- .thenReturn(propertyName);
- virtualNode_test = IntentResolverUtils.getSourceVirtualRouterOfFlow(virtualNodes,flow, nodes, intentVnMappingResults);
- Assert.assertTrue(virtualNode_test == null);
-
- when(property.getPropertyValues()).thenReturn(propertyValues);
- when(propertyValues.getStringValue()).thenReturn(propertyValues_list);
- when(stringValue.getValue())
- .thenReturn(new String("test1"))
- .thenReturn(new String("test"));
- virtualNode_test = IntentResolverUtils.getSourceVirtualRouterOfFlow(virtualNodes, flow, nodes, intentVnMappingResults);
- Assert.assertTrue(virtualNode_test == null);
- verify(stringValue).getValue();
-
- when(node.getNodeId()).thenReturn(nodeId);
- when(nodeId.getValue()).thenReturn(new String("00001111-0000-0000-0000-000011112222"));
- when(intentVnMappingResult.getIntentId())
- .thenReturn(mock(IntentId.class))
- .thenReturn(intentId);
-
- virtualNode_test = IntentResolverUtils.getSourceVirtualRouterOfFlow(virtualNodes,flow,nodes,intentVnMappingResults);
- Assert.assertTrue(virtualNode_test == null);
-
- when(intentVnMappingResult.getVirtualResource()).thenReturn(virtualResources);
- Assert.assertTrue(virtualResources.get(0) == virtualResource);
- when(virtualResource.getVirtualResourceType())
- .thenReturn(virtualResourceType_Other)
- .thenReturn(virtualResourceType_Vport)
- .thenReturn(virtualResourceType_Vnode);
- when(virtualResource.getParentVirtualResourceEntityId()).thenReturn(virtualResourceEntityId);
- when(virtualResource.getVirtualResourceEntityId()).thenReturn(virtualResourceEntityId);
- when(virtualResourceEntityId.getValue()).thenReturn(new String("00001111-0000-0000-0000-000011112222"));
-
- virtualNode_test = IntentResolverUtils.getSourceVirtualRouterOfFlow(virtualNodes,flow,nodes,intentVnMappingResults);
- Assert.assertTrue(virtualNode_test == null);
-
- when(virtualNode.getNodeId())
- .thenReturn(mock(VirtualNodeId.class))
- .thenReturn(new VirtualNodeId(new String("00001111-0000-0000-0000-000011112222")));
-
- virtualNode_test = IntentResolverUtils.getSourceVirtualRouterOfFlow(virtualNodes,flow,nodes,intentVnMappingResults);
- Assert.assertTrue(virtualNode_test == null);
- verify(virtualNode).getNodeId();
-
- when(virtualNode.getNodeType())
- .thenReturn(null)
- .thenReturn(VrouterNodeType);
-
- virtualNode_test = IntentResolverUtils.getSourceVirtualRouterOfFlow(virtualNodes,flow,nodes,intentVnMappingResults);
- Assert.assertTrue(virtualNode_test == null);
- verify(virtualNode).getNodeType();
-
- virtualNode_test = IntentResolverUtils.getSourceVirtualRouterOfFlow(virtualNodes,flow,nodes,intentVnMappingResults);
- Assert.assertTrue(virtualNode_test == virtualNode);
- verify(virtualNode,times(2)).getNodeType();
-
- }
-
- @Test
- public void testGetDestinationVirtualRouterOfFlow() throws Exception {
- VirtualNode virtualNode_test;
- VirtualNode virtualNode = mock(VirtualNode.class);
- Flow flow = mock(Flow.class);
- MatchItemName matchItemName = mock(MatchItemName.class);
- MatchItem matchItem = mock(MatchItem.class);
- MatchItemValue matchItemValue = mock(MatchItemValue.class);
- Node node = mock(Node.class);
- IntentVnMappingResult intentVnMappingResult = mock(IntentVnMappingResult.class);
- List<VirtualNode> virtualNodes = new ArrayList<VirtualNode>();
- List<MatchItem> matchItems = new ArrayList<MatchItem>();
- List<Node> nodes = new ArrayList<Node>();
- List<IntentVnMappingResult> intentVnMappingResults = new ArrayList<IntentVnMappingResult>();
-
- virtualNodes.add(virtualNode);
- nodes.add(node);
- intentVnMappingResults.add(intentVnMappingResult);
- //test private method "getMatchItem"
- when(flow.getMatchItem())
- .thenReturn(null) //test null
- .thenReturn(matchItems) //not null since this time
- .thenReturn(matchItems);
-
- virtualNode_test = IntentResolverUtils.getDestinationVirtualRouterOfFlow(virtualNodes, flow, nodes, intentVnMappingResults);
- Assert.assertTrue(virtualNode_test == null);
-
- matchItems.add(matchItem);
- when(matchItem.getMatchItemName())
- .thenReturn(matchItemName)//not same as matchItemName , the value to be return is null
- .thenReturn(new MatchItemName("dst-ip"));//same as matchItemName, value to be return is not null
-
- when(matchItem.getMatchItemValue()).thenReturn(matchItemValue);
- when(matchItemValue.getStringValue()).thenReturn(new String("test"));
-
- virtualNode_test = IntentResolverUtils.getDestinationVirtualRouterOfFlow(virtualNodes, flow, nodes, intentVnMappingResults);
- Assert.assertTrue(virtualNode_test == null);
-
- ///////////////////////////////////////////////////////
- //test private method "getVirtualRouterWithIpPrefix"
- //test null
- nodes.clear();
- virtualNode_test = IntentResolverUtils.getDestinationVirtualRouterOfFlow(virtualNodes, flow, nodes, intentVnMappingResults);
- Assert.assertTrue(virtualNode_test == null);
-
- //test not null
- NodeType layer2GroupNodeType = new NodeType("l2-group");
- NodeType externalGroupNodeType = new NodeType("ext-group");
- org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.VirtualNodeInstance.NodeType VrouterNodeType =
- VirtualNode.NodeType.Vrouter;
- NodeId nodeId = mock(NodeId.class);
- IntentId intentId = new IntentId(new String("00001111-0000-0000-0000-000011112222"));
- List<Property> properties = new ArrayList<Property>();
- List<StringValue> propertyValues_list = new ArrayList<StringValue>();
- List<VirtualResource> virtualResources = new ArrayList<VirtualResource>();
- StringValue stringValue = mock(StringValue.class);
- Property property = mock(Property.class);
- PropertyName propertyName = new PropertyName("ip-prefix");
- PropertyValues propertyValues = mock(PropertyValues.class);
- VirtualResource virtualResource = mock(VirtualResource.class);
- VirtualResourceType virtualResourceType_Vport = VirtualResource.VirtualResourceType.Vport;
- VirtualResourceType virtualResourceType_Vnode = VirtualResource.VirtualResourceType.Vnode;
- VirtualResourceType virtualResourceType_Other = null;
- VirtualResourceEntityId virtualResourceEntityId = mock(VirtualResourceEntityId.class);
-
- virtualResources.add(virtualResource);
- nodes.add(node);
- properties.add(property);
- propertyValues_list.add(stringValue);
-
- when(node.getNodeType())
- .thenReturn(mock(NodeType.class))
- .thenReturn(layer2GroupNodeType)
- .thenReturn(externalGroupNodeType);
- virtualNode_test = IntentResolverUtils.getDestinationVirtualRouterOfFlow(virtualNodes, flow, nodes, intentVnMappingResults);
- Assert.assertTrue(virtualNode_test == null);
-
-
- when(node.getProperty()).thenReturn(properties);
- when(property.getPropertyName())
- .thenReturn(mock(PropertyName.class))
- .thenReturn(propertyName);
- virtualNode_test = IntentResolverUtils.getDestinationVirtualRouterOfFlow(virtualNodes, flow, nodes, intentVnMappingResults);
- Assert.assertTrue(virtualNode_test == null);
-
- when(property.getPropertyValues()).thenReturn(propertyValues);
- when(propertyValues.getStringValue()).thenReturn(propertyValues_list);
- when(stringValue.getValue())
- .thenReturn(new String("test1"))
- .thenReturn(new String("test"));
- virtualNode_test = IntentResolverUtils.getDestinationVirtualRouterOfFlow(virtualNodes, flow, nodes, intentVnMappingResults);
- Assert.assertTrue(virtualNode_test == null);
- verify(stringValue).getValue();
-
- when(node.getNodeId()).thenReturn(nodeId);
- when(nodeId.getValue()).thenReturn(new String("00001111-0000-0000-0000-000011112222"));
- when(intentVnMappingResult.getIntentId())
- .thenReturn(mock(IntentId.class))
- .thenReturn(intentId);
-
- virtualNode_test = IntentResolverUtils.getDestinationVirtualRouterOfFlow(virtualNodes, flow, nodes, intentVnMappingResults);
- Assert.assertTrue(virtualNode_test == null);
-
- when(intentVnMappingResult.getVirtualResource()).thenReturn(virtualResources);
- Assert.assertTrue(virtualResources.get(0) == virtualResource);
- when(virtualResource.getVirtualResourceType())
- .thenReturn(virtualResourceType_Other)
- .thenReturn(virtualResourceType_Vport)
- .thenReturn(virtualResourceType_Vnode);
- when(virtualResource.getParentVirtualResourceEntityId()).thenReturn(virtualResourceEntityId);
- when(virtualResource.getVirtualResourceEntityId()).thenReturn(virtualResourceEntityId);
- when(virtualResourceEntityId.getValue()).thenReturn(new String("00001111-0000-0000-0000-000011112222"));
-
- virtualNode_test = IntentResolverUtils.getDestinationVirtualRouterOfFlow(virtualNodes, flow, nodes, intentVnMappingResults);
- Assert.assertTrue(virtualNode_test == null);
-
- when(virtualNode.getNodeId())
- .thenReturn(mock(VirtualNodeId.class))
- .thenReturn(new VirtualNodeId(new String("00001111-0000-0000-0000-000011112222")));
-
- virtualNode_test = IntentResolverUtils.getDestinationVirtualRouterOfFlow(virtualNodes, flow, nodes, intentVnMappingResults);
- Assert.assertTrue(virtualNode_test == null);
- verify(virtualNode).getNodeId();
-
- when(virtualNode.getNodeType())
- .thenReturn(null)
- .thenReturn(VrouterNodeType);
-
- virtualNode_test = IntentResolverUtils.getDestinationVirtualRouterOfFlow(virtualNodes, flow, nodes, intentVnMappingResults);
- Assert.assertTrue(virtualNode_test == null);
- verify(virtualNode).getNodeType();
-
- virtualNode_test = IntentResolverUtils.getDestinationVirtualRouterOfFlow(virtualNodes,flow,nodes,intentVnMappingResults);
- Assert.assertTrue(virtualNode_test == virtualNode);
- verify(virtualNode,times(2)).getNodeType();
- }
-
- @Test
- public void testSortVirtualResources() throws Exception {
- List<VirtualResource> virtualResources = new ArrayList<VirtualResource>();
- VirtualResource virtualResource = mock(VirtualResource.class);
- VirtualResource virtualResource1 = mock(VirtualResource.class);
- List<VirtualResource> result ;
- long first = 0;
- long second = 1;
-
- //test empty
- Assert.assertTrue(virtualResources.size() == 0);
- result = IntentResolverUtils.sortVirtualResources(virtualResources);
- Assert.assertTrue(result.size() == 0);
-
- //test 1
- virtualResources.add(virtualResource);
- Assert.assertTrue(virtualResources.size() == 1);
- result = IntentResolverUtils.sortVirtualResources(virtualResources);
- Assert.assertNotNull(result);
-
- //test >1
- virtualResources.add(virtualResource1);
- Assert.assertTrue(virtualResources.size() == 2);
- when(virtualResource.getOrder()).thenReturn(first);
- when(virtualResource1.getOrder()).thenReturn(second);
- result = IntentResolverUtils.sortVirtualResources(virtualResources);
- Assert.assertTrue(result.size() == 2);
- Assert.assertTrue(result.get(0) == virtualResource);
-
- }
-}
\ No newline at end of file