From 7765eae98293c81047529ec27d4e0b21575e80a9 Mon Sep 17 00:00:00 2001 From: balteravishay Date: Thu, 23 Jan 2025 20:47:52 +0000 Subject: [PATCH] more tests Signed-off-by: balteravishay --- probes/memorysafe/impl.go | 9 +++-- probes/memorysafe/impl_test.go | 61 ++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 3 deletions(-) diff --git a/probes/memorysafe/impl.go b/probes/memorysafe/impl.go index e5d3cf2d454..ee0e5b4f262 100644 --- a/probes/memorysafe/impl.go +++ b/probes/memorysafe/impl.go @@ -63,7 +63,7 @@ func init() { } func Run(raw *checker.CheckRequest) (found []finding.Finding, probeName string, err error) { - prominentLangs := getRepositoryLanguageChecks(raw.RepoClient) + prominentLangs := getRepositoryLanguageChecks(raw) findings := []finding.Finding{} for _, lang := range prominentLangs { @@ -83,9 +83,12 @@ func Run(raw *checker.CheckRequest) (found []finding.Finding, probeName string, return findings, Probe, nil } -func getRepositoryLanguageChecks(client clients.RepoClient) []languageMemoryCheckConfig { - langs, err := client.ListProgrammingLanguages() +func getRepositoryLanguageChecks(raw *checker.CheckRequest) []languageMemoryCheckConfig { + langs, err := raw.RepoClient.ListProgrammingLanguages() if err != nil { + raw.Dlogger.Warn(&checker.LogMessage{ + Text: fmt.Sprintf("RepoClient retured error for ListProgrammingLanguages: %v", err), + }) return nil } if len(langs) == 0 { diff --git a/probes/memorysafe/impl_test.go b/probes/memorysafe/impl_test.go index ba704dd48b3..09e0dd6ff26 100644 --- a/probes/memorysafe/impl_test.go +++ b/probes/memorysafe/impl_test.go @@ -15,6 +15,7 @@ package memorysafe import ( + "fmt" "io" "os" "testing" @@ -457,3 +458,63 @@ func Test_Run(t *testing.T) { }) } } + +func Test_Run_Error_ListProgrammingLanguages(t *testing.T) { + ctrl := gomock.NewController(t) + raw := &checker.CheckRequest{} + mockRepoClient := mockrepo.NewMockRepoClient(ctrl) + mockRepoClient.EXPECT().ListProgrammingLanguages().DoAndReturn(func() ([]clients.Language, error) { + return nil, fmt.Errorf("error") + }).AnyTimes() + raw.RepoClient = mockRepoClient + raw.Dlogger = checker.NewLogger() + findings, _, err := Run(raw) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if diff := cmp.Diff(findings, []finding.Finding{}, cmpopts.IgnoreUnexported(finding.Finding{})); diff != "" { + t.Error(diff) + } +} + +func Test_Run_Error_OnMatchingFileContentDo(t *testing.T) { + t.Parallel() + //nolint:govet + tests := []struct { + name string + repoLanguages []clients.Language + expected_err error + }{ + { + name: "csharp error", + repoLanguages: []clients.Language{{Name: clients.CSharp, NumLines: 0}}, + expected_err: fmt.Errorf("error while running function for language Check if C# code uses unsafe blocks: error during ListFiles: error"), + }, + { + name: "golang error", + repoLanguages: []clients.Language{{Name: clients.Go, NumLines: 0}}, + expected_err: fmt.Errorf("error while running function for language Check if Go code uses the unsafe package: error during ListFiles: error"), + }, + } + for _, tt := range tests { + tt := tt + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + ctrl := gomock.NewController(t) + raw := &checker.CheckRequest{} + mockRepoClient := mockrepo.NewMockRepoClient(ctrl) + mockRepoClient.EXPECT().ListProgrammingLanguages().DoAndReturn(func() ([]clients.Language, error) { + return tt.repoLanguages, nil + }).AnyTimes() + mockRepoClient.EXPECT().ListFiles(gomock.Any()).DoAndReturn(func(predicate func(string) (bool, error)) ([]string, error) { + return nil, fmt.Errorf("error") + }).AnyTimes() + raw.RepoClient = mockRepoClient + raw.Dlogger = checker.NewLogger() + _, _, err := Run(raw) + if err.Error() != tt.expected_err.Error() { + t.Error(cmp.Diff(err, tt.expected_err, cmpopts.EquateErrors())) + } + }) + } +}