package topology import ( "testing" "gotest.tools/v3/assert" v1 "k8s.io/api/core/v1" ) var convertToConfigMapTestCases = []struct { name string tpInfo *Info data map[string]string }{ {"set defaults", New(), map[string]string{ downlinkRateKey: "100mbit", uplinkRateKey: "100mbit", thickPosKey: "false", gatewayEnabledKey: "false", gatewayRateLimitEnabledKey: "false", linkerdIdentityCertDurationKey: "40", linkerdIdentityCertRenewBeforeKey: "25", }}, {"override defaults", overrideDefaults(), map[string]string{ downlinkRateKey: "10mbit", uplinkRateKey: "10mbit", thickPosKey: "true", gatewayEnabledKey: "true", gatewayRateLimitEnabledKey: "true", linkerdIdentityCertDurationKey: "92", linkerdIdentityCertRenewBeforeKey: "72", }}, } var convertConfigMapToInfoTestCases = []struct { name string cm *v1.ConfigMap tpInfo *Info }{ // default topology info test values {"set defaults", overrideConfigMapData(map[string]string{ downlinkRateKey: "100mbit", uplinkRateKey: "100mbit", thickPosKey: "false", gatewayEnabledKey: "false", gatewayRateLimitEnabledKey: "false", linkerdIdentityCertDurationKey: "40", linkerdIdentityCertRenewBeforeKey: "25", }), New()}, {"set overrides", overrideConfigMapData(map[string]string{ downlinkRateKey: "10mbit", uplinkRateKey: "10mbit", thickPosKey: "true", gatewayEnabledKey: "true", gatewayRateLimitEnabledKey: "true", linkerdIdentityCertDurationKey: "92", linkerdIdentityCertRenewBeforeKey: "72", }), &Info{ DownlinkRateLimit: 10 * mbitRate, UplinkRateLimit: 10 * mbitRate, ThickPOS: true, EgressGatewayEnabled: true, GatewayRateLimitingEnabled: true, LinkerdIdentityCertDuration: 92, LinkerdIdentityCertRenewBefore: 72, }}, {"zero valued linkerd cert duration and renew before", overrideConfigMapData(map[string]string{ downlinkRateKey: "10mbit", uplinkRateKey: "10mbit", thickPosKey: "true", gatewayEnabledKey: "true", gatewayRateLimitEnabledKey: "true", linkerdIdentityCertDurationKey: "0", linkerdIdentityCertRenewBeforeKey: "0", }), &Info{ DownlinkRateLimit: 10 * mbitRate, UplinkRateLimit: 10 * mbitRate, ThickPOS: true, EgressGatewayEnabled: true, GatewayRateLimitingEnabled: true, LinkerdIdentityCertDuration: 96, LinkerdIdentityCertRenewBefore: 72, }}, } func TestConversionToConfigMap(t *testing.T) { for _, tc := range convertToConfigMapTestCases { t.Run(tc.name, func(t *testing.T) { expectedConfigMap := newTopologyInfoConfigMap() expectedConfigMap.Data = tc.data actualConfigMap := *tc.tpInfo.ToConfigMap() assert.DeepEqual(t, expectedConfigMap, actualConfigMap) }) } } func TestTopologyInfoValidation(t *testing.T) { for _, tc := range convertConfigMapToInfoTestCases { t.Run(tc.name, func(t *testing.T) { tpInfo := &Info{} tpInfo = tpInfo.FromConfigMap(tc.cm) assert.DeepEqual(t, tpInfo, tc.tpInfo) }) } } func overrideDefaults() *Info { tpInfo := New() tpInfo.ThickPOS = true tpInfo.EgressGatewayEnabled = true tpInfo.GatewayRateLimitingEnabled = true tpInfo.LinkerdIdentityCertDuration = 92 tpInfo.LinkerdIdentityCertRenewBefore = 72 tpInfo.UplinkRateLimit = 10 * mbitRate tpInfo.DownlinkRateLimit = 10 * mbitRate return tpInfo } func overrideConfigMapData(data map[string]string) *v1.ConfigMap { cm := newTopologyInfoConfigMap() cm.Data = data return &cm }