github.com/cilium/cilium@v1.16.2/pkg/maps/ctmap/ctmap_test.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright Authors of Cilium
     3  
     4  package ctmap
     5  
     6  import (
     7  	"testing"
     8  	"time"
     9  
    10  	"github.com/stretchr/testify/require"
    11  
    12  	"github.com/cilium/cilium/pkg/defaults"
    13  	"github.com/cilium/cilium/pkg/option"
    14  )
    15  
    16  func init() {
    17  	InitMapInfo(true, true, true)
    18  }
    19  
    20  func TestCalculateInterval(t *testing.T) {
    21  	cachedGCInterval = time.Duration(0)
    22  
    23  	require.Equal(t, time.Minute, calculateInterval(time.Minute, 0.1))  // no change
    24  	require.Equal(t, time.Minute, calculateInterval(time.Minute, 0.2))  // no change
    25  	require.Equal(t, time.Minute, calculateInterval(time.Minute, 0.25)) // no change
    26  
    27  	require.Equal(t, 36*time.Second, calculateInterval(time.Minute, 0.40))
    28  	require.Equal(t, 24*time.Second, calculateInterval(time.Minute, 0.60))
    29  
    30  	require.Equal(t, 15*time.Second, calculateInterval(10*time.Second, 0.01))
    31  	require.Equal(t, 15*time.Second, calculateInterval(10*time.Second, 0.04))
    32  
    33  	require.Equal(t, defaults.ConntrackGCMinInterval, calculateInterval(1*time.Second, 0.9))
    34  
    35  	require.Equal(t, defaults.ConntrackGCMaxLRUInterval, calculateInterval(24*time.Hour, 0.01))
    36  }
    37  
    38  func TestGetInterval(t *testing.T) {
    39  	cachedGCInterval = time.Minute
    40  	require.Equal(t, time.Minute, GetInterval(cachedGCInterval, 0.1))
    41  
    42  	// Setting ConntrackGCInterval overrides the calculation
    43  	oldInterval := option.Config.ConntrackGCInterval
    44  	option.Config.ConntrackGCInterval = 10 * time.Second
    45  	require.Equal(t, 10*time.Second, GetInterval(cachedGCInterval, 0.1))
    46  	option.Config.ConntrackGCInterval = oldInterval
    47  	require.Equal(t, time.Minute, GetInterval(cachedGCInterval, 0.1))
    48  
    49  	// Setting ConntrackGCMaxInterval limits the maximum interval
    50  	oldMaxInterval := option.Config.ConntrackGCMaxInterval
    51  	option.Config.ConntrackGCMaxInterval = 20 * time.Second
    52  	require.Equal(t, 20*time.Second, GetInterval(cachedGCInterval, 0.1))
    53  	option.Config.ConntrackGCMaxInterval = oldMaxInterval
    54  	require.Equal(t, time.Minute, GetInterval(cachedGCInterval, 0.1))
    55  
    56  	cachedGCInterval = time.Duration(0)
    57  }
    58  
    59  func TestFilterMapsByProto(t *testing.T) {
    60  	maps := []*Map{
    61  		newMap("tcp4", mapTypeIPv4TCPGlobal),
    62  		newMap("any4", mapTypeIPv4AnyGlobal),
    63  		newMap("tcp6", mapTypeIPv6TCPGlobal),
    64  		newMap("any6", mapTypeIPv6AnyGlobal),
    65  	}
    66  
    67  	ctMapTCP, ctMapAny := FilterMapsByProto(maps, CTMapIPv4)
    68  	require.Equal(t, mapTypeIPv4TCPGlobal, ctMapTCP.mapType)
    69  	require.Equal(t, mapTypeIPv4AnyGlobal, ctMapAny.mapType)
    70  
    71  	ctMapTCP, ctMapAny = FilterMapsByProto(maps, CTMapIPv6)
    72  	require.Equal(t, mapTypeIPv6TCPGlobal, ctMapTCP.mapType)
    73  	require.Equal(t, mapTypeIPv6AnyGlobal, ctMapAny.mapType)
    74  
    75  	maps = maps[0:2] // remove ipv6 maps
    76  	ctMapTCP, ctMapAny = FilterMapsByProto(maps, CTMapIPv6)
    77  	require.Nil(t, ctMapTCP)
    78  	require.Nil(t, ctMapAny)
    79  }