improved threading and logic based on number of calls and number of tests (#910)
This commit is contained in:
parent
e78420fa8e
commit
8bed91a8dc
@ -2,6 +2,8 @@ package org.owasp.webgoat;
|
|||||||
|
|
||||||
import io.restassured.RestAssured;
|
import io.restassured.RestAssured;
|
||||||
import io.restassured.response.Response;
|
import io.restassured.response.Response;
|
||||||
|
import lombok.extern.log4j.Log4j;
|
||||||
|
|
||||||
import org.assertj.core.api.Assertions;
|
import org.assertj.core.api.Assertions;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
@ -18,26 +20,37 @@ public class ProgressRaceConditionTest extends IntegrationTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void runTests() throws InterruptedException {
|
public void runTests() throws InterruptedException {
|
||||||
|
int NUMBER_OF_CALLS = 40;
|
||||||
|
int NUMBER_OF_PARALLEL_THREADS = 5;
|
||||||
startLesson("Challenge1");
|
startLesson("Challenge1");
|
||||||
|
|
||||||
Callable<Response> call = () ->
|
Callable<Response> call = () -> {
|
||||||
RestAssured.given()
|
//System.out.println("thread "+Thread.currentThread().getName());
|
||||||
|
return RestAssured.given()
|
||||||
.when()
|
.when()
|
||||||
.relaxedHTTPSValidation()
|
.relaxedHTTPSValidation()
|
||||||
.cookie("JSESSIONID", getWebGoatCookie())
|
.cookie("JSESSIONID", getWebGoatCookie())
|
||||||
.formParams(Map.of("flag", "test"))
|
.formParams(Map.of("flag", "test"))
|
||||||
.post(url("/challenge/flag/"));
|
.post(url("/challenge/flag/"));
|
||||||
ExecutorService executorService = Executors.newFixedThreadPool(20);
|
|
||||||
List<? extends Callable<Response>> flagCalls = IntStream.range(0, 20).mapToObj(i -> call).collect(Collectors.toList());
|
};
|
||||||
|
ExecutorService executorService = Executors.newWorkStealingPool(NUMBER_OF_PARALLEL_THREADS);
|
||||||
|
List<? extends Callable<Response>> flagCalls = IntStream.range(0, NUMBER_OF_CALLS).mapToObj(i -> call).collect(Collectors.toList());
|
||||||
var responses = executorService.invokeAll(flagCalls);
|
var responses = executorService.invokeAll(flagCalls);
|
||||||
|
|
||||||
//A certain amount of parallel calls should fail as optimistic locking in DB is applied
|
//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 {
|
try {
|
||||||
return r.get().getStatusCode() == 500;
|
//System.err.println(r.get().getStatusCode());
|
||||||
|
return r.get().getStatusCode() != 200;
|
||||||
} catch (InterruptedException | ExecutionException e) {
|
} catch (InterruptedException | ExecutionException e) {
|
||||||
|
//System.err.println(e);
|
||||||
throw new IllegalStateException(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));
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user