Repository navigation
Correções
- Corrige a propagação de
ExceptioneEHorseExceptionnos roteadores Tree e Radix: middlewares que envolvemNextpodem capturar e personalizar os erros das rotas e dos callbacks internos. (#616) - Aplica o tratamento padrão do core somente após a exceção escapar da cadeia: mantém JSON/status de
EHorseException,OnErrorpara outras exceções e o fallback 500 quando ainda não existe resposta de erro. - Preserva o controle de fluxo de
EHorseCallbackInterrupted, respostas de erro existentes e o envio dos cookies no fallback do Radix.
Proteção contra regressões
- Adiciona 36 casos DUnitX (18 por roteador) e 34 casos procedurais FPC (17 por roteador).
- Cobre os dois tipos de exceção, callbacks posteriores, middlewares internos, prioridade do middleware sobre
OnError, relançamento, fallback, JSON/status/Content-Type, interrupções e cookies (DUnitX). - O teste FPC reproduziu 18 falhas na versão anterior; com a correção, os 34 casos passam nas configurações padrão e Epoll, sem blocos de memória não liberados.
- Integra as regressões FPC ao GitHub Actions. O job Linux utiliza as suítes portáveis de FPC; a suíte Delphi/DUnitX é executada localmente com Delphi.
Validação
-
Delphi 10 Seattle e Delphi 13 Florence, Tree/Radix: 95 testes por combinação, sem falhas ou erros.
-
Na versão preparada 3.3.14: Delphi 13 Tree/Radix, 95 testes por configuração; FPC 3.2.2/Linux x86_64, 34 testes por configuração (padrão/Epoll), sem vazamentos detectados pelo
heaptrc. -
HORSE_VERSIONeTHorse.Versionconferidos como 3.3.14 no Delphi 10, Delphi 13 e FPC 3.2.2. -
As regressões FPC de propagação exercitam os roteadores diretamente; os testes de API HTTP e lifecycle hooks foram executados em Delphi.
-
GitHub Actions: os jobs
testefpc-trunk-keepalivepassaram tanto na PR da correção (#616) quanto na PR da versão (#617). Validação da versão: https://github.com/HashLoad/horse/actions/runs/38494183471.
Comportamento esperado
Um middleware que trata exceções pode agora definir sua própria resposta tanto para EHorseException quanto para Exception. Se nenhum middleware tratar o erro, ou se ele for relançado, o core aplica seu fallback. Aplicações que antes dependiam de o core interceptar o erro antes do middleware observarão essa correção de comportamento.
Comparação: 3.3.13...3.3.14