library(cepis) source(file.path("helper", "utils.R")) with_server( list(route( "/01001000", response(500L, json(list(erro = "interno"))), response(200L, json(SE_ADDRESS)) )), function(client, server) { address <- cep_lookup("01001000", client) check("a 500 is retried and the second attempt wins", identical(address$uf, "SP")) check("it took exactly two attempts", calls(server, "/01001000") == 2L) } ) with_server( list(route("/01001000", response(503L, json(list(erro = "interno"))))), function(client, server) { condition <- check_condition( "a 5xx on every attempt signals cepis_server_error", cep_lookup("01001000", client), "cepis_server_error" ) check("it exposes the status", identical(condition$status, 503L)) check("three attempts is the documented default", calls(server, "/01001000") == 3L) } ) with_server( list(route("/01001000", response(500L, "{}"))), function(client, server) { single <- cepis_client(base_url = server$url, timeout = 5, max_attempts = 1L) check_condition( "max_attempts = 1 disables retrying", cep_lookup("01001000", single), "cepis_server_error" ) check("only one request was made", calls(server, "/01001000") == 1L) } ) with_server( list(route("/01001000", response(429L, "{}", list("Retry-After" = "7")))), function(client, server) { condition <- check_condition( "a 429 signals cepis_rate_limited", cep_lookup("01001000", client), "cepis_rate_limited" ) check("it exposes retry_after in seconds", isTRUE(all.equal(condition$retry_after, 7))) } ) with_server( list(route("/01001000", response(429L, "{}", list("Retry-After" = "3600")))), function(client, server) { started <- proc.time()[["elapsed"]] check_condition( "an absurd Retry-After still signals cepis_rate_limited", cep_lookup("01001000", client), "cepis_rate_limited" ) check( "backoff_max caps it, so a bad proxy cannot park the session", proc.time()[["elapsed"]] - started < 5 ) } ) with_server( list(route( "/01001000", response(429L, "{}", list("Retry-After" = "Wed, 21 Oct 2026 07:28:00 GMT")) )), function(client, server) { condition <- check_condition( "Retry-After as an HTTP date is understood", cep_lookup("01001000", client), "cepis_rate_limited" ) check( "the date became a positive number of seconds", is.numeric(condition$retry_after) && condition$retry_after > 0 ) } ) refused <- cepis_client( base_url = "http://127.0.0.1:1", timeout = 1, max_attempts = 2L, backoff_base = 0.001 ) check_condition( "a refused connection signals cepis_network_error", cep_lookup("01001000", refused), "cepis_network_error" ) with_server( list(route("/01001000", response(500L, "{}"))), function(client, server) { bounded <- cepis_client( base_url = server$url, timeout = 5, max_attempts = 50L, backoff_base = 0.05, backoff_max = 0.05, total_timeout = 0.3 ) started <- proc.time()[["elapsed"]] check_condition( "total_timeout still ends in cepis_server_error", cep_lookup("01001000", bounded), "cepis_server_error" ) check("it bounded the whole call", proc.time()[["elapsed"]] - started < 5) check("it cut the run short of the 50 attempts", calls(server, "/01001000") < 50L) } )