package pack import ( "fmt" "io/fs" "os" "testing" "github.com/google/go-containerregistry/pkg/name" "github.com/stretchr/testify/assert" "gotest.tools/v3/icmd" "edge-infra.dev/pkg/f8n/warehouse/lift/cmd/internal/lifttest" "edge-infra.dev/pkg/f8n/warehouse/whtest/registry" "edge-infra.dev/pkg/k8s/kustomize" "edge-infra.dev/pkg/lib/build/bazel" "edge-infra.dev/test/fixtures" ) var path *fixtures.Path func TestMain(m *testing.M) { var err error path, err = fixtures.Layout() if err != nil { panic(err) } os.Exit(m.Run()) } func TestPackCmd(t *testing.T) { dir, err := bazel.NewTestTmpDir("pack-test") if err != nil { t.Fatal(err) } defer os.RemoveAll(dir) lifttest.Setup(t, dir) path, err := lifttest.CreateLiftBinary() if err != nil { t.Fatal(err) } result := icmd.RunCommand(path, "pack", "-h") fmt.Println(result.String()) icmd.RunCommand(path).Assert(t, icmd.Success) } func TestResolvePalletPaths(t *testing.T) { fs, err := fs.Sub(fixtures.PalletFixtures, "warehouse/src") assert.NoError(t, err) kfs := &kustomize.FS{FS: fs} tcs := map[string]struct { path string err bool }{ "single valid path": { path: "pallets/real/edge/datasync/shoot", err: false, }, "single valid path with pallet.yaml": { path: "pallets/real/edge/datasync/shoot/pallet.yaml", err: false, }, "recursive valid path": { path: "pallets/real/edge/datasync/...", err: false, }, "recursive invalid path": { path: "pallets/real/invalid/...", err: true, }, } for test, tc := range tcs { t.Run(test, func(t *testing.T) { actual, err := resolvePalletPaths(tc.path, kfs) if tc.err { assert.Error(t, err) } else { assert.NoError(t, err) } for _, path := range actual { assert.True(t, kfs.Exists(path)) } }) } } func TestPush(t *testing.T) { u, registry, err := registry.New() if err != nil { t.Fatal(err) } t.Setenv("WAREHOUSE_REPO", u.Host) dir, err := bazel.NewTestTmpDir("pack-test") if err != nil { t.Fatal(err) } defer os.RemoveAll(dir) lifttest.Setup(t, dir, lifttest.WithFixtures()) path, err := lifttest.CreateLiftBinary() if err != nil { t.Fatal(err) } badResult := icmd.RunCommand(path, "pack", "-push", "pallets/real/does-not-exist") assert.Error(t, badResult.Error) result := icmd.RunCommand(path, "pack", "-push", "pallets/real/external-secrets") assert.NoError(t, result.Error) icmd.RunCommand(path).Assert(t, icmd.Success) ref, err := name.ParseReference(fmt.Sprintf("%s/test/external-secrets:latest", u.Host)) if err != nil { t.Fatal(err) } t.Log(ref) registry.Close() }