github.com/YousefHaggyHeroku/pack@v1.5.5/internal/buildpackage/oci_layout_package_test.go (about) 1 package buildpackage_test 2 3 import ( 4 "fmt" 5 "path/filepath" 6 "testing" 7 8 "github.com/heroku/color" 9 "github.com/sclevine/spec" 10 "github.com/sclevine/spec/report" 11 12 "github.com/buildpacks/lifecycle/api" 13 14 "github.com/YousefHaggyHeroku/pack/internal/archive" 15 "github.com/YousefHaggyHeroku/pack/internal/blob" 16 "github.com/YousefHaggyHeroku/pack/internal/buildpackage" 17 "github.com/YousefHaggyHeroku/pack/internal/dist" 18 "github.com/YousefHaggyHeroku/pack/internal/fakes" 19 h "github.com/YousefHaggyHeroku/pack/testhelpers" 20 ) 21 22 func TestOCILayoutPackage(t *testing.T) { 23 color.Disable(true) 24 defer color.Disable(false) 25 spec.Run(t, "Extract", testOCILayoutPackage, spec.Parallel(), spec.Report(report.Terminal{})) 26 } 27 28 func testOCILayoutPackage(t *testing.T, when spec.G, it spec.S) { 29 when("#BuildpacksFromOCILayoutBlob", func() { 30 it("extracts buildpacks", func() { 31 mainBP, depBPs, err := buildpackage.BuildpacksFromOCILayoutBlob(blob.NewBlob(filepath.Join("testdata", "hello-universe.cnb"))) 32 h.AssertNil(t, err) 33 34 h.AssertEq(t, mainBP.Descriptor().Info.ID, "io.buildpacks.samples.hello-universe") 35 h.AssertEq(t, mainBP.Descriptor().Info.Version, "0.0.1") 36 h.AssertEq(t, len(depBPs), 2) 37 }) 38 39 it("provides readable blobs", func() { 40 mainBP, depBPs, err := buildpackage.BuildpacksFromOCILayoutBlob(blob.NewBlob(filepath.Join("testdata", "hello-universe.cnb"))) 41 h.AssertNil(t, err) 42 43 for _, bp := range append([]dist.Buildpack{mainBP}, depBPs...) { 44 reader, err := bp.Open() 45 h.AssertNil(t, err) 46 47 _, contents, err := archive.ReadTarEntry( 48 reader, 49 fmt.Sprintf("/cnb/buildpacks/%s/%s/buildpack.toml", 50 bp.Descriptor().Info.ID, 51 bp.Descriptor().Info.Version, 52 ), 53 ) 54 h.AssertNil(t, err) 55 h.AssertContains(t, string(contents), bp.Descriptor().Info.ID) 56 h.AssertContains(t, string(contents), bp.Descriptor().Info.Version) 57 } 58 }) 59 }) 60 61 when("#IsOCILayoutBlob", func() { 62 when("is an OCI layout blob", func() { 63 it("returns true", func() { 64 isOCILayoutBlob, err := buildpackage.IsOCILayoutBlob(blob.NewBlob(filepath.Join("testdata", "hello-universe.cnb"))) 65 h.AssertNil(t, err) 66 h.AssertEq(t, isOCILayoutBlob, true) 67 }) 68 }) 69 70 when("is NOT an OCI layout blob", func() { 71 it("returns false", func() { 72 buildpackBlob, err := fakes.NewFakeBuildpackBlob(dist.BuildpackDescriptor{ 73 API: api.MustParse("0.3"), 74 Info: dist.BuildpackInfo{ 75 ID: "bp.id", 76 Version: "bp.version", 77 }, 78 Stacks: []dist.Stack{{}}, 79 Order: nil, 80 }, 0755) 81 h.AssertNil(t, err) 82 83 isOCILayoutBlob, err := buildpackage.IsOCILayoutBlob(buildpackBlob) 84 h.AssertNil(t, err) 85 h.AssertEq(t, isOCILayoutBlob, false) 86 }) 87 }) 88 }) 89 }