2 * Copyright (c) 2015 Huawei, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.nemo.intent.action;
10 import junit.framework.TestCase;
11 import org.junit.Assert;
12 import org.junit.Before;
13 import org.junit.Test;
15 import static org.junit.Assert.*;
17 import org.junit.runner.RunWith;
18 import org.opendaylight.nemo.intent.IntentResolverUtils;
19 import org.opendaylight.nemo.intent.computation.VNMappingUnit;
20 import org.opendaylight.nemo.intent.computation.VNMappingUnitUtils;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.nodes.VirtualNode;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.paths.VirtualPath;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.paths.VirtualPathBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.path.instance.VirtualLink;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.path.instance.VirtualLinkBuilder;
26 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;
27 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;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.*;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.property.instance.PropertyValues;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.VirtualLinkId;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.VirtualNodeId;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.VirtualPathId;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Flow;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Node;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.flow.instance.MatchItem;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.node.instance.Property;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.property.instance.property.values.StringValue;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.operation.instance.Action;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.match.item.instance.MatchItemValue;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.VirtualResourceEntityId;
41 import org.powermock.api.mockito.PowerMockito;
42 import org.powermock.api.support.membermodification.MemberMatcher;
43 import org.powermock.api.support.membermodification.MemberModifier;
44 import org.powermock.core.classloader.annotations.PrepareForTest;
45 import org.powermock.modules.junit4.PowerMockRunner;
46 import java.util.ArrayList;
47 import java.util.LinkedList;
48 import java.util.List;
49 import java.util.UUID;
50 import static org.mockito.Mockito.*;
52 * Created by zhangmeng on 2015/12/25.
54 @RunWith(PowerMockRunner.class)
55 @PrepareForTest({ActionResolverUtils.class,IntentResolverUtils.class})
56 public class ActionResolverUtilsTest extends TestCase {
57 private ActionResolverUtils actionResolverUtils;
59 public void setUp() throws Exception {
60 actionResolverUtils = new ActionResolverUtils();
64 public void testGetAction() throws Exception {
65 List<Action> actions = new ArrayList<Action>();
66 ActionName actionName = mock(ActionName.class);
67 Action action = mock(Action.class);
71 when(action.getActionName())
72 .thenReturn(mock(ActionName.class))
73 .thenReturn(actionName);
75 Assert.assertTrue(ActionResolverUtils.getAction(actions,actionName) == null);
76 Assert.assertTrue(ActionResolverUtils.getAction(actions,actionName) == action);
81 public void testModifyVirtualLinkBandwidth() throws Exception {
82 List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.links.VirtualLink>
83 virtualLinks = new ArrayList<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.links.VirtualLink>();
84 VirtualLinkId virtualLinkId = mock(VirtualLinkId.class);
85 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.links.VirtualLink
86 virtualLink = mock(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.links.VirtualLink.class);
89 virtualLinks.add(virtualLink);
91 when(virtualLink.getLinkId())
92 .thenReturn(mock(VirtualLinkId.class))
93 .thenReturn(virtualLinkId);
95 ActionResolverUtils.modifyVirtualLinkBandwidth(virtualLinks, virtualLinkId, bandwidth);
96 ActionResolverUtils.modifyVirtualLinkBandwidth(virtualLinks,virtualLinkId,bandwidth);
97 verify(virtualLink, times(4)).getLinkId();
101 public void testSortVirtualResources() throws Exception {
102 List<VirtualResource> virtualResources = new ArrayList<VirtualResource>();
103 Assert.assertTrue(ActionResolverUtils.sortVirtualResources(virtualResources) == virtualResources);
105 VirtualResource virtualResource = mock(VirtualResource.class);
106 VirtualResource virtualResource1 = mock(VirtualResource.class);
108 virtualResources.add(virtualResource);
109 virtualResources.add(virtualResource1);
111 when(virtualResource.getOrder()).thenReturn(1L);
112 when(virtualResource1.getOrder()).thenReturn(0L);
113 Assert.assertTrue(ActionResolverUtils.sortVirtualResources(virtualResources).get(0) == virtualResource1);
117 public void testSortParameterValues() throws Exception {
118 List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.StringValue>
119 parameterValues = new ArrayList<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.StringValue>();
120 Assert.assertTrue(ActionResolverUtils.sortParameterValues(parameterValues) == parameterValues);
122 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.StringValue
123 parameterValue = mock(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.StringValue.class);
124 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.StringValue
125 parameterValue1 = mock(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.StringValue.class);
127 parameterValues.add(parameterValue);
128 parameterValues.add(parameterValue1);
130 when(parameterValue.getOrder()).thenReturn(1L);
131 when(parameterValue1.getOrder()).thenReturn(0L);
132 Assert.assertTrue(ActionResolverUtils.sortParameterValues(parameterValues).get(0) == parameterValue1);
136 public void testGetSourceVirtualRouterOfFlow() throws Exception {
137 List<VirtualNode> virtualNodes = new ArrayList<VirtualNode>();
138 VirtualNode virtualNode = mock(VirtualNode.class);
139 Flow flow = mock(Flow.class);
140 NodeId nodeId = mock(NodeId.class);
141 Node node = mock(Node.class);
142 Property property = mock(Property.class);
143 VirtualResource virtualResource = mock(VirtualResource.class);
144 PropertyValues propertyValues_temp = mock(PropertyValues.class);
145 MatchItem matchItem = mock(MatchItem.class);
146 StringValue stringValue = mock(StringValue.class);
147 MatchItemValue matchItemValue = mock(MatchItemValue.class);
148 IntentVnMappingResult intentVnMappingResult = mock(IntentVnMappingResult.class);
149 VirtualResourceEntityId virtualResourceEntityId = mock(VirtualResourceEntityId.class);
151 List<Property> propertyList = new ArrayList<Property>();
152 List<Node> nodes = new ArrayList<Node>();
153 List<IntentVnMappingResult> intentVnMappingResults = new ArrayList<IntentVnMappingResult>();
154 List<MatchItem> matchItems = new ArrayList<MatchItem>();
155 List<StringValue> propertyValues = new ArrayList<StringValue>();
156 List<VirtualResource> virtualResourceList = new ArrayList<VirtualResource>();
158 matchItems.add(matchItem);
159 intentVnMappingResults.add(intentVnMappingResult);
161 virtualNodes.add(virtualNode);
162 propertyValues.add(stringValue);
163 virtualResourceList.add(virtualResource);
165 //get into method "getMatchItem" args(matchItems ,new MatchItemName("src-ip"))
166 when(flow.getMatchItem()).thenReturn(matchItems);
167 when(matchItem.getMatchItemName())
168 .thenReturn(mock(MatchItemName.class))
169 .thenReturn(new MatchItemName("src-ip"));
171 Assert.assertTrue(ActionResolverUtils.getSourceVirtualRouterOfFlow(virtualNodes, flow, nodes, intentVnMappingResults) == null);
173 when(matchItem.getMatchItemValue()).thenReturn(matchItemValue);
174 when(matchItemValue.getStringValue()).thenReturn(new String("test"));
175 //get into method "getVirtualRouterWithIpPrefix" args(virtualNodes,matchItemValue,nodes, intentVnMappingResults)
176 when(node.getNodeType()).thenReturn(new NodeType("l2-group"));
177 when(node.getProperty()).thenReturn(propertyList);
178 PowerMockito.mockStatic(IntentResolverUtils.class);
179 PowerMockito.when(IntentResolverUtils.getNodeProperty(any(List.class), any(PropertyName.class))).thenReturn(property);
180 when(property.getPropertyValues()).thenReturn(propertyValues_temp);
181 when(propertyValues_temp.getStringValue()).thenReturn(propertyValues);
182 when(stringValue.getValue()).thenReturn(new String("test"));
183 when(node.getNodeId()).thenReturn(nodeId);
184 when(nodeId.getValue()).thenReturn(new String("00001111-0000-0000-0000-000011112222"));
185 PowerMockito.when(IntentResolverUtils.getIntentVnMappingResult(intentVnMappingResults, new IntentId(node.getNodeId().getValue())))
186 .thenReturn(intentVnMappingResult);
187 when(intentVnMappingResult.getVirtualResource()).thenReturn(virtualResourceList);
188 when(virtualResource.getVirtualResourceType()).thenReturn(VirtualResource.VirtualResourceType.Vport);
189 when(virtualResource.getParentVirtualResourceEntityId()).thenReturn(virtualResourceEntityId);
190 when(virtualResourceEntityId.getValue()).thenReturn(new String("00001111-1111-0000-0000-000011112222"));
191 PowerMockito.when(IntentResolverUtils.getVirtualNode(any(List.class), any(VirtualNodeId.class)))
192 .thenReturn(virtualNode);
193 when(virtualNode.getNodeType()).thenReturn(VirtualNode.NodeType.Vrouter);
194 Assert.assertTrue(ActionResolverUtils.getSourceVirtualRouterOfFlow(virtualNodes, flow, nodes, intentVnMappingResults) != null);
199 public void testGetDestinationVirtualRouterOfFlow() throws Exception {
200 List<VirtualNode> virtualNodes = new ArrayList<VirtualNode>();
201 Flow flow = mock(Flow.class);
202 List<Node> nodes = new ArrayList<Node>();
203 List<IntentVnMappingResult> intentVnMappingResults = new ArrayList<IntentVnMappingResult>();
205 MatchItem matchItem = mock(MatchItem.class);
206 MatchItemValue matchItemValue = mock(MatchItemValue.class);
207 List<MatchItem> matchItems = new ArrayList<MatchItem>();
209 matchItems.add(matchItem);
211 when(flow.getMatchItem()).thenReturn(matchItems);
212 when(matchItem.getMatchItemName())
213 .thenReturn(mock(MatchItemName.class))
214 .thenReturn(new MatchItemName("dst-ip"));
216 Assert.assertTrue(ActionResolverUtils.getDestinationVirtualRouterOfFlow(virtualNodes, flow, nodes, intentVnMappingResults) == null);
218 when(matchItem.getMatchItemValue()).thenReturn(matchItemValue);
219 when(matchItemValue.getStringValue()).thenReturn(new String("test"));
220 //get into method "getVirtualRouterWithIpPrefix" args(virtualNodes,matchItemValue,nodes, intentVnMappingResults)
222 Assert.assertTrue(ActionResolverUtils.getDestinationVirtualRouterOfFlow(virtualNodes, flow, nodes, intentVnMappingResults) == null);
227 public void testMergeVirtualPaths() throws Exception {
228 List<VirtualPath> virtualPaths = new ArrayList<VirtualPath>();
230 VirtualPath virtualPath = mock(VirtualPath.class);
231 VirtualPath virtualPath1 = mock(VirtualPath.class);
232 VirtualLink virtualLink = mock(VirtualLink.class);
233 List<VirtualLink> virtualLinkList = new ArrayList<VirtualLink>();
235 virtualLinkList.add(virtualLink);
237 // when virtualPaths is empty
238 Assert.assertTrue(ActionResolverUtils.mergeVirtualPaths(virtualPaths) != null);
240 virtualPaths.add(virtualPath);
241 Assert.assertTrue(ActionResolverUtils.mergeVirtualPaths(virtualPaths) == virtualPath);
243 virtualPaths.add(virtualPath1);
244 when(virtualPath.getVirtualLink()).thenReturn(virtualLinkList);
245 when(virtualPath1.getVirtualLink()).thenReturn(virtualLinkList);
246 when(virtualPath.getMetric()).thenReturn(1L);
247 when(virtualPath.getDelay()).thenReturn(1L);
248 when(virtualPath1.getMetric()).thenReturn(1L);
249 when(virtualPath1.getDelay()).thenReturn(1L);
250 when(virtualPath.getBandwidth()).thenReturn(1L);
251 when(virtualPath1.getBandwidth()).thenReturn(1L);
252 Assert.assertTrue(ActionResolverUtils.mergeVirtualPaths(virtualPaths) != null);
253 verify(virtualPath).getMetric();
254 verify(virtualPath1).getMetric();