github.com/mef13/migrate/v4@v4.14.3/source/httpfs/partial_driver_test.go (about) 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 }