1 package info
2
3 import (
4 "testing"
5
6 "gotest.tools/v3/assert"
7 v1 "k8s.io/api/core/v1"
8 )
9
10 var convertToConfigMapTestCases = []struct {
11 name string
12 netInfo *Info
13 data map[string]string
14 }{
15 {"set defaults", New(), map[string]string{
16 clusterDNSKey: ClusterDNSDefault,
17 podSubnetKey: PodSubnetDefault,
18 serviceSubnetKey: ServiceSubnetDefault,
19 egressTunnelSubnetKey: EgressTunnelSubnetDefault,
20 }},
21 {"set overrides", &Info{
22 ClusterDNSIP: "10.0.0.1",
23 ServiceSubnet: "10.0.0.0/16",
24 PodSubnet: "172.23.0.0/16",
25 EgressTunnelSubnet: "192.168.0.0/16",
26 }, map[string]string{
27 clusterDNSKey: "10.0.0.1",
28 serviceSubnetKey: "10.0.0.0/16",
29 podSubnetKey: "172.23.0.0/16",
30 egressTunnelSubnetKey: "192.168.0.0/16",
31 }},
32 }
33
34 var convertConfigMapToInfoTestCases = []struct {
35 name string
36 cm *v1.ConfigMap
37 netInfo *Info
38 }{
39
40 {"set defaults", overrideConfigMapData(map[string]string{}), New()},
41 {"set overrides", overrideConfigMapData(map[string]string{
42 clusterDNSKey: "10.0.0.1",
43 serviceSubnetKey: "10.0.0.0/16",
44 podSubnetKey: "172.23.0.0/16",
45 egressTunnelSubnetKey: "192.168.0.0/16",
46 }), &Info{
47 ClusterDNSIP: "10.0.0.1",
48 ServiceSubnet: "10.0.0.0/16",
49 PodSubnet: "172.23.0.0/16",
50 EgressTunnelSubnet: "192.168.0.0/16",
51 }},
52 }
53
54 var validationTestCases = []struct {
55 name string
56 cm *v1.ConfigMap
57 err error
58 }{
59
60 {"valid configuration", overrideConfigMapData(map[string]string{}), nil},
61 {"invalid cluster dns ip", overrideConfigMapData(map[string]string{
62 clusterDNSKey: "10.0.x.1",
63 serviceSubnetKey: "10.0.0.0/16",
64 podSubnetKey: "172.23.0.0/16",
65 egressTunnelSubnetKey: "192.168.0.0/16",
66 }), ErrInvalidClusterDNSIP},
67 {"invalid service subnet", overrideConfigMapData(map[string]string{
68 clusterDNSKey: "10.0.0.1",
69 serviceSubnetKey: "10.invalid.0.0-16",
70 podSubnetKey: "172.23.0.0/16",
71 egressTunnelSubnetKey: "192.168.0.0/16",
72 }), ErrInvalidServiceSubnet},
73 {"invalid pod subnet", overrideConfigMapData(map[string]string{
74 clusterDNSKey: "10.0.0.1",
75 serviceSubnetKey: "10.0.0.0/16",
76 podSubnetKey: "172.invalid.0.0-16",
77 egressTunnelSubnetKey: "192.168.0.0/16",
78 }), ErrInvalidPodSubnet},
79 {"invalid tunnel subnet", overrideConfigMapData(map[string]string{
80 clusterDNSKey: "10.0.0.1",
81 serviceSubnetKey: "10.0.0.0/16",
82 podSubnetKey: "172.23.0.0/16",
83 egressTunnelSubnetKey: "192.invalid.0.0-16",
84 }), ErrInvalidEgressTunnelSubnet},
85 }
86
87 func TestConversionToConfigMap(t *testing.T) {
88 for _, tc := range convertToConfigMapTestCases {
89 t.Run(tc.name, func(t *testing.T) {
90 expectedConfigMap := overrideConfigMapData(tc.data)
91 actualConfigMap := *tc.netInfo.ToConfigMap()
92 assert.DeepEqual(t, *expectedConfigMap, actualConfigMap)
93 })
94 }
95 }
96
97 func TestNetworkInfoValidation(t *testing.T) {
98 for _, tc := range validationTestCases {
99 t.Run(tc.name, func(t *testing.T) {
100 netInfo := &Info{}
101 netInfo = netInfo.FromConfigMap(tc.cm)
102 err := netInfo.Validate()
103 assert.Equal(t, err, tc.err)
104 })
105 }
106 }
107
108 func TestConversionToInfo(t *testing.T) {
109 for _, tc := range convertConfigMapToInfoTestCases {
110 t.Run(tc.name, func(t *testing.T) {
111 netInfo := &Info{}
112 netInfo = netInfo.FromConfigMap(tc.cm)
113 assert.DeepEqual(t, *netInfo, *tc.netInfo)
114 })
115 }
116 }
117
118 func overrideConfigMapData(data map[string]string) *v1.ConfigMap {
119 cm := newNetworkInfoConfigMap()
120 cm.Data = data
121 return &cm
122 }
123
View as plain text