From 3451320ad2b484274740f4a996c814f1cc82d963 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20F=20Bj=C3=B6rklund?= Date: Sat, 23 Nov 2019 10:30:16 +0100 Subject: [PATCH] Fix validation of container-runtime config It was trying to load (non-existing) config, and also confusingly looking for containerd. Add a unit test as well. --- cmd/minikube/cmd/config/config.go | 2 +- cmd/minikube/cmd/config/validations.go | 9 +++++++ cmd/minikube/cmd/config/validations_test.go | 27 +++++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/cmd/minikube/cmd/config/config.go b/cmd/minikube/cmd/config/config.go index 5b13061e2ffb..d15b7a43b7fb 100644 --- a/cmd/minikube/cmd/config/config.go +++ b/cmd/minikube/cmd/config/config.go @@ -51,7 +51,7 @@ var settings = []Setting{ { name: "container-runtime", set: SetString, - validations: []setFn{IsContainerdRuntime}, + validations: []setFn{IsValidRuntime}, callbacks: []setFn{RequiresRestartMsg}, }, { diff --git a/cmd/minikube/cmd/config/validations.go b/cmd/minikube/cmd/config/validations.go index 89cc0432503d..7fb73e759e04 100644 --- a/cmd/minikube/cmd/config/validations.go +++ b/cmd/minikube/cmd/config/validations.go @@ -147,6 +147,15 @@ func IsValidAddon(name string, val string) error { return errors.Errorf("Cannot enable/disable invalid addon %s", name) } +// IsValidRuntime checks if a string is a valid runtime +func IsValidRuntime(name string, runtime string) error { + _, err := cruntime.New(cruntime.Config{Type: runtime}) + if err != nil { + return fmt.Errorf("invalid runtime: %v", err) + } + return nil +} + // IsContainerdRuntime is a validator which returns an error if the current runtime is not containerd func IsContainerdRuntime(_, _ string) error { config, err := config.Load() diff --git a/cmd/minikube/cmd/config/validations_test.go b/cmd/minikube/cmd/config/validations_test.go index e74d630d1900..7662859298cc 100644 --- a/cmd/minikube/cmd/config/validations_test.go +++ b/cmd/minikube/cmd/config/validations_test.go @@ -98,6 +98,33 @@ func TestValidCIDR(t *testing.T) { runValidations(t, tests, "cidr", IsValidCIDR) } +func TestValidRuntime(t *testing.T) { + var tests = []validationTest{ + { + value: "", // default + shouldErr: false, + }, + { + value: "invalid", + shouldErr: true, + }, + { + value: "containerd", + shouldErr: false, + }, + { + value: "crio", + shouldErr: false, + }, + { + value: "docker", + shouldErr: false, + }, + } + + runValidations(t, tests, "container-runtime", IsValidRuntime) +} + func TestIsURLExists(t *testing.T) { self, err := os.Executable()