You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
130 lines
5.1 KiB
130 lines
5.1 KiB
import org.junit.jupiter.api.BeforeAll;
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
import static org.junit.jupiter.api.Assertions.*;
|
|
|
|
class PasswordValidatorTest {
|
|
|
|
static PasswordValidator passwordValidator = new PasswordValidator();
|
|
|
|
@BeforeAll
|
|
static void init() {
|
|
passwordValidator = new PasswordValidator();
|
|
}
|
|
|
|
@Test
|
|
void testMinimumPasswordLength() {
|
|
assertFalse(passwordValidator.validate(""));
|
|
|
|
passwordValidator.setMinLength(6);
|
|
passwordValidator.setRequireUppercase(false);
|
|
passwordValidator.setRequireLowercase(false);
|
|
passwordValidator.setRequireDigit(false);
|
|
passwordValidator.setCheckPwned(false);
|
|
passwordValidator.setRequireSpecialChar(false);
|
|
assertFalse(passwordValidator.validate("abcde"));
|
|
assertTrue(passwordValidator.validate("abcdef"));
|
|
assertTrue(passwordValidator.validate("abcdefg"));
|
|
}
|
|
|
|
@Test
|
|
void testUppercasePasswordRequirement() {
|
|
passwordValidator.setRequireUppercase(true);
|
|
passwordValidator.setRequireLowercase(false);
|
|
passwordValidator.setRequireDigit(false);
|
|
passwordValidator.setCheckPwned(false);
|
|
passwordValidator.setRequireSpecialChar(false);
|
|
assertFalse(passwordValidator.validate("abcdef"));
|
|
assertTrue(passwordValidator.validate("abCdef"));
|
|
assertTrue(passwordValidator.validate("ABCDEF"));
|
|
}
|
|
|
|
@Test
|
|
void testLowercasePasswordRequirement() {
|
|
passwordValidator.setRequireUppercase(true);
|
|
passwordValidator.setRequireLowercase(true);
|
|
passwordValidator.setRequireDigit(false);
|
|
passwordValidator.setCheckPwned(false);
|
|
passwordValidator.setRequireSpecialChar(false);
|
|
assertFalse(passwordValidator.validate("abcdef"));
|
|
assertTrue(passwordValidator.validate("abCdef"));
|
|
assertFalse(passwordValidator.validate("ABCDEF"));
|
|
}
|
|
|
|
@Test
|
|
void testDigitsPasswordRequirement() {
|
|
passwordValidator.setRequireUppercase(true);
|
|
passwordValidator.setRequireLowercase(true);
|
|
passwordValidator.setRequireDigit(true);
|
|
passwordValidator.setCheckPwned(false);
|
|
passwordValidator.setRequireSpecialChar(false);
|
|
assertFalse(passwordValidator.validate("8"));
|
|
assertFalse(passwordValidator.validate("12345678"));
|
|
assertFalse(passwordValidator.validate("abcdef"));
|
|
assertFalse(passwordValidator.validate("abcdef8"));
|
|
assertFalse(passwordValidator.validate("abCdef"));
|
|
assertFalse(passwordValidator.validate("ABCDEF"));
|
|
assertFalse(passwordValidator.validate("ABCDEF8"));
|
|
assertTrue(passwordValidator.validate("abCDE8F"));
|
|
}
|
|
|
|
@Test
|
|
void testSpecialCharsPasswordRequirement() {
|
|
passwordValidator.setRequireUppercase(true);
|
|
passwordValidator.setRequireLowercase(true);
|
|
passwordValidator.setRequireDigit(true);
|
|
passwordValidator.setCheckPwned(false);
|
|
passwordValidator.setRequireSpecialChar(true);
|
|
assertFalse(passwordValidator.validate("*"));
|
|
assertFalse(passwordValidator.validate("abCDE8F"));
|
|
assertTrue(passwordValidator.validate("abCDE8_F"));
|
|
assertTrue(passwordValidator.validate("abCDE*/8_F"));
|
|
}
|
|
|
|
/**
|
|
* Requires a network connection and DNS to be set up.
|
|
*/
|
|
@Test
|
|
void testPasswordPwnedCheck() {
|
|
passwordValidator.setRequireUppercase(true);
|
|
passwordValidator.setRequireLowercase(true);
|
|
passwordValidator.setRequireDigit(true);
|
|
passwordValidator.setCheckPwned(true);
|
|
assertFalse(passwordValidator.validate("8"));
|
|
assertFalse(passwordValidator.validate("asdf12"));
|
|
assertTrue(passwordValidator.validate("=phan0johB4aisae6Mie0jeip9Saejahc0iuvuth7ahv9uoni6o*_.+"));
|
|
}
|
|
|
|
@Test
|
|
void testPasswordWordlistCheck() {
|
|
passwordValidator.setRequireUppercase(true);
|
|
passwordValidator.setRequireLowercase(true);
|
|
passwordValidator.setRequireDigit(true);
|
|
passwordValidator.setCheckPwned(true);
|
|
passwordValidator.setCheckWordlist(true);
|
|
assertFalse(passwordValidator.validate("8"));
|
|
assertFalse(passwordValidator.validate("_Sonnenblume123"));
|
|
assertTrue(passwordValidator.validate("=phan0johB4aisae6Mie0jeip9Saejahc0iuvuth7ahv9uoni6o*_.+"));
|
|
}
|
|
|
|
@Test
|
|
void getSHA1Hash() {
|
|
assertEquals("356A192B7913B04C54574D18C28D46E6395428AB".toLowerCase(), PasswordValidator.getSHA1Hash("1"));
|
|
assertEquals("A233F0E898ED0661D6D47ED0958F16B52E537231".toLowerCase(), PasswordValidator.getSHA1Hash("asdf12"));
|
|
assertNull(PasswordValidator.getSHA1Hash(""));
|
|
}
|
|
|
|
@Test
|
|
void isPwned() {
|
|
assertTrue(PasswordValidator.isPwned("asdf12"));
|
|
assertFalse(PasswordValidator.isPwned("=phan0johB4aisae6Mie0jeip9Saejahc0iuvuth7ahv9uoni6o*_.+"));
|
|
assertFalse(PasswordValidator.isPwned(""));
|
|
}
|
|
|
|
@Test
|
|
void isInWordlist() {
|
|
assertTrue(PasswordValidator.isInWordlist("Sonnenblume"));
|
|
assertTrue(PasswordValidator.isInWordlist("_Sonnenblume123"));
|
|
assertFalse(PasswordValidator.isInWordlist("=phan0johB4aisae6Mie0jeip9Saejahc0iuvuth7ahv9uoni6o*_.+"));
|
|
}
|
|
}
|