b3f9b5b5f475079fad3554cbdb6c19b147029724
[nemo.git] / nemo-impl / src / test / java / org / opendaylight / nemo / intent / action / ActionResolverUtilsTest.java
1 /*
2  * Copyright (c) 2015 Huawei, Inc. and others. All rights reserved.
3  *
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
7  */
8 package org.opendaylight.nemo.intent.action;
9
10 import junit.framework.TestCase;
11 import org.junit.Assert;
12 import org.junit.Before;
13 import org.junit.Test;
14
15 import static org.junit.Assert.*;
16
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.*;
51 /**
52  * Created by zhangmeng on 2015/12/25.
53  */
54 @RunWith(PowerMockRunner.class)
55 @PrepareForTest({ActionResolverUtils.class,IntentResolverUtils.class})
56 public class ActionResolverUtilsTest extends TestCase {
57     private ActionResolverUtils actionResolverUtils;
58     @Before
59     public void setUp() throws Exception {
60         actionResolverUtils = new ActionResolverUtils();
61     }
62
63     @Test
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);
68
69         actions.add(action);
70
71         when(action.getActionName())
72                 .thenReturn(mock(ActionName.class))
73                 .thenReturn(actionName);
74
75         Assert.assertTrue(ActionResolverUtils.getAction(actions,actionName) == null);
76         Assert.assertTrue(ActionResolverUtils.getAction(actions,actionName) == action);
77
78     }
79
80     @Test
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);
87         long bandwidth = 1L;
88
89         virtualLinks.add(virtualLink);
90
91         when(virtualLink.getLinkId())
92                 .thenReturn(mock(VirtualLinkId.class))
93                 .thenReturn(virtualLinkId);
94
95         ActionResolverUtils.modifyVirtualLinkBandwidth(virtualLinks, virtualLinkId, bandwidth);
96         ActionResolverUtils.modifyVirtualLinkBandwidth(virtualLinks,virtualLinkId,bandwidth);
97         verify(virtualLink, times(4)).getLinkId();
98     }
99
100     @Test
101     public void testSortVirtualResources() throws Exception {
102         List<VirtualResource> virtualResources = new ArrayList<VirtualResource>();
103         Assert.assertTrue(ActionResolverUtils.sortVirtualResources(virtualResources) == virtualResources);
104
105         VirtualResource virtualResource = mock(VirtualResource.class);
106         VirtualResource virtualResource1 = mock(VirtualResource.class);
107
108         virtualResources.add(virtualResource);
109         virtualResources.add(virtualResource1);
110
111         when(virtualResource.getOrder()).thenReturn(1L);
112         when(virtualResource1.getOrder()).thenReturn(0L);
113         Assert.assertTrue(ActionResolverUtils.sortVirtualResources(virtualResources).get(0) == virtualResource1);
114     }
115
116     @Test
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);
121
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);
126
127         parameterValues.add(parameterValue);
128         parameterValues.add(parameterValue1);
129
130         when(parameterValue.getOrder()).thenReturn(1L);
131         when(parameterValue1.getOrder()).thenReturn(0L);
132         Assert.assertTrue(ActionResolverUtils.sortParameterValues(parameterValues).get(0) == parameterValue1);
133     }
134
135     @Test
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);
150
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>();
157
158         matchItems.add(matchItem);
159         intentVnMappingResults.add(intentVnMappingResult);
160         nodes.add(node);
161         virtualNodes.add(virtualNode);
162         propertyValues.add(stringValue);
163         virtualResourceList.add(virtualResource);
164
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"));
170         //return null
171         Assert.assertTrue(ActionResolverUtils.getSourceVirtualRouterOfFlow(virtualNodes, flow, nodes, intentVnMappingResults) == null);
172         //not 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);
195
196     }
197
198     @Test
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>();
204
205         MatchItem matchItem = mock(MatchItem.class);
206         MatchItemValue matchItemValue = mock(MatchItemValue.class);
207         List<MatchItem> matchItems = new ArrayList<MatchItem>();
208
209         matchItems.add(matchItem);
210
211         when(flow.getMatchItem()).thenReturn(matchItems);
212         when(matchItem.getMatchItemName())
213                 .thenReturn(mock(MatchItemName.class))
214                 .thenReturn(new MatchItemName("dst-ip"));
215         //test null
216         Assert.assertTrue(ActionResolverUtils.getDestinationVirtualRouterOfFlow(virtualNodes, flow, nodes, intentVnMappingResults) == null);
217
218         when(matchItem.getMatchItemValue()).thenReturn(matchItemValue);
219         when(matchItemValue.getStringValue()).thenReturn(new String("test"));
220         //get into method "getVirtualRouterWithIpPrefix" args(virtualNodes,matchItemValue,nodes, intentVnMappingResults)
221         //return null
222         Assert.assertTrue(ActionResolverUtils.getDestinationVirtualRouterOfFlow(virtualNodes, flow, nodes, intentVnMappingResults) == null);
223
224     }
225
226     @Test
227     public void testMergeVirtualPaths() throws Exception {
228         List<VirtualPath> virtualPaths = new ArrayList<VirtualPath>();
229
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>();
234         
235         virtualLinkList.add(virtualLink);
236         
237         // when virtualPaths is empty
238         Assert.assertTrue(ActionResolverUtils.mergeVirtualPaths(virtualPaths) != null);
239         // size 1
240         virtualPaths.add(virtualPath);
241         Assert.assertTrue(ActionResolverUtils.mergeVirtualPaths(virtualPaths) == virtualPath);
242         // size >1
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();
255
256     }
257 }