From 9a598328296a1c1c3922e135d99bd960014eb535 Mon Sep 17 00:00:00 2001 From: Jack Francis Date: Mon, 4 Jun 2018 14:57:41 -0700 Subject: [PATCH 1/3] check for kubernetesConfig nil --- pkg/acsengine/engine.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/acsengine/engine.go b/pkg/acsengine/engine.go index ff95d5e86c..2ba96d155f 100644 --- a/pkg/acsengine/engine.go +++ b/pkg/acsengine/engine.go @@ -70,7 +70,7 @@ func GenerateKubeConfig(properties *api.Properties, location string) (string, er kubeconfig := string(b) // variable replacement kubeconfig = strings.Replace(kubeconfig, "{{WrapAsVerbatim \"variables('caCertificate')\"}}", base64.StdEncoding.EncodeToString([]byte(properties.CertificateProfile.CaCertificate)), -1) - if properties.OrchestratorProfile.KubernetesConfig.PrivateCluster != nil && helpers.IsTrueBoolPointer(properties.OrchestratorProfile.KubernetesConfig.PrivateCluster.Enabled) { + if properties.OrchestratorProfile.KubernetesConfig != nil && properties.OrchestratorProfile.KubernetesConfig.PrivateCluster != nil && helpers.IsTrueBoolPointer(properties.OrchestratorProfile.KubernetesConfig.PrivateCluster.Enabled) { if properties.MasterProfile.Count > 1 { // more than 1 master, use the internal lb IP firstMasterIP := net.ParseIP(properties.MasterProfile.FirstConsecutiveStaticIP).To4() From d29b623c1ca2b479c4702f7b7731dc1bb8e0f6a4 Mon Sep 17 00:00:00 2001 From: Jack Francis Date: Mon, 4 Jun 2018 15:33:19 -0700 Subject: [PATCH 2/3] basic unit tests --- pkg/acsengine/engine.go | 8 +++++++- pkg/acsengine/engine_test.go | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/pkg/acsengine/engine.go b/pkg/acsengine/engine.go index 2ba96d155f..037cefac5d 100644 --- a/pkg/acsengine/engine.go +++ b/pkg/acsengine/engine.go @@ -63,6 +63,9 @@ func GenerateClusterID(properties *api.Properties) string { // GenerateKubeConfig returns a JSON string representing the KubeConfig func GenerateKubeConfig(properties *api.Properties, location string) (string, error) { + if properties.CertificateProfile == nil { + return "", fmt.Errorf("CertificateProfile property may not be nil in GenerateKubeConfig") + } b, err := Asset(kubeConfigJSON) if err != nil { return "", fmt.Errorf("error reading kube config template file %s: %s", kubeConfigJSON, err.Error()) @@ -70,7 +73,10 @@ func GenerateKubeConfig(properties *api.Properties, location string) (string, er kubeconfig := string(b) // variable replacement kubeconfig = strings.Replace(kubeconfig, "{{WrapAsVerbatim \"variables('caCertificate')\"}}", base64.StdEncoding.EncodeToString([]byte(properties.CertificateProfile.CaCertificate)), -1) - if properties.OrchestratorProfile.KubernetesConfig != nil && properties.OrchestratorProfile.KubernetesConfig.PrivateCluster != nil && helpers.IsTrueBoolPointer(properties.OrchestratorProfile.KubernetesConfig.PrivateCluster.Enabled) { + if properties.OrchestratorProfile != nil && + properties.OrchestratorProfile.KubernetesConfig != nil && + properties.OrchestratorProfile.KubernetesConfig.PrivateCluster != nil && + helpers.IsTrueBoolPointer(properties.OrchestratorProfile.KubernetesConfig.PrivateCluster.Enabled) { if properties.MasterProfile.Count > 1 { // more than 1 master, use the internal lb IP firstMasterIP := net.ParseIP(properties.MasterProfile.FirstConsecutiveStaticIP).To4() diff --git a/pkg/acsengine/engine_test.go b/pkg/acsengine/engine_test.go index e826a2908d..e61e3c4dcf 100644 --- a/pkg/acsengine/engine_test.go +++ b/pkg/acsengine/engine_test.go @@ -596,3 +596,35 @@ func TestGenerateIpList(t *testing.T) { } } } + +func TestGenerateKubeConfig(t *testing.T) { + locale := gotext.NewLocale(path.Join("..", "..", "translations"), "en_US") + i18n.Initialize(locale) + + apiloader := &api.Apiloader{ + Translator: &i18n.Translator{ + Locale: locale, + }, + } + + testData := "./testdata/simple/kubernetes.json" + + containerService, _, err := apiloader.LoadContainerServiceFromFile(testData, true, false, nil) + if err != nil { + t.Fatalf("Failed to load container service from file: %v", err) + } + kubeConfig, err := GenerateKubeConfig(containerService.Properties, "westus2") + // TODO add actual kubeconfig validation + if len(kubeConfig) < 1 { + t.Fatalf("Got unexpected kubeconfig payload: %v", kubeConfig) + } + if err != nil { + t.Fatalf("Failed to call GenerateKubeConfig with simple Kubernetes config from file: %v", testData) + } + + p := api.Properties{} + _, err = GenerateKubeConfig(&p, "westus2") + if err == nil { + t.Fatalf("Expected an error result from nil Properties child properties") + } +} From 4cf4470c31b0c437cd8b3efe5fed421b9cdd4be0 Mon Sep 17 00:00:00 2001 From: Jack Francis Date: Mon, 4 Jun 2018 15:47:32 -0700 Subject: [PATCH 3/3] check for nil Properties --- pkg/acsengine/engine.go | 3 +++ pkg/acsengine/engine_test.go | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/pkg/acsengine/engine.go b/pkg/acsengine/engine.go index 037cefac5d..504a5321e1 100644 --- a/pkg/acsengine/engine.go +++ b/pkg/acsengine/engine.go @@ -63,6 +63,9 @@ func GenerateClusterID(properties *api.Properties) string { // GenerateKubeConfig returns a JSON string representing the KubeConfig func GenerateKubeConfig(properties *api.Properties, location string) (string, error) { + if properties == nil { + return "", fmt.Errorf("Properties nil in GenerateKubeConfig") + } if properties.CertificateProfile == nil { return "", fmt.Errorf("CertificateProfile property may not be nil in GenerateKubeConfig") } diff --git a/pkg/acsengine/engine_test.go b/pkg/acsengine/engine_test.go index e61e3c4dcf..1128a07e64 100644 --- a/pkg/acsengine/engine_test.go +++ b/pkg/acsengine/engine_test.go @@ -627,4 +627,9 @@ func TestGenerateKubeConfig(t *testing.T) { if err == nil { t.Fatalf("Expected an error result from nil Properties child properties") } + + _, err = GenerateKubeConfig(nil, "westus2") + if err == nil { + t.Fatalf("Expected an error result from nil Properties child properties") + } }