package hudson.plugins.junitattachments;
import java.io.IOException;
import java.io.Serializable;
import java.util.Collections;
import java.util.List;
import hudson.FilePath;
import hudson.Launcher;
import hudson.model.AbstractBuild;
import hudson.model.BuildListener;
import hudson.model.Descriptor;
import hudson.model.FreeStyleBuild;
import hudson.model.FreeStyleProject;
import hudson.tasks.Builder;
import hudson.tasks.junit.ClassResult;
import hudson.tasks.junit.JUnitResultArchiver;
import hudson.tasks.junit.TestDataPublisher;
import hudson.tasks.junit.TestResultAction;
import hudson.util.DescribableList;
import org.jvnet.hudson.test.ExtractResourceSCM;
import org.jvnet.hudson.test.HudsonTestCase;
public class AttachmentPublisherTest extends HudsonTestCase {
public void test1() throws Exception {
FreeStyleProject project = createFreeStyleProject();
DescribableList<TestDataPublisher, Descriptor<TestDataPublisher>> publishers = new DescribableList<TestDataPublisher, Descriptor<TestDataPublisher>>(
project);
publishers.add(new AttachmentPublisher());
JUnitResultArchiver archiver = new JUnitResultArchiver("*.xml",
publishers);
project.getPublishersList().add(archiver);
project.setScm(new ExtractResourceSCM(getClass().getResource(
"workspace.zip")));
project.getBuildersList().add(new TouchBuilder());
FreeStyleBuild b = project.scheduleBuild2(0).get();
assertBuildStatusSuccess(b);
TestResultAction action = b.getAction(TestResultAction.class);
assertNotNull(action);
ClassResult cr = action.getResult().byPackage("test.foo.bar")
.getClassResult("DefaultIntegrationTest");
AttachmentTestAction ata = cr.getTestAction(AttachmentTestAction.class);
assertNotNull(ata);
final List<String> attachments = ata.getAttachments();
Collections.sort(attachments);
assertEquals(2, attachments.size());
assertEquals("file", attachments.get(0));
assertEquals("test.foo.bar.DefaultIntegrationTest-output.txt", attachments.get(1));
}
public static final class TouchBuilder extends Builder implements
Serializable {
@Override
public boolean perform(AbstractBuild<?, ?> build, Launcher launcher,
BuildListener listener) throws InterruptedException,
IOException {
for (FilePath f : build.getWorkspace().list()) {
f.touch(System.currentTimeMillis());
}
return true;
}
}
}