Adding Kafka docker container and utilizing it in unit tests

This commit is contained in:
Cameron Sparr 2015-08-04 08:58:32 -06:00
parent 6b820d91ae
commit fdd2401f7b
5 changed files with 40 additions and 17 deletions

View File

@ -2,9 +2,12 @@ prepare:
go get -d -v -t ./... go get -d -v -t ./...
docker-compose up -d --no-recreate docker-compose up -d --no-recreate
test: prepare test-short: prepare
go test -short ./... go test -short ./...
test: prepare
go test ./...
update: update:
go get -u -v -d -t ./... go get -u -v -d -t ./...

View File

@ -185,10 +185,26 @@ As Telegraf collects metrics from several third-party services it becomes a diff
some of them have complicated protocols which would take some time to replicate. some of them have complicated protocols which would take some time to replicate.
To overcome this situation we've decided to use docker containers to provide a fast and reproducible environment To overcome this situation we've decided to use docker containers to provide a fast and reproducible environment
to test those services which require it. For other situations (i.e: https://github.com/influxdb/telegraf/blob/master/plugins/redis/redis_test.go ) a simple mock will suffice. to test those services which require it. For other situations (i.e: https://github.com/influxdb/telegraf/blob/master/plugins/redis/redis_test.go ) a simple mock will suffice.
To execute Telegraf tests follow this simple steps: To execute Telegraf tests follow these simple steps:
- Install docker compose following [these](https://docs.docker.com/compose/install/) instructions - Install docker compose following [these](https://docs.docker.com/compose/install/) instructions
- execute `make test` - NOTE: mac users should be able to simply do `brew install boot2docker` and `brew install docker-compose`
### Execute short tests:
execute `make short-test`
### Execute long tests:
These tests requre additional docker containers, such as for kafka
Mac:
execute ``ADVERTISED_HOST=`boot2docker ip` make test``
Linux:
execute `ADVERTISED_HOST=localhost make test`
### Unit test troubleshooting:
Try killing your docker containers via `docker-compose kill` and then re-running

View File

@ -11,9 +11,13 @@ test:
- go vet ./... - go vet ./...
# Verify that all files are properly go formatted # Verify that all files are properly go formatted
- "[ `git ls-files | grep '.go$' | xargs gofmt -l 2>&1 | wc -l` -eq 0 ]" - "[ `git ls-files | grep '.go$' | xargs gofmt -l 2>&1 | wc -l` -eq 0 ]"
# Only docker-compose up kafka, the other services are already running
# see: https://circleci.com/docs/environment#databases
# - docker-compose up -d kafka
override: override:
# Enforce that testutil, cmd, and main directory are fully linted # Enforce that testutil, cmd, and main directory are fully linted
- golint . - golint .
- golint testutil/... - golint testutil/...
- golint cmd/... - golint cmd/...
# TODO run unit tests # TODO run unit tests
# - go test -short ./...

View File

@ -14,3 +14,14 @@ postgres:
image: postgres image: postgres
ports: ports:
- "5432:5432" - "5432:5432"
# advertised host env variable must be set at runtime, ie,
# ADVERTISED_HOST=`boot2docker ip` docker-compose up -d
kafka:
image: spotify/kafka
ports:
- "2181:2181"
- "9092:9092"
environment:
ADVERTISED_HOST:
ADVERTISED_PORT: 9092

View File

@ -2,8 +2,6 @@ package kafka_consumer
import ( import (
"fmt" "fmt"
"os"
"strings"
"testing" "testing"
"time" "time"
@ -19,17 +17,8 @@ func TestReadsMetricsFromKafka(t *testing.T) {
} }
var zkPeers, brokerPeers []string var zkPeers, brokerPeers []string
if len(os.Getenv("ZOOKEEPER_PEERS")) == 0 { zkPeers = []string{testutil.GetLocalHost() + ":2181"}
zkPeers = []string{"localhost:2181"} brokerPeers = []string{testutil.GetLocalHost() + ":9092"}
} else {
zkPeers = strings.Split(os.Getenv("ZOOKEEPER_PEERS"), ",")
}
if len(os.Getenv("KAFKA_PEERS")) == 0 {
brokerPeers = []string{"localhost:9092"}
} else {
brokerPeers = strings.Split(os.Getenv("KAFKA_PEERS"), ",")
}
k := &Kafka{ k := &Kafka{
ConsumerGroupName: "telegraf_test_consumers", ConsumerGroupName: "telegraf_test_consumers",