Skip to content

Commit

Permalink
Merge pull request #49 from marcosnils/container_services
Browse files Browse the repository at this point in the history
Container services
  • Loading branch information
toddboom committed Jul 30, 2015
2 parents 6eb4bdc + ef335d9 commit a4d0c47
Show file tree
Hide file tree
Showing 10 changed files with 95 additions and 10 deletions.
11 changes: 11 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
prepare:
go get -d -v -t ./...
docker-compose up -d --no-recreate

test: prepare
go test -short ./...

update:
go get -u -v -d -t ./...

.PHONY: test
13 changes: 13 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -179,3 +179,16 @@ func init() {
}
```

## Testing

As Telegraf collects metrics from several third-party services it becomes a difficult task to mock each service as
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 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:

- Install docker compose following [these](https://docs.docker.com/compose/install/) instructions
- execute `make test`

16 changes: 16 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
mysql:
image: mysql
ports:
- "3306:3306"
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: yes

memcached:
image: memcached
ports:
- "11211:11211"

postgres:
image: postgres
ports:
- "5432:5432"
3 changes: 3 additions & 0 deletions plugins/kafka_consumer/kafka_consumer_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ import (
)

func TestReadsMetricsFromKafka(t *testing.T) {
if testing.Short() {
t.Skip("Skipping integration test in short mode")
}
var zkPeers, brokerPeers []string

if len(os.Getenv("ZOOKEEPER_PEERS")) == 0 {
Expand Down
2 changes: 1 addition & 1 deletion plugins/memcached/memcached_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (

func TestMemcachedGeneratesMetrics(t *testing.T) {
m := &Memcached{
Servers: []string{"localhost"},
Servers: []string{testutil.GetLocalHost()},
}

var acc testutil.Accumulator
Expand Down
7 changes: 5 additions & 2 deletions plugins/mysql/mysql_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package mysql

import (
"fmt"
"strings"
"testing"

Expand All @@ -11,7 +12,7 @@ import (

func TestMysqlGeneratesMetrics(t *testing.T) {
m := &Mysql{
Servers: []string{""},
Servers: []string{fmt.Sprintf("root@tcp(%s:3306)/", testutil.GetLocalHost())},
}

var acc testutil.Accumulator
Expand Down Expand Up @@ -53,7 +54,9 @@ func TestMysqlGeneratesMetrics(t *testing.T) {
}

func TestMysqlDefaultsToLocal(t *testing.T) {
m := &Mysql{}
m := &Mysql{
Servers: []string{fmt.Sprintf("root@tcp(%s:3306)/", testutil.GetLocalHost())},
}

var acc testutil.Accumulator

Expand Down
7 changes: 4 additions & 3 deletions plugins/postgresql/postgresql_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package postgresql

import (
"fmt"
"testing"

"github.com/influxdb/telegraf/testutil"
Expand All @@ -12,7 +13,7 @@ func TestPostgresqlGeneratesMetrics(t *testing.T) {
p := &Postgresql{
Servers: []*Server{
{
Address: "sslmode=disable",
Address: fmt.Sprintf("host=%s user=postgres sslmode=disable", testutil.GetLocalHost()),
Databases: []string{"postgres"},
},
},
Expand Down Expand Up @@ -57,7 +58,7 @@ func TestPostgresqlTagsMetricsWithDatabaseName(t *testing.T) {
p := &Postgresql{
Servers: []*Server{
{
Address: "sslmode=disable",
Address: fmt.Sprintf("host=%s user=postgres sslmode=disable", testutil.GetLocalHost()),
Databases: []string{"postgres"},
},
},
Expand All @@ -78,7 +79,7 @@ func TestPostgresqlDefaultsToAllDatabases(t *testing.T) {
p := &Postgresql{
Servers: []*Server{
{
Address: "sslmode=disable",
Address: fmt.Sprintf("host=%s user=postgres sslmode=disable", testutil.GetLocalHost()),
},
},
}
Expand Down
8 changes: 4 additions & 4 deletions plugins/redis/redis_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ func TestRedisGeneratesMetrics(t *testing.T) {
}

for _, c := range checkInt {
assert.NoError(t, acc.ValidateValue(c.name, c.value))
assert.True(t, acc.CheckValue(c.name, c.value))
}

checkFloat := []struct {
Expand All @@ -98,7 +98,7 @@ func TestRedisGeneratesMetrics(t *testing.T) {
}

for _, c := range checkFloat {
assert.NoError(t, acc.ValidateValue(c.name, c.value))
assert.True(t, acc.CheckValue(c.name, c.value))
}
}

Expand Down Expand Up @@ -174,7 +174,7 @@ func TestRedisCanPullStatsFromMultipleServers(t *testing.T) {
}

for _, c := range checkInt {
assert.NoError(t, acc.ValidateValue(c.name, c.value))
assert.True(t, acc.CheckValue(c.name, c.value))
}

checkFloat := []struct {
Expand All @@ -189,7 +189,7 @@ func TestRedisCanPullStatsFromMultipleServers(t *testing.T) {
}

for _, c := range checkFloat {
assert.NoError(t, acc.ValidateValue(c.name, c.value))
assert.True(t, acc.CheckValue(c.name, c.value))
}
}

Expand Down
12 changes: 12 additions & 0 deletions testutil/testutil.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package testutil

import "os"

var localhost = "localhost"

func GetLocalHost() string {
if dockerHostVar := os.Getenv("DOCKER_HOST"); dockerHostVar != "" {
return dockerHostVar
}
return localhost
}
26 changes: 26 additions & 0 deletions testutil/testutil_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package testutil

import (
"os"
"testing"
)

func TestDockerHost(t *testing.T) {

os.Unsetenv("DOCKER_HOST")

host := GetLocalHost()

if host != localhost {
t.Fatalf("Host should be localhost when DOCKER_HOST is not set. Current value [%s]", host)
}

os.Setenv("DOCKER_HOST", "1.1.1.1")

host = GetLocalHost()

if host != "1.1.1.1" {
t.Fatalf("Host should take DOCKER_HOST value when set. Current value is [%s] and DOCKER_HOST is [%s]", host, os.Getenv("DOCKER_HOST"))
}

}

0 comments on commit a4d0c47

Please sign in to comment.