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  }