Este desafio dá continuidade ao "Job de Auditoria de Alta Performance" do módulo de Concorrência e Paralelismo, ensinando a criar testes automatizados em Go para o sistema de auditoria de logs, focando em testes unitários, validação de thread-safety com goroutines e table-driven tests para garantir que race conditions não voltem a corromper os dados em produção.
Estrutura, regras e requisitos do projeto
Dando continuidade ao desafio proposto no módulo de Concorrência e Paralelismo (Acelerando o Job de Auditoria). Ainda em um ambiente hipotético:
O código do "Job de Auditoria de Alta Performance" foi aprovado no code review e "mergeado" para a main. A gerência está satisfeita com a performance.
No entanto, um novo engenheiro júnior tentou fazer uma "pequena otimização" no ProcessPipeline e reintroduziu uma race condition sutil que corrompeu os relatórios por um dia inteiro. O bug não foi pego porque não havia uma suíte de testes automatizada.
Sua missão é garantir que isso nunca mais aconteça. Você deve construir uma suíte de testes robusta que valide a corretude, a segurança de concorrência e a performance do nosso processador de logs.
Este desafio é sobre criar uma rede de segurança. Ao final, você deve ter provado que domina:
Crie um arquivo main_test.go no mesmo pacote. Você usará o pacote testing nativo do Go.
Alvo: A lógica interna do Report.
NewReport().TotalEvents, TotalErrors) e os mapas (EventsByType, EventsByRegion) contêm os valores exatos esperados.t.Errorf() ou t.Fatalf() se o resultado estiver incorreto.AddEventSafe e AddErrorSafe são, de fato, thread-safe.NewReport().sync.WaitGroup e dispare 1000 goroutines simultaneamente.report.AddEventSafe(event) e report.AddErrorSafe() algumas vezes.Alvo: A lógica de parsing e processamento de linhas.
Dando continuidade ao desafio proposto no módulo de Concorrência e Paralelismo (Acelerando o Job de Auditoria). Ainda em um ambiente hipotético:
O código do "Job de Auditoria de Alta Performance" foi aprovado no code review e "mergeado" para a main. A gerência está satisfeita com a performance.
No entanto, um novo engenheiro júnior tentou fazer uma "pequena otimização" no ProcessPipeline e reintroduziu uma race condition sutil que corrompeu os relatórios por um dia inteiro. O bug não foi pego porque não havia uma suíte de testes automatizada.
Sua missão é garantir que isso nunca mais aconteça. Você deve construir uma suíte de testes robusta que valide a corretude, a segurança de concorrência e a performance do nosso processador de logs.
Este desafio é sobre criar uma rede de segurança. Ao final, você deve ter provado que domina:
Crie um arquivo main_test.go no mesmo pacote. Você usará o pacote testing nativo do Go.
Alvo: A lógica interna do Report.
NewReport().TotalEvents, TotalErrors) e os mapas (EventsByType, EventsByRegion) contêm os valores exatos esperados.t.Errorf() ou t.Fatalf() se o resultado estiver incorreto.AddEventSafe e AddErrorSafe são, de fato, thread-safe.NewReport().sync.WaitGroup e dispare 1000 goroutines simultaneamente.report.AddEventSafe(event) e report.AddErrorSafe() algumas vezes.Alvo: A lógica de parsing e processamento de linhas.
Use este checklist para ajudar a organizar a sua entrega