197 lines
4.0 KiB
Go
197 lines
4.0 KiB
Go
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
|
|
}
|