github.com/aporeto-inc/trireme-lib@v10.358.0+incompatible/controller/internal/enforcer/acls/utils_test.go (about) 1 package acls 2 3 import ( 4 "net" 5 "reflect" 6 "testing" 7 ) 8 9 func TestParseAddress(t *testing.T) { 10 ipv4 := net.ParseIP("192.0.2.1") 11 if ipv4 == nil { 12 panic("ipv4 address invalid at test prerequisite") 13 } 14 ipv6 := net.ParseIP("2001:db8::1") 15 if ipv6 == nil { 16 panic("ipv6 address invalid at test prerequisite") 17 } 18 type args struct { 19 address string 20 } 21 tests := []struct { 22 name string 23 args args 24 want *Address 25 wantErr bool 26 }{ 27 { 28 name: "invalid IP address", 29 args: args{ 30 address: "invalid IP address", 31 }, 32 want: nil, 33 wantErr: true, 34 }, 35 { 36 name: "invalid network mask", 37 args: args{ 38 address: "192.0.2.0/invalid", 39 }, 40 want: nil, 41 wantErr: true, 42 }, 43 { 44 name: "IPv4 address without mask", 45 args: args{ 46 address: "192.0.2.1", 47 }, 48 want: &Address{ 49 IP: ipv4, 50 Mask: 32, 51 NoMatch: false, 52 }, 53 }, 54 { 55 name: "IPv6 address without mask", 56 args: args{ 57 address: "2001:db8::1", 58 }, 59 want: &Address{ 60 IP: ipv6, 61 Mask: 128, 62 NoMatch: false, 63 }, 64 }, 65 { 66 name: "IPv4 address with mask", 67 args: args{ 68 address: "192.0.2.1/24", 69 }, 70 want: &Address{ 71 IP: ipv4, 72 Mask: 24, 73 NoMatch: false, 74 }, 75 }, 76 { 77 name: "IPv6 address with mask", 78 args: args{ 79 address: "2001:db8::1/64", 80 }, 81 want: &Address{ 82 IP: ipv6, 83 Mask: 64, 84 NoMatch: false, 85 }, 86 }, 87 { 88 name: "IPv4 address with mask and nomatch", 89 args: args{ 90 address: "!192.0.2.1/24", 91 }, 92 want: &Address{ 93 IP: ipv4, 94 Mask: 24, 95 NoMatch: true, 96 }, 97 }, 98 { 99 name: "IPv6 address with mask and nomatch", 100 args: args{ 101 address: "!2001:db8::1/64", 102 }, 103 want: &Address{ 104 IP: ipv6, 105 Mask: 64, 106 NoMatch: true, 107 }, 108 }, 109 } 110 for _, tt := range tests { 111 t.Run(tt.name, func(t *testing.T) { 112 got, err := ParseAddress(tt.args.address) 113 if (err != nil) != tt.wantErr { 114 t.Errorf("ParseAddress() error = %v, wantErr %v", err, tt.wantErr) 115 return 116 } 117 if !reflect.DeepEqual(got, tt.want) { 118 t.Errorf("ParseAddress() = %v, want %v", got, tt.want) 119 } 120 }) 121 } 122 }