diff --git a/webgoat-integration-tests/src/test/java/org/owasp/webgoat/ProgressRaceConditionTest.java b/webgoat-integration-tests/src/test/java/org/owasp/webgoat/ProgressRaceConditionTest.java index 982bb564c..5cbb94a4f 100644 --- a/webgoat-integration-tests/src/test/java/org/owasp/webgoat/ProgressRaceConditionTest.java +++ b/webgoat-integration-tests/src/test/java/org/owasp/webgoat/ProgressRaceConditionTest.java @@ -2,6 +2,8 @@ package org.owasp.webgoat; import io.restassured.RestAssured; import io.restassured.response.Response; +import lombok.extern.log4j.Log4j; + import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; @@ -18,26 +20,37 @@ public class ProgressRaceConditionTest extends IntegrationTest { @Test public void runTests() throws InterruptedException { + int NUMBER_OF_CALLS = 40; + int NUMBER_OF_PARALLEL_THREADS = 5; startLesson("Challenge1"); - Callable call = () -> - RestAssured.given() + Callable call = () -> { + //System.out.println("thread "+Thread.currentThread().getName()); + return RestAssured.given() .when() .relaxedHTTPSValidation() .cookie("JSESSIONID", getWebGoatCookie()) .formParams(Map.of("flag", "test")) .post(url("/challenge/flag/")); - ExecutorService executorService = Executors.newFixedThreadPool(20); - List> flagCalls = IntStream.range(0, 20).mapToObj(i -> call).collect(Collectors.toList()); + + }; + ExecutorService executorService = Executors.newWorkStealingPool(NUMBER_OF_PARALLEL_THREADS); + List> flagCalls = IntStream.range(0, NUMBER_OF_CALLS).mapToObj(i -> call).collect(Collectors.toList()); var responses = executorService.invokeAll(flagCalls); //A certain amount of parallel calls should fail as optimistic locking in DB is applied - Assertions.assertThat(responses.stream().filter(r -> { + long countStatusCode500 = responses.stream().filter(r -> { try { - return r.get().getStatusCode() == 500; + //System.err.println(r.get().getStatusCode()); + return r.get().getStatusCode() != 200; } catch (InterruptedException | ExecutionException e) { + //System.err.println(e); throw new IllegalStateException(e); } - }).count()).isGreaterThan(8); + }).count(); + System.out.println("counted status 500: "+countStatusCode500); + Assertions.assertThat(countStatusCode500).isLessThanOrEqualTo((NUMBER_OF_CALLS - (NUMBER_OF_CALLS/NUMBER_OF_PARALLEL_THREADS))); + Assertions.assertThat(countStatusCode500).isGreaterThan((NUMBER_OF_CALLS/NUMBER_OF_PARALLEL_THREADS)); + } }