github.com/buildpacks/pack@v0.33.3-0.20240516162812-884dd1837311/internal/commands/report_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/sclevine/spec" 11 "github.com/sclevine/spec/report" 12 "github.com/spf13/cobra" 13 14 "github.com/buildpacks/pack/internal/commands" 15 "github.com/buildpacks/pack/pkg/logging" 16 h "github.com/buildpacks/pack/testhelpers" 17 ) 18 19 func TestReport(t *testing.T) { 20 spec.Run(t, "ReportCommand", testReportCommand, spec.Random(), spec.Report(report.Terminal{})) 21 } 22 23 func testReportCommand(t *testing.T, when spec.G, it spec.S) { 24 var ( 25 command *cobra.Command 26 logger logging.Logger 27 outBuf bytes.Buffer 28 tempPackHome string 29 packConfigPath string 30 tempPackEmptyHome string 31 testVersion = "1.2.3" 32 ) 33 34 it.Before(func() { 35 var err error 36 logger = logging.NewLogWithWriters(&outBuf, &outBuf) 37 38 tempPackHome, err = os.MkdirTemp("", "pack-home") 39 h.AssertNil(t, err) 40 41 packConfigPath = filepath.Join(tempPackHome, "config.toml") 42 command = commands.Report(logger, testVersion, packConfigPath) 43 command.SetArgs([]string{}) 44 h.AssertNil(t, os.WriteFile(packConfigPath, []byte(` 45 default-builder-image = "some/image" 46 experimental = true 47 48 [[run-images]] 49 image = "super-secret-project/run" 50 mirrors = ["gcr.io/super-secret-project/run", "secret.io/super-secret-project/run"] 51 52 [[trusted-builders]] 53 name = "super-secret-project/builder" 54 55 [[registries]] 56 name = "secret-registry" 57 type = "github" 58 url = "https://github.com/super-secret-project/registry" 59 `), 0666)) 60 61 tempPackEmptyHome, err = os.MkdirTemp("", "") 62 h.AssertNil(t, err) 63 }) 64 65 it.After(func() { 66 h.AssertNil(t, os.RemoveAll(tempPackHome)) 67 h.AssertNil(t, os.RemoveAll(tempPackEmptyHome)) 68 }) 69 70 when("#ReportCommand", func() { 71 when("config.toml is present", func() { 72 it("presents output", func() { 73 h.AssertNil(t, command.Execute()) 74 h.AssertContains(t, outBuf.String(), `experimental = true`) 75 h.AssertContains(t, outBuf.String(), `Version: `+testVersion) 76 77 h.AssertContains(t, outBuf.String(), `default-builder-image = "[REDACTED]"`) 78 h.AssertContains(t, outBuf.String(), `name = "[REDACTED]"`) 79 h.AssertContains(t, outBuf.String(), `url = "[REDACTED]"`) 80 h.AssertContains(t, outBuf.String(), `image = "[REDACTED]"`) 81 h.AssertContains(t, outBuf.String(), `mirrors = ["[REDACTED]", "[REDACTED]"]`) 82 83 h.AssertNotContains(t, outBuf.String(), `default-builder-image = "some/image"`) 84 h.AssertNotContains(t, outBuf.String(), `image = "super-secret-project/run"`) 85 h.AssertNotContains(t, outBuf.String(), `mirrors = ["gcr.io/super-secret-project/run", "secret.io/super-secret-project/run"]`) 86 h.AssertNotContains(t, outBuf.String(), `name = "super-secret-project/builder"`) 87 h.AssertNotContains(t, outBuf.String(), `name = "secret-registry"`) 88 h.AssertNotContains(t, outBuf.String(), `url = "https://github.com/super-secret-project/registry"`) 89 }) 90 91 it("doesn't sanitize output if explicit", func() { 92 command.SetArgs([]string{"-e"}) 93 h.AssertNil(t, command.Execute()) 94 h.AssertContains(t, outBuf.String(), `experimental = true`) 95 h.AssertContains(t, outBuf.String(), `Version: `+testVersion) 96 97 h.AssertNotContains(t, outBuf.String(), `default-builder-image = "[REDACTED]"`) 98 h.AssertNotContains(t, outBuf.String(), `name = "[REDACTED]"`) 99 h.AssertNotContains(t, outBuf.String(), `url = "[REDACTED]"`) 100 h.AssertNotContains(t, outBuf.String(), `image = "[REDACTED]"`) 101 h.AssertNotContains(t, outBuf.String(), `mirrors = ["[REDACTED]", "[REDACTED]"]`) 102 103 h.AssertContains(t, outBuf.String(), `default-builder-image = "some/image"`) 104 h.AssertContains(t, outBuf.String(), `image = "super-secret-project/run"`) 105 h.AssertContains(t, outBuf.String(), `mirrors = ["gcr.io/super-secret-project/run", "secret.io/super-secret-project/run"]`) 106 h.AssertContains(t, outBuf.String(), `name = "super-secret-project/builder"`) 107 h.AssertContains(t, outBuf.String(), `name = "secret-registry"`) 108 h.AssertContains(t, outBuf.String(), `url = "https://github.com/super-secret-project/registry"`) 109 }) 110 }) 111 112 when("config.toml is not present", func() { 113 it("logs a message", func() { 114 command = commands.Report(logger, testVersion, filepath.Join(tempPackEmptyHome, "/config.toml")) 115 command.SetArgs([]string{}) 116 h.AssertNil(t, command.Execute()) 117 h.AssertContains(t, outBuf.String(), fmt.Sprintf("(no config file found at %s)", filepath.Join(tempPackEmptyHome, "config.toml"))) 118 }) 119 }) 120 }) 121 }