--- /dev/null
+/*\r
+ * Copyright (c) 2015 Huawei, Inc. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+package org.opendaylight.nemo.user.vnspacemanager.languagestyle.updateintentlang;\r
+\r
+import junit.framework.TestCase;\r
+import org.junit.Assert;\r
+import org.junit.Before;\r
+import org.junit.Test;\r
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;\r
+import org.opendaylight.nemo.user.tenantmanager.TenantManage;\r
+import org.opendaylight.nemo.user.vnspacemanager.languagestyle.NEMOConstants;\r
+import org.opendaylight.nemo.user.vnspacemanager.structurestyle.updateintent.GetDefinitions;\r
+import org.opendaylight.nemo.user.vnspacemanager.structurestyle.updateintent.UpdateTemplateDefinition;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.hosts.PhysicalHost;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.*;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.PhysicalHostId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.PhysicalHostName;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.template.definitions.TemplateDefinition;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.template.definitions.TemplateDefinitionBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.template.definitions.TemplateDefinitionKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.connection.instance.EndNode;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.connection.instance.EndNodeBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.connection.instance.EndNodeKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.flow.instance.MatchItem;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.flow.instance.MatchItemBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.flow.instance.MatchItemKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.match.item.instance.MatchItemValueBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.node.instance.*;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.property.instance.PropertyValuesBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.property.instance.property.values.*;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.ParameterValuesBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.condition.instance.ConditionSegment;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.condition.instance.ConditionSegmentBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.condition.instance.ConditionSegmentKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.condition.instance.condition.segment.ConditionParameterTargetValueBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.operation.instance.Action;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.operation.instance.ActionBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.operation.instance.ActionKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.template.rev151201.template.definition.grouping.AbstractIntentsBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.template.rev151201.template.definition.grouping.TemplateParameter;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.template.rev151201.template.definition.grouping.TemplateParameterBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.template.rev151201.template.definition.grouping.TemplateParameterKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.template.rev151201.template.definition.grouping._abstract.intents.AbstractObjectsBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.template.rev151201.template.definition.grouping._abstract.intents.AbstractOperationsBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.template.rev151201.template.definition.grouping._abstract.intents._abstract.objects.*;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.template.rev151201.template.definition.grouping._abstract.intents._abstract.operations.AbstractOperation;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.template.rev151201.template.definition.grouping._abstract.intents._abstract.operations.AbstractOperationBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.template.rev151201.template.definition.grouping._abstract.intents._abstract.operations.AbstractOperationKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.NodeId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.ConnectionId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.FlowId;\r
+import java.lang.reflect.Field;\r
+import java.util.*;\r
+import static org.junit.Assert.*;\r
+import static org.mockito.Mockito.*;\r
+/**\r
+ * Created by zhangmeng on 2015/12/29.\r
+ */\r
+public class UpdateTemplateDefinitionLangTest extends TestCase {\r
+ private DataBroker dataBroker;\r
+ private TenantManage tenantManage;\r
+ private UpdateTemplateDefinitionLang updateTemplateDefinitionLang;\r
+ private Class<UpdateTemplateDefinitionLang> class1;\r
+ private Field field_definition;\r
+ private Field field_abstractNodes ;\r
+ private Field field_abstractConnections;\r
+ private Field field_abstractFlows;\r
+ private Field field_abstractOperations;\r
+ private Field field;\r
+\r
+ @Before\r
+ public void setUp() throws Exception {\r
+ class1 = UpdateTemplateDefinitionLang.class;\r
+ field_definition = class1.getDeclaredField("definition");\r
+ field_abstractNodes = class1.getDeclaredField("abstractNodes");\r
+ field_abstractConnections = class1.getDeclaredField("abstractConnections");\r
+ field_abstractFlows = class1.getDeclaredField("abstractFlows");\r
+ field_abstractOperations = class1.getDeclaredField("abstractOperations");\r
+ field = class1.getDeclaredField("getDefinitions");\r
+ field_definition.setAccessible(true);\r
+ field_abstractNodes.setAccessible(true);\r
+ field_abstractConnections.setAccessible(true);\r
+ field_abstractFlows.setAccessible(true);\r
+ field_abstractOperations.setAccessible(true);\r
+ field.setAccessible(true);\r
+\r
+ dataBroker = mock(DataBroker.class);\r
+ tenantManage = mock(TenantManage.class);\r
+\r
+ updateTemplateDefinitionLang = new UpdateTemplateDefinitionLang(dataBroker,tenantManage);\r
+ }\r
+\r
+ @Test\r
+ public void testTemplateDefinitionLang() throws Exception {\r
+\r
+ UserId userId = mock(UserId.class);\r
+ NodeName nodeName = mock(NodeName.class);\r
+ AbstractNode abstractNode = mock(AbstractNode.class);\r
+ ConnectionName connectionName = mock(ConnectionName.class);\r
+ AbstractConnection abstractConnection = mock(AbstractConnection.class);\r
+ FlowName flowName = mock(FlowName.class);\r
+ AbstractFlow abstractFlow = mock(AbstractFlow.class);\r
+ OperationName operationName = mock(OperationName.class);\r
+ AbstractOperation abstractOperation = mock(AbstractOperation.class);\r
+ UpdateTemplateDefinition updateTemplateDefinition = mock(UpdateTemplateDefinition.class);\r
+ String templateName = new String("test");\r
+ String value = new String("string");\r
+ LinkedHashMap<String, String> parameters = new LinkedHashMap<String, String>();\r
+ Map<NodeName, AbstractNode> abstractNodes = new HashMap<NodeName, AbstractNode>();\r
+ Map<ConnectionName, AbstractConnection> abstractConnections = new HashMap<ConnectionName, AbstractConnection>();\r
+ Map<FlowName, AbstractFlow> abstractFlows = new HashMap<FlowName, AbstractFlow>();\r
+ Map<OperationName, AbstractOperation> abstractOperations = new HashMap<OperationName, AbstractOperation>();\r
+\r
+ parameters.put(value, NEMOConstants.string);\r
+ abstractConnections.put(connectionName,abstractConnection);\r
+ abstractNodes.put(nodeName, abstractNode);\r
+ abstractFlows.put(flowName,abstractFlow);\r
+ abstractOperations.put(operationName,abstractOperation);\r
+ field_definition.set(updateTemplateDefinitionLang, updateTemplateDefinition);\r
+\r
+ when(updateTemplateDefinition.checkTemplateDefinition(any(UserId.class),any(TemplateDefinition.class)))\r
+ .thenReturn("1")\r
+ .thenReturn("2")\r
+ .thenReturn("3");\r
+ Assert.assertTrue(updateTemplateDefinitionLang.templateDefinitionLang(userId, templateName, parameters).equals("1"));\r
+ parameters.clear();\r
+ parameters.put(value, NEMOConstants.integer);\r
+ field_abstractNodes.set(updateTemplateDefinitionLang, abstractNodes);\r
+ field_abstractConnections.set(updateTemplateDefinitionLang, abstractConnections);\r
+ field_abstractFlows.set(updateTemplateDefinitionLang,abstractFlows);\r
+ field_abstractOperations.set(updateTemplateDefinitionLang,abstractOperations);\r
+ Assert.assertTrue(updateTemplateDefinitionLang.templateDefinitionLang(userId, templateName, parameters).equals("2"));\r
+ parameters.clear();\r
+ parameters.put(value, NEMOConstants.range);\r
+ Assert.assertTrue(updateTemplateDefinitionLang.templateDefinitionLang(userId, templateName, parameters).equals("3"));\r
+ verify(updateTemplateDefinition,times(3)).checkTemplateDefinition(any(UserId.class),any(TemplateDefinition.class));\r
+ }\r
+\r
+ @Test\r
+ public void testCreateAbstractNode() throws Exception {\r
+ String name = new String("name");\r
+ String type = NEMOConstants.host;\r
+ List<String> subnodes = new ArrayList<String>();\r
+ LinkedHashMap<String, LinkedHashMap<String,String>> propertyList = new LinkedHashMap<String, LinkedHashMap<String, String>>();\r
+ GetDefinitions getDefinitions = mock(GetDefinitions.class);\r
+ String nodeName1 = new String("nodeName");\r
+ String propertyName = new String("propertyName");\r
+ String ValueName = new String("valuename");\r
+ String Value = NEMOConstants.string;\r
+ NodeName nodeName = new NodeName(nodeName1);\r
+ AbstractNode abstractNode = mock(AbstractNode.class);\r
+ PhysicalHostId physicalHostId = mock(PhysicalHostId.class);\r
+ PhysicalHost physicalHost = mock(PhysicalHost.class);\r
+ LinkedHashMap<String, String> values = new LinkedHashMap<String, String>();\r
+ Map<PhysicalHostName, PhysicalHost> physicalHostMap = mock(Map.class);\r
+ Map<NodeName, AbstractNode> abstractNodes = new HashMap<NodeName, AbstractNode>();\r
+\r
+ field.set(updateTemplateDefinitionLang, getDefinitions);\r
+ subnodes.add(nodeName1);\r
+\r
+ when(getDefinitions.getPhysicalHost()).thenReturn(physicalHostMap);\r
+ when(physicalHostMap.containsKey(any(PhysicalHostName.class)))\r
+ .thenReturn(false)\r
+ .thenReturn(true);\r
+ Assert.assertTrue(updateTemplateDefinitionLang.createAbstractNode(name, type, subnodes, propertyList).equals("The host " + name + " is not exist in physical network."));\r
+ when(physicalHostMap.get(any(PhysicalHostName.class))).thenReturn(physicalHost);\r
+ when(physicalHost.getHostId()).thenReturn(physicalHostId);\r
+ when(physicalHostId.getValue()).thenReturn("00001111-0000-0000-0000-000011112222");\r
+ //test nodes empty\r
+ field_abstractNodes.set(updateTemplateDefinitionLang, abstractNodes);\r
+ Assert.assertTrue(updateTemplateDefinitionLang.createAbstractNode(name, type, subnodes, propertyList).equals("There are no nodes."));\r
+ //nodes not empty propertyList empty\r
+ abstractNodes.put(nodeName, abstractNode);\r
+ Assert.assertTrue(updateTemplateDefinitionLang.createAbstractNode(name, type, subnodes, propertyList) == null);\r
+ //propertyList not empty\r
+ propertyList.put(propertyName,values);\r
+ values.put(ValueName,Value);\r
+ Assert.assertTrue(updateTemplateDefinitionLang.createAbstractNode(name, type, subnodes, propertyList) == null);\r
+ values.clear();\r
+ values.put("11", NEMOConstants.integer);\r
+ Assert.assertTrue(updateTemplateDefinitionLang.createAbstractNode(name, type, subnodes, propertyList) == null);\r
+ values.clear();\r
+ values.put("1,1", NEMOConstants.range);\r
+ Assert.assertTrue(updateTemplateDefinitionLang.createAbstractNode(name, type, subnodes, propertyList) == null);\r
+ type = NEMOConstants.SubNodes;\r
+ Assert.assertTrue(updateTemplateDefinitionLang.createAbstractNode(name, type, subnodes, propertyList) == null);\r
+\r
+ }\r
+\r
+ @Test\r
+ public void testCreateAbstractConnection() throws Exception {\r
+ String name = new String("name");\r
+ String type = NEMOConstants.host;\r
+ String endNode = new String("endNode");\r
+ String propertyName = new String("propertyName");\r
+ String ValueName = new String("valuename");\r
+ String Value = NEMOConstants.string;\r
+ List<String> endnodes = new ArrayList<String>();\r
+ NodeName nodeName = mock(NodeName.class);\r
+ NodeId nodeId = mock(NodeId.class);\r
+ AbstractNode abstractNode = mock(AbstractNode.class);\r
+ LinkedHashMap<String, String> values = new LinkedHashMap<String, String>();\r
+ LinkedHashMap<String, LinkedHashMap<String,String>> propertyList = new LinkedHashMap<String, LinkedHashMap<String, String>>();\r
+ Map<NodeName, AbstractNode> abstractNodes = new HashMap<NodeName, AbstractNode>();\r
+\r
+ abstractNodes.put(nodeName, abstractNode);\r
+ endnodes.add(endNode);\r
+\r
+ //test abstractNodes empty\r
+ Assert.assertTrue(updateTemplateDefinitionLang.createAbstractConnection(name, type, endnodes, propertyList).equals("There are nodes exist."));\r
+ //abstractNodes not empty\r
+ field_abstractNodes.set(updateTemplateDefinitionLang, abstractNodes);\r
+ Assert.assertTrue(updateTemplateDefinitionLang.createAbstractConnection(name, type, endnodes, propertyList).equals("The endnode " + endNode + " is not exit."));\r
+ abstractNodes.clear();\r
+ abstractNodes.put(new NodeName(endNode), abstractNode);\r
+ when(abstractNode.getNodeId()).thenReturn(nodeId);\r
+ Assert.assertTrue(updateTemplateDefinitionLang.createAbstractConnection(name, type, endnodes, propertyList) == null);\r
+ //test propertyList not null\r
+ propertyList.put(propertyName, values);\r
+ // string\r
+ values.put(ValueName,Value);\r
+ Assert.assertTrue(updateTemplateDefinitionLang.createAbstractConnection(name, type, endnodes, propertyList) == null);\r
+ values.clear();\r
+ values.put("11", NEMOConstants.integer);\r
+ Assert.assertTrue(updateTemplateDefinitionLang.createAbstractConnection(name, type, endnodes, propertyList) == null);\r
+ values.clear();\r
+ values.put("1,1", NEMOConstants.range);\r
+ Assert.assertTrue(updateTemplateDefinitionLang.createAbstractConnection(name, type, endnodes, propertyList) == null);\r
+\r
+ }\r
+\r
+ @Test\r
+ public void testCreateAbstractFlow() throws Exception {\r
+ String name = new String("name");\r
+ String value = new String("value");\r
+ String Value = NEMOConstants.string;\r
+ String matchName = new String("matchName");\r
+ LinkedHashMap<String,String> values = new LinkedHashMap<String, String>();\r
+ LinkedHashMap<String,LinkedHashMap<String,String>> matches = new LinkedHashMap<String, LinkedHashMap<String, String>>();\r
+ LinkedHashMap<String,LinkedHashMap<String,String>> propertyList = new LinkedHashMap<String, LinkedHashMap<String, String>>();\r
+\r
+ matches.put(matchName,values);\r
+\r
+ //string\r
+ values.put(value,Value);\r
+ Assert.assertTrue(updateTemplateDefinitionLang.createAbstractFlow(name, matches, propertyList) == null);\r
+ values.clear();\r
+ values.put("11", NEMOConstants.integer);\r
+ Assert.assertTrue(updateTemplateDefinitionLang.createAbstractFlow(name, matches, propertyList) == null);\r
+ values.clear();\r
+ values.put("1,1", NEMOConstants.range);\r
+ Assert.assertTrue(updateTemplateDefinitionLang.createAbstractFlow(name, matches, propertyList) == null);\r
+\r
+ }\r
+\r
+ @Test\r
+ public void testCreateAbstractOperation() throws Exception {\r
+ String name = new String("name");\r
+ String target = new String("target");\r
+ String priority = new String("1");\r
+ LinkedHashMap<String,LinkedHashMap<String,String>> conditions = new LinkedHashMap<String, LinkedHashMap<String, String>>();\r
+ LinkedHashMap<String,LinkedHashMap<String,String>>actions = new LinkedHashMap<String, LinkedHashMap<String, String>>();\r
+\r
+ String conditionName = new String("!,name,==");\r
+ String value = new String("value");\r
+ String actionName = new String("actionName");\r
+ AbstractNode abstractNode = mock(AbstractNode.class);\r
+ AbstractFlow abstractFlow = mock(AbstractFlow.class);\r
+ AbstractConnection abstractConnection = mock(AbstractConnection.class);\r
+ LinkedHashMap<String,String> parameters = new LinkedHashMap<String, String>();\r
+ LinkedHashMap<String, String> targetValue = new LinkedHashMap<String, String>();\r
+ Map<NodeName, AbstractNode> abstractNodes = mock(Map.class);\r
+ Map<ConnectionName, AbstractConnection> abstractConnections = mock(Map.class);\r
+ Map<FlowName, AbstractFlow> abstractFlows = mock(Map.class);\r
+\r
+ field_abstractNodes.set(updateTemplateDefinitionLang, abstractNodes);\r
+ field_abstractConnections.set(updateTemplateDefinitionLang, abstractConnections);\r
+ field_abstractFlows.set(updateTemplateDefinitionLang, abstractFlows);\r
+\r
+ when(abstractNodes.containsKey(any(NodeName.class))).thenReturn(true);\r
+ when(abstractNodes.get(new NodeName(target))).thenReturn(abstractNode);\r
+ when(abstractNode.getNodeId()).thenReturn(mock(NodeId.class));\r
+ when(abstractConnections.containsKey(any(ConnectionName.class))).thenReturn(true);\r
+ when(abstractConnections.get(new ConnectionName(target))).thenReturn(abstractConnection);\r
+ when(abstractConnection.getConnectionId()).thenReturn(mock(ConnectionId.class));\r
+ when(abstractFlows.containsKey(any(FlowName.class))).thenReturn(true);\r
+ when(abstractFlows.get(new FlowName(target))).thenReturn(abstractFlow);\r
+ when(abstractFlow.getFlowId()).thenReturn(mock(FlowId.class));\r
+ Assert.assertTrue(updateTemplateDefinitionLang.createAbstractOperation(name, target, priority, conditions, actions) == null);\r
+ //test conditions not empty\r
+ targetValue.put(value,NEMOConstants.string); //string\r
+ conditions.put(conditionName, targetValue);// not equal\r
+// System.out.println(",1,2".split(NEMOConstants.comma)[1] == null);\r
+// System.out.println("split" + conditionName.split(NEMOConstants.comma)[0] + "+" + conditionName.split(NEMOConstants.comma)[2]);\r
+ Assert.assertTrue(updateTemplateDefinitionLang.createAbstractOperation(name, target, priority, conditions, actions) == null);\r
+ targetValue.clear();\r
+ conditions.clear();\r
+ targetValue.put("11", NEMOConstants.integer); // int\r
+ conditions.put("&&,name,!=", targetValue);// and notEqual\r
+ Assert.assertTrue(updateTemplateDefinitionLang.createAbstractOperation(name, target, priority, conditions, actions) == null);\r
+ targetValue.clear();\r
+ conditions.clear();\r
+ targetValue.put("1,1", NEMOConstants.range); // range\r
+ conditions.put("||,name,>", targetValue);// and greater_than\r
+ Assert.assertTrue(updateTemplateDefinitionLang.createAbstractOperation(name, target, priority, conditions, actions) == null);\r
+ targetValue.clear();\r
+ conditions.clear();\r
+ targetValue.put("1,1", NEMOConstants.range); // range\r
+ conditions.put(",name,<", targetValue);// null less_than\r
+ Assert.assertTrue(updateTemplateDefinitionLang.createAbstractOperation(name, target, priority, conditions, actions) == null);\r
+ targetValue.clear();\r
+ conditions.clear();\r
+ targetValue.put("1,1", NEMOConstants.range); // range\r
+ conditions.put(",name,>=", targetValue);// null not_less_than\r
+ Assert.assertTrue(updateTemplateDefinitionLang.createAbstractOperation(name, target, priority, conditions, actions) == null);\r
+ targetValue.clear();\r
+ conditions.clear();\r
+ targetValue.put("1,1", NEMOConstants.range); // range\r
+ conditions.put(",name,<=", targetValue);// null not_greater_than\r
+ Assert.assertTrue(updateTemplateDefinitionLang.createAbstractOperation(name, target, priority, conditions, actions) == null);\r
+ targetValue.clear();\r
+ conditions.clear();\r
+ targetValue.put("1,1", NEMOConstants.range); // range\r
+ conditions.put(",name,*", targetValue);// null between\r
+ Assert.assertTrue(updateTemplateDefinitionLang.createAbstractOperation(name, target, priority, conditions, actions) == null);\r
+ targetValue.clear();\r
+ conditions.clear();\r
+ targetValue.put("1,1", NEMOConstants.range); // range\r
+ conditions.put(",name,==", targetValue);// null equal\r
+ Assert.assertTrue(updateTemplateDefinitionLang.createAbstractOperation(name, target, priority, conditions, actions) == null);\r
+\r
+ //test actions not empty\r
+ parameters.put("string", NEMOConstants.string);\r
+ actions.put(actionName, parameters);\r
+ Assert.assertTrue(updateTemplateDefinitionLang.createAbstractOperation(name, target, priority, conditions, actions) == null);\r
+ actions.clear();\r
+ parameters.clear();\r
+ parameters.put("11", NEMOConstants.integer);\r
+ actions.put(actionName, parameters);\r
+ Assert.assertTrue(updateTemplateDefinitionLang.createAbstractOperation(name, target, priority, conditions, actions) == null);\r
+ actions.clear();\r
+ parameters.clear();\r
+ parameters.put("1,1", NEMOConstants.range);\r
+ actions.put(actionName,parameters);\r
+ Assert.assertTrue(updateTemplateDefinitionLang.createAbstractOperation(name, target, priority, conditions, actions).equals("The action values are not consistent."));\r
+\r
+\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+/*\r
+ * Copyright (c) 2015 Huawei, Inc. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+package org.opendaylight.nemo.user.vnspacemanager.languagestyle.updateintentlang;\r
+\r
+import junit.framework.TestCase;\r
+import org.junit.Assert;\r
+import org.junit.Before;\r
+import org.junit.Test;\r
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;\r
+import org.opendaylight.nemo.user.tenantmanager.TenantManage;\r
+import org.opendaylight.nemo.user.vnspacemanager.languagestyle.NEMOConstants;\r
+import org.opendaylight.nemo.user.vnspacemanager.languagestyle.updateintentlang.UpdateTemplateInstanceLang;\r
+import org.opendaylight.nemo.user.vnspacemanager.structurestyle.updateintent.UpdateTemplateInstance;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.*;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.template.instances.TemplateInstance;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.template.instances.TemplateInstanceBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.template.instances.TemplateInstanceKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.template.rev151201.template.instance.grouping.TemplateParameter;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.template.rev151201.template.instance.grouping.TemplateParameterBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.template.rev151201.template.instance.grouping.TemplateParameterKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.template.rev151201.template.instance.grouping.template.parameter.ParameterValuesBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.template.rev151201.template.instance.grouping.template.parameter.parameter.values.*;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+\r
+import java.lang.reflect.Field;\r
+import java.util.*;\r
+import static org.junit.Assert.*;\r
+import static org.mockito.Mockito.*;\r
+/**\r
+ * Created by zhangmeng on 2015/12/29.\r
+ */\r
+public class UpdateTemplateInstanceLangTest extends TestCase {\r
+ private DataBroker dataBroker;\r
+ private TenantManage tenantManage;\r
+ private UpdateTemplateInstanceLang updateTemplateInstanceLang;\r
+ @Before\r
+ public void setUp() throws Exception {\r
+ dataBroker = mock(DataBroker.class);\r
+ tenantManage = mock(TenantManage.class);\r
+\r
+ updateTemplateInstanceLang = new UpdateTemplateInstanceLang(dataBroker,tenantManage);\r
+ }\r
+\r
+ @Test\r
+ public void testTemplateInstanceLang() throws Exception {\r
+ Class<UpdateTemplateInstanceLang> class1 = UpdateTemplateInstanceLang.class;\r
+ Field field = class1.getDeclaredField("updateTemplateInstance");\r
+ field.setAccessible(true);\r
+\r
+ UserId userId = mock(UserId.class);\r
+ String nodeName = new String("nodename");\r
+ String nodeType = new String("nodetype");\r
+ LinkedHashMap<String, LinkedHashMap<String,String>> propertyList = new LinkedHashMap<String, LinkedHashMap<String, String>>();\r
+ LinkedHashMap<String, String> values = new LinkedHashMap<String, String>();\r
+ Map map = mock(Map.class);\r
+ UpdateTemplateInstance updateTemplateInstance = mock(UpdateTemplateInstance.class);\r
+ String parameterName = new String("parameterName");\r
+\r
+ propertyList.put(parameterName, values);\r
+ values.put("string", NEMOConstants.string);\r
+ field.set(updateTemplateInstanceLang, updateTemplateInstance);\r
+\r
+ when(tenantManage.getTemplateInstance(userId))\r
+ .thenReturn(map)\r
+ .thenReturn(map)\r
+ .thenReturn(null);\r
+ when(tenantManage.getObjectId(userId, nodeName)).thenReturn("11111111-1111-1111-1111-111111111111");\r
+ when(map.containsKey(any(TemplateInstanceId.class)))\r
+ .thenReturn(true)\r
+ .thenReturn(false);\r
+ Assert.assertTrue(updateTemplateInstanceLang.templateInstanceLang(userId, nodeName, nodeType, propertyList).equals("The instance " + nodeName + " has exist."));\r
+ verify(tenantManage,times(2)).getTemplateInstance(userId);\r
+ Assert.assertTrue(propertyList.get(parameterName) == values);\r
+ when(updateTemplateInstance.checkTemplateInstance(any(UserId.class), any(TemplateInstance.class)))\r
+ .thenReturn(null)\r
+ .thenReturn("int")\r
+ .thenReturn("range");\r
+ doNothing().when(tenantManage).setUserTemplateInstance(any(UserId.class), any(TemplateInstanceId.class), any(TemplateInstance.class));\r
+ Assert.assertTrue(updateTemplateInstanceLang.templateInstanceLang(userId, nodeName, nodeType, propertyList) == null);\r
+ values.clear();\r
+ values.put("11", NEMOConstants.integer);\r
+ Assert.assertTrue(updateTemplateInstanceLang.templateInstanceLang(userId, nodeName, nodeType, propertyList).equals("int"));\r
+ values.clear();\r
+ values.put("1,1", NEMOConstants.range);\r
+ Assert.assertTrue(updateTemplateInstanceLang.templateInstanceLang(userId, nodeName, nodeType, propertyList).equals("range"));\r
+ verify(updateTemplateInstance,times(3)).checkTemplateInstance(any(UserId.class), any(TemplateInstance.class));\r
+ }\r
+}
\ No newline at end of file