diff --git a/pkg/util/utils.go b/pkg/util/utils.go index 6d77da2ba4..8507cbfae3 100644 --- a/pkg/util/utils.go +++ b/pkg/util/utils.go @@ -24,7 +24,9 @@ import ( "strings" "time" + "github.com/blang/semver" "k8s.io/minikube/pkg/minikube/constants" + "k8s.io/minikube/pkg/version" ) // Until endlessly loops the provided function until a message is received on the done channel. @@ -95,5 +97,8 @@ func GetLocalkubeDownloadURL(versionOrURL string, filename string) (string, erro // no 'v' prefix in input, need to prepend it to version versionOrURL = "v" + versionOrURL } + if _, err = semver.Make(strings.TrimPrefix(versionOrURL, version.VersionPrefix)); err != nil { + return "", err + } return fmt.Sprintf("%s%s/%s", constants.LocalkubeDownloadURLPrefix, versionOrURL, filename), nil } diff --git a/pkg/util/utils_test.go b/pkg/util/utils_test.go index f32802a0ae..b62bfeb48a 100644 --- a/pkg/util/utils_test.go +++ b/pkg/util/utils_test.go @@ -19,6 +19,8 @@ package util import ( "fmt" "testing" + + "k8s.io/minikube/pkg/minikube/constants" ) // Returns a function that will return n errors, then return successfully forever. @@ -57,5 +59,33 @@ func TestRetry(t *testing.T) { if err := Retry(4, f); err == nil { t.Fatalf("Error should have been raised by retry.") } - +} + +type getLocalkubeArgs struct { + input string + expected string + expectedError bool +} + +func TestGetLocalkubeDownloadURL(t *testing.T) { + argsList := [...]getLocalkubeArgs{ + {"v1.3.0", + "https://storage.googleapis.com/minikube/k8sReleases/v1.3.0/localkube-linux-amd64", false}, + {"v1.3.3", + "https://storage.googleapis.com/minikube/k8sReleases/v1.3.3/localkube-linux-amd64", false}, + {"http://www.example.com/my-localkube", "http://www.example.com/my-localkube", false}, + {"abc", "", true}, + {"1.2.3.4", "", true}, + } + for _, args := range argsList { + url, err := GetLocalkubeDownloadURL(args.input, constants.LocalkubeLinuxFilename) + wasError := err != nil + if wasError != args.expectedError { + t.Errorf("GetLocalkubeDownloadURL Expected error was: %t, Actual Error was: %s", + args.expectedError, err) + } + if url != args.expected { + t.Errorf("GetLocalkubeDownloadURL: Expected %s, Actual: %s", args.expected, url) + } + } }