github.com/YousefHaggyHeroku/pack@v1.5.5/internal/fakes/fake_images.go (about)

     1  package fakes
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"path/filepath"
     7  	"testing"
     8  
     9  	"github.com/BurntSushi/toml"
    10  	"github.com/buildpacks/imgutil"
    11  	"github.com/buildpacks/imgutil/fakes"
    12  
    13  	"github.com/YousefHaggyHeroku/pack/internal/archive"
    14  	"github.com/YousefHaggyHeroku/pack/internal/builder"
    15  	"github.com/YousefHaggyHeroku/pack/internal/dist"
    16  	h "github.com/YousefHaggyHeroku/pack/testhelpers"
    17  )
    18  
    19  type FakeImageCreator func(name string, topLayerSha string, identifier imgutil.Identifier) *fakes.Image
    20  
    21  func NewFakeBuilderImage(t *testing.T, tmpDir, name string, stackID, uid, gid string, metadata builder.Metadata, bpLayers dist.BuildpackLayers, order dist.Order, creator FakeImageCreator) *fakes.Image {
    22  	fakeBuilderImage := creator(name, "", nil)
    23  
    24  	h.AssertNil(t, fakeBuilderImage.SetLabel("io.buildpacks.stack.id", stackID))
    25  	h.AssertNil(t, fakeBuilderImage.SetEnv("CNB_USER_ID", uid))
    26  	h.AssertNil(t, fakeBuilderImage.SetEnv("CNB_GROUP_ID", gid))
    27  
    28  	h.AssertNil(t, dist.SetLabel(fakeBuilderImage, "io.buildpacks.builder.metadata", metadata))
    29  	h.AssertNil(t, dist.SetLabel(fakeBuilderImage, "io.buildpacks.buildpack.layers", bpLayers))
    30  
    31  	for bpID, v := range bpLayers {
    32  		for bpVersion, bpLayerInfo := range v {
    33  			bpInfo := dist.BuildpackInfo{
    34  				ID:      bpID,
    35  				Version: bpVersion,
    36  			}
    37  
    38  			buildpackDescriptor := dist.BuildpackDescriptor{
    39  				API:    bpLayerInfo.API,
    40  				Info:   bpInfo,
    41  				Stacks: bpLayerInfo.Stacks,
    42  				Order:  bpLayerInfo.Order,
    43  			}
    44  
    45  			buildpackTar := CreateBuildpackTar(t, tmpDir, buildpackDescriptor)
    46  			err := fakeBuilderImage.AddLayer(buildpackTar)
    47  			h.AssertNil(t, err)
    48  		}
    49  	}
    50  
    51  	h.AssertNil(t, dist.SetLabel(fakeBuilderImage, "io.buildpacks.buildpack.order", order))
    52  
    53  	tarBuilder := archive.TarBuilder{}
    54  	orderTomlBytes := &bytes.Buffer{}
    55  	h.AssertNil(t, toml.NewEncoder(orderTomlBytes).Encode(orderTOML{Order: order}))
    56  	tarBuilder.AddFile("/cnb/order.toml", 0777, archive.NormalizedDateTime, orderTomlBytes.Bytes())
    57  
    58  	orderTar := filepath.Join(tmpDir, fmt.Sprintf("order.%s.toml", h.RandString(8)))
    59  	h.AssertNil(t, tarBuilder.WriteToPath(orderTar, archive.DefaultTarWriterFactory()))
    60  	h.AssertNil(t, fakeBuilderImage.AddLayer(orderTar))
    61  
    62  	return fakeBuilderImage
    63  }
    64  
    65  type orderTOML struct {
    66  	Order dist.Order `toml:"order"`
    67  }