@@ -9,12 +9,11 @@ package migrate_test
9
9
import (
10
10
"context"
11
11
"fmt"
12
- "io/ioutil"
13
- "os"
14
- "path/filepath"
12
+ "io/fs"
15
13
"strings"
16
14
"testing"
17
15
16
+ "github.com/psanford/memfs"
18
17
"github.com/scylladb/gocqlx/v2"
19
18
. "github.com/scylladb/gocqlx/v2/gocqlxtest"
20
19
"github.com/scylladb/gocqlx/v2/migrate"
@@ -52,10 +51,7 @@ func TestMigration(t *testing.T) {
52
51
ctx := context .Background ()
53
52
54
53
t .Run ("init" , func (t * testing.T ) {
55
- dir := makeMigrationDir (t , 2 )
56
- defer os .Remove (dir )
57
-
58
- if err := migrate .Migrate (ctx , session , dir ); err != nil {
54
+ if err := migrate .FromFS (ctx , session , makeTestFS (2 )); err != nil {
59
55
t .Fatal (err )
60
56
}
61
57
if c := countMigrations (t , session ); c != 2 {
@@ -64,10 +60,7 @@ func TestMigration(t *testing.T) {
64
60
})
65
61
66
62
t .Run ("update" , func (t * testing.T ) {
67
- dir := makeMigrationDir (t , 4 )
68
- defer os .Remove (dir )
69
-
70
- if err := migrate .Migrate (ctx , session , dir ); err != nil {
63
+ if err := migrate .FromFS (ctx , session , makeTestFS (4 )); err != nil {
71
64
t .Fatal (err )
72
65
}
73
66
if c := countMigrations (t , session ); c != 4 {
@@ -76,23 +69,19 @@ func TestMigration(t *testing.T) {
76
69
})
77
70
78
71
t .Run ("ahead" , func (t * testing.T ) {
79
- dir := makeMigrationDir (t , 2 )
80
- defer os .Remove (dir )
81
-
82
- if err := migrate .Migrate (ctx , session , dir ); err == nil || ! strings .Contains (err .Error (), "ahead" ) {
72
+ err := migrate .FromFS (ctx , session , makeTestFS (2 ))
73
+ if err == nil || ! strings .Contains (err .Error (), "ahead" ) {
83
74
t .Fatal ("expected error" )
84
75
} else {
85
76
t .Log (err )
86
77
}
87
78
})
88
79
89
80
t .Run ("tempered with file" , func (t * testing.T ) {
90
- dir := makeMigrationDir (t , 4 )
91
- defer os .Remove (dir )
92
-
93
- appendMigrationFile (t , dir , 3 , "\n SELECT * FROM bla;\n " )
81
+ f := makeTestFS (4 )
82
+ writeFile (f , 3 , "SELECT * FROM bla;" )
94
83
95
- if err := migrate .Migrate (ctx , session , dir ); err == nil || ! strings .Contains (err .Error (), "tempered" ) {
84
+ if err := migrate .FromFS (ctx , session , f ); err == nil || ! strings .Contains (err .Error (), "tempered" ) {
96
85
t .Fatal ("expected error" )
97
86
} else {
98
87
t .Log (err )
@@ -109,19 +98,11 @@ func TestMigrationNoSemicolon(t *testing.T) {
109
98
t .Fatal (err )
110
99
}
111
100
112
- ctx := context .Background ()
113
-
114
- dir := makeMigrationDir (t , 1 )
115
- defer os .Remove (dir )
101
+ f := makeTestFS (0 )
102
+ f .WriteFile ("0.cql" , []byte (fmt .Sprintf (insertMigrate , 0 )+ ";" + fmt .Sprintf (insertMigrate , 1 )), fs .ModePerm )
116
103
117
- f , err := os .OpenFile (filepath .Join (dir , "0.cql" ), os .O_WRONLY | os .O_APPEND , 0 )
118
- if err != nil {
119
- t .Fatal (err )
120
- }
121
- fmt .Fprintf (f , insertMigrate , 0 ) // note no ; at the end
122
- f .Close ()
123
-
124
- if err := migrate .Migrate (ctx , session , dir ); err != nil {
104
+ ctx := context .Background ()
105
+ if err := migrate .FromFS (ctx , session , f ); err != nil {
125
106
t .Fatal (err )
126
107
}
127
108
if c := countMigrations (t , session ); c != 2 {
@@ -231,62 +212,38 @@ func TestMigrationCallback(t *testing.T) {
231
212
ctx := context .Background ()
232
213
233
214
t .Run ("init" , func (t * testing.T ) {
234
- dir := makeMigrationDir (t , 2 )
235
- defer os .Remove (dir )
215
+ f := makeTestFS (2 )
236
216
reset ()
237
217
238
- if err := migrate .Migrate (ctx , session , dir ); err != nil {
218
+ if err := migrate .FromFS (ctx , session , f ); err != nil {
239
219
t .Fatal (err )
240
220
}
241
221
assertCallbacks (t , 2 , 2 , 0 )
242
222
})
243
223
244
224
t .Run ("no duplicate calls" , func (t * testing.T ) {
245
- dir := makeMigrationDir (t , 4 )
246
- defer os .Remove (dir )
225
+ f := makeTestFS (4 )
247
226
reset ()
248
227
249
- if err := migrate .Migrate (ctx , session , dir ); err != nil {
228
+ if err := migrate .FromFS (ctx , session , f ); err != nil {
250
229
t .Fatal (err )
251
230
}
252
231
assertCallbacks (t , 2 , 2 , 0 )
253
232
})
254
233
255
234
t .Run ("in calls" , func (t * testing.T ) {
256
- dir := makeMigrationDir (t , 4 )
257
- defer os .Remove (dir )
235
+ f := makeTestFS (4 )
236
+ writeFile (f , 4 , "\n -- CALL Foo;\n " )
237
+ writeFile (f , 5 , "\n -- CALL Bar;\n " )
258
238
reset ()
259
239
260
- appendMigrationFile (t , dir , 4 , "\n -- CALL Foo;\n " )
261
- appendMigrationFile (t , dir , 5 , "\n -- CALL Bar;\n " )
262
-
263
- if err := migrate .Migrate (ctx , session , dir ); err != nil {
240
+ if err := migrate .FromFS (ctx , session , f ); err != nil {
264
241
t .Fatal (err )
265
242
}
266
243
assertCallbacks (t , 2 , 2 , 2 )
267
244
})
268
245
}
269
246
270
- func makeMigrationDir (tb testing.TB , n int ) (dir string ) {
271
- tb .Helper ()
272
-
273
- dir , err := ioutil .TempDir ("" , "gocqlx_migrate" )
274
- if err != nil {
275
- tb .Fatal (err )
276
- }
277
-
278
- for i := 0 ; i < n ; i ++ {
279
- path := migrateFilePath (dir , i )
280
- cql := []byte (fmt .Sprintf (insertMigrate , i ) + ";" )
281
- if err := ioutil .WriteFile (path , cql , os .ModePerm ); err != nil {
282
- os .Remove (dir )
283
- tb .Fatal (err )
284
- }
285
- }
286
-
287
- return dir
288
- }
289
-
290
247
func countMigrations (tb testing.TB , session gocqlx.Session ) int {
291
248
tb .Helper ()
292
249
@@ -297,17 +254,14 @@ func countMigrations(tb testing.TB, session gocqlx.Session) int {
297
254
return v
298
255
}
299
256
300
- func appendMigrationFile (tb testing.TB , dir string , i int , text string ) {
301
- path := migrateFilePath (dir , i )
302
- f , err := os .OpenFile (path , os .O_WRONLY | os .O_CREATE | os .O_APPEND , os .ModePerm )
303
- if err != nil {
304
- tb .Fatal (err )
305
- }
306
- if _ , err := f .WriteString (text ); err != nil {
307
- tb .Fatal (err )
257
+ func makeTestFS (n int ) * memfs.FS {
258
+ f := memfs .New ()
259
+ for i := 0 ; i < n ; i ++ {
260
+ writeFile (f , i , fmt .Sprintf (insertMigrate , i )+ ";" )
308
261
}
262
+ return f
309
263
}
310
264
311
- func migrateFilePath ( dir string , i int ) string {
312
- return filepath . Join ( dir , fmt .Sprint (i , ".cql" ))
265
+ func writeFile ( f * memfs. FS , i int , text string ) {
266
+ f . WriteFile ( fmt .Sprint (i , ".cql" ), [] byte ( text ), fs . ModePerm )
313
267
}
0 commit comments