2 * Copyright (c) 2015 Huawei, Inc. and others. All rights reserved.
\r
4 * This program and the accompanying materials are made available under the
\r
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
\r
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
\r
8 package org.opendaylight.nemo.user.vnspacemanager.languagestyle.updateintentlang;
\r
10 import junit.framework.TestCase;
\r
11 import org.junit.Assert;
\r
12 import org.junit.Before;
\r
13 import org.junit.Test;
\r
14 import static org.mockito.Mockito.*;
\r
15 import static org.junit.Assert.*;
\r
17 import java.lang.reflect.Field;
\r
18 import java.lang.reflect.Method;
\r
19 import java.util.ArrayList;
\r
20 import java.util.List;
\r
21 import java.util.HashMap;
\r
22 import java.util.LinkedHashMap;
\r
24 import java.lang.reflect.Field;
\r
25 import java.lang.reflect.Method;
\r
28 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
\r
29 import org.opendaylight.nemo.user.tenantmanager.TenantManage;
\r
30 import org.opendaylight.nemo.user.vnspacemanager.languagestyle.NEMOConstants;
\r
31 import org.opendaylight.nemo.user.vnspacemanager.structurestyle.updateintent.UpdateFlow;
\r
32 import org.opendaylight.nemo.user.vnspacemanager.structurestyle.updateintent.UpdateOperation;
\r
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.*;
\r
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Connection;
\r
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Flow;
\r
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Node;
\r
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.Operations;
\r
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.operations.Operation;
\r
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.operations.OperationBuilder;
\r
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.operations.OperationKey;
\r
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.users.User;
\r
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.ParameterValuesBuilder;
\r
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.IntValue;
\r
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.IntValueBuilder;
\r
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.IntValueKey;
\r
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.RangeValue;
\r
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.RangeValueBuilder;
\r
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.StringValue;
\r
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.StringValueBuilder;
\r
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.StringValueKey;
\r
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.condition.instance.ConditionSegment;
\r
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.condition.instance.ConditionSegmentBuilder;
\r
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.condition.instance.ConditionSegmentKey;
\r
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.condition.instance.condition.segment.ConditionParameterTargetValueBuilder;
\r
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.operation.instance.Action;
\r
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.operation.instance.ActionBuilder;
\r
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.operation.instance.ActionKey;
\r
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.Operations;
\r
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.OperationName;
\r
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.OperationId;
\r
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.NodeName;
\r
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.NodeId;
\r
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.ConnectionName;
\r
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.ConnectionId;
\r
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.FlowName;
\r
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.FlowId;
\r
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.Objects;
\r
71 * Created by Thomas Liu on 2015/12/15.
\r
73 public class UpdateOperationLangTest extends TestCase {
\r
75 private UpdateOperationLang updateOperationLangTest;
\r
76 private DataBroker dataBroker;
\r
77 private TenantManage tenantManage;
\r
78 private UserId userId;
\r
79 private String operationname;
\r
80 private String target;
\r
81 private String priority;
\r
82 private LinkedHashMap<String, LinkedHashMap<String,String>> conditions,actions;
\r
83 private LinkedHashMap<String,String> condition,action;
\r
84 private Operations operation;
\r
85 private List<Operation> operationList;
\r
86 private Objects object;
\r
87 private List<Flow> flows;
\r
88 private List<Node> nodes;
\r
89 private List<Connection> connections;
\r
91 private Method method;
\r
92 private Field field;
\r
93 private Class class1;
\r
97 public void setUp() throws Exception {
\r
98 dataBroker = mock(DataBroker.class);
\r
99 tenantManage = mock(TenantManage.class);
\r
100 updateOperationLangTest = new UpdateOperationLang(dataBroker,tenantManage);
\r
101 conditions = new LinkedHashMap<String, LinkedHashMap<String,String>>();
\r
102 actions = new LinkedHashMap<String, LinkedHashMap<String,String>>();
\r
103 operation = mock(Operations.class);
\r
104 operationList = new ArrayList<Operation>(){{add(mock(Operation.class));}};
\r
105 operationname = new String("o1");
\r
106 object = mock(Objects.class);
\r
107 flows = new ArrayList<Flow>(){{add(mock(Flow.class));}};
\r
108 nodes = new ArrayList<Node>(){{add(mock(Node.class));}};
\r
109 connections = new ArrayList<Connection>(){{add(mock(Connection.class));}};
\r
110 user = mock(User.class);
\r
111 conditions = new LinkedHashMap<String, LinkedHashMap<String,String>>();
\r
112 actions = new LinkedHashMap<String, LinkedHashMap<String,String>>();
\r
114 class1 = UpdateOperationLang.class;
\r
119 public void testOperationHandling() throws Exception {
\r
120 field = class1.getDeclaredField("updateOperation");
\r
121 UpdateOperation updateOperation = mock(UpdateOperation.class);
\r
122 field.setAccessible(true);
\r
123 field.set(updateOperationLangTest,updateOperation);
\r
124 field = class1.getDeclaredField("operation");
\r
125 Operation operation2 = mock(Operation.class);
\r
126 field.setAccessible(true);
\r
127 field.set(updateOperationLangTest,operation2);
\r
129 condition = new LinkedHashMap<String,String>(){{
\r
130 put(new String("group"),NEMOConstants.string);
\r
132 conditions.put(",a,equal",condition);
\r
133 conditions.put("not,b,not_equal",condition);
\r
134 conditions.put("and,c,greater_than",condition);
\r
135 condition = new LinkedHashMap<String,String>(){{
\r
136 put(new String("100"),NEMOConstants.integer);
\r
138 conditions.put("or,d,less_than",condition);
\r
139 conditions.put("not,e,not_less_than",condition);
\r
140 conditions.put("and,f,not_greater_than",condition);
\r
141 condition = new LinkedHashMap<String,String>(){{
\r
142 put(new String("100,200"),NEMOConstants.range);
\r
144 conditions.put("or,g,between",condition);
\r
145 condition = new LinkedHashMap<String,String>(){{
\r
146 put(new String("200,100"),NEMOConstants.range);
\r
148 conditions.put("or,g,between",condition);
\r
149 action = new LinkedHashMap<String,String>(){{
\r
150 //put(new String("1"),NEMOConstants.range);
\r
151 //put(new String("group"),NEMOConstants.string);
\r
152 //put(new String("100"),NEMOConstants.integer);
\r
153 put(new String("100,200"),NEMOConstants.range);
\r
154 put(new String("200,100"),NEMOConstants.range);
\r
156 actions.put(new String("action1"),action);
\r
158 HashMap<OperationId,Operation> operationMap = new HashMap<OperationId,Operation>();
\r
159 OperationId operationId = new OperationId("11111111-1111-1111-1111-111111111111");
\r
160 Operation operation = mock(Operation.class);
\r
161 operationMap.put(operationId,operation);
\r
162 when(tenantManage.getObjectId(userId,operationname)).thenReturn("11111111-1111-1111-1111-111111111111");
\r
163 when(tenantManage.getObjectId(userId,operationname)).thenReturn("11111111-1111-1111-1111-111111111111");
\r
164 when(tenantManage.getOperation(userId)).thenReturn(operationMap);
\r
165 when(tenantManage.getOperation(userId)).thenReturn(operationMap);
\r
167 //if (tenantManage.getObjectId(userId,target)!=null)
\r
168 when(tenantManage.getObjectId(userId,target)).thenReturn("11111111-1111-1111-1111-111111111111");
\r
169 when(tenantManage.getObjectId(userId, target)).thenReturn("11111111-1111-1111-1111-111111111111");
\r
170 //test createCondition
\r
171 //test createAction
\r
172 when(updateOperation.OperationHandling(userId,operation)).thenReturn("OperationHandling");
\r
173 System.out.println("****************************************** Result1: "+updateOperationLangTest.OperationHandling(userId, operationname, target, priority, conditions,actions));
\r
176 when(tenantManage.getObjectId(userId,operationname)).thenReturn(null);
\r
177 when(tenantManage.getObjectId(userId,target)).thenReturn(null);
\r
178 System.out.println("****************************************** Result2: "+updateOperationLangTest.OperationHandling(userId, operationname, target, priority, conditions,actions));
\r
180 when(tenantManage.getObjectId(userId, operationname)).thenReturn("11111111-1111-1111-1111-111111111111");
\r
181 when(tenantManage.getObjectId(userId,operationname)).thenReturn("11111111-1111-1111-1111-111111111111");
\r
182 operationMap.clear();
\r
183 when(tenantManage.getOperation(userId)).thenReturn(operationMap);
\r
184 operationMap.put(operationId,operation);
\r
185 when(tenantManage.getOperationDataStore(userId)).thenReturn(operationMap);
\r
186 when(tenantManage.getOperationDataStore(userId)).thenReturn(operationMap);
\r
187 when(tenantManage.getObjectId(userId,target)).thenReturn(null);
\r
188 System.out.println("****************************************** Result3: "+updateOperationLangTest.OperationHandling(userId, operationname, target, priority, conditions,actions));
\r
190 conditions.clear();
\r
192 when(tenantManage.getObjectId(userId, operationname)).thenReturn(null);
\r
193 when(tenantManage.getObjectId(userId,target)).thenReturn("11111111-1111-1111-1111-111111111111");
\r
194 when(updateOperation.OperationHandling(userId,operation)).thenReturn("OperationHandling");
\r
195 System.out.println("****************************************** Result4: "+updateOperationLangTest.OperationHandling(userId, operationname, target, priority, conditions,actions));
\r
198 public void testcreateAction() throws Exception {
\r
199 method = class1.getDeclaredMethod("createAction",new Class[]{
\r
201 LinkedHashMap.class,
\r
203 method.setAccessible(true);
\r
206 action = new LinkedHashMap<String,String>(){{
\r
207 put(new String("100"),NEMOConstants.integer);
\r
208 put(new String("group"),NEMOConstants.string);
\r
210 actions.put(new String("action1"),action);
\r
211 System.out.println("****************************************** Result5: "+method.invoke(updateOperationLangTest,userId,actions));
\r
214 action = new LinkedHashMap<String,String>(){{
\r
215 put(new String("group"),NEMOConstants.string);
\r
216 put(new String("100"),NEMOConstants.integer);
\r
218 actions.put(new String("action1"),action);
\r
219 System.out.println("****************************************** Result6: "+method.invoke(updateOperationLangTest,userId,actions));
\r
222 action = new LinkedHashMap<String,String>(){{
\r
223 put(new String("100"),NEMOConstants.integer);
\r
224 put(new String("100,200"),NEMOConstants.range);
\r
227 actions.put(new String("action1"),action);
\r
228 System.out.println("****************************************** Result7: "+method.invoke(updateOperationLangTest,userId,actions));
\r
231 action = new LinkedHashMap<String,String>(){{
\r
232 put(new String("group"),NEMOConstants.string);
\r
233 put(new String("200,100"),NEMOConstants.range);
\r
235 actions.put(new String("action1"),action);
\r
236 System.out.println("****************************************** Result8: "+method.invoke(updateOperationLangTest,userId,actions));
\r
239 action = new LinkedHashMap<String,String>(){{
\r
240 put(new String("100,200"),NEMOConstants.range);
\r
241 put(new String("100"),NEMOConstants.integer);
\r
243 actions.put(new String("action1"),action);
\r
244 System.out.println("****************************************** Result9: "+method.invoke(updateOperationLangTest,userId,actions));
\r
247 action = new LinkedHashMap<String,String>(){{
\r
248 put(new String("100,200"),NEMOConstants.range);
\r
249 put(new String("group"),NEMOConstants.string);
\r
251 actions.put(new String("action1"),action);
\r
252 System.out.println("****************************************** Result10: "+method.invoke(updateOperationLangTest,userId,actions));
\r