< prev index next >
test/java/lang/ProcessHandle/InfoTest.java
Print this page
rev 12532 : 8131168: Refactor ProcessHandleImpl_*.c and add implememtation for AIX
Reviewed-by: rriggs, smarks
*** 134,144 ****
childCpuTime = Duration.ofNanos(nanos);
break; // found the result we're looking for
}
}
!
ProcessHandle.Info info = p1.info();
System.out.printf(" info: %s%n", info);
if (info.user().isPresent()) {
String user = info.user().get();
--- 134,154 ----
childCpuTime = Duration.ofNanos(nanos);
break; // found the result we're looking for
}
}
! if (Platform.isAix()) {
! // Unfortunately, on AIX the usr/sys times reported through
! // /proc/<pid>/psinfo which are used by ProcessHandle.Info
! // are running slow compared to the corresponding times reported
! // by the times()/getrusage() system calls which are used by
! // OperatingSystemMXBean.getProcessCpuTime() and returned by
! // the JavaChild for the "cputime" command.
! // This is because /proc/<pid>/status is only updated once a second.
! // So we better wait a little bit to get plausible values here.
! Thread.sleep(1000);
! }
ProcessHandle.Info info = p1.info();
System.out.printf(" info: %s%n", info);
if (info.user().isPresent()) {
String user = info.user().get();
*** 158,190 ****
}
if (info.arguments().isPresent()) {
String[] args = info.arguments().get();
- if (Platform.isLinux() || Platform.isOSX()) {
int offset = args.length - extraArgs.length;
for (int i = 0; i < extraArgs.length; i++) {
Assert.assertEquals(args[offset + i], extraArgs[i],
"Actual argument mismatch, index: " + i);
}
- } else if (Platform.isSolaris()) {
- Assert.assertEquals(args.length, 1,
- "Expected argument list length: 1");
- Assert.assertNotNull(args[0],
- "Expected an argument");
- } else {
- System.out.printf("No argument test for OS: %s%n", Platform.getOsName());
- }
// Now check that the first argument is not the same as the executed command
if (args.length > 0) {
Assert.assertNotEquals(args[0], command,
"First argument should not be the executable: args[0]: "
+ args[0] + ", command: " + command);
}
}
if (info.totalCpuDuration().isPresent()) {
Duration totalCPU = info.totalCpuDuration().get();
Duration epsilon = Duration.ofMillis(200L);
if (childCpuTime != null) {
System.out.printf(" info.totalCPU: %s, childCpuTime: %s, diff: %s%n",
--- 168,231 ----
}
if (info.arguments().isPresent()) {
String[] args = info.arguments().get();
int offset = args.length - extraArgs.length;
for (int i = 0; i < extraArgs.length; i++) {
Assert.assertEquals(args[offset + i], extraArgs[i],
"Actual argument mismatch, index: " + i);
}
// Now check that the first argument is not the same as the executed command
if (args.length > 0) {
Assert.assertNotEquals(args[0], command,
"First argument should not be the executable: args[0]: "
+ args[0] + ", command: " + command);
}
}
+ if (command.isPresent() && info.arguments().isPresent()) {
+ // If both, 'command' and 'arguments' are present,
+ // 'commandLine' is just the concatenation of the two.
+ Assert.assertTrue(info.commandLine().isPresent(),
+ "commandLine() must be available");
+
+ String javaExe = System.getProperty("test.jdk") +
+ File.separator + "bin" + File.separator + "java";
+ String expected = Platform.isWindows() ? javaExe + ".exe" : javaExe;
+ Path expectedPath = Paths.get(expected);
+ String commandLine = info.commandLine().get();
+ String commandLineCmd = commandLine.split(" ")[0];
+ Path commandLineCmdPath = Paths.get(commandLineCmd);
+ Assert.assertTrue(Files.isSameFile(commandLineCmdPath, expectedPath),
+ "commandLine() should start with: " + expectedPath +
+ " but starts with " + commandLineCmdPath);
+
+ List<String> allArgs = p1.getArgs();
+ for (int i = 0; i < allArgs.size(); i++) {
+ Assert.assertTrue(commandLine.contains(allArgs.get(i)),
+ "commandLine() must contain argument: " + allArgs.get(i));
+ }
+ } else if (info.commandLine().isPresent()) {
+ // If we only have the commandLine() we can only do some basic checks...
+ String commandLine = info.commandLine().get();
+ String javaExe = "java" + (Platform.isWindows() ? ".exe": "");
+ int pos = commandLine.indexOf(javaExe);
+ Assert.assertTrue(pos > 0, "commandLine() should at least contain 'java'");
+
+ pos += javaExe.length() + 1; // +1 for the space after the command
+ List<String> allArgs = p1.getArgs();
+ // First argument is the command - skip it here as we've already checked that.
+ for (int i = 1; (i < allArgs.size()) &&
+ (pos + allArgs.get(i).length() < commandLine.length()); i++) {
+ Assert.assertTrue(commandLine.contains(allArgs.get(i)),
+ "commandLine() must contain argument: " + allArgs.get(i));
+ pos += allArgs.get(i).length() + 1;
+ }
+ }
+
if (info.totalCpuDuration().isPresent()) {
Duration totalCPU = info.totalCpuDuration().get();
Duration epsilon = Duration.ofMillis(200L);
if (childCpuTime != null) {
System.out.printf(" info.totalCPU: %s, childCpuTime: %s, diff: %s%n",
*** 267,280 ****
--- 308,338 ----
*/
@Test
public static void test4() {
Duration myCputime1 = ProcessUtil.MXBeanCpuTime();
+ if (Platform.isAix()) {
+ // Unfortunately, on AIX the usr/sys times reported through
+ // /proc/<pid>/psinfo which are used by ProcessHandle.Info
+ // are running slow compared to the corresponding times reported
+ // by the times()/getrusage() system calls which are used by
+ // OperatingSystemMXBean.getProcessCpuTime() and returned by
+ // the JavaChild for the "cputime" command.
+ // So we better wait a little bit to get plausible values here.
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException ex) {}
+ }
Optional<Duration> dur1 = ProcessHandle.current().info().totalCpuDuration();
Duration myCputime2 = ProcessUtil.MXBeanCpuTime();
+ if (Platform.isAix()) {
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException ex) {}
+ }
Optional<Duration> dur2 = ProcessHandle.current().info().totalCpuDuration();
if (dur1.isPresent() && dur2.isPresent()) {
Duration total1 = dur1.get();
Duration total2 = dur2.get();
< prev index next >