github.com/cilium/cilium@v1.16.2/pkg/fqdn/helpers_test.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright Authors of Cilium
     3  
     4  package fqdn
     5  
     6  import (
     7  	"net/netip"
     8  	"testing"
     9  	"time"
    10  
    11  	"github.com/sirupsen/logrus"
    12  	"github.com/stretchr/testify/require"
    13  
    14  	"github.com/cilium/cilium/pkg/ip"
    15  	"github.com/cilium/cilium/pkg/policy/api"
    16  )
    17  
    18  var (
    19  	ciliumIOSel = api.FQDNSelector{
    20  		MatchName: "cilium.io",
    21  	}
    22  
    23  	githubSel = api.FQDNSelector{
    24  		MatchName: "github.com",
    25  	}
    26  
    27  	ciliumIOSelMatchPattern = api.FQDNSelector{
    28  		MatchPattern: "*cilium.io.",
    29  	}
    30  )
    31  
    32  func TestMapIPsToSelectors(t *testing.T) {
    33  	var (
    34  		ciliumIP1   = netip.MustParseAddr("1.2.3.4")
    35  		ciliumIP2   = netip.MustParseAddr("1.2.3.5")
    36  		nameManager = NewNameManager(Config{
    37  			MinTTL: 1,
    38  			Cache:  NewDNSCache(0),
    39  		})
    40  	)
    41  
    42  	log.Level = logrus.DebugLevel
    43  
    44  	// Create DNS cache
    45  	now := time.Now()
    46  	cache := nameManager.cache
    47  
    48  	// Empty cache.
    49  	nameIPMapping := nameManager.mapSelectorsToNamesLocked(ciliumIOSel)
    50  	require.Empty(t, nameIPMapping)
    51  
    52  	// Just one IP.
    53  	ciliumIOName := prepareMatchName(ciliumIOSel.MatchName)
    54  	changed := cache.Update(now, ciliumIOName, []netip.Addr{ciliumIP1}, 100)
    55  	require.Equal(t, true, changed)
    56  	nameIPMapping = nameManager.mapSelectorsToNamesLocked(ciliumIOSel)
    57  	require.Equal(t, 1, len(nameIPMapping))
    58  	println(ciliumIOSel.MatchName)
    59  	ciliumIPs, ok := nameIPMapping[ciliumIOName]
    60  	require.Equal(t, true, ok)
    61  	require.Equal(t, 1, len(ciliumIPs))
    62  	require.Equal(t, ciliumIP1, ciliumIPs[0])
    63  
    64  	// Two IPs now.
    65  	changed = cache.Update(now, ciliumIOName, []netip.Addr{ciliumIP1, ciliumIP2}, 100)
    66  	require.Equal(t, true, changed)
    67  	nameIPMapping = nameManager.mapSelectorsToNamesLocked(ciliumIOSel)
    68  	require.Equal(t, 1, len(nameIPMapping))
    69  	ciliumIPs, ok = nameIPMapping[ciliumIOName]
    70  	require.Equal(t, true, ok)
    71  	require.Equal(t, 2, len(ciliumIPs))
    72  	ip.SortAddrList(ciliumIPs)
    73  	require.Equal(t, ciliumIP1, ciliumIPs[0])
    74  	require.Equal(t, ciliumIP2, ciliumIPs[1])
    75  
    76  	// Test with a MatchPattern.
    77  	nameIPMapping = nameManager.mapSelectorsToNamesLocked(ciliumIOSelMatchPattern)
    78  	require.Equal(t, 1, len(nameIPMapping))
    79  	ciliumIPs, ok = nameIPMapping[ciliumIOName]
    80  	require.Equal(t, true, ok)
    81  	require.Equal(t, 2, len(ciliumIPs))
    82  	ip.SortAddrList(ciliumIPs)
    83  	require.Equal(t, ciliumIP1, ciliumIPs[0])
    84  	require.Equal(t, ciliumIP2, ciliumIPs[1])
    85  }