From b9c40bfb9f58b24e4a35caeeae31ffbf2069761f Mon Sep 17 00:00:00 2001 From: Pavlos Tzianos Date: Mon, 11 Mar 2024 19:32:16 +0000 Subject: [PATCH] Fix flaky Test_FromDraconEnrichedIssuesRun (Fixes #105) Signed-off-by: Pavlos Tzianos --- pkg/sarif/sarif.go | 8 ++++++-- pkg/sarif/sarif_test.go | 16 ++++++++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/pkg/sarif/sarif.go b/pkg/sarif/sarif.go index d46e6a5d1..aeab35e9b 100644 --- a/pkg/sarif/sarif.go +++ b/pkg/sarif/sarif.go @@ -18,14 +18,17 @@ type DraconIssueCollection struct { Issues []*v1.Issue } -// FromDraconEnrichedIssuesRun transforms a set of LaunchToolResponse to ONE sarif document with one run per launch tool response, by default it skips duplicates unless reportDuplicates is set to true. +// FromDraconEnrichedIssuesRun transforms a set of LaunchToolResponse to ONE sarif document with +// one run per launch tool response, by default it skips duplicates unless reportDuplicates is set +// to true. func FromDraconEnrichedIssuesRun(responses []*v1.EnrichedLaunchToolResponse, reportDuplicates bool) (*sarif.Report, error) { // if you are not ignoring duplicates use resultProvenance in each message to mark duplicates - // annotations become attachments in each findings with the description the json of the label + // annotations become attachments in each findings with the description the json of the label sarifReport, err := sarif.New(sarif.Version210) if err != nil { return &sarif.Report{}, err } + for _, enrichedResponse := range responses { tool := sarif.NewSimpleTool(enrichedResponse.GetOriginalResults().GetToolName()) run := sarif.NewRun(*tool) @@ -38,6 +41,7 @@ func FromDraconEnrichedIssuesRun(responses []*v1.EnrichedLaunchToolResponse, rep var sarifResults []*sarif.Result for _, issue := range enrichedResponse.Issues { + // TODO(#119): improve this to avoid O(n^2) rule, err := run.GetRuleById(issue.RawIssue.Type) if err != nil { rule = run.AddRule(issue.RawIssue.Type) diff --git a/pkg/sarif/sarif_test.go b/pkg/sarif/sarif_test.go index 06687df29..8f038746c 100644 --- a/pkg/sarif/sarif_test.go +++ b/pkg/sarif/sarif_test.go @@ -2,6 +2,8 @@ package sarif import ( "os" + "slices" + "strings" "testing" "time" @@ -232,8 +234,18 @@ func Test_FromDraconEnrichedIssuesRun(t *testing.T) { report, err := FromDraconEnrichedIssuesRun(responses, false) require.NoError(t, err) - require.NotNil(t, report) - require.EqualValues(t, report, expected) + require.Len(t, report.Runs, 1) + require.Len(t, report.Runs[0].Results, 1) + require.Len(t, report.Runs[0].Results[0].Attachments, len(expected.Runs[0].Results[0].Attachments)) + + slices.SortFunc(expected.Runs[0].Results[0].Attachments, func(a *sarif.Attachment, b *sarif.Attachment) int { + return strings.Compare(*(a.Description.Text), *(b.Description.Text)) + }) + slices.SortFunc(report.Runs[0].Results[0].Attachments, func(a *sarif.Attachment, b *sarif.Attachment) int { + return strings.Compare(*(a.Description.Text), *(b.Description.Text)) + }) + + require.Equal(t, expected, report) } func Test_FromDraconRawIssuesRun(t *testing.T) {