2 * Copyright (c) 2015 Huawei, Inc. and others. All rights reserved.
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
8 package org.opendaylight.nemo.user.vnspacemanager.structurestyle.updateintent;
9 import org.opendaylight.nemo.user.vnspacemanager.structurestyle.updateintent.UpdateOperation;
11 import static org.mockito.Mockito.mock;
12 import static org.mockito.Mockito.*;
13 import org.junit.Assert;
14 import org.junit.Before;
15 import org.junit.Test;
17 import org.opendaylight.yangtools.yang.binding.DataObject;
18 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
19 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
20 import org.opendaylight.nemo.user.tenantmanager.TenantManage;
21 //import org.opendaylight.nemo.user.vnspacemanager.instancecheck.OperationInstanceCheck;
22 //import org.opendaylight.nemo.user.vnspacemanager.syntaxcheck.OperationDefinitionCheck;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.UserId;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.Users;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.PhysicalHostId;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.PhysicalNodeId;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.VirtualNodeId;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.Objects;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Connection;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Flow;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Node;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.Operations;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.operations.Operation;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.operations.OperationBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.operations.OperationKey;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.users.User;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.users.UserKey;
38 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
39 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.*;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.hosts.PhysicalHost;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.links.VirtualLink;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.nodes.VirtualNode;
44 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;
45 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;
46 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
47 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.operations.Operation;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.flow.instance.MatchItem;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.node.instance.Property;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.node.instance.SubNode;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.property.instance.property.values.StringValue;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.operation.instance.Action;
55 import com.google.common.util.concurrent.CheckedFuture;
56 import com.google.common.util.concurrent.FutureCallback;
57 import com.google.common.util.concurrent.Futures;
58 import org.slf4j.Logger;
59 import org.slf4j.LoggerFactory;
60 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
62 import java.util.ArrayList;
63 import java.util.LinkedList;
64 import java.util.List;
66 * Created by Zhongwei Zhao on 2015/12/23.
68 public class UpdateOperationTest {
70 private UpdateOperation updateOperation;
72 private DataBroker dataBroker;
73 private TenantManage tenantManage;
74 private UserId userId;
76 private Operation operation;
77 private Objects objects;
80 public void setUp() throws Exception {
81 dataBroker = mock(DataBroker.class);
82 tenantManage = mock(TenantManage.class);
83 userId = mock(UserId.class);
84 user = mock(User.class);
85 operation = mock(Operation.class);
87 updateOperation = new UpdateOperation(dataBroker, tenantManage);
88 objects = mock(Objects.class);
93 public void testOperationHandling() throws Exception {
95 CheckedFuture operationdefinitionFuture = mock(CheckedFuture.class);
96 ReadOnlyTransaction readOnlyTransaction = mock(ReadOnlyTransaction.class);
98 when(dataBroker.newReadOnlyTransaction()).thenReturn(readOnlyTransaction);
99 when(readOnlyTransaction.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class))).thenReturn(operationdefinitionFuture);
100 //The action type has not been defined.
101 Assert.assertEquals(updateOperation.OperationHandling(userId,operation),"The action type has not been defined.");
104 when(operation.getAction()).thenReturn(null);
105 when(operation.getConditionSegment()).thenReturn(null);
107 ObjectId objectId = mock(ObjectId.class);
108 when(operation.getTargetObject()).thenReturn(objectId);
109 //The target object is not exist.
110 Assert.assertEquals(updateOperation.OperationHandling(userId,operation),"The target null is not exist.");
113 when(operation.getTargetObject()).thenReturn(null);
114 //The target should not be empty.
115 Assert.assertEquals(updateOperation.OperationHandling(userId,operation),"The target should not be empty.");
118 when(operation.getTargetObject()).thenReturn(objectId);
119 when(tenantManage.getUser()).thenReturn(user);
120 when(user.getObjects()).thenReturn(objects);
122 Node node = mock(Node.class);
123 List<Node> nodeList = new ArrayList<Node>(1);
125 when(objects.getNode()).thenReturn(nodeList);
127 NodeId nodeId = mock(NodeId.class);
128 when(node.getNodeId()).thenReturn(nodeId);
129 when(nodeId.getValue()).thenReturn(new String("00001111-0000-0000-0000-000011112222"));
130 when(objectId.getValue()).thenReturn(new String("00001111-0000-0000-0000-000011112222"));
132 WriteTransaction writeTransaction = mock(WriteTransaction.class);
133 when(dataBroker.newWriteOnlyTransaction()).thenReturn(writeTransaction);
135 OperationId operationId = mock(OperationId.class);
136 when(operation.getOperationId()).thenReturn(operationId);
137 CheckedFuture<Void, TransactionCommitFailedException> f;
138 f=mock(CheckedFuture.class);
139 when(writeTransaction.submit()).thenReturn(f);
141 Assert.assertEquals(updateOperation.OperationHandling(userId,operation),"The target 00001111-0000-0000-0000-000011112222 is not exist.");