diff --git a/pkg/logger/logger.go b/pkg/logger/logger.go new file mode 100644 index 00000000000..2cfa1265ed3 --- /dev/null +++ b/pkg/logger/logger.go @@ -0,0 +1,26 @@ +package logger + +import ( + "github.com/rs/zerolog" + "os" +) + +type LogSink struct { + logs []string +} + +func NewLogger(logs *LogSink) zerolog.Logger { + if logs == nil { + return zerolog.New(os.Stdout).With().Timestamp().Logger().Output(zerolog.ConsoleWriter{Out: os.Stderr}) + } + return zerolog.New(logs) +} + +func (l *LogSink) Write(p []byte) (n int, err error) { + l.logs = append(l.logs, string(p)) + return len(p), nil +} + +func (l *LogSink) Index(i int) string { + return l.logs[i] +} diff --git a/pkg/printer/utils.go b/pkg/printer/utils.go index 81fa312180a..0426410f1f0 100644 --- a/pkg/printer/utils.go +++ b/pkg/printer/utils.go @@ -4,7 +4,7 @@ import ( "time" consoleFlags "github.com/Checkmarx/kics/internal/console/flags" - "github.com/rs/zerolog/log" + "github.com/rs/zerolog" ) func validateFlags() error { @@ -27,12 +27,12 @@ func validateFlags() error { } // PrintScanDuration prints the scan duration -func PrintScanDuration(elapsed time.Duration) { +func PrintScanDuration(logger *zerolog.Logger, elapsed time.Duration) { if consoleFlags.GetBoolFlag(consoleFlags.CIFlag) { elapsedStrFormat := "Scan duration: %vms\n" - log.Info().Msgf(elapsedStrFormat, elapsed.Milliseconds()) + (*logger).Info().Msgf(elapsedStrFormat, elapsed.Milliseconds()) } else { elapsedStrFormat := "Scan duration: %v\n" - log.Info().Msgf(elapsedStrFormat, elapsed) + (*logger).Info().Msgf(elapsedStrFormat, elapsed) } } diff --git a/pkg/printer/utils_test.go b/pkg/printer/utils_test.go index 83591f07148..15de969a216 100644 --- a/pkg/printer/utils_test.go +++ b/pkg/printer/utils_test.go @@ -1,14 +1,13 @@ package printer import ( - "io/ioutil" - "os" "testing" "time" "github.com/Checkmarx/kics/internal/console/flags" + loggerwrapper "github.com/Checkmarx/kics/pkg/logger" "github.com/spf13/cobra" - "github.com/stretchr/testify/require" + "github.com/stretchr/testify/assert" ) func Test_PrintScanDuration(t *testing.T) { @@ -33,12 +32,12 @@ func Test_PrintScanDuration(t *testing.T) { { name: "should print scan duration", cmd: mockCmd, - flagsListContent: "", + flagsListContent: ``, persintentFlag: true, supportedPlatforms: []string{"terraform"}, supportedCloudProviders: []string{"aws"}, elapsed: time.Duration(1), - expected: "Scan duration: 1ns\n", + expected: "Scan duration: 1ns", }, { name: "should print scan duration when ci flag is true", @@ -53,7 +52,7 @@ func Test_PrintScanDuration(t *testing.T) { supportedPlatforms: []string{"terraform"}, supportedCloudProviders: []string{"aws"}, elapsed: time.Duration(1), - expected: "Scan duration: 0ms\n", + expected: "Scan duration: 0ms", }, } @@ -61,17 +60,13 @@ func Test_PrintScanDuration(t *testing.T) { t.Run(test.name, func(t *testing.T) { flags.InitJSONFlags(test.cmd, test.flagsListContent, test.persintentFlag, test.supportedPlatforms, test.supportedCloudProviders) - rescueStdout := os.Stdout - r, w, _ := os.Pipe() - os.Stdout = w + myBuffer := loggerwrapper.LogSink{} + logger := loggerwrapper.NewLogger(&myBuffer) - PrintScanDuration(test.elapsed) + PrintScanDuration(&logger, test.elapsed) + aux := myBuffer.Index(0) - w.Close() - out, _ := ioutil.ReadAll(r) - os.Stdout = rescueStdout - - require.Equal(t, test.expected, string(out)) + assert.Contains(t, aux, test.expected) }) } } diff --git a/pkg/scan/post_scan.go b/pkg/scan/post_scan.go index e73a07b8f3e..fd235af49f1 100644 --- a/pkg/scan/post_scan.go +++ b/pkg/scan/post_scan.go @@ -2,6 +2,7 @@ package scan import ( _ "embed" // Embed kics CLI img and scan-flags + loggerwrapper "github.com/Checkmarx/kics/pkg/logger" "os" "path/filepath" "sort" @@ -133,7 +134,8 @@ func (c *Client) postScan(scanResults *Results) error { deleteExtractionFolder(scanResults.ExtractedPaths.ExtractionMap) - consolePrinter.PrintScanDuration(time.Since(c.ScanStartTime)) + logger := loggerwrapper.NewLogger(nil) + consolePrinter.PrintScanDuration(&logger, time.Since(c.ScanStartTime)) printVersionCheck(c.Printer, &summary)