@@ -224,79 +224,91 @@ func TestRunner_CSVRow(t *testing.T) {
224224}
225225
226226func TestCreateNetworkpolicyInstance_AllowDenyFlags (t * testing.T ) {
227- // Test Allow flag blocks IPs outside allowed range
228- options := & Options {}
229- options .Allow = []string {"192.168.1.0/24" }
230-
231227 runner := & Runner {}
232- np , err := runner .createNetworkpolicyInstance (options )
233- require .Nil (t , err , "could not create networkpolicy instance" )
234- require .NotNil (t , np , "networkpolicy instance should not be nil" )
235-
236- // Should block IP outside allowed range
237- allowed := np .Validate ("8.8.8.8" )
238- require .False (t , allowed , "IP outside allowed range should be blocked" )
239-
240- // Should allow IP inside allowed range
241- allowed = np .Validate ("192.168.1.10" )
242- require .True (t , allowed , "IP inside allowed range should be allowed" )
243-
244- // Test Deny flag blocks IPs in denied range
245- options = & Options {}
246- options .Deny = []string {"127.0.0.0/8" }
247-
248- np , err = runner .createNetworkpolicyInstance (options )
249- require .Nil (t , err , "could not create networkpolicy instance" )
250-
251- // Should block IP in denied range
252- allowed = np .Validate ("127.0.0.1" )
253- require .False (t , allowed , "IP in denied range should be blocked" )
254-
255- // Should allow IP outside denied range
256- allowed = np .Validate ("8.8.8.8" )
257- require .True (t , allowed , "IP outside denied range should be allowed" )
258-
259- // Test combined Allow and Deny flags
260- options = & Options {}
261- options .Allow = []string {"192.168.0.0/16" } // Allow 192.168.x.x
262- options .Deny = []string {"192.168.1.0/24" } // But deny 192.168.1.x
263-
264- np , err = runner .createNetworkpolicyInstance (options )
265- require .Nil (t , err , "could not create networkpolicy instance" )
266-
267- // Should block IP outside allowed range (even if not in deny list)
268- allowed = np .Validate ("10.0.0.1" )
269- require .False (t , allowed , "IP outside allowed range should be blocked" )
270-
271- // Should block IP in denied range (even if in allowed range)
272- allowed = np .Validate ("192.168.1.100" )
273- require .False (t , allowed , "IP in denied range should be blocked even if in allowed range" )
274-
275- // Should allow IP in allowed range but not in denied range
276- allowed = np .Validate ("192.168.2.50" )
277- require .True (t , allowed , "IP in allowed range but not in denied range should be allowed" )
278-
279- // Test with multiple Allow and Deny ranges
280- options = & Options {}
281- options .Allow = []string {"10.0.0.0/8" , "172.16.0.0/12" } // Allow 10.x.x.x and 172.16-31.x.x
282- options .Deny = []string {"10.1.0.0/16" , "172.20.0.0/16" } // Deny 10.1.x.x and 172.20.x.x
283-
284- np , err = runner .createNetworkpolicyInstance (options )
285- require .Nil (t , err , "could not create networkpolicy instance" )
286-
287- // Test various scenarios
288- allowed = np .Validate ("10.0.1.1" )
289- require .True (t , allowed , "10.0.1.1 should be allowed (in allow range, not in deny)" )
290-
291- allowed = np .Validate ("10.1.1.1" )
292- require .False (t , allowed , "10.1.1.1 should be blocked (in deny range)" )
293-
294- allowed = np .Validate ("172.16.1.1" )
295- require .True (t , allowed , "172.16.1.1 should be allowed (in allow range, not in deny)" )
296-
297- allowed = np .Validate ("172.20.1.1" )
298- require .False (t , allowed , "172.20.1.1 should be blocked (in deny range)" )
299-
300- allowed = np .Validate ("192.168.1.1" )
301- require .False (t , allowed , "192.168.1.1 should be blocked (not in any allow range)" )
228+
229+ tests := []struct {
230+ name string
231+ allow []string
232+ deny []string
233+ testCases []struct {
234+ ip string
235+ expected bool
236+ reason string
237+ }
238+ }{
239+ {
240+ name : "Allow flag blocks IPs outside allowed range" ,
241+ allow : []string {"192.168.1.0/24" },
242+ deny : nil ,
243+ testCases : []struct {
244+ ip string
245+ expected bool
246+ reason string
247+ }{
248+ {"8.8.8.8" , false , "IP outside allowed range should be blocked" },
249+ {"192.168.1.10" , true , "IP inside allowed range should be allowed" },
250+ },
251+ },
252+ {
253+ name : "Deny flag blocks IPs in denied range" ,
254+ allow : nil ,
255+ deny : []string {"127.0.0.0/8" },
256+ testCases : []struct {
257+ ip string
258+ expected bool
259+ reason string
260+ }{
261+ {"127.0.0.1" , false , "IP in denied range should be blocked" },
262+ {"8.8.8.8" , true , "IP outside denied range should be allowed" },
263+ },
264+ },
265+ {
266+ name : "Combined Allow and Deny flags" ,
267+ allow : []string {"192.168.0.0/16" },
268+ deny : []string {"192.168.1.0/24" },
269+ testCases : []struct {
270+ ip string
271+ expected bool
272+ reason string
273+ }{
274+ {"10.0.0.1" , false , "IP outside allowed range should be blocked" },
275+ {"192.168.1.100" , false , "IP in denied range should be blocked even if in allowed range" },
276+ {"192.168.2.50" , true , "IP in allowed range but not in denied range should be allowed" },
277+ },
278+ },
279+ {
280+ name : "Multiple Allow and Deny ranges" ,
281+ allow : []string {"10.0.0.0/8" , "172.16.0.0/12" },
282+ deny : []string {"10.1.0.0/16" , "172.20.0.0/16" },
283+ testCases : []struct {
284+ ip string
285+ expected bool
286+ reason string
287+ }{
288+ {"10.0.1.1" , true , "10.0.1.1 should be allowed (in allow range, not in deny)" },
289+ {"10.1.1.1" , false , "10.1.1.1 should be blocked (in deny range)" },
290+ {"172.16.1.1" , true , "172.16.1.1 should be allowed (in allow range, not in deny)" },
291+ {"172.20.1.1" , false , "172.20.1.1 should be blocked (in deny range)" },
292+ {"192.168.1.1" , false , "192.168.1.1 should be blocked (not in any allow range)" },
293+ },
294+ },
295+ }
296+
297+ for _ , tc := range tests {
298+ t .Run (tc .name , func (t * testing.T ) {
299+ options := & Options {
300+ Allow : tc .allow ,
301+ Deny : tc .deny ,
302+ }
303+
304+ np , err := runner .createNetworkpolicyInstance (options )
305+ require .Nil (t , err , "could not create networkpolicy instance" )
306+ require .NotNil (t , np , "networkpolicy instance should not be nil" )
307+
308+ for _ , testCase := range tc .testCases {
309+ allowed := np .Validate (testCase .ip )
310+ require .Equal (t , testCase .expected , allowed , testCase .reason )
311+ }
312+ })
313+ }
302314}
0 commit comments