-
Notifications
You must be signed in to change notification settings - Fork 1
/
crate_test.go
111 lines (95 loc) · 3.18 KB
/
crate_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package crate
import (
"fmt"
"os"
"testing"
"github.com/housinganywhere/migrate/file"
"github.com/housinganywhere/migrate/migrate/direction"
pipep "github.com/housinganywhere/migrate/pipe"
)
func TestContentSplit(t *testing.T) {
content := `CREATE TABLE users (user_id STRING primary key, first_name STRING, last_name STRING, email STRING, password_hash STRING) CLUSTERED INTO 3 shards WITH (number_of_replicas = 0);
CREATE TABLE units (unit_id STRING primary key, name STRING, members array(string)) CLUSTERED INTO 3 shards WITH (number_of_replicas = 0);
CREATE TABLE available_connectors (technology_id STRING primary key, description STRING, icon STRING, link STRING, configuration_parameters array(object as (name STRING, type STRING))) CLUSTERED INTO 3 shards WITH (number_of_replicas = 0);
`
lines := splitContent(content)
if len(lines) != 3 {
t.Errorf("Expected 3 lines, but got %d", len(lines))
}
if lines[0] != "CREATE TABLE users (user_id STRING primary key, first_name STRING, last_name STRING, email STRING, password_hash STRING) CLUSTERED INTO 3 shards WITH (number_of_replicas = 0)" {
t.Error("Line does not match expected output")
}
if lines[1] != "CREATE TABLE units (unit_id STRING primary key, name STRING, members array(string)) CLUSTERED INTO 3 shards WITH (number_of_replicas = 0)" {
t.Error("Line does not match expected output")
}
if lines[2] != "CREATE TABLE available_connectors (technology_id STRING primary key, description STRING, icon STRING, link STRING, configuration_parameters array(object as (name STRING, type STRING))) CLUSTERED INTO 3 shards WITH (number_of_replicas = 0)" {
t.Error("Line does not match expected output")
}
}
func TestMigrate(t *testing.T) {
host := os.Getenv("CRATE_PORT_4200_TCP_ADDR")
port := os.Getenv("CRATE_PORT_4200_TCP_PORT")
url := fmt.Sprintf("crate://%s:%s", host, port)
driver := &Driver{}
if err := driver.Initialize(url); err != nil {
t.Fatal(err)
}
successFiles := []file.File{
{
Path: "/foobar",
FileName: "001_foobar.up.sql",
Version: 1,
Name: "foobar",
Direction: direction.Up,
Content: []byte(`
CREATE TABLE yolo (
id integer primary key,
msg string
);
`),
},
{
Path: "/foobar",
FileName: "002_foobar.down.sql",
Version: 1,
Name: "foobar",
Direction: direction.Down,
Content: []byte(`
DROP TABLE yolo;
`),
},
}
failFiles := []file.File{
{
Path: "/foobar",
FileName: "002_foobar.up.sql",
Version: 2,
Name: "foobar",
Direction: direction.Up,
Content: []byte(`
CREATE TABLE error (
id THIS WILL CAUSE AN ERROR
)
`),
},
}
for _, file := range successFiles {
pipe := pipep.New()
go driver.Migrate(file, pipe)
errs := pipep.ReadErrors(pipe)
if len(errs) > 0 {
t.Fatal(errs)
}
}
for _, file := range failFiles {
pipe := pipep.New()
go driver.Migrate(file, pipe)
errs := pipep.ReadErrors(pipe)
if len(errs) == 0 {
t.Fatal("Migration should have failed but succeeded")
}
}
if err := driver.Close(); err != nil {
t.Fatal(err)
}
}