Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
jenkins
提交
501d7fbb
J
jenkins
项目概览
xxadev
/
jenkins
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
jenkins
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
501d7fbb
编写于
12月 09, 2015
作者:
J
Jesse Glick
提交者:
Oliver Gondža
2月 03, 2016
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Converting BootFailureTest from Groovy to Java.
(cherry picked from commit
09722a98
)
上级
50b927c7
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
137 addition
and
0 deletion
+137
-0
test/src/test/java/hudson/util/BootFailureTest.java
test/src/test/java/hudson/util/BootFailureTest.java
+137
-0
未找到文件。
test/src/test/
groovy/hudson/util/BootFailureTest.groovy
→
test/src/test/
java/hudson/util/BootFailureTest.java
浏览文件 @
501d7fbb
package
hudson.util
import
hudson.WebAppMain
import
hudson.model.Hudson
import
hudson.model.listeners.ItemListener
import
jenkins.model.Jenkins
import
org.junit.After
import
org.junit.Rule
import
org.junit.Test
import
org.junit.rules.TemporaryFolder
import
org.jvnet.hudson.test.HudsonHomeLoader
import
org.jvnet.hudson.test.JenkinsRule
import
org.jvnet.hudson.test.TestEnvironment
import
org.jvnet.hudson.test.TestExtension
import
org.kohsuke.stapler.WebApp
import
javax.servlet.ServletContextEvent
package
hudson.util
;
import
hudson.WebAppMain
;
import
hudson.model.Hudson
;
import
hudson.model.listeners.ItemListener
;
import
static
hudson
.
util
.
BootFailureTest
.
makeBootFail
;
import
java.io.File
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
javax.servlet.ServletContext
;
import
javax.servlet.ServletContextEvent
;
import
jenkins.model.Jenkins
;
import
org.apache.commons.io.FileUtils
;
import
org.junit.After
;
import
static
org
.
junit
.
Assert
.*;
import
org.junit.Rule
;
import
org.junit.Test
;
import
org.junit.rules.TemporaryFolder
;
import
org.jvnet.hudson.test.HudsonHomeLoader
;
import
org.jvnet.hudson.test.JenkinsRule
;
import
org.jvnet.hudson.test.TestEnvironment
;
import
org.jvnet.hudson.test.TestExtension
;
import
org.kohsuke.stapler.WebApp
;
/**
*
*
* @author Kohsuke Kawaguchi
*/
class
BootFailureTest
{
public
class
BootFailureTest
{
@Rule
public
TemporaryFolder
tmpDir
=
new
TemporaryFolder
();
static
boolean
makeBootFail
=
true
;
@Rule
public
JenkinsRule
j
=
new
JenkinsRule
()
{
static
class
CustomRule
extends
JenkinsRule
{
@Override
void
before
()
throws
Throwable
{
public
void
before
()
throws
Throwable
{
env
=
new
TestEnvironment
(
testDescription
);
env
.
pin
();
// don't let Jenkins start automatically
...
...
@@ -38,78 +45,93 @@ class BootFailureTest {
@Override
public
Hudson
newHudson
()
throws
Exception
{
def
ws
=
createWebServer
()
def
wa
=
new
WebAppMain
()
{
ServletContext
ws
=
createWebServer
();
WebAppMain
wa
=
new
WebAppMain
()
{
@Override
WebAppMain
.
FileAndDescription
getHomeDir
(
ServletContextEvent
event
)
{
return
new
WebAppMain
.
FileAndDescription
(
homeLoader
.
allocate
(),
"test"
);
public
WebAppMain
.
FileAndDescription
getHomeDir
(
ServletContextEvent
event
)
{
try
{
return
new
WebAppMain
.
FileAndDescription
(
homeLoader
.
allocate
(),
"test"
);
}
catch
(
Exception
x
)
{
throw
new
AssertionError
(
x
);
}
}
}
}
;
wa
.
contextInitialized
(
new
ServletContextEvent
(
ws
));
wa
.
joinInit
();
def
a
=
WebApp
.
get
(
ws
).
app
;
if
(
a
instanceof
Jenkins
)
return
a
;
Object
a
=
WebApp
.
get
(
ws
).
getApp
();
if
(
a
instanceof
Hudson
)
{
return
(
Hudson
)
a
;
}
return
null
;
// didn't boot
}
}
@Rule
public
CustomRule
j
=
new
CustomRule
();
@After
public
void
tearDown
()
{
Jenkins
.
getInstance
()?.
cleanUp
()
Jenkins
j
=
Jenkins
.
getInstance
();
if
(
j
!=
null
)
{
j
.
cleanUp
();
}
}
public
static
class
SeriousError
extends
Error
{}
@TestExtension
()
@TestExtension
(
"runBootFailureScript"
)
public
static
class
InduceBootFailure
extends
ItemListener
{
@Override
void
onLoaded
()
{
public
void
onLoaded
()
{
if
(
makeBootFail
)
throw
new
SeriousError
();
}
}
@Test
void
runBootFailureScript
()
{
final
def
home
=
tmpDir
.
newFolder
()
j
.
with
({
->
home
}
as
HudsonHomeLoader
)
public
void
runBootFailureScript
()
throws
Exception
{
final
File
home
=
tmpDir
.
newFolder
();
j
.
with
(
new
HudsonHomeLoader
()
{
@Override
public
File
allocate
()
throws
Exception
{
return
home
;
}
});
// creates a script
new
File
(
home
,
"boot-failure.groovy"
).
text
=
"hudson.util.BootFailureTest.problem = exception"
;
def
d
=
new
File
(
home
,
"boot-failure.groovy.d"
)
FileUtils
.
write
(
new
File
(
home
,
"boot-failure.groovy"
),
"hudson.util.BootFailureTest.problem = exception"
)
;
File
d
=
new
File
(
home
,
"boot-failure.groovy.d"
);
d
.
mkdirs
();
new
File
(
d
,
"1.groovy"
).
text
=
"hudson.util.BootFailureTest.runRecord << '1'"
;
new
File
(
d
,
"2.groovy"
).
text
=
"hudson.util.BootFailureTest.runRecord << '2'"
;
FileUtils
.
write
(
new
File
(
d
,
"1.groovy"
),
"hudson.util.BootFailureTest.runRecord << '1'"
)
;
FileUtils
.
write
(
new
File
(
d
,
"2.groovy"
),
"hudson.util.BootFailureTest.runRecord << '2'"
)
;
// first failed boot
makeBootFail
=
true
;
assert
j
.
newHudson
()==
null
;
assert
bootFailures
(
home
)==
1
;
assert
Null
(
j
.
newHudson
())
;
assert
Equals
(
1
,
bootFailures
(
home
))
;
// second failed boot
problem
=
null
;
runRecord
=
[]
;
assert
j
.
newHudson
()==
null
;
assert
bootFailures
(
home
)==
2
;
assert
runRecord
==[
"1"
,
"2"
]
runRecord
=
new
ArrayList
<
String
>()
;
assert
Null
(
j
.
newHudson
())
;
assert
Equals
(
2
,
bootFailures
(
home
))
;
assert
Equals
(
Arrays
.
asList
(
"1"
,
"2"
),
runRecord
);
// make sure the script has actually run
assert
problem
.
cause
instanceof
SeriousError
assert
Equals
(
SeriousError
.
class
,
problem
.
getCause
().
getClass
());
// if it boots well, the failure record should be gone
makeBootFail
=
false
;
assert
j
.
newHudson
()!=
null
;
assert
!
BootFailure
.
getBootFailureFile
(
home
).
exists
()
assert
NotNull
(
j
.
newHudson
())
;
assert
False
(
BootFailure
.
getBootFailureFile
(
home
).
exists
());
}
private
static
int
bootFailures
(
File
home
)
{
return
BootFailure
.
getBootFailureFile
(
home
).
readLines
().
size
()
private
static
int
bootFailures
(
File
home
)
throws
IOException
{
return
FileUtils
.
readLines
(
BootFailure
.
getBootFailureFile
(
home
)).
size
();
}
// to be set by the script
public
static
Exception
problem
;
public
static
def
runRecord
=
[]
;
public
static
List
<
String
>
runRecord
=
new
ArrayList
<
String
>()
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录