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.

109 lines
4.8 KiB

  1. import org.junit.jupiter.api.Test;
  2. import static org.junit.jupiter.api.Assertions.*;
  3. class PasswordValidatorTest {
  4. @Test
  5. void validate() {
  6. PasswordValidator passwordValidator = new PasswordValidator();
  7. assertFalse(passwordValidator.validate(""));
  8. // test minimum password length
  9. passwordValidator.setMinLength(6);
  10. passwordValidator.setRequireUppercase(false);
  11. passwordValidator.setRequireLowercase(false);
  12. passwordValidator.setRequireDigit(false);
  13. passwordValidator.setCheckPwned(false);
  14. passwordValidator.setRequireSpecialChar(false);
  15. assertFalse(passwordValidator.validate("abcde"));
  16. assertTrue(passwordValidator.validate("abcdef"));
  17. assertTrue(passwordValidator.validate("abcdefg"));
  18. // test uppercase requirement
  19. passwordValidator.setRequireUppercase(true);
  20. passwordValidator.setRequireLowercase(false);
  21. passwordValidator.setRequireDigit(false);
  22. passwordValidator.setCheckPwned(false);
  23. passwordValidator.setRequireSpecialChar(false);
  24. assertFalse(passwordValidator.validate("abcdef"));
  25. assertTrue(passwordValidator.validate("abCdef"));
  26. assertTrue(passwordValidator.validate("ABCDEF"));
  27. // test lowercase requirement
  28. passwordValidator.setRequireUppercase(true);
  29. passwordValidator.setRequireLowercase(true);
  30. passwordValidator.setRequireDigit(false);
  31. passwordValidator.setCheckPwned(false);
  32. passwordValidator.setRequireSpecialChar(false);
  33. assertFalse(passwordValidator.validate("abcdef"));
  34. assertTrue(passwordValidator.validate("abCdef"));
  35. assertFalse(passwordValidator.validate("ABCDEF"));
  36. // test digits requirement
  37. passwordValidator.setRequireUppercase(true);
  38. passwordValidator.setRequireLowercase(true);
  39. passwordValidator.setRequireDigit(true);
  40. passwordValidator.setCheckPwned(false);
  41. passwordValidator.setRequireSpecialChar(false);
  42. assertFalse(passwordValidator.validate("8"));
  43. assertFalse(passwordValidator.validate("12345678"));
  44. assertFalse(passwordValidator.validate("abcdef"));
  45. assertFalse(passwordValidator.validate("abcdef8"));
  46. assertFalse(passwordValidator.validate("abCdef"));
  47. assertFalse(passwordValidator.validate("ABCDEF"));
  48. assertFalse(passwordValidator.validate("ABCDEF8"));
  49. assertTrue(passwordValidator.validate("abCDE8F"));
  50. // test special chars requirement
  51. passwordValidator.setRequireUppercase(true);
  52. passwordValidator.setRequireLowercase(true);
  53. passwordValidator.setRequireDigit(true);
  54. passwordValidator.setCheckPwned(false);
  55. passwordValidator.setRequireSpecialChar(true);
  56. assertFalse(passwordValidator.validate("*"));
  57. assertFalse(passwordValidator.validate("abCDE8F"));
  58. assertTrue(passwordValidator.validate("abCDE8_F"));
  59. assertTrue(passwordValidator.validate("abCDE*/8_F"));
  60. // test password pwned check
  61. passwordValidator.setRequireUppercase(true);
  62. passwordValidator.setRequireLowercase(true);
  63. passwordValidator.setRequireDigit(true);
  64. passwordValidator.setCheckPwned(true);
  65. assertFalse(passwordValidator.validate("8"));
  66. assertFalse(passwordValidator.validate("asdf12"));
  67. assertTrue(passwordValidator.validate("=phan0johB4aisae6Mie0jeip9Saejahc0iuvuth7ahv9uoni6o*_.+"));
  68. // test password wordlist check
  69. passwordValidator.setRequireUppercase(true);
  70. passwordValidator.setRequireLowercase(true);
  71. passwordValidator.setRequireDigit(true);
  72. passwordValidator.setCheckPwned(true);
  73. passwordValidator.setCheckWordlist(true);
  74. assertFalse(passwordValidator.validate("8"));
  75. assertFalse(passwordValidator.validate("_Sonnenblume123"));
  76. assertTrue(passwordValidator.validate("=phan0johB4aisae6Mie0jeip9Saejahc0iuvuth7ahv9uoni6o*_.+"));
  77. }
  78. @Test
  79. void getSHA1Hash() {
  80. assertEquals("356A192B7913B04C54574D18C28D46E6395428AB".toLowerCase(), PasswordValidator.getSHA1Hash("1"));
  81. assertEquals("A233F0E898ED0661D6D47ED0958F16B52E537231".toLowerCase(), PasswordValidator.getSHA1Hash("asdf12"));
  82. assertNull(PasswordValidator.getSHA1Hash(""));
  83. }
  84. @Test
  85. void isPwned() {
  86. assertTrue(PasswordValidator.isPwned("asdf12"));
  87. assertFalse(PasswordValidator.isPwned("=phan0johB4aisae6Mie0jeip9Saejahc0iuvuth7ahv9uoni6o*_.+"));
  88. assertFalse(PasswordValidator.isPwned(""));
  89. }
  90. @Test
  91. void isInWordlist() {
  92. assertTrue(PasswordValidator.isInWordlist("Sonnenblume"));
  93. assertTrue(PasswordValidator.isInWordlist("_Sonnenblume123"));
  94. assertFalse(PasswordValidator.isInWordlist("=phan0johB4aisae6Mie0jeip9Saejahc0iuvuth7ahv9uoni6o*_.+"));
  95. }
  96. }