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