Skip to content

Commit 44a0102

Browse files
afdesksimar7
authored andcommitted
test: add test cases for default configs
1 parent c6b6457 commit 44a0102

File tree

1 file changed

+131
-0
lines changed

1 file changed

+131
-0
lines changed
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
package controller
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/assert"
7+
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
8+
"sigs.k8s.io/controller-runtime/pkg/client"
9+
10+
"github.com/aquasecurity/trivy-operator/pkg/apis/aquasecurity/v1alpha1"
11+
"github.com/aquasecurity/trivy-operator/pkg/operator/etc"
12+
"github.com/aquasecurity/trivy-operator/pkg/trivyoperator"
13+
"github.com/aquasecurity/trivy/pkg/iac/scan"
14+
"github.com/aquasecurity/trivy/pkg/iac/types"
15+
)
16+
17+
const messageKSV048 = "ClusterRole 'system:controller:replicaset-controller' should not have access to resources ['pods', 'deployments', 'jobs', 'cronjobs', 'statefulsets', 'daemonsets', 'replicasets'ß, 'replicationcontrollers'] for verbs ['create', 'update', 'patch', 'delete', 'deletecollection', 'impersonate', '*']"
18+
19+
func newTestResource(kind string) *unstructured.Unstructured {
20+
obj := &unstructured.Unstructured{}
21+
obj.SetKind(kind)
22+
obj.SetAPIVersion("v1")
23+
return obj
24+
}
25+
26+
type demoResult struct {
27+
md types.Metadata
28+
}
29+
30+
func (r demoResult) GetMetadata() types.Metadata {
31+
return r.md
32+
}
33+
func (_ demoResult) GetRawValue() any {
34+
return nil
35+
}
36+
37+
func newDemoResult(filename string, start, end int) demoResult {
38+
return demoResult{
39+
md: types.NewMetadata(types.NewRange(filename, start, end, "", nil), ""),
40+
}
41+
}
42+
43+
func newResults() scan.Results {
44+
results := scan.Results{}
45+
results.AddPassedRego("builtin.kubernetes.KCV0001", "deny", nil, newDemoResult("inputs/file_0.yaml", 0, 0))
46+
results.AddRego(messageKSV048, "builtin.kubernetes.KSV048", "deny", nil, newDemoResult("inputs/file_0.yaml", 0, 0))
47+
return results
48+
}
49+
50+
func TestFilter(t *testing.T) {
51+
results := newResults()
52+
53+
tests := []struct {
54+
name string
55+
resource client.Object
56+
bi trivyoperator.BuildInfo
57+
configData trivyoperator.ConfigData
58+
config etc.Config
59+
defaultSeverity string
60+
expectedMisconfiguration Misconfiguration
61+
}{
62+
{
63+
name: "good case",
64+
resource: newTestResource("Pod"),
65+
bi: trivyoperator.BuildInfo{},
66+
configData: trivyoperator.ConfigData{},
67+
config: etc.Config{},
68+
defaultSeverity: "UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL",
69+
expectedMisconfiguration: Misconfiguration{
70+
configAuditReportData: v1alpha1.ConfigAuditReportData{
71+
Scanner: v1alpha1.Scanner{
72+
Name: "Trivy",
73+
Vendor: "Aqua Security",
74+
},
75+
Checks: []v1alpha1.Check{
76+
{
77+
Category: "Kubernetes Security Check",
78+
Success: true,
79+
},
80+
{
81+
Category: "Kubernetes Security Check",
82+
Success: false,
83+
Messages: []string{
84+
messageKSV048,
85+
},
86+
},
87+
},
88+
},
89+
rbacAssessmentReportData: v1alpha1.RbacAssessmentReportData{},
90+
infraAssessmentReportData: v1alpha1.InfraAssessmentReportData{},
91+
},
92+
},
93+
{
94+
name: "failed checks only",
95+
resource: newTestResource("Pod"),
96+
bi: trivyoperator.BuildInfo{},
97+
configData: trivyoperator.ConfigData{
98+
trivyoperator.KeyReportRecordFailedChecksOnly: "true",
99+
},
100+
config: etc.Config{},
101+
defaultSeverity: "UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL",
102+
expectedMisconfiguration: Misconfiguration{
103+
configAuditReportData: v1alpha1.ConfigAuditReportData{
104+
Scanner: v1alpha1.Scanner{
105+
Name: "Trivy",
106+
Vendor: "Aqua Security",
107+
},
108+
Checks: []v1alpha1.Check{
109+
{
110+
Category: "Kubernetes Security Check",
111+
Success: false,
112+
Messages: []string{
113+
messageKSV048,
114+
},
115+
},
116+
},
117+
},
118+
rbacAssessmentReportData: v1alpha1.RbacAssessmentReportData{},
119+
infraAssessmentReportData: v1alpha1.InfraAssessmentReportData{},
120+
},
121+
},
122+
}
123+
124+
for _, test := range tests {
125+
t.Run(test.name, func(t *testing.T) {
126+
misconfiguration := filter(results, test.resource, test.bi, test.configData, test.config, test.defaultSeverity)
127+
misconfiguration.configAuditReportData.UpdateTimestamp = test.expectedMisconfiguration.configAuditReportData.UpdateTimestamp
128+
assert.Equal(t, test.expectedMisconfiguration, misconfiguration)
129+
})
130+
}
131+
}

0 commit comments

Comments
 (0)