github.com/YousefHaggyHeroku/pack@v1.5.5/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/YousefHaggyHeroku/pack/internal/archive"
    11  	"github.com/YousefHaggyHeroku/pack/internal/dist"
    12  )
    13  
    14  type fakeBuildpackBlob struct {
    15  	descriptor dist.BuildpackDescriptor
    16  	chmod      int64
    17  }
    18  
    19  // NewFakeBuildpackBlob creates a fake blob with contents:
    20  //
    21  // 	\_ buildpack.toml
    22  // 	\_ bin
    23  // 	\_ bin/build
    24  //  	build-contents
    25  // 	\_ bin/detect
    26  //  	detect-contents
    27  func NewFakeBuildpackBlob(descriptor dist.BuildpackDescriptor, chmod int64) (dist.Blob, error) {
    28  	return &fakeBuildpackBlob{
    29  		descriptor: descriptor,
    30  		chmod:      chmod,
    31  	}, nil
    32  }
    33  
    34  func (b *fakeBuildpackBlob) Open() (reader io.ReadCloser, err error) {
    35  	buf := &bytes.Buffer{}
    36  	if err = toml.NewEncoder(buf).Encode(b.descriptor); err != nil {
    37  		return nil, err
    38  	}
    39  
    40  	tarBuilder := archive.TarBuilder{}
    41  
    42  	tarBuilder.AddFile("buildpack.toml", b.chmod, time.Now(), buf.Bytes())
    43  	tarBuilder.AddDir("bin", b.chmod, time.Now())
    44  	tarBuilder.AddFile("bin/build", b.chmod, time.Now(), []byte("build-contents"))
    45  	tarBuilder.AddFile("bin/detect", b.chmod, time.Now(), []byte("detect-contents"))
    46  
    47  	return tarBuilder.Reader(archive.DefaultTarWriterFactory()), err
    48  }