Modified one test file and added two test files
[nemo.git] / nemo-impl / src / test / java / org / opendaylight / nemo / intent / OperationResolverTest.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
9 package org.opendaylight.nemo.intent;
10 import  org.opendaylight.nemo.intent.OperationResolver;
11
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.UserId;
13 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.VirtualNetwork;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.links.VirtualLink;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.links.VirtualLinkBuilder;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.nodes.VirtualNode;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.paths.VirtualPath;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.paths.VirtualPathBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.node.instance.VirtualPort;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.node.instance.VirtualPortBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.intent.vn.mapping.results.UserIntentVnMapping;
23 import org.opendaylight.nemo.intent.computation.VNComputationUnit;
24 import org.opendaylight.nemo.intent.condition.ConditionManager;
25 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;
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.IntentVnMappingResultBuilder;
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.intent.vn.mapping.results.user.intent.vn.mapping.intent.vn.mapping.result.VirtualResourceBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.ActionName;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.IntentId;
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.common.rev151010.NodeType;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.*;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Connection;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Flow;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Node;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.operations.Operation;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.users.User;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.StringValue;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.condition.instance.ConditionSegment;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.operation.instance.Action;
42 import org.slf4j.Logger;
43 import org.slf4j.LoggerFactory;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.Objects;
45
46
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.hosts.PhysicalHost;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.links.VirtualLink;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.nodes.VirtualNode;
50 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;
51 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;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.hosts.PhysicalHost;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.links.VirtualLink;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.nodes.VirtualNode;
55 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;
56 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;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.*;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.PhysicalHostId;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.PhysicalNodeId;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.VirtualNodeId;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.Objects;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Connection;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Flow;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Node;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.operations.Operation;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.flow.instance.MatchItem;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.node.instance.Property;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.node.instance.SubNode;
69 import org.opendaylight.yangtools.yang.binding.DataObject;
70
71 import java.util.ArrayList;
72 import java.util.LinkedList;
73 import java.util.List;
74 import java.util.UUID;
75 import java.util.Map;
76 import java.util.HashMap;
77
78 import static org.mockito.Mockito.mock;
79 import static org.mockito.Mockito.*;
80 import org.junit.Assert;
81 import org.junit.Before;
82 import org.junit.Test;
83
84
85 public class OperationResolverTest {
86
87     private DataBroker dataBroker;
88     private OperationResolver operationResolver;
89     
90     private User user;
91     private UserId userId;
92     private Operation operation;
93     private OperationId operationId;
94     private VirtualNetwork virtualNetwork;
95     private UserIntentVnMapping userIntentVnMapping;
96     private DataObject dataObject;
97     
98     private VNComputationUnit vnComputationUnit;
99     private Map<UserId, VNComputationUnit> vnComputationUnits;
100     private ConditionManager conditionManager;
101     
102     private List<Operation> operations;
103     private List<Operation> operationsApplyingToNode;
104     private List<Operation> operationsApplyingToConnection;
105     private List<Operation> operationsApplyingToFlow;
106
107     private Connection connection;
108         private List<Node> nodeList;
109         private Node node;
110         
111     @org.junit.Before
112     public void setUp() throws Exception {
113         
114         dataBroker=mock(DataBroker.class);
115         user=mock(User.class);
116         operation=mock(Operation.class);
117         operationId=mock(OperationId.class);
118         virtualNetwork=mock(VirtualNetwork.class);
119         userIntentVnMapping=mock(UserIntentVnMapping.class);
120         conditionManager=mock(ConditionManager.class);
121         
122         userId=mock(UserId.class);
123         vnComputationUnit=mock(VNComputationUnit.class);
124         vnComputationUnits=new HashMap<UserId, VNComputationUnit>();
125         vnComputationUnits.put(userId,vnComputationUnit);
126         
127         
128         operationResolver=new OperationResolver(dataBroker, conditionManager,
129                 vnComputationUnits);
130         
131         operations = new ArrayList<Operation>(1);
132         operations.add(operation);
133         
134         operationsApplyingToNode = new ArrayList<Operation>();
135         operationsApplyingToConnection = new ArrayList<Operation>();
136         operationsApplyingToFlow = new ArrayList<Operation>();
137         
138         connection = mock(Connection.class);
139         node = mock(Node.class);
140         nodeList = new ArrayList<Node>();
141         nodeList.add(node);
142         
143     }
144     
145     @org.junit.Test
146     public void resolveOperationTest() throws Exception {
147         
148         ObjectId objectId = mock(ObjectId.class);
149         when(operation.getTargetObject()).thenReturn(objectId);
150         
151         Objects objects = mock(Objects.class);
152         when(user.getObjects()).thenReturn(objects);
153         
154         List<Node> nodes = new ArrayList<Node>(1);
155         Node node = mock(Node.class);
156         nodes.add(node);
157         
158         when(objects.getNode()).thenReturn(nodes);
159         when(objectId.getValue()).thenReturn(new String("00001111-0000-0000-0000-000011112222"));
160         
161         NodeId nodeId = mock(NodeId.class);
162         
163         when(node.getNodeId()).thenReturn(nodeId);
164         when(operation.getOperationId()).thenReturn(operationId);
165         when(operationId.getValue()).thenReturn(new String("00001111-0000-0000-0000-000011112222"));
166         //when(IntentResolverUtils.getNode(nodes, nodeId)).thenReturn(node);
167
168         //when(IntentResolverUtils.getObject(any(Objects.class), any(ObjectId.class))).thenReturn(dataObject);
169         try
170         {
171                 operationResolver.resolveOperation(user, operation, virtualNetwork, userIntentVnMapping);
172         }
173         catch(IntentResolutionException ex)
174         {
175                 Assert.assertEquals(ex.getMessage(),"The target object of the operation " +
176                     operation.getOperationId().getValue() + " does not exist.");
177                 
178         }
179         
180         
181         
182     
183     }
184     
185     @org.junit.Test
186     public void classifyOperationsTest() throws Exception {
187         
188         ObjectId objectId = mock(ObjectId.class);
189         when(operation.getTargetObject()).thenReturn(objectId);
190         
191         Objects objects = mock(Objects.class);
192         when(user.getObjects()).thenReturn(objects);
193         
194         
195         
196         when(objects.getNode()).thenReturn(nodeList);
197         when(objectId.getValue()).thenReturn(new String("00001111-0000-0000-0000-000011112222"));
198         NodeId nodeId2 = new NodeId(objectId.getValue());
199         //into getnode
200         when(node.getNodeId()).thenReturn(nodeId2);
201         
202         
203         try
204         {
205                 operationResolver.classifyOperations(user, operations, operationsApplyingToNode, operationsApplyingToConnection, operationsApplyingToFlow);
206         }
207         catch(IntentResolutionException ex)
208         {
209                 Assert.assertEquals(ex.getMessage(),"The target object of the operation " +
210                         operation.getOperationId().getValue() + " does not exist.");
211                 
212         }
213         
214         
215     }
216 }
217     
218     
219     
220     
221