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  }