github.com/cilium/cilium@v1.16.2/pkg/ip/cidr_test.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright Authors of Cilium
     3  
     4  package ip
     5  
     6  import (
     7  	"net"
     8  	"net/netip"
     9  	"testing"
    10  
    11  	"github.com/stretchr/testify/assert"
    12  )
    13  
    14  func TestAddrToIPNet(t *testing.T) {
    15  	_, v4IPNet, err := net.ParseCIDR("1.1.1.1/32")
    16  	assert.NoError(t, err)
    17  	_, v6IPNet, err := net.ParseCIDR("::ff/128")
    18  	assert.NoError(t, err)
    19  
    20  	ip4 := netip.MustParseAddr("1.1.1.1")
    21  	assert.NoError(t, err)
    22  	assert.Equal(t, v4IPNet, AddrToIPNet(ip4))
    23  
    24  	ip6 := netip.MustParseAddr("::ff")
    25  	assert.NoError(t, err)
    26  	assert.Equal(t, v6IPNet, AddrToIPNet(ip6))
    27  
    28  	var nilNet *net.IPNet
    29  	assert.Equal(t, nilNet, AddrToIPNet(netip.Addr{}))
    30  }
    31  
    32  func TestIPToNetPrefix(t *testing.T) {
    33  	v4, _, err := net.ParseCIDR("1.1.1.1/32")
    34  	assert.NoError(t, err)
    35  	v6, _, err := net.ParseCIDR("::ff/128")
    36  	assert.NoError(t, err)
    37  	assert.Equal(t, netip.PrefixFrom(netip.MustParseAddr(v4.String()), 32), IPToNetPrefix(v4.To4()))
    38  	assert.Equal(t, netip.PrefixFrom(netip.MustParseAddr(v6.String()), 128), IPToNetPrefix(v6.To16()))
    39  
    40  	assert.Equal(t, netip.Prefix{}, IPToNetPrefix(nil))
    41  }
    42  
    43  func mustParseCIDR(t *testing.T, s string) *net.IPNet {
    44  	_, n, err := net.ParseCIDR(s)
    45  	assert.NoError(t, err)
    46  	return n
    47  }
    48  
    49  func TestNetsContainsAny(t *testing.T) {
    50  	tests := []struct {
    51  		name string
    52  		a    []*net.IPNet
    53  		b    []*net.IPNet
    54  		ret  bool
    55  	}{
    56  		{
    57  			name: "a contains b",
    58  			a:    []*net.IPNet{mustParseCIDR(t, "0.0.0.0/0")},
    59  			b:    []*net.IPNet{mustParseCIDR(t, "192.0.0.1/32")},
    60  			ret:  true,
    61  		},
    62  		{
    63  			name: "b contains a",
    64  			a:    []*net.IPNet{mustParseCIDR(t, "192.0.0.1/32")},
    65  			b:    []*net.IPNet{mustParseCIDR(t, "0.0.0.0/0")},
    66  		},
    67  		{
    68  			name: "a equals b",
    69  			a:    []*net.IPNet{mustParseCIDR(t, "192.0.0.1/32")},
    70  			b:    []*net.IPNet{mustParseCIDR(t, "192.0.0.1/32")},
    71  			ret:  true,
    72  		},
    73  	}
    74  
    75  	for _, tt := range tests {
    76  		t.Run(tt.name, func(t *testing.T) {
    77  			assert.Equal(t, tt.ret, NetsContainsAny(tt.a, tt.b))
    78  		})
    79  	}
    80  }