github.com/buildpacks/pack@v0.33.3-0.20240516162812-884dd1837311/internal/commands/untrust_builder_test.go (about) 1 package commands_test 2 3 import ( 4 "bytes" 5 "fmt" 6 "os" 7 "path/filepath" 8 "testing" 9 10 "github.com/heroku/color" 11 "github.com/sclevine/spec" 12 "github.com/sclevine/spec/report" 13 14 "github.com/buildpacks/pack/internal/commands" 15 "github.com/buildpacks/pack/internal/config" 16 "github.com/buildpacks/pack/internal/style" 17 "github.com/buildpacks/pack/pkg/logging" 18 h "github.com/buildpacks/pack/testhelpers" 19 ) 20 21 func TestUntrustBuilderCommand(t *testing.T) { 22 color.Disable(true) 23 defer color.Disable(false) 24 spec.Run(t, "Commands", testUntrustBuilderCommand, spec.Random(), spec.Report(report.Terminal{})) 25 } 26 27 func testUntrustBuilderCommand(t *testing.T, when spec.G, it spec.S) { 28 var ( 29 logger logging.Logger 30 outBuf bytes.Buffer 31 tempPackHome string 32 configPath string 33 configManager configManager 34 ) 35 36 it.Before(func() { 37 var err error 38 39 logger = logging.NewLogWithWriters(&outBuf, &outBuf) 40 41 tempPackHome, err = os.MkdirTemp("", "pack-home") 42 h.AssertNil(t, err) 43 configPath = filepath.Join(tempPackHome, "config.toml") 44 configManager = newConfigManager(t, configPath) 45 }) 46 47 it.After(func() { 48 h.AssertNil(t, os.RemoveAll(tempPackHome)) 49 }) 50 51 when("#UntrustBuilder", func() { 52 when("no builder is provided", func() { 53 it("prints usage", func() { 54 cfg := configManager.configWithTrustedBuilders() 55 command := commands.UntrustBuilder(logger, cfg, configPath) 56 command.SetArgs([]string{}) 57 command.SetOut(&outBuf) 58 59 err := command.Execute() 60 h.AssertError(t, err, "accepts 1 arg(s), received 0") 61 h.AssertContains(t, outBuf.String(), "Usage:") 62 }) 63 }) 64 65 when("builder is already trusted", func() { 66 it("removes builder from the config", func() { 67 builderName := "some-builder" 68 69 cfg := configManager.configWithTrustedBuilders(builderName) 70 command := commands.UntrustBuilder(logger, cfg, configPath) 71 command.SetArgs([]string{builderName}) 72 73 h.AssertNil(t, command.Execute()) 74 75 b, err := os.ReadFile(configPath) 76 h.AssertNil(t, err) 77 h.AssertNotContains(t, string(b), builderName) 78 79 h.AssertContains(t, 80 outBuf.String(), 81 fmt.Sprintf("Builder %s is no longer trusted", style.Symbol(builderName)), 82 ) 83 }) 84 85 it("removes only the named builder when multiple builders are trusted", func() { 86 untrustBuilder := "stop/trusting:me" 87 stillTrustedBuilder := "very/safe/builder" 88 89 cfg := configManager.configWithTrustedBuilders(untrustBuilder, stillTrustedBuilder) 90 command := commands.UntrustBuilder(logger, cfg, configPath) 91 command.SetArgs([]string{untrustBuilder}) 92 93 h.AssertNil(t, command.Execute()) 94 95 b, err := os.ReadFile(configPath) 96 h.AssertNil(t, err) 97 h.AssertContains(t, string(b), stillTrustedBuilder) 98 h.AssertNotContains(t, string(b), untrustBuilder) 99 }) 100 }) 101 102 when("builder wasn't already trusted", func() { 103 it("does nothing and reports builder wasn't trusted", func() { 104 neverTrustedBuilder := "never/trusted-builder" 105 stillTrustedBuilder := "very/safe/builder" 106 107 cfg := configManager.configWithTrustedBuilders(stillTrustedBuilder) 108 command := commands.UntrustBuilder(logger, cfg, configPath) 109 command.SetArgs([]string{neverTrustedBuilder}) 110 111 h.AssertNil(t, command.Execute()) 112 113 b, err := os.ReadFile(configPath) 114 h.AssertNil(t, err) 115 h.AssertContains(t, string(b), stillTrustedBuilder) 116 h.AssertNotContains(t, string(b), neverTrustedBuilder) 117 118 h.AssertContains(t, 119 outBuf.String(), 120 fmt.Sprintf("Builder %s wasn't trusted", style.Symbol(neverTrustedBuilder)), 121 ) 122 }) 123 }) 124 125 when("builder is a suggested builder", func() { 126 it("does nothing and reports that ", func() { 127 builder := "paketobuildpacks/builder-jammy-base" 128 command := commands.UntrustBuilder(logger, config.Config{}, configPath) 129 command.SetArgs([]string{builder}) 130 131 err := command.Execute() 132 h.AssertError(t, err, fmt.Sprintf("Builder %s is a suggested builder, and is trusted by default", style.Symbol(builder))) 133 }) 134 }) 135 }) 136 }