From 4c4adff43ab4ad53049aadc58fa356e06e31e7b5 Mon Sep 17 00:00:00 2001 From: Steven Powell Date: Mon, 1 Nov 2021 17:39:46 -0700 Subject: [PATCH 1/2] add tests --- cmd/minikube/cmd/config/addons_list.go | 4 ++ cmd/minikube/cmd/config/addons_list_test.go | 79 +++++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 cmd/minikube/cmd/config/addons_list_test.go diff --git a/cmd/minikube/cmd/config/addons_list.go b/cmd/minikube/cmd/config/addons_list.go index 5e19e09a9c..3052a21429 100644 --- a/cmd/minikube/cmd/config/addons_list.go +++ b/cmd/minikube/cmd/config/addons_list.go @@ -137,6 +137,10 @@ var printAddonsList = func(cc *config.ClusterConfig) { } var printAddonsJSON = func(cc *config.ClusterConfig) { + if cc == nil { + out.String("{}") + return + } addonNames := make([]string, 0, len(assets.Addons)) for addonName := range assets.Addons { addonNames = append(addonNames, addonName) diff --git a/cmd/minikube/cmd/config/addons_list_test.go b/cmd/minikube/cmd/config/addons_list_test.go new file mode 100644 index 0000000000..7b8a834d2b --- /dev/null +++ b/cmd/minikube/cmd/config/addons_list_test.go @@ -0,0 +1,79 @@ +/* +Copyright 2021 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package config + +import ( + "log" + "os" + "testing" + + "k8s.io/minikube/pkg/minikube/out" +) + +func TestAddonsList(t *testing.T) { + t.Run("NonExistingClusterTable", func(t *testing.T) { + b := make([]byte, 167) + r, w, err := os.Pipe() + if err != nil { + t.Fatalf("failed to create pipe: %v", err) + } + old := os.Stdout + defer func() { os.Stdout = old }() + os.Stdout = w + printAddonsList(nil) + if err := w.Close(); err != nil { + t.Fatalf("failed to close pipe: %v", err) + } + if _, err := r.Read(b); err != nil { + log.Fatalf("failed to read bytes: %v", err) + } + got := string(b) + expected := `|-----------------------------|-----------------------| +| ADDON NAME | MAINTAINER | +|-----------------------------|-----------------------|` + if got != expected { + t.Errorf("Expected header to be: %q; got = %q", expected, got) + } + }) + + t.Run("NonExistingClusterJSON", func(t *testing.T) { + b := make([]byte, 2) + r, w, err := os.Pipe() + if err != nil { + t.Fatalf("failed to create pipe: %v", err) + } + old := os.Stdout + defer func() { + os.Stdout = old + out.SetOutFile(os.Stdout) + }() + os.Stdout = w + out.SetOutFile(os.Stdout) + printAddonsJSON(nil) + if err := w.Close(); err != nil { + t.Fatalf("failed to close pipe: %v", err) + } + if _, err := r.Read(b); err != nil { + log.Fatalf("failed to read bytes: %v", err) + } + got := string(b) + expected := "{}" + if got != expected { + t.Errorf("Expected = %q; got = %q", expected, got) + } + }) +} From f0f1819123f4b0fcc51237bb8324f916783735f7 Mon Sep 17 00:00:00 2001 From: Steven Powell Date: Wed, 3 Nov 2021 10:12:41 -0700 Subject: [PATCH 2/2] output empty addons objects on JSON --- cmd/minikube/cmd/config/addons_list.go | 9 +++++---- cmd/minikube/cmd/config/addons_list_test.go | 22 +++++++++++++-------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/cmd/minikube/cmd/config/addons_list.go b/cmd/minikube/cmd/config/addons_list.go index 3052a21429..a76b9768c8 100644 --- a/cmd/minikube/cmd/config/addons_list.go +++ b/cmd/minikube/cmd/config/addons_list.go @@ -137,10 +137,6 @@ var printAddonsList = func(cc *config.ClusterConfig) { } var printAddonsJSON = func(cc *config.ClusterConfig) { - if cc == nil { - out.String("{}") - return - } addonNames := make([]string, 0, len(assets.Addons)) for addonName := range assets.Addons { addonNames = append(addonNames, addonName) @@ -150,6 +146,11 @@ var printAddonsJSON = func(cc *config.ClusterConfig) { addonsMap := map[string]map[string]interface{}{} for _, addonName := range addonNames { + if cc == nil { + addonsMap[addonName] = map[string]interface{}{} + continue + } + addonBundle := assets.Addons[addonName] enabled := addonBundle.IsEnabled(cc) diff --git a/cmd/minikube/cmd/config/addons_list_test.go b/cmd/minikube/cmd/config/addons_list_test.go index 7b8a834d2b..381295d392 100644 --- a/cmd/minikube/cmd/config/addons_list_test.go +++ b/cmd/minikube/cmd/config/addons_list_test.go @@ -17,7 +17,7 @@ limitations under the License. package config import ( - "log" + "encoding/json" "os" "testing" @@ -39,7 +39,7 @@ func TestAddonsList(t *testing.T) { t.Fatalf("failed to close pipe: %v", err) } if _, err := r.Read(b); err != nil { - log.Fatalf("failed to read bytes: %v", err) + t.Fatalf("failed to read bytes: %v", err) } got := string(b) expected := `|-----------------------------|-----------------------| @@ -51,7 +51,11 @@ func TestAddonsList(t *testing.T) { }) t.Run("NonExistingClusterJSON", func(t *testing.T) { - b := make([]byte, 2) + type addons struct { + Ambassador *interface{} `json:"ambassador"` + } + + b := make([]byte, 534) r, w, err := os.Pipe() if err != nil { t.Fatalf("failed to create pipe: %v", err) @@ -68,12 +72,14 @@ func TestAddonsList(t *testing.T) { t.Fatalf("failed to close pipe: %v", err) } if _, err := r.Read(b); err != nil { - log.Fatalf("failed to read bytes: %v", err) + t.Fatalf("failed to read bytes: %v", err) } - got := string(b) - expected := "{}" - if got != expected { - t.Errorf("Expected = %q; got = %q", expected, got) + got := addons{} + if err := json.Unmarshal(b, &got); err != nil { + t.Fatalf("failed to unmarshal output; output: %q; err: %v", string(b), err) + } + if got.Ambassador == nil { + t.Errorf("expected `ambassador` field to not be nil, but was") } }) }