From 23c73e3bb10bafe9f1b13eb48dbe511e44e2f61d Mon Sep 17 00:00:00 2001 From: Zhigang Ji Date: Wed, 13 Jan 2016 16:12:35 +0800 Subject: [PATCH 1/1] Modify intent handler. Change-Id: Ie706e63fc42793a7dd394f6511bf27ee1b1b9ae5 Signed-off-by: Zhigang Ji --- .../nemo/intent/IntentResolver.java | 2 + .../nemo/intent/IntentResolverUtils.java | 63 +-- .../opendaylight/nemo/intent/NodeMapper.java | 54 +-- .../intent/computation/VNMappingUnit.java | 5 + .../nemo/intent/IntentResolverTest.java | 408 ------------------ 5 files changed, 67 insertions(+), 465 deletions(-) delete mode 100644 nemo-impl/src/test/java/org/opendaylight/nemo/intent/IntentResolverTest.java diff --git a/nemo-impl/src/main/java/org/opendaylight/nemo/intent/IntentResolver.java b/nemo-impl/src/main/java/org/opendaylight/nemo/intent/IntentResolver.java index d8d03e5..472e9bd 100644 --- a/nemo-impl/src/main/java/org/opendaylight/nemo/intent/IntentResolver.java +++ b/nemo-impl/src/main/java/org/opendaylight/nemo/intent/IntentResolver.java @@ -395,6 +395,8 @@ public class IntentResolver implements AutoCloseable { } } + IntentResolverUtils.copyPhysicalNetworkConfigToOperational(dataBroker); + vnMappingUnit.virtualNetworkMapping(virtualNetwork, userVnPnMapping, physicalPaths); vnComputationUnit = new VNComputationUnit(dataBroker, virtualNetwork); vnComputationUnits.put(userId, vnComputationUnit); diff --git a/nemo-impl/src/main/java/org/opendaylight/nemo/intent/IntentResolverUtils.java b/nemo-impl/src/main/java/org/opendaylight/nemo/intent/IntentResolverUtils.java index ffd1810..a3cce23 100644 --- a/nemo-impl/src/main/java/org/opendaylight/nemo/intent/IntentResolverUtils.java +++ b/nemo-impl/src/main/java/org/opendaylight/nemo/intent/IntentResolverUtils.java @@ -8,10 +8,7 @@ package org.opendaylight.nemo.intent; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ExecutionException; - +import com.google.common.base.Optional; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; @@ -20,12 +17,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic. 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.nemo.common.rev151010.ConnectionId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.FlowId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.IntentId; -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.common.rev151010.ObjectId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.PropertyName; +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; @@ -34,14 +27,19 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.int 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.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.common.base.Optional; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutionException; /** * Implement the common utilities frequently used in @@ -50,7 +48,6 @@ import com.google.common.base.Optional; * @author Zhigang Ji */ public class IntentResolverUtils { - private static final Logger LOG = LoggerFactory.getLogger(IntentResolverUtils.class); /** @@ -469,38 +466,42 @@ public class IntentResolverUtils { return null; } - public static void copyPhysicalNetworkConfigToOperational(DataBroker dataBroker) { final InstanceIdentifier physicalNetworkIid = InstanceIdentifier - .builder(PhysicalNetwork.class).build(); + .builder(PhysicalNetwork.class) + .build(); final ReadWriteTransaction txn = dataBroker.newReadWriteTransaction(); try { final Optional oper = txn.read(LogicalDatastoreType.OPERATIONAL, physicalNetworkIid).get(); - if (oper.isPresent()) { - txn.cancel(); - LOG.info("Physical network already exists in operational"); - } else { - final Optional config = txn.read(LogicalDatastoreType.CONFIGURATION, - physicalNetworkIid).get(); - - if (config.isPresent()) { - txn.put(LogicalDatastoreType.OPERATIONAL, physicalNetworkIid, config.get()); - txn.submit().get(); - LOG.info("Copied physical network from config to operational"); - } else { + if ( oper.isPresent() ) { + PhysicalNetwork physicalNetwork = oper.get(); + + if ( null != physicalNetwork.getPhysicalNodes() ) { txn.cancel(); - LOG.info("No physical network found in config; none copied to operational"); + LOG.info("Physical network already exists in operational"); + + return; } } + + final Optional config = txn.read(LogicalDatastoreType.CONFIGURATION, + physicalNetworkIid).get(); + + if (config.isPresent()) { + txn.put(LogicalDatastoreType.OPERATIONAL, physicalNetworkIid, config.get()); + txn.submit().get(); + LOG.info("Copied physical network from config to operational"); + } else { + txn.cancel(); + LOG.info("No physical network found in config; none copied to operational"); + } } catch (InterruptedException exception) { - LOG.error("Cannot copy the physical hosts.", exception); + LOG.error("Cannot copy the physical network.", exception); } catch (ExecutionException exception) { - LOG.error("Cannot copy the physical hosts.", exception); + LOG.error("Cannot copy the physical network.", exception); } - } - } diff --git a/nemo-impl/src/main/java/org/opendaylight/nemo/intent/NodeMapper.java b/nemo-impl/src/main/java/org/opendaylight/nemo/intent/NodeMapper.java index 95aa0f0..ea08564 100644 --- a/nemo-impl/src/main/java/org/opendaylight/nemo/intent/NodeMapper.java +++ b/nemo-impl/src/main/java/org/opendaylight/nemo/intent/NodeMapper.java @@ -281,41 +281,43 @@ public class NodeMapper { IntentVnMappingResult intentVnMappingResult; VirtualNode virtualNode; - for ( SubNode subNode : subNodes ) { - node1 = IntentResolverUtils.getNode(nodes, subNode.getNodeId()); + if ( null != subNodes ) { + for ( SubNode subNode : subNodes ) { + node1 = IntentResolverUtils.getNode(nodes, subNode.getNodeId()); - if ( null == node1 ) { - throw new IntentResolutionException("The sub-node " + subNode.getNodeId().getValue() + - " of the node " + node.getNodeId().getValue() + " does not exist."); - } - - if ( node1.getNodeType().equals(nodeType) ) { - if ( IntentResolverUtils.checkExternalLayer3Group(node1) ) { + if ( null == node1 ) { throw new IntentResolutionException("The sub-node " + subNode.getNodeId().getValue() + - " of the node " + node.getNodeId().getValue() + " can't be layer3 group."); + " of the node " + node.getNodeId().getValue() + " does not exist."); } - resolveExternalLayer2Group(user, node1, virtualNetwork, userIntentVnMapping, false); - } + if ( node1.getNodeType().equals(nodeType) ) { + if ( IntentResolverUtils.checkExternalLayer3Group(node1) ) { + throw new IntentResolutionException("The sub-node " + subNode.getNodeId().getValue() + + " of the node " + node.getNodeId().getValue() + " can't be layer3 group."); + } - intentVnMappingResult = IntentResolverUtils.getIntentVnMappingResult(intentVnMappingResults, - new IntentId(node1.getNodeId().getValue())); + resolveExternalLayer2Group(user, node1, virtualNetwork, userIntentVnMapping, false); + } - if ( null == intentVnMappingResult ) { - throw new IntentResolutionException("Can not get the intent-vn mapping result for " + - "the node " + node1.getNodeId().getValue() + "."); - } + intentVnMappingResult = IntentResolverUtils.getIntentVnMappingResult(intentVnMappingResults, + new IntentId(node1.getNodeId().getValue())); - virtualNode = IntentResolverUtils.getVirtualNode(virtualNodes, - new VirtualNodeId(intentVnMappingResult.getVirtualResource().get(0) - .getParentVirtualResourceEntityId().getValue())); + if ( null == intentVnMappingResult ) { + throw new IntentResolutionException("Can not get the intent-vn mapping result for " + + "the node " + node1.getNodeId().getValue() + "."); + } - if ( null == virtualNode ) { - throw new IntentResolutionException("Can not get the virtual node created for " + - "the node " + node1.getNodeId().getValue() + "."); - } + virtualNode = IntentResolverUtils.getVirtualNode(virtualNodes, + new VirtualNodeId(intentVnMappingResult.getVirtualResource().get(0) + .getParentVirtualResourceEntityId().getValue())); - virtualSwitches.add(virtualNode); + if ( null == virtualNode ) { + throw new IntentResolutionException("Can not get the virtual node created for " + + "the node " + node1.getNodeId().getValue() + "."); + } + + virtualSwitches.add(virtualNode); + } } Property locationProperty = IntentResolverUtils diff --git a/nemo-impl/src/main/java/org/opendaylight/nemo/intent/computation/VNMappingUnit.java b/nemo-impl/src/main/java/org/opendaylight/nemo/intent/computation/VNMappingUnit.java index bad4d7d..17e6009 100644 --- a/nemo-impl/src/main/java/org/opendaylight/nemo/intent/computation/VNMappingUnit.java +++ b/nemo-impl/src/main/java/org/opendaylight/nemo/intent/computation/VNMappingUnit.java @@ -115,6 +115,11 @@ public class VNMappingUnit implements AutoCloseable { throw new VNMappingException("Can not read the physical nodes."); } + if ( !result.isPresent() ) { + throw new VNMappingException("Failed virtual network mapping caused by " + + "absent underlying network topology."); + } + PhysicalNodes physicalNodes = result.get(); List physicalNodeList = physicalNodes.getPhysicalNode(); diff --git a/nemo-impl/src/test/java/org/opendaylight/nemo/intent/IntentResolverTest.java b/nemo-impl/src/test/java/org/opendaylight/nemo/intent/IntentResolverTest.java deleted file mode 100644 index bbbd075..0000000 --- a/nemo-impl/src/test/java/org/opendaylight/nemo/intent/IntentResolverTest.java +++ /dev/null @@ -1,408 +0,0 @@ -/* - * Copyright (c) 2015 Huawei, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.nemo.intent; - -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.*; -import com.google.common.base.Optional; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.nemo.intent.computation.PNComputationUnit; -import org.opendaylight.nemo.intent.computation.PNResourcesTracker; -import org.opendaylight.nemo.intent.computation.VNComputationUnit; -import org.opendaylight.nemo.intent.computation.VNMappingUnit; -import org.opendaylight.nemo.intent.condition.ConditionManager; -import org.opendaylight.nemo.user.vnspacemanager.structurestyle.updateintent.UpdateIntent; -import org.opendaylight.nemo.user.vnspacemanager.structurestyle.updateintent.UpdateNode; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.PhysicalNetwork; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.PhysicalPaths; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.paths.PhysicalPath; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.paths.PhysicalPathKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.VirtualNetworks; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.VirtualNetwork; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.VirtualNetworkBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.VirtualNetworkKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.*; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.arps.VirtualArp; -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.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.paths.VirtualPath; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.routes.VirtualRoute; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.IntentVnMappingResults; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.VnPnMappingResults; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.intent.vn.mapping.results.UserIntentVnMapping; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.intent.vn.mapping.results.UserIntentVnMappingBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.intent.vn.mapping.results.UserIntentVnMappingKey; -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.vn.pn.mapping.results.UserVnPnMapping; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.vn.pn.mapping.results.UserVnPnMappingBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.vn.pn.mapping.results.UserVnPnMappingKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.vn.pn.mapping.results.user.vn.pn.mapping.VnPnMappingResult; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.NodeType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.UserId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.PhysicalPathId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.VirtualNetworkId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.Users; -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.Objects; -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.intent.rev151010.users.User; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.users.UserKey; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ExecutionException; - -import java.util.List; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.LinkedList; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import java.util.*; -import java.util.List; - -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.PhysicalLinks; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.PhysicalNodes; -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -import com.google.common.util.concurrent.CheckedFuture; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; -import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.Operations; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.Results; -import static org.junit.Assert.*; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.VirtualResourceInstance.VirtualResourceType; -import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.PhysicalResourceEntityId; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.PhysicalNodeId; -import org.mockito.Mockito; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.api.support.membermodification.MemberMatcher; -import org.powermock.api.support.membermodification.MemberModifier; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.ObjectId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.PhysicalHosts; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.hosts.PhysicalHost; -import static org.mockito.Mockito.doNothing; -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.node.instance.Property; -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.object.rev151010.property.instance.PropertyValues; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.PropertyName; -/** - * Created by ldzd11 on 2015/12/24. - */ - -@RunWith(PowerMockRunner.class) -@PrepareForTest(IntentResolverUtils.class) -public class IntentResolverTest { - private IntentResolver intentResolver; - private DataBroker dataBroker; - private UserId userId; - private List vnPnMappingResults; - private VnPnMappingResult vnPnMappingResult; - private VirtualResourceType virtualResourceType; - private PhysicalResourceEntityId physicalResourceEntityId; - private Objects objects; - private List nodeList; - private Node node; - private NodeType nodeType; - private List connections; - private Connection connection; - private List flows; - private Flow flow; - private Operations operations; - private List operationList; - private Operation operation; - private ObjectId objectId; - private NodeId nodeId; - private List physicalHostList; - private PhysicalHost physicalHost; - private Property property; - private List propertyList; - private PropertyValues propertyValues; - private StringValue stringValue; - private List stringValueList; - - - @Before - public void setUp() throws Exception { - dataBroker = mock(DataBroker.class); - userId = mock(UserId.class); - - vnPnMappingResults = new ArrayList(); - vnPnMappingResult = mock(VnPnMappingResult.class); - vnPnMappingResults.add(vnPnMappingResult); - - virtualResourceType = VnPnMappingResult.VirtualResourceType.Vlink; - physicalResourceEntityId =mock(PhysicalResourceEntityId.class); - objects = mock(Objects.class); - nodeList = new ArrayList(); - node = mock(Node.class); - nodeList.add(node); - nodeType = mock(NodeType.class); - connections = new ArrayList(); - connection = mock(Connection.class); - connections.add(connection); - flows = new ArrayList(); - flow = mock(Flow.class); - flows.add(flow); - operations = mock(Operations.class); - operationList = new ArrayList(); - operation = mock(Operation.class); - operationList.add(operation); - objectId = mock(ObjectId.class); - nodeId = mock(NodeId.class); - - physicalHostList = new ArrayList(); - physicalHost = mock(PhysicalHost.class); - physicalHostList.add(physicalHost); - property = mock(Property.class); - propertyList = new ArrayList(); - propertyList.add(property); - propertyValues = mock(PropertyValues.class); - stringValueList = new ArrayList(); - stringValue = mock(StringValue.class); - stringValueList.add(stringValue); - - - - - //into PNC to result - ReadOnlyTransaction readOnlyTransaction = mock(ReadOnlyTransaction.class); - when(dataBroker.newReadOnlyTransaction()).thenReturn(readOnlyTransaction); - - CheckedFuture physicalnodesFuture = mock(CheckedFuture.class); - CheckedFuture physicallinksFuture = mock(CheckedFuture.class); - when(readOnlyTransaction.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class))).thenReturn(physicalnodesFuture).thenReturn(physicallinksFuture); - - //////////////////first result///////////////////// - PhysicalNodes physicalNodes = mock(PhysicalNodes.class); - Optional result = Optional.of(physicalNodes); - Assert.assertTrue(result.isPresent()); - when(physicalnodesFuture.get()).thenReturn(result); - - ///////////////////Second result/////////////////////// - PhysicalLinks physicalLinks = mock(PhysicalLinks.class); - Optional result1 = Optional.of(physicalLinks); - Assert.assertTrue(result1.isPresent()); - when(physicallinksFuture.get()).thenReturn(result1); - - intentResolver = new IntentResolver(dataBroker); - } - - @Test - public void testResolveIntent() throws Exception { - - Class class1 = IntentResolver.class; - - CheckedFuture userVnPnMappingIidFuture = mock(CheckedFuture.class); - CheckedFuture userFuture = mock(CheckedFuture.class); - CheckedFuture physicalHostsFuture = mock(CheckedFuture.class); - - ReadWriteTransaction readWriteTransaction = mock(ReadWriteTransaction.class); - when(dataBroker.newReadWriteTransaction()).thenReturn(readWriteTransaction); - ReadOnlyTransaction readOnlyTransaction = mock(ReadOnlyTransaction.class); - when(dataBroker.newReadOnlyTransaction()).thenReturn(readOnlyTransaction); - - when(readWriteTransaction.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class))).thenReturn(userVnPnMappingIidFuture).thenReturn(userFuture); - when(readOnlyTransaction.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class))).thenReturn(physicalHostsFuture); - - - when(userId.getValue()).thenReturn(new String("00001111-0000-0000-0000-000011112222")); - //////////////152 forvnComputationUnits.get(userId) into if null != vnComputationUnit - Map vnComputationUnits = new HashMap(); - VNComputationUnit vnComputationUnit = mock(VNComputationUnit.class); - vnComputationUnits.put(userId, vnComputationUnit); - - Field field1 = class1.getDeclaredField("vnComputationUnits"); - field1.setAccessible(true); - field1.set(intentResolver, vnComputationUnits);//for 170 - //into null!=vncomputionUnit - - ////////////////////the result1//////////////////////// - UserVnPnMapping userVnPnMapping = mock(UserVnPnMapping.class); - Optional result1 = Optional.of(userVnPnMapping); - Assert.assertTrue(result1.isPresent()); - when(userVnPnMappingIidFuture.get()).thenReturn(result1); - - //187 into result1.is present - when(userVnPnMapping.getVnPnMappingResult()).thenReturn(vnPnMappingResults); - when(vnPnMappingResult.getVirtualResourceType()).thenReturn(virtualResourceType); - when(vnPnMappingResult.getPhysicalResourceEntityId()).thenReturn(physicalResourceEntityId); - when(vnPnMappingResult.getPhysicalResourceEntityId().getValue()).thenReturn(new String("00001111-0000-0000-0000-000011112222")); - - //end of 212 - //////////////////the result2//////////////////////////////// - User user = mock(User.class); - Optional result2 = Optional.of(user); - Assert.assertTrue(result2.isPresent()); - when(userFuture.get()).thenReturn(result2); - - ////////into null!-user.getObjects - when(user.getObjects()).thenReturn(objects); - when(user.getObjects().getNode()).thenReturn(nodeList); - ////////////////////1///////////////////////////////// - nodeType = new NodeType("host"); - when(node.getNodeType()).thenReturn(nodeType); - ////////////////////into nodeMapper.resolverHosr for nodes - NodeMapper nodeMapper = mock(NodeMapper.class); - Field field2 = class1.getDeclaredField("nodeMapper"); - field2.setAccessible(true); - field2.set(intentResolver, nodeMapper);//for 170 - doNothing().when(nodeMapper).resolveHost(any(User.class), any(Node.class), any(VirtualNetwork.class), any(UserIntentVnMapping.class)); - - ///////////////////2////////////////////////////// - nodeType = new NodeType("l2-group"); - when(node.getNodeType()).thenReturn(nodeType); - ////////////////////into nodeMapper.resolverHosr for nodes - doNothing().when(nodeMapper).resolveLayer2Group(any(User.class), any(Node.class), any(VirtualNetwork.class), any(UserIntentVnMapping.class)); - - //////////////////////3/////////////////////////////// - nodeType = new NodeType("l3-group"); - when(node.getNodeType()).thenReturn(nodeType); - ////////////////////into nodeMapper.resolverHosr for nodes - doNothing().when(nodeMapper).resolveLayer3Group(any(User.class), any(Node.class), any(VirtualNetwork.class), any(UserIntentVnMapping.class)); - - //////////////////////4/////////////////////////////// - nodeType = new NodeType("ext-group"); - when(node.getNodeType()).thenReturn(nodeType); - ////////////////////into nodeMapper.resolverHosr for nodes - when(node.getProperty()).thenReturn(propertyList); - PropertyName propertyName = new PropertyName("ac-info-network"); - when(property.getPropertyName()).thenReturn(propertyName); - when(property.getPropertyValues()).thenReturn(propertyValues); - when(property.getPropertyValues().getStringValue()).thenReturn(stringValueList); - when(property.getPropertyValues().getStringValue().get(0).getValue()).thenReturn(new String("layer3")); - doNothing().when(nodeMapper).resolveExternalLayer3Group(any(User.class), any(Node.class), any(VirtualNetwork.class), any(UserIntentVnMapping.class)); - - //////////////////////5/////////////////////////////// - nodeType = new NodeType("chain-group"); - when(node.getNodeType()).thenReturn(nodeType); - ////////////////////into nodeMapper.resolverHosr for nodes - doNothing().when(nodeMapper).resolveServiceChainGroup(any(User.class), any(Node.class), any(VirtualNetwork.class), any(UserIntentVnMapping.class)); - - //////////////////////6/////////////////////////////// - nodeType = new NodeType("fw"); - when(node.getNodeType()).thenReturn(nodeType); - ////////////////////into nodeMapper.resolverHosr for nodes - doNothing().when(nodeMapper).resolveServiceFunction(any(User.class), any(Node.class), any(VirtualNetwork.class), any(UserIntentVnMapping.class)); - - //////////////////////6/////////////////////////////// - nodeType = new NodeType("lb"); - when(node.getNodeType()).thenReturn(nodeType); - ////////////////////into nodeMapper.resolverHosr for nodes - doNothing().when(nodeMapper).resolveServiceFunction(any(User.class), any(Node.class), any(VirtualNetwork.class), any(UserIntentVnMapping.class)); - - //////////////////////6/////////////////////////////// - nodeType = new NodeType("cache"); - when(node.getNodeType()).thenReturn(nodeType); - ////////////////////into nodeMapper.resolverHosr for nodes - doNothing().when(nodeMapper).resolveServiceFunction(any(User.class), any(Node.class), any(VirtualNetwork.class), any(UserIntentVnMapping.class)); - - - //////////////////////connection/////////////////////////// - when(user.getObjects().getConnection()).thenReturn(connections); - ConnectionMapper connectionMapper = mock(ConnectionMapper.class); - Field field4 = class1.getDeclaredField("connectionMapper"); - field4.setAccessible(true); - field4.set(intentResolver, connectionMapper);//for 170 - doNothing().when(connectionMapper).resolveConnection(any(User.class), any(Connection.class), any(VirtualNetwork.class), any(UserIntentVnMapping.class)); - - //////////////////////flow/////////////////////////// - when(user.getObjects().getFlow()).thenReturn(flows); - //////////////////////operation/////////////////////////// - when(user.getOperations()).thenReturn(operations); - when(user.getOperations().getOperation()).thenReturn(operationList); - - - //into operationResolver.classifyOperations - OperationResolver operationResolver =mock(OperationResolver.class); - Field field3 = class1.getDeclaredField("operationResolver"); - field3.setAccessible(true); - field3.set(intentResolver, operationResolver); - doNothing().when(operationResolver).classifyOperations(any(User.class), any(List.class), any(List.class), any(List.class), any(List.class)); - doNothing().when(operationResolver).resolveOperation(any(User.class), any(Operation.class), any(VirtualNetwork.class), any(UserIntentVnMapping.class)); - - //392vnMappingUnit - VNMappingUnit vnMappingUnit = mock(VNMappingUnit.class); - Field field5 = class1.getDeclaredField("vnMappingUnit"); - field5.setAccessible(true); - field5.set(intentResolver, vnMappingUnit);//for 170 - doNothing().when(vnMappingUnit).virtualNetworkMapping(any(VirtualNetwork.class), any(UserVnPnMapping.class), any(List.class)); - - intentResolver.resolveIntent(userId); - } - - @Test - public void testClose() throws Exception { - Class class1 = IntentResolver.class; - PNComputationUnit pnComputationUnit = mock(PNComputationUnit.class); - - VNComputationUnit vnComputationUnit = mock(VNComputationUnit.class); - Map vnComputationUnits = new HashMap(); - vnComputationUnits.put(userId,vnComputationUnit); - - PNResourcesTracker pnResourcesTracker = mock(PNResourcesTracker.class); - VNMappingUnit vnMappingUnit = mock(VNMappingUnit.class); - - - Field field1 = class1.getDeclaredField("pnComputationUnit"); - field1.setAccessible(true); - field1.set(intentResolver, pnComputationUnit); - - Field field2 = class1.getDeclaredField("vnComputationUnits"); - field2.setAccessible(true); - field2.set(intentResolver, vnComputationUnits); - - Field field3 = class1.getDeclaredField("pnResourcesTracker"); - field3.setAccessible(true); - field3.set(intentResolver, pnResourcesTracker); - - Field field4 = class1.getDeclaredField("vnMappingUnit"); - field4.setAccessible(true); - field4.set(intentResolver, vnMappingUnit); - - intentResolver.close(); - - } -} -- 2.36.6