From 0428b707f4c66072c0cf28b4d1edc9340669905a Mon Sep 17 00:00:00 2001 From: Sun Seng David TAN Date: Thu, 9 Jun 2022 11:33:52 +0200 Subject: [PATCH] fix(Config.getHomeDir): should behave like kubectl and use HOME env variable on windows if available Signed-off-by: Sun Seng David TAN --- .../io/fabric8/kubernetes/client/Config.java | 8 ++-- .../fabric8/kubernetes/client/ConfigTest.java | 45 ++++++++++++++++++- 2 files changed, 48 insertions(+), 5 deletions(-) diff --git a/kubernetes-client-api/src/main/java/io/fabric8/kubernetes/client/Config.java b/kubernetes-client-api/src/main/java/io/fabric8/kubernetes/client/Config.java index bf894f804fb..0ebe9d8e35c 100644 --- a/kubernetes-client-api/src/main/java/io/fabric8/kubernetes/client/Config.java +++ b/kubernetes-client-api/src/main/java/io/fabric8/kubernetes/client/Config.java @@ -877,6 +877,10 @@ private static boolean isDirectoryAndExists(String filePath) { } protected static String getHomeDir(Predicate directoryExists) { + String home = System.getenv("HOME"); + if (home != null && !home.isEmpty() && directoryExists.test(home)) { + return home; + } String osName = System.getProperty("os.name").toLowerCase(Locale.ROOT); if (osName.startsWith("win")) { String homeDrive = System.getenv("HOMEDRIVE"); @@ -892,10 +896,6 @@ protected static String getHomeDir(Predicate directoryExists) { return userProfile; } } - String home = System.getenv("HOME"); - if (home != null && !home.isEmpty() && directoryExists.test(home)) { - return home; - } // Fall back to user.home should never really get here return System.getProperty("user.home", "."); diff --git a/kubernetes-client-api/src/test/java/io/fabric8/kubernetes/client/ConfigTest.java b/kubernetes-client-api/src/test/java/io/fabric8/kubernetes/client/ConfigTest.java index ede1f85bd7e..17a23c2280d 100644 --- a/kubernetes-client-api/src/test/java/io/fabric8/kubernetes/client/ConfigTest.java +++ b/kubernetes-client-api/src/test/java/io/fabric8/kubernetes/client/ConfigTest.java @@ -25,6 +25,7 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.EnabledOnOs; import org.junitpioneer.jupiter.ClearEnvironmentVariable; import org.junitpioneer.jupiter.SetEnvironmentVariable; import org.junitpioneer.jupiter.SetSystemProperty; @@ -49,6 +50,7 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.condition.OS.WINDOWS; public class ConfigTest { @@ -675,7 +677,48 @@ private String getTestPathValue(File commandFolder) { @SetSystemProperty(key = "os.name", value = "Windows") @SetEnvironmentVariable(key = "HOMEDRIVE", value = "C:\\Users\\") @SetEnvironmentVariable(key = "HOMEPATH", value = "user") - void getHomeDir_shouldUseHomedriveHomepathOnWindows() { + @SetEnvironmentVariable(key = "USERPROFILE", value = "C:\\Users\\user\\workspace\\myworkspace\\tools\\cygwin\\") + @ClearEnvironmentVariable(key = "HOME") + void getHomeDir_shouldUseHomedriveHomepathOnWindows_WhenHomeEnvVariableIsNotSet() { assertEquals("C:\\Users\\user", Config.getHomeDir(f -> true)); } + + @Test + @SetSystemProperty(key = "os.name", value = "Windows") + @ClearEnvironmentVariable(key = "HOMEDRIVE") + @ClearEnvironmentVariable(key = "HOMEPATH") + @SetEnvironmentVariable(key = "USERPROFILE", value = "C:\\Users\\user\\workspace\\myworkspace\\tools\\cygwin\\") + @ClearEnvironmentVariable(key = "HOME") + void getHomeDir_shouldUseUserprofileOnWindows_WhenHomeHomedriveHomepathEnvVariablesAreNotSet() { + assertEquals("C:\\Users\\user\\workspace\\myworkspace\\tools\\cygwin\\", Config.getHomeDir(f -> true)); + } + + @Test + @SetSystemProperty(key = "os.name", value = "Windows") + @SetEnvironmentVariable(key = "HOMEDRIVE", value = "C:\\Users\\") + @SetEnvironmentVariable(key = "HOMEPATH", value = "user") + @SetEnvironmentVariable(key = "HOME", value = "C:\\Users\\user\\workspace\\myworkspace\\tools\\cygwin\\") + void getHomeDir_shouldUseHomeEnvVariableOnWindows_WhenHomeEnvVariableIsSet() { + assertEquals("C:\\Users\\user\\workspace\\myworkspace\\tools\\cygwin\\", Config.getHomeDir(f -> true)); + } + + @Test + @EnabledOnOs({ WINDOWS }) + @SetEnvironmentVariable(key = "HOMEDRIVE", value = "C:\\Users\\") + @SetEnvironmentVariable(key = "HOMEPATH", value = "user") + @SetEnvironmentVariable(key = "HOME", value = "C:\\Users\\user\\workspace\\myworkspace\\tools\\cygwin\\") + void getHomeDir_shouldUseHomeEnvVariable_WhenEnabledOnWindows_WhenHomeEnvVariableIsSet() { + assertEquals("C:\\Users\\user\\workspace\\myworkspace\\tools\\cygwin\\", Config.getHomeDir(f -> true)); + } + + @Test + @SetSystemProperty(key = "user.home", value = "/home/user") + @ClearEnvironmentVariable(key = "HOMEDRIVE") + @ClearEnvironmentVariable(key = "HOMEPATH") + @ClearEnvironmentVariable(key = "HOME") + @ClearEnvironmentVariable(key = "USERPROFILE") + void getHomeDir_shouldReturnUserHomeProp_WhenHomeEnvVariablesAreNotSet() { + assertEquals("/home/user", Config.getHomeDir(f -> true)); + } + }