diff options
author | Mateus Cruz <mateuscolvr@gmail.com> | 2024-02-11 16:44:31 -0300 |
---|---|---|
committer | Mateus Cruz <mateuscolvr@gmail.com> | 2024-02-11 16:44:31 -0300 |
commit | 6a0c2449e4c4d22cf18e508bd1f13088a3314ca7 (patch) | |
tree | 8a54e7c4c3f56b5fcdb88081bd352cbdb99b0f4a | |
parent | 088cbd66cffc4b33dfd3ec51fe43e0b487ac6276 (diff) |
test: concurrency test
-rw-r--r-- | lib/handler.ml | 6 | ||||
-rw-r--r-- | load-test/user-files/simulations/rinhabackend/RinhaBackendCrebitosSimulation.scala | 53 |
2 files changed, 46 insertions, 13 deletions
diff --git a/lib/handler.ml b/lib/handler.ml index fb43239..c1ba53d 100644 --- a/lib/handler.ml +++ b/lib/handler.ml @@ -44,6 +44,12 @@ let create_transaction client_id (db_pool : pool) (request : Request.t) = in (match insert_result with | Ok () -> + let client = + Option.get + @@ Option.join + @@ Result.to_option + @@ Query.find_client client_id conn + in let json : Yojson.Safe.t = `Assoc [ "limite", `Int client.mov_limit; "saldo", `Int client.balance ] in diff --git a/load-test/user-files/simulations/rinhabackend/RinhaBackendCrebitosSimulation.scala b/load-test/user-files/simulations/rinhabackend/RinhaBackendCrebitosSimulation.scala index 1ad31cb..b6e0ace 100644 --- a/load-test/user-files/simulations/rinhabackend/RinhaBackendCrebitosSimulation.scala +++ b/load-test/user-files/simulations/rinhabackend/RinhaBackendCrebitosSimulation.scala @@ -111,6 +111,25 @@ class RinhaBackendCrebitosSimulation ) ) + val validacaDebitosConcorrentesNumRequests = 25 + val validacaDebitosConcorrentesTransacaoes = scenario("validação concorrência transações") + .exec( + http("validações concorrência") + .post("/clientes/4/transacoes") + .header("content-type", "application/json") + .body(StringBody("""{"valor": 1, "tipo": "d", "descricao": "validacao"}""")) + .check(status.is(200)) + ) + + val validacaDebitosConcorrentesExtrato = scenario("validação concorrência extrato") + .exec( + http("validações concorrência") + .get("/clientes/4/extrato") + .check( + jmesPath("saldo.total").ofType[Int].is(validacaDebitosConcorrentesNumRequests * -1) + ) + ) + val saldosIniciaisClientes = Array( Map("id" -> 1, "limite" -> 1000 * 100), Map("id" -> 2, "limite" -> 800 * 100), @@ -217,20 +236,28 @@ class RinhaBackendCrebitosSimulation comportam individualmente. */ setUp( - criteriosClientes.inject( - atOnceUsers(1) + validacaDebitosConcorrentesTransacaoes.inject( + atOnceUsers(validacaDebitosConcorrentesNumRequests) + ).andThen( + validacaDebitosConcorrentesExtrato.inject( + atOnceUsers(1) + ) ).andThen( - debitos.inject( - rampUsersPerSec(1).to(220).during(2.minutes), - constantUsersPerSec(220).during(2.minutes) - ), - creditos.inject( - rampUsersPerSec(1).to(110).during(2.minutes), - constantUsersPerSec(110).during(2.minutes) - ), - extratos.inject( - rampUsersPerSec(1).to(10).during(2.minutes), - constantUsersPerSec(10).during(2.minutes) + criteriosClientes.inject( + atOnceUsers(1) + ).andThen( + debitos.inject( + rampUsersPerSec(1).to(220).during(2.minutes), + constantUsersPerSec(220).during(2.minutes) + ), + creditos.inject( + rampUsersPerSec(1).to(110).during(2.minutes), + constantUsersPerSec(110).during(2.minutes) + ), + extratos.inject( + rampUsersPerSec(1).to(10).during(2.minutes), + constantUsersPerSec(10).during(2.minutes) + ) ) ) ).protocols(httpProtocol) |