github.com/cilium/cilium@v1.16.2/operator/pkg/ciliumendpointslice/rate_limit_test.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright Authors of Cilium 3 4 package ciliumendpointslice 5 6 import ( 7 "encoding/json" 8 "testing" 9 10 "github.com/stretchr/testify/assert" 11 ) 12 13 func Test_parseDynamicRateLimitConfig(t *testing.T) { 14 jsonCfg := "[{\"nodes\":1,\"limit\":100,\"burst\":200}]" 15 wantCfg := rateLimit{Nodes: 1, Limit: 100, Burst: 200} 16 17 drl, err := parseDynamicRateLimit(jsonCfg) 18 assert.NoError(t, err) 19 assert.Contains(t, drl, wantCfg) 20 } 21 22 func Test_parseDynamicRateLimitConfigInvalid(t *testing.T) { 23 jsonCfg := "[{\"noides\": 1,\"blurst\":100}]" 24 25 drl, err := parseDynamicRateLimit(jsonCfg) 26 assert.Error(t, err) 27 assert.Nil(t, drl) 28 } 29 30 func TestSingleDynamicRateLimit(t *testing.T) { 31 limit := 15.0 32 burst := 30 33 p := params{ 34 Logger: log, 35 Cfg: Config{ 36 CESDynamicRateLimitConfig: "[{\"nodes\": 5, \"limit\": 15.0, \"burst\": 30}]", 37 }, 38 } 39 config, err := getRateLimitConfig(p) 40 assert.NoError(t, err) 41 assert.Equal(t, limit, config.current.Limit) 42 assert.Equal(t, burst, config.current.Burst) 43 assert.False(t, config.updateRateLimiterWithNodes(1000)) 44 assert.Equal(t, limit, config.current.Limit) 45 assert.Equal(t, burst, config.current.Burst) 46 assert.False(t, config.updateRateLimiterWithNodes(0)) 47 assert.Equal(t, limit, config.current.Limit) 48 assert.Equal(t, burst, config.current.Burst) 49 assert.False(t, config.updateRateLimiterWithNodes(-100)) 50 assert.Equal(t, limit, config.current.Limit) 51 assert.Equal(t, burst, config.current.Burst) 52 } 53 54 func TestMultipleUnsortedDynamicRateLimit(t *testing.T) { 55 limit0 := 5.0 56 burst0 := 10 57 limit1 := 11.0 58 burst1 := 22 59 limit2 := 16.0 60 burst2 := 32 61 rl := dynamicRateLimit{ 62 {Nodes: 15, Limit: 11.0, Burst: 22}, 63 {Nodes: 5, Limit: 5.0, Burst: 10}, 64 {Nodes: 25, Limit: 16.0, Burst: 32}, 65 } 66 67 rlJson, err := json.Marshal(rl) 68 assert.NoError(t, err) 69 p := params{ 70 Logger: log, 71 Cfg: Config{ 72 CESDynamicRateLimitConfig: string(rlJson), 73 }, 74 } 75 config, err := getRateLimitConfig(p) 76 assert.NoError(t, err) 77 assert.Equal(t, limit0, config.current.Limit) 78 assert.Equal(t, burst0, config.current.Burst) 79 assert.True(t, config.updateRateLimiterWithNodes(1000)) 80 assert.Equal(t, limit2, config.current.Limit) 81 assert.Equal(t, burst2, config.current.Burst) 82 assert.True(t, config.updateRateLimiterWithNodes(0)) 83 assert.Equal(t, limit0, config.current.Limit) 84 assert.Equal(t, burst0, config.current.Burst) 85 assert.True(t, config.updateRateLimiterWithNodes(24)) 86 assert.Equal(t, limit1, config.current.Limit) 87 assert.Equal(t, burst1, config.current.Burst) 88 assert.True(t, config.updateRateLimiterWithNodes(25)) 89 assert.Equal(t, limit2, config.current.Limit) 90 assert.Equal(t, burst2, config.current.Burst) 91 assert.True(t, config.updateRateLimiterWithNodes(-100)) 92 assert.Equal(t, limit0, config.current.Limit) 93 assert.Equal(t, burst0, config.current.Burst) 94 assert.True(t, config.updateRateLimiterWithNodes(16)) 95 assert.Equal(t, limit1, config.current.Limit) 96 assert.Equal(t, burst1, config.current.Burst) 97 assert.False(t, config.updateRateLimiterWithNodes(23)) 98 assert.Equal(t, limit1, config.current.Limit) 99 assert.Equal(t, burst1, config.current.Burst) 100 }