github.com/buildpacks/pack@v0.33.3-0.20240516162812-884dd1837311/internal/fakes/fake_buildpack_blob.go (about)

     1  package fakes
     2  
     3  import (
     4  	"bytes"
     5  	"io"
     6  	"time"
     7  
     8  	"github.com/BurntSushi/toml"
     9  
    10  	"github.com/buildpacks/pack/pkg/archive"
    11  	"github.com/buildpacks/pack/pkg/blob"
    12  	"github.com/buildpacks/pack/pkg/buildpack"
    13  )
    14  
    15  type fakeBuildpackBlob struct {
    16  	descriptor buildpack.Descriptor
    17  	chmod      int64
    18  }
    19  
    20  // NewFakeBuildpackBlob creates a fake blob with contents:
    21  //
    22  //		\_ buildpack.toml
    23  //		\_ bin
    24  //		\_ bin/build
    25  //	 	build-contents
    26  //		\_ bin/detect
    27  //	 	detect-contents
    28  func NewFakeBuildpackBlob(descriptor buildpack.Descriptor, chmod int64) (blob.Blob, error) {
    29  	return &fakeBuildpackBlob{
    30  		descriptor: descriptor,
    31  		chmod:      chmod,
    32  	}, nil
    33  }
    34  
    35  func (b *fakeBuildpackBlob) Open() (reader io.ReadCloser, err error) {
    36  	buf := &bytes.Buffer{}
    37  	if err = toml.NewEncoder(buf).Encode(b.descriptor); err != nil {
    38  		return nil, err
    39  	}
    40  
    41  	tarBuilder := archive.TarBuilder{}
    42  
    43  	tarBuilder.AddFile("buildpack.toml", b.chmod, time.Now(), buf.Bytes())
    44  	tarBuilder.AddDir("bin", b.chmod, time.Now())
    45  	tarBuilder.AddFile("bin/build", b.chmod, time.Now(), []byte("build-contents"))
    46  	tarBuilder.AddFile("bin/detect", b.chmod, time.Now(), []byte("detect-contents"))
    47  
    48  	return tarBuilder.Reader(archive.DefaultTarWriterFactory()), err
    49  }