Refactor and fix TenantManage for repeated queries
[nemo.git] / nemo-impl / src / test / java / org / opendaylight / nemo / user / tenantmanager / TenantManageTest.java
1 /*
2
3 * Copyright (c) 2015 Huawei, Inc. and others. All rights reserved.
4
5 *
6
7 * This program and the accompanying materials are made available under the
8
9 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
10
11 * and is available at http://www.eclipse.org/legal/epl-v10.html
12
13 */
14 package org.opendaylight.nemo.user.tenantmanager;
15
16 import static org.mockito.Matchers.any;
17 import static org.mockito.Mockito.mock;
18 import static org.mockito.Mockito.times;
19 import static org.mockito.Mockito.verify;
20 import static org.mockito.Mockito.when;
21
22 import java.util.HashMap;
23 import java.util.Map;
24
25 import junit.framework.TestCase;
26
27 import org.junit.Assert;
28 import org.junit.Before;
29 import org.junit.Test;
30 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
31 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
32 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
33 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.UserId;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.UserRoleName;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.RegisterUserInput;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.users.User;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.user.rev151010.user.roles.UserRole;
39 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
40
41 import com.google.common.base.Optional;
42 import com.google.common.util.concurrent.CheckedFuture;
43 /**
44  * Created by zhangmeng on 2015/11/20.
45  */
46 public class TenantManageTest extends TestCase {
47     private TenantManage tenantManage;
48     private DataBroker dataBroker;
49     private Map<UserRoleName, UserRole> userRoles;
50     private Map<UserId, User> users ;
51     private User user;
52     @Override
53     @Before
54     public void setUp() throws Exception {
55         userRoles = new HashMap<UserRoleName, UserRole>();
56         users = new HashMap<UserId, User>();
57         user = mock(User.class);
58
59         dataBroker = mock(DataBroker.class);
60         tenantManage = new TenantManage(dataBroker);
61     }
62
63     @Test
64     public void testGetUser() throws Exception {
65         user = tenantManage.getUser();
66         Assert.assertNotEquals(mock(User.class),user);
67     }
68
69     @Test
70     public void testGetUserRoles() throws Exception {
71         //ListenableFuture<Optional<UserRoles>> userRolesFuture = mock(ListenableFuture.class);
72         CheckedFuture userRolesFuture = mock(CheckedFuture.class);
73         ReadOnlyTransaction readOnlyTransaction = mock(ReadOnlyTransaction.class);
74 //      when(dataBroker.newReadOnlyTransaction().read(any(LogicalDatastoreType.class),
75 //      any(InstanceIdentifier.class))).thenReturn(userRolesFuture);
76         when(dataBroker.newReadOnlyTransaction()).thenReturn(readOnlyTransaction);
77         when(readOnlyTransaction.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class))).thenReturn(userRolesFuture);
78         when(userRolesFuture.get()).thenReturn(Optional.absent());
79         tenantManage.getUserRoles();
80         verify(dataBroker).newReadOnlyTransaction();
81         verify(readOnlyTransaction).read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class));
82         Assert.assertNotNull(tenantManage);
83     }
84
85     @Test
86     public void testGetUsers() throws Exception {
87         CheckedFuture usersFuture = mock(CheckedFuture.class);
88         ReadOnlyTransaction readOnlyTransaction = mock(ReadOnlyTransaction.class);
89
90         when(dataBroker.newReadOnlyTransaction()).thenReturn(readOnlyTransaction);
91         when(readOnlyTransaction.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class))).thenReturn(usersFuture);
92         when(usersFuture.get()).thenReturn(Optional.absent());
93         tenantManage.getUsers();
94         verify(dataBroker).newReadOnlyTransaction();
95         verify(readOnlyTransaction).read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class));
96         Assert.assertNotNull(tenantManage);
97     }
98
99     @Test
100     public void testFetchVNSpace() throws Exception {
101         CheckedFuture usersFuture = mock(CheckedFuture.class);
102         ReadOnlyTransaction readOnlyTransaction = mock(ReadOnlyTransaction.class);
103
104         when(dataBroker.newReadOnlyTransaction()).thenReturn(readOnlyTransaction);
105         when(readOnlyTransaction.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class))).thenReturn(usersFuture);
106         when(usersFuture.get()).thenReturn(Optional.absent());
107         tenantManage.fetchVNSpace(mock(UserId.class));
108         verify(dataBroker).newReadOnlyTransaction();
109         verify(readOnlyTransaction).read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class));
110         Assert.assertNotNull(tenantManage);
111     }
112
113     @Test // As a parameter registerUserInput has no data , so the test case just test a small part
114     public void testAddUser() throws Exception {
115         RegisterUserInput registerUserInput = mock(RegisterUserInput.class);
116         WriteTransaction writeTransaction = mock(WriteTransaction.class);
117
118         when(dataBroker.newWriteOnlyTransaction()).thenReturn(writeTransaction);
119         when(registerUserInput.getUserId()).thenReturn(null);
120         tenantManage.addUser(registerUserInput);
121
122         CheckedFuture f = mock(CheckedFuture.class);
123         when(registerUserInput.getUserId()).thenReturn(mock(UserId.class));
124         when(writeTransaction.submit()).thenReturn(f);
125         tenantManage.addUser(registerUserInput);
126
127         verify(dataBroker,times(2)).newWriteOnlyTransaction();
128         verify(registerUserInput,times(4)).getUserId();
129         Assert.assertNotNull(tenantManage);
130     }
131 }