Skip to content

Commit

Permalink
docs: add examples - closes #73 (#74)
Browse files Browse the repository at this point in the history
  • Loading branch information
arekkas committed Jan 8, 2017
1 parent e4828e8 commit 7bf7a60
Show file tree
Hide file tree
Showing 6 changed files with 153 additions and 1 deletion.
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ Use Docker to run your Go language integration tests against third party service
- [Why should I use Dockertest?](#why-should-i-use-dockertest)
- [Installing and using Dockertest](#installing-and-using-dockertest)
- [Using Dockertest](#using-dockertest)
- [Examples](#examples)
- [Setting up Travis-CI](#setting-up-travis-ci)
- [Troubleshoot & FAQ](#troubleshoot-&-faq)
- [Out of disk space](#out-of-disk-space)
Expand Down Expand Up @@ -42,7 +43,6 @@ go get gopkg.in/ory-am/dockertest.v3

### Using Dockertest


```go
package dockertest_test

Expand Down Expand Up @@ -98,6 +98,10 @@ func TestSomething(t *testing.T) {
}
```

### Examples

We provide code examples for well known services in the [examples](examples/) directory, check them out!

### Setting up Travis-CI

You can run the Docker integration on Travis easily:
Expand Down
30 changes: 30 additions & 0 deletions examples/MongoDB.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
```go
var db *mgo.Session
var err error

pool, err = dockertest.NewPool("")
if err != nil {
log.Fatalf("Could not connect to docker: %s", err)
}

resource, err := pool.Run("mongo", "3.0", []string{""})
if err != nil {
log.Fatalf("Could not start resource: %s", err)
}

// exponential backoff-retry, because the application in the container might not be ready to accept connections yet
if err := pool.Retry(func() error {
var err error
db, err = mgo.Dial(fmt.Sprintf("localhost:%s", resource.GetPort("27017/tcp")))
if err != nil {
return err
}

return db.Ping()
}); err != nil {
log.Fatalf("Could not connect to docker: %s", err)
}

// When you're done, kill and remove the container
err = pool.Purge(resource)
```
28 changes: 28 additions & 0 deletions examples/MySQL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
```go
var db *sql.DB
var err error
pool, err = dockertest.NewPool("")
pool.MaxWait = time.Minute * 2
if err != nil {
log.Fatalf("Could not connect to docker: %s", err)
}

resource, err := pool.Run("mysql", "5.7", []string{"MYSQL_ROOT_PASSWORD=secret"})
if err != nil {
log.Fatalf("Could not start resource: %s", err)
}

if err = pool.Retry(func() error {
var err error
db, err = sql.Open("mysql", fmt.Sprintf("root:secret@(localhost:%s)/mysql?parseTime=true", resource.GetPort("3306/tcp")))
if err != nil {
return err
}
return db.Ping()
}); err != nil {
log.Fatalf("Could not connect to docker: %s", err)
}

// When you're done, kill and remove the container
err = pool.Purge(resource)
```
27 changes: 27 additions & 0 deletions examples/PostgreSQL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
```go
var db *sql.DB
var err error
pool, err = dockertest.NewPool("")
if err != nil {
log.Fatalf("Could not connect to docker: %s", err)
}

resource, err := pool.Run("postgres", "9.6", []string{"POSTGRES_PASSWORD=secret", "POSTGRES_DB=" + database})
if err != nil {
log.Fatalf("Could not start resource: %s", err)
}

if err = pool.Retry(func() error {
var err error
db, err = sql.Open("postgres", fmt.Sprintf("postgres://postgres:secret@localhost:%s/%s?sslmode=disable", resource.GetPort("5432/tcp"), database))
if err != nil {
return err
}
return db.Ping()
}); err != nil {
log.Fatalf("Could not connect to docker: %s", err)
}

// When you're done, kill and remove the container
err = pool.Purge(resource)
```
26 changes: 26 additions & 0 deletions examples/Redis.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
```go
var db *redis.Client
var err error
pool, err = dockertest.NewPool("")
if err != nil {
log.Fatalf("Could not connect to docker: %s", err)
}

resource, err := pool.Run("redis", "3.2", nil)
if err != nil {
log.Fatalf("Could not start resource: %s", err)
}

if err = pool.Retry(func() error {
db = redis.NewClient(&redis.Options{
Addr: fmt.Sprintf("localhost:%s", resource.GetPort("6379/tcp")),
})

return db.Ping().Err()
}); err != nil {
log.Fatalf("Could not connect to docker: %s", err)
}

// When you're done, kill and remove the container
err = pool.Purge(resource)
```
37 changes: 37 additions & 0 deletions examples/RethinkDB.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
```go
var session *r.Session
var err error
pool, err = dockertest.NewPool("")
if err != nil {
log.Fatalf("Could not connect to docker: %s", err)
}

resource, err := pool.Run("rethinkdb", "2.3", []string{""})
if err != nil {
log.Fatalf("Could not start resource: %s", err)
}

if err = pool.Retry(func() error {
if session, err = r.Connect(r.ConnectOpts{Address: fmt.Sprintf("localhost:%s", resource.GetPort("28015/tcp")), Database: database}); err != nil {
return err
} else if _, err = r.DBCreate(database).RunWrite(session); err != nil {
log.Printf("Database exists: %s", err)
return err
}

for _, table := range tables {
if _, err = r.TableCreate(table).RunWrite(session); err != nil {
log.Printf("Could not create table: %s", err)
return err
}
}

time.Sleep(100 * time.Millisecond)
return nil
}); err != nil {
log.Fatalf("Could not connect to docker: %s", err)
}

// When you're done, kill and remove the container
err = pool.Purge(resource)
```

0 comments on commit 7bf7a60

Please sign in to comment.