No contexto do desenvolvimento de software a resiliência é um requisito que sempre deve ser considerado.
Resiliência, como propriedade da física, implica é a propriedade que alguns corpos apresentam de retornar à forma original após terem sido submetidos a uma deformação elástica. Informalmente, é a capacidade de se recobrar facilmente ou se adaptar à má sorte ou às mudanças.
Há várias formas desta característica estar presente em um software, mas não vamos falar disto hoje. Pelo contrário, vamos falar como testar como seu sistema se comporta quando coisas que não são esperadas acontecem.
Frequentemente testamos nossa integrações em uma ambiente que não tem alta carga e as dependências dificilmente falham. Com isto precisamos verificar como o sistema se comporta quando recebe uma resposta diferente da esperada, mais lenta ou simplesmente não responde.
Para tratar destes assuntos foi criado a Engenharia do Caos (Chaos Engineering), uma disciplina da engenharia de software para validar o comportamento em ambientes caóticos.
Neste post vamos falar sobre como funciona e como foi implementado estas anomalias dentro de um mock.
Partimos de um projeto chamado Mockaco que é um mock desenvolvido em C#.
Adicionei um middleware entre a request e a response, chamado ChaosMiddleware, nele controlo se está ativo o chaos e se na chamada vai executar alguma estratégia, retornando um resultado aleatório para o cliente.
Comportamentos adicionados:
- Behavior: Retorna HTTP Error 503 (Service Unavailable)
- Exception: Retorna HTTP Error 500 (Internal Server Erro)
- Latency: Randomicamente adiciona delay a chamada
- Result: Retorna HTTP Error 400 (Bad Request)
- Timeout: Aguarda um tempo e retorna HTTP Error 408 (Request Timeout)