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

  1. import org.junit.jupiter.api.BeforeAll;
  2. import org.junit.jupiter.api.Test;
  3. import static org.junit.jupiter.api.Assertions.*;
  4. class PasswordValidatorTest {
  5. static PasswordValidator passwordValidator = new PasswordValidator();
  6. @BeforeAll
  7. static void init() {
  8. passwordValidator = new PasswordValidator();
  9. }
  10. @Test
  11. void testMinimumPasswordLength() {
  12. assertFalse(passwordValidator.validate(""));
  13. passwordValidator.setMinLength(6);
  14. passwordValidator.setRequireUppercase(false);
  15. passwordValidator.setRequireLowercase(false);
  16. passwordValidator.setRequireDigit(false);
  17. passwordValidator.setCheckPwned(false);
  18. passwordValidator.setRequireSpecialChar(false);
  19. assertFalse(passwordValidator.validate("abcde"));
  20. assertTrue(passwordValidator.validate("abcdef"));
  21. assertTrue(passwordValidator.validate("abcdefg"));
  22. }
  23. @Test
  24. void testUppercasePasswordRequirement() {
  25. passwordValidator.setRequireUppercase(true);
  26. passwordValidator.setRequireLowercase(false);
  27. passwordValidator.setRequireDigit(false);
  28. passwordValidator.setCheckPwned(false);
  29. passwordValidator.setRequireSpecialChar(false);
  30. assertFalse(passwordValidator.validate("abcdef"));
  31. assertTrue(passwordValidator.validate("abCdef"));
  32. assertTrue(passwordValidator.validate("ABCDEF"));
  33. }
  34. @Test
  35. void testLowercasePasswordRequirement() {
  36. passwordValidator.setRequireUppercase(true);
  37. passwordValidator.setRequireLowercase(true);
  38. passwordValidator.setRequireDigit(false);
  39. passwordValidator.setCheckPwned(false);
  40. passwordValidator.setRequireSpecialChar(false);
  41. assertFalse(passwordValidator.validate("abcdef"));
  42. assertTrue(passwordValidator.validate("abCdef"));
  43. assertFalse(passwordValidator.validate("ABCDEF"));
  44. }
  45. @Test
  46. void testDigitsPasswordRequirement() {
  47. passwordValidator.setRequireUppercase(true);
  48. passwordValidator.setRequireLowercase(true);
  49. passwordValidator.setRequireDigit(true);
  50. passwordValidator.setCheckPwned(false);
  51. passwordValidator.setRequireSpecialChar(false);
  52. assertFalse(passwordValidator.validate("8"));
  53. assertFalse(passwordValidator.validate("12345678"));
  54. assertFalse(passwordValidator.validate("abcdef"));
  55. assertFalse(passwordValidator.validate("abcdef8"));
  56. assertFalse(passwordValidator.validate("abCdef"));
  57. assertFalse(passwordValidator.validate("ABCDEF"));
  58. assertFalse(passwordValidator.validate("ABCDEF8"));
  59. assertTrue(passwordValidator.validate("abCDE8F"));
  60. }
  61. @Test
  62. void testSpecialCharsPasswordRequirement() {
  63. passwordValidator.setRequireUppercase(true);
  64. passwordValidator.setRequireLowercase(true);
  65. passwordValidator.setRequireDigit(true);
  66. passwordValidator.setCheckPwned(false);
  67. passwordValidator.setRequireSpecialChar(true);
  68. assertFalse(passwordValidator.validate("*"));
  69. assertFalse(passwordValidator.validate("abCDE8F"));
  70. assertTrue(passwordValidator.validate("abCDE8_F"));
  71. assertTrue(passwordValidator.validate("abCDE*/8_F"));
  72. }
  73. /**
  74. * Requires a network connection and DNS to be set up.
  75. */
  76. @Test
  77. void testPasswordPwnedCheck() {
  78. passwordValidator.setRequireUppercase(true);
  79. passwordValidator.setRequireLowercase(true);
  80. passwordValidator.setRequireDigit(true);
  81. passwordValidator.setCheckPwned(true);
  82. assertFalse(passwordValidator.validate("8"));
  83. assertFalse(passwordValidator.validate("asdf12"));
  84. assertTrue(passwordValidator.validate("=phan0johB4aisae6Mie0jeip9Saejahc0iuvuth7ahv9uoni6o*_.+"));
  85. }
  86. @Test
  87. void testPasswordWordlistCheck() {
  88. passwordValidator.setRequireUppercase(true);
  89. passwordValidator.setRequireLowercase(true);
  90. passwordValidator.setRequireDigit(true);
  91. passwordValidator.setCheckPwned(true);
  92. passwordValidator.setCheckWordlist(true);
  93. assertFalse(passwordValidator.validate("8"));
  94. assertFalse(passwordValidator.validate("_Sonnenblume123"));
  95. assertTrue(passwordValidator.validate("=phan0johB4aisae6Mie0jeip9Saejahc0iuvuth7ahv9uoni6o*_.+"));
  96. }
  97. @Test
  98. void getSHA1Hash() {
  99. assertEquals("356A192B7913B04C54574D18C28D46E6395428AB".toLowerCase(), PasswordValidator.getSHA1Hash("1"));
  100. assertEquals("A233F0E898ED0661D6D47ED0958F16B52E537231".toLowerCase(), PasswordValidator.getSHA1Hash("asdf12"));
  101. assertNull(PasswordValidator.getSHA1Hash(""));
  102. }
  103. @Test
  104. void isPwned() {
  105. assertTrue(PasswordValidator.isPwned("asdf12"));
  106. assertFalse(PasswordValidator.isPwned("=phan0johB4aisae6Mie0jeip9Saejahc0iuvuth7ahv9uoni6o*_.+"));
  107. assertFalse(PasswordValidator.isPwned(""));
  108. }
  109. @Test
  110. void isInWordlist() {
  111. assertTrue(PasswordValidator.isInWordlist("Sonnenblume"));
  112. assertTrue(PasswordValidator.isInWordlist("_Sonnenblume123"));
  113. assertFalse(PasswordValidator.isInWordlist("=phan0johB4aisae6Mie0jeip9Saejahc0iuvuth7ahv9uoni6o*_.+"));
  114. }
  115. }