-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathframeworks_test.go
83 lines (69 loc) · 2.51 KB
/
frameworks_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// Copyright (c) Mondoo, Inc.
// SPDX-License-Identifier: BUSL-1.1
package policy
import (
"context"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestUpdateChecksums_Group_ReviewStatus(t *testing.T) {
loader := DefaultBundleLoader()
bundle, err := loader.BundleFromPaths("scan/testdata/compliance-bundle.mql.yaml")
require.NoError(t, err)
ctx := context.Background()
framework := bundle.Frameworks[0]
err = framework.UpdateChecksums(ctx, nil, nil, bundle.ToMap())
require.NoError(t, err)
oldChecksum := framework.GraphExecutionChecksum
framework.Groups[0].ReviewStatus = ReviewStatus_REJECTED
framework.ClearExecutionChecksums()
err = framework.UpdateChecksums(ctx, nil, nil, bundle.ToMap())
require.NoError(t, err)
// Make sure the execution checksum changes when the review status changed.
assert.NotEqual(t, oldChecksum, framework.GraphExecutionChecksum)
}
func TestResolvedFrameworkTopologicalSort(t *testing.T) {
framework := &ResolvedFramework{
ReportTargets: map[string]ResolvedFrameworkReferenceSet{},
ReportSources: map[string]ResolvedFrameworkReferenceSet{},
Nodes: map[string]ResolvedFrameworkNode{},
}
framework.addReportLink(ResolvedFrameworkNode{Mrn: "z"}, ResolvedFrameworkNode{Mrn: "c"})
framework.addReportLink(ResolvedFrameworkNode{Mrn: "y"}, ResolvedFrameworkNode{Mrn: "x"})
framework.addReportLink(ResolvedFrameworkNode{Mrn: "a"}, ResolvedFrameworkNode{Mrn: "b"})
framework.addReportLink(ResolvedFrameworkNode{Mrn: "b"}, ResolvedFrameworkNode{Mrn: "c"})
framework.addReportLink(ResolvedFrameworkNode{Mrn: "c"}, ResolvedFrameworkNode{Mrn: "d"})
framework.addReportLink(ResolvedFrameworkNode{Mrn: "c"}, ResolvedFrameworkNode{Mrn: "e"})
framework.addReportLink(ResolvedFrameworkNode{Mrn: "b"}, ResolvedFrameworkNode{Mrn: "e"})
sorted := framework.TopologicalSort()
requireComesAfter(t, sorted, "z", "c")
requireComesAfter(t, sorted, "y", "x")
requireComesAfter(t, sorted, "a", "b")
requireComesAfter(t, sorted, "b", "c")
requireComesAfter(t, sorted, "c", "d")
requireComesAfter(t, sorted, "c", "e")
requireComesAfter(t, sorted, "b", "e")
}
func requireComesAfter(t *testing.T, sorted []string, a, b string) {
t.Helper()
aIdx := -1
bIdx := -1
for i, v := range sorted {
if v == a {
aIdx = i
}
if v == b {
bIdx = i
}
}
if aIdx == -1 {
t.Errorf("Expected %s to be in sorted list", a)
}
if bIdx == -1 {
t.Errorf("Expected %s to be in sorted list", b)
}
if aIdx < bIdx {
t.Errorf("Expected %s to come after %s", a, b)
}
}