< 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 >