Implement CLI configuration generation.
[nemo.git] / nemo-impl / src / test / java / org / opendaylight / nemo / user / vnspacemanager / syntaxcheck / NodeDefinitionCheckTest.java
1 /*\r
2  * Copyright (c) 2015 Huawei, Inc. and others. All rights reserved.\r
3  *\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
7  */\r
8 package org.opendaylight.nemo.user.vnspacemanager.syntaxcheck;\r
9 \r
10 import org.junit.runner.RunWith;\r
11 import static org.powermock.api.mockito.PowerMockito.verifyPrivate;\r
12 import static org.powermock.api.mockito.PowerMockito.doNothing;\r
13 import static org.powermock.api.mockito.PowerMockito.spy;\r
14 import org.powermock.core.classloader.annotations.PrepareForTest;\r
15 import org.powermock.modules.junit4.PowerMockRunner;\r
16 \r
17 import junit.framework.TestCase;\r
18 import org.junit.Assert;\r
19 import org.junit.Before;\r
20 import org.junit.Test;\r
21 \r
22 import static org.junit.Assert.*;\r
23 import org.opendaylight.controller.md.sal.binding.api.DataBroker;\r
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.NodeType;\r
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.PropertyName;\r
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Node;\r
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.NodeDefinitions;\r
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.node.definitions.NodeDefinition;\r
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.node.instance.Property;\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.property.definitions.PropertyDefinition;\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.property.instance.PropertyValues;\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.node.instance.Property;\r
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.property.definitions.PropertyDefinition;\r
34 \r
35 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;\r
36 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;\r
37 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;\r
38 import org.opendaylight.yangtools.yang.common.RpcResult;\r
39 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;\r
40 import org.opendaylight.yangtools.yang.common.RpcError.ErrorType;\r
41 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;\r
42 import com.google.common.base.Optional;\r
43 import com.google.common.base.Function;\r
44 import com.google.common.util.concurrent.CheckedFuture;\r
45 import com.google.common.util.concurrent.FutureCallback;\r
46 import com.google.common.util.concurrent.Futures;\r
47 import com.google.common.util.concurrent.ListenableFuture;\r
48 \r
49 import org.slf4j.Logger;\r
50 import org.slf4j.LoggerFactory;\r
51 import java.util.List;\r
52 \r
53 import java.util.Collection;\r
54 import java.util.Iterator;\r
55 import java.util.ArrayList;\r
56 import java.util.ListIterator;\r
57 \r
58 import java.lang.reflect.Method; \r
59 import static org.mockito.Mockito.*;\r
60 \r
61 @RunWith(PowerMockRunner.class) \r
62 @PrepareForTest(NodeDefinitionCheck.class) \r
63 public class NodeDefinitionCheckTest{\r
64         private NodeDefinitionCheck nodeDefinitionCheck;\r
65         private DataBroker dataBroker;\r
66     private List<NodeDefinition> nodeDefinitionList;\r
67         private Node node;\r
68         private NodeDefinition nodeDefinition;\r
69         private List<Property> nodeProperties;\r
70         private List<PropertyDefinition> nodePropertyDefinitions;\r
71         private Property property;\r
72         private PropertyDefinition propertyDefinition;\r
73     //private static final Logger LOG = LoggerFactory.getLogger(NodeDefinitionCheck.class);\r
74          @org.junit.Before\r
75     public void setUp() throws Exception {\r
76                 nodeDefinition = mock(NodeDefinition.class);\r
77                 nodeDefinitionList = new ArrayList<NodeDefinition>(3);\r
78         // LOG = mock(Logger.class);\r
79             node = mock(Node.class);\r
80         dataBroker = mock(DataBroker.class);\r
81         nodeDefinitionCheck = new NodeDefinitionCheck(dataBroker);\r
82                 property = mock(Property.class);\r
83                 propertyDefinition = mock(PropertyDefinition.class);\r
84                 nodeProperties = new ArrayList<Property>(3);\r
85                 nodePropertyDefinitions = new ArrayList<PropertyDefinition>(3);\r
86     }\r
87          @org.junit.Test\r
88     public void testcheckConnectionDefinition() throws Exception {\r
89         CheckedFuture nodedefinitionFuture = mock(CheckedFuture.class);\r
90         ReadOnlyTransaction readOnlyTransaction = mock(ReadOnlyTransaction.class);\r
91         when(dataBroker.newReadOnlyTransaction()).thenReturn(readOnlyTransaction);\r
92         when(readOnlyTransaction.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class))).thenReturn(nodedefinitionFuture);\r
93         //branch nodeDefinitionList null\r
94                 Assert.assertEquals(nodeDefinitionCheck.CheckNodeDefinition(node),"This type of Node has not been defined.");\r
95                 \r
96                 //use reflact test private checkProperty\r
97                 Method testcheckProperty = nodeDefinitionCheck.getClass().getDeclaredMethod("checkProperty",List.class,List.class);  \r
98                 testcheckProperty.setAccessible(true);\r
99                 //branch1 nodeProperties null, nodePropertyDefinition null\r
100                 Assert.assertNull(testcheckProperty.invoke(nodeDefinitionCheck,nodeProperties,nodePropertyDefinitions));\r
101                 //branch2 \r
102                 nodeProperties.add(property);\r
103                 nodePropertyDefinitions.add(propertyDefinition);\r
104                 PropertyName propertyName1 = mock(PropertyName.class);\r
105                 PropertyName propertyName2 = mock(PropertyName.class);\r
106                 when(property.getPropertyName()).thenReturn(propertyName1);\r
107                 when(propertyDefinition.getPropertyName()).thenReturn(propertyName2);\r
108                 Assert.assertEquals(testcheckProperty.invoke(nodeDefinitionCheck,nodeProperties,nodePropertyDefinitions),"The property"+property.getPropertyName().toString()+"has not been defined.");\r
109                 //branch3\r
110                 when(property.getPropertyName()).thenReturn(propertyName1);\r
111                 PropertyName propertyName3 = propertyName1;\r
112                 when(propertyDefinition.getPropertyName()).thenReturn(propertyName3);\r
113                 PropertyValues propertyValues = mock(PropertyValues.class);\r
114                 when(property.getPropertyValues()).thenReturn(propertyValues);\r
115                 Assert.assertNotNull(property.getPropertyValues());\r
116                 Assert.assertNull(propertyDefinition.getPropertyValueType());\r
117                 //dataBroker test\r
118         verify(dataBroker).newReadOnlyTransaction();\r
119         verify(readOnlyTransaction).read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class));\r
120                 verifyPrivate(nodeDefinitionCheck).invoke("fetchNodeDefinitions");\r
121     }\r
122 }