Skip to content

Commit caeebf8

Browse files
committed
Update tests
1 parent 6cd9e9b commit caeebf8

File tree

1 file changed

+25
-22
lines changed

1 file changed

+25
-22
lines changed

captchaservice-backend/src/test/java/de/muenchen/captchaservice/controller/captcha/CaptchaControllerTest.java

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.fasterxml.jackson.databind.ObjectMapper;
44
import de.muenchen.captchaservice.TestConstants;
5+
import de.muenchen.captchaservice.configuration.captcha.CaptchaProperties;
56
import de.muenchen.captchaservice.controller.captcha.request.PostChallengeRequest;
67
import de.muenchen.captchaservice.controller.captcha.request.PostVerifyRequest;
78
import de.muenchen.captchaservice.data.ExtendedPayload;
@@ -17,7 +18,6 @@
1718
import org.mockito.MockedStatic;
1819
import org.mockito.Mockito;
1920
import org.springframework.beans.factory.annotation.Autowired;
20-
import org.springframework.beans.factory.annotation.Value;
2121
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
2222
import org.springframework.boot.test.context.SpringBootTest;
2323
import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
@@ -57,6 +57,7 @@ class CaptchaControllerTest {
5757
private static final String TEST_SITE_KEY = "test_site";
5858
private static final String TEST_SITE_SECRET = "test_secret";
5959
private static final String TEST_HMAC_KEY = "secret";
60+
private static final String TEST_CLIENT_ADDRESS = "1.2.3.4";
6061
private static final ExtendedPayload TEST_PAYLOAD;
6162

6263
static {
@@ -82,8 +83,7 @@ class CaptchaControllerTest {
8283
private CaptchaRequestRepository captchaRequestRepository;
8384

8485
@Autowired
85-
@Value("${captcha.captcha-timeout-seconds}")
86-
private int captchaTimeoutSeconds;
86+
private CaptchaProperties captchaProperties;
8787

8888
@Autowired
8989
private ExpiredDataService expiredDataService;
@@ -109,7 +109,7 @@ void postChallenge_basic() {
109109
TEST_HMAC_KEY.equals(co.hmacKey))))
110110
.thenReturn(challenge);
111111

112-
final PostChallengeRequest request = new PostChallengeRequest(TEST_SITE_KEY, TEST_SITE_SECRET, "1.2.3.4");
112+
final PostChallengeRequest request = new PostChallengeRequest(TEST_SITE_KEY, TEST_SITE_SECRET, TEST_CLIENT_ADDRESS);
113113
final String requestBody = objectMapper.writeValueAsString(request);
114114
// --
115115
mockMvc.perform(
@@ -136,15 +136,15 @@ void postChallenge_basic() {
136136
@SneakyThrows
137137
void postChallenge_validIpv4() {
138138
databaseTestUtil.clearDatabase();
139-
final PostChallengeRequest request = new PostChallengeRequest(TEST_SITE_KEY, TEST_SITE_SECRET, "1.2.3.4");
139+
final PostChallengeRequest request = new PostChallengeRequest(TEST_SITE_KEY, TEST_SITE_SECRET, TEST_CLIENT_ADDRESS);
140140
final String requestBody = objectMapper.writeValueAsString(request);
141141
mockMvc.perform(
142142
post("/api/v1/captcha/challenge")
143143
.content(requestBody)
144144
.contentType(MediaType.APPLICATION_JSON))
145145
.andExpect(status().isOk())
146146
.andExpect(content().contentType(MediaType.APPLICATION_JSON));
147-
assertEquals(1, captchaRequestRepository.countBySourceAddressHashIgnoreCase(DigestUtils.sha256Hex("1.2.3.4")));
147+
assertEquals(1, captchaRequestRepository.countBySourceAddressHashIgnoreCase(DigestUtils.sha256Hex(TEST_CLIENT_ADDRESS)));
148148
}
149149

150150
@Test
@@ -177,7 +177,7 @@ void postChallenge_invalidSourceAddress() {
177177
@Test
178178
@SneakyThrows
179179
void postVerify_success() {
180-
final PostVerifyRequest request = new PostVerifyRequest(TEST_SITE_KEY, TEST_SITE_SECRET, TEST_PAYLOAD);
180+
final PostVerifyRequest request = new PostVerifyRequest(TEST_SITE_KEY, TEST_SITE_SECRET, TEST_CLIENT_ADDRESS, TEST_PAYLOAD);
181181
final String requestBody = objectMapper.writeValueAsString(request);
182182
try (MockedStatic<Altcha> mock = Mockito.mockStatic(Altcha.class)) {
183183
mock
@@ -201,7 +201,7 @@ void postVerify_success() {
201201
@Test
202202
@SneakyThrows
203203
void postVerify_unauthorized() {
204-
final PostVerifyRequest request = new PostVerifyRequest("test_site1", "test_secret1", TEST_PAYLOAD);
204+
final PostVerifyRequest request = new PostVerifyRequest("test_site1", "test_secret1", TEST_CLIENT_ADDRESS, TEST_PAYLOAD);
205205
final String requestBody = objectMapper.writeValueAsString(request);
206206
// --
207207
mockMvc.perform(
@@ -215,7 +215,7 @@ void postVerify_unauthorized() {
215215
@SneakyThrows
216216
void postVerify_expired() {
217217
databaseTestUtil.clearDatabase();
218-
final PostVerifyRequest request = new PostVerifyRequest(TEST_SITE_KEY, TEST_SITE_SECRET, TEST_PAYLOAD);
218+
final PostVerifyRequest request = new PostVerifyRequest(TEST_SITE_KEY, TEST_SITE_SECRET, TEST_CLIENT_ADDRESS, TEST_PAYLOAD);
219219
final String requestBody = objectMapper.writeValueAsString(request);
220220
try (MockedStatic<Altcha> mock = Mockito.mockStatic(Altcha.class)) {
221221
// Successful request
@@ -252,7 +252,7 @@ void postVerify_expired() {
252252
@SneakyThrows
253253
void testChallengeMetricsIncrement() {
254254
int calls = 3;
255-
final PostChallengeRequest challengeRequest = new PostChallengeRequest(TEST_SITE_KEY, TEST_SITE_SECRET, "1.2.3.4");
255+
final PostChallengeRequest challengeRequest = new PostChallengeRequest(TEST_SITE_KEY, TEST_SITE_SECRET, TEST_CLIENT_ADDRESS);
256256
final String challengeRequestBody = objectMapper.writeValueAsString(challengeRequest);
257257

258258
for (int i = 1; i <= calls; i++) {
@@ -265,7 +265,9 @@ void testChallengeMetricsIncrement() {
265265
mockMvc.perform(
266266
get("/actuator/metrics/captcha.challenge.requests"))
267267
.andExpect(status().isOk())
268-
.andExpect(jsonPath("$.measurements[0].value", is((double) i)));
268+
.andExpect(jsonPath("$.measurements[0].value", is((double) i)))
269+
.andExpect(jsonPath("$.availableTags[?(@.tag=='difficulty')].values[0]", hasItem("1000")))
270+
.andExpect(jsonPath("$.availableTags[?(@.tag=='site_key')].values[0]", hasItem("test_site")));
269271
}
270272
}
271273

@@ -274,7 +276,7 @@ void testChallengeMetricsIncrement() {
274276
void testVerifyMetricsIncrement() {
275277
databaseTestUtil.clearDatabase();
276278
int calls = 4;
277-
final PostVerifyRequest verifyRequest = new PostVerifyRequest(TEST_SITE_KEY, TEST_SITE_SECRET, TEST_PAYLOAD);
279+
final PostVerifyRequest verifyRequest = new PostVerifyRequest(TEST_SITE_KEY, TEST_SITE_SECRET, TEST_CLIENT_ADDRESS, TEST_PAYLOAD);
278280
final String verifyRequestBody = objectMapper.writeValueAsString(verifyRequest);
279281

280282
try (MockedStatic<Altcha> mock = Mockito.mockStatic(Altcha.class)) {
@@ -293,15 +295,17 @@ void testVerifyMetricsIncrement() {
293295

294296
mockMvc.perform(get("/actuator/metrics/captcha.verify.success"))
295297
.andExpect(status().isOk())
296-
.andExpect(jsonPath("$.measurements[0].value", is((double) i)));
298+
.andExpect(jsonPath("$.measurements[0].value", is((double) i)))
299+
.andExpect(jsonPath("$.availableTags[?(@.tag=='difficulty')].values[0]", hasItem("1000")))
300+
.andExpect(jsonPath("$.availableTags[?(@.tag=='site_key')].values[0]", hasItem("test_site")));
297301

298-
mockMvc.perform(get("/actuator/metrics/captcha.verify.took.time"))
302+
mockMvc.perform(get("/actuator/metrics/captcha.client.solve.time"))
299303
.andExpect(status().isOk())
300-
.andExpect(jsonPath("$.measurements[?(@.statistic=='COUNT')].value", hasItem((double) i)));
301-
302-
mockMvc.perform(get("/actuator/metrics/captcha.verify.took.time"))
303-
.andExpect(status().isOk())
304-
.andExpect(jsonPath("$.measurements[?(@.statistic=='TOTAL')].value", hasItem((double) i * TEST_PAYLOAD.getTook())));
304+
.andExpect(jsonPath("$.measurements[?(@.statistic=='COUNT')].value", hasItem((double) i)))
305+
.andExpect(jsonPath("$.measurements[?(@.statistic=='TOTAL')].value", hasItem((double) i * TEST_PAYLOAD.getTook())))
306+
.andExpect(jsonPath("$.measurements[?(@.statistic=='MAX')].value", hasItem((double) TEST_PAYLOAD.getTook())))
307+
.andExpect(jsonPath("$.availableTags[?(@.tag=='difficulty')].values[0]", hasItem("1000")))
308+
.andExpect(jsonPath("$.availableTags[?(@.tag=='site_key')].values[0]", hasItem("test_site")));
305309

306310
databaseTestUtil.clearDatabase();
307311
}
@@ -312,8 +316,7 @@ void testVerifyMetricsIncrement() {
312316
@SneakyThrows
313317
void testInvalidatedPayloadsGauge() {
314318
databaseTestUtil.clearDatabase();
315-
captchaService.resetInvalidatedPayloadCount();
316-
final PostVerifyRequest verifyRequest = new PostVerifyRequest(TEST_SITE_KEY, TEST_SITE_SECRET, TEST_PAYLOAD);
319+
final PostVerifyRequest verifyRequest = new PostVerifyRequest(TEST_SITE_KEY, TEST_SITE_SECRET, TEST_CLIENT_ADDRESS, TEST_PAYLOAD);
317320
final String verifyRequestBody = objectMapper.writeValueAsString(verifyRequest);
318321

319322
try (MockedStatic<Altcha> mock = Mockito.mockStatic(Altcha.class)) {
@@ -334,7 +337,7 @@ void testInvalidatedPayloadsGauge() {
334337
.andExpect(jsonPath("$.measurements[0].value", is(1.0)));
335338

336339
// Simulate the expiration of the payload
337-
Thread.sleep(captchaTimeoutSeconds * 1000);
340+
Thread.sleep(captchaProperties.captchaTimeoutSeconds() * 1000);
338341
expiredDataService.deleteExpiredData();
339342

340343
mockMvc.perform(get("/actuator/metrics/captcha.invalidated.payloads"))

0 commit comments

Comments
 (0)