git-subtree-dir: gerenciador git-subtree-mainline:f4f546c928git-subtree-split:34cc9c75a5
59 lines
1.9 KiB
Python
59 lines
1.9 KiB
Python
from app import rate_limit
|
|
|
|
|
|
def _origem_unica() -> str:
|
|
"""Cada teste usa uma chave própria — evita que o dict em memória do
|
|
módulo (compartilhado entre testes) vaze estado de um teste pro outro."""
|
|
import uuid
|
|
|
|
return f"teste-{uuid.uuid4()}"
|
|
|
|
|
|
def test_nao_bloqueado_sem_nenhuma_falha():
|
|
assert rate_limit.bloqueado(_origem_unica()) is False
|
|
|
|
|
|
def test_nao_bloqueado_abaixo_do_limite():
|
|
origem = _origem_unica()
|
|
agora = 1_000_000.0
|
|
for _ in range(rate_limit.MAX_TENTATIVAS - 1):
|
|
rate_limit.registrar_falha(origem, agora=agora)
|
|
assert rate_limit.bloqueado(origem, agora=agora) is False
|
|
|
|
|
|
def test_bloqueado_ao_atingir_o_limite():
|
|
origem = _origem_unica()
|
|
agora = 1_000_000.0
|
|
for _ in range(rate_limit.MAX_TENTATIVAS):
|
|
rate_limit.registrar_falha(origem, agora=agora)
|
|
assert rate_limit.bloqueado(origem, agora=agora) is True
|
|
|
|
|
|
def test_falhas_fora_da_janela_nao_contam():
|
|
origem = _origem_unica()
|
|
agora = 1_000_000.0
|
|
fora_da_janela = agora - rate_limit.JANELA_SEGUNDOS - 1
|
|
for _ in range(rate_limit.MAX_TENTATIVAS):
|
|
rate_limit.registrar_falha(origem, agora=fora_da_janela)
|
|
assert rate_limit.bloqueado(origem, agora=agora) is False
|
|
|
|
|
|
def test_limpar_reseta_o_historico():
|
|
origem = _origem_unica()
|
|
agora = 1_000_000.0
|
|
for _ in range(rate_limit.MAX_TENTATIVAS):
|
|
rate_limit.registrar_falha(origem, agora=agora)
|
|
assert rate_limit.bloqueado(origem, agora=agora) is True
|
|
|
|
rate_limit.limpar(origem)
|
|
assert rate_limit.bloqueado(origem, agora=agora) is False
|
|
|
|
|
|
def test_origens_diferentes_nao_se_afetam():
|
|
origem_a, origem_b = _origem_unica(), _origem_unica()
|
|
agora = 1_000_000.0
|
|
for _ in range(rate_limit.MAX_TENTATIVAS):
|
|
rate_limit.registrar_falha(origem_a, agora=agora)
|
|
assert rate_limit.bloqueado(origem_a, agora=agora) is True
|
|
assert rate_limit.bloqueado(origem_b, agora=agora) is False
|