github.com/cilium/cilium@v1.16.2/operator/pkg/ciliumendpointslice/manager_test.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright Authors of Cilium
     3  
     4  package ciliumendpointslice
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/stretchr/testify/assert"
    10  
    11  	capi_v2a1 "github.com/cilium/cilium/pkg/k8s/apis/cilium.io/v2alpha1"
    12  )
    13  
    14  func getCEP(name string, id int64) *capi_v2a1.CoreCiliumEndpoint {
    15  	return &capi_v2a1.CoreCiliumEndpoint{
    16  		Name:       name,
    17  		IdentityID: id,
    18  	}
    19  }
    20  
    21  func TestFCFSManager(t *testing.T) {
    22  	t.Run("Test adding new CEP to map", func(*testing.T) {
    23  		m := newCESManagerFcfs(2, log).(*cesManagerFcfs)
    24  		m.UpdateCEPMapping(getCEP("c1", 0), "ns")
    25  		assert.Equal(t, 1, m.mapping.getCESCount(), "Total number of CESs allocated is 1")
    26  		assert.Equal(t, 1, m.mapping.countCEPs(), "Total number of CEPs inserted is 1")
    27  	})
    28  	t.Run("Test creating enough CESs", func(*testing.T) {
    29  		m := newCESManagerFcfs(2, log).(*cesManagerFcfs)
    30  		m.UpdateCEPMapping(getCEP("c1", 0), "ns")
    31  		m.UpdateCEPMapping(getCEP("c2", 0), "ns")
    32  		m.UpdateCEPMapping(getCEP("c3", 0), "ns")
    33  		m.UpdateCEPMapping(getCEP("c4", 0), "ns")
    34  		m.UpdateCEPMapping(getCEP("c5", 0), "ns")
    35  		assert.Equal(t, 3, m.mapping.getCESCount(), "Total number of CESs allocated is 3")
    36  		assert.Equal(t, 5, m.mapping.countCEPs(), "Total number of CEPs inserted is 5")
    37  	})
    38  	t.Run("Test keeping the CEPs from different namespaces in different CESs", func(*testing.T) {
    39  		m := newCESManagerFcfs(5, log).(*cesManagerFcfs)
    40  		m.UpdateCEPMapping(getCEP("c1", 0), "ns1")
    41  		m.UpdateCEPMapping(getCEP("c2", 0), "ns2")
    42  		m.UpdateCEPMapping(getCEP("c3", 0), "ns3")
    43  		m.UpdateCEPMapping(getCEP("c4", 0), "ns4")
    44  		m.UpdateCEPMapping(getCEP("c5", 0), "ns5")
    45  		assert.Equal(t, 5, m.mapping.getCESCount(), "Total number of CESs allocated is 1")
    46  		assert.Equal(t, 5, m.mapping.countCEPs(), "Total number of CEPs inserted is 1")
    47  	})
    48  	t.Run("Test keeping the same mapping", func(*testing.T) {
    49  		m := newCESManagerFcfs(2, log).(*cesManagerFcfs)
    50  		m.UpdateCEPMapping(getCEP("c1", 0), "ns")
    51  		m.UpdateCEPMapping(getCEP("c1", 5), "ns")
    52  		assert.Equal(t, 1, m.mapping.getCESCount(), "Total number of CESs allocated is 1")
    53  		assert.Equal(t, 1, m.mapping.countCEPs(), "Total number of CEPs inserted is 1")
    54  	})
    55  	t.Run("Test reusing CES", func(*testing.T) {
    56  		m := newCESManagerFcfs(2, log).(*cesManagerFcfs)
    57  		m.UpdateCEPMapping(getCEP("c1", 0), "ns")
    58  		m.UpdateCEPMapping(getCEP("c2", 0), "ns")
    59  		m.RemoveCEPMapping(getCEP("c1", 0), "ns")
    60  		m.UpdateCEPMapping(getCEP("c3", 0), "ns")
    61  		m.RemoveCEPMapping(getCEP("c2", 0), "ns")
    62  		m.UpdateCEPMapping(getCEP("c4", 0), "ns")
    63  		m.RemoveCEPMapping(getCEP("c3", 0), "ns")
    64  		m.UpdateCEPMapping(getCEP("c5", 0), "ns")
    65  		assert.Equal(t, 1, m.mapping.getCESCount(), "Total number of CESs allocated is 1")
    66  		assert.Equal(t, 2, m.mapping.countCEPs(), "Total number of CEPs inserted is 2")
    67  	})
    68  }
    69  
    70  func TestIdentityManager(t *testing.T) {
    71  	t.Run("Test adding new CEP to map", func(*testing.T) {
    72  		m := newCESManagerIdentity(2, log).(*cesManagerIdentity)
    73  		m.UpdateCEPMapping(getCEP("c1", 0), "ns")
    74  		assert.Equal(t, 1, m.mapping.getCESCount(), "Total number of CESs allocated is 1")
    75  		assert.Equal(t, 1, m.mapping.countCEPs(), "Total number of CEPs inserted is 1")
    76  	})
    77  	t.Run("Test creating enough CESs", func(*testing.T) {
    78  		m := newCESManagerIdentity(2, log).(*cesManagerIdentity)
    79  		m.UpdateCEPMapping(getCEP("c1", 0), "ns")
    80  		m.UpdateCEPMapping(getCEP("c2", 0), "ns")
    81  		m.UpdateCEPMapping(getCEP("c3", 0), "ns")
    82  		m.UpdateCEPMapping(getCEP("c4", 0), "ns")
    83  		m.UpdateCEPMapping(getCEP("c5", 0), "ns")
    84  		assert.Equal(t, 3, m.mapping.getCESCount(), "Total number of CESs allocated is 3")
    85  		assert.Equal(t, 5, m.mapping.countCEPs(), "Total number of CEPs inserted is 5")
    86  	})
    87  	t.Run("Test keeping the CEPs from different namespaces in different CESs", func(*testing.T) {
    88  		m := newCESManagerIdentity(5, log).(*cesManagerIdentity)
    89  		m.UpdateCEPMapping(getCEP("c1", 0), "ns1")
    90  		m.UpdateCEPMapping(getCEP("c2", 0), "ns2")
    91  		m.UpdateCEPMapping(getCEP("c3", 0), "ns3")
    92  		m.UpdateCEPMapping(getCEP("c4", 0), "ns4")
    93  		m.UpdateCEPMapping(getCEP("c5", 0), "ns5")
    94  		assert.Equal(t, 5, m.mapping.getCESCount(), "Total number of CESs allocated is 1")
    95  		assert.Equal(t, 5, m.mapping.countCEPs(), "Total number of CEPs inserted is 1")
    96  	})
    97  	t.Run("Test grouping by id", func(*testing.T) {
    98  		m := newCESManagerIdentity(2, log).(*cesManagerIdentity)
    99  		m.UpdateCEPMapping(getCEP("c1", 1), "ns")
   100  		m.UpdateCEPMapping(getCEP("c2", 2), "ns")
   101  		m.UpdateCEPMapping(getCEP("c3", 3), "ns")
   102  		m.UpdateCEPMapping(getCEP("c4", 4), "ns")
   103  		m.UpdateCEPMapping(getCEP("c5", 4), "ns")
   104  		assert.Equal(t, 4, m.mapping.getCESCount(), "Total number of CESs allocated is 4")
   105  		assert.Equal(t, 5, m.mapping.countCEPs(), "Total number of CEPs inserted is 5")
   106  	})
   107  	t.Run("Test keeping the same mapping", func(*testing.T) {
   108  		m := newCESManagerIdentity(2, log).(*cesManagerIdentity)
   109  		m.UpdateCEPMapping(getCEP("c1", 0), "ns")
   110  		m.UpdateCEPMapping(getCEP("c1", 0), "ns")
   111  		assert.Equal(t, 1, m.mapping.getCESCount(), "Total number of CESs allocated is 1")
   112  		assert.Equal(t, 1, m.mapping.countCEPs(), "Total number of CEPs inserted is 1")
   113  	})
   114  	t.Run("Test moving CEP when ID changed", func(*testing.T) {
   115  		m := newCESManagerIdentity(2, log).(*cesManagerIdentity)
   116  		m.UpdateCEPMapping(getCEP("c1", 0), "ns")
   117  		m.UpdateCEPMapping(getCEP("c1", 1), "ns")
   118  		assert.Equal(t, 2, m.mapping.getCESCount(), "Total number of CESs allocated is 1")
   119  		assert.Equal(t, 1, m.mapping.countCEPs(), "Total number of CEPs inserted is 1")
   120  	})
   121  	t.Run("Test reusing CES", func(*testing.T) {
   122  		m := newCESManagerIdentity(2, log).(*cesManagerIdentity)
   123  		m.UpdateCEPMapping(getCEP("c1", 0), "ns")
   124  		m.UpdateCEPMapping(getCEP("c2", 0), "ns")
   125  		m.RemoveCEPMapping(getCEP("c1", 0), "ns")
   126  		m.UpdateCEPMapping(getCEP("c3", 0), "ns")
   127  		m.RemoveCEPMapping(getCEP("c2", 0), "ns")
   128  		m.UpdateCEPMapping(getCEP("c4", 0), "ns")
   129  		m.RemoveCEPMapping(getCEP("c3", 0), "ns")
   130  		m.UpdateCEPMapping(getCEP("c5", 0), "ns")
   131  		assert.Equal(t, 1, m.mapping.getCESCount(), "Total number of CESs allocated is 1")
   132  		assert.Equal(t, 2, m.mapping.countCEPs(), "Total number of CEPs inserted is 2")
   133  	})
   134  }