...
1 package httpfs_test
2
3 import (
4 "errors"
5 "net/http"
6 "strings"
7 "testing"
8
9 "github.com/golang-migrate/migrate/v4/source"
10 "github.com/golang-migrate/migrate/v4/source/httpfs"
11 st "github.com/golang-migrate/migrate/v4/source/testing"
12 )
13
14 type driver struct{ httpfs.PartialDriver }
15
16 func (d *driver) Open(url string) (source.Driver, error) { return nil, errors.New("X") }
17
18 type driverExample struct {
19 httpfs.PartialDriver
20 }
21
22 func (d *driverExample) Open(url string) (source.Driver, error) {
23 parts := strings.Split(url, ":")
24 dir := parts[0]
25 path := ""
26 if len(parts) >= 2 {
27 path = parts[1]
28 }
29
30 var de driverExample
31 return &de, de.Init(http.Dir(dir), path)
32 }
33
34 func TestDriverExample(t *testing.T) {
35 d, err := (*driverExample)(nil).Open("testdata:sql")
36 if err != nil {
37 t.Errorf("Open() returned error: %s", err)
38 }
39 st.Test(t, d)
40 }
41
42 func TestPartialDriverInit(t *testing.T) {
43 tests := []struct {
44 name string
45 fs http.FileSystem
46 path string
47 ok bool
48 }{
49 {
50 name: "valid dir and empty path",
51 fs: http.Dir("testdata/sql"),
52 ok: true,
53 },
54 {
55 name: "valid dir and non-empty path",
56 fs: http.Dir("testdata"),
57 path: "sql",
58 ok: true,
59 },
60 {
61 name: "invalid dir",
62 fs: http.Dir("does-not-exist"),
63 },
64 {
65 name: "file instead of dir",
66 fs: http.Dir("testdata/sql/1_foobar.up.sql"),
67 },
68 {
69 name: "dir with duplicates",
70 fs: http.Dir("testdata/duplicates"),
71 },
72 }
73
74 for _, test := range tests {
75 t.Run(test.name, func(t *testing.T) {
76 var d driver
77 err := d.Init(test.fs, test.path)
78 if test.ok {
79 if err != nil {
80 t.Errorf("Init() returned error %s", err)
81 }
82 st.Test(t, &d)
83 if err = d.Close(); err != nil {
84 t.Errorf("Init().Close() returned error %s", err)
85 }
86 } else {
87 if err == nil {
88 t.Errorf("Init() expected error but did not get one")
89 }
90 }
91 })
92 }
93
94 }
95
96 func TestFirstWithNoMigrations(t *testing.T) {
97 var d driver
98 fs := http.Dir("testdata/no-migrations")
99
100 if err := d.Init(fs, ""); err != nil {
101 t.Errorf("No error on Init() expected, got: %v", err)
102 }
103
104 if _, err := d.First(); err == nil {
105 t.Errorf("Expected error on First(), got: %v", err)
106 }
107 }
108
View as plain text