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