< prev index next >

test/lib/jdk/test/lib/OSVersion.java

Print this page
rev 51542 : 8210039: move OSInfo to top level testlibrary
Reviewed-by: duke

*** 21,216 **** * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ ! package jdk.testlibrary; ! import java.security.PrivilegedAction; ! import java.util.HashMap; ! import java.util.Map; import java.io.BufferedReader; import java.io.FileReader; ! import java.io.InputStreamReader; ! import static jdk.testlibrary.OSInfo.OSType.*; ! /** ! * @author Pavel Porvatov ! * copied to testlibrary by yan ! */ ! public class OSInfo { ! public static enum OSType { ! WINDOWS, ! LINUX, ! SOLARIS, ! MACOSX, ! UNKNOWN ! } ! ! /* ! The map windowsVersionMap must contain all windows version constants except WINDOWS_UNKNOWN, ! and so the method getWindowsVersion() will return the constant for known OS. ! It allows compare objects by "==" instead of "equals". ! */ ! public static final WindowsVersion WINDOWS_UNKNOWN = new WindowsVersion(-1, -1); ! public static final WindowsVersion WINDOWS_95 = new WindowsVersion(4, 0); ! public static final WindowsVersion WINDOWS_98 = new WindowsVersion(4, 10); ! public static final WindowsVersion WINDOWS_ME = new WindowsVersion(4, 90); ! public static final WindowsVersion WINDOWS_2000 = new WindowsVersion(5, 0); ! public static final WindowsVersion WINDOWS_XP = new WindowsVersion(5, 1); ! public static final WindowsVersion WINDOWS_2003 = new WindowsVersion(5, 2); ! public static final WindowsVersion WINDOWS_VISTA = new WindowsVersion(6, 0); ! ! private static final String OS_NAME = "os.name"; ! private static final String OS_VERSION = "os.version"; ! ! private final static Map<String, WindowsVersion> windowsVersionMap = new HashMap<String, OSInfo.WindowsVersion>(); ! ! static { ! windowsVersionMap.put(WINDOWS_95.toString(), WINDOWS_95); ! windowsVersionMap.put(WINDOWS_98.toString(), WINDOWS_98); ! windowsVersionMap.put(WINDOWS_ME.toString(), WINDOWS_ME); ! windowsVersionMap.put(WINDOWS_2000.toString(), WINDOWS_2000); ! windowsVersionMap.put(WINDOWS_XP.toString(), WINDOWS_XP); ! windowsVersionMap.put(WINDOWS_2003.toString(), WINDOWS_2003); ! windowsVersionMap.put(WINDOWS_VISTA.toString(), WINDOWS_VISTA); ! } ! ! private static final PrivilegedAction<OSType> osTypeAction = new PrivilegedAction<OSType>() { ! public OSType run() { ! return getOSType(); ! } ! }; ! ! private OSInfo() { ! // Don't allow to create instances ! } ! ! /** ! * Returns type of operating system. ! */ ! public static OSType getOSType() throws SecurityException { ! String osName = System.getProperty(OS_NAME); ! if (osName != null) { ! if (osName.contains("Windows")) { ! return WINDOWS; } ! ! if (osName.contains("Linux")) { ! return LINUX; ! } ! ! if (osName.contains("Solaris") || osName.contains("SunOS")) { ! return SOLARIS; } ! if (osName.contains("OS X")) { ! return MACOSX; } ! // determine another OS here } ! return UNKNOWN; ! } ! ! public static PrivilegedAction<OSType> getOSTypeAction() { ! return osTypeAction; ! } ! ! public static WindowsVersion getWindowsVersion() throws SecurityException { ! String osVersion = System.getProperty(OS_VERSION); ! ! if (osVersion == null) { ! return WINDOWS_UNKNOWN; ! } ! ! synchronized (windowsVersionMap) { ! WindowsVersion result = windowsVersionMap.get(osVersion); ! ! if (result == null) { ! // Try parse version and put object into windowsVersionMap ! String[] arr = osVersion.split("\\."); ! ! if (arr.length == 2) { try { ! result = new WindowsVersion(Integer.parseInt(arr[0]), Integer.parseInt(arr[1])); ! } catch (NumberFormatException e) { ! return WINDOWS_UNKNOWN; ! } ! } else { ! return WINDOWS_UNKNOWN; ! } ! ! windowsVersionMap.put(osVersion, result); ! } ! ! return result; ! } ! } ! ! public static double getSolarisVersion() { ! try { ! OutputAnalyzer output = ProcessTools.executeProcess("uname", "-v"); ! System.out.println("'uname -v' finished with code " ! + output.getExitValue()); ! return Double.parseDouble(output.getOutput()); ! } catch (Exception e) { System.out.println("First attempt failed with: " + e.getMessage()); } ! //Try to get Solaris version from /etc/release try (BufferedReader in = new BufferedReader(new FileReader("/etc/release"))) { ! String line = in.readLine().trim().split(" ")[2]; ! return Double.parseDouble(line); } catch (Exception e) { System.out.println("Second attempt failed with: " + e.getMessage()); } throw new RuntimeException("Unable to get Solaris version"); } ! public static class WindowsVersion implements Comparable<WindowsVersion> { ! private final int major; ! ! private final int minor; ! ! private WindowsVersion(int major, int minor) { ! this.major = major; ! this.minor = minor; ! } ! ! public int getMajor() { ! return major; ! } ! ! public int getMinor() { ! return minor; ! } ! ! public int compareTo(WindowsVersion o) { ! int result = major - o.getMajor(); ! ! if (result == 0) { ! result = minor - o.getMinor(); } ! return result; } ! public boolean equals(Object obj) { ! return obj instanceof WindowsVersion && compareTo((WindowsVersion) obj) == 0; ! } ! ! public int hashCode() { ! return 31 * major + minor; } public String toString() { ! return major + "." + minor; ! } } } --- 21,107 ---- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ ! package jdk.test.lib; ! import java.util.Arrays; import java.io.BufferedReader; import java.io.FileReader; ! import java.util.regex.Pattern; ! import java.util.stream.Collectors; ! public final class OSVersion implements Comparable<OSVersion> { ! public static final OSVersion WINDOWS_95 = new OSVersion(4, 0); ! public static final OSVersion WINDOWS_98 = new OSVersion(4, 10); ! public static final OSVersion WINDOWS_ME = new OSVersion(4, 90); ! public static final OSVersion WINDOWS_2000 = new OSVersion(5, 0); ! public static final OSVersion WINDOWS_XP = new OSVersion(5, 1); ! public static final OSVersion WINDOWS_2003 = new OSVersion(5, 2); ! public static final OSVersion WINDOWS_VISTA = new OSVersion(6, 0); ! private final int[] versionTokens; ! public static OSVersion current() { ! if (Platform.isSolaris()) { ! return new OSVersion(getSolarisVersion()); } ! return new OSVersion(Platform.getOsVersion()); } ! public OSVersion(int major, int minor) { ! versionTokens = new int[] {major, minor}; } ! public OSVersion(String version) { ! Pattern onlyDigits = Pattern.compile("^\\d+$"); ! this.versionTokens = Arrays.stream(version.split("-")[0].split("\\.")) ! .filter(onlyDigits.asPredicate()) ! .mapToInt(Integer::parseInt) ! .toArray(); } ! private static String getSolarisVersion() { try { ! return Utils.distro(); ! } catch (Throwable e) { System.out.println("First attempt failed with: " + e.getMessage()); } ! // Try to get Solaris version from /etc/release try (BufferedReader in = new BufferedReader(new FileReader("/etc/release"))) { ! return in.readLine().trim().split(" ")[2]; } catch (Exception e) { System.out.println("Second attempt failed with: " + e.getMessage()); } throw new RuntimeException("Unable to get Solaris version"); } ! @Override ! public int compareTo(OSVersion o) { ! return Arrays.compare(this.versionTokens, o.versionTokens); } ! @Override ! public int hashCode() { ! return Arrays.hashCode(versionTokens); } ! @Override ! public boolean equals(Object o) { ! if (this == o) return true; ! if (o == null || getClass() != o.getClass()) return false; ! OSVersion osVersion = (OSVersion) o; ! return Arrays.equals(versionTokens, osVersion.versionTokens); } + @Override public String toString() { ! return Arrays.stream(versionTokens) ! .mapToObj(String::valueOf) ! .collect(Collectors.joining(".")); } }
< prev index next >