github.com/YousefHaggyHeroku/pack@v1.5.5/internal/dist/buildpack_descriptor_test.go (about) 1 package dist_test 2 3 import ( 4 "testing" 5 6 "github.com/heroku/color" 7 "github.com/sclevine/spec" 8 "github.com/sclevine/spec/report" 9 10 "github.com/YousefHaggyHeroku/pack/internal/dist" 11 h "github.com/YousefHaggyHeroku/pack/testhelpers" 12 ) 13 14 func TestBuildpackDescriptor(t *testing.T) { 15 color.Disable(true) 16 defer color.Disable(false) 17 spec.Run(t, "testBuildpackDescriptor", testBuildpackDescriptor, spec.Parallel(), spec.Report(report.Terminal{})) 18 } 19 20 func testBuildpackDescriptor(t *testing.T, when spec.G, it spec.S) { 21 when("#EnsureStackSupport", func() { 22 when("not validating against run image mixins", func() { 23 it("ignores run-only mixins", func() { 24 bp := dist.BuildpackDescriptor{ 25 Info: dist.BuildpackInfo{ 26 ID: "some.buildpack.id", 27 Version: "some.buildpack.version", 28 }, 29 Stacks: []dist.Stack{{ 30 ID: "some.stack.id", 31 Mixins: []string{"mixinA", "build:mixinB", "run:mixinD"}, 32 }}, 33 } 34 35 providedMixins := []string{"mixinA", "build:mixinB", "mixinC"} 36 h.AssertNil(t, bp.EnsureStackSupport("some.stack.id", providedMixins, false)) 37 }) 38 39 it("returns an error with any missing (and non-ignored) mixins", func() { 40 bp := dist.BuildpackDescriptor{ 41 Info: dist.BuildpackInfo{ 42 ID: "some.buildpack.id", 43 Version: "some.buildpack.version", 44 }, 45 Stacks: []dist.Stack{{ 46 ID: "some.stack.id", 47 Mixins: []string{"mixinX", "mixinY", "run:mixinZ"}, 48 }}, 49 } 50 51 providedMixins := []string{"mixinA", "mixinB"} 52 err := bp.EnsureStackSupport("some.stack.id", providedMixins, false) 53 54 h.AssertError(t, err, "buildpack 'some.buildpack.id@some.buildpack.version' requires missing mixin(s): mixinX, mixinY") 55 }) 56 }) 57 58 when("validating against run image mixins", func() { 59 it("requires run-only mixins", func() { 60 bp := dist.BuildpackDescriptor{ 61 Info: dist.BuildpackInfo{ 62 ID: "some.buildpack.id", 63 Version: "some.buildpack.version", 64 }, 65 Stacks: []dist.Stack{{ 66 ID: "some.stack.id", 67 Mixins: []string{"mixinA", "build:mixinB", "run:mixinD"}, 68 }}, 69 } 70 71 providedMixins := []string{"mixinA", "build:mixinB", "mixinC", "run:mixinD"} 72 73 h.AssertNil(t, bp.EnsureStackSupport("some.stack.id", providedMixins, true)) 74 }) 75 76 it("returns an error with any missing mixins", func() { 77 bp := dist.BuildpackDescriptor{ 78 Info: dist.BuildpackInfo{ 79 ID: "some.buildpack.id", 80 Version: "some.buildpack.version", 81 }, 82 Stacks: []dist.Stack{{ 83 ID: "some.stack.id", 84 Mixins: []string{"mixinX", "mixinY", "run:mixinZ"}, 85 }}, 86 } 87 88 providedMixins := []string{"mixinA", "mixinB"} 89 90 err := bp.EnsureStackSupport("some.stack.id", providedMixins, true) 91 92 h.AssertError(t, err, "buildpack 'some.buildpack.id@some.buildpack.version' requires missing mixin(s): mixinX, mixinY, run:mixinZ") 93 }) 94 }) 95 96 it("returns an error when buildpack does not support stack", func() { 97 bp := dist.BuildpackDescriptor{ 98 Info: dist.BuildpackInfo{ 99 ID: "some.buildpack.id", 100 Version: "some.buildpack.version", 101 }, 102 Stacks: []dist.Stack{{ 103 ID: "some.stack.id", 104 Mixins: []string{"mixinX", "mixinY"}, 105 }}, 106 } 107 108 err := bp.EnsureStackSupport("some.nonexistent.stack.id", []string{"mixinA"}, true) 109 110 h.AssertError(t, err, "buildpack 'some.buildpack.id@some.buildpack.version' does not support stack 'some.nonexistent.stack.id") 111 }) 112 113 it("skips validating order buildpack", func() { 114 bp := dist.BuildpackDescriptor{ 115 Info: dist.BuildpackInfo{ 116 ID: "some.buildpack.id", 117 Version: "some.buildpack.version", 118 }, 119 Stacks: []dist.Stack{}, 120 } 121 122 h.AssertNil(t, bp.EnsureStackSupport("some.stack.id", []string{"mixinA"}, true)) 123 }) 124 }) 125 }