github.com/buildpacks/pack@v0.33.3-0.20240516162812-884dd1837311/internal/fakes/fake_images.go (about) 1 package fakes 2 3 import ( 4 "bytes" 5 "fmt" 6 "path/filepath" 7 "testing" 8 9 "github.com/BurntSushi/toml" 10 "github.com/buildpacks/imgutil" 11 "github.com/buildpacks/imgutil/fakes" 12 13 "github.com/buildpacks/pack/internal/builder" 14 "github.com/buildpacks/pack/pkg/archive" 15 "github.com/buildpacks/pack/pkg/dist" 16 h "github.com/buildpacks/pack/testhelpers" 17 ) 18 19 type FakeImageCreator func(name string, topLayerSha string, identifier imgutil.Identifier) *fakes.Image 20 21 func NewFakeBuilderImage(t *testing.T, tmpDir, name string, stackID, uid, gid string, metadata builder.Metadata, bpLayers dist.ModuleLayers, order dist.Order, exLayers dist.ModuleLayers, orderExtensions dist.Order, creator FakeImageCreator) *fakes.Image { 22 fakeBuilderImage := creator(name, "", nil) 23 24 h.AssertNil(t, fakeBuilderImage.SetLabel("io.buildpacks.stack.id", stackID)) 25 h.AssertNil(t, fakeBuilderImage.SetEnv("CNB_USER_ID", uid)) 26 h.AssertNil(t, fakeBuilderImage.SetEnv("CNB_GROUP_ID", gid)) 27 28 h.AssertNil(t, dist.SetLabel(fakeBuilderImage, "io.buildpacks.builder.metadata", metadata)) 29 h.AssertNil(t, dist.SetLabel(fakeBuilderImage, "io.buildpacks.buildpack.layers", bpLayers)) 30 31 for bpID, v := range bpLayers { 32 for bpVersion, bpLayerInfo := range v { 33 bpInfo := dist.ModuleInfo{ 34 ID: bpID, 35 Version: bpVersion, 36 } 37 38 buildpackDescriptor := dist.BuildpackDescriptor{ 39 WithAPI: bpLayerInfo.API, 40 WithInfo: bpInfo, 41 WithStacks: bpLayerInfo.Stacks, 42 WithOrder: bpLayerInfo.Order, 43 } 44 45 buildpackTar := CreateBuildpackTar(t, tmpDir, buildpackDescriptor) 46 err := fakeBuilderImage.AddLayer(buildpackTar) 47 h.AssertNil(t, err) 48 } 49 } 50 51 for exID, v := range exLayers { 52 for exVersion, exLayerInfo := range v { 53 exInfo := dist.ModuleInfo{ 54 ID: exID, 55 Version: exVersion, 56 } 57 58 extensionDescriptor := dist.ExtensionDescriptor{ 59 WithAPI: exLayerInfo.API, 60 WithInfo: exInfo, 61 } 62 63 extensionTar := CreateExtensionTar(t, tmpDir, extensionDescriptor) 64 err := fakeBuilderImage.AddLayer(extensionTar) 65 h.AssertNil(t, err) 66 } 67 } 68 69 h.AssertNil(t, dist.SetLabel(fakeBuilderImage, "io.buildpacks.buildpack.order", order)) 70 h.AssertNil(t, dist.SetLabel(fakeBuilderImage, "io.buildpacks.extension.order", orderExtensions)) 71 72 tarBuilder := archive.TarBuilder{} 73 orderTomlBytes := &bytes.Buffer{} 74 h.AssertNil(t, toml.NewEncoder(orderTomlBytes).Encode(orderTOML{Order: order, OrderExtensions: orderExtensions})) 75 tarBuilder.AddFile("/cnb/order.toml", 0777, archive.NormalizedDateTime, orderTomlBytes.Bytes()) 76 77 orderTar := filepath.Join(tmpDir, fmt.Sprintf("order.%s.toml", h.RandString(8))) 78 h.AssertNil(t, tarBuilder.WriteToPath(orderTar, archive.DefaultTarWriterFactory())) 79 h.AssertNil(t, fakeBuilderImage.AddLayer(orderTar)) 80 81 return fakeBuilderImage 82 } 83 84 type orderTOML struct { 85 Order dist.Order `toml:"order"` 86 OrderExtensions dist.Order `toml:"orderExtensions"` 87 }