github.com/cilium/cilium@v1.16.2/operator/pkg/ciliumenvoyconfig/envoy_config_test.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright Authors of Cilium
     3  
     4  package ciliumenvoyconfig
     5  
     6  import (
     7  	"testing"
     8  
     9  	envoy_config_cluster_v3 "github.com/cilium/proxy/go/envoy/config/cluster/v3"
    10  	envoy_config_listener "github.com/cilium/proxy/go/envoy/config/listener/v3"
    11  	envoy_config_route_v3 "github.com/cilium/proxy/go/envoy/config/route/v3"
    12  	"github.com/stretchr/testify/require"
    13  	"google.golang.org/protobuf/proto"
    14  	corev1 "k8s.io/api/core/v1"
    15  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    16  )
    17  
    18  func Test_getClusterResources(t *testing.T) {
    19  	r := &ciliumEnvoyConfigReconciler{}
    20  	res, err := r.getClusterResources(&corev1.Service{
    21  		ObjectMeta: metav1.ObjectMeta{
    22  			Name:      "dummy-service",
    23  			Namespace: "dummy-namespace",
    24  		},
    25  	})
    26  	require.NoError(t, err)
    27  
    28  	require.Len(t, res, 1)
    29  
    30  	cluster := &envoy_config_cluster_v3.Cluster{}
    31  	err = proto.Unmarshal(res[0].Value, cluster)
    32  	require.NoError(t, err)
    33  
    34  	require.Equal(t, "dummy-namespace/dummy-service", cluster.Name)
    35  	require.Equal(t, envoy_config_cluster_v3.Cluster_ROUND_ROBIN, cluster.LbPolicy)
    36  	require.Equal(t, &envoy_config_cluster_v3.Cluster_Type{
    37  		Type: envoy_config_cluster_v3.Cluster_EDS,
    38  	}, cluster.ClusterDiscoveryType)
    39  }
    40  
    41  func Test_getRouteConfigurationResource(t *testing.T) {
    42  	r := &ciliumEnvoyConfigReconciler{}
    43  	res, err := r.getRouteConfigurationResource(&corev1.Service{
    44  		ObjectMeta: metav1.ObjectMeta{
    45  			Name:      "dummy-service",
    46  			Namespace: "dummy-namespace",
    47  		},
    48  	})
    49  
    50  	require.NoError(t, err)
    51  	routeConfig := &envoy_config_route_v3.RouteConfiguration{}
    52  	err = proto.Unmarshal(res.Value, routeConfig)
    53  	require.NoError(t, err)
    54  
    55  	require.Len(t, routeConfig.VirtualHosts, 1)
    56  	require.Equal(t, "dummy-namespace/dummy-service", routeConfig.VirtualHosts[0].Name)
    57  	require.Equal(t, []string{"*"}, routeConfig.VirtualHosts[0].Domains)
    58  	require.Len(t, routeConfig.VirtualHosts[0].Routes, 1)
    59  }
    60  
    61  func Test_getListenerResource(t *testing.T) {
    62  	r := &ciliumEnvoyConfigReconciler{}
    63  	res, err := r.getListenerResource(&corev1.Service{
    64  		ObjectMeta: metav1.ObjectMeta{
    65  			Name:      "dummy-service",
    66  			Namespace: "dummy-namespace",
    67  		},
    68  	})
    69  	require.NoError(t, err)
    70  
    71  	listener := &envoy_config_listener.Listener{}
    72  	err = proto.Unmarshal(res.Value, listener)
    73  	require.NoError(t, err)
    74  
    75  	require.Len(t, listener.ListenerFilters, 1)
    76  	require.Len(t, listener.FilterChains, 1)
    77  	require.Len(t, listener.FilterChains[0].Filters, 1)
    78  	require.IsType(t, &envoy_config_listener.Filter_TypedConfig{}, listener.FilterChains[0].Filters[0].ConfigType)
    79  }