Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions pkg/config/cloud_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,11 +61,11 @@ func (cc *CloudConfig) LoadCloudCFG() error {
if err != nil {
return fmt.Errorf("read cloud config error: %s ", err.Error())
}
err = yaml.Unmarshal(content, CloudCFG)
err = yaml.Unmarshal(content, cc)
if err != nil {
return err
}
CloudCFG.SetDefaultValue()
cc.SetDefaultValue()
return nil
}

Expand All @@ -79,8 +79,8 @@ func (cc *CloudConfig) SetDefaultValue() {
if cc.Global.RouteMaxConcurrentReconciles == 0 {
cc.Global.RouteMaxConcurrentReconciles = DefaultRouteMaxConcurrentReconciles
}
CloudCFG.Global.ResourceGroupID = strings.TrimSpace(CloudCFG.Global.ResourceGroupID)
CloudCFG.Global.RouteTableIDS = strings.TrimSpace(CloudCFG.Global.RouteTableIDS)
cc.Global.ResourceGroupID = strings.TrimSpace(cc.Global.ResourceGroupID)
cc.Global.RouteTableIDS = strings.TrimSpace(cc.Global.RouteTableIDS)
}

func (cc *CloudConfig) GetKubernetesClusterTag() string {
Expand Down
189 changes: 189 additions & 0 deletions pkg/config/cloud_config_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,189 @@
package config

import (
"k8s.io/cloud-provider-alibaba-cloud/pkg/util"
"os"
"testing"

"github.com/stretchr/testify/assert"
)

const (
testCloudConfig = `
global:
accessKeyId: dGVzdC1hY2Nlc3Mta2V5
accessKeySecret: dGVzdC1rZXktc2VjcmV0
clusterID: test-cluster-id
resourceGroupID: rg-123456
region: cn-hangzhou
routeTableIDS: vtb-123456
serviceBackendType: ecs
uid: 123456
vpcID: vpc-123456
vswitchID: cn-hangzhou-a:vsw-123456,cn-wulanchabu-c:vsw-234567
serviceMaxConcurrentReconciles: 5
nodeMaxConcurrentReconciles: 2
`
)

func TestCloudConfig_SetDefaultValue(t *testing.T) {
cfg := &CloudConfig{}
cfg.SetDefaultValue()

assert.Equal(t, DefaultServiceMaxConcurrentReconciles, cfg.Global.ServiceMaxConcurrentReconciles)
assert.Equal(t, DefaultNodeMaxConcurrentReconciles, cfg.Global.NodeMaxConcurrentReconciles)
assert.Equal(t, DefaultRouteMaxConcurrentReconciles, cfg.Global.RouteMaxConcurrentReconciles)

cfg = &CloudConfig{}
cfg.Global.ServiceMaxConcurrentReconciles = 10
cfg.Global.NodeMaxConcurrentReconciles = 15
cfg.Global.RouteMaxConcurrentReconciles = 20
cfg.SetDefaultValue()

assert.Equal(t, 10, cfg.Global.ServiceMaxConcurrentReconciles)
assert.Equal(t, 15, cfg.Global.NodeMaxConcurrentReconciles)
assert.Equal(t, 20, cfg.Global.RouteMaxConcurrentReconciles)
}

func TestCloudConfig_GetKubernetesClusterTag(t *testing.T) {
cfg := &CloudConfig{}
tag := cfg.GetKubernetesClusterTag()
assert.Equal(t, util.ClusterTagKey, tag) // util.ClusterTagKey 的值

cfg = &CloudConfig{}
customTag := "my-custom-cluster-tag"
cfg.Global.KubernetesClusterTag = customTag

tag = cfg.GetKubernetesClusterTag()
assert.Equal(t, customTag, tag)
}

func TestCloudConfig_LoadCloudCFG_YAML(t *testing.T) {
tmpfile, err := os.CreateTemp("", "cloud-config")
assert.NoError(t, err)
defer os.Remove(tmpfile.Name())

_, err = tmpfile.Write([]byte(testCloudConfig))
assert.NoError(t, err)
err = tmpfile.Close()
assert.NoError(t, err)

oldPath := ControllerCFG.CloudConfigPath
ControllerCFG.CloudConfigPath = tmpfile.Name()
defer func() {
ControllerCFG.CloudConfigPath = oldPath
}()
cfg := &CloudConfig{}
err = cfg.LoadCloudCFG()
assert.NoError(t, err)

assert.Equal(t, "dGVzdC1hY2Nlc3Mta2V5", cfg.Global.AccessKeyID)
assert.Equal(t, "dGVzdC1rZXktc2VjcmV0", cfg.Global.AccessKeySecret)
assert.Equal(t, "test-cluster-id", cfg.Global.ClusterID)
assert.Equal(t, "cn-hangzhou", cfg.Global.Region)
assert.Equal(t, "vpc-123456", cfg.Global.VpcID)
assert.Equal(t, "cn-hangzhou-a:vsw-123456,cn-wulanchabu-c:vsw-234567", cfg.Global.VswitchID)
assert.Equal(t, "123456", cfg.Global.UID)
assert.Equal(t, 5, cfg.Global.ServiceMaxConcurrentReconciles)
assert.Equal(t, 2, cfg.Global.NodeMaxConcurrentReconciles)
}

func TestCloudConfig_LoadCloudCFG_JSON(t *testing.T) {
config := `
{
"Global": {
"AccessKeyID": "dGVzdC1hY2Nlc3Mta2V5",
"AccessKeySecret": "dGVzdC1rZXktc2VjcmV0",
"ClusterID": "test-cluster-id",
"ResourceGroupID": "rg-123456",
"Region": "cn-hangzhou",
"RouteTableIDS": "vtb-123456",
"ServiceBackendType": "ecs",
"UID": "123456",
"VpcID": "vpc-123456",
"VswitchID": "cn-hangzhou-a:vsw-123456,cn-wulanchabu-c:vsw-234567",
"ServiceMaxConcurrentReconciles": 5,
"NodeMaxConcurrentReconciles": 2
}
}
`
tmpfile, err := os.CreateTemp("", "cloud-config")
assert.NoError(t, err)
defer os.Remove(tmpfile.Name())

_, err = tmpfile.Write([]byte(config))
assert.NoError(t, err)
err = tmpfile.Close()
assert.NoError(t, err)

oldPath := ControllerCFG.CloudConfigPath
ControllerCFG.CloudConfigPath = tmpfile.Name()
defer func() {
ControllerCFG.CloudConfigPath = oldPath
}()
cfg := &CloudConfig{}
err = cfg.LoadCloudCFG()
assert.NoError(t, err)

assert.Equal(t, "dGVzdC1hY2Nlc3Mta2V5", cfg.Global.AccessKeyID)
assert.Equal(t, "dGVzdC1rZXktc2VjcmV0", cfg.Global.AccessKeySecret)
assert.Equal(t, "test-cluster-id", cfg.Global.ClusterID)
assert.Equal(t, "cn-hangzhou", cfg.Global.Region)
assert.Equal(t, "vpc-123456", cfg.Global.VpcID)
assert.Equal(t, "cn-hangzhou-a:vsw-123456,cn-wulanchabu-c:vsw-234567", cfg.Global.VswitchID)
assert.Equal(t, "123456", cfg.Global.UID)
assert.Equal(t, 5, cfg.Global.ServiceMaxConcurrentReconciles)
assert.Equal(t, 2, cfg.Global.NodeMaxConcurrentReconciles)
}

func TestCloudConfig_LoadCloudCFG_FormatError(t *testing.T) {
config := `
{
"Global": {
"AccessKeyID": ""
}
`
tmpfile, err := os.CreateTemp("", "cloud-config")
assert.NoError(t, err)
defer os.Remove(tmpfile.Name())

_, err = tmpfile.Write([]byte(config))
assert.NoError(t, err)
err = tmpfile.Close()
assert.NoError(t, err)

oldPath := ControllerCFG.CloudConfigPath
ControllerCFG.CloudConfigPath = tmpfile.Name()
defer func() {
ControllerCFG.CloudConfigPath = oldPath
}()
cfg := &CloudConfig{}
err = cfg.LoadCloudCFG()
assert.Error(t, err)
}

func TestCloudConfig_LoadCloudCFG_FileNotFound(t *testing.T) {
oldPath := ControllerCFG.CloudConfigPath
ControllerCFG.CloudConfigPath = "/non/existent/file.yaml"
defer func() {
ControllerCFG.CloudConfigPath = oldPath
}()

cfg := &CloudConfig{}
err := cfg.LoadCloudCFG()
assert.Error(t, err)
}

func TestCloudConfig_PrintInfo(t *testing.T) {
cfg := &CloudConfig{}
cfg.Global.RouteTableIDS = "route-table-1,route-table-2"
cfg.Global.ResourceGroupID = "rg-12345"
cfg.Global.FeatureGates = "Feature1=true,Feature2=false"
cfg.Global.NodeMaxConcurrentReconciles = 3
cfg.Global.ServiceMaxConcurrentReconciles = 5
cfg.Global.RouteMaxConcurrentReconciles = 2

assert.NotPanics(t, func() {
cfg.PrintInfo()
})
}
2 changes: 1 addition & 1 deletion pkg/config/controller_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ func (cfg *ControllerConfig) Validate() error {
cfg.RouteReconciliationPeriod.Duration = 1 * time.Minute
}

if cfg.NodeReconcileBatchSize == 0 {
if cfg.NodeReconcileBatchSize <= 0 {
cfg.NodeReconcileBatchSize = 100
}

Expand Down
Loading