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  }