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 }