github.com/dynastymasra/migrate/v4@v4.11.0/database/spanner/spanner_test.go (about) 1 package spanner 2 3 import ( 4 "fmt" 5 "os" 6 "testing" 7 ) 8 9 import ( 10 "github.com/golang-migrate/migrate/v4" 11 dt "github.com/golang-migrate/migrate/v4/database/testing" 12 _ "github.com/golang-migrate/migrate/v4/source/file" 13 ) 14 15 import ( 16 "github.com/stretchr/testify/assert" 17 ) 18 19 func Test(t *testing.T) { 20 if testing.Short() { 21 t.Skip("skipping test in short mode.") 22 } 23 24 db, ok := os.LookupEnv("SPANNER_DATABASE") 25 if !ok { 26 t.Skip("SPANNER_DATABASE not set, skipping test.") 27 } 28 29 s := &Spanner{} 30 addr := fmt.Sprintf("spanner://%s", db) 31 d, err := s.Open(addr) 32 if err != nil { 33 t.Fatal(err) 34 } 35 dt.Test(t, d, []byte("SELECT 1")) 36 } 37 38 func TestMigrate(t *testing.T) { 39 if testing.Short() { 40 t.Skip("skipping test in short mode.") 41 } 42 43 db, ok := os.LookupEnv("SPANNER_DATABASE") 44 if !ok { 45 t.Skip("SPANNER_DATABASE not set, skipping test.") 46 } 47 48 s := &Spanner{} 49 addr := fmt.Sprintf("spanner://%s", db) 50 d, err := s.Open(addr) 51 if err != nil { 52 t.Fatal(err) 53 } 54 m, err := migrate.NewWithDatabaseInstance("file://./examples/migrations", db, d) 55 if err != nil { 56 t.Fatal(err) 57 } 58 dt.TestMigrate(t, m) 59 } 60 61 func TestMultistatementSplit(t *testing.T) { 62 testCases := []struct { 63 name string 64 multiStatement string 65 expected []string 66 }{ 67 { 68 name: "single statement, single line, no semicolon", 69 multiStatement: "CREATE TABLE table_name (id STRING(255) NOT NULL) PRIMARY KEY (id)", 70 expected: []string{"CREATE TABLE table_name (id STRING(255) NOT NULL) PRIMARY KEY (id)"}, 71 }, 72 { 73 name: "single statement, multi line, no semicolon", 74 multiStatement: `CREATE TABLE table_name ( 75 id STRING(255) NOT NULL, 76 ) PRIMARY KEY (id)`, 77 expected: []string{`CREATE TABLE table_name ( 78 id STRING(255) NOT NULL, 79 ) PRIMARY KEY (id)`}, 80 }, 81 { 82 name: "single statement, single line, with semicolon", 83 multiStatement: "CREATE TABLE table_name (id STRING(255) NOT NULL) PRIMARY KEY (id);", 84 expected: []string{"CREATE TABLE table_name (id STRING(255) NOT NULL) PRIMARY KEY (id)"}, 85 }, 86 { 87 name: "single statement, multi line, with semicolon", 88 multiStatement: `CREATE TABLE table_name ( 89 id STRING(255) NOT NULL, 90 ) PRIMARY KEY (id);`, 91 expected: []string{`CREATE TABLE table_name ( 92 id STRING(255) NOT NULL, 93 ) PRIMARY KEY (id)`}, 94 }, 95 { 96 name: "multi statement, with trailing semicolon", 97 // From https://github.com/mattes/migrate/pull/281 98 multiStatement: `CREATE TABLE table_name ( 99 id STRING(255) NOT NULL, 100 ) PRIMARY KEY(id); 101 102 CREATE INDEX table_name_id_idx ON table_name (id);`, 103 expected: []string{`CREATE TABLE table_name ( 104 id STRING(255) NOT NULL, 105 ) PRIMARY KEY(id)`, "CREATE INDEX table_name_id_idx ON table_name (id)"}, 106 }, 107 { 108 name: "multi statement, no trailing semicolon", 109 // From https://github.com/mattes/migrate/pull/281 110 multiStatement: `CREATE TABLE table_name ( 111 id STRING(255) NOT NULL, 112 ) PRIMARY KEY(id); 113 114 CREATE INDEX table_name_id_idx ON table_name (id)`, 115 expected: []string{`CREATE TABLE table_name ( 116 id STRING(255) NOT NULL, 117 ) PRIMARY KEY(id)`, "CREATE INDEX table_name_id_idx ON table_name (id)"}, 118 }, 119 } 120 121 for _, tc := range testCases { 122 t.Run(tc.name, func(t *testing.T) { 123 if stmts := migrationStatements([]byte(tc.multiStatement)); !assert.Equal(t, stmts, tc.expected) { 124 t.Error() 125 } 126 }) 127 } 128 }