package hudson.plugins.build_timeout;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import hudson.EnvVars;
import hudson.Launcher;
import hudson.model.AbstractBuild;
import hudson.model.AbstractProject;
import hudson.model.BuildListener;
import hudson.model.FreeStyleBuild;
import hudson.model.FreeStyleProject;
import hudson.model.Result;
import hudson.plugins.build_timeout.impl.AbsoluteTimeOutStrategy;
import hudson.plugins.build_timeout.impl.NoActivityTimeOutStrategy;
import hudson.plugins.build_timeout.operations.AbortOperation;
import hudson.plugins.build_timeout.operations.FailOperation;
import hudson.plugins.build_timeout.operations.WriteDescriptionOperation;
import hudson.tasks.BuildStepDescriptor;
import hudson.tasks.BuildStepMonitor;
import hudson.tasks.Builder;
import hudson.tasks.Publisher;
import hudson.tasks.Recorder;
import org.jvnet.hudson.test.Bug;
import org.jvnet.hudson.test.HudsonTestCase;
import org.jvnet.hudson.test.TestExtension;
import org.jvnet.hudson.test.CaptureEnvironmentBuilder;
import org.jvnet.hudson.test.SleepBuilder;
import org.jvnet.hudson.test.recipes.LocalData;
import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.google.common.base.Function;
import com.google.common.collect.Lists;
public class BuildTimeoutWrapperIntegrationTest extends HudsonTestCase {
/*
* Method to get environment variables when no timeout env variable is declared
*/
public EnvVars getEnvVars() throws Exception {
BuildTimeoutWrapper.MINIMUM_TIMEOUT_MILLISECONDS = 0;
FreeStyleProject project = createFreeStyleProject();
project.getBuildWrappersList().add(new BuildTimeoutWrapper(new QuickBuildTimeOutStrategy(300000), false, false));
CaptureEnvironmentBuilder captureEnvBuilder = new CaptureEnvironmentBuilder();
project.getBuildersList().add(captureEnvBuilder);
project.scheduleBuild2(0).get();
return captureEnvBuilder.getEnvVars();
}
/*
* Test to verify setting a timeout environment variable to a valid string
*/
public void testBuildTimeoutEnvValid() throws Exception {
EnvVars expectedEnvVars = getEnvVars();
FreeStyleProject project = createFreeStyleProject();
project.getBuildWrappersList().add(new BuildTimeoutWrapper(
new QuickBuildTimeOutStrategy(12345),
Arrays.<BuildTimeOutOperation>asList(),
"BUILD_TIMEOUT"
));
CaptureEnvironmentBuilder captureEnvBuilder = new CaptureEnvironmentBuilder();
project.getBuildersList().add(captureEnvBuilder);
project.scheduleBuild2(0).get();
EnvVars envVars = captureEnvBuilder.getEnvVars();
assertEquals(expectedEnvVars.size()+1, envVars.size());
assertEquals("12345", envVars.get("BUILD_TIMEOUT"));
}
/*
* Test to verify setting timeout environment variable to null (this is the default)
*/
public void testBuildTimeoutEnvNull() throws Exception {
EnvVars expectedEnvVars = getEnvVars();
FreeStyleProject project = createFreeStyleProject();
project.getBuildWrappersList().add(new BuildTimeoutWrapper(
new QuickBuildTimeOutStrategy(12345),
Arrays.<BuildTimeOutOperation>asList(),
null
));
CaptureEnvironmentBuilder captureEnvBuilder = new CaptureEnvironmentBuilder();
project.getBuildersList().add(captureEnvBuilder);
project.scheduleBuild2(0).get();
EnvVars envVars = captureEnvBuilder.getEnvVars();
assertEquals(expectedEnvVars.size(), envVars.size());
}
/*
* Test to verify setting timeout environment variable to empty string.
*/
public void testBuildTimeoutEnvEmpty() throws Exception {
EnvVars expectedEnvVars = getEnvVars();
FreeStyleProject project = createFreeStyleProject();
project.getBuildWrappersList().add(new BuildTimeoutWrapper(
new QuickBuildTimeOutStrategy(12345),
Arrays.<BuildTimeOutOperation>asList(),
" "
));
CaptureEnvironmentBuilder captureEnvBuilder = new CaptureEnvironmentBuilder();
project.getBuildersList().add(captureEnvBuilder);
project.scheduleBuild2(0).get();
EnvVars envVars = captureEnvBuilder.getEnvVars();
assertEquals(expectedEnvVars.size(), envVars.size());
}
@Bug(9203)
public void testIssue9203() throws Exception {
BuildTimeoutWrapper.MINIMUM_TIMEOUT_MILLISECONDS = 0;
FreeStyleProject project = createFreeStyleProject();
project.getBuildWrappersList().add(new BuildTimeoutWrapper(new QuickBuildTimeOutStrategy(), true, false));
project.getBuildersList().add(new SleepBuilder(9999));
FreeStyleBuild build = project.scheduleBuild2(0).get();
assertBuildStatus(Result.FAILURE, build);
System.err.println(getLog(build));
}
public static class ExecutionCheckBuilder extends Builder {
public boolean executed = false;
@Override
public boolean perform(AbstractBuild<?, ?> build, Launcher launcher, BuildListener listener)
throws InterruptedException, IOException {
executed = true;
return true;
}
@TestExtension
public static class DescriptorImpl extends BuildStepDescriptor<Builder> {
@Override
public boolean isApplicable(@SuppressWarnings("rawtypes") Class<? extends AbstractProject> arg0) {
return true;
}
@Override
public String getDisplayName() {
return "ExecutionCheckBuilder";
}
}
}
public static class ExecutionCheckPublisher extends Recorder {
public boolean executed = false;
public BuildStepMonitor getRequiredMonitorService() {
return BuildStepMonitor.NONE;
}
@Override
public boolean perform(AbstractBuild<?, ?> build, Launcher launcher, BuildListener listener)
throws InterruptedException, IOException {
executed = true;
return true;
}
@SuppressWarnings({"rawtypes", "unchecked"})
@Override
public BuildStepDescriptor getDescriptor() {
return super.getDescriptor();
}
@TestExtension
public static class DescriptorImpl extends BuildStepDescriptor<Publisher> {
@Override
public boolean isApplicable(@SuppressWarnings("rawtypes") Class<? extends AbstractProject> arg0)
{
return true;
}
@Override
public String getDisplayName() {
return "ExecutionCheckPublisher";
}
}
}
public void testAbort() throws Exception
{
BuildTimeoutWrapper.MINIMUM_TIMEOUT_MILLISECONDS = 0;
// No description
{
FreeStyleProject project = createFreeStyleProject();
project.getBuildWrappersList().add(new BuildTimeoutWrapper(new QuickBuildTimeOutStrategy(), false, false));
project.getBuildersList().add(new SleepBuilder(9999));
ExecutionCheckBuilder checkBuilder = new ExecutionCheckBuilder();
ExecutionCheckPublisher checkPublisher = new ExecutionCheckPublisher();
project.getBuildersList().add(checkBuilder);
project.getPublishersList().add(checkPublisher);
assertFalse(checkBuilder.executed);
assertFalse(checkPublisher.executed);
FreeStyleBuild build = project.scheduleBuild2(0).get();
assertBuildStatus(Result.ABORTED, build);
assertFalse(checkBuilder.executed);
assertTrue(checkPublisher.executed);
assertNull(build.getDescription());
}
// Set description
{
FreeStyleProject project = createFreeStyleProject();
project.getBuildWrappersList().add(new BuildTimeoutWrapper(new QuickBuildTimeOutStrategy(), false, true));
project.getBuildersList().add(new SleepBuilder(9999));
ExecutionCheckBuilder checkBuilder = new ExecutionCheckBuilder();
ExecutionCheckPublisher checkPublisher = new ExecutionCheckPublisher();
project.getBuildersList().add(checkBuilder);
project.getPublishersList().add(checkPublisher);
assertFalse(checkBuilder.executed);
assertFalse(checkPublisher.executed);
FreeStyleBuild build = project.scheduleBuild2(0).get();
assertBuildStatus(Result.ABORTED, build);
assertFalse(checkBuilder.executed);
assertTrue(checkPublisher.executed);
assertNotNull(build.getDescription());
assertFalse(build.getDescription().isEmpty());
}
// Not aborted
{
FreeStyleProject project = createFreeStyleProject();
project.getBuildWrappersList().add(new BuildTimeoutWrapper(new QuickBuildTimeOutStrategy(), false, true));
project.getBuildersList().add(new SleepBuilder(1000));
ExecutionCheckBuilder checkBuilder = new ExecutionCheckBuilder();
ExecutionCheckPublisher checkPublisher = new ExecutionCheckPublisher();
project.getBuildersList().add(checkBuilder);
project.getPublishersList().add(checkPublisher);
assertFalse(checkBuilder.executed);
assertFalse(checkPublisher.executed);
FreeStyleBuild build = project.scheduleBuild2(0).get();
assertBuildStatusSuccess(build);
assertTrue(checkBuilder.executed);
assertTrue(checkPublisher.executed);
assertNull(build.getDescription());
}
}
public void testFail() throws Exception
{
BuildTimeoutWrapper.MINIMUM_TIMEOUT_MILLISECONDS = 0;
// No description
{
FreeStyleProject project = createFreeStyleProject();
project.getBuildWrappersList().add(new BuildTimeoutWrapper(new QuickBuildTimeOutStrategy(), true, false));
project.getBuildersList().add(new SleepBuilder(9999));
ExecutionCheckBuilder checkBuilder = new ExecutionCheckBuilder();
ExecutionCheckPublisher checkPublisher = new ExecutionCheckPublisher();
project.getBuildersList().add(checkBuilder);
project.getPublishersList().add(checkPublisher);
assertFalse(checkBuilder.executed);
assertFalse(checkPublisher.executed);
FreeStyleBuild build = project.scheduleBuild2(0).get();
assertBuildStatus(Result.FAILURE, build);
assertFalse(checkBuilder.executed);
assertTrue(checkPublisher.executed);
assertNull(build.getDescription());
}
// Set description
{
FreeStyleProject project = createFreeStyleProject();
project.getBuildWrappersList().add(new BuildTimeoutWrapper(new QuickBuildTimeOutStrategy(), true, true));
project.getBuildersList().add(new SleepBuilder(9999));
ExecutionCheckBuilder checkBuilder = new ExecutionCheckBuilder();
ExecutionCheckPublisher checkPublisher = new ExecutionCheckPublisher();
project.getBuildersList().add(checkBuilder);
project.getPublishersList().add(checkPublisher);
assertFalse(checkBuilder.executed);
assertFalse(checkPublisher.executed);
FreeStyleBuild build = project.scheduleBuild2(0).get();
assertBuildStatus(Result.FAILURE, build);
assertFalse(checkBuilder.executed);
assertTrue(checkPublisher.executed);
assertNotNull(build.getDescription());
assertFalse(build.getDescription().isEmpty());
}
// Not aborted
{
FreeStyleProject project = createFreeStyleProject();
project.getBuildWrappersList().add(new BuildTimeoutWrapper(new QuickBuildTimeOutStrategy(), true, true));
project.getBuildersList().add(new SleepBuilder(1000));
ExecutionCheckBuilder checkBuilder = new ExecutionCheckBuilder();
ExecutionCheckPublisher checkPublisher = new ExecutionCheckPublisher();
project.getBuildersList().add(checkBuilder);
project.getPublishersList().add(checkPublisher);
assertFalse(checkBuilder.executed);
assertFalse(checkPublisher.executed);
FreeStyleBuild build = project.scheduleBuild2(0).get();
assertBuildStatusSuccess(build);
assertTrue(checkBuilder.executed);
assertTrue(checkPublisher.executed);
assertNull(build.getDescription());
}
}
@LocalData
public void testMigrationFrom_1_12_2() throws Exception {
BuildTimeoutWrapper.MINIMUM_TIMEOUT_MILLISECONDS = 0;
// Abort
{
FreeStyleProject project = jenkins.getItem("AbortWithoutDescription", jenkins, FreeStyleProject.class);
assertNotNull(project);
// assert migration of configuration
BuildTimeoutWrapper buildTimeout = project.getBuildWrappersList().get(BuildTimeoutWrapper.class);
assertNotNull(buildTimeout);
assertEquals(QuickBuildTimeOutStrategy.class, buildTimeout.getStrategy().getClass());
assertEquals(
Arrays.asList(AbortOperation.class),
Lists.transform(buildTimeout.getOperationList(), new Function<BuildTimeOutOperation, Class<? extends BuildTimeOutOperation>>() {
public Class<? extends BuildTimeOutOperation> apply(BuildTimeOutOperation input) {
return input.getClass();
}
})
);
// assert it works.
ExecutionCheckBuilder checkBuilder = project.getBuildersList().get(ExecutionCheckBuilder.class);
ExecutionCheckPublisher checkPublisher = project.getPublishersList().get(ExecutionCheckPublisher.class);
assertNotNull(checkBuilder);
assertNotNull(checkPublisher);
assertFalse(checkBuilder.executed);
assertFalse(checkPublisher.executed);
FreeStyleBuild build = project.scheduleBuild2(0).get();
assertBuildStatus(Result.ABORTED, build);
assertFalse(checkBuilder.executed);
assertTrue(checkPublisher.executed);
assertNull(build.getDescription());
}
// Abort and Set description
{
FreeStyleProject project = jenkins.getItem("AbortWithDescription", jenkins, FreeStyleProject.class);
assertNotNull(project);
// assert migration of configuration
BuildTimeoutWrapper buildTimeout = project.getBuildWrappersList().get(BuildTimeoutWrapper.class);
assertNotNull(buildTimeout);
assertEquals(QuickBuildTimeOutStrategy.class, buildTimeout.getStrategy().getClass());
assertEquals(
Arrays.asList(WriteDescriptionOperation.class, AbortOperation.class),
Lists.transform(buildTimeout.getOperationList(), new Function<BuildTimeOutOperation, Class<? extends BuildTimeOutOperation>>() {
public Class<? extends BuildTimeOutOperation> apply(BuildTimeOutOperation input) {
return input.getClass();
}
})
);
// assert it works.
ExecutionCheckBuilder checkBuilder = project.getBuildersList().get(ExecutionCheckBuilder.class);
ExecutionCheckPublisher checkPublisher = project.getPublishersList().get(ExecutionCheckPublisher.class);
assertNotNull(checkBuilder);
assertNotNull(checkPublisher);
assertFalse(checkBuilder.executed);
assertFalse(checkPublisher.executed);
FreeStyleBuild build = project.scheduleBuild2(0).get();
assertBuildStatus(Result.ABORTED, build);
assertFalse(checkBuilder.executed);
assertTrue(checkPublisher.executed);
assertNotNull(build.getDescription());
assertFalse(build.getDescription().isEmpty());
}
// Fail
{
FreeStyleProject project = jenkins.getItem("FailWithoutDescription", jenkins, FreeStyleProject.class);
assertNotNull(project);
// assert migration of configuration
BuildTimeoutWrapper buildTimeout = project.getBuildWrappersList().get(BuildTimeoutWrapper.class);
assertNotNull(buildTimeout);
assertEquals(QuickBuildTimeOutStrategy.class, buildTimeout.getStrategy().getClass());
assertEquals(
Arrays.asList(FailOperation.class),
Lists.transform(buildTimeout.getOperationList(), new Function<BuildTimeOutOperation, Class<? extends BuildTimeOutOperation>>() {
public Class<? extends BuildTimeOutOperation> apply(BuildTimeOutOperation input) {
return input.getClass();
}
})
);
// assert it works.
ExecutionCheckBuilder checkBuilder = project.getBuildersList().get(ExecutionCheckBuilder.class);
ExecutionCheckPublisher checkPublisher = project.getPublishersList().get(ExecutionCheckPublisher.class);
assertNotNull(checkBuilder);
assertNotNull(checkPublisher);
assertFalse(checkBuilder.executed);
assertFalse(checkPublisher.executed);
FreeStyleBuild build = project.scheduleBuild2(0).get();
assertBuildStatus(Result.FAILURE, build);
assertFalse(checkBuilder.executed);
assertTrue(checkPublisher.executed);
assertNull(build.getDescription());
}
// Fail and Set description
{
FreeStyleProject project = jenkins.getItem("FailWithDescription", jenkins, FreeStyleProject.class);
assertNotNull(project);
// assert migration of configuration
BuildTimeoutWrapper buildTimeout = project.getBuildWrappersList().get(BuildTimeoutWrapper.class);
assertNotNull(buildTimeout);
assertEquals(QuickBuildTimeOutStrategy.class, buildTimeout.getStrategy().getClass());
assertEquals(
Arrays.asList(WriteDescriptionOperation.class, FailOperation.class),
Lists.transform(buildTimeout.getOperationList(), new Function<BuildTimeOutOperation, Class<? extends BuildTimeOutOperation>>() {
public Class<? extends BuildTimeOutOperation> apply(BuildTimeOutOperation input) {
return input.getClass();
}
})
);
ExecutionCheckBuilder checkBuilder = project.getBuildersList().get(ExecutionCheckBuilder.class);
ExecutionCheckPublisher checkPublisher = project.getPublishersList().get(ExecutionCheckPublisher.class);
assertNotNull(checkBuilder);
assertNotNull(checkPublisher);
assertFalse(checkBuilder.executed);
assertFalse(checkPublisher.executed);
FreeStyleBuild build = project.scheduleBuild2(0).get();
assertBuildStatus(Result.FAILURE, build);
assertFalse(checkBuilder.executed);
assertTrue(checkPublisher.executed);
assertNotNull(build.getDescription());
assertFalse(build.getDescription().isEmpty());
}
}
private static class TestBuildTimeOutOperation extends BuildTimeOutOperation {
public boolean executed = false;
private final boolean result;
public TestBuildTimeOutOperation(boolean result) {
this.result = result;
}
public TestBuildTimeOutOperation() {
this(true);
}
@Override
public boolean perform(AbstractBuild<?, ?> build, BuildListener listener, long effectiveTimeout) {
executed = true;
return result;
}
}
public void testMultipleOperations() throws Exception {
BuildTimeoutWrapper.MINIMUM_TIMEOUT_MILLISECONDS = 0;
FreeStyleProject project = createFreeStyleProject();
TestBuildTimeOutOperation op1 = new TestBuildTimeOutOperation();
TestBuildTimeOutOperation op2 = new TestBuildTimeOutOperation();
TestBuildTimeOutOperation op3 = new TestBuildTimeOutOperation();
project.getBuildWrappersList().add(new BuildTimeoutWrapper(
new QuickBuildTimeOutStrategy(1000),
Arrays.<BuildTimeOutOperation>asList(op1, op2, op3)
));
project.getBuildersList().add(new SleepBuilder(5000));
ExecutionCheckBuilder checkBuilder = new ExecutionCheckBuilder();
ExecutionCheckPublisher checkPublisher = new ExecutionCheckPublisher();
project.getBuildersList().add(checkBuilder);
project.getPublishersList().add(checkPublisher);
assertFalse(checkBuilder.executed);
assertFalse(checkPublisher.executed);
assertFalse(op1.executed);
assertFalse(op2.executed);
assertFalse(op3.executed);
FreeStyleBuild build = project.scheduleBuild2(0).get();
assertBuildStatusSuccess(build);
assertTrue(checkBuilder.executed);
assertTrue(checkPublisher.executed);
assertTrue(op1.executed);
assertTrue(op2.executed);
assertTrue(op3.executed);
}
public void testFailingOperations() throws Exception {
BuildTimeoutWrapper.MINIMUM_TIMEOUT_MILLISECONDS = 0;
FreeStyleProject project = createFreeStyleProject();
TestBuildTimeOutOperation op1 = new TestBuildTimeOutOperation();
TestBuildTimeOutOperation op2 = new TestBuildTimeOutOperation(false); // Fail!
TestBuildTimeOutOperation op3 = new TestBuildTimeOutOperation();
project.getBuildWrappersList().add(new BuildTimeoutWrapper(
new QuickBuildTimeOutStrategy(1000),
Arrays.<BuildTimeOutOperation>asList(op1, op2, op3)
));
project.getBuildersList().add(new SleepBuilder(5000));
ExecutionCheckBuilder checkBuilder = new ExecutionCheckBuilder();
ExecutionCheckPublisher checkPublisher = new ExecutionCheckPublisher();
project.getBuildersList().add(checkBuilder);
project.getPublishersList().add(checkPublisher);
assertFalse(checkBuilder.executed);
assertFalse(checkPublisher.executed);
assertFalse(op1.executed);
assertFalse(op2.executed);
assertFalse(op3.executed);
FreeStyleBuild build = project.scheduleBuild2(0).get();
assertBuildStatus(Result.FAILURE, build);
assertTrue(checkBuilder.executed);
assertTrue(checkPublisher.executed);
assertTrue(op1.executed);
assertTrue(op2.executed);
assertFalse(op3.executed);
}
public void testConfigurationNoOperation() throws Exception {
FreeStyleProject p = createFreeStyleProject();
p.getBuildWrappersList().add(new BuildTimeoutWrapper(
new AbsoluteTimeOutStrategy(3),
Collections.<BuildTimeOutOperation>emptyList(),
"TESTVAR"
));
p.save();
String fullname = p.getFullName();
// reconfigure.
// This should preserve configuration.
WebClient wc = createWebClient();
HtmlPage page = wc.getPage(p, "configure");
HtmlForm form = page.getFormByName("config");
submit(form);
p = jenkins.getItemByFullName(fullname, FreeStyleProject.class);
// assert strategy is preserved.
assertEquals(
AbsoluteTimeOutStrategy.class,
p.getBuildWrappersList().get(BuildTimeoutWrapper.class).getStrategy().getClass()
);
assertEquals(
"3",
((AbsoluteTimeOutStrategy)p.getBuildWrappersList().get(BuildTimeoutWrapper.class).getStrategy()).getTimeoutMinutes()
);
// assert operation is preserved
assertEquals(
Collections.emptyList(),
p.getBuildWrappersList().get(BuildTimeoutWrapper.class).getOperationList()
);
assertEquals(
"TESTVAR",
p.getBuildWrappersList().get(BuildTimeoutWrapper.class).getTimeoutEnvVar()
);
}
public void testConfigurationSingleOperation() throws Exception {
FreeStyleProject p = createFreeStyleProject();
p.getBuildWrappersList().add(new BuildTimeoutWrapper(
new AbsoluteTimeOutStrategy(3),
Arrays.<BuildTimeOutOperation>asList(
new WriteDescriptionOperation("test")
),
"TESTVAR"
));
p.save();
String fullname = p.getFullName();
// reconfigure.
// This should preserve configuration.
WebClient wc = createWebClient();
HtmlPage page = wc.getPage(p, "configure");
HtmlForm form = page.getFormByName("config");
submit(form);
p = jenkins.getItemByFullName(fullname, FreeStyleProject.class);
// assert strategy is preserved.
assertEquals(
AbsoluteTimeOutStrategy.class,
p.getBuildWrappersList().get(BuildTimeoutWrapper.class).getStrategy().getClass()
);
assertEquals(
"3",
((AbsoluteTimeOutStrategy)p.getBuildWrappersList().get(BuildTimeoutWrapper.class).getStrategy()).getTimeoutMinutes()
);
// assert operation is preserved
assertEquals(
Arrays.asList(WriteDescriptionOperation.class),
Lists.transform(
p.getBuildWrappersList().get(BuildTimeoutWrapper.class).getOperationList(),
new Function<BuildTimeOutOperation, Class<? extends BuildTimeOutOperation>>() {
public Class<? extends BuildTimeOutOperation> apply(BuildTimeOutOperation input) {
return input.getClass();
}
}
)
);
assertEquals(
"test",
((WriteDescriptionOperation)p.getBuildWrappersList().get(BuildTimeoutWrapper.class).getOperationList().get(0)).getDescription()
);
assertEquals(
"TESTVAR",
p.getBuildWrappersList().get(BuildTimeoutWrapper.class).getTimeoutEnvVar()
);
}
public void testConfigurationMultipleOperation() throws Exception {
FreeStyleProject p = createFreeStyleProject();
p.getBuildWrappersList().add(new BuildTimeoutWrapper(
new AbsoluteTimeOutStrategy(3),
Arrays.<BuildTimeOutOperation>asList(
new WriteDescriptionOperation("test"),
new AbortOperation()
),
"TESTVAR"
));
p.save();
String fullname = p.getFullName();
// reconfigure.
// This should preserve configuration.
WebClient wc = createWebClient();
HtmlPage page = wc.getPage(p, "configure");
HtmlForm form = page.getFormByName("config");
submit(form);
p = jenkins.getItemByFullName(fullname, FreeStyleProject.class);
// assert strategy is preserved.
assertEquals(
AbsoluteTimeOutStrategy.class,
p.getBuildWrappersList().get(BuildTimeoutWrapper.class).getStrategy().getClass()
);
assertEquals(
"3",
((AbsoluteTimeOutStrategy)p.getBuildWrappersList().get(BuildTimeoutWrapper.class).getStrategy()).getTimeoutMinutes()
);
// assert operation is preserved
assertEquals(
Arrays.asList(
WriteDescriptionOperation.class,
AbortOperation.class
),
Lists.transform(
p.getBuildWrappersList().get(BuildTimeoutWrapper.class).getOperationList(),
new Function<BuildTimeOutOperation, Class<? extends BuildTimeOutOperation>>() {
public Class<? extends BuildTimeOutOperation> apply(BuildTimeOutOperation input) {
return input.getClass();
}
}
)
);
assertEquals(
"test",
((WriteDescriptionOperation)p.getBuildWrappersList().get(BuildTimeoutWrapper.class).getOperationList().get(0)).getDescription()
);
assertEquals(
"TESTVAR",
p.getBuildWrappersList().get(BuildTimeoutWrapper.class).getTimeoutEnvVar()
);
}
@LocalData
public void testMigrationFrom_1_13() throws Exception {
Thread.sleep(60000);
FreeStyleProject p = jenkins.getItemByFullName("NoActivityTimeOutStrategy", FreeStyleProject.class);
assertNotNull(p);
NoActivityTimeOutStrategy strategy = (NoActivityTimeOutStrategy)p.getBuildWrappersList().get(BuildTimeoutWrapper.class).getStrategy();
assertEquals("5", strategy.getTimeoutSecondsString());
assertEquals(5, strategy.getTimeoutSeconds());
assertBuildStatus(Result.ABORTED, p.scheduleBuild2(0).get());
}
}