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 }