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  }