From 29574449918c41b9588b9d65c929d980ed76f414 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philippe=20Lafoucrie=CC=80re?= Date: Thu, 15 Oct 2015 12:49:43 -0400 Subject: [PATCH] Fix test with optionated drivers --- .travis.yml | 17 +++++++---------- Dockerfile | 3 +++ Makefile | 24 ++++++++++++++++++++++++ docker-compose.yml | 27 +++++++++++++++++++++++++++ driver/cassandra/cassandra_test.go | 14 +++++++++----- driver/driver.go | 7 +++++-- driver/driver_test.go | 2 ++ driver/mysql/mysql_test.go | 10 +++++++--- driver/postgres/postgres.go | 3 ++- driver/postgres/postgres_test.go | 8 ++++++-- driver/sqlite3/sqlite3_test.go | 3 ++- migrate/migrate_test.go | 5 +++-- 12 files changed, 97 insertions(+), 26 deletions(-) create mode 100644 Dockerfile create mode 100644 Makefile create mode 100644 docker-compose.yml diff --git a/.travis.yml b/.travis.yml index 1fd0bd8..d639c53 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,5 @@ language: go +sudo :required go: - 1.3 @@ -6,16 +7,12 @@ go: - 1.5 - tip -addons: - postgresql: "9.3" - services: - - cassandra + - docker -before_script: - - > - /usr/local/cassandra/bin/cqlsh -e "CREATE KEYSPACE migratetest WITH REPLICATION = {'class': 'SimpleStrategy', 'replication_factor' : 1};" - - psql -c 'create database migratetest;' -U postgres - - mysql -e 'create database migratetest;' +before_install: + - curl -L https://github.com/docker/compose/releases/download/1.4.2/docker-compose-`uname -s`-`uname -m` > docker-compose + - chmod +x docker-compose + - sudo mv docker-compose /usr/local/bin -script: go test -p 1 ./... +script: make test diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..40e0936 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,3 @@ +FROM scratch +ADD migrate /migrate +ENTRYPOINT ["/migrate"] diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..b95eb94 --- /dev/null +++ b/Makefile @@ -0,0 +1,24 @@ +IMAGE=mattes/migrate +DCR=docker-compose run --rm +.PHONY: clean test build release docker-build docker-push run + +all: release + +clean: + rm -f migrate + +test: + go get -t -v + $(DCR) go-test + +build: + go get -v -t + $(DCR) go-build + +release: test build docker-build docker-push + +docker-build: + docker build --rm -t $(IMAGE) . + +docker-push: + docker push $(IMAGE) diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..6249950 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,27 @@ +go: &go + image: golang + working_dir: /go/src/github.com/mattes/migrate + volumes: + - $GOPATH:/go + - ./migrations:/migrations +go-test: + <<: *go + command: go test -v -cover ./... + links: + - postgres + - mysql + - cassandra +go-build: + <<: *go + command: go build -ldflags '-s' + environment: + CGO_ENABLED: 0 +postgres: + image: postgres +mysql: + image: mysql + environment: + MYSQL_DATABASE: migratetest + MYSQL_ALLOW_EMPTY_PASSWORD: yes +cassandra: + image: cassandra diff --git a/driver/cassandra/cassandra_test.go b/driver/cassandra/cassandra_test.go index bec0aab..ea73794 100644 --- a/driver/cassandra/cassandra_test.go +++ b/driver/cassandra/cassandra_test.go @@ -2,6 +2,7 @@ package cassandra import ( "net/url" + "os" "testing" "time" @@ -13,7 +14,10 @@ import ( func TestMigrate(t *testing.T) { var session *gocql.Session - driverUrl := "cassandra://localhost/migratetest" + + host := os.Getenv("CASSANDRA_PORT_9042_TCP_ADDR") + port := os.Getenv("CASSANDRA_PORT_9042_TCP_PORT") + driverUrl := "cassandra://" + host + ":" + port + "/system" // prepare a clean test database u, err := url.Parse(driverUrl) @@ -32,12 +36,12 @@ func TestMigrate(t *testing.T) { t.Fatal(err) } - if err := session.Query(`DROP TABLE IF EXISTS yolo`).Exec(); err != nil { - t.Fatal(err) - } - if err := session.Query(`DROP TABLE IF EXISTS ` + tableName).Exec(); err != nil { + if err := session.Query(`CREATE KEYSPACE IF NOT EXISTS migrate WITH REPLICATION = {'class': 'SimpleStrategy', 'replication_factor': 1};`).Exec(); err != nil { t.Fatal(err) } + cluster.Keyspace = "migrate" + session, err = cluster.CreateSession() + driverUrl = "cassandra://" + host + ":" + port + "/migrate" d := &Driver{} if err := d.Initialize(driverUrl); err != nil { diff --git a/driver/driver.go b/driver/driver.go index d123e2e..99a4428 100644 --- a/driver/driver.go +++ b/driver/driver.go @@ -52,9 +52,12 @@ func New(url string) (Driver, error) { err := errors.New(fmt.Sprintf("Driver '%s' does not implement the Driver interface")) return nil, err } + verifyFilenameExtension(u.Scheme, d) + if err := d.Initialize(url); err != nil { + return nil, err + } + return d, nil - } else { - return nil, errors.New(fmt.Sprintf("Driver '%s' not found.", u.Scheme)) } return nil, fmt.Errorf("Driver '%s' not found.", u.Scheme) } diff --git a/driver/driver_test.go b/driver/driver_test.go index c400af5..dce5895 100644 --- a/driver/driver_test.go +++ b/driver/driver_test.go @@ -1,6 +1,8 @@ package driver import "testing" +import _ "github.com/mattes/migrate/driver/bash" +import _ "github.com/mattes/migrate/driver/sqlite3" func TestNew(t *testing.T) { if _, err := New("unknown://url"); err == nil { diff --git a/driver/mysql/mysql_test.go b/driver/mysql/mysql_test.go index 2393b7b..51cf552 100644 --- a/driver/mysql/mysql_test.go +++ b/driver/mysql/mysql_test.go @@ -2,17 +2,21 @@ package mysql import ( "database/sql" + "os" + "strings" + "testing" + "github.com/mattes/migrate/file" "github.com/mattes/migrate/migrate/direction" pipep "github.com/mattes/migrate/pipe" - "strings" - "testing" ) // TestMigrate runs some additional tests on Migrate(). // Basic testing is already done in migrate/migrate_test.go func TestMigrate(t *testing.T) { - driverUrl := "mysql://root@tcp(127.0.0.1:3306)/migratetest" + host := os.Getenv("MYSQL_PORT_3306_TCP_ADDR") + port := os.Getenv("MYSQL_PORT_3306_TCP_PORT") + driverUrl := "mysql://root@tcp(" + host + ":" + port + ")/migratetest" // prepare clean database connection, err := sql.Open("mysql", strings.SplitN(driverUrl, "mysql://", 2)[1]) diff --git a/driver/postgres/postgres.go b/driver/postgres/postgres.go index af38695..afcb22f 100644 --- a/driver/postgres/postgres.go +++ b/driver/postgres/postgres.go @@ -5,11 +5,12 @@ import ( "database/sql" "errors" "fmt" + "strconv" + "github.com/lib/pq" "github.com/mattes/migrate/driver/registry" "github.com/mattes/migrate/file" "github.com/mattes/migrate/migrate/direction" - "strconv" ) type Driver struct { diff --git a/driver/postgres/postgres_test.go b/driver/postgres/postgres_test.go index 750f81f..ec91b35 100644 --- a/driver/postgres/postgres_test.go +++ b/driver/postgres/postgres_test.go @@ -2,16 +2,20 @@ package postgres import ( "database/sql" + "os" + "testing" + "github.com/mattes/migrate/file" "github.com/mattes/migrate/migrate/direction" pipep "github.com/mattes/migrate/pipe" - "testing" ) // TestMigrate runs some additional tests on Migrate(). // Basic testing is already done in migrate/migrate_test.go func TestMigrate(t *testing.T) { - driverUrl := "postgres://localhost/migratetest?sslmode=disable" + host := os.Getenv("POSTGRES_PORT_5432_TCP_ADDR") + port := os.Getenv("POSTGRES_PORT_5432_TCP_PORT") + driverUrl := "postgres://postgres@" + host + ":" + port + "/template1?sslmode=disable" // prepare clean database connection, err := sql.Open("postgres", driverUrl) diff --git a/driver/sqlite3/sqlite3_test.go b/driver/sqlite3/sqlite3_test.go index 270a25d..8d51a7d 100644 --- a/driver/sqlite3/sqlite3_test.go +++ b/driver/sqlite3/sqlite3_test.go @@ -2,10 +2,11 @@ package sqlite3 import ( "database/sql" + "testing" + "github.com/mattes/migrate/file" "github.com/mattes/migrate/migrate/direction" pipep "github.com/mattes/migrate/pipe" - "testing" ) // TestMigrate runs some additional tests on Migrate() diff --git a/migrate/migrate_test.go b/migrate/migrate_test.go index 4fe1140..c4947de 100644 --- a/migrate/migrate_test.go +++ b/migrate/migrate_test.go @@ -2,6 +2,7 @@ package migrate import ( "io/ioutil" + "os" "testing" // Ensure imports for each driver we wish to test _ "github.com/mattes/migrate/driver/postgres" @@ -9,7 +10,7 @@ import ( // Add Driver URLs here to test basic Up, Down, .. functions. var driverUrls = []string{ - "postgres://localhost/migratetest?sslmode=disable", + "postgres://postgres@" + os.Getenv("POSTGRES_PORT_5432_TCP_ADDR") + ":" + os.Getenv("POSTGRES_PORT_5432_TCP_PORT") + "/template1?sslmode=disable", } func TestCreate(t *testing.T) { @@ -56,7 +57,7 @@ func TestCreate(t *testing.T) { func TestReset(t *testing.T) { for _, driverUrl := range driverUrls { t.Logf("Test driver: %s", driverUrl) - tmpdir, err := ioutil.TempDir("/tmp", "migrate-test") + tmpdir, err := ioutil.TempDir("/", "migrate-test") if err != nil { t.Fatal(err) }