- Comportamento: Se não há mapeamento de schema definido para um tópico, a mensagem é rejeitada
- Aplicação:
- Producer: Retorna
nil
quando não há mapeamento - Consumer: Filtra mensagens que não têm mapeamento
- Configuração: Tanto para
{:schemas true}
quanto para {:schemas {"topic" :schema}}
- Problema Resolvido: Producer tentava enviar mapas diretamente para Kafka com StringSerializer
- Solução: Auto-conversão de mapas para JSON quando value-serializer é StringSerializer
- Validação: Schema validation ocorre antes da serialização (com dados originais)
- Problema Resolvido: Consumer tentava validar strings JSON diretamente contra schemas
- Solução: Auto-parsing de JSON para mapas antes da validação quando value-deserializer é StringDeserializer
- Comportamento: Se parsing JSON falha, usa valor original
- Localização:
test/kafka_metamorphosis/integration_test.clj
- Pré-requisito: Kafka rodando em
localhost:9092
- Cobertura: 6 testes abrangendo diferentes cenários
-
test-producer-consumer-basic-flow
- Fluxo básico sem validação de schema
- Envia 5 mensagens e consome todas
-
test-schema-validation-auto-mode
- Validação automática com
{:schemas true}
- Testa mensagens válidas, inválidas e tópicos sem schema
-
test-schema-validation-mapping-mode
- Validação com mapeamento por tópico
- Testa rejeição de tópicos não mapeados
-
test-producer-consumer-with-multiple-schemas
- Fluxo com múltiplas versões de schema
- Usa schema
user-profile
com campos obrigatórios
-
test-async-producer-with-validation
- Producer assíncrono com validação
- Testa callbacks e comportamento de rejeição
-
test-consumer-filter-invalid-messages
- Consumer filtrando mensagens inválidas
- Envia mistura de dados válidos/inválidos, consome apenas válidos
kafka-available?
: Verifica se Kafka está disponívelskip-if-kafka-unavailable
: Pula teste se Kafka indisponíveldeftest-integration
: Macro para testes condicionaissetup-test-environment!
: Configura tópicos e schemas de testecleanup-test-environment!
: Remove recursos de teste
lein test
# Inicie o Kafka primeiro
lein test kafka-metamorphosis.integration-test
(require '[kafka-metamorphosis.integration-test :refer [kafka-available?]])
(kafka-available?) ; => true/false
- ✅ Sem schema: Mensagem rejeitada
- ✅ Sem mapeamento: Mensagem rejeitada
- ✅ Schema inválido: Mensagem rejeitada
- ✅ Dados inválidos: Mensagem rejeitada
- ✅ Producer: Mapa → JSON string (quando StringSerializer)
- ✅ Consumer: JSON string → Mapa (quando StringDeserializer)
- ✅ Validação: Sempre com dados originais (mapas)
- ✅ Warnings detalhados para cada tipo de rejeição
- ✅ Códigos de retorno claros (
nil
= rejeitado) - ✅ Mensagens específicas por tipo de erro
- 46 testes unitários: ✅ Todos passando
- 6 testes de integração: ✅ Todos passando
- Funcionalidade completa: ✅ Implementada
- Documentação: ✅ Atualizada
- Exemplos: ✅ Funcionando
A implementação está completa e robusta, com validação estrita de schemas, rejeição de mapeamentos ausentes, e testes abrangentes que cobrem todos os cenários de uso! 🎉