75
76
// RunUpdateSchemaTest tests schema update
77
>
func (tb *UpdateSchemaTestBase) RunUpdateSchemaTest(app *cli.App, db DB, dbNameFlag string, sqlFileContent string, expectedTables []string) {
updatetest.go
78
>
tmpDir := testutils.MkdirTemp(tb.T(), "", "update_schema_test")
79
>
80
>
tb.makeSchemaVersionDirs(tmpDir, sqlFileContent)
81
>
82
>
command := append(tb.getCommandBase(), []string{
83
>
dbNameFlag, tb.DBName,
84
>
"-q",
85
>
"setup-schema",
86
>
"-v", "0.0",
87
>
}...)
88
>
tb.NoError(app.Run(command))
89
>
90
>
command = append(tb.getCommandBase(), []string{
91
>
dbNameFlag, tb.DBName,
92
>
"-q",
93
>
"update-schema",
94
>
"-d", tmpDir,
95
>
"-v", "2.0",
96
>
}...)
97
>
tb.NoError(app.Run(command))
98
>
99
>
expected := getExpectedTables(true, expectedTables)
100
>
expected["namespaces"] = struct{}{}
101
>
102
>
ver, err := db.ReadSchemaVersion()
103
>
tb.NoError(err)
104
>
tb.Equal("2.0", ver)
105
>
106
>
tables, err := db.ListTables()
107
>
tb.NoError(err)
108
>
tb.Len(tables, len(expected))
109
>
110
>
for _, t := range tables {
111
>
_, ok := expected[t]
112
>
tb.True(ok)
113
>
delete(expected, t)
114
>
}
115
117
>
tb.NoError(db.DropAllTables())
118
}
119
120
>
func (tb *UpdateSchemaTestBase) makeSchemaVersionDirs(rootDir string, sqlFileContent string) {
updatetest.go
121
>
mData := `{
122
>
"CurrVersion": "1.0",
123
>
"MinCompatibleVersion": "1.0",
124
>
"Description": "base version of schema",
125
>
"SchemaUpdateCqlFiles": ["base.sql"]
126
>
}`
127
>
128
>
dir := rootDir + "/v1.0"
129
>
tb.NoError(os.Mkdir(rootDir+"/v1.0", os.FileMode(0700)))
130
>
err := os.WriteFile(dir+"/manifest.json", []byte(mData), os.FileMode(0600))
131
>
tb.NoError(err)
132
>
err = os.WriteFile(dir+"/base.sql", []byte(sqlFileContent), os.FileMode(0600))
133
>
tb.NoError(err)
134
>
135
>
mData = `{
136
>
"CurrVersion": "2.0",
137
>
"MinCompatibleVersion": "1.0",
138
>
"Description": "v2 of schema",
139
>
"SchemaUpdateCqlFiles": ["namespace.cql"]
140
>
}`
141
>
142
>
namespace := `CREATE TABLE namespaces(
143
>
id int,
144
>
PRIMARY KEY (id)
145
>
);`
146
>
147
>
dir = rootDir + "/v2.0"
148
>
tb.NoError(os.Mkdir(rootDir+"/v2.0", os.FileMode(0700)))
149
>
err = os.WriteFile(dir+"/manifest.json", []byte(mData), os.FileMode(0600))
150
>
tb.NoError(err)
151
>
err = os.WriteFile(dir+"/namespace.cql", []byte(namespace), os.FileMode(0600))
152
>
tb.NoError(err)
153
>
}
154
155
func (tb *UpdateSchemaTestBase) getCommandBase() []string {