提交 09722a98 编写于 作者: J Jesse Glick

Converting BootFailureTest from Groovy to Java.

上级 54374fc2
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;
assertNull(j.newHudson());
assertEquals(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>();
assertNull(j.newHudson());
assertEquals(2, bootFailures(home));
assertEquals(Arrays.asList("1", "2"), runRecord);
// make sure the script has actually run
assert problem.cause instanceof SeriousError
assertEquals(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()
assertNotNull(j.newHudson());
assertFalse(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.
先完成此消息的编辑!
想要评论请 注册