github.com/elfadel/cilium@v1.6.12/pkg/fqdn/helpers_test.go (about) 1 // Copyright 2019 Authors of Cilium 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 // +build !privileged_tests 16 17 package fqdn 18 19 import ( 20 "net" 21 "time" 22 23 "github.com/cilium/cilium/pkg/checker" 24 "github.com/cilium/cilium/pkg/policy/api" 25 "github.com/sirupsen/logrus" 26 . "gopkg.in/check.v1" 27 ) 28 29 func (ds *DNSCacheTestSuite) TestKeepUniqueNames(c *C) { 30 testData := []struct { 31 argument []string 32 expected []string 33 }{ 34 {[]string{"a", "b", "c"}, []string{"a", "b", "c"}}, 35 {[]string{"a", "b", "a", "c"}, []string{"a", "b", "c"}}, 36 {[]string{""}, []string{""}}, 37 {[]string{}, []string{}}, 38 } 39 40 for _, item := range testData { 41 val := KeepUniqueNames(item.argument) 42 c.Assert(val, checker.DeepEquals, item.expected) 43 } 44 } 45 46 func (ds *DNSCacheTestSuite) TestMapIPsToSelectors(c *C) { 47 48 var ( 49 ciliumIP1 = net.ParseIP("1.2.3.4") 50 ciliumIP2 = net.ParseIP("1.2.3.5") 51 ) 52 53 log.Level = logrus.DebugLevel 54 55 // Create DNS cache 56 now := time.Now() 57 cache := NewDNSCache(60) 58 59 selectors := map[api.FQDNSelector]struct{}{ 60 ciliumIOSel: {}, 61 } 62 63 // Empty cache. 64 selsMissingIPs, selIPMapping := mapSelectorsToIPs(selectors, cache) 65 c.Assert(len(selsMissingIPs), Equals, 1) 66 c.Assert(selsMissingIPs[0], Equals, ciliumIOSel) 67 c.Assert(len(selIPMapping), Equals, 0) 68 69 // Just one IP. 70 changed := cache.Update(now, prepareMatchName(ciliumIOSel.MatchName), []net.IP{ciliumIP1}, 100) 71 c.Assert(changed, Equals, true) 72 selsMissingIPs, selIPMapping = mapSelectorsToIPs(selectors, cache) 73 c.Assert(len(selsMissingIPs), Equals, 0) 74 c.Assert(len(selIPMapping), Equals, 1) 75 ciliumIPs, ok := selIPMapping[ciliumIOSel] 76 c.Assert(ok, Equals, true) 77 c.Assert(len(ciliumIPs), Equals, 1) 78 c.Assert(ciliumIPs[0].Equal(ciliumIP1), Equals, true) 79 80 // Two IPs now. 81 changed = cache.Update(now, prepareMatchName(ciliumIOSel.MatchName), []net.IP{ciliumIP1, ciliumIP2}, 100) 82 c.Assert(changed, Equals, true) 83 selsMissingIPs, selIPMapping = mapSelectorsToIPs(selectors, cache) 84 c.Assert(len(selsMissingIPs), Equals, 0) 85 c.Assert(len(selIPMapping), Equals, 1) 86 ciliumIPs, ok = selIPMapping[ciliumIOSel] 87 c.Assert(ok, Equals, true) 88 c.Assert(len(ciliumIPs), Equals, 2) 89 c.Assert(ciliumIPs[0].Equal(ciliumIP1), Equals, true) 90 c.Assert(ciliumIPs[1].Equal(ciliumIP2), Equals, true) 91 92 // Test with a MatchPattern. 93 selectors = map[api.FQDNSelector]struct{}{ 94 ciliumIOSelMatchPattern: {}, 95 } 96 selsMissingIPs, selIPMapping = mapSelectorsToIPs(selectors, cache) 97 c.Assert(len(selsMissingIPs), Equals, 0) 98 c.Assert(len(selIPMapping), Equals, 1) 99 ciliumIPs, ok = selIPMapping[ciliumIOSelMatchPattern] 100 c.Assert(ok, Equals, true) 101 c.Assert(len(ciliumIPs), Equals, 2) 102 c.Assert(ciliumIPs[0].Equal(ciliumIP1), Equals, true) 103 c.Assert(ciliumIPs[1].Equal(ciliumIP2), Equals, true) 104 105 selectors = map[api.FQDNSelector]struct{}{ 106 ciliumIOSelMatchPattern: {}, 107 ciliumIOSel: {}, 108 } 109 selsMissingIPs, selIPMapping = mapSelectorsToIPs(selectors, cache) 110 c.Assert(len(selsMissingIPs), Equals, 0) 111 c.Assert(len(selIPMapping), Equals, 2) 112 ciliumIPs, ok = selIPMapping[ciliumIOSelMatchPattern] 113 c.Assert(ok, Equals, true) 114 c.Assert(len(ciliumIPs), Equals, 2) 115 c.Assert(ciliumIPs[0].Equal(ciliumIP1), Equals, true) 116 c.Assert(ciliumIPs[1].Equal(ciliumIP2), Equals, true) 117 ciliumIPs, ok = selIPMapping[ciliumIOSel] 118 c.Assert(ok, Equals, true) 119 c.Assert(len(ciliumIPs), Equals, 2) 120 c.Assert(ciliumIPs[0].Equal(ciliumIP1), Equals, true) 121 c.Assert(ciliumIPs[1].Equal(ciliumIP2), Equals, true) 122 }