summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMateus Cruz <mateuscolvr@gmail.com>2024-02-11 16:44:31 -0300
committerMateus Cruz <mateuscolvr@gmail.com>2024-02-11 16:44:31 -0300
commit6a0c2449e4c4d22cf18e508bd1f13088a3314ca7 (patch)
tree8a54e7c4c3f56b5fcdb88081bd352cbdb99b0f4a
parent088cbd66cffc4b33dfd3ec51fe43e0b487ac6276 (diff)
test: concurrency test
-rw-r--r--lib/handler.ml6
-rw-r--r--load-test/user-files/simulations/rinhabackend/RinhaBackendCrebitosSimulation.scala53
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)