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.renderer.cli;
10 import junit.framework.TestCase;
11 import org.junit.Assert;
12 import org.junit.Before;
13 import org.junit.Test;
14 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.path.instance.PhysicalLink;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.NodeType;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.Objects;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.PhysicalNetwork;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.PhysicalLinks;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.PhysicalPaths;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.nodes.PhysicalNode;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.paths.PhysicalPath;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.paths.PhysicalPathBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.VirtualNetwork;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.intent.vn.mapping.results.UserIntentVnMapping;
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.intent.mapping.result.rev151010.vn.pn.mapping.results.UserVnPnMapping;
29 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;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.ConnectionId;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.NodeId;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.PhysicalResourceEntityId;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.PhysicalLinkId;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.PhysicalNodeId;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.PhysicalPortId;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.VirtualResourceEntityId;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.IntentId;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Connection;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Node;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.users.User;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.connection.instance.EndNode;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.VirtualResourceInstance.VirtualResourceType;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.PhysicalLinkId;
44 import org.slf4j.Logger;
45 import org.slf4j.LoggerFactory;
47 import java.lang.reflect.Modifier;
48 import java.util.ArrayList;
49 import java.util.List;
51 import static org.junit.Assert.*;
52 import static org.mockito.Mockito.*;
54 * Created by zhangmeng on 2015/12/7.
56 public class CliBuilderTest extends TestCase {
57 private CliBuilder cliBuilder;
58 private DataBroker dataBroker;
61 public void setUp() throws Exception {
62 dataBroker = mock(DataBroker.class);
63 cliBuilder = new CliBuilder(dataBroker);
67 public void testInit() throws Exception {
68 List<PhysicalNode> physicalNodes = new ArrayList<PhysicalNode>();
69 cliBuilder.init(physicalNodes);
73 public void testIsFullMeshTopology() throws Exception {
74 // Object configElementOnePE ;
75 // Object configElementAnother;
76 // Class classes = cliBuilder.getClass().getDeclaringClass();
78 // int i = classes.getModifiers();
79 // String s = Modifier.toString(i);
80 // configElementOnePE = classes.getConstructor().newInstance();
81 // configElementAnother = classes.getConstructor().newInstance();
84 // PhysicalNodeId physicalNodeId = mock(PhysicalNodeId.class);
85 // PhysicalNodeId physicalNodeId1 = mock(PhysicalNodeId.class);
86 // List<List> peersList = new ArrayList<List>();
87 // List peers = new ArrayList();
89 // peers.add(configElementOnePE);
90 // peers.add(configElementAnother);
91 // peersList.add(peers);
93 // when(configElementOnePE.getPhysicalNodeId()).thenReturn(physicalNodeId);
94 // when(configElementAnother.getPhysicalNodeId()).thenReturn(physicalNodeId1);
96 // cliBuilder.isFullMeshTopology(peersList);
98 // Class classes[] = CliBuilder.class.getClass().getDeclaredClasses();
99 // Assert.assertTrue(classes.length == 1);
100 // Class c = classes[0];
106 public void testUpdateCliExecutionSequence() throws Exception {
107 User user = mock(User.class);
108 VirtualNetwork virtualNetwork = mock(VirtualNetwork.class);
109 UserIntentVnMapping userIntentVnMapping = mock(UserIntentVnMapping.class);
110 UserVnPnMapping userVnPnMapping = mock(UserVnPnMapping.class);
111 PhysicalNetwork physicalNetwork = mock(PhysicalNetwork.class);
112 Objects objects = mock(Objects.class);
113 Connection connection = mock(Connection.class);
114 EndNode endnode = mock(EndNode.class);
115 EndNode endnode1 = mock(EndNode.class);
116 NodeId nodeId = mock(NodeId.class);
117 NodeId nodeId1 = mock(NodeId.class);
118 Node node = mock(Node.class);
119 NodeType nodeType = mock(NodeType.class);
120 IntentVnMappingResult intentVnMappingResult = mock(IntentVnMappingResult.class);
121 IntentId intentId = mock(IntentId.class);
122 VirtualResource virtualResource = mock(VirtualResource.class);
123 VnPnMappingResult vnPnMappingResult = mock(VnPnMappingResult.class);
124 VirtualResourceType virtualResourceType = VirtualResource.VirtualResourceType.Vport;
125 VirtualResourceEntityId virtualResourceEntityId = mock(VirtualResourceEntityId.class);
126 PhysicalResourceEntityId physicalResourceEntityId = mock(PhysicalResourceEntityId.class);
127 PhysicalResourceEntityId physicalResourceEntityId_parent = mock(PhysicalResourceEntityId.class);
128 PhysicalPaths physicalPaths = mock(PhysicalPaths.class);
129 PhysicalPath physicalPath = mock(PhysicalPath.class);
130 PhysicalLink physicalLink = mock(PhysicalLink.class);
131 PhysicalLinkId physicalLinkId = mock(PhysicalLinkId.class);
132 PhysicalLinkId physicalLinkId1 = mock(PhysicalLinkId.class);
133 PhysicalLinks physicalLinksInNetwork = mock(PhysicalLinks.class);
134 PhysicalNodeId physicalNodeId_src = mock(PhysicalNodeId.class);
135 PhysicalNodeId physicalNodeId_dst = mock(PhysicalNodeId.class);
136 org.opendaylight.yang.gen.v1.urn.opendaylight.params
137 .xml.ns.yang.generic.physical.network.rev151010
138 .physical.path.instance.PhysicalLink physicalLink_special =
139 mock(org.opendaylight.yang.gen.v1.urn.opendaylight.params
140 .xml.ns.yang.generic.physical.network.rev151010
141 .physical.path.instance.PhysicalLink.class);
142 org.opendaylight.yang.gen.v1.urn.opendaylight.params
143 .xml.ns.yang.generic.physical.network.rev151010
144 .physical.path.instance.PhysicalLink physicalLink_special1 =
145 mock(org.opendaylight.yang.gen.v1.urn.opendaylight.params
146 .xml.ns.yang.generic.physical.network.rev151010
147 .physical.path.instance.PhysicalLink.class);
148 org.opendaylight.yang.gen.v1.urn.opendaylight.params
149 .xml.ns.yang.generic.physical.network.rev151010
150 .physical.network.physical.links
151 .PhysicalLink physicalLink_getSrcNodeIdforLinkInPath =
152 mock(org.opendaylight.yang.gen.v1.urn.opendaylight.params
153 .xml.ns.yang.generic.physical.network.rev151010
154 .physical.network.physical.links
155 .PhysicalLink.class);
156 List<PhysicalLink> physicalLinkList = new ArrayList<PhysicalLink>();
157 List<Connection> connectionList = new ArrayList<Connection>();
158 List<EndNode> endNodeList = new ArrayList<EndNode>();
159 List<Node> nodeList = new ArrayList<Node>();
160 List<IntentVnMappingResult> intentVnMappingResults = new ArrayList<IntentVnMappingResult>();
161 List<VirtualResource> virtualResources = new ArrayList<VirtualResource>();
162 List<VnPnMappingResult> vnPnMappingResults = new ArrayList<VnPnMappingResult>();
163 List<PhysicalPath> physicalPathList = new ArrayList<PhysicalPath>();
164 List< org.opendaylight.yang.gen.v1.urn.opendaylight.params
165 .xml.ns.yang.generic.physical.network.rev151010
166 .physical.path.instance.PhysicalLink> physicalLinks =
167 new ArrayList<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.path.instance.PhysicalLink>();
168 List<org.opendaylight.yang.gen.v1.urn.opendaylight.params
169 .xml.ns.yang.generic.physical.network.rev151010
170 .physical.network.physical.links.PhysicalLink>
171 physicalLinksInNetworkList =
172 new ArrayList<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.links.PhysicalLink>();
175 intentVnMappingResults.add(intentVnMappingResult);
176 connectionList.add(connection);
177 endNodeList.add(endnode);
179 virtualResources.add(virtualResource);
180 vnPnMappingResults.add(vnPnMappingResult);
181 physicalPathList.add(physicalPath);
182 physicalLinkList.add(physicalLink);
183 physicalLinks.add(physicalLink_special);
184 physicalLinks.add(physicalLink_special1);
185 physicalLinksInNetworkList.add(physicalLink_getSrcNodeIdforLinkInPath);
186 // endNodeList.add(endnode1);
188 when(user.getObjects())
189 .thenReturn(null)//test null
190 .thenReturn(objects)//get into circle
191 .thenReturn(objects)//List<Connection> connectionList = user.getObjects().getConnection();
192 .thenReturn(objects);//used in method "isConnectTwoExtGroup"
194 cliBuilder.updateCliExecutionSequence(user, virtualNetwork, userIntentVnMapping, userVnPnMapping, physicalNetwork);
195 verify(user).getObjects();
198 when(objects.getConnection()).thenReturn(connectionList);
199 when(connection.getEndNode())
200 .thenReturn(endNodeList)
201 .thenReturn(endNodeList);//used in method "isConnectTwoExtGroup"
202 ////get into method "isConnectTwoExtGroup"
203 when(endnode.getNodeId()).thenReturn(nodeId);
204 when(endnode1.getNodeId()).thenReturn(nodeId1);
205 when(objects.getNode()).thenReturn(nodeList);
206 when(node.getNodeId()).thenReturn(nodeId);//if(node.getNodeId().equals(nodeId))
207 when(node.getNodeType()).thenReturn(nodeType);
208 when(nodeType.getValue())
209 .thenReturn(new String("null"))
210 .thenReturn(new String("ext-group"));//test not null
212 endNodeList.add(endnode1);
213 Assert.assertTrue(endNodeList.size() == 2);
214 Assert.assertTrue(endNodeList.get(1) == endnode1 && endNodeList.get(0) == endnode);
217 cliBuilder.updateCliExecutionSequence(user, virtualNetwork, userIntentVnMapping, userVnPnMapping, physicalNetwork);
218 verify(nodeType).getValue();
220 ////get into method "getNodeVnPnMappingResult". args(nodeId,userIntentVnMapping,userVnPnMapping)
221 when(userIntentVnMapping.getIntentVnMappingResult()).thenReturn(intentVnMappingResults);
222 when(intentVnMappingResult.getIntentId()).thenReturn(intentId);
223 when(nodeId.getValue()).thenReturn(new String("test"));
224 when(intentId.getValue()).thenReturn(new String("test"));
225 when(intentVnMappingResult.getVirtualResource()).thenReturn(virtualResources);
226 when(virtualResource.getVirtualResourceType()).thenReturn(virtualResourceType);
227 when(userVnPnMapping.getVnPnMappingResult()).thenReturn(vnPnMappingResults);
228 when(vnPnMappingResult.getVirtualResourceEntityId()).thenReturn(virtualResourceEntityId);
229 when(virtualResource.getVirtualResourceEntityId()).thenReturn(virtualResourceEntityId);
230 when(virtualResourceEntityId.getValue()).thenReturn(new String("test"));
231 //get out of method "getNodeVnPnMappingResult" .... and vnPnMappingResult is returned
232 when(vnPnMappingResult.getPhysicalResourceEntityId()).thenReturn(physicalResourceEntityId);
233 when(physicalResourceEntityId.getValue()).thenReturn(new String("test"));
234 when(vnPnMappingResult.getParentPhysicalResourceEntityId()).thenReturn(physicalResourceEntityId_parent);
235 when(physicalResourceEntityId_parent.getValue()).thenReturn(new String("test"));
236 /////get into method "getNodeVnPnMappingResult" again. args(nodeId,userIntentVnMapping,userVnPnMapping)
237 when(nodeId1.getValue()).thenReturn(new String("test"));
239 get out of method "getNodeVnPnMappingResult" .... and vnPnMappingResult is returned
240 no more when and return is needed!
242 ////get into method "getPhysicalPathforConnection" args (onePhysicalNodeId, otherPhysicalNodeId, physicalNetwork)
243 when(physicalNetwork.getPhysicalPaths()).thenReturn(physicalPaths);
244 when(physicalPaths.getPhysicalPath())
246 .thenReturn(physicalPathList);
248 cliBuilder.updateCliExecutionSequence(user, virtualNetwork, userIntentVnMapping, userVnPnMapping, physicalNetwork);
250 //////get into method "sortPhysicalLinksOfPhysicalPath" args(physicalPath)
251 when(physicalPath.getPhysicalLink())
252 .thenReturn(physicalLinkList)//if ( physicalPath.getPhysicalLink().isEmpty()|| 1 == physicalPath.getPhysicalLink().size() )
253 .thenReturn(physicalLinkList)
254 .thenReturn(physicalLinks);//back to method "getPhysicalPathforConnection"
255 Assert.assertTrue(physicalLinkList.size() == 1);
256 ////get out of method "sortPhysicalLinksOfPhysicalPath" args(physicalPath)
257 when(physicalLink_special.getLinkId()).thenReturn(physicalLinkId);
258 when(physicalLink_special1.getLinkId()).thenReturn(physicalLinkId1);
259 //////get into method "getSrcNodeIdforLinkInPath"
260 PhysicalLinkId physicalLinkId_getSrcNodeIdforLinkInPath = mock(PhysicalLinkId.class);
261 when(physicalNetwork.getPhysicalLinks()).thenReturn(physicalLinksInNetwork);
262 when(physicalLinksInNetwork.getPhysicalLink()).thenReturn(physicalLinksInNetworkList);
263 when(physicalLink_getSrcNodeIdforLinkInPath.getLinkId()).thenReturn(physicalLinkId_getSrcNodeIdforLinkInPath);
264 when(physicalLinkId_getSrcNodeIdforLinkInPath.getValue()).thenReturn(new String("test"));
265 when(physicalLinkId.getValue()).thenReturn(new String("test"));
266 when(physicalLink_getSrcNodeIdforLinkInPath.getSrcNodeId()).thenReturn(physicalNodeId_src);
267 ////get out of method "getSrcNodeIdforLinkInPath"
268 ////// get into method "getDestNodeIdforLinkInPath"
269 when(physicalLinkId1.getValue()).thenReturn(new String("test"));
270 when(physicalLink_getSrcNodeIdforLinkInPath.getDestNodeId()).thenReturn(physicalNodeId_dst);
271 //// return into method "getPhysicalPathforConnection"
272 when(physicalNodeId_src.getValue()).thenReturn(new String("test1"));
273 when(physicalNodeId_dst.getValue()).thenReturn(new String("test"));
275 cliBuilder.updateCliExecutionSequence(user, virtualNetwork, userIntentVnMapping, userVnPnMapping, physicalNetwork);
280 public void testClose() throws Exception {