Skip to content

Commit 6869e86

Browse files
Issue2 (#3)
* #2 fix Thread.sleep() issue and add tests
1 parent 96bb6d0 commit 6869e86

File tree

2 files changed

+50
-3
lines changed

2 files changed

+50
-3
lines changed

src/main/java/de/martinspielmann/wicket/pwnedpasswordsvalidator/PwnedPasswordsValidator.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@
2626
*/
2727
public class PwnedPasswordsValidator implements IValidator<String> {
2828

29-
private static final Logger LOG = LoggerFactory.getLogger(PwnedPasswordsValidator.class);
29+
private static final long serialVersionUID = 1L;
30+
31+
private static final Logger LOG = LoggerFactory.getLogger(PwnedPasswordsValidator.class);
3032

3133
private static final String API_URL = "https://api.pwnedpasswords.com/pwnedpassword/%s";
3234

@@ -109,6 +111,7 @@ protected void handleToManyRequests(IValidatable<String> validatable) {
109111
Thread.sleep(2000);
110112
} catch (InterruptedException e) {
111113
LOG.error("Error waiting to request pwned passwords", e);
114+
Thread.currentThread().interrupt();
112115
}
113116
validate(validatable);
114117
break;

src/test/java/de/martinspielmann/wicket/pwnedpasswordsvalidator/PwnedPasswordsValidatorTest.java

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package de.martinspielmann.wicket.pwnedpasswordsvalidator;
22

3-
import org.apache.wicket.markup.html.form.FormComponent;
43
import org.apache.wicket.util.tester.FormTester;
54
import org.apache.wicket.util.tester.WicketTester;
65
import org.apache.wicket.validation.Validatable;
@@ -10,6 +9,7 @@
109
import java.net.*;
1110
import java.security.NoSuchAlgorithmException;
1211
import java.util.UUID;
12+
import java.util.concurrent.atomic.AtomicInteger;
1313

1414
public class PwnedPasswordsValidatorTest {
1515

@@ -96,7 +96,51 @@ protected Status getResponseStatus(String pw) {
9696
v.validate(validatable);
9797
Assert.assertEquals(0, validatable.getErrors().size());
9898
}
99-
99+
100+
@Test
101+
public void validatePwTooManyRequestsIgnore() {
102+
PwnedPasswordsValidator v = new PwnedPasswordsValidator(true, RateLimitExceededBehavior.IGNORE) {
103+
@Override
104+
protected Status getResponseStatus(String pw) {
105+
return Status.TOO_MANY_REQUESTS;
106+
}
107+
};
108+
Validatable<String> validatable = new Validatable<>();
109+
v.validate(validatable);
110+
Assert.assertEquals(0, validatable.getErrors().size());
111+
}
112+
113+
@Test
114+
public void validatePwTooManyRequestsFail() {
115+
PwnedPasswordsValidator v = new PwnedPasswordsValidator(true, RateLimitExceededBehavior.FAIL) {
116+
@Override
117+
protected Status getResponseStatus(String pw) {
118+
return Status.TOO_MANY_REQUESTS;
119+
}
120+
};
121+
Validatable<String> validatable = new Validatable<>();
122+
v.validate(validatable);
123+
Assert.assertEquals(1, validatable.getErrors().size());
124+
}
125+
126+
@Test
127+
public void validatePwTooManyRequestsRetry() {
128+
final AtomicInteger i = new AtomicInteger(0);
129+
PwnedPasswordsValidator v = new PwnedPasswordsValidator(true, RateLimitExceededBehavior.RETRY) {
130+
@Override
131+
protected Status getResponseStatus(String pw) {
132+
if(i.getAndIncrement() == 0) {
133+
return Status.TOO_MANY_REQUESTS;
134+
}else {
135+
return Status.PASSWORD_OK;
136+
}
137+
}
138+
};
139+
Validatable<String> validatable = new Validatable<>();
140+
v.validate(validatable);
141+
Assert.assertEquals(0, validatable.getErrors().size());
142+
Assert.assertEquals(2, i.get());
143+
}
100144

101145
@Test
102146
public void getResponseStatusPwned() throws InterruptedException {

0 commit comments

Comments
 (0)