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  }