Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
fbd059ee
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
fbd059ee
编写于
4月 07, 2011
作者:
K
ksrini
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
7029048: (launcher) fence the launcher against LD_LIBRARY_PATH
Reviewed-by: mchung, ohair
上级
c187b144
变更
5
展开全部
隐藏空白更改
内联
并排
Showing
5 changed file
with
845 addition
and
73 deletion
+845
-73
src/share/bin/jli_util.h
src/share/bin/jli_util.h
+2
-2
src/solaris/bin/java_md.c
src/solaris/bin/java_md.c
+424
-57
test/tools/launcher/ExecutionEnvironment.java
test/tools/launcher/ExecutionEnvironment.java
+8
-6
test/tools/launcher/Test7029048.java
test/tools/launcher/Test7029048.java
+313
-0
test/tools/launcher/TestHelper.java
test/tools/launcher/TestHelper.java
+98
-8
未找到文件。
src/share/bin/jli_util.h
浏览文件 @
fbd059ee
/*
/*
* Copyright (c) 2005, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2005, 201
1
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -35,7 +35,6 @@ char *JLI_StringDup(const char *s1);
...
@@ -35,7 +35,6 @@ char *JLI_StringDup(const char *s1);
void
JLI_MemFree
(
void
*
ptr
);
void
JLI_MemFree
(
void
*
ptr
);
int
JLI_StrCCmp
(
const
char
*
s1
,
const
char
*
s2
);
int
JLI_StrCCmp
(
const
char
*
s1
,
const
char
*
s2
);
#define JLI_StrLen(p1) strlen((p1))
#define JLI_StrLen(p1) strlen((p1))
#define JLI_StrChr(p1, p2) strchr((p1), (p2))
#define JLI_StrChr(p1, p2) strchr((p1), (p2))
#define JLI_StrRChr(p1, p2) strrchr((p1), (p2))
#define JLI_StrRChr(p1, p2) strrchr((p1), (p2))
...
@@ -48,6 +47,7 @@ int JLI_StrCCmp(const char *s1, const char* s2);
...
@@ -48,6 +47,7 @@ int JLI_StrCCmp(const char *s1, const char* s2);
#define JLI_StrSpn(p1, p2) strspn((p1), (p2))
#define JLI_StrSpn(p1, p2) strspn((p1), (p2))
#define JLI_StrCSpn(p1, p2) strcspn((p1), (p2))
#define JLI_StrCSpn(p1, p2) strcspn((p1), (p2))
#define JLI_StrPBrk(p1, p2) strpbrk((p1), (p2))
#define JLI_StrPBrk(p1, p2) strpbrk((p1), (p2))
#define JLI_StrTok(p1, p2) strtok((p1), (p2))
/* On Windows lseek() is in io.h rather than the location dictated by POSIX. */
/* On Windows lseek() is in io.h rather than the location dictated by POSIX. */
#ifdef _WIN32
#ifdef _WIN32
...
...
src/solaris/bin/java_md.c
浏览文件 @
fbd059ee
此差异已折叠。
点击以展开。
test/tools/launcher/ExecutionEnvironment.java
浏览文件 @
fbd059ee
/*
/*
* Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2009,
2011,
Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -30,7 +30,7 @@
...
@@ -30,7 +30,7 @@
*/
*/
/*
/*
* This test
test
s for various things as follows:
* This tests for various things as follows:
* Ensures that:
* Ensures that:
* 1. uneccessary execs do not occur
* 1. uneccessary execs do not occur
* 2. the environment is pristine, users environment variable wrt.
* 2. the environment is pristine, users environment variable wrt.
...
@@ -84,7 +84,9 @@ public class ExecutionEnvironment {
...
@@ -84,7 +84,9 @@ public class ExecutionEnvironment {
static
int
errors
=
0
;
static
int
errors
=
0
;
static
int
passes
=
0
;
static
int
passes
=
0
;
private
static
void
createTestJar
()
{
static
final
String
LIBJVM
=
TestHelper
.
isWindows
?
"jvm.dll"
:
"libjvm.so"
;
static
void
createTestJar
()
{
try
{
try
{
List
<
String
>
codeList
=
new
ArrayList
<
String
>();
List
<
String
>
codeList
=
new
ArrayList
<
String
>();
codeList
.
add
(
"static void printValue(String name, boolean property) {\n"
);
codeList
.
add
(
"static void printValue(String name, boolean property) {\n"
);
...
@@ -127,6 +129,7 @@ public class ExecutionEnvironment {
...
@@ -127,6 +129,7 @@ public class ExecutionEnvironment {
testJarFile
.
getAbsolutePath
());
testJarFile
.
getAbsolutePath
());
if
(!
tr
.
isNotZeroOutput
())
{
if
(!
tr
.
isNotZeroOutput
())
{
System
.
out
.
println
(
tr
);
throw
new
RuntimeException
(
"Error: No output at all. Did the test execute ?"
);
throw
new
RuntimeException
(
"Error: No output at all. Did the test execute ?"
);
}
}
...
@@ -177,7 +180,6 @@ public class ExecutionEnvironment {
...
@@ -177,7 +180,6 @@ public class ExecutionEnvironment {
Map
<
String
,
String
>
env
=
new
HashMap
<
String
,
String
>();
Map
<
String
,
String
>
env
=
new
HashMap
<
String
,
String
>();
if
(
TestHelper
.
isLinux
)
{
if
(
TestHelper
.
isLinux
)
{
for
(
String
x
:
LD_PATH_STRINGS
)
{
for
(
String
x
:
LD_PATH_STRINGS
)
{
String
pairs
[]
=
x
.
split
(
"="
);
String
pairs
[]
=
x
.
split
(
"="
);
...
@@ -209,7 +211,7 @@ public class ExecutionEnvironment {
...
@@ -209,7 +211,7 @@ public class ExecutionEnvironment {
verifyJavaLibraryPathOverride
(
tr
,
true
);
verifyJavaLibraryPathOverride
(
tr
,
true
);
// try changing the model from 32 to 64 bit
// try changing the model from 32 to 64 bit
if
(
TestHelper
.
java64Cmd
!=
null
&&
TestHelper
.
is32Bit
)
{
if
(
TestHelper
.
dualModePresent
()
&&
TestHelper
.
is32Bit
)
{
// verify the override occurs
// verify the override occurs
env
.
clear
();
env
.
clear
();
for
(
String
x
:
LD_PATH_STRINGS
)
{
for
(
String
x
:
LD_PATH_STRINGS
)
{
...
@@ -326,7 +328,7 @@ public class ExecutionEnvironment {
...
@@ -326,7 +328,7 @@ public class ExecutionEnvironment {
File
symLink
=
null
;
File
symLink
=
null
;
String
libPathPrefix
=
TestHelper
.
isSDK
?
"jre/lib"
:
"/lib"
;
String
libPathPrefix
=
TestHelper
.
isSDK
?
"jre/lib"
:
"/lib"
;
symLink
=
new
File
(
TestHelper
.
JAVAHOME
,
libPathPrefix
+
symLink
=
new
File
(
TestHelper
.
JAVAHOME
,
libPathPrefix
+
TestHelper
.
getJreArch
()
+
"/
libjvm.so"
);
TestHelper
.
getJreArch
()
+
"/
"
+
LIBJVM
);
if
(
symLink
.
exists
())
{
if
(
symLink
.
exists
())
{
System
.
out
.
println
(
"FAIL: The symlink exists "
+
System
.
out
.
println
(
"FAIL: The symlink exists "
+
symLink
.
getAbsolutePath
());
symLink
.
getAbsolutePath
());
...
...
test/tools/launcher/Test7029048.java
0 → 100644
浏览文件 @
fbd059ee
/*
* Copyright (c) 2011, 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 7029048
* @summary Checks for LD_LIBRARY_PATH on *nixes
* @compile -XDignore.symbol.file ExecutionEnvironment.java TestHelper.java Test7029048.java
* @run main Test7029048
*/
/*
* 7029048: test for LD_LIBRARY_PATH set to different paths pointing which may
* contain a libjvm.so and may not, but we test to ensure that the launcher
* behaves correctly in all cases.
*/
import
java.io.File
;
import
java.io.IOException
;
import
java.nio.file.Files
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
public
class
Test7029048
{
static
int
passes
=
0
;
static
int
errors
=
0
;
private
static
final
String
LIBJVM
=
ExecutionEnvironment
.
LIBJVM
;
private
static
final
String
LD_LIBRARY_PATH
=
ExecutionEnvironment
.
LD_LIBRARY_PATH
;
private
static
final
String
LD_LIBRARY_PATH_32
=
ExecutionEnvironment
.
LD_LIBRARY_PATH_32
;
private
static
final
String
LD_LIBRARY_PATH_64
=
ExecutionEnvironment
.
LD_LIBRARY_PATH_64
;
private
static
final
File
libDir
=
new
File
(
System
.
getProperty
(
"sun.boot.library.path"
));
private
static
final
File
srcServerDir
=
new
File
(
libDir
,
"server"
);
private
static
final
File
srcLibjvmSo
=
new
File
(
srcServerDir
,
LIBJVM
);
private
static
final
File
dstLibDir
=
new
File
(
"lib"
);
private
static
final
File
dstLibArchDir
=
new
File
(
dstLibDir
,
TestHelper
.
getJreArch
());
private
static
final
File
dstServerDir
=
new
File
(
dstLibArchDir
,
"server"
);
private
static
final
File
dstServerLibjvm
=
new
File
(
dstServerDir
,
LIBJVM
);
private
static
final
File
dstClientDir
=
new
File
(
dstLibArchDir
,
"client"
);
private
static
final
File
dstClientLibjvm
=
new
File
(
dstClientDir
,
LIBJVM
);
// used primarily to test the solaris variants in dual mode
private
static
final
File
dstOtherArchDir
;
private
static
final
File
dstOtherServerDir
;
private
static
final
File
dstOtherServerLibjvm
;
private
static
final
Map
<
String
,
String
>
env
=
new
HashMap
<>();
static
{
if
(
TestHelper
.
isDualMode
)
{
dstOtherArchDir
=
new
File
(
dstLibDir
,
TestHelper
.
getComplementaryJreArch
());
dstOtherServerDir
=
new
File
(
dstOtherArchDir
,
"server"
);
dstOtherServerLibjvm
=
new
File
(
dstOtherServerDir
,
LIBJVM
);
}
else
{
dstOtherArchDir
=
null
;
dstOtherServerDir
=
null
;
dstOtherServerLibjvm
=
null
;
}
}
static
String
getValue
(
String
name
,
List
<
String
>
in
)
{
for
(
String
x
:
in
)
{
String
[]
s
=
x
.
split
(
"="
);
if
(
name
.
equals
(
s
[
0
].
trim
()))
{
return
s
[
1
].
trim
();
}
}
return
null
;
}
static
void
run
(
boolean
want32
,
String
dflag
,
Map
<
String
,
String
>
env
,
int
nLLPComponents
,
String
caseID
)
{
final
boolean
want64
=
want32
==
false
;
env
.
put
(
ExecutionEnvironment
.
JLDEBUG_KEY
,
"true"
);
List
<
String
>
cmdsList
=
new
ArrayList
<>();
// only for a dual-mode system
if
(
want64
&&
TestHelper
.
isDualMode
)
{
cmdsList
.
add
(
TestHelper
.
java64Cmd
);
}
else
{
cmdsList
.
add
(
TestHelper
.
javaCmd
);
// a 32-bit java command for all
}
/*
* empty or null strings can confuse the ProcessBuilder. A null flag
* indicates that the appropriate data model is enforced on the chosen
* launcher variant.
*/
if
(
dflag
!=
null
)
{
cmdsList
.
add
(
dflag
);
}
else
{
cmdsList
.
add
(
want32
?
"-d32"
:
"-d64"
);
}
cmdsList
.
add
(
"-server"
);
cmdsList
.
add
(
"-jar"
);
cmdsList
.
add
(
ExecutionEnvironment
.
testJarFile
.
getAbsolutePath
());
String
[]
cmds
=
new
String
[
cmdsList
.
size
()];
TestHelper
.
TestResult
tr
=
TestHelper
.
doExec
(
env
,
cmdsList
.
toArray
(
cmds
));
analyze
(
tr
,
nLLPComponents
,
caseID
);
}
// no cross launch, ie. no change to the data model.
static
void
run
(
Map
<
String
,
String
>
env
,
int
nLLPComponents
,
String
caseID
)
throws
IOException
{
boolean
want32
=
TestHelper
.
is32Bit
;
run
(
want32
,
null
,
env
,
nLLPComponents
,
caseID
);
}
static
void
analyze
(
TestHelper
.
TestResult
tr
,
int
nLLPComponents
,
String
caseID
)
{
String
envValue
=
getValue
(
LD_LIBRARY_PATH
,
tr
.
testOutput
);
/*
* the envValue can never be null, since the test code should always
* print a "null" string.
*/
if
(
envValue
==
null
)
{
System
.
out
.
println
(
tr
);
throw
new
RuntimeException
(
"NPE, likely a program crash ??"
);
}
String
values
[]
=
envValue
.
split
(
File
.
pathSeparator
);
if
(
values
.
length
==
nLLPComponents
)
{
System
.
out
.
println
(
caseID
+
" :OK"
);
passes
++;
}
else
{
System
.
out
.
println
(
"FAIL: test7029048, "
+
caseID
);
System
.
out
.
println
(
" expected "
+
nLLPComponents
+
" but got "
+
values
.
length
);
System
.
out
.
println
(
envValue
);
System
.
out
.
println
(
tr
);
errors
++;
}
}
/*
* A crucial piece, specifies what we should expect, given the conditions.
* That is for a given enum type, the value indicates how many absolute
* environment variables that can be expected. This value is used to base
* the actual expected values by adding the set environment variable usually
* it is 1, but it could be more if the test wishes to set more paths in
* the future.
*/
private
static
enum
LLP_VAR
{
LLP_SET_NON_EXISTENT_PATH
(
0
),
// env set, but the path does not exist
LLP_SET_EMPTY_PATH
(
0
),
// env set, with a path but no libjvm.so
LLP_SET_WITH_JVM
(
3
);
// env set, with a libjvm.so
private
final
int
value
;
LLP_VAR
(
int
i
)
{
this
.
value
=
i
;
}
}
/*
* test for 7029048
*/
static
void
test7029048
()
throws
IOException
{
String
desc
=
null
;
for
(
LLP_VAR
v
:
LLP_VAR
.
values
())
{
switch
(
v
)
{
case
LLP_SET_WITH_JVM:
// copy the files into the directory structures
TestHelper
.
copyFile
(
srcLibjvmSo
,
dstServerLibjvm
);
// does not matter if it is client or a server
TestHelper
.
copyFile
(
srcLibjvmSo
,
dstClientLibjvm
);
// does not matter if the arch do not match either
if
(
TestHelper
.
isDualMode
)
{
TestHelper
.
copyFile
(
srcLibjvmSo
,
dstOtherServerLibjvm
);
}
desc
=
"LD_LIBRARY_PATH should be set"
;
break
;
case
LLP_SET_EMPTY_PATH:
if
(!
dstClientDir
.
exists
())
{
Files
.
createDirectories
(
dstClientDir
.
toPath
());
}
else
{
Files
.
deleteIfExists
(
dstClientLibjvm
.
toPath
());
}
if
(!
dstServerDir
.
exists
())
{
Files
.
createDirectories
(
dstServerDir
.
toPath
());
}
else
{
Files
.
deleteIfExists
(
dstServerLibjvm
.
toPath
());
}
if
(
TestHelper
.
isDualMode
)
{
if
(!
dstOtherServerDir
.
exists
())
{
Files
.
createDirectories
(
dstOtherServerDir
.
toPath
());
}
else
{
Files
.
deleteIfExists
(
dstOtherServerLibjvm
.
toPath
());
}
}
desc
=
"LD_LIBRARY_PATH should not be set"
;
break
;
case
LLP_SET_NON_EXISTENT_PATH:
if
(
dstLibDir
.
exists
())
{
TestHelper
.
recursiveDelete
(
dstLibDir
);
}
desc
=
"LD_LIBRARY_PATH should not be set"
;
break
;
default
:
throw
new
RuntimeException
(
"unknown case"
);
}
/*
* Case 1: set the server path
*/
env
.
clear
();
env
.
put
(
LD_LIBRARY_PATH
,
dstServerDir
.
getAbsolutePath
());
run
(
env
,
v
.
value
+
1
,
"Case 1: "
+
desc
);
/*
* Case 2: repeat with client path
*/
env
.
clear
();
env
.
put
(
LD_LIBRARY_PATH
,
dstClientDir
.
getAbsolutePath
());
run
(
env
,
v
.
value
+
1
,
"Case 2: "
+
desc
);
if
(!
TestHelper
.
isDualMode
)
{
continue
;
// nothing more to do for Linux
}
// Tests applicable only to solaris.
// initialize test variables for dual mode operations
final
File
dst32ServerDir
=
TestHelper
.
is32Bit
?
dstServerDir
:
dstOtherServerDir
;
final
File
dst64ServerDir
=
TestHelper
.
is64Bit
?
dstServerDir
:
dstOtherServerDir
;
/*
* Case 3: set the appropriate LLP_XX flag,
* java32 -d32, LLP_32 is relevant, LLP_64 is ignored
* java64 -d64, LLP_64 is relevant, LLP_32 is ignored
*/
env
.
clear
();
env
.
put
(
LD_LIBRARY_PATH_32
,
dst32ServerDir
.
getAbsolutePath
());
env
.
put
(
LD_LIBRARY_PATH_64
,
dst64ServerDir
.
getAbsolutePath
());
run
(
TestHelper
.
is32Bit
,
null
,
env
,
v
.
value
+
1
,
"Case 3: "
+
desc
);
/*
* Case 4: we are in dual mode environment, running 64-bit then
* we have the following scenarios:
* java32 -d64, LLP_64 is relevant, LLP_32 is ignored
* java64 -d32, LLP_32 is relevant, LLP_64 is ignored
*/
if
(
TestHelper
.
dualModePresent
())
{
run
(
true
,
"-d64"
,
env
,
v
.
value
+
1
,
"Case 4A: "
+
desc
);
run
(
false
,
"-d32"
,
env
,
v
.
value
+
1
,
"Case 4B: "
+
desc
);
}
}
return
;
}
public
static
void
main
(
String
...
args
)
throws
Exception
{
if
(
TestHelper
.
isWindows
)
{
System
.
out
.
println
(
"Warning: noop on windows"
);
return
;
}
// create our test jar first
ExecutionEnvironment
.
createTestJar
();
// run the tests
test7029048
();
if
(
errors
>
0
)
{
throw
new
Exception
(
"Test7029048: FAIL: with "
+
errors
+
" errors and passes "
+
passes
);
}
else
if
(
TestHelper
.
dualModePresent
()
&&
passes
<
15
)
{
throw
new
Exception
(
"Test7029048: FAIL: "
+
"all tests did not run, expected "
+
15
+
" got "
+
passes
);
}
else
if
(
TestHelper
.
isSolaris
&&
passes
<
9
)
{
throw
new
Exception
(
"Test7029048: FAIL: "
+
"all tests did not run, expected "
+
9
+
" got "
+
passes
);
}
else
if
(
TestHelper
.
isLinux
&&
passes
<
6
)
{
throw
new
Exception
(
"Test7029048: FAIL: "
+
"all tests did not run, expected "
+
6
+
" got "
+
passes
);
}
else
{
System
.
out
.
println
(
"Test7029048: PASS "
+
passes
);
}
}
}
test/tools/launcher/TestHelper.java
浏览文件 @
fbd059ee
/*
/*
* Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2008,
2011
Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -22,20 +21,28 @@
...
@@ -22,20 +21,28 @@
* questions.
* questions.
*/
*/
import
java.nio.file.attribute.BasicFileAttributes
;
import
java.nio.file.FileVisitResult
;
import
java.nio.file.SimpleFileVisitor
;
import
javax.tools.ToolProvider
;
import
javax.tools.ToolProvider
;
import
java.io.BufferedReader
;
import
java.io.BufferedReader
;
import
java.io.File
;
import
java.io.File
;
import
java.io.FileNotFoundException
;
import
java.io.FileNotFoundException
;
import
java.io.FileOutputStream
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
import
java.io.InputStreamReader
;
import
java.io.InputStreamReader
;
import
java.io.PrintStream
;
import
java.io.PrintStream
;
import
java.nio.file.Files
;
import
java.nio.file.Path
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
import
javax.tools.JavaCompiler
;
import
javax.tools.JavaCompiler
;
import
static
java
.
nio
.
file
.
StandardCopyOption
.*;
/**
/**
* This class provides some common utilites for the launcher tests.
* This class provides some common utilit
i
es for the launcher tests.
*/
*/
public
enum
TestHelper
{
public
enum
TestHelper
{
INSTANCE
;
INSTANCE
;
...
@@ -100,6 +107,13 @@ public enum TestHelper {
...
@@ -100,6 +107,13 @@ public enum TestHelper {
}
}
}
}
/*
* is a dual mode available in the test jdk
*/
static
boolean
dualModePresent
()
{
return
isDualMode
&&
java64Cmd
!=
null
;
}
/*
/*
* usually the jre/lib/arch-name is the same as os.arch, except for x86.
* usually the jre/lib/arch-name is the same as os.arch, except for x86.
*/
*/
...
@@ -108,6 +122,27 @@ public enum TestHelper {
...
@@ -108,6 +122,27 @@ public enum TestHelper {
return
arch
.
equals
(
"x86"
)
?
"i386"
:
arch
;
return
arch
.
equals
(
"x86"
)
?
"i386"
:
arch
;
}
}
/*
* get the complementary jre arch ie. if sparc then return sparcv9 and
* vice-versa.
*/
static
String
getComplementaryJreArch
()
{
String
arch
=
System
.
getProperty
(
"os.arch"
);
if
(
arch
!=
null
)
{
switch
(
arch
)
{
case
"sparc"
:
return
"sparcv9"
;
case
"sparcv9"
:
return
"sparc"
;
case
"x86"
:
return
"amd64"
;
case
"amd64"
:
return
"i386"
;
}
}
return
null
;
}
/*
/*
* A convenience method to create a jar with jar file name and defs
* A convenience method to create a jar with jar file name and defs
*/
*/
...
@@ -168,6 +203,44 @@ public enum TestHelper {
...
@@ -168,6 +203,44 @@ public enum TestHelper {
}
}
}
}
static
void
copyFile
(
File
src
,
File
dst
)
throws
IOException
{
Path
parent
=
dst
.
toPath
().
getParent
();
if
(
parent
!=
null
)
{
Files
.
createDirectories
(
parent
);
}
Files
.
copy
(
src
.
toPath
(),
dst
.
toPath
(),
COPY_ATTRIBUTES
,
REPLACE_EXISTING
);
}
static
void
recursiveDelete
(
File
target
)
throws
IOException
{
if
(!
target
.
exists
())
{
return
;
}
Files
.
walkFileTree
(
target
.
toPath
(),
new
SimpleFileVisitor
<
Path
>()
{
@Override
public
FileVisitResult
postVisitDirectory
(
Path
dir
,
IOException
exc
)
{
try
{
Files
.
deleteIfExists
(
dir
);
}
catch
(
IOException
ex
)
{
System
.
out
.
println
(
"Error: could not delete: "
+
dir
.
toString
());
System
.
out
.
println
(
ex
.
getMessage
());
return
FileVisitResult
.
TERMINATE
;
}
return
FileVisitResult
.
CONTINUE
;
}
@Override
public
FileVisitResult
visitFile
(
Path
file
,
BasicFileAttributes
attrs
)
{
try
{
Files
.
deleteIfExists
(
file
);
}
catch
(
IOException
ex
)
{
System
.
out
.
println
(
"Error: could not delete: "
+
file
.
toString
());
System
.
out
.
println
(
ex
.
getMessage
());
return
FileVisitResult
.
TERMINATE
;
}
return
FileVisitResult
.
CONTINUE
;
}
});
}
static
TestResult
doExec
(
String
...
cmds
)
{
static
TestResult
doExec
(
String
...
cmds
)
{
return
doExec
(
null
,
cmds
);
return
doExec
(
null
,
cmds
);
}
}
...
@@ -187,7 +260,7 @@ public enum TestHelper {
...
@@ -187,7 +260,7 @@ public enum TestHelper {
}
}
BufferedReader
rdr
=
null
;
BufferedReader
rdr
=
null
;
try
{
try
{
List
<
String
>
outputList
=
new
ArrayList
<
String
>();
List
<
String
>
outputList
=
new
ArrayList
<>();
pb
.
redirectErrorStream
(
true
);
pb
.
redirectErrorStream
(
true
);
Process
p
=
pb
.
start
();
Process
p
=
pb
.
start
();
rdr
=
new
BufferedReader
(
new
InputStreamReader
(
p
.
getInputStream
()));
rdr
=
new
BufferedReader
(
new
InputStreamReader
(
p
.
getInputStream
()));
...
@@ -198,7 +271,9 @@ public enum TestHelper {
...
@@ -198,7 +271,9 @@ public enum TestHelper {
}
}
p
.
waitFor
();
p
.
waitFor
();
p
.
destroy
();
p
.
destroy
();
return
new
TestHelper
.
TestResult
(
cmdStr
,
p
.
exitValue
(),
outputList
);
return
new
TestHelper
.
TestResult
(
cmdStr
,
p
.
exitValue
(),
outputList
,
env
,
new
Throwable
(
"current stack of the test"
));
}
catch
(
Exception
ex
)
{
}
catch
(
Exception
ex
)
{
ex
.
printStackTrace
();
ex
.
printStackTrace
();
throw
new
RuntimeException
(
ex
.
getMessage
());
throw
new
RuntimeException
(
ex
.
getMessage
());
...
@@ -213,11 +288,16 @@ public enum TestHelper {
...
@@ -213,11 +288,16 @@ public enum TestHelper {
StringBuilder
status
;
StringBuilder
status
;
int
exitValue
;
int
exitValue
;
List
<
String
>
testOutput
;
List
<
String
>
testOutput
;
Map
<
String
,
String
>
env
;
Throwable
t
;
public
TestResult
(
String
str
,
int
rv
,
List
<
String
>
oList
)
{
public
TestResult
(
String
str
,
int
rv
,
List
<
String
>
oList
,
Map
<
String
,
String
>
env
,
Throwable
t
)
{
status
=
new
StringBuilder
(
"Executed command: "
+
str
+
"\n"
);
status
=
new
StringBuilder
(
"Executed command: "
+
str
+
"\n"
);
exitValue
=
rv
;
exitValue
=
rv
;
testOutput
=
oList
;
testOutput
=
oList
;
this
.
env
=
env
;
this
.
t
=
t
;
}
}
void
appendStatus
(
String
x
)
{
void
appendStatus
(
String
x
)
{
...
@@ -262,11 +342,21 @@ public enum TestHelper {
...
@@ -262,11 +342,21 @@ public enum TestHelper {
@Override
@Override
public
String
toString
()
{
public
String
toString
()
{
status
=
status
.
append
(
"++++Test Output Begin++++\n"
);
status
.
append
(
"++++Begin Test Info++++\n"
);
status
.
append
(
"++++Test Environment++++\n"
);
for
(
String
x
:
env
.
keySet
())
{
status
.
append
(
x
).
append
(
"="
).
append
(
env
.
get
(
x
)).
append
(
"\n"
);
}
status
.
append
(
"++++Test Output++++\n"
);
for
(
String
x
:
testOutput
)
{
for
(
String
x
:
testOutput
)
{
appendStatus
(
x
);
appendStatus
(
x
);
}
}
status
=
status
.
append
(
"++++Test Output End++++\n"
);
status
.
append
(
"++++Test Stack Trace++++\n"
);
status
.
append
(
t
.
toString
());
for
(
StackTraceElement
e
:
t
.
getStackTrace
())
{
status
.
append
(
e
.
toString
());
}
status
.
append
(
"++++End of Test Info++++\n"
);
return
status
.
toString
();
return
status
.
toString
();
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录