Mark more unit tests as 'integration' tests when they rely on external services/docker
This commit is contained in:
parent
06a84def5f
commit
5259c50612
22
Makefile
22
Makefile
|
@ -1,12 +1,26 @@
|
||||||
|
UNAME := $(shell sh -c 'uname')
|
||||||
|
|
||||||
|
ifeq ($(UNAME), Darwin)
|
||||||
|
export ADVERTISED_HOST := $(shell sh -c 'boot2docker ip')
|
||||||
|
endif
|
||||||
|
ifeq ($(UNAME), Linux)
|
||||||
|
export ADVERTISED_HOST := localhost
|
||||||
|
endif
|
||||||
|
|
||||||
prepare:
|
prepare:
|
||||||
go get -d -v -t ./...
|
go get -d -v -t ./...
|
||||||
docker-compose up -d --no-recreate
|
|
||||||
|
docker-compose:
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
test: prepare docker-compose
|
||||||
|
go test -v ./...
|
||||||
|
|
||||||
test-short: prepare
|
test-short: prepare
|
||||||
go test -short ./...
|
go test -v -short ./...
|
||||||
|
|
||||||
test: prepare
|
test-cleanup:
|
||||||
go test ./...
|
docker-compose kill
|
||||||
|
|
||||||
update:
|
update:
|
||||||
go get -u -v -d -t ./...
|
go get -u -v -d -t ./...
|
||||||
|
|
32
README.md
32
README.md
|
@ -184,29 +184,29 @@ func init() {
|
||||||
|
|
||||||
## Testing
|
## 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 these simple steps:
|
|
||||||
|
|
||||||
- Install docker compose following [these](https://docs.docker.com/compose/install/) instructions
|
|
||||||
- NOTE: mac users should be able to simply do `brew install boot2docker` and `brew install docker-compose`
|
|
||||||
|
|
||||||
### Execute short tests:
|
### Execute short tests:
|
||||||
|
|
||||||
execute `make short-test`
|
execute `make short-test`
|
||||||
|
|
||||||
### Execute long tests:
|
### Execute long tests:
|
||||||
These tests requre additional docker containers, such as for kafka
|
|
||||||
|
|
||||||
Mac:
|
As Telegraf collects metrics from several third-party services it becomes a
|
||||||
execute ``ADVERTISED_HOST=`boot2docker ip` make test``
|
difficult task to mock each service as some of them have complicated protocols
|
||||||
|
which would take some time to replicate.
|
||||||
|
|
||||||
Linux:
|
To overcome this situation we've decided to use docker containers to provide a
|
||||||
execute `ADVERTISED_HOST=localhost make test`
|
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 these simple steps:
|
||||||
|
|
||||||
|
- Install docker compose following [these](https://docs.docker.com/compose/install/) instructions
|
||||||
|
- NOTE: mac users should be able to simply do `brew install boot2docker`
|
||||||
|
and `brew install docker-compose`
|
||||||
|
|
||||||
|
execute `make test`
|
||||||
|
|
||||||
### Unit test troubleshooting:
|
### Unit test troubleshooting:
|
||||||
|
|
||||||
|
|
|
@ -19,5 +19,6 @@ test:
|
||||||
- golint .
|
- golint .
|
||||||
- golint testutil/...
|
- golint testutil/...
|
||||||
- golint cmd/...
|
- golint cmd/...
|
||||||
# TODO run unit tests
|
# Run short unit tests
|
||||||
# - go test -short ./...
|
- go test -v -short ./...
|
||||||
|
# TODO run full unit test suite
|
||||||
|
|
|
@ -9,6 +9,10 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestMemcachedGeneratesMetrics(t *testing.T) {
|
func TestMemcachedGeneratesMetrics(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("Skipping integration test in short mode")
|
||||||
|
}
|
||||||
|
|
||||||
m := &Memcached{
|
m := &Memcached{
|
||||||
Servers: []string{testutil.GetLocalHost()},
|
Servers: []string{testutil.GetLocalHost()},
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,10 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestMysqlGeneratesMetrics(t *testing.T) {
|
func TestMysqlGeneratesMetrics(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("Skipping integration test in short mode")
|
||||||
|
}
|
||||||
|
|
||||||
m := &Mysql{
|
m := &Mysql{
|
||||||
Servers: []string{fmt.Sprintf("root@tcp(%s:3306)/", testutil.GetLocalHost())},
|
Servers: []string{fmt.Sprintf("root@tcp(%s:3306)/", testutil.GetLocalHost())},
|
||||||
}
|
}
|
||||||
|
@ -54,6 +58,10 @@ func TestMysqlGeneratesMetrics(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMysqlDefaultsToLocal(t *testing.T) {
|
func TestMysqlDefaultsToLocal(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("Skipping integration test in short mode")
|
||||||
|
}
|
||||||
|
|
||||||
m := &Mysql{
|
m := &Mysql{
|
||||||
Servers: []string{fmt.Sprintf("root@tcp(%s:3306)/", testutil.GetLocalHost())},
|
Servers: []string{fmt.Sprintf("root@tcp(%s:3306)/", testutil.GetLocalHost())},
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,10 +10,15 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestPostgresqlGeneratesMetrics(t *testing.T) {
|
func TestPostgresqlGeneratesMetrics(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("Skipping integration test in short mode")
|
||||||
|
}
|
||||||
|
|
||||||
p := &Postgresql{
|
p := &Postgresql{
|
||||||
Servers: []*Server{
|
Servers: []*Server{
|
||||||
{
|
{
|
||||||
Address: fmt.Sprintf("host=%s user=postgres sslmode=disable", testutil.GetLocalHost()),
|
Address: fmt.Sprintf("host=%s user=postgres sslmode=disable",
|
||||||
|
testutil.GetLocalHost()),
|
||||||
Databases: []string{"postgres"},
|
Databases: []string{"postgres"},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -55,10 +60,15 @@ func TestPostgresqlGeneratesMetrics(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPostgresqlTagsMetricsWithDatabaseName(t *testing.T) {
|
func TestPostgresqlTagsMetricsWithDatabaseName(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("Skipping integration test in short mode")
|
||||||
|
}
|
||||||
|
|
||||||
p := &Postgresql{
|
p := &Postgresql{
|
||||||
Servers: []*Server{
|
Servers: []*Server{
|
||||||
{
|
{
|
||||||
Address: fmt.Sprintf("host=%s user=postgres sslmode=disable", testutil.GetLocalHost()),
|
Address: fmt.Sprintf("host=%s user=postgres sslmode=disable",
|
||||||
|
testutil.GetLocalHost()),
|
||||||
Databases: []string{"postgres"},
|
Databases: []string{"postgres"},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -76,10 +86,15 @@ func TestPostgresqlTagsMetricsWithDatabaseName(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPostgresqlDefaultsToAllDatabases(t *testing.T) {
|
func TestPostgresqlDefaultsToAllDatabases(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("Skipping integration test in short mode")
|
||||||
|
}
|
||||||
|
|
||||||
p := &Postgresql{
|
p := &Postgresql{
|
||||||
Servers: []*Server{
|
Servers: []*Server{
|
||||||
{
|
{
|
||||||
Address: fmt.Sprintf("host=%s user=postgres sslmode=disable", testutil.GetLocalHost()),
|
Address: fmt.Sprintf("host=%s user=postgres sslmode=disable",
|
||||||
|
testutil.GetLocalHost()),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,10 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestRedisGeneratesMetrics(t *testing.T) {
|
func TestRedisGeneratesMetrics(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("Skipping integration test in short mode")
|
||||||
|
}
|
||||||
|
|
||||||
l, err := net.Listen("tcp", ":0")
|
l, err := net.Listen("tcp", ":0")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
@ -103,6 +107,10 @@ func TestRedisGeneratesMetrics(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRedisCanPullStatsFromMultipleServers(t *testing.T) {
|
func TestRedisCanPullStatsFromMultipleServers(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("Skipping integration test in short mode")
|
||||||
|
}
|
||||||
|
|
||||||
l, err := net.Listen("tcp", ":0")
|
l, err := net.Listen("tcp", ":0")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue