monitor、openapi、account模块下的单元测试

This commit is contained in:
didi
2022-01-07 11:43:31 +08:00
parent 61672637dc
commit ec19c3b4dd
21 changed files with 2276 additions and 20 deletions

View File

@@ -0,0 +1,99 @@
package com.xiaojukeji.kafka.manager.account;
import com.xiaojukeji.kafka.manager.account.common.EnterpriseStaff;
import com.xiaojukeji.kafka.manager.account.component.AbstractEnterpriseStaffService;
import com.xiaojukeji.kafka.manager.account.config.BaseTest;
import com.xiaojukeji.kafka.manager.common.entity.pojo.AccountDO;
import com.xiaojukeji.kafka.manager.dao.AccountDao;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.springframework.beans.factory.annotation.Autowired;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @author wyc
* @date 2021/12/30
*/
public class AbstractEnterpriseStaffServiceTest extends BaseTest {
@Autowired
@InjectMocks
private AbstractEnterpriseStaffService abstractEnterpriseStaffService;
@Mock
private AccountDao accountDao;
@BeforeMethod
public void init() {
MockitoAnnotations.initMocks(this);
}
private EnterpriseStaff getEnterpriseStaff() {
EnterpriseStaff staff = new EnterpriseStaff("username", "username", "department");
return staff;
}
private AccountDO getAccountDO() {
AccountDO accountDO = new AccountDO();
accountDO.setUsername("username");
return accountDO;
}
@Test
public void getEnterpriseStaffByNameTest() {
// 返回null测试
getEnterpriseStaffByName2NullTest();
// 成功测试
getEnterpriseStaffByName2SuccessTest();
}
private void getEnterpriseStaffByName2NullTest() {
Mockito.when(accountDao.getByName(Mockito.anyString())).thenReturn(null);
Assert.assertNull(abstractEnterpriseStaffService.getEnterpriseStaffByName("username"));
}
private void getEnterpriseStaffByName2SuccessTest() {
AccountDO accountDO = getAccountDO();
EnterpriseStaff staff = getEnterpriseStaff();
Mockito.when(accountDao.getByName(Mockito.anyString())).thenReturn(accountDO);
EnterpriseStaff result = abstractEnterpriseStaffService.getEnterpriseStaffByName("username");
Assert.assertTrue(result.getUsername().equals(staff.getUsername()) && result.getChineseName().equals(staff.getChineseName()));
}
@Test
public void searchEnterpriseStaffByKeyWordTest() {
// 返回空集合测试
searchEnterpriseStaffByKeyWord2EmptyTest();
// 返回非空集合测试
searchEnterpriseStaffByKeyWord2AllTest();
}
private void searchEnterpriseStaffByKeyWord2EmptyTest() {
Mockito.when(accountDao.searchByNamePrefix(Mockito.anyString())).thenReturn(new ArrayList<>());
Assert.assertTrue(abstractEnterpriseStaffService.searchEnterpriseStaffByKeyWord("username").isEmpty());
}
private void searchEnterpriseStaffByKeyWord2AllTest() {
AccountDO accountDO = getAccountDO();
Mockito.when(accountDao.searchByNamePrefix(Mockito.anyString())).thenReturn(Arrays.asList(accountDO));
EnterpriseStaff staff = getEnterpriseStaff();
List<EnterpriseStaff> result = abstractEnterpriseStaffService.searchEnterpriseStaffByKeyWord("username");
Assert.assertTrue(!result.isEmpty() && result.stream().allMatch(enterpriseStaff -> enterpriseStaff.getChineseName().equals(staff.getChineseName()) &&
enterpriseStaff.getUsername().equals(staff.getUsername())));
}
}

View File

@@ -0,0 +1,244 @@
package com.xiaojukeji.kafka.manager.account;
import com.xiaojukeji.kafka.manager.account.component.AbstractSingleSignOn;
import com.xiaojukeji.kafka.manager.account.component.ldap.LdapAuthentication;
import com.xiaojukeji.kafka.manager.account.config.BaseTest;
import com.xiaojukeji.kafka.manager.common.bizenum.AccountRoleEnum;
import com.xiaojukeji.kafka.manager.common.constant.LoginConstant;
import com.xiaojukeji.kafka.manager.common.entity.Result;
import com.xiaojukeji.kafka.manager.common.entity.ResultStatus;
import com.xiaojukeji.kafka.manager.common.entity.dto.normal.LoginDTO;
import com.xiaojukeji.kafka.manager.common.entity.pojo.AccountDO;
import com.xiaojukeji.kafka.manager.common.utils.EncryptUtil;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.mockito.internal.util.reflection.FieldSetter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Field;
/**
* @author wyc
* @date 2021/12/30
*/
public class AbstractSingleSignOnTest extends BaseTest {
@Autowired
@InjectMocks
private AbstractSingleSignOn abstractSingleSignOn;
@Mock
private AccountService accountService;
@Mock
private LdapAuthentication ldapAuthentication;
@BeforeMethod
public void init() {
MockitoAnnotations.initMocks(this);
}
private HttpServletRequest getHttpServletRequest() {
HttpServletRequest request = new MockHttpServletRequest();
return request;
}
private HttpServletResponse getHttpServletResponse() {
HttpServletResponse response = new MockHttpServletResponse();
return response;
}
private LoginDTO getLoginDTO() {
LoginDTO dto = new LoginDTO();
dto.setUsername("username");
dto.setPassword("password");
return dto;
}
private AccountDO getAccountDO() {
AccountDO accountDO = new AccountDO();
accountDO.setUsername("username");
accountDO.setPassword("password");
return accountDO;
}
@Test
public void loginAndGetLdapTest() throws NoSuchFieldException {
// username为null测试
loginAndGetLdap2ParamNullTest();
// LDAP未激活测试从最后的return返回
loginAndGetLdap2LdapDisabledTest();
// LDAP激活返回false测试
loginAndGetLdap2LdapEnabledReturnFalseTest();
// LDAP激活返回true测试
loginAndGetLdap2LdapEnabledReturnTrueTest();
loginAndGetLdap2FailureTest();
// name illegal 测试
loginAndGetLdap2NameIllegalTest();
// password illegal 测试
loginAndGetLdap2PasswordIllegalTest();
}
private void resetAbstractSingleSignOn() throws NoSuchFieldException {
// 通过反射将abstractSingleSignOn内属性的值置于初始状态,因为每个private测试中会通过反射改变abstractSingleSignOn成员变量的值
Field accountLdapEnabled = abstractSingleSignOn.getClass().getDeclaredField("accountLdapEnabled");
FieldSetter.setField(abstractSingleSignOn, accountLdapEnabled, null);
Field authUserRegistrationRole = abstractSingleSignOn.getClass().getDeclaredField("authUserRegistrationRole");
FieldSetter.setField(abstractSingleSignOn, authUserRegistrationRole, null);
Field authUserRegistration = abstractSingleSignOn.getClass().getDeclaredField("authUserRegistration");
FieldSetter.setField(abstractSingleSignOn, authUserRegistration, false);
}
private void loginAndGetLdap2ParamNullTest() throws NoSuchFieldException {
resetAbstractSingleSignOn();
HttpServletRequest request = getHttpServletRequest();
HttpServletResponse response = getHttpServletResponse();
LoginDTO loginDTO = getLoginDTO();
loginDTO.setUsername(null);
Assert.assertEquals(abstractSingleSignOn.loginAndGetLdap(request, response, loginDTO).toString(), Result.buildFailure("Missing parameters").toString());
}
private void loginAndGetLdap2LdapDisabledTest() throws NoSuchFieldException {
resetAbstractSingleSignOn();
HttpServletRequest request = getHttpServletRequest();
HttpServletResponse response = getHttpServletResponse();
LoginDTO loginDTO = getLoginDTO();
String pass = EncryptUtil.md5(loginDTO.getPassword());
AccountDO accountDO1 = getAccountDO();
accountDO1.setPassword(pass);
Result<AccountDO> result = Result.buildSuc(accountDO1);
Mockito.when(accountService.getAccountDO(Mockito.any())).thenReturn(result);
Assert.assertEquals(abstractSingleSignOn.loginAndGetLdap(request, response, loginDTO).toString(), Result.buildSuc(result.getData().getUsername()).toString());
}
private void loginAndGetLdap2LdapEnabledReturnFalseTest() throws NoSuchFieldException {
resetAbstractSingleSignOn();
HttpServletRequest request = getHttpServletRequest();
HttpServletResponse response = getHttpServletResponse();
LoginDTO dto = getLoginDTO();
// 通过反射将abstractSingleSignOn对象中accountLdapEnabled属性设置为true
Field accountLdapEnabled = abstractSingleSignOn.getClass().getDeclaredField("accountLdapEnabled");
FieldSetter.setField(abstractSingleSignOn, accountLdapEnabled, true);
Mockito.when(ldapAuthentication.authenticate(Mockito.anyString(), Mockito.anyString())).thenReturn(false);
Assert.assertEquals(abstractSingleSignOn.loginAndGetLdap(request, response, dto).toString(), Result.buildFrom(ResultStatus.LDAP_AUTHENTICATION_FAILED).toString());
}
private void loginAndGetLdap2LdapEnabledReturnTrueTest() throws NoSuchFieldException {
resetAbstractSingleSignOn();
HttpServletRequest request = getHttpServletRequest();
HttpServletResponse response = getHttpServletResponse();
LoginDTO dto = getLoginDTO();
Mockito.when(accountService.getAccountDO(Mockito.any())).thenReturn(null);
// 通过反射将abstractSingleSignOn对象中accountLdapEnabled属性设置为true
Field accountLdapEnabled = abstractSingleSignOn.getClass().getDeclaredField("accountLdapEnabled");
FieldSetter.setField(abstractSingleSignOn, accountLdapEnabled, true);
Mockito.when(ldapAuthentication.authenticate(Mockito.anyString(), Mockito.anyString())).thenReturn(true);
// 通过反射初始化成员变量,防止出现空指针异常
Field authUserRegistrationRole = abstractSingleSignOn.getClass().getDeclaredField("authUserRegistrationRole");
FieldSetter.setField(abstractSingleSignOn, authUserRegistrationRole, AccountRoleEnum.NORMAL.getMessage());
Field authUserRegistration = abstractSingleSignOn.getClass().getDeclaredField("authUserRegistration");
FieldSetter.setField(abstractSingleSignOn, authUserRegistration, true);
Assert.assertEquals(abstractSingleSignOn.loginAndGetLdap(request, response, dto).toString(), Result.buildSuc(dto.getUsername()).toString());
}
private void loginAndGetLdap2FailureTest() throws NoSuchFieldException {
resetAbstractSingleSignOn();
HttpServletRequest request = getHttpServletRequest();
HttpServletResponse response = getHttpServletResponse();
LoginDTO dto = getLoginDTO();
Result result = Result.buildFailure("fail");
Mockito.when(accountService.getAccountDO(Mockito.any())).thenReturn(result);
Assert.assertEquals(abstractSingleSignOn.loginAndGetLdap(request, response, dto).toString(), result.toString());
}
private void loginAndGetLdap2NameIllegalTest() throws NoSuchFieldException {
resetAbstractSingleSignOn();
HttpServletRequest request = getHttpServletRequest();
HttpServletResponse response = getHttpServletResponse();
LoginDTO dto = getLoginDTO();
Result result = Result.buildSuc();
Mockito.when(accountService.getAccountDO(Mockito.any())).thenReturn(result);
Assert.assertEquals(abstractSingleSignOn.loginAndGetLdap(request, response, dto).toString(), Result.buildFailure("username illegal").toString());
}
private void loginAndGetLdap2PasswordIllegalTest() throws NoSuchFieldException {
resetAbstractSingleSignOn();
HttpServletRequest request = getHttpServletRequest();
HttpServletResponse response = getHttpServletResponse();
LoginDTO dto = getLoginDTO();
AccountDO accountDO = getAccountDO();
Result<AccountDO> result = Result.buildSuc(accountDO);
Mockito.when(accountService.getAccountDO(Mockito.any())).thenReturn(result);
Assert.assertEquals(abstractSingleSignOn.loginAndGetLdap(request, response, dto).toString(), Result.buildFailure("password illegal").toString());
}
@Test
public void logoutTest() {
HttpServletRequest request = getHttpServletRequest();
HttpServletResponse response = getHttpServletResponse();
abstractSingleSignOn.logout(request, response, true);
Assert.assertEquals(response.getStatus(), 401);
Assert.assertEquals(response.getHeader("location"), "");
}
@Test
public void checkLoginAndGetLdapTest() {
// 返回null测试
checkLoginAndGetLdap2NullTest();
// 成功测试
checkLoginAndGetLdap2SuccessTest();
}
private void checkLoginAndGetLdap2NullTest() {
HttpServletRequest request = getHttpServletRequest();
Assert.assertNull(abstractSingleSignOn.checkLoginAndGetLdap(request));
}
private void checkLoginAndGetLdap2SuccessTest() {
HttpServletRequest request = getHttpServletRequest();
request.getSession().setAttribute(LoginConstant.SESSION_USERNAME_KEY, "username");
Assert.assertEquals(abstractSingleSignOn.checkLoginAndGetLdap(request), "username");
}
@Test
public void setRedirectToLoginPageTest() {
HttpServletResponse response = getHttpServletResponse();
response.setStatus(401);
response.setHeader("location", "");
Assert.assertEquals(response.getStatus(), 401);
Assert.assertEquals(response.getHeader("location"), "");
}
}

View File

@@ -1,8 +1,287 @@
package com.xiaojukeji.kafka.manager.account;
import com.xiaojukeji.kafka.manager.account.common.EnterpriseStaff;
import com.xiaojukeji.kafka.manager.account.component.AbstractEnterpriseStaffService;
import com.xiaojukeji.kafka.manager.account.config.BaseTest;
import com.xiaojukeji.kafka.manager.common.bizenum.AccountRoleEnum;
import com.xiaojukeji.kafka.manager.common.constant.Constant;
import com.xiaojukeji.kafka.manager.common.entity.Result;
import com.xiaojukeji.kafka.manager.common.entity.ResultStatus;
import com.xiaojukeji.kafka.manager.common.entity.ao.account.Account;
import com.xiaojukeji.kafka.manager.common.entity.pojo.AccountDO;
import com.xiaojukeji.kafka.manager.dao.AccountDao;
import com.xiaojukeji.kafka.manager.service.service.ConfigService;
import com.xiaojukeji.kafka.manager.service.service.OperateRecordService;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @author xuguang
* @Date 2021/12/25
* @author wyc
* @Date 2021/12/29
*/
public class AccountServiceTest {
public class AccountServiceTest extends BaseTest {
@Autowired
@InjectMocks
private AccountService accountService;
@Mock
private AccountDao accountDao;
@Mock
private OperateRecordService operateRecordService;
@Mock
private AbstractEnterpriseStaffService enterpriseStaffService;
@Mock
private ConfigService configService;
@BeforeMethod
public void init() {
MockitoAnnotations.initMocks(this);
}
private AccountDO getAccountDO() {
AccountDO accountDO = new AccountDO();
accountDO.setUsername("test_username");
accountDO.setPassword("test_password");
accountDO.setRole(0);
return accountDO;
}
private EnterpriseStaff getEnterpriseStaff() {
EnterpriseStaff staff = new EnterpriseStaff("username", "ChineseName", "department");
return staff;
}
private Account getAccount() {
Account account = new Account();
return account;
}
@Test
public void createAccountTest() {
AccountDO accountDO = getAccountDO();
// 创建成功测试
createAccount2SuccessTest(accountDO);
// 主键重复测试
createAccount2DuplicateKeyExceptionTest(accountDO);
}
private void createAccount2SuccessTest(AccountDO accountDO) {
Mockito.when(accountDao.addNewAccount(Mockito.any())).thenReturn(1);
Assert.assertEquals(accountService.createAccount(accountDO), ResultStatus.SUCCESS);
}
private void createAccount2DuplicateKeyExceptionTest(AccountDO accountDO) {
Mockito.when(accountDao.addNewAccount(Mockito.any())).thenThrow(DuplicateKeyException.class);
Assert.assertEquals(accountService.createAccount(accountDO), ResultStatus.RESOURCE_ALREADY_EXISTED);
}
private void createAccount2MySQLErrorTest(AccountDO accountDO) {
Mockito.when(accountDao.addNewAccount(Mockito.any())).thenReturn(-1);
Assert.assertEquals(accountService.createAccount(accountDO), ResultStatus.MYSQL_ERROR);
}
@Test
public void deleteByNameTest() {
// 删除成功测试
deleteName2SuccessTest();
// MySQL_ERROR错误测试
deleteName2MySQLErrorTest();
}
private void deleteName2SuccessTest() {
Mockito.when(accountDao.deleteByName(Mockito.anyString())).thenReturn(1);
Assert.assertEquals(accountService.deleteByName("username", "admin"), ResultStatus.SUCCESS);
}
private void deleteName2MySQLErrorTest() {
Mockito.when(accountDao.deleteByName(Mockito.anyString())).thenReturn(-1);
Assert.assertEquals(accountService.deleteByName("username", "admin"), ResultStatus.MYSQL_ERROR);
}
@Test
public void updateAccountTest() {
// 账号不存在测试
updateAccount2AccountNotExistTest();
// 更新成功测试
updateAccount2SuccessTest();
// MySQL_ERROR测试
updateAccount2MySQLErrorTest();
}
private void updateAccount2AccountNotExistTest() {
AccountDO accountDO = getAccountDO();
Mockito.when(accountDao.getByName(Mockito.anyString())).thenReturn(null);
Assert.assertEquals(accountService.updateAccount(accountDO), ResultStatus.ACCOUNT_NOT_EXIST);
}
private void updateAccount2SuccessTest() {
AccountDO accountDO = getAccountDO();
Mockito.when(accountDao.getByName(Mockito.anyString())).thenReturn(accountDO);
Mockito.when(accountDao.updateByName(Mockito.any())).thenReturn(1);
Assert.assertEquals(accountService.updateAccount(accountDO), ResultStatus.SUCCESS);
}
private void updateAccount2MySQLErrorTest() {
AccountDO accountDO = getAccountDO();
Mockito.when(accountDao.getByName(Mockito.anyString())).thenReturn(accountDO);
Mockito.when(accountDao.updateByName(Mockito.any())).thenReturn(-1);
Assert.assertEquals(accountService.updateAccount(accountDO), ResultStatus.MYSQL_ERROR);
}
@Test
public void getAccountDOTest() {
AccountDO accountDO = getAccountDO();
Result<AccountDO> expectedResult = Result.buildSuc(accountDO);
Mockito.when(accountDao.getByName(Mockito.anyString())).thenReturn(accountDO);
Assert.assertEquals(accountService.getAccountDO(accountDO.getUsername()).toString(), expectedResult.toString());
}
@Test
public void listTest() {
AccountDO accountDO = getAccountDO();
List<AccountDO> list = new ArrayList<>();
list.add(accountDO);
Mockito.when(accountDao.list()).thenReturn(list);
List<AccountDO> actualResult = accountService.list();
Assert.assertTrue(!actualResult.isEmpty() && actualResult.stream().allMatch(account -> account.getUsername().equals(accountDO.getUsername()) &&
account.getPassword().equals(accountDO.getPassword())));
}
@Test
public void searchAccountByPrefixTest() {
EnterpriseStaff staff = getEnterpriseStaff();
List<EnterpriseStaff> expectedResult = new ArrayList<>();
expectedResult.add(staff);
Mockito.when(enterpriseStaffService.searchEnterpriseStaffByKeyWord(Mockito.anyString())).thenReturn(expectedResult);
List<EnterpriseStaff> actualResult = accountService.searchAccountByPrefix("prefix");
Assert.assertTrue(!actualResult.isEmpty() && actualResult.stream().allMatch(enterpriseStaff -> enterpriseStaff.getUsername().equals(staff.getUsername())));
}
// 因为flush只会执行一次因此需要分开测试
@Test(description = "普通角色测试")
public void getAccountRoleFromCache2NormalTest() {
Assert.assertEquals(accountService.getAccountRoleFromCache("username"), AccountRoleEnum.NORMAL);
}
@Test(description = "op角色测试")
public void getAccountRoleFromCache2OpTest() {
AccountDO accountDO = getAccountDO();
accountDO.setUsername("admin");
accountDO.setRole(2);
Mockito.when(accountDao.list()).thenReturn(Arrays.asList(accountDO));
Assert.assertEquals(accountService.getAccountRoleFromCache("admin"), AccountRoleEnum.OP);
}
@Test(description = "自动审批测试")
public void getAccountFromCache2AutoHandleTest() {
Account account = getAccount();
account.setUsername(Constant.AUTO_HANDLE_USER_NAME);
account.setChineseName(Constant.AUTO_HANDLE_CHINESE_NAME);
account.setAccountRoleEnum(AccountRoleEnum.OP);
Assert.assertEquals(accountService.getAccountFromCache(Constant.AUTO_HANDLE_USER_NAME).toString(), account.toString());
}
@Test(description = "staff为null测试")
public void getAccountFromCache2EnterpriseStaffIsNullTest() {
Account account = getAccount();
account.setUsername("username1");
account.setChineseName("username1");
account.setAccountRoleEnum(AccountRoleEnum.NORMAL);
Mockito.when(enterpriseStaffService.getEnterpriseStaffByName(Mockito.anyString())).thenReturn(null);
Assert.assertEquals(accountService.getAccountFromCache("username1").toString(), account.toString());
}
@Test(description = "staff不为null测试")
public void getAccountFromCache2EnterpriseStaffIsNotNullTest() {
Account account = getAccount();
account.setUsername("username");
account.setChineseName("ChineseName");
account.setAccountRoleEnum(AccountRoleEnum.NORMAL);
account.setDepartment("department");
EnterpriseStaff enterpriseStaff = getEnterpriseStaff();
Mockito.when(enterpriseStaffService.getEnterpriseStaffByName(Mockito.any())).thenReturn(enterpriseStaff);
Assert.assertEquals(accountService.getAccountFromCache("username").toString(), account.toString());
}
@Test(description = "op角色测试")
public void isAdminOrderHandler2OpTest() {
AccountDO accountDO = getAccountDO();
accountDO.setUsername("admin");
accountDO.setRole(2);
Mockito.when(accountDao.list()).thenReturn(Arrays.asList(accountDO));
Assert.assertTrue(accountService.isAdminOrderHandler("admin"));
}
@Test(description = "ADMIN_ORDER_HANDLER_CACHE包含用户名测试")
public void isAdminOrderHandler2CacheContainsTest() {
Mockito.when(configService.getArrayByKey(Mockito.anyString(), Mockito.any())).thenReturn(Arrays.asList("username"));
Mockito.when(accountDao.list()).thenReturn(new ArrayList<>());
Assert.assertTrue(accountService.isAdminOrderHandler("username"));
}
@Test(description = "普通角色测试")
public void isAdminOrderHandler2NormalTest() {
Mockito.when(accountDao.list()).thenReturn(new ArrayList<>());
Assert.assertFalse(accountService.isAdminOrderHandler("username"));
}
@Test(description = "op角色测试")
public void isOpOrRd2OpTest() {
AccountDO accountDO = getAccountDO();
accountDO.setUsername("admin");
accountDO.setRole(2);
Mockito.when(accountDao.list()).thenReturn(Arrays.asList(accountDO));
Assert.assertTrue(accountService.isOpOrRd("admin"));
}
@Test
public void isOpOrRdTest2RdTest() {
AccountDO accountDO = getAccountDO();
accountDO.setUsername("admin");
accountDO.setRole(1);
Mockito.when(accountDao.list()).thenReturn(Arrays.asList(accountDO));
Assert.assertTrue(accountService.isOpOrRd("admin"));
}
@Test
public void getAdminOrderHandlerFromCacheTest() {
AccountDO accountDO = getAccountDO();
accountDO.setUsername("username");
accountDO.setRole(2);
Mockito.when(accountDao.list()).thenReturn(Arrays.asList(accountDO));
List<Account> actualList = accountService.getAdminOrderHandlerFromCache();
Assert.assertTrue(!actualList.isEmpty() && actualList.stream().allMatch(account -> account.getUsername().equals(accountDO.getUsername())));
}
}

View File

@@ -1,17 +1,198 @@
package com.xiaojukeji.kafka.manager.account;
import com.xiaojukeji.kafka.manager.account.component.AbstractSingleSignOn;
import com.xiaojukeji.kafka.manager.account.component.login.trick.TrickLoginService;
import com.xiaojukeji.kafka.manager.account.config.BaseTest;
import com.xiaojukeji.kafka.manager.common.bizenum.AccountRoleEnum;
import com.xiaojukeji.kafka.manager.common.constant.ApiPrefix;
import com.xiaojukeji.kafka.manager.common.constant.LoginConstant;
import com.xiaojukeji.kafka.manager.common.entity.Result;
import com.xiaojukeji.kafka.manager.common.entity.ResultStatus;
import com.xiaojukeji.kafka.manager.common.entity.ao.account.Account;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import javax.servlet.http.*;
/**
* @author xuguang
* @Date 2021/12/25
* @author wyc
* @Date 2021/12/29
*/
public class LoginServiceTest extends BaseTest {
@Autowired
@InjectMocks
private LoginService loginService;
@Mock
private AbstractSingleSignOn singleSignOn;
@Mock
private AccountService accountService;
@Mock
private TrickLoginService trickLoginService;
@BeforeMethod
public void init() {
MockitoAnnotations.initMocks(this);
}
private Account getAccount() {
Account account = new Account();
account.setUsername("username");
return account;
}
private HttpServletRequest getHttpServletRequest() {
HttpServletRequest request = new MockHttpServletRequest();
return request;
}
private HttpServletResponse getHttpServletResponse() {
HttpServletResponse response = new MockHttpServletResponse();
return response;
}
@Test
public void test() {
Assert.assertEquals("", "");
public void loginTest() {
// 失败测试
login2FailureTest();
// 成功测试
HttpServletRequest request = getHttpServletRequest();
HttpServletResponse response = getHttpServletResponse();
login2SuccessTest(request, response);
}
private void login2SuccessTest(HttpServletRequest request, HttpServletResponse response) {
Account account = getAccount();
Result<Account> expectResult = Result.buildSuc(account);
Result<String> midResult = Result.buildSuc();
Mockito.when(singleSignOn.loginAndGetLdap(Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(midResult);
Mockito.when(accountService.getAccountFromCache(Mockito.any())).thenReturn(account);
Assert.assertEquals(loginService.login(request, response, null).toString(), expectResult.toString());
}
private void login2FailureTest() {
Result<String> result = new Result<>();
result.setCode(ResultStatus.FAIL.getCode());
result.setMessage(ResultStatus.FAIL.getMessage());
Mockito.when(singleSignOn.loginAndGetLdap(Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(result);
Result<Account> actualResult = loginService.login(null, null, null);
Assert.assertEquals(actualResult.toString(), result.toString());
}
@Test
public void checkLoginTest() {
// classRequestMappingValue为null测试
checkLogin2ClassValueIsNullTest();
// 白名单接口测试
checkLogin2SSOTest();
// trick登陆返回用户名为空
checkLogin2TrickFalseTest();
// 权限检查normal接口测试
checkLogin2NormalTest();
// 权限检查RD接口, 成功测试
checkLogin2RDSuccessTest();
// 权限检查RD接口, 失败测试
checkLogin2RDFailureTest();
// 权限检查OP接口, 成功测试
checkLogin2OPSuccessTest();
// 权限检查OP接口失败测试
checkLogin2OPFailureTest();
}
private void checkLogin2ClassValueIsNullTest() {
HttpServletResponse response = getHttpServletResponse();
HttpServletRequest request = getHttpServletRequest();
Mockito.doNothing().when(singleSignOn).setRedirectToLoginPage(Mockito.any());
Assert.assertFalse(loginService.checkLogin(request, response, null));
Assert.assertEquals(response.getStatus(), HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
private void checkLogin2SSOTest() {
HttpServletResponse response = getHttpServletResponse();
HttpServletRequest request = getHttpServletRequest();
Assert.assertTrue(loginService.checkLogin(request, response, ApiPrefix.API_V1_SSO_PREFIX));
}
private void checkLogin2TrickFalseTest() {
HttpServletResponse response = getHttpServletResponse();
HttpServletRequest request = getHttpServletRequest();
Mockito.when(trickLoginService.isTrickLoginOn(Mockito.any())).thenReturn(true);
Mockito.when(trickLoginService.checkTrickLogin(Mockito.any())).thenReturn("");
Mockito.doNothing().when(singleSignOn).setRedirectToLoginPage(response);
Assert.assertFalse(loginService.checkLogin(request, response, "string"));
Assert.assertEquals(response.getStatus(), HttpServletResponse.SC_UNAUTHORIZED);
}
private void checkLogin2NormalTest() {
HttpServletResponse response = getHttpServletResponse();
HttpServletRequest request = getHttpServletRequest();
Mockito.when(trickLoginService.isTrickLoginOn(Mockito.any())).thenReturn(true);
Mockito.when(trickLoginService.checkTrickLogin(Mockito.any())).thenReturn("username");
Assert.assertTrue(loginService.checkLogin(request, response, ApiPrefix.API_V1_NORMAL_PREFIX));
Assert.assertEquals(request.getSession().getAttribute(LoginConstant.SESSION_USERNAME_KEY), "username");
}
private void checkLogin2RDSuccessTest() {
HttpServletResponse response = getHttpServletResponse();
HttpServletRequest request = getHttpServletRequest();
Mockito.when(trickLoginService.isTrickLoginOn(Mockito.any())).thenReturn(true);
Mockito.when(trickLoginService.checkTrickLogin(Mockito.any())).thenReturn("username");
Mockito.when(accountService.getAccountRoleFromCache(Mockito.any())).thenReturn(AccountRoleEnum.OP);
Assert.assertTrue(loginService.checkLogin(request, response, ApiPrefix.API_V1_RD_PREFIX));
Assert.assertEquals(request.getSession().getAttribute(LoginConstant.SESSION_USERNAME_KEY), "username");
}
private void checkLogin2RDFailureTest() {
HttpServletResponse response = getHttpServletResponse();
HttpServletRequest request = getHttpServletRequest();
Mockito.when(trickLoginService.isTrickLoginOn(Mockito.any())).thenReturn(true);
Mockito.when(trickLoginService.checkTrickLogin(Mockito.any())).thenReturn("username");
Mockito.when(accountService.getAccountRoleFromCache(Mockito.any())).thenReturn(AccountRoleEnum.NORMAL);
Assert.assertFalse(loginService.checkLogin(request, response, ApiPrefix.API_V1_RD_PREFIX));
Assert.assertEquals(response.getStatus(), HttpServletResponse.SC_FORBIDDEN);
}
private void checkLogin2OPSuccessTest() {
HttpServletResponse response = getHttpServletResponse();
HttpServletRequest request = getHttpServletRequest();
Mockito.when(trickLoginService.isTrickLoginOn(Mockito.any())).thenReturn(true);
Mockito.when(trickLoginService.checkTrickLogin(Mockito.any())).thenReturn("username");
Mockito.when(accountService.getAccountRoleFromCache(Mockito.any())).thenReturn(AccountRoleEnum.OP);
Assert.assertTrue(loginService.checkLogin(request, response, ApiPrefix.API_V1_OP_PREFIX));
Assert.assertEquals(request.getSession().getAttribute(LoginConstant.SESSION_USERNAME_KEY), "username");
}
private void checkLogin2OPFailureTest() {
HttpServletResponse response = getHttpServletResponse();
HttpServletRequest request = getHttpServletRequest();
Mockito.when(trickLoginService.isTrickLoginOn(Mockito.any())).thenReturn(true);
Mockito.when(trickLoginService.checkTrickLogin(Mockito.any())).thenReturn("username");
Mockito.when(accountService.getAccountRoleFromCache(Mockito.any())).thenReturn(AccountRoleEnum.NORMAL);
Assert.assertFalse(loginService.checkLogin(request, response, ApiPrefix.API_V1_OP_PREFIX));
Assert.assertEquals(response.getStatus(), HttpServletResponse.SC_FORBIDDEN);
}
}

View File

@@ -13,9 +13,9 @@ spring:
active: dev
datasource:
kafka-manager:
jdbc-url: jdbc:mysql://localhost:3306/logi_kafka_manager?characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
jdbc-url: jdbc:mysql://10.190.7.220:3306/user_test?characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
username: root
password: 123456
password: 2PHCnL6RRM
driver-class-name: com.mysql.cj.jdbc.Driver
main:
allow-bean-definition-overriding: true