Skip to content

Commit 98cedbd

Browse files
committed
asp, app & func tests
1 parent ada5fd6 commit 98cedbd

File tree

1 file changed

+357
-0
lines changed

1 file changed

+357
-0
lines changed
Lines changed: 357 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,357 @@
1+
package plan
2+
3+
import (
4+
"reflect"
5+
"testing"
6+
7+
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/appservice/armappservice/v2"
8+
"github.com/Azure/go-autorest/autorest/to"
9+
"github.com/cmendible/azqr/internal/scanners"
10+
)
11+
12+
func TestAppServiceScanner_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: "AppServiceScanner DiagnosticSettings",
30+
fields: fields{
31+
rule: "DiagnosticSettings",
32+
target: &armappservice.Plan{
33+
ID: to.StringPtr("test"),
34+
},
35+
scanContext: &scanners.ScanContext{},
36+
diagnosticsSettings: scanners.DiagnosticsSettings{
37+
HasDiagnosticsFunc: func(resourceId string) (bool, error) {
38+
return true, nil
39+
},
40+
},
41+
},
42+
want: want{
43+
broken: false,
44+
result: "",
45+
},
46+
},
47+
{
48+
name: "AppServiceScanner Availability Zones",
49+
fields: fields{
50+
rule: "AvailabilityZones",
51+
target: &armappservice.Plan{
52+
Properties: &armappservice.PlanProperties{
53+
ZoneRedundant: to.BoolPtr(true),
54+
},
55+
},
56+
scanContext: &scanners.ScanContext{},
57+
diagnosticsSettings: scanners.DiagnosticsSettings{},
58+
},
59+
want: want{
60+
broken: false,
61+
result: "",
62+
},
63+
},
64+
{
65+
name: "AppServiceScanner SLA None",
66+
fields: fields{
67+
rule: "SLA",
68+
target: &armappservice.Plan{
69+
SKU: &armappservice.SKUDescription{
70+
Tier: to.StringPtr("Free"),
71+
},
72+
},
73+
scanContext: &scanners.ScanContext{},
74+
diagnosticsSettings: scanners.DiagnosticsSettings{},
75+
},
76+
want: want{
77+
broken: true,
78+
result: "None",
79+
},
80+
},
81+
{
82+
name: "AppServiceScanner SLA 99.95%",
83+
fields: fields{
84+
rule: "SLA",
85+
target: &armappservice.Plan{
86+
SKU: &armappservice.SKUDescription{
87+
Tier: to.StringPtr("ElasticPremium"),
88+
},
89+
},
90+
scanContext: &scanners.ScanContext{},
91+
diagnosticsSettings: scanners.DiagnosticsSettings{},
92+
},
93+
want: want{
94+
broken: false,
95+
result: "99.95%",
96+
},
97+
},
98+
{
99+
name: "AppServiceScanner SKU",
100+
fields: fields{
101+
rule: "SKU",
102+
target: &armappservice.Plan{
103+
SKU: &armappservice.SKUDescription{
104+
Name: to.StringPtr("EP1"),
105+
},
106+
},
107+
scanContext: &scanners.ScanContext{},
108+
diagnosticsSettings: scanners.DiagnosticsSettings{},
109+
},
110+
want: want{
111+
broken: false,
112+
result: "EP1",
113+
},
114+
},
115+
{
116+
name: "AppServiceScanner CAF",
117+
fields: fields{
118+
rule: "CAF",
119+
target: &armappservice.Plan{
120+
Name: to.StringPtr("asp-test"),
121+
},
122+
scanContext: &scanners.ScanContext{},
123+
diagnosticsSettings: scanners.DiagnosticsSettings{},
124+
},
125+
want: want{
126+
broken: false,
127+
result: "",
128+
},
129+
},
130+
}
131+
for _, tt := range tests {
132+
t.Run(tt.name, func(t *testing.T) {
133+
s := &AppServiceScanner{
134+
diagnosticsSettings: tt.fields.diagnosticsSettings,
135+
}
136+
rules := s.GetRules()
137+
b, w := rules[tt.fields.rule].Eval(tt.fields.target, tt.fields.scanContext)
138+
got := want{
139+
broken: b,
140+
result: w,
141+
}
142+
if !reflect.DeepEqual(got, tt.want) {
143+
t.Errorf("AppServiceScanner Rule.Eval() = %v, want %v", got, tt.want)
144+
}
145+
})
146+
}
147+
}
148+
149+
func TestAppServiceScanner_AppRules(t *testing.T) {
150+
type fields struct {
151+
rule string
152+
target interface{}
153+
scanContext *scanners.ScanContext
154+
diagnosticsSettings scanners.DiagnosticsSettings
155+
}
156+
type want struct {
157+
broken bool
158+
result string
159+
}
160+
tests := []struct {
161+
name string
162+
fields fields
163+
want want
164+
}{
165+
{
166+
name: "AppServiceScanner DiagnosticSettings",
167+
fields: fields{
168+
rule: "DiagnosticSettings",
169+
target: &armappservice.Site{
170+
ID: to.StringPtr("test"),
171+
},
172+
scanContext: &scanners.ScanContext{},
173+
diagnosticsSettings: scanners.DiagnosticsSettings{
174+
HasDiagnosticsFunc: func(resourceId string) (bool, error) {
175+
return true, nil
176+
},
177+
},
178+
},
179+
want: want{
180+
broken: false,
181+
result: "",
182+
},
183+
},
184+
{
185+
name: "AppServiceScanner Private Endpoint",
186+
fields: fields{
187+
rule: "Private",
188+
target: &armappservice.Site{
189+
ID: to.StringPtr("test"),
190+
},
191+
scanContext: &scanners.ScanContext{
192+
PrivateEndpoints: map[string]bool{
193+
"test": true,
194+
},
195+
},
196+
diagnosticsSettings: scanners.DiagnosticsSettings{},
197+
},
198+
want: want{
199+
broken: false,
200+
result: "",
201+
},
202+
},
203+
{
204+
name: "AppServiceScanner CAF",
205+
fields: fields{
206+
rule: "CAF",
207+
target: &armappservice.Site{
208+
Name: to.StringPtr("app-test"),
209+
},
210+
scanContext: &scanners.ScanContext{},
211+
diagnosticsSettings: scanners.DiagnosticsSettings{},
212+
},
213+
want: want{
214+
broken: false,
215+
result: "",
216+
},
217+
},
218+
{
219+
name: "AppServiceScanner HTTPS only",
220+
fields: fields{
221+
rule: "app-007",
222+
target: &armappservice.Site{
223+
Properties: &armappservice.SiteProperties{
224+
HTTPSOnly: to.BoolPtr(true),
225+
},
226+
},
227+
scanContext: &scanners.ScanContext{},
228+
diagnosticsSettings: scanners.DiagnosticsSettings{},
229+
},
230+
want: want{
231+
broken: false,
232+
result: "",
233+
},
234+
},
235+
}
236+
for _, tt := range tests {
237+
t.Run(tt.name, func(t *testing.T) {
238+
s := &AppServiceScanner{
239+
diagnosticsSettings: tt.fields.diagnosticsSettings,
240+
}
241+
rules := s.GetAppRules()
242+
b, w := rules[tt.fields.rule].Eval(tt.fields.target, tt.fields.scanContext)
243+
got := want{
244+
broken: b,
245+
result: w,
246+
}
247+
if !reflect.DeepEqual(got, tt.want) {
248+
t.Errorf("AppServiceScanner Rule.Eval() = %v, want %v", got, tt.want)
249+
}
250+
})
251+
}
252+
}
253+
254+
func TestAppServiceScanner_FunctionRules(t *testing.T) {
255+
type fields struct {
256+
rule string
257+
target interface{}
258+
scanContext *scanners.ScanContext
259+
diagnosticsSettings scanners.DiagnosticsSettings
260+
}
261+
type want struct {
262+
broken bool
263+
result string
264+
}
265+
tests := []struct {
266+
name string
267+
fields fields
268+
want want
269+
}{
270+
{
271+
name: "AppServiceScanner DiagnosticSettings",
272+
fields: fields{
273+
rule: "DiagnosticSettings",
274+
target: &armappservice.Site{
275+
ID: to.StringPtr("test"),
276+
},
277+
scanContext: &scanners.ScanContext{},
278+
diagnosticsSettings: scanners.DiagnosticsSettings{
279+
HasDiagnosticsFunc: func(resourceId string) (bool, error) {
280+
return true, nil
281+
},
282+
},
283+
},
284+
want: want{
285+
broken: false,
286+
result: "",
287+
},
288+
},
289+
{
290+
name: "AppServiceScanner Private Endpoint",
291+
fields: fields{
292+
rule: "Private",
293+
target: &armappservice.Site{
294+
ID: to.StringPtr("test"),
295+
},
296+
scanContext: &scanners.ScanContext{
297+
PrivateEndpoints: map[string]bool{
298+
"test": true,
299+
},
300+
},
301+
diagnosticsSettings: scanners.DiagnosticsSettings{},
302+
},
303+
want: want{
304+
broken: false,
305+
result: "",
306+
},
307+
},
308+
{
309+
name: "AppServiceScanner CAF",
310+
fields: fields{
311+
rule: "CAF",
312+
target: &armappservice.Site{
313+
Name: to.StringPtr("func-test"),
314+
},
315+
scanContext: &scanners.ScanContext{},
316+
diagnosticsSettings: scanners.DiagnosticsSettings{},
317+
},
318+
want: want{
319+
broken: false,
320+
result: "",
321+
},
322+
},
323+
{
324+
name: "AppServiceScanner HTTPS only",
325+
fields: fields{
326+
rule: "func-007",
327+
target: &armappservice.Site{
328+
Properties: &armappservice.SiteProperties{
329+
HTTPSOnly: to.BoolPtr(true),
330+
},
331+
},
332+
scanContext: &scanners.ScanContext{},
333+
diagnosticsSettings: scanners.DiagnosticsSettings{},
334+
},
335+
want: want{
336+
broken: false,
337+
result: "",
338+
},
339+
},
340+
}
341+
for _, tt := range tests {
342+
t.Run(tt.name, func(t *testing.T) {
343+
s := &AppServiceScanner{
344+
diagnosticsSettings: tt.fields.diagnosticsSettings,
345+
}
346+
rules := s.GetFunctionRules()
347+
b, w := rules[tt.fields.rule].Eval(tt.fields.target, tt.fields.scanContext)
348+
got := want{
349+
broken: b,
350+
result: w,
351+
}
352+
if !reflect.DeepEqual(got, tt.want) {
353+
t.Errorf("AppServiceScanner Rule.Eval() = %v, want %v", got, tt.want)
354+
}
355+
})
356+
}
357+
}

0 commit comments

Comments
 (0)