Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/java/lang/RuntimeTests/exec/ExitValue.java
41153 views
1
/*
2
* Copyright (c) 2002, 2020, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
/*
25
* @test
26
* @bug 4680945 4873419
27
* @summary Check process exit code
28
* @author kladko, Martin Buchholz
29
*/
30
31
import java.io.File;
32
33
public class ExitValue
34
{
35
36
public static String join(String separator, String[] elts) {
37
String result = elts[0];
38
for (int i = 1; i < elts.length; ++i)
39
result = result + separator + elts[i];
40
return result;
41
}
42
43
public static void checkExitValue(String[] commandArgs,
44
int expectedExitValue)
45
throws Exception
46
{
47
if (! (new File(commandArgs[0]).exists()))
48
return;
49
50
System.out.println("Running command: " + join(" ", commandArgs));
51
Process proc = Runtime.getRuntime().exec(commandArgs);
52
int val;
53
byte[] buf = new byte[4096];
54
int n = proc.getErrorStream().read(buf);
55
if (n > 0)
56
throw new Exception
57
("Unexpected stderr: "
58
+ new String(buf, 0, n, "ASCII"));
59
if ((val = proc.waitFor()) != expectedExitValue)
60
throw new Exception
61
("waitFor() returned unexpected value " + val);
62
if ((val = proc.exitValue()) != expectedExitValue)
63
throw new Exception
64
("exitValue() returned unexpected value " + val);
65
}
66
67
public static void checkPosixShellExitValue(String posixShellProgram,
68
int expectedExitValue)
69
throws Exception
70
{
71
checkExitValue(new String[] { UnixCommands.sh(), "-c", posixShellProgram },
72
expectedExitValue);
73
}
74
75
static final int EXIT_CODE = 5;
76
77
public static void main(String[] args) throws Exception {
78
if (! UnixCommands.isUnix) {
79
System.out.println("For UNIX only");
80
return;
81
}
82
UnixCommands.ensureCommandsAvailable("sh", "true", "kill");
83
84
String java = join(File.separator, new String []
85
{ System.getProperty("java.home"), "bin", "java" });
86
87
checkExitValue(new String[]
88
{ java,
89
"-classpath", System.getProperty("test.classes", "."),
90
"ExitValue$Run", String.valueOf(EXIT_CODE)
91
}, EXIT_CODE);
92
93
checkExitValue(new String[] { UnixCommands.findCommand("true") }, 0);
94
95
checkPosixShellExitValue("exit", 0);
96
97
checkPosixShellExitValue("exit 7", 7);
98
99
int sigoffset = 128;
100
checkPosixShellExitValue(UnixCommands.kill() + " -9 $$", sigoffset+9);
101
}
102
103
public static class Run {
104
public static void main (String[] argv) {
105
System.exit(Integer.parseInt(argv[0]));
106
}
107
}
108
}
109
110