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 }