As técnicas de TDD buscam garantir que, ao longo de sua evolução, um sistema continue atendendo a todos os seus requisitos e respeitando suas interfaces públicas. Entretanto, ao ser colocado em produção esse sistema vai depender de diversos serviços de infraestrutura, como rede, storage, caching e outros serviços e sistemas remotos. Como assegurar que essas dependências também estão respeitando as especificações originais?
Nesta apresentação, mostramos a importância de realizar testes sobre a infraestrutura, desde os ambientes de desenvolvimento e QA até os ambientes de produção, aplicando os princípios do TDD a toda a cadeia de dependências de um sistema. Vamos também mostrar exemplos práticos com as ferramentas de testes usadas na Globo.com.
6. globo
.com
Configurar um servidor era tarefa manual
Instalar pacotes, editar arquivos
Alguns arquivos foram para um share NFS
/etc, /opt, /usr/local acertados manualmente
Trabalho repetido em vários hosts
ClusterSSH, Capistrano
17. globo
.com
Puppet é funcional
Módulos descrevem o estado desejado
Pense em makefile, não em script
Dependências devem ser explícitas
Use requires e anchors
Desfazer é difícil
Usar ensure => absent fica confuso
Começar do zero é mais fácil
18. globo
.com
Unifique o código do seu projeto
Aplicação + módulos puppet
Versionamento em conjunto
Isole os parâmetros do código
Use defines separados ou hiera
Código legível é código bonito
puppet-lint
19. globo
.com
Separe os ambientes no Foreman
Versões para desenvolvimento, QA, produção
Cuidado com módulos compartilhados
Testes e eterna vigilância
Librarian-puppet pode ajudar
Decida como aplicar as mudanças
Use --onetime ao invés de rodar o agente
como daemon
21. globo
.com
Mudanças acontecem o tempo todo
Em outros lugares
Principalmente em produção
Nem tudo está do jeito desejado
Serviços externos, bases de dados,
servidores de arquivos, ACLs, etc
Precisamos de testes de aceitação
22. globo
.com
Nossa solução: TDI
Ferramenta para rodar testes sobre a infra
DNS, filesystem, HTTP, etc
Prática de TDD
Escreva o teste, rode, corrija os erros
Plano de teste num arquivo JSON
Pode ser gerado no build da aplicação
Ajustado ao papel de cada host
Torna-se teste de aceitação da infraestrutura
23. globo
.com
TDI
Ruby – gem install tdi
Open source (github)
Beta
Curta e compatilhe
Pull requests são bem-vindos