From 8fa7fc922dea40b24e9eba8bbf68b959eb91b005 Mon Sep 17 00:00:00 2001 From: VaibhavMalik4187 Date: Sun, 26 Nov 2023 19:40:16 +0530 Subject: [PATCH] Added tests for the prettyprinter package Signed-off-by: VaibhavMalik4187 --- .../v2/prettyprinter/clusterscan_test.go | 101 +++++++++++++++++- .../v2/prettyprinter/frameworkscan_test.go | 74 +++++++++++++ .../v2/prettyprinter/imagescan_test.go | 95 ++++++++++++++++ 3 files changed, 269 insertions(+), 1 deletion(-) create mode 100644 core/pkg/resultshandling/printer/v2/prettyprinter/frameworkscan_test.go create mode 100644 core/pkg/resultshandling/printer/v2/prettyprinter/imagescan_test.go diff --git a/core/pkg/resultshandling/printer/v2/prettyprinter/clusterscan_test.go b/core/pkg/resultshandling/printer/v2/prettyprinter/clusterscan_test.go index ad596fb9..fdb5d926 100644 --- a/core/pkg/resultshandling/printer/v2/prettyprinter/clusterscan_test.go +++ b/core/pkg/resultshandling/printer/v2/prettyprinter/clusterscan_test.go @@ -1,6 +1,12 @@ package prettyprinter -import "testing" +import ( + "io" + "os" + "testing" + + "github.com/stretchr/testify/assert" +) func TestClusterScan_getNextSteps(t *testing.T) { clusterPrinter := &ClusterPrinter{} @@ -33,3 +39,96 @@ func TestClusterScan_getWorkloadScanCommand(t *testing.T) { t.Errorf("Expected $ kubescape scan workload kind/name --namespace ns, got %s", command) } } + +func TestNewClusterPrinter(t *testing.T) { + // Test case 1: Valid writer + cp := NewClusterPrinter(os.Stdout) + assert.NotNil(t, cp) + assert.Equal(t, os.Stdout, cp.writer) + assert.NotNil(t, cp.categoriesTablePrinter) + + // Test case 2: Nil writer + var writer *os.File + cp = NewClusterPrinter(writer) + assert.NotNil(t, cp) + assert.Nil(t, cp.writer) + assert.NotNil(t, cp.categoriesTablePrinter) +} + +func TestPrintNextSteps(t *testing.T) { + // Create a temporary file to capture output + f, err := os.CreateTemp("", "print-next-steps") + if err != nil { + panic(err) + } + defer f.Close() + + cp := NewClusterPrinter(f) + + // Redirect stderr to the temporary file + oldStderr := os.Stderr + defer func() { + os.Stderr = oldStderr + }() + os.Stderr = f + + // Print the score using the `Score` function + cp.PrintNextSteps() + + // Read the contents of the temporary file + f.Seek(0, 0) + got, err := io.ReadAll(f) + if err != nil { + panic(err) + } + + want := "\nWhat now?\n─────────\n\n* Run one of the suggested commands to learn more about a failed control failure\n* Scan a workload with '$ kubescape scan workload' to see vulnerability information\n* Install Kubescape in your cluster for continuous monitoring and a full vulnerability report: https://kubescape.io/docs/install-operator/\n\n" + + assert.Equal(t, want, string(got)) +} + +func TestGetWorkloadScanCommand(t *testing.T) { + cp := NewClusterPrinter(os.Stdout) + assert.NotNil(t, cp) + assert.Equal(t, os.Stdout, cp.writer) + assert.NotNil(t, cp.categoriesTablePrinter) + + tests := []struct { + name string + namespace string + kind string + want string + }{ + { + name: "Empty", + namespace: "", + kind: "", + want: "$ kubescape scan workload /Empty --namespace ", + }, + { + name: "Empty Namespace", + namespace: "", + kind: "Kind", + want: "$ kubescape scan workload Kind/Empty Namespace --namespace ", + }, + { + name: "Empty Kind", + namespace: "Namespace", + kind: "", + want: "$ kubescape scan workload /Empty Kind --namespace Namespace", + }, + { + name: "Name", + namespace: "Namespace", + kind: "Kind", + want: "$ kubescape scan workload Kind/Name --namespace Namespace", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got := cp.getWorkloadScanCommand(tt.namespace, tt.kind, tt.name) + assert.Equal(t, tt.want, got) + }) + } +} diff --git a/core/pkg/resultshandling/printer/v2/prettyprinter/frameworkscan_test.go b/core/pkg/resultshandling/printer/v2/prettyprinter/frameworkscan_test.go new file mode 100644 index 00000000..b7944221 --- /dev/null +++ b/core/pkg/resultshandling/printer/v2/prettyprinter/frameworkscan_test.go @@ -0,0 +1,74 @@ +package prettyprinter + +import ( + "os" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestNewSummaryPrinter(t *testing.T) { + // Test case 1: Valid writer and verbose mode + verbose := true + printer := NewSummaryPrinter(os.Stdout, verbose) + assert.NotNil(t, printer) + assert.Equal(t, os.Stdout, printer.writer) + assert.Equal(t, verbose, printer.verboseMode) + assert.NotNil(t, printer.summaryTablePrinter) + + // Test case 2: Valid writer and non-verbose mode + verbose = false + printer = NewSummaryPrinter(os.Stdout, verbose) + assert.NotNil(t, printer) + assert.Equal(t, os.Stdout, printer.writer) + assert.Equal(t, verbose, printer.verboseMode) + assert.NotNil(t, printer.summaryTablePrinter) + + // Test case 3: Nil writer and verbose mode + var writer *os.File + verbose = true + printer = NewSummaryPrinter(writer, verbose) + assert.NotNil(t, printer) + assert.Nil(t, printer.writer) + assert.Equal(t, verbose, printer.verboseMode) + assert.NotNil(t, printer.summaryTablePrinter) + + // Test case 4: Nil writer and non-verbose mode + verbose = false + printer = NewSummaryPrinter(writer, verbose) + assert.NotNil(t, printer) + assert.Nil(t, printer.writer) + assert.Equal(t, verbose, printer.verboseMode) + assert.NotNil(t, printer.summaryTablePrinter) +} + +func TestGetVerboseMode(t *testing.T) { + tests := []struct { + name string + printer *SummaryPrinter + want bool + }{ + { + name: "Verbose mode on", + printer: &SummaryPrinter{ + writer: os.Stdout, + verboseMode: true, + }, + want: true, + }, + { + name: "Verbose mode off", + printer: &SummaryPrinter{ + writer: os.Stdout, + verboseMode: false, + }, + want: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + assert.Equal(t, tt.want, tt.printer.getVerboseMode()) + }) + } +} diff --git a/core/pkg/resultshandling/printer/v2/prettyprinter/imagescan_test.go b/core/pkg/resultshandling/printer/v2/prettyprinter/imagescan_test.go new file mode 100644 index 00000000..edbece72 --- /dev/null +++ b/core/pkg/resultshandling/printer/v2/prettyprinter/imagescan_test.go @@ -0,0 +1,95 @@ +package prettyprinter + +import ( + "io" + "os" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestNewImagePrinter(t *testing.T) { + // Test case 1: Valid writer and verbose mode + verbose := true + printer := NewImagePrinter(os.Stdout, verbose) + assert.NotNil(t, printer) + assert.Equal(t, os.Stdout, printer.writer) + assert.Equal(t, verbose, printer.verboseMode) + assert.NotNil(t, printer.imageTablePrinter) + + // Test case 2: Valid writer and non-verbose mode + verbose = false + printer = NewImagePrinter(os.Stdout, verbose) + assert.NotNil(t, printer) + assert.Equal(t, os.Stdout, printer.writer) + assert.Equal(t, verbose, printer.verboseMode) + assert.NotNil(t, printer.imageTablePrinter) + + // Test case 3: Nil writer and verbose mode + var writer *os.File + verbose = true + printer = NewImagePrinter(writer, verbose) + assert.NotNil(t, printer) + assert.Nil(t, printer.writer) + assert.Equal(t, verbose, printer.verboseMode) + assert.NotNil(t, printer.imageTablePrinter) + + // Test case 4: Nil writer and non-verbose mode + verbose = false + printer = NewImagePrinter(writer, verbose) + assert.NotNil(t, printer) + assert.Nil(t, printer.writer) + assert.Equal(t, verbose, printer.verboseMode) + assert.NotNil(t, printer.imageTablePrinter) +} + +func TestPrintNextSteps_ImageScan(t *testing.T) { + tests := []struct { + name string + verbose bool + want string + }{ + { + name: "Verbose mode on", + verbose: true, + want: "\nWhat now?\n─────────\n\n* Install Kubescape in your cluster for continuous monitoring and a full vulnerability report: https://kubescape.io/docs/install-operator/\n\n", + }, + { + name: "Verbose mode off", + verbose: false, + want: "\nWhat now?\n─────────\n\n* Run with '--verbose'/'-v' flag for detailed vulnerabilities view\n* Install Kubescape in your cluster for continuous monitoring and a full vulnerability report: https://kubescape.io/docs/install-operator/\n\n", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // Create a temporary file to capture output + f, err := os.CreateTemp("", "print-next-steps") + if err != nil { + panic(err) + } + defer f.Close() + + ip := NewImagePrinter(f, tt.verbose) + + // Redirect stderr to the temporary file + oldStderr := os.Stderr + defer func() { + os.Stderr = oldStderr + }() + os.Stderr = f + + // Print the score using the `Score` function + ip.PrintNextSteps() + + // Read the contents of the temporary file + f.Seek(0, 0) + got, err := io.ReadAll(f) + if err != nil { + panic(err) + } + + assert.Equal(t, tt.want, string(got)) + }) + } +}