blob: 3c3051b3901132137831f10e750b9d763a88e649 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.ranger.rest;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.ws.rs.WebApplicationException;
import org.apache.ranger.biz.UserMgr;
import org.apache.ranger.biz.XUserMgr;
import org.apache.ranger.common.MessageEnums;
import org.apache.ranger.common.RESTErrorUtil;
import org.apache.ranger.common.RangerConfigUtil;
import org.apache.ranger.common.RangerConstants;
import org.apache.ranger.common.SearchCriteria;
import org.apache.ranger.common.SearchUtil;
import org.apache.ranger.common.SortField;
import org.apache.ranger.common.StringUtil;
import org.apache.ranger.db.RangerDaoManager;
import org.apache.ranger.db.XXPortalUserDao;
import org.apache.ranger.entity.XXPortalUser;
import org.apache.ranger.util.RangerRestUtil;
import org.apache.ranger.view.VXPasswordChange;
import org.apache.ranger.view.VXPortalUser;
import org.apache.ranger.view.VXPortalUserList;
import org.apache.ranger.view.VXResponse;
import org.apache.ranger.view.VXStringList;
import org.junit.Assert;
import org.junit.FixMethodOrder;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.runner.RunWith;
import org.junit.runners.MethodSorters;
import org.mockito.InjectMocks;
import org.mockito.Matchers;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class TestUserREST {
@InjectMocks
UserREST userREST = new UserREST();
@Mock
HttpServletRequest request;
@Mock
SearchUtil searchUtil;
@Mock
RangerConfigUtil configUtil;
@Mock
UserMgr userManager;
@Mock
RangerDaoManager daoManager;
@Mock
XUserMgr xUserMgr;
@Mock
RESTErrorUtil restErrorUtil;
@Mock
VXPortalUserList vXPUserExpList;
@Mock
RangerRestUtil msRestUtil;
@Mock
VXPortalUser vxPUserAct;
@Mock
VXPasswordChange changePassword;
@Mock
VXResponse responseExp;
@Mock
StringUtil stringUtil;
@Rule
public ExpectedException thrown = ExpectedException.none();
Long userId = 10l;
int pageSize = 100;
String firstName = "abc";
String lastName = "xyz";
String loginId = "xyzId";
String emailId = "abc@Example.com";
@Test
public void test1SearchUsers() {
SearchCriteria searchCriteria = new SearchCriteria();
vXPUserExpList = new VXPortalUserList();
vXPUserExpList.setPageSize(pageSize);
List<Integer> status = new ArrayList<Integer>();
String publicScreenName = "nrp";
List<String> roles = new ArrayList<String>();
Mockito.when(searchUtil.extractCommonCriterias(Matchers.eq(request), Matchers.anyListOf(SortField.class))).thenReturn(searchCriteria);
Mockito.when(searchUtil.extractLong(request, searchCriteria, "userId", "User Id")).thenReturn(userId);
Mockito.when(searchUtil.extractString(request, searchCriteria, "loginId", "Login Id", null))
.thenReturn(loginId);
Mockito.when(searchUtil.extractString(request, searchCriteria, "emailAddress", "Email Address", null))
.thenReturn(emailId);
Mockito.when(searchUtil.extractString(request, searchCriteria, "firstName", "First Name",
StringUtil.VALIDATION_NAME)).thenReturn(firstName);
Mockito.when(
searchUtil.extractString(request, searchCriteria, "lastName", "Last Name", StringUtil.VALIDATION_NAME))
.thenReturn(lastName);
Mockito.when(searchUtil.extractEnum(request, searchCriteria, "status", "Status", "statusList",
RangerConstants.ActivationStatus_MAX)).thenReturn(status);
Mockito.when(searchUtil.extractString(request, searchCriteria, "publicScreenName", "Public Screen Name",
StringUtil.VALIDATION_NAME)).thenReturn(publicScreenName);
Mockito.when(searchUtil.extractStringList(request, searchCriteria, "role", "Role", "roleList",
configUtil.getRoles(), StringUtil.VALIDATION_NAME)).thenReturn(roles);
Mockito.when(userManager.searchUsers(searchCriteria)).thenReturn(vXPUserExpList);
VXPortalUserList vXPUserListAct = userREST.searchUsers(request);
Assert.assertNotNull(vXPUserListAct);
Assert.assertEquals(vXPUserExpList, vXPUserListAct);
Assert.assertEquals(vXPUserExpList.getPageSize(), vXPUserListAct.getPageSize());
Mockito.verify(searchUtil).extractCommonCriterias(Matchers.eq(request), Matchers.anyListOf(SortField.class));
Mockito.verify(searchUtil).extractLong(request, searchCriteria, "userId", "User Id");
Mockito.verify(searchUtil).extractString(request, searchCriteria, "loginId", "Login Id", null);
Mockito.verify(searchUtil).extractString(request, searchCriteria, "emailAddress", "Email Address", null);
Mockito.verify(searchUtil).extractString(request, searchCriteria, "firstName", "First Name",
StringUtil.VALIDATION_NAME);
Mockito.verify(searchUtil).extractString(request, searchCriteria, "lastName", "Last Name",
StringUtil.VALIDATION_NAME);
Mockito.verify(searchUtil).extractEnum(request, searchCriteria, "status", "Status", "statusList",
RangerConstants.ActivationStatus_MAX);
Mockito.verify(searchUtil).extractString(request, searchCriteria, "publicScreenName", "Public Screen Name",
StringUtil.VALIDATION_NAME);
Mockito.verify(searchUtil).extractStringList(request, searchCriteria, "role", "Role", "roleList",
configUtil.getRoles(), StringUtil.VALIDATION_NAME);
Mockito.verify(userManager).searchUsers(searchCriteria);
}
@Test
public void test2GetUserProfileForUser() {
VXPortalUser vxPUserExp = CreateVXPortalUser();
Mockito.when(userManager.getUserProfile(userId)).thenReturn(vxPUserExp);
VXPortalUser VXPUserAct = userREST.getUserProfileForUser(userId);
Assert.assertNotNull(VXPUserAct);
Assert.assertEquals(vxPUserExp, VXPUserAct);
Assert.assertEquals(vxPUserExp.getLoginId(), VXPUserAct.getLoginId());
Assert.assertEquals(vxPUserExp.getFirstName(), VXPUserAct.getFirstName());
Assert.assertEquals(vxPUserExp.getEmailAddress(), VXPUserAct.getEmailAddress());
Assert.assertEquals(vxPUserExp.getId(), VXPUserAct.getId());
Mockito.verify(userManager).getUserProfile(userId);
}
@Test
public void test3GetUserProfileForUser() {
VXPortalUser vxPUserExp = new VXPortalUser();
vxPUserExp = null;
Mockito.when(userManager.getUserProfile(userId)).thenReturn(vxPUserExp);
VXPortalUser VXPUserAct = userREST.getUserProfileForUser(userId);
Assert.assertEquals(vxPUserExp, VXPUserAct);
Mockito.verify(userManager).getUserProfile(userId);
}
@Test
public void test6Create() {
VXPortalUser vxPUserExp = CreateVXPortalUser();
Mockito.when(userManager.createUser(vxPUserExp)).thenReturn(vxPUserExp);
VXPortalUser VXPUserAct = userREST.create(vxPUserExp, request);
Assert.assertNotNull(VXPUserAct);
Assert.assertEquals(vxPUserExp.getLoginId(), VXPUserAct.getLoginId());
Assert.assertEquals(vxPUserExp.getFirstName(), VXPUserAct.getFirstName());
Assert.assertEquals(vxPUserExp.getLastName(), VXPUserAct.getLastName());
Assert.assertEquals(vxPUserExp.getEmailAddress(), VXPUserAct.getEmailAddress());
Mockito.verify(userManager).createUser(vxPUserExp);
}
@Test
public void test7CreateDefaultAccountUser() {
VXPortalUser vxPUserExp = new VXPortalUser();
vxPUserExp = null;
Mockito.when(userManager.createDefaultAccountUser(vxPUserExp)).thenReturn(vxPUserExp);
VXPortalUser VXPUserAct = userREST.createDefaultAccountUser(vxPUserExp, request);
Assert.assertNull(VXPUserAct);
Mockito.verify(userManager).createDefaultAccountUser(vxPUserExp);
}
@Test
public void test8CreateDefaultAccountUser() {
VXPortalUser vxPUserExp = CreateVXPortalUser();
Mockito.when(userManager.createDefaultAccountUser(vxPUserExp)).thenReturn(vxPUserExp);
Mockito.doNothing().when(xUserMgr).assignPermissionToUser(vxPUserExp, true);
VXPortalUser VXPUserAct = userREST.createDefaultAccountUser(vxPUserExp, request);
Assert.assertNotNull(VXPUserAct);
Assert.assertEquals(vxPUserExp, VXPUserAct);
Assert.assertEquals(vxPUserExp.getLoginId(), VXPUserAct.getLoginId());
Assert.assertEquals(vxPUserExp.getFirstName(), VXPUserAct.getFirstName());
Assert.assertEquals(vxPUserExp.getLastName(), VXPUserAct.getLastName());
Assert.assertEquals(vxPUserExp.getEmailAddress(), VXPUserAct.getEmailAddress());
Mockito.verify(userManager).createDefaultAccountUser(vxPUserExp);
Mockito.verify(xUserMgr).assignPermissionToUser(vxPUserExp, true);
}
@Test
public void test8Update() {
VXPortalUser vxPUserExp = CreateVXPortalUser();
vxPUserExp.setLoginId(loginId);
XXPortalUser xxPUserExp = new XXPortalUser();
xxPUserExp.setLoginId(loginId);
XXPortalUserDao xxPortalUserDao = Mockito.mock(XXPortalUserDao.class);
Mockito.when(daoManager.getXXPortalUser()).thenReturn(xxPortalUserDao);
Mockito.when(xxPortalUserDao.getById(Mockito.anyLong())).thenReturn(xxPUserExp);
Mockito.doNothing().when(userManager).checkAccess(xxPUserExp);
Mockito.doNothing().when(msRestUtil).validateVUserProfileForUpdate(xxPUserExp, vxPUserExp);
Mockito.when(userManager.updateUser(vxPUserExp)).thenReturn(xxPUserExp);
Mockito.when(userManager.mapXXPortalUserVXPortalUser(xxPUserExp)).thenReturn(vxPUserExp);
VXPortalUser vxPUserAct = userREST.update(vxPUserExp, request);
Assert.assertNotNull(vxPUserAct);
Assert.assertEquals(xxPUserExp.getLoginId(), vxPUserAct.getLoginId());
Assert.assertEquals(vxPUserExp.getId(), vxPUserAct.getId());
Assert.assertEquals(vxPUserExp.getFirstName(), vxPUserAct.getFirstName());
Mockito.verify(daoManager).getXXPortalUser();
Mockito.verify(xxPortalUserDao).getById(Mockito.anyLong());
Mockito.verify(userManager).checkAccess(xxPUserExp);
Mockito.verify(msRestUtil).validateVUserProfileForUpdate(xxPUserExp, vxPUserExp);
Mockito.verify(userManager).updateUser(vxPUserExp);
Mockito.verify(userManager).mapXXPortalUserVXPortalUser(xxPUserExp);
}
@Test
public void test9Update() {
VXPortalUser vxPUserExp = new VXPortalUser();
XXPortalUser xxPUserExp = new XXPortalUser();
xxPUserExp = null;
XXPortalUserDao xxPortalUserDao = Mockito.mock(XXPortalUserDao.class);
Mockito.when(daoManager.getXXPortalUser()).thenReturn(xxPortalUserDao);
Mockito.doNothing().when(userManager).checkAccess(xxPUserExp);
Mockito.when(restErrorUtil.createRESTException(Mockito.anyString(), (MessageEnums) Mockito.any(),
Mockito.nullable(Long.class), Mockito.nullable(String.class), Mockito.anyString())).thenReturn(new WebApplicationException());
thrown.expect(WebApplicationException.class);
userREST.update(vxPUserExp, request);
Mockito.verify(daoManager).getXXPortalUser();
Mockito.verify(xxPortalUserDao).getById(Mockito.anyLong());
Mockito.verify(userManager).checkAccess(xxPUserExp);
Mockito.verify(restErrorUtil).createRESTException(Mockito.anyString(), (MessageEnums) Mockito.any(),
Mockito.anyLong(), Mockito.anyString(), Mockito.anyString());
}
@Test
public void test10SetUserRoles() {
Long userId = 10L;
VXResponse responseExp = new VXResponse();
VXStringList roleList = new VXStringList();
Mockito.doNothing().when(userManager).checkAccess(userId);
Mockito.doNothing().when(userManager).setUserRoles(userId, roleList.getVXStrings());
VXResponse responseAct = userREST.setUserRoles(userId, roleList);
Assert.assertNotNull(responseAct);
Assert.assertEquals(responseExp.getStatusCode(), responseAct.getStatusCode());
Mockito.verify(userManager).checkAccess(userId);
Mockito.verify(userManager).setUserRoles(userId, roleList.getVXStrings());
}
@Test
public void test11DeactivateUser() {
VXPortalUser vxPUserExp = CreateVXPortalUser();
XXPortalUser xxPUserExp = new XXPortalUser();
xxPUserExp.setLoginId(loginId);
xxPUserExp.setStatus(1);
vxPUserExp.setStatus(5);
XXPortalUserDao xxPortalUserDao = Mockito.mock(XXPortalUserDao.class);
Mockito.when(daoManager.getXXPortalUser()).thenReturn(xxPortalUserDao);
Mockito.when(xxPortalUserDao.getById(userId)).thenReturn(xxPUserExp);
Mockito.when(userManager.deactivateUser(xxPUserExp)).thenReturn(vxPUserExp);
VXPortalUser vxPUserAct = userREST.deactivateUser(userId);
Assert.assertNotNull(vxPUserAct);
Assert.assertEquals(xxPUserExp.getLoginId(), vxPUserAct.getLoginId());
Assert.assertEquals(vxPUserExp.getStatus(), vxPUserAct.getStatus());
Assert.assertEquals(vxPUserExp.getId(), vxPUserAct.getId());
Assert.assertEquals(vxPUserExp.getFirstName(), vxPUserAct.getFirstName());
Mockito.verify(daoManager).getXXPortalUser();
Mockito.verify(xxPortalUserDao).getById(userId);
Mockito.verify(userManager).deactivateUser(xxPUserExp);
}
@Test
public void test12DeactivateUser() {
XXPortalUser xxPUserExp = new XXPortalUser();
xxPUserExp = null;
XXPortalUserDao xxPortalUserDao = Mockito.mock(XXPortalUserDao.class);
Mockito.when(daoManager.getXXPortalUser()).thenReturn(xxPortalUserDao);
Mockito.when(xxPortalUserDao.getById(userId)).thenReturn(xxPUserExp);
Mockito.when(restErrorUtil.createRESTException(Mockito.anyString(), (MessageEnums) Mockito.any(),
Mockito.nullable(Long.class), Mockito.nullable(String.class), Mockito.anyString())).thenReturn(new WebApplicationException());
thrown.expect(WebApplicationException.class);
userREST.deactivateUser(userId);
Mockito.verify(daoManager).getXXPortalUser();
Mockito.verify(xxPortalUserDao).getById(userId);
Mockito.verify(restErrorUtil).createRESTException(Mockito.anyString(), (MessageEnums) Mockito.any(),
Mockito.anyLong(), Mockito.anyString(), Mockito.anyString());
}
@Test
public void test13GetUserProfile() {
HttpSession hs = Mockito.mock(HttpSession.class);
VXPortalUser vxPUserExp = CreateVXPortalUser();
Mockito.when(userManager.getUserProfileByLoginId()).thenReturn(vxPUserExp);
Mockito.when(request.getSession()).thenReturn(hs);
Mockito.when(hs.getId()).thenReturn("id");
VXPortalUser vxPUserAct = userREST.getUserProfile(request);
Assert.assertNotNull(vxPUserAct);
Assert.assertEquals(vxPUserExp, vxPUserAct);
Assert.assertEquals(vxPUserExp.getId(), vxPUserAct.getId());
Assert.assertEquals(vxPUserExp.getFirstName(), vxPUserAct.getFirstName());
Mockito.verify(userManager).getUserProfileByLoginId();
}
@Test
public void test15SuggestUserFirstName() {
String op = userREST.suggestUserFirstName(firstName, request);
Assert.assertNull(op);
}
@Test
public void test16ChangePassword() {
XXPortalUser xxPUser = new XXPortalUser();
VXResponse vxResponseExp = new VXResponse();
vxResponseExp.setStatusCode(10);
XXPortalUserDao xxPortalUserDao = Mockito.mock(XXPortalUserDao.class);
Mockito.when(daoManager.getXXPortalUser()).thenReturn(xxPortalUserDao);
Mockito.when(restErrorUtil.createRESTException("serverMsg.userRestUser",MessageEnums.DATA_NOT_FOUND, null, null, changePassword.getLoginId())).thenThrow(new WebApplicationException());
thrown.expect(WebApplicationException.class);
VXResponse vxResponseAct = userREST.changePassword(userId, changePassword);
Assert.assertNotNull(vxResponseAct);
Assert.assertEquals(vxResponseExp, vxResponseAct);
Assert.assertEquals(vxResponseExp.getStatusCode(), vxResponseAct.getStatusCode());
Mockito.verify(daoManager).getXXPortalUser();
Mockito.verify(xxPortalUserDao).getById(userId);
Mockito.verify(userManager).checkAccessForUpdate(xxPUser);
Mockito.verify(changePassword).setId(userId);
Mockito.verify(userManager).changePassword(changePassword);
}
@Test
public void test17ChangePassword() {
XXPortalUserDao xxPortalUserDao = Mockito.mock(XXPortalUserDao.class);
Mockito.when(daoManager.getXXPortalUser()).thenReturn(xxPortalUserDao);
Mockito.when(restErrorUtil.createRESTException(Mockito.anyString(), (MessageEnums) Mockito.any(),
Mockito.nullable(Long.class), Mockito.nullable(String.class), Mockito.nullable(String.class))).thenReturn(new WebApplicationException());
thrown.expect(WebApplicationException.class);
userREST.changePassword(userId, changePassword);
Mockito.verify(daoManager).getXXPortalUser();
Mockito.verify(xxPortalUserDao).getById(userId);
Mockito.verify(restErrorUtil).createRESTException(Mockito.anyString(), (MessageEnums) Mockito.any(),
Mockito.anyLong(), Mockito.anyString(), Mockito.anyString());
}
@Test
public void test18ChangeEmailAddress() {
XXPortalUser xxPUser = new XXPortalUser();
VXPortalUser vxPUserExp = CreateVXPortalUser();
XXPortalUserDao xxPortalUserDao = Mockito.mock(XXPortalUserDao.class);
Mockito.when(daoManager.getXXPortalUser()).thenReturn(xxPortalUserDao);
Mockito.when(restErrorUtil.createRESTException("serverMsg.userRestUser",MessageEnums.DATA_NOT_FOUND, null, null, changePassword.getLoginId())).thenThrow(new WebApplicationException());
thrown.expect(WebApplicationException.class);
VXPortalUser vxPortalUserAct = userREST.changeEmailAddress(userId, changePassword);
Assert.assertNotNull(vxPortalUserAct);
Assert.assertEquals(vxPUserExp, vxPortalUserAct);
Assert.assertEquals(vxPUserExp.getId(), vxPortalUserAct.getId());
Assert.assertEquals(vxPUserExp.getFirstName(), vxPortalUserAct.getFirstName());
Mockito.verify(daoManager).getXXPortalUser();
Mockito.verify(xxPortalUserDao).getById(userId);
Mockito.verify(userManager).checkAccessForUpdate(xxPUser);
Mockito.verify(changePassword).setId(userId);
Mockito.verify(userManager).changeEmailAddress(xxPUser, changePassword);
}
@Test
public void test19ChangeEmailAddress() {
XXPortalUserDao xxPortalUserDao = Mockito.mock(XXPortalUserDao.class);
Mockito.when(daoManager.getXXPortalUser()).thenReturn(xxPortalUserDao);
Mockito.when(restErrorUtil.createRESTException(Mockito.anyString(), (MessageEnums) Mockito.any(),
Mockito.nullable(Long.class), Mockito.nullable(String.class), Mockito.nullable(String.class))).thenReturn(new WebApplicationException());
thrown.expect(WebApplicationException.class);
userREST.changeEmailAddress(userId, changePassword);
Mockito.verify(daoManager).getXXPortalUser();
Mockito.verify(xxPortalUserDao).getById(userId);
Mockito.verify(restErrorUtil).createRESTException(Mockito.anyString(), (MessageEnums) Mockito.any(),
Mockito.anyLong(), Mockito.anyString(), Mockito.anyString());
}
private VXPortalUser CreateVXPortalUser() {
VXPortalUser vxPUserExp = new VXPortalUser();
vxPUserExp.setId(userId);
vxPUserExp.setFirstName(firstName);
vxPUserExp.setLastName(lastName);
vxPUserExp.setEmailAddress(emailId);
vxPUserExp.setLoginId(loginId);
return vxPUserExp;
}
}