From d545b197ea2e309461146de0964916d52d6c7fdf Mon Sep 17 00:00:00 2001 From: Marcos Lilljedahl Date: Mon, 6 Jul 2015 01:46:43 -0300 Subject: [PATCH] Add docker containers to test services. This commit initializes the needed services which are not mocked so tests can be executed in any environment with docker. Some default modifications (i.e: connection strings) were also made to current tests to accomodate them for this setup. A docker-compose.yml file is provided with all the necessary parameters for this services to be initialized. Future services can be added easily by extending this configuration file In addition a makefile has been introduced to simplify command execution --- Makefile | 11 +++++++++++ README.md | 13 +++++++++++++ docker-compose.yml | 16 ++++++++++++++++ .../kafka_consumer_integration_test.go | 3 +++ plugins/mysql/mysql_test.go | 6 ++++-- plugins/postgresql/postgresql_test.go | 6 +++--- plugins/redis/redis_test.go | 8 ++++---- 7 files changed, 54 insertions(+), 9 deletions(-) create mode 100644 Makefile create mode 100644 docker-compose.yml diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..12b3aeac7 --- /dev/null +++ b/Makefile @@ -0,0 +1,11 @@ +prepare: + go get -d -v -t ./... + docker-compose up -d + +test: prepare + go test -short ./... + +update: + go get -u -v -d -t ./... + +.PHONY: test diff --git a/README.md b/README.md index e7e95455d..c3373f4b8 100644 --- a/README.md +++ b/README.md @@ -175,3 +175,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` + diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..d54a25f75 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,16 @@ +mysql: + image: mysql + ports: + - "3306:3306" + environment: + MYSQL_ALLOW_EMPTY_PASSWORD: true + +memcached: + image: memcached + ports: + - "11211:11211" + +postgres: + image: postgres + ports: + - "5432:5432" diff --git a/plugins/kafka_consumer/kafka_consumer_integration_test.go b/plugins/kafka_consumer/kafka_consumer_integration_test.go index 1541cb127..2a82a2374 100644 --- a/plugins/kafka_consumer/kafka_consumer_integration_test.go +++ b/plugins/kafka_consumer/kafka_consumer_integration_test.go @@ -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 { diff --git a/plugins/mysql/mysql_test.go b/plugins/mysql/mysql_test.go index 76cb28b0d..f09c0307e 100644 --- a/plugins/mysql/mysql_test.go +++ b/plugins/mysql/mysql_test.go @@ -11,7 +11,7 @@ import ( func TestMysqlGeneratesMetrics(t *testing.T) { m := &Mysql{ - Servers: []string{""}, + Servers: []string{"root@tcp(localhost:3306)/"}, } var acc testutil.Accumulator @@ -53,7 +53,9 @@ func TestMysqlGeneratesMetrics(t *testing.T) { } func TestMysqlDefaultsToLocal(t *testing.T) { - m := &Mysql{} + m := &Mysql{ + Servers: []string{"root@tcp(localhost:3306)/"}, + } var acc testutil.Accumulator diff --git a/plugins/postgresql/postgresql_test.go b/plugins/postgresql/postgresql_test.go index 91776d619..775087700 100644 --- a/plugins/postgresql/postgresql_test.go +++ b/plugins/postgresql/postgresql_test.go @@ -12,7 +12,7 @@ func TestPostgresqlGeneratesMetrics(t *testing.T) { p := &Postgresql{ Servers: []*Server{ { - Address: "sslmode=disable", + Address: "host=localhost user=postgres sslmode=disable", Databases: []string{"postgres"}, }, }, @@ -57,7 +57,7 @@ func TestPostgresqlTagsMetricsWithDatabaseName(t *testing.T) { p := &Postgresql{ Servers: []*Server{ { - Address: "sslmode=disable", + Address: "host=localhost user=postgres sslmode=disable", Databases: []string{"postgres"}, }, }, @@ -78,7 +78,7 @@ func TestPostgresqlDefaultsToAllDatabases(t *testing.T) { p := &Postgresql{ Servers: []*Server{ { - Address: "sslmode=disable", + Address: "host=localhost user=postgres sslmode=disable", }, }, } diff --git a/plugins/redis/redis_test.go b/plugins/redis/redis_test.go index 317fde783..7bd412e15 100644 --- a/plugins/redis/redis_test.go +++ b/plugins/redis/redis_test.go @@ -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 { @@ -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)) } } @@ -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 { @@ -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)) } }