1+ package ci
2+
3+ import (
4+ "reflect"
5+ "testing"
6+
7+ "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerinstance/armcontainerinstance"
8+ "github.com/Azure/go-autorest/autorest/to"
9+ "github.com/cmendible/azqr/internal/scanners"
10+ )
11+
12+ func TestContainerInstanceScanner_Rules (t * testing.T ) {
13+ type fields struct {
14+ rule string
15+ target interface {}
16+ scanContext * scanners.ScanContext
17+ diagnosticsSettings scanners.DiagnosticsSettings
18+ }
19+ type want struct {
20+ broken bool
21+ result string
22+ }
23+ tests := []struct {
24+ name string
25+ fields fields
26+ want want
27+ }{
28+ {
29+ name : "ContainerInstanceScanner Availability Zones" ,
30+ fields : fields {
31+ rule : "AvailabilityZones" ,
32+ target : & armcontainerinstance.ContainerGroup {
33+ Zones : []* string {to .StringPtr ("1" ), to .StringPtr ("2" ), to .StringPtr ("3" )},
34+ },
35+ scanContext : & scanners.ScanContext {},
36+ diagnosticsSettings : scanners.DiagnosticsSettings {},
37+ },
38+ want : want {
39+ broken : false ,
40+ result : "" ,
41+ },
42+ },
43+ {
44+ name : "ContainerInstanceScanner SLA" ,
45+ fields : fields {
46+ rule : "SLA" ,
47+ target : & armcontainerinstance.ContainerGroup {},
48+ scanContext : & scanners.ScanContext {},
49+ diagnosticsSettings : scanners.DiagnosticsSettings {},
50+ },
51+ want : want {
52+ broken : false ,
53+ result : "99.9%" ,
54+ },
55+ },
56+ {
57+ name : "ContainerInstanceScanner IPAddress not present" ,
58+ fields : fields {
59+ rule : "Private" ,
60+ target : & armcontainerinstance.ContainerGroup {
61+ Properties : & armcontainerinstance.ContainerGroupProperties {
62+ IPAddress : nil ,
63+ },
64+ },
65+ scanContext : & scanners.ScanContext {},
66+ diagnosticsSettings : scanners.DiagnosticsSettings {},
67+ },
68+ want : want {
69+ broken : true ,
70+ result : "" ,
71+ },
72+ },
73+ {
74+ name : "ContainerInstanceScanner IPAddress Type not present" ,
75+ fields : fields {
76+ rule : "Private" ,
77+ target : & armcontainerinstance.ContainerGroup {
78+ Properties : & armcontainerinstance.ContainerGroupProperties {
79+ IPAddress : & armcontainerinstance.IPAddress {
80+ Type : nil ,
81+ },
82+ },
83+ },
84+ scanContext : & scanners.ScanContext {},
85+ diagnosticsSettings : scanners.DiagnosticsSettings {},
86+ },
87+ want : want {
88+ broken : true ,
89+ result : "" ,
90+ },
91+ },
92+ {
93+ name : "ContainerInstanceScanner IPAddress Internal" ,
94+ fields : fields {
95+ rule : "Private" ,
96+ target : & armcontainerinstance.ContainerGroup {
97+ Properties : & armcontainerinstance.ContainerGroupProperties {
98+ IPAddress : & armcontainerinstance.IPAddress {
99+ Type : getContainerGroupIPAddressTypePrivate (),
100+ },
101+ },
102+ },
103+ scanContext : & scanners.ScanContext {},
104+ diagnosticsSettings : scanners.DiagnosticsSettings {},
105+ },
106+ want : want {
107+ broken : false ,
108+ result : "" ,
109+ },
110+ },
111+ {
112+ name : "APIManagementScanner SKU" ,
113+ fields : fields {
114+ rule : "SKU" ,
115+ target : & armcontainerinstance.ContainerGroup {
116+ Properties : & armcontainerinstance.ContainerGroupProperties {
117+ SKU : getStandardSKU (),
118+ },
119+ },
120+ scanContext : & scanners.ScanContext {},
121+ diagnosticsSettings : scanners.DiagnosticsSettings {},
122+ },
123+ want : want {
124+ broken : false ,
125+ result : "Standard" ,
126+ },
127+ },
128+ {
129+ name : "ContainerInstanceScanner CAF" ,
130+ fields : fields {
131+ rule : "CAF" ,
132+ target : & armcontainerinstance.ContainerGroup {
133+ Name : to .StringPtr ("ci-test" ),
134+ },
135+ scanContext : & scanners.ScanContext {},
136+ diagnosticsSettings : scanners.DiagnosticsSettings {},
137+ },
138+ want : want {
139+ broken : false ,
140+ result : "" ,
141+ },
142+ },
143+ }
144+ for _ , tt := range tests {
145+ t .Run (tt .name , func (t * testing.T ) {
146+ s := & ContainerInstanceScanner {
147+ diagnosticsSettings : tt .fields .diagnosticsSettings ,
148+ }
149+ rules := s .GetRules ()
150+ b , w := rules [tt .fields .rule ].Eval (tt .fields .target , tt .fields .scanContext )
151+ got := want {
152+ broken : b ,
153+ result : w ,
154+ }
155+ if ! reflect .DeepEqual (got , tt .want ) {
156+ t .Errorf ("ContainerInstanceScanner Rule.Eval() = %v, want %v" , got , tt .want )
157+ }
158+ })
159+ }
160+ }
161+
162+ func getContainerGroupIPAddressTypePrivate () * armcontainerinstance.ContainerGroupIPAddressType {
163+ s := armcontainerinstance .ContainerGroupIPAddressTypePrivate
164+ return & s
165+ }
166+
167+ func getStandardSKU () * armcontainerinstance.ContainerGroupSKU {
168+ s := armcontainerinstance .ContainerGroupSKUStandard
169+ return & s
170+ }
0 commit comments