Documentation
¶
Overview ¶
Package dktest provides an easy way to write integration tests using Docker
dktest is short for dockertest
Example (Nginx) ¶
package main
import (
"net/http"
"net/url"
"testing"
"github.com/dhui/dktest"
_ "github.com/lib/pq"
)
func main() {
dockerImageName := "nginx:alpine"
readyFunc := func(c dktest.ContainerInfo) bool {
u := url.URL{Scheme: "http", Host: c.IP + ":" + c.Port}
if resp, err := http.Get(u.String()); err != nil {
return false
} else if resp.StatusCode != 200 {
return false
}
return true
}
// dktest.Run() should be used within a test
dktest.Run(&testing.T{}, dockerImageName, dktest.Options{PortRequired: true, ReadyFunc: readyFunc},
func(t *testing.T, c dktest.ContainerInfo) {
// test code here
})
}
Example (Postgres) ¶
package main
import (
"database/sql"
"fmt"
"testing"
"github.com/dhui/dktest"
_ "github.com/lib/pq"
)
func main() {
dockerImageName := "postgres:alpine"
readyFunc := func(c dktest.ContainerInfo) bool {
connStr := fmt.Sprintf("host=%s port=%s user=postgres dbname=postgres sslmode=disable", c.IP, c.Port)
db, err := sql.Open("postgres", connStr)
if err != nil {
return false
}
defer db.Close() // nolint:errcheck
return db.Ping() == nil
}
// dktest.Run() should be used within a test
dktest.Run(&testing.T{}, dockerImageName, dktest.Options{PortRequired: true, ReadyFunc: readyFunc},
func(t *testing.T, c dktest.ContainerInfo) {
connStr := fmt.Sprintf("host=%s port=%s user=postgres dbname=postgres sslmode=disable", c.IP, c.Port)
db, err := sql.Open("postgres", connStr)
if err != nil {
t.Fatal(err)
}
defer db.Close() // nolint:errcheck
if err := db.Ping(); err != nil {
t.Fatal(err)
}
// Test using db
})
}
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var ( // DefaultTimeout is the default timeout to use DefaultTimeout = time.Minute )
Functions ¶
Types ¶
type ContainerInfo ¶
ContainerInfo holds information about a running Docker container
func (ContainerInfo) String ¶
func (c ContainerInfo) String() string
type Options ¶
type Options struct {
Timeout time.Duration
ReadyFunc func(ContainerInfo) bool
Env map[string]string
Entrypoint []string
Cmd []string
// If you prefer to specify your port bindings as a string, use nat.ParsePortSpecs()
PortBindings nat.PortMap
PortRequired bool
}
Options contains the configurable options for running tests in the docker image
Click to show internal directories.
Click to hide internal directories.