8072908: com/sun/management/OperatingSystemMXBean/TestTotalSwap.sh fails on OS X with exit code 2
Reviewed-by: dholmes, sla
--- a/jdk/test/com/sun/management/OperatingSystemMXBean/GetTotalSwapSpaceSize.java Fri Feb 13 05:17:57 2015 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,109 +0,0 @@
-/*
- * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * 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.
- */
-
-/*
- *
- *
- * @bug 4858522
- * @summary Basic unit test of OperatingSystemMXBean.getTotalSwapSpaceSize()
- * @author Steve Bohne
- */
-
-/*
- * This test tests the actual swap size on linux and solaris.
- * The correct value should be checked manually:
- * Solaris:
- * 1. In a shell, enter the command: "swap -l"
- * 2. The value (reported in blocks) is in the "blocks" column.
- * Linux:
- * 1. In a shell, enter the command: "cat /proc/meminfo"
- * 2. The value (reported in bytes) is in "Swap" entry, "total" column.
- * Windows NT/XP/2000:
- * 1. Run Start->Accessories->System Tools->System Information.
- * 2. The value (reported in Kbytes) is in the "Page File Space" entry
- * Windows 98/ME:
- * Unknown.
- *
- * Usage: GetTotalSwapSpaceSize <expected swap size | "sanity-only"> [trace]
- */
-
-import com.sun.management.OperatingSystemMXBean;
-import java.lang.management.*;
-
-public class GetTotalSwapSpaceSize {
-
- private static OperatingSystemMXBean mbean =
- (com.sun.management.OperatingSystemMXBean)
- ManagementFactory.getOperatingSystemMXBean();
-
- // Careful with these values.
- // Min size for pass dynamically determined below.
- // zero if no swap space is configured.
- private static long min_size_for_pass = 0;
- private static final long MAX_SIZE_FOR_PASS = Long.MAX_VALUE;
-
- private static boolean trace = false;
-
- public static void main(String args[]) throws Exception {
- if (args.length > 1 && args[1].equals("trace")) {
- trace = true;
- }
-
- long expected_swap_size = 0;
-
- if (args.length < 1 || args.length > 2) {
- throw new IllegalArgumentException("Unexpected number of args " + args.length);
- }
-
-
- long min_size = mbean.getFreeSwapSpaceSize();
- if (min_size > 0) {
- min_size_for_pass = min_size;
- }
-
- long size = mbean.getTotalSwapSpaceSize();
-
- if (trace) {
- System.out.println("Total swap space size in bytes: " + size);
- }
-
- if (!args[0].matches("sanity-only")) {
- expected_swap_size = Long.parseLong(args[0]);
- if (size != expected_swap_size) {
- throw new RuntimeException("Expected total swap size : " +
- expected_swap_size +
- " but getTotalSwapSpaceSize returned: " +
- size);
- }
- }
-
- if (size < min_size_for_pass || size > MAX_SIZE_FOR_PASS) {
- throw new RuntimeException("Total swap space size " +
- "illegal value: " + size + " bytes " +
- "(MIN = " + min_size_for_pass + "; " +
- "MAX = " + MAX_SIZE_FOR_PASS + ")");
- }
-
- System.out.println("Test passed.");
- }
-}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/com/sun/management/OperatingSystemMXBean/TestTotalSwap.java Mon Feb 16 10:53:49 2015 +0100
@@ -0,0 +1,162 @@
+/*
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 4858522
+ * @summary Basic unit test of OperatingSystemMXBean.getTotalSwapSpaceSize()
+ *
+ * @library /lib/testlibrary
+ * @build TestTotalSwap jdk.testlibrary.*
+ * @run main TestTotalSwap
+ *
+ * @author Steve Bohne
+ * @author Jaroslav Bachorik
+ */
+
+/*
+ * This test tests the actual swap size on linux and solaris.
+ * The correct value should be checked manually:
+ * Solaris:
+ * 1. In a shell, enter the command: "swap -l"
+ * 2. The value (reported in blocks) is in the "blocks" column.
+ * Linux:
+ * 1. In a shell, enter the command: "cat /proc/meminfo"
+ * 2. The value (reported in bytes) is in "Swap" entry, "total" column.
+ * Windows NT/XP/2000:
+ * 1. Run Start->Accessories->System Tools->System Information.
+ * 2. The value (reported in Kbytes) is in the "Page File Space" entry
+ * Windows 98/ME:
+ * Unknown.
+ *
+ * Usage: GetTotalSwapSpaceSize <expected swap size | "sanity-only"> [trace]
+ */
+
+import com.sun.management.OperatingSystemMXBean;
+import java.lang.management.*;
+
+import jdk.testlibrary.OSInfo;
+import jdk.testlibrary.ProcessTools;
+import jdk.testlibrary.OutputAnalyzer;
+
+public class TestTotalSwap {
+
+ private static final OperatingSystemMXBean mbean =
+ (com.sun.management.OperatingSystemMXBean)
+ ManagementFactory.getOperatingSystemMXBean();
+
+ // Careful with these values.
+ // Min size for pass dynamically determined below.
+ // zero if no swap space is configured.
+ private static long min_size_for_pass = 0;
+ private static final long MAX_SIZE_FOR_PASS = Long.MAX_VALUE;
+
+ public static void main(String args[]) throws Throwable {
+
+ long expected_swap_size = getSwapSizeFromOs();
+
+ long min_size = mbean.getFreeSwapSpaceSize();
+ if (min_size > 0) {
+ min_size_for_pass = min_size;
+ }
+
+ long size = mbean.getTotalSwapSpaceSize();
+
+ System.out.println("Total swap space size in bytes: " + size);
+
+ if (expected_swap_size > -1) {
+ if (size != expected_swap_size) {
+ throw new RuntimeException("Expected total swap size : " +
+ expected_swap_size +
+ " but getTotalSwapSpaceSize returned: " +
+ size);
+ }
+ }
+
+ // sanity check
+ if (size < min_size_for_pass || size > MAX_SIZE_FOR_PASS) {
+ throw new RuntimeException("Total swap space size " +
+ "illegal value: " + size + " bytes " +
+ "(MIN = " + min_size_for_pass + "; " +
+ "MAX = " + MAX_SIZE_FOR_PASS + ")");
+ }
+
+ System.out.println("Test passed.");
+ }
+
+ private static long getSwapSizeFromOs() throws Throwable {
+ OSInfo.OSType os = OSInfo.getOSType();
+
+ switch (os) {
+ // total used free shared buffers cached
+ // Mem: 16533540864 13638467584 2895073280 534040576 1630248960 6236909568
+ // -/+ buffers/cache: 5771309056 10762231808
+ // Swap: 15999168512 0 15999168512
+
+ case LINUX: {
+ String swapSizeStr = ProcessTools.executeCommand("free", "-b")
+ .firstMatch("Swap:\\s+([0-9]+)\\s+.*", 1);
+ return Long.parseLong(swapSizeStr);
+ }
+ case SOLARIS: {
+ // swapfile dev swaplo blocks free
+ // /dev/dsk/c0t0d0s1 136,1 16 1638608 1600528
+ OutputAnalyzer out= ProcessTools.executeCommand(
+ "/usr/sbin/swap",
+ "-l"
+ );
+
+ long swapSize = 0;
+
+ for (String line : out.asLines()) {
+ if (line.contains("swapfile")) continue;
+
+ String[] vals = line.split("\\s+");
+ if (vals.length == 5) {
+ swapSize += Long.parseLong(vals[3]) * 512; // size is reported in 512b blocks
+ }
+ }
+
+ return swapSize;
+ }
+ case MACOSX: {
+ // total = 8192.00M used = 7471.11M free = 720.89M (encrypted)
+ String swapSizeStr = ProcessTools.executeCommand(
+ "/usr/sbin/sysctl",
+ "-n",
+ "vm.swapusage"
+ ).firstMatch("total\\s+=\\s+([0-9]+(\\.[0-9]+)?[Mm]?).*", 1);
+ if (swapSizeStr.toLowerCase().endsWith("m")) {
+ swapSizeStr = swapSizeStr.substring(0, swapSizeStr.length() - 1);
+ return (long)(Double.parseDouble(swapSizeStr) * 1024 * 1024); // size in MB
+ }
+ return (long)(Double.parseDouble(swapSizeStr) * 1024 * 1024);
+ }
+ default: {
+ System.err.println("Unsupported operating system: " + os);
+ }
+ }
+
+ return -1;
+ }
+}
--- a/jdk/test/com/sun/management/OperatingSystemMXBean/TestTotalSwap.sh Fri Feb 13 05:17:57 2015 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,99 +0,0 @@
-#
-# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# 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.
-#
-
-#
-# @test
-# @summary Tests MM getTotalSwapSpaceSize() api.
-# @author Swamy V
-# @bug 6252770
-#
-# @run build GetTotalSwapSpaceSize
-# @run shell TestTotalSwap.sh
-#
-
-#
-# This test tests the actual swap size on linux and solaris.
-# On windows this is just a sanity check and correct size should
-# be checked manually:
-#
-# Windows NT/XP/2000:
-# 1. Run Start->Accessories->System Tools->System Information.
-# 2. The value (reported in Kbytes) is in the "Page File Space" entry
-# Windows 98/ME:
-# Unknown.
-#
-
-
-#set -x
-
-#Set appropriate jdk
-#
-
-if [ ! -z "${TESTJAVA}" ] ; then
- jdk="$TESTJAVA"
-else
- echo "--Error: TESTJAVA must be defined as the pathname of a jdk to test."
- exit 1
-fi
-
-runOne()
-{
- echo "runOne $@"
- $TESTJAVA/bin/java ${TESTVMOPTS} -classpath $TESTCLASSES $@ || exit 3
-}
-
-solaris_swap_size()
-{
- total_swap=0
- for i in `/usr/sbin/swap -l | awk '{print $4}' | grep -v blocks`
- do
- # swap -l returns size in blocks of 512 bytes.
- total_swap=`expr $i \* 512 + $total_swap`
- done
-}
-
-# Test GetTotalSwapSpaceSize if we are running on Unix
-total_swap=0
-case `uname -s` in
- SunOS )
- solaris_swap_size
- runOne GetTotalSwapSpaceSize $total_swap
- ;;
- Linux )
- total_swap=`free -b | grep -i swap | awk '{print $2}'`
- runOne GetTotalSwapSpaceSize $total_swap
- ;;
- Darwin )
- # $ sysctl -n vm.swapusage
- # total = 8192.00M used = 7471.11M free = 720.89M (encrypted)
- swap=`/usr/sbin/sysctl -n vm.swapusage | awk '{ print $3 }' | awk -F . '{ print $1 }'` || exit 2
- total_swap=`expr $swap \* 1024 \* 1024` || exit 2
- runOne GetTotalSwapSpaceSize $total_swap
- ;;
- * )
- runOne GetTotalSwapSpaceSize "sanity-only"
- ;;
-esac
-
-exit 0
-