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 }