Testando o código
Essa é uma daquelas gambiarras que salva nossa pele de vez em quando. Eu precisava rodar um código com um ambiente muito especifico e a única forma de montar o ambiente desse código com todas as peculiaridades dele é criar um containers docker, dessa forma consigo dizer exatamente a versão do que esta instalado e ter certeza que o ambiente esta perfeito. Mas daí eu precisava rodar os testes que são executados pelo Travis-CI e claro que não conseguia montar o ambiente idêntico ao do container no Travis. A solução foi rodar os testes dentro do container via docker run
e pegar o errorlevel no retorno.
Exemplo de como rodar os testes dentro de um container:
Primeiro criei um Dockerfile
para gerar a imagem contendo o ambiente que quero testar.
FROM golang:stretch
# RUN apt update -y && apt install -y "some library heavily dependent of the Linux version, like libmagick++-dev"
RUN mkdir -p /go/src/github.com/crgimenes/tgwd
COPY ./ /go/src/github.com/crgimenes/tgwd
WORKDIR /go/src/github.com/crgimenes/tgwd
RUN go build
CMD ["./tgwd"]
Daí criei a imagem normalmente com o docker build
docker build -t tgwd .
E para testar localmente é só usar docker run
como no exemplo:
docker run tgwd bash -c "go test ./..."
Para testar no Travis preparei um arquivo de configuração .travis.yml
como este exemplo:
sudo: false
dist: xenial
language: go
services:
- docker
os:
- linux
go:
- "1.11"
before_install:
- docker build -t tgwd .
script:
- docker run tgwd bash -c "go test ./..."
Claro que o ambiente go aqui nem era mesmo necessário porque tudo esta dentro da imagem e.o travis na verdade esta testando o código rodando lá dentro, mas eu já deixei assim por pura força do habito.
Eu não gosto muito de rodar tudo em container mas tenho que admitir que é bem interessante quando o ambiente que o sistema precisa é muito alienígena.