github.com/cilium/cilium@v1.16.2/pkg/maps/tunnel/tunnel_test.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright Authors of Cilium
     3  
     4  package tunnel
     5  
     6  import (
     7  	"net"
     8  	"testing"
     9  
    10  	"github.com/cilium/ebpf/rlimit"
    11  	"github.com/stretchr/testify/require"
    12  
    13  	cmtypes "github.com/cilium/cilium/pkg/clustermesh/types"
    14  	"github.com/cilium/cilium/pkg/testutils"
    15  )
    16  
    17  func setupTunnelMapTestSuite(tb testing.TB) {
    18  	testutils.PrivilegedTest(tb)
    19  	err := rlimit.RemoveMemlock()
    20  	require.Nil(tb, err)
    21  }
    22  
    23  func TestClusterAwareAddressing(t *testing.T) {
    24  	setupTunnelMapTestSuite(t)
    25  	m := NewTunnelMap("test_cilium_tunnel_map")
    26  
    27  	err := m.OpenOrCreate()
    28  	require.Nil(t, err)
    29  
    30  	prefix0 := cmtypes.MustParseAddrCluster("10.0.0.1")
    31  	prefix1 := cmtypes.MustParseAddrCluster("10.0.0.1@1")
    32  	endpoint0 := net.ParseIP("192.168.0.1")
    33  	endpoint1 := net.ParseIP("192.168.1.1")
    34  
    35  	// Test insertion with bare IP
    36  	err = m.SetTunnelEndpoint(0, prefix0, endpoint0)
    37  	require.Nil(t, err)
    38  
    39  	// Test insertion with AddrCluster
    40  	err = m.SetTunnelEndpoint(0, prefix1, endpoint1)
    41  	require.Nil(t, err)
    42  
    43  	// Test if tunnel map can distinguish prefix0 and prefix1
    44  	ip0, err := m.GetTunnelEndpoint(prefix0)
    45  	require.Nil(t, err)
    46  	require.Equal(t, true, ip0.Equal(endpoint0))
    47  
    48  	ip1, err := m.GetTunnelEndpoint(prefix1)
    49  	require.Nil(t, err)
    50  	require.Equal(t, true, ip1.Equal(endpoint1))
    51  
    52  	// Delete prefix0 and check it deletes prefix0 correctly
    53  	err = m.DeleteTunnelEndpoint(prefix0)
    54  	require.Nil(t, err)
    55  
    56  	_, err = m.GetTunnelEndpoint(prefix0)
    57  	require.Error(t, err)
    58  
    59  	_, err = m.GetTunnelEndpoint(prefix1)
    60  	require.Nil(t, err)
    61  
    62  	// Delete prefix0 and check it deletes prefix0 correctly
    63  	err = m.DeleteTunnelEndpoint(prefix1)
    64  	require.Nil(t, err)
    65  
    66  	_, err = m.GetTunnelEndpoint(prefix1)
    67  	require.Error(t, err)
    68  
    69  	err = m.Unpin()
    70  	require.Nil(t, err)
    71  }