Split out datastore implementation from aaa-shiro
[aaa.git] / aaa-idm-store-h2 / src / test / java / org / opendaylight / aaa / datastore / h2 / UserStoreTest.java
1 /*
2  * Copyright (c) 2014, 2017 Hewlett-Packard Development Company, L.P. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.aaa.datastore.h2;
9
10 import static org.junit.Assert.assertTrue;
11 import static org.mockito.ArgumentMatchers.anyString;
12 import static org.mockito.Mockito.mock;
13 import static org.mockito.Mockito.verify;
14
15 import java.sql.Connection;
16 import java.sql.DatabaseMetaData;
17 import java.sql.ResultSet;
18 import java.sql.SQLException;
19 import java.sql.Statement;
20 import org.junit.Test;
21 import org.mockito.Mockito;
22 import org.opendaylight.aaa.api.model.Users;
23 import org.opendaylight.aaa.impl.password.service.DefaultPasswordHashService;
24
25 public class UserStoreTest {
26
27     private final Connection connectionMock = mock(Connection.class);
28
29     private final ConnectionProvider connectionFactoryMock = () -> connectionMock;
30
31     private final UserStore userStoreUnderTest = new UserStore(connectionFactoryMock,
32             new DefaultPasswordHashService());
33
34     @Test
35     public void getUsersTest() throws SQLException, Exception {
36         // Setup Mock Behavior
37         String[] tableTypes = { "TABLE" };
38         Mockito.when(connectionMock.isClosed()).thenReturn(false);
39         DatabaseMetaData dbmMock = mock(DatabaseMetaData.class);
40         Mockito.when(connectionMock.getMetaData()).thenReturn(dbmMock);
41         ResultSet rsUserMock = mock(ResultSet.class);
42         Mockito.when(dbmMock.getTables(null, null, "USERS", tableTypes)).thenReturn(rsUserMock);
43         Mockito.when(rsUserMock.next()).thenReturn(true);
44
45         Statement stmtMock = mock(Statement.class);
46         Mockito.when(connectionMock.createStatement()).thenReturn(stmtMock);
47
48         ResultSet rsMock = getMockedResultSet();
49         Mockito.when(stmtMock.executeQuery(anyString())).thenReturn(rsMock);
50
51         // Run Test
52         Users users = userStoreUnderTest.getUsers();
53
54         // Verify
55         assertTrue(users.getUsers().size() == 1);
56         verify(stmtMock).close();
57     }
58
59     public ResultSet getMockedResultSet() throws SQLException {
60         ResultSet rsMock = mock(ResultSet.class);
61         Mockito.when(rsMock.next()).thenReturn(true).thenReturn(false);
62         Mockito.when(rsMock.getInt(UserStore.SQL_ID)).thenReturn(1);
63         Mockito.when(rsMock.getString(UserStore.SQL_NAME)).thenReturn("Name_1");
64         Mockito.when(rsMock.getString(UserStore.SQL_EMAIL)).thenReturn("Name_1@company.com");
65         Mockito.when(rsMock.getString(UserStore.SQL_PASSWORD)).thenReturn("Pswd_1");
66         Mockito.when(rsMock.getString(UserStore.SQL_DESCR)).thenReturn("Desc_1");
67         Mockito.when(rsMock.getInt(UserStore.SQL_ENABLED)).thenReturn(1);
68         return rsMock;
69     }
70 }