package info import ( "testing" "gotest.tools/v3/assert" v1 "k8s.io/api/core/v1" ) var convertToConfigMapTestCases = []struct { name string netInfo *Info data map[string]string }{ {"set defaults", New(), map[string]string{ clusterDNSKey: ClusterDNSDefault, podSubnetKey: PodSubnetDefault, serviceSubnetKey: ServiceSubnetDefault, egressTunnelSubnetKey: EgressTunnelSubnetDefault, }}, {"set overrides", &Info{ ClusterDNSIP: "10.0.0.1", ServiceSubnet: "10.0.0.0/16", PodSubnet: "172.23.0.0/16", EgressTunnelSubnet: "192.168.0.0/16", }, map[string]string{ clusterDNSKey: "10.0.0.1", serviceSubnetKey: "10.0.0.0/16", podSubnetKey: "172.23.0.0/16", egressTunnelSubnetKey: "192.168.0.0/16", }}, } var convertConfigMapToInfoTestCases = []struct { name string cm *v1.ConfigMap netInfo *Info }{ // default network info test values {"set defaults", overrideConfigMapData(map[string]string{}), New()}, {"set overrides", overrideConfigMapData(map[string]string{ clusterDNSKey: "10.0.0.1", serviceSubnetKey: "10.0.0.0/16", podSubnetKey: "172.23.0.0/16", egressTunnelSubnetKey: "192.168.0.0/16", }), &Info{ ClusterDNSIP: "10.0.0.1", ServiceSubnet: "10.0.0.0/16", PodSubnet: "172.23.0.0/16", EgressTunnelSubnet: "192.168.0.0/16", }}, } var validationTestCases = []struct { name string cm *v1.ConfigMap err error }{ // default network info test values {"valid configuration", overrideConfigMapData(map[string]string{}), nil}, {"invalid cluster dns ip", overrideConfigMapData(map[string]string{ clusterDNSKey: "10.0.x.1", serviceSubnetKey: "10.0.0.0/16", podSubnetKey: "172.23.0.0/16", egressTunnelSubnetKey: "192.168.0.0/16", }), ErrInvalidClusterDNSIP}, {"invalid service subnet", overrideConfigMapData(map[string]string{ clusterDNSKey: "10.0.0.1", serviceSubnetKey: "10.invalid.0.0-16", podSubnetKey: "172.23.0.0/16", egressTunnelSubnetKey: "192.168.0.0/16", }), ErrInvalidServiceSubnet}, {"invalid pod subnet", overrideConfigMapData(map[string]string{ clusterDNSKey: "10.0.0.1", serviceSubnetKey: "10.0.0.0/16", podSubnetKey: "172.invalid.0.0-16", egressTunnelSubnetKey: "192.168.0.0/16", }), ErrInvalidPodSubnet}, {"invalid tunnel subnet", overrideConfigMapData(map[string]string{ clusterDNSKey: "10.0.0.1", serviceSubnetKey: "10.0.0.0/16", podSubnetKey: "172.23.0.0/16", egressTunnelSubnetKey: "192.invalid.0.0-16", }), ErrInvalidEgressTunnelSubnet}, } func TestConversionToConfigMap(t *testing.T) { for _, tc := range convertToConfigMapTestCases { t.Run(tc.name, func(t *testing.T) { expectedConfigMap := overrideConfigMapData(tc.data) actualConfigMap := *tc.netInfo.ToConfigMap() assert.DeepEqual(t, *expectedConfigMap, actualConfigMap) }) } } func TestNetworkInfoValidation(t *testing.T) { for _, tc := range validationTestCases { t.Run(tc.name, func(t *testing.T) { netInfo := &Info{} netInfo = netInfo.FromConfigMap(tc.cm) err := netInfo.Validate() assert.Equal(t, err, tc.err) }) } } func TestConversionToInfo(t *testing.T) { for _, tc := range convertConfigMapToInfoTestCases { t.Run(tc.name, func(t *testing.T) { netInfo := &Info{} netInfo = netInfo.FromConfigMap(tc.cm) assert.DeepEqual(t, *netInfo, *tc.netInfo) }) } } func overrideConfigMapData(data map[string]string) *v1.ConfigMap { cm := newNetworkInfoConfigMap() cm.Data = data return &cm }