snapshot of https://github.com/golang-migrate/migrate.git (master, 2026-09-15; blobs > 131072B omitted)
This commit is contained in:
196
source/pkger/pkger_test.go
Normal file
196
source/pkger/pkger_test.go
Normal file
@@ -0,0 +1,196 @@
|
||||
package pkger
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/gobuffalo/here"
|
||||
st "github.com/golang-migrate/migrate/v4/source/testing"
|
||||
"github.com/markbates/pkger"
|
||||
"github.com/markbates/pkger/pkging"
|
||||
"github.com/markbates/pkger/pkging/mem"
|
||||
)
|
||||
|
||||
func Test(t *testing.T) {
|
||||
t.Run("WithInstance", func(t *testing.T) {
|
||||
i := testInstance(t)
|
||||
|
||||
createPkgerFile(t, i, "/1_foobar.up.sql")
|
||||
createPkgerFile(t, i, "/1_foobar.down.sql")
|
||||
createPkgerFile(t, i, "/3_foobar.up.sql")
|
||||
createPkgerFile(t, i, "/4_foobar.up.sql")
|
||||
createPkgerFile(t, i, "/4_foobar.down.sql")
|
||||
createPkgerFile(t, i, "/5_foobar.down.sql")
|
||||
createPkgerFile(t, i, "/7_foobar.up.sql")
|
||||
createPkgerFile(t, i, "/7_foobar.down.sql")
|
||||
|
||||
d, err := WithInstance(i, "/")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
st.Test(t, d)
|
||||
})
|
||||
|
||||
t.Run("Open", func(t *testing.T) {
|
||||
i := testInstance(t)
|
||||
|
||||
createPkgerFile(t, i, "/1_foobar.up.sql")
|
||||
createPkgerFile(t, i, "/1_foobar.down.sql")
|
||||
createPkgerFile(t, i, "/3_foobar.up.sql")
|
||||
createPkgerFile(t, i, "/4_foobar.up.sql")
|
||||
createPkgerFile(t, i, "/4_foobar.down.sql")
|
||||
createPkgerFile(t, i, "/5_foobar.down.sql")
|
||||
createPkgerFile(t, i, "/7_foobar.up.sql")
|
||||
createPkgerFile(t, i, "/7_foobar.down.sql")
|
||||
|
||||
registerPackageLevelInstance(t, i)
|
||||
|
||||
d, err := (&Pkger{}).Open("pkger:///")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
st.Test(t, d)
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
func TestWithInstance(t *testing.T) {
|
||||
t.Run("Subdir", func(t *testing.T) {
|
||||
i := testInstance(t)
|
||||
|
||||
// Make sure the relative root exists so that httpfs.PartialDriver can
|
||||
// initialize.
|
||||
createPkgerSubdir(t, i, "/subdir")
|
||||
|
||||
_, err := WithInstance(i, "/subdir")
|
||||
if err != nil {
|
||||
t.Fatal("")
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("NilInstance", func(t *testing.T) {
|
||||
_, err := WithInstance(nil, "")
|
||||
if err == nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("FailInit", func(t *testing.T) {
|
||||
i := testInstance(t)
|
||||
|
||||
_, err := WithInstance(i, "/fail")
|
||||
if err == nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("FailWithoutMigrations", func(t *testing.T) {
|
||||
i := testInstance(t)
|
||||
|
||||
createPkgerSubdir(t, i, "/")
|
||||
|
||||
d, err := WithInstance(i, "/")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if _, err := d.First(); !errors.Is(err, os.ErrNotExist) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
func TestOpen(t *testing.T) {
|
||||
|
||||
t.Run("InvalidURL", func(t *testing.T) {
|
||||
_, err := (&Pkger{}).Open(":///")
|
||||
if err == nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("Root", func(t *testing.T) {
|
||||
_, err := (&Pkger{}).Open("pkger:///")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("FailInit", func(t *testing.T) {
|
||||
_, err := (&Pkger{}).Open("pkger:///subdir")
|
||||
if err == nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
})
|
||||
|
||||
i := testInstance(t)
|
||||
createPkgerSubdir(t, i, "/subdir")
|
||||
|
||||
// Note that this registers the instance globally so anything run after
|
||||
// this will have access to everything container in the registered
|
||||
// instance.
|
||||
registerPackageLevelInstance(t, i)
|
||||
|
||||
t.Run("Subdir", func(t *testing.T) {
|
||||
_, err := (&Pkger{}).Open("pkger:///subdir")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestClose(t *testing.T) {
|
||||
d, err := (&Pkger{}).Open("pkger:///")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := d.Close(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func registerPackageLevelInstance(t *testing.T, pkg pkging.Pkger) {
|
||||
if err := pkger.Apply(pkg, nil); err != nil {
|
||||
t.Fatalf("failed to register pkger instance: %v\n", err)
|
||||
}
|
||||
}
|
||||
|
||||
func testInstance(t *testing.T) pkging.Pkger {
|
||||
pkg, err := inMemoryPkger()
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create an pkging.Pkger instance: %v\n", err)
|
||||
}
|
||||
|
||||
return pkg
|
||||
}
|
||||
|
||||
func createPkgerSubdir(t *testing.T, pkg pkging.Pkger, subdir string) {
|
||||
if err := pkg.MkdirAll(subdir, os.ModePerm); err != nil {
|
||||
t.Fatalf("failed to create pkger subdir %q: %v\n", subdir, err)
|
||||
}
|
||||
}
|
||||
|
||||
func createPkgerFile(t *testing.T, pkg pkging.Pkger, name string) {
|
||||
_, err := pkg.Create(name)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create pkger file %q: %v\n", name, err)
|
||||
}
|
||||
}
|
||||
|
||||
func inMemoryPkger() (*mem.Pkger, error) {
|
||||
info, err := here.New().Current()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
pkg, err := mem.New(info)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return pkg, nil
|
||||
}
|
||||
Reference in New Issue
Block a user