Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
Commit c3b0d938 authored by Joze RIHTARSIC's avatar Joze RIHTARSIC
Browse files

Add unit test

parent f1683745
No related branches found
No related tags found
No related merge requests found
Pipeline #78698 passed with warnings
package eu.europa.ec.edelivery.smp.auth;
import eu.europa.ec.edelivery.smp.data.model.user.DBUser;
import eu.europa.ec.edelivery.smp.services.CredentialService;
import org.junit.Test;
import org.mockito.Mockito;
public class SMPAuthenticationProviderForUITest {
CredentialService mockCredentialService = Mockito.mock(CredentialService.class);
SMPAuthenticationProviderForUI testInstance = new SMPAuthenticationProviderForUI(mockCredentialService);
@Test
public void testValidateIfTokenIsSuspendedReset() {
int starFailCount = 5;
DBUser user = new DBUser();
user.setUsername("TestToken");
int suspensionSeconds = 100;
/*
user.setLastFailedLoginAttempt(OffsetDateTime.now().minusSeconds(suspensionSeconds+10));
user.setSequentialLoginFailureCount(starFailCount);
doReturn(suspensionSeconds).when(mockConfigurationService).getLoginSuspensionTimeInSeconds();
doReturn(starFailCount).when(mockConfigurationService).getLoginMaxAttempts();
testInstance.validateIfUserAccountIsSuspended(user, Calendar.getInstance().getTimeInMillis());
assertEquals(0, (int)user.getSequentialLoginFailureCount());
assertEquals(null, user.getLastFailedLoginAttempt());
*/
}
}
......@@ -2,6 +2,10 @@ package eu.europa.ec.edelivery.smp.auth;
import eu.europa.ec.edelivery.smp.data.dao.CredentialDao;
import eu.europa.ec.edelivery.smp.data.dao.UserDao;
import eu.europa.ec.edelivery.smp.data.enums.ApplicationRoleType;
import eu.europa.ec.edelivery.smp.data.enums.CredentialTargetType;
import eu.europa.ec.edelivery.smp.data.enums.CredentialType;
import eu.europa.ec.edelivery.smp.data.model.user.DBCredential;
import eu.europa.ec.edelivery.smp.data.model.user.DBUser;
import eu.europa.ec.edelivery.smp.services.CredentialService;
import eu.europa.ec.edelivery.smp.services.CredentialsAlertService;
......@@ -32,39 +36,47 @@ import static org.mockito.Mockito.*;
*/
public class SMPAuthenticationProviderTest {
CredentialService mockCredentialService = Mockito.mock(CredentialService.class);
CredentialDao mockCredentialDao = Mockito.mock(CredentialDao.class);
ConversionService mockConversionService = Mockito.mock(ConversionService.class);
CRLVerifierService mockCrlVerifierService = Mockito.mock(CRLVerifierService.class);
UITruststoreService mockTruststoreService = Mockito.mock(UITruststoreService.class);
ConfigurationService mockConfigurationService = Mockito.mock(ConfigurationService.class);
CredentialsAlertService mocAlertService = Mockito.mock(CredentialsAlertService.class);
UserDao mockUserDao = Mockito.mock(UserDao.class);
CredentialService mockCredentialService = new CredentialService(mockUserDao, mockCredentialDao, mockConversionService, mockCrlVerifierService, mockTruststoreService, mockConfigurationService, mocAlertService);
SMPAuthenticationProvider testInstance = new SMPAuthenticationProvider(mockCredentialService);
// response time for existing and non existing user should be "approx. equal"
// response time for existing and nonexistent user should be "approx. equal"
@Test
public void authenticateByAccessTokenResponseTime() {
/*
UsernamePasswordAuthenticationToken userToken = new UsernamePasswordAuthenticationToken("User", "User");
int count = 10;
DBUser user = new DBUser();
user.setId(1L);
user.setAccessTokenIdentifier("User");
user.setAccessToken(BCrypt.hashpw("InvalidPassword", BCrypt.gensalt()));
user.setRole("MY_ROLE");
user.setApplicationRole(ApplicationRoleType.USER);
DBCredential credential = new DBCredential();
credential.setValue(BCrypt.hashpw("InvalidPassword", BCrypt.gensalt()));
credential.setName("User");
credential.setUser(user);
credential.setCredentialType(CredentialType.ACCESS_TOKEN);
credential.setCredentialTarget(CredentialTargetType.REST_API);
doReturn(1000).when(mockConfigurationService).getAccessTokenLoginFailDelayInMilliSeconds();
doReturn(count+5).when(mockConfigurationService).getAccessTokenLoginMaxAttempts();
doReturn(Optional.of(user)).when(mockUserDao).findUserByIdentifier(any());
doReturn(Optional.of(credential)).when(mockCredentialDao).findAccessTokenCredentialForAPI(any());
long averageExists = 0;
long averageNotExist = 0;
for (int i = 0; i < count; i++) {
long userExistTime = Calendar.getInstance().getTimeInMillis();
try {
testInstance.authenticateByUsernameToken(userToken);
testInstance.authenticateByAuthenticationToken(userToken);
} catch (BadCredentialsException ignore) {
}
averageExists += Calendar.getInstance().getTimeInMillis() - userExistTime;
......@@ -74,7 +86,7 @@ public class SMPAuthenticationProviderTest {
for (int i = 0; i < count; i++) {
long userExistTime = Calendar.getInstance().getTimeInMillis();
try {
testInstance.authenticateByUsernameToken(userToken);
testInstance.authenticateByAuthenticationToken(userToken);
} catch (AuthenticationServiceException | BadCredentialsException ignore) {
}
averageNotExist += Calendar.getInstance().getTimeInMillis() - userExistTime;
......@@ -83,59 +95,5 @@ public class SMPAuthenticationProviderTest {
// the average should be the same!
assertThat("average difference between failed login must be less than 10ms", Math.abs(averageExists - averageNotExist),
Matchers.lessThan(50L));
*/
}
/*
@Test
public void testLoginAttemptForAccessTokenFailed(){
int starFailCount = 2;
DBUser user = new DBUser();
user.setSequentialTokenLoginFailureCount(starFailCount);
long starTime =Calendar.getInstance().getTimeInMillis();
doReturn(100).when(mockConfigurationService).getAccessTokenLoginMaxAttempts();
// when
BadCredentialsException error = assertThrows(BadCredentialsException.class,
() -> testInstance.loginAttemptForAccessTokenFailed(user,true, starTime));
assertEquals(SMPAuthenticationProvider.BAD_CREDENTIALS_EXCEPTION, error);
assertEquals(starFailCount+1,(int)user.getSequentialTokenLoginFailureCount());
verify(mocAlertService, times(1)).alertCredentialVerificationFailed(user, CredentialTypeEnum.ACCESS_TOKEN);
}
@Test
public void testLoginAttemptForAccessTokenSuspended(){
int starFailCount = 5;
DBUser user = new DBUser();
user.setSequentialTokenLoginFailureCount(starFailCount);
long starTime =Calendar.getInstance().getTimeInMillis();
doReturn(5).when(mockConfigurationService).getAccessTokenLoginMaxAttempts();
// when
BadCredentialsException error = assertThrows(BadCredentialsException.class,
() -> testInstance.loginAttemptForAccessTokenFailed(user,true,starTime));
assertEquals(SMPAuthenticationProvider.SUSPENDED_CREDENTIALS_EXCEPTION, error);
assertEquals(starFailCount+1,(int)user.getSequentialTokenLoginFailureCount());
verify(mocAlertService, times(1)).alertCredentialsSuspended(user, CredentialTypeEnum.ACCESS_TOKEN);
}
@Test
public void testValidateIfTokenIsSuspendedReset(){
int starFailCount = 5;
DBUser user = new DBUser();
user.setUsername("TestToken");
int suspensionSeconds =100;
user.setLastTokenFailedLoginAttempt(OffsetDateTime.now().minusSeconds(suspensionSeconds+10));
user.setSequentialTokenLoginFailureCount(starFailCount);
doReturn(suspensionSeconds).when(mockConfigurationService).getAccessTokenLoginSuspensionTimeInSeconds();
doReturn(starFailCount).when(mockConfigurationService).getAccessTokenLoginMaxAttempts();
testInstance.validateIfTokenIsSuspended(user, Calendar.getInstance().getTimeInMillis());
assertEquals(0, (int)user.getSequentialTokenLoginFailureCount());
assertEquals(null, user.getLastTokenFailedLoginAttempt());
}
*/
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment