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

     1  package fakes
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"io"
     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 fakeBuildpack struct {
    15  	descriptor dist.BuildpackDescriptor
    16  	chmod      int64
    17  }
    18  
    19  // NewFakeBuildpack creates a fake buildpacks with contents:
    20  //
    21  // 	\_ /cnbs/buildpacks/{ID}
    22  // 	\_ /cnbs/buildpacks/{ID}/{version}
    23  // 	\_ /cnbs/buildpacks/{ID}/{version}/buildpack.toml
    24  // 	\_ /cnbs/buildpacks/{ID}/{version}/bin
    25  // 	\_ /cnbs/buildpacks/{ID}/{version}/bin/build
    26  //  	build-contents
    27  // 	\_ /cnbs/buildpacks/{ID}/{version}/bin/detect
    28  //  	detect-contents
    29  func NewFakeBuildpack(descriptor dist.BuildpackDescriptor, chmod int64) (dist.Buildpack, error) {
    30  	return &fakeBuildpack{
    31  		descriptor: descriptor,
    32  		chmod:      chmod,
    33  	}, nil
    34  }
    35  
    36  func (b *fakeBuildpack) Descriptor() dist.BuildpackDescriptor {
    37  	return b.descriptor
    38  }
    39  
    40  func (b *fakeBuildpack) Open() (io.ReadCloser, error) {
    41  	buf := &bytes.Buffer{}
    42  	if err := toml.NewEncoder(buf).Encode(b.descriptor); err != nil {
    43  		return nil, err
    44  	}
    45  
    46  	tarBuilder := archive.TarBuilder{}
    47  	ts := archive.NormalizedDateTime
    48  	tarBuilder.AddDir(fmt.Sprintf("/cnb/buildpacks/%s", b.descriptor.EscapedID()), b.chmod, ts)
    49  	bpDir := fmt.Sprintf("/cnb/buildpacks/%s/%s", b.descriptor.EscapedID(), b.descriptor.Info.Version)
    50  	tarBuilder.AddDir(bpDir, b.chmod, ts)
    51  	tarBuilder.AddFile(bpDir+"/buildpack.toml", b.chmod, ts, buf.Bytes())
    52  
    53  	if len(b.descriptor.Order) == 0 {
    54  		tarBuilder.AddDir(bpDir+"/bin", b.chmod, ts)
    55  		tarBuilder.AddFile(bpDir+"/bin/build", b.chmod, ts, []byte("build-contents"))
    56  		tarBuilder.AddFile(bpDir+"/bin/detect", b.chmod, ts, []byte("detect-contents"))
    57  	}
    58  
    59  	return tarBuilder.Reader(archive.DefaultTarWriterFactory()), nil
    60  }