forked from golang-migrate/migrate
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
93 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
package cockroachdb | ||
|
||
// error codes https://github.com/lib/pq/blob/master/error.go | ||
|
||
import ( | ||
//"bytes" | ||
"database/sql" | ||
"fmt" | ||
"io" | ||
"testing" | ||
|
||
"github.com/lib/pq" | ||
dt "github.com/mattes/migrate/database/testing" | ||
mt "github.com/mattes/migrate/testing" | ||
"bytes" | ||
) | ||
|
||
var versions = []mt.Version{ | ||
{Image: "cockroachdb/cockroach:v1.0.2", Cmd: []string{"start", "--insecure"}}, | ||
} | ||
|
||
func isReady(i mt.Instance) bool { | ||
fmt.Println("Checking readiness") | ||
db, err := sql.Open("postgres", fmt.Sprintf("postgres://root@%v:%v?sslmode=disable", i.Host(), i.PortFor(26257))) | ||
if err != nil { | ||
return false | ||
} | ||
defer db.Close() | ||
err = db.Ping() | ||
if err == io.EOF { | ||
_, err = db.Exec("CREATE DATABASE migrate") | ||
return err == nil; | ||
} else if e, ok := err.(*pq.Error); ok { | ||
if e.Code.Name() == "cannot_connect_now" { | ||
return false | ||
} | ||
} | ||
|
||
_, err = db.Exec("CREATE DATABASE migrate") | ||
return err == nil; | ||
|
||
return true | ||
} | ||
|
||
func Test(t *testing.T) { | ||
mt.ParallelTest(t, versions, isReady, | ||
func(t *testing.T, i mt.Instance) { | ||
c := &CockroachDb{} | ||
fmt.Println("Connecting in test") | ||
addr := fmt.Sprintf("cockroach://root@%v:%v/migrate?sslmode=disable", i.Host(), i.PortFor(26257)) | ||
d, err := c.Open(addr) | ||
if err != nil { | ||
t.Fatalf("%v", err) | ||
} | ||
dt.Test(t, d, []byte("SELECT 1")) | ||
}) | ||
} | ||
|
||
func TestMultiStatement(t *testing.T) { | ||
mt.ParallelTest(t, versions, isReady, | ||
func(t *testing.T, i mt.Instance) { | ||
c := &CockroachDb{} | ||
addr := fmt.Sprintf("cockroach://root@%v:%v/migrate?sslmode=disable", i.Host(), i.Port()) | ||
d, err := c.Open(addr) | ||
if err != nil { | ||
t.Fatalf("%v", err) | ||
} | ||
if err := d.Run(bytes.NewReader([]byte("CREATE TABLE foo (foo text); CREATE TABLE bar (bar text);"))); err != nil { | ||
t.Fatalf("expected err to be nil, got %v", err) | ||
} | ||
|
||
// make sure second table exists | ||
var exists bool | ||
if err := d.(*CockroachDb).db.QueryRow("SELECT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'bar' AND table_schema = (SELECT current_schema()))").Scan(&exists); err != nil { | ||
t.Fatal(err) | ||
} | ||
if !exists { | ||
t.Fatalf("expected table bar to exist") | ||
} | ||
}) | ||
} | ||
|
||
func TestFilterCustomQuery(t *testing.T) { | ||
mt.ParallelTest(t, versions, isReady, | ||
func(t *testing.T, i mt.Instance) { | ||
c := &CockroachDb{} | ||
addr := fmt.Sprintf("cockroach://root@%v:%v/migrate?sslmode=disable&x-custom=foobar", i.Host(), i.PortFor(26257)) | ||
_, err := c.Open(addr) | ||
if err != nil { | ||
t.Fatalf("%v", err) | ||
} | ||
}) | ||
} |