diff --git a/test/integration/driver_install_or_update_test.go b/test/integration/driver_install_or_update_test.go index 8074dd4423..682b872d0c 100644 --- a/test/integration/driver_install_or_update_test.go +++ b/test/integration/driver_install_or_update_test.go @@ -29,7 +29,7 @@ import ( "k8s.io/minikube/pkg/drivers" ) -func TestDriverInstallOrUpdate(t *testing.T) { +func TestKVMDriverInstallOrUpdate(t *testing.T) { if NoneDriver() { t.Skip("Skip none driver.") } @@ -37,6 +37,7 @@ func TestDriverInstallOrUpdate(t *testing.T) { if runtime.GOOS != "linux" { t.Skip("Skip if not linux.") } + MaybeParallel(t) tests := []struct { @@ -94,3 +95,66 @@ func TestDriverInstallOrUpdate(t *testing.T) { } } } + +func TestHyperKitDriverInstallOrUpdate(t *testing.T) { + if runtime.GOOS != "darwin" { + t.Skip("Skip if not darwin.") + } + + MaybeParallel(t) + + tests := []struct { + name string + path string + }{ + {name: "driver-without-version-support", path: filepath.Join(*testdataDir, "hyperkit-driver-without-version")}, + {name: "driver-with-older-version", path: filepath.Join(*testdataDir, "hyperkit-driver-without-version")}, + } + + originalPath := os.Getenv("PATH") + defer os.Setenv("PATH", originalPath) + + for _, tc := range tests { + dir, err := ioutil.TempDir("", tc.name) + if err != nil { + t.Fatalf("Expected to create tempdir. test: %s, got: %v", tc.name, err) + } + defer os.RemoveAll(dir) + + pwd, err := os.Getwd() + if err != nil { + t.Fatalf("Error not expected when getting working directory. test: %s, got: %v", tc.name, err) + } + + path := filepath.Join(pwd, tc.path) + + _, err = os.Stat(filepath.Join(path, "docker-machine-driver-hyperkit")) + if err != nil { + t.Fatalf("Expected driver to exist. test: %s, got: %v", tc.name, err) + } + + // change permission to allow driver to be executable + err = os.Chmod(filepath.Join(path, "docker-machine-driver-hyperkit"), 0700) + if err != nil { + t.Fatalf("Expected not expected when changing driver permission. test: %s, got: %v", tc.name, err) + } + + os.Setenv("PATH", fmt.Sprintf("%s:%s", path, originalPath)) + + // NOTE: This should be a real version, as it impacts the downloaded URL + newerVersion, err := semver.Make("1.3.0") + if err != nil { + t.Fatalf("Expected new semver. test: %v, got: %v", tc.name, err) + } + + err = drivers.InstallOrUpdate("docker-machine-driver-hyperkit", dir, newerVersion) + if err != nil { + t.Fatalf("Failed to update driver to %v. test: %s, got: %v", newerVersion, tc.name, err) + } + + _, err = os.Stat(filepath.Join(dir, "docker-machine-driver-hyperkit")) + if err != nil { + t.Fatalf("Expected driver to be download. test: %s, got: %v", tc.name, err) + } + } +} diff --git a/test/integration/testdata/hyperkit-driver-older-version/docker-machine-driver-hyperkit b/test/integration/testdata/hyperkit-driver-older-version/docker-machine-driver-hyperkit new file mode 100755 index 0000000000..2df4a7b221 Binary files /dev/null and b/test/integration/testdata/hyperkit-driver-older-version/docker-machine-driver-hyperkit differ diff --git a/test/integration/testdata/hyperkit-driver-without-version/docker-machine-driver-hyperkit b/test/integration/testdata/hyperkit-driver-without-version/docker-machine-driver-hyperkit new file mode 100755 index 0000000000..c209cbbb69 Binary files /dev/null and b/test/integration/testdata/hyperkit-driver-without-version/docker-machine-driver-hyperkit differ