Skip to content

Commit

Permalink
melhores validações de concorrência
Browse files Browse the repository at this point in the history
  • Loading branch information
zanfranceschi committed Feb 11, 2024
1 parent 72d1395 commit d005520
Showing 1 changed file with 41 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -111,24 +111,26 @@ class RinhaBackendCrebitosSimulation
)
)

val validacaDebitosConcorrentesNumRequests = 25
val validacaDebitosConcorrentesTransacaoes = scenario("validação concorrência transações")
val validacaConcorrentesNumRequests = 25
val validacaoTransacoesConcorrentes = (tipo: String) =>
scenario(s"validação concorrência transações - ${tipo}")
.exec(
http("validações concorrência")
.post("/clientes/4/transacoes")
http("validações")
.post(s"/clientes/1/transacoes")
.header("content-type", "application/json")
.body(StringBody("""{"valor": 1, "tipo": "d", "descricao": "validacao"}"""))
.body(StringBody(s"""{"valor": 1, "tipo": "${tipo}", "descricao": "validacao"}"""))
.check(status.is(200))
)

val validacaDebitosConcorrentesExtrato = scenario("validação concorrência extrato")
val validacaoTransacoesConcorrentesSaldo = (saldoEsperado: Int) =>
scenario(s"validação concorrência saldo - ${saldoEsperado}")
.exec(
http("validações concorrência")
.get("/clientes/4/extrato")
http("validações")
.get(s"/clientes/1/extrato")
.check(
jmesPath("saldo.total").ofType[Int].is(validacaDebitosConcorrentesNumRequests * -1)
jmesPath("saldo.total").ofType[Int].is(saldoEsperado)
)
)
)

val saldosIniciaisClientes = Array(
Map("id" -> 1, "limite" -> 1000 * 100),
Expand All @@ -138,6 +140,13 @@ class RinhaBackendCrebitosSimulation
Map("id" -> 5, "limite" -> 5000 * 100),
)

val criterioClienteNaoEcontrado = scenario("validação HTTP 404")
.exec(
http("validações")
.get("/clientes/6/extrato")
.check(status.is(404))
)

val criteriosClientes = scenario("validações")
.feed(saldosIniciaisClientes)
.exec(
Expand All @@ -157,12 +166,7 @@ class RinhaBackendCrebitosSimulation
)
.exec(
http("validações")
.get("/clientes/6/extrato")
.check(status.is(404))
)
.exec(
http("validações")
.post("/clientes/1/transacoes")
.post("/clientes/#{id}/transacoes")
.header("content-type", "application/json")
.body(StringBody(s"""{"valor": 1, "tipo": "c", "descricao": "toma"}"""))
.check(
Expand All @@ -173,7 +177,7 @@ class RinhaBackendCrebitosSimulation
)
.exec(
http("validações")
.post("/clientes/1/transacoes")
.post("/clientes/#{id}/transacoes")
.header("content-type", "application/json")
.body(StringBody(s"""{"valor": 1, "tipo": "d", "descricao": "devolve"}"""))
.check(
Expand All @@ -184,7 +188,7 @@ class RinhaBackendCrebitosSimulation
)
.exec(
http("validações")
.get("/clientes/1/extrato")
.get("/clientes/#{id}/extrato")
.check(
jmesPath("ultimas_transacoes[0].descricao").ofType[String].is("devolve"),
jmesPath("ultimas_transacoes[0].tipo").ofType[String].is("d"),
Expand All @@ -196,35 +200,35 @@ class RinhaBackendCrebitosSimulation
)
.exec(
http("validações")
.post("/clientes/1/transacoes")
.post("/clientes/#{id}/transacoes")
.header("content-type", "application/json")
.body(StringBody(s"""{"valor": 1.2, "tipo": "d", "descricao": "devolve"}"""))
.check(status.in(422))
)
.exec(
http("validações")
.post("/clientes/1/transacoes")
.post("/clientes/#{id}/transacoes")
.header("content-type", "application/json")
.body(StringBody(s"""{"valor": 1, "tipo": "x", "descricao": "devolve"}"""))
.check(status.in(422))
)
.exec(
http("validações")
.post("/clientes/1/transacoes")
.post("/clientes/#{id}/transacoes")
.header("content-type", "application/json")
.body(StringBody(s"""{"valor": 1, "tipo": "c", "descricao": "123456789 e mais um pouco"}"""))
.check(status.in(422))
)
.exec(
http("validações")
.post("/clientes/1/transacoes")
.post("/clientes/#{id}/transacoes")
.header("content-type", "application/json")
.body(StringBody(s"""{"valor": 1, "tipo": "c", "descricao": ""}"""))
.check(status.in(422))
)
.exec(
http("validações")
.post("/clientes/1/transacoes")
.post("/clientes/#{id}/transacoes")
.header("content-type", "application/json")
.body(StringBody(s"""{"valor": 1, "tipo": "c", "descricao": null}"""))
.check(status.in(422))
Expand All @@ -236,14 +240,25 @@ class RinhaBackendCrebitosSimulation
comportam individualmente.
*/
setUp(
validacaDebitosConcorrentesTransacaoes.inject(
atOnceUsers(validacaDebitosConcorrentesNumRequests)
validacaoTransacoesConcorrentes("d").inject(
atOnceUsers(validacaConcorrentesNumRequests)
).andThen(
validacaDebitosConcorrentesExtrato.inject(
validacaoTransacoesConcorrentesSaldo(validacaConcorrentesNumRequests * -1).inject(
atOnceUsers(1)
)
).andThen(
validacaoTransacoesConcorrentes("c").inject(
atOnceUsers(validacaConcorrentesNumRequests)
).andThen(
validacaoTransacoesConcorrentesSaldo(0).inject(
atOnceUsers(1)
)
)
).andThen(
criteriosClientes.inject(
atOnceUsers(saldosIniciaisClientes.length)
),
criterioClienteNaoEcontrado.inject(
atOnceUsers(1)
).andThen(
debitos.inject(
Expand Down

0 comments on commit d005520

Please sign in to comment.