github.com/matcornic/migrate@v3.3.2-0.20180717234201-feea45c20506+incompatible/database/cockroachdb/cockroachdb_test.go (about)

     1  package cockroachdb
     2  
     3  // error codes https://github.com/lib/pq/blob/master/error.go
     4  
     5  import (
     6  	//"bytes"
     7  	"database/sql"
     8  	"fmt"
     9  	"io"
    10  	"testing"
    11  
    12  	"github.com/lib/pq"
    13  	dt "github.com/golang-migrate/migrate/database/testing"
    14  	mt "github.com/golang-migrate/migrate/testing"
    15  	"bytes"
    16  )
    17  
    18  var versions = []mt.Version{
    19  	{Image: "cockroachdb/cockroach:v1.0.2", Cmd: []string{"start", "--insecure"}},
    20  }
    21  
    22  func isReady(i mt.Instance) bool {
    23  	db, err := sql.Open("postgres", fmt.Sprintf("postgres://root@%v:%v?sslmode=disable", i.Host(), i.PortFor(26257)))
    24  	if err != nil {
    25  		return false
    26  	}
    27  	defer db.Close()
    28  	err = db.Ping()
    29  	if err == io.EOF {
    30  		_, err = db.Exec("CREATE DATABASE migrate")
    31  		return err == nil;
    32  	} else if e, ok := err.(*pq.Error); ok {
    33  		if e.Code.Name() == "cannot_connect_now" {
    34  			return false
    35  		}
    36  	}
    37  
    38  	_, err = db.Exec("CREATE DATABASE migrate")
    39  	return err == nil;
    40  
    41  	return true
    42  }
    43  
    44  func Test(t *testing.T) {
    45  	mt.ParallelTest(t, versions, isReady,
    46  		func(t *testing.T, i mt.Instance) {
    47  			c := &CockroachDb{}
    48  			addr := fmt.Sprintf("cockroach://root@%v:%v/migrate?sslmode=disable", i.Host(), i.PortFor(26257))
    49  			d, err := c.Open(addr)
    50  			if err != nil {
    51  				t.Fatalf("%v", err)
    52  			}
    53  			dt.Test(t, d, []byte("SELECT 1"))
    54  		})
    55  }
    56  
    57  func TestMultiStatement(t *testing.T) {
    58  	mt.ParallelTest(t, versions, isReady,
    59  		func(t *testing.T, i mt.Instance) {
    60  			c := &CockroachDb{}
    61  			addr := fmt.Sprintf("cockroach://root@%v:%v/migrate?sslmode=disable", i.Host(), i.Port())
    62  			d, err := c.Open(addr)
    63  			if err != nil {
    64  				t.Fatalf("%v", err)
    65  			}
    66  			if err := d.Run(bytes.NewReader([]byte("CREATE TABLE foo (foo text); CREATE TABLE bar (bar text);"))); err != nil {
    67  				t.Fatalf("expected err to be nil, got %v", err)
    68  			}
    69  
    70  			// make sure second table exists
    71  			var exists bool
    72  			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 {
    73  				t.Fatal(err)
    74  			}
    75  			if !exists {
    76  				t.Fatalf("expected table bar to exist")
    77  			}
    78  		})
    79  }
    80  
    81  func TestFilterCustomQuery(t *testing.T) {
    82  	mt.ParallelTest(t, versions, isReady,
    83  		func(t *testing.T, i mt.Instance) {
    84  			c := &CockroachDb{}
    85  			addr := fmt.Sprintf("cockroach://root@%v:%v/migrate?sslmode=disable&x-custom=foobar", i.Host(), i.PortFor(26257))
    86  			_, err := c.Open(addr)
    87  			if err != nil {
    88  				t.Fatalf("%v", err)
    89  			}
    90  		})
    91  }