From 8bed91a8dc28c4dc19a9cf2e4409197ca7a54770 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Zubcevic?= Date: Tue, 8 Dec 2020 16:03:36 +0100 Subject: [PATCH] improved threading and logic based on number of calls and number of tests (#910) --- .../webgoat/ProgressRaceConditionTest.java | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) 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)); + } }