github.com/cilium/cilium@v1.16.2/operator/pkg/model/translation/envoy_cluster_test.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright Authors of Cilium 3 4 package translation 5 6 import ( 7 "testing" 8 9 envoy_config_cluster_v3 "github.com/cilium/proxy/go/envoy/config/cluster/v3" 10 "github.com/stretchr/testify/require" 11 "google.golang.org/protobuf/proto" 12 ) 13 14 func TestWithClusterLbPolicy(t *testing.T) { 15 fn := WithClusterLbPolicy(int32(envoy_config_cluster_v3.Cluster_LEAST_REQUEST)) 16 17 t.Run("input is nil", func(t *testing.T) { 18 cluster := fn(nil) 19 require.Nil(t, cluster) 20 }) 21 22 t.Run("input is not nil", func(t *testing.T) { 23 cluster := &envoy_config_cluster_v3.Cluster{} 24 cluster = fn(cluster) 25 require.Equal(t, envoy_config_cluster_v3.Cluster_LEAST_REQUEST, cluster.LbPolicy) 26 }) 27 } 28 29 func TestWithOutlierDetection(t *testing.T) { 30 t.Run("input is nil", func(t *testing.T) { 31 fn := WithOutlierDetection(true) 32 cluster := fn(nil) 33 require.Nil(t, cluster) 34 }) 35 36 t.Run("input is not nil", func(t *testing.T) { 37 t.Run("enabled", func(t *testing.T) { 38 fn := WithOutlierDetection(true) 39 cluster := &envoy_config_cluster_v3.Cluster{} 40 cluster = fn(cluster) 41 require.NotNil(t, cluster.OutlierDetection) 42 require.True(t, cluster.OutlierDetection.SplitExternalLocalOriginErrors) 43 }) 44 45 t.Run("disabled", func(t *testing.T) { 46 fn := WithOutlierDetection(false) 47 cluster := &envoy_config_cluster_v3.Cluster{} 48 cluster = fn(cluster) 49 require.NotNil(t, cluster.OutlierDetection) 50 require.False(t, cluster.OutlierDetection.SplitExternalLocalOriginErrors) 51 }) 52 }) 53 } 54 55 func TestWithConnectionTimeout(t *testing.T) { 56 fn := WithConnectionTimeout(10) 57 58 t.Run("input is nil", func(t *testing.T) { 59 cluster := fn(nil) 60 require.Nil(t, cluster) 61 }) 62 63 t.Run("input is not nil", func(t *testing.T) { 64 cluster := &envoy_config_cluster_v3.Cluster{} 65 cluster = fn(cluster) 66 require.Equal(t, int64(10), cluster.ConnectTimeout.Seconds) 67 }) 68 } 69 70 func TestNewHTTPCluster(t *testing.T) { 71 res, err := NewHTTPCluster("dummy-name", "dummy-name") 72 require.Nil(t, err) 73 74 cluster := &envoy_config_cluster_v3.Cluster{} 75 err = proto.Unmarshal(res.Value, cluster) 76 77 require.Nil(t, err) 78 require.Equal(t, "dummy-name", cluster.Name) 79 require.Equal(t, &envoy_config_cluster_v3.Cluster_Type{ 80 Type: envoy_config_cluster_v3.Cluster_EDS, 81 }, cluster.ClusterDiscoveryType) 82 } 83 84 func TestNewTCPCluster(t *testing.T) { 85 res, err := NewHTTPCluster("dummy-name", "dummy-name") 86 require.Nil(t, err) 87 88 cluster := &envoy_config_cluster_v3.Cluster{} 89 err = proto.Unmarshal(res.Value, cluster) 90 91 require.Nil(t, err) 92 require.Equal(t, "dummy-name", cluster.Name) 93 require.Equal(t, &envoy_config_cluster_v3.Cluster_Type{ 94 Type: envoy_config_cluster_v3.Cluster_EDS, 95 }, cluster.ClusterDiscoveryType) 96 }