Modified two test files
[nemo.git] / nemo-impl / src / test / java / org / opendaylight / nemo / user / vnspacemanager / structurestyle / updateintent / UpdateNodeTest.java
index 70e3515d150169c43b789daefa505f3c3da425bb..76cf7bf45cdc81912219ea0294d78565e9a7f672 100644 (file)
-/*\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.structurestyle.updateintent;\r
-import org.opendaylight.nemo.user.vnspacemanager.structurestyle.updateintent.UpdateNode;\r
-\r
-import static org.mockito.Mockito.mock;\r
-import static org.mockito.Mockito.*;\r
-import org.junit.Assert;\r
-import org.junit.Before;\r
-import org.junit.Test;\r
-import junit.framework.TestCase;\r
-\r
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;\r
-import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;\r
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;\r
-import org.opendaylight.nemo.user.tenantmanager.TenantManage;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.UserId;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.Users;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.Objects;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Node;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.NodeBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.NodeKey;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.users.User;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.users.UserKey;\r
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;\r
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;\r
-import com.google.common.util.concurrent.CheckedFuture;\r
-import com.google.common.util.concurrent.FutureCallback;\r
-import com.google.common.util.concurrent.Futures;\r
-import org.slf4j.Logger;\r
-import org.slf4j.LoggerFactory;\r
-import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;\r
-\r
-public class UpdateNodeTest {\r
-\r
-    private UpdateNode updateNode;\r
-\r
-    private DataBroker dataBroker;\r
-    private TenantManage tenantManage;\r
-    private UserId userId;\r
-    private Node node;\r
-    \r
-    @org.junit.Before\r
-    public void setUp() throws Exception {\r
-        dataBroker = mock(DataBroker.class);\r
-        tenantManage = mock(TenantManage.class);\r
-        userId = mock(UserId.class);\r
-        node = mock(Node.class);\r
-        \r
-        updateNode = new UpdateNode(dataBroker, tenantManage);\r
-\r
-    }\r
-\r
-    @org.junit.Test\r
-    public void testNodeHandling() throws Exception {\r
-       \r
-       String errorDefinition = new String("This type of Node has not been defined.");\r
-       \r
-       CheckedFuture connectiondefinitionFuture = mock(CheckedFuture.class);\r
-        ReadOnlyTransaction readOnlyTransaction = mock(ReadOnlyTransaction.class);\r
-        when(dataBroker.newReadOnlyTransaction()).thenReturn(readOnlyTransaction);\r
-        when(readOnlyTransaction.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class))).thenReturn(connectiondefinitionFuture); \r
-\r
-       Assert.assertEquals(updateNode.NodeHandling(userId,node),errorDefinition);\r
-       \r
-    }\r
+/*
+ * Copyright (c) 2015 Huawei, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.nemo.user.vnspacemanager.structurestyle.updateintent;
+
+import org.opendaylight.nemo.user.vnspacemanager.structurestyle.updateintent.UpdateNode;
+import org.opendaylight.nemo.user.tenantmanager.TenantManage;
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.FutureCallback;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.SettableFuture;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.node.definitions.NodeDefinition;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.Objects;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Node;
+import org.opendaylight.nemo.user.tenantmanager.TenantManage;
+import org.opendaylight.nemo.user.vnspacemanager.languagestyle.NEMOConstants;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.NodeType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.UserId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.Users;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.Objects;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.NodeBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.NodeKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.users.User;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.users.UserKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.NodeDefinitions;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.node.definitions.NodeDefinition;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.node.instance.Property;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.property.definitions.PropertyDefinition;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.property.instance.PropertyValues;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.property.instance.property.values.StringValue;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.node.definitions.NodeDefinition;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.PropertyName;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.property.instance.PropertyValues;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.NodeId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.NodeName;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.NodeKey;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+import java.util.LinkedList;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import java.util.*;
+import java.util.List;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import com.google.common.util.concurrent.CheckedFuture;
+
+/**
+ * Created by ldzd11 on 2015/12/18.
+ */
+public class UpdateNodeTest {
+
+    private UpdateNode updateNode;
+    private Node node;
+    private Node node2;
+    private NodeName nodeName;
+    private NodeName nodeName2;
+    private List<Node> nodeList;
+    private DataBroker dataBroker;
+    private TenantManage tenantManage;
+    private Property property;
+    private List<Property> propertyList;
+    private PropertyName propertyName;
+    private PropertyName propertyName2;
+    private StringValue stringValue;
+    private List<StringValue> stringValues;
+    private PropertyValues propertyValues;
+    private ValueCheck valueCheck;
+    private PropertyDefinition propertyDefinition;
+    private NodeType nodeType;
+    private NodeType nodeType2;
+    private List<PropertyDefinition> propertyDefinitions;
+    private UserId userId;
+    private WriteTransaction writeTransaction;
+    private User user;
+    private NodeId nodeId;
+    private NodeKey nodeKey;
+    private Objects objects;
+    @org.junit.Before
+    public void setUp() throws Exception {
+        dataBroker = mock(DataBroker.class);
+        tenantManage = mock(TenantManage.class);
+        propertyValues = mock(PropertyValues.class);
+        valueCheck = mock(ValueCheck.class);
+        nodeId = mock(NodeId.class);
+        nodeName = mock(NodeName.class);
+        nodeName2 = mock(NodeName.class);
+
+        propertyName = mock(PropertyName.class);
+        propertyName2 = mock(PropertyName.class);
+
+        property = mock(Property.class);
+        propertyList = new ArrayList<Property>(1);
+        propertyList.add(property);
+
+        stringValue = mock(StringValue.class);
+        stringValues = new ArrayList<StringValue>(1);
+        stringValues.add(stringValue);
+        nodeType = mock(NodeType.class);
+
+        propertyDefinition=  mock(PropertyDefinition.class);
+        propertyDefinitions = new ArrayList<PropertyDefinition>(1);
+        propertyDefinitions.add(propertyDefinition);
+
+        node = mock(Node.class);
+        node2 = mock(Node.class);
+        userId = mock(UserId.class);
+        user = mock(User.class);
+        objects = mock(Objects.class);
+        nodeKey = mock(NodeKey.class);
+
+        nodeList = new ArrayList<Node>(1);
+        nodeList.add(node2);
+        writeTransaction = mock(WriteTransaction.class);
+
+
+
+        updateNode = new UpdateNode(dataBroker,tenantManage);
+        nodeType2 = mock(NodeType.class);
+
+
+
+    }
+
+    @org.junit.Test
+    public void testNodeHandling() throws Exception {
+        //into checkDefinition
+        CheckedFuture connectiondefinitionFuture = mock(CheckedFuture.class);
+        ReadOnlyTransaction readOnlyTransaction = mock(ReadOnlyTransaction.class);
+        when(dataBroker.newReadOnlyTransaction()).thenReturn(readOnlyTransaction);
+        when(readOnlyTransaction.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class))).thenReturn(connectiondefinitionFuture);
+
+        Class<UpdateNode> class1 = UpdateNode.class;
+        Class<GetDefinitions> class2 = GetDefinitions.class;
+        Field field = class1.getDeclaredField("getDefinitions");
+        field.setAccessible(true);
+        Field field1 = class2.getDeclaredField("nodeDefinitionList");
+        field1.setAccessible(true);
+
+
+        List<NodeDefinition> nodeDefinitionList = new ArrayList<NodeDefinition>();
+        NodeDefinition nodeDefinition = mock(NodeDefinition.class);
+        when(nodeDefinition.getNodeType()).thenReturn(nodeType);
+        nodeDefinitionList.add(nodeDefinition);
+
+        field1.set(field.get(updateNode), nodeDefinitionList);
+        Assert.assertTrue((List<NodeDefinition>) field1.get(field.get(updateNode)) == nodeDefinitionList);
+
+        when(node.getNodeType()).thenReturn(nodeType);
+        when(node.getProperty()).thenReturn(null);
+        when(nodeDefinition.getPropertyDefinition()).thenReturn(null);
+
+
+
+        when(tenantManage.getUser()).thenReturn(null);
+        //error = null  continue
+        when(node.getNodeId()).thenReturn(nodeId);
+        when(node.getKey()).thenReturn(nodeKey);
+        when(dataBroker.newWriteOnlyTransaction()).thenReturn(writeTransaction);
+        CheckedFuture<Void, TransactionCommitFailedException> f;
+        f=mock(CheckedFuture.class);
+        when(writeTransaction.submit()).thenReturn(f);
+        Assert.assertEquals(updateNode.NodeHandling(userId, node), null);
+        //verify(node).getProperty();
+        //Assert.assertEquals(updateNode.NodeHandling(userId,node),"The property propertyname has not been defined.")
+
+    }
+    @Test
+    public void testcheckInstance() throws Exception {
+        Class<UpdateNode> class1 = UpdateNode.class;
+        Method method = class1.getDeclaredMethod("checkInstance", new Class[]{UserId.class, Node.class});
+        method.setAccessible(true);
+
+        when(tenantManage.getUser()).thenReturn(user);
+        when(user.getObjects()).thenReturn(objects);
+        when(user.getObjects().getNode()).thenReturn(nodeList);
+        when(node.getNodeId()).thenReturn(nodeId);
+        when(node2.getNodeId()).thenReturn(nodeId);
+        when(node.getNodeName()).thenReturn(nodeName);
+        when(node2.getNodeName()).thenReturn(nodeName2);
+        Assert.assertEquals(method.invoke(updateNode, userId, node), "The node name should not be changed.");
+
+        when(node.getNodeName()).thenReturn(nodeName);
+        when(node2.getNodeName()).thenReturn(nodeName);
+        when(node.getNodeType()).thenReturn(nodeType);
+        when(node2.getNodeType()).thenReturn(nodeType2);
+        Assert.assertEquals(method.invoke(updateNode, userId, node), "The node type should not be changed.");
+
+
+    }
+
+@Test
+    public void testcheckDefinition() throws Exception {
+
+        Class<UpdateNode> class3 = UpdateNode.class;
+        Method method = class3.getDeclaredMethod("checkDefinition", new Class[]{Node.class});
+        method.setAccessible(true);
+
+        CheckedFuture nodedefinitionFuture = mock(CheckedFuture.class);
+        ReadOnlyTransaction readOnlyTransaction = mock(ReadOnlyTransaction.class);
+        when(dataBroker.newReadOnlyTransaction()).thenReturn(readOnlyTransaction);
+        when(readOnlyTransaction.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class))).thenReturn(nodedefinitionFuture);
+
+        List<NodeDefinition> nodeDefinitionList = new ArrayList<NodeDefinition>();
+        List<NodeDefinition> nodeDefinitionListnull = new ArrayList<NodeDefinition>();
+        NodeDefinition nodeDefinition = mock(NodeDefinition.class);
+        nodeDefinitionList.add(nodeDefinition);
+        when(nodeDefinition.getNodeType()).thenReturn(nodeType);
+
+        Class<UpdateNode> class1 = UpdateNode.class;
+        Class<GetDefinitions> class2 = GetDefinitions.class;
+        Field field = class1.getDeclaredField("getDefinitions");
+        field.setAccessible(true);
+        Field field1 = class2.getDeclaredField("nodeDefinitionList");
+        field1.setAccessible(true);
+
+
+        System.out.println(field1.get(field.get(updateNode)));
+        field1.set(field.get(updateNode), nodeDefinitionList);
+        System.out.println(field1.get(field.get(updateNode)));
+        Assert.assertTrue((List<NodeDefinition>) field1.get(field.get(updateNode)) == nodeDefinitionList);
+
+        when(node.getNodeType()).thenReturn(nodeType);
+        when(node.getProperty()).thenReturn(propertyList);
+        when(nodeDefinition.getPropertyDefinition()).thenReturn(propertyDefinitions);
+
+        when(property.getPropertyName()).thenReturn(propertyName);
+        when(propertyDefinition.getPropertyName()).thenReturn(propertyName2);
+
+        when(property.getPropertyName().getValue()).thenReturn(new String("propertyname"));
+        Assert.assertEquals(method.invoke(updateNode, node), "The property propertyname has not been defined.");
+
+        field1.set(field.get(updateNode), nodeDefinitionList);
+        when(node.getNodeType()).thenReturn(nodeType);
+        List<Property> propertyListnull = new ArrayList<Property>();
+        List<PropertyDefinition> propertyDefinitionListnull = new ArrayList<PropertyDefinition>();
+
+        when(node.getProperty()).thenReturn(propertyListnull);
+        when(nodeDefinition.getPropertyDefinition()).thenReturn(propertyDefinitionListnull);
+        Assert.assertEquals(method.invoke(updateNode, node), null);
+
+        field1.set(field.get(updateNode), nodeDefinitionListnull);
+        Assert.assertEquals(method.invoke(updateNode, node), "This type of Node has not been defined.");
+
+        field1.set(field.get(updateNode), nodeDefinitionList);
+        when(node.getNodeType()).thenReturn(nodeType2);
+        Assert.assertEquals(method.invoke(updateNode, node), "This type of Node has not been defined.");
+
+
+/*
+        (String)method.invoke(updateNode,node)*/
+    }
+
+    @Test
+    public void testcheckProperty() throws Exception {
+        Class<UpdateNode> class1 = UpdateNode.class;
+        Method method = class1.getDeclaredMethod("checkProperty", new Class[]{List.class, List.class});
+        method.setAccessible(true);
+        when(property.getPropertyName()).thenReturn(propertyName);
+        when(propertyDefinition.getPropertyName()).thenReturn(propertyName2);
+        when(property.getPropertyName().getValue()).thenReturn(new String("propertyname"));
+        Assert.assertEquals(method.invoke(updateNode, propertyList,propertyDefinitions), "The property propertyname has not been defined.");
+
+    }
+
+
+    @Test
+    public void testcheckPredefine() throws Exception {
+        Class<UpdateNode> class1 = UpdateNode.class;
+        Method method = class1.getDeclaredMethod("checkPredefine", new Class[]{List.class});
+        method.setAccessible(true);
+
+        when(property.getPropertyName()).thenReturn(propertyName);
+        when(property.getPropertyName().getValue()).thenReturn(new String("mac-address"));
+        when(property.getPropertyValues()).thenReturn(propertyValues);
+        when(property.getPropertyValues().getStringValue()).thenReturn(stringValues);
+        when(stringValue.getValue()).thenReturn(new String("test"));
+        when(valueCheck.checkMac(stringValue.getValue())).thenReturn(false);
+        Assert.assertEquals(method.invoke(updateNode, propertyList), "The mac-address is not legal.");
+
+        when(property.getPropertyName().getValue()).thenReturn(new String("ip-address"));
+        when(property.getPropertyValues().getStringValue()).thenReturn(stringValues);
+        when(stringValue.getValue()).thenReturn(new String("/"));
+        when(valueCheck.checkIpPrefix(stringValue.getValue())).thenReturn(false);
+        Assert.assertEquals(method.invoke(updateNode, propertyList), "The ip-address is not legal.");
+
+        when(property.getPropertyName().getValue()).thenReturn(new String("gateway-ip"));
+        when(property.getPropertyValues().getStringValue()).thenReturn(stringValues);
+        when(valueCheck.checkIpAddress(stringValue.getValue())).thenReturn(false);
+        Assert.assertEquals(method.invoke(updateNode, propertyList), "The gateway-ip is not legal.");
+
+        when(property.getPropertyName().getValue()).thenReturn(new String("ac-info-network"));
+        when(property.getPropertyValues().getStringValue()).thenReturn(stringValues);
+        when(stringValue.getValue()).thenReturn(new String("layer4"));
+        Assert.assertEquals(method.invoke(updateNode, propertyList), "The ac-info-network is not legal.");
+
+        when(property.getPropertyName().getValue()).thenReturn(new String("operating-mode"));
+        when(property.getPropertyValues().getStringValue()).thenReturn(stringValues);
+        when(stringValue.getValue()).thenReturn(new String("layer4"));
+        Assert.assertEquals(method.invoke(updateNode, propertyList), "The operating-mode is not legal.");
+
+    }
 }
\ No newline at end of file