Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

UI and descriptors for pluggable storage #155

Merged
merged 4 commits into from
Sep 16, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,16 @@
<version>1.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.jenkins</groupId>
<artifactId>configuration-as-code</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.jenkins.configuration-as-code</groupId>
<artifactId>test-harness</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
Expand All @@ -157,6 +167,11 @@
<artifactId>error_prone_annotations</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.1</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
9 changes: 5 additions & 4 deletions src/main/java/hudson/tasks/junit/CaseResult.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,9 @@
package hudson.tasks.junit;

import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import hudson.tasks.junit.storage.TestResultImpl;
import hudson.tasks.junit.storage.TestResultStorage;
import io.jenkins.plugins.junit.storage.FileJunitTestResultStorage;
import io.jenkins.plugins.junit.storage.TestResultImpl;
import io.jenkins.plugins.junit.storage.JunitTestResultStorage;
import hudson.util.TextFile;
import org.apache.commons.collections.iterators.ReverseListIterator;
import org.apache.commons.io.FileUtils;
Expand Down Expand Up @@ -447,8 +448,8 @@ else if (getRun() != null) {
}

public Run<?,?> getFailedSinceRun() {
TestResultStorage storage = TestResultStorage.find();
if (storage != null) {
JunitTestResultStorage storage = JunitTestResultStorage.find();
if (!(storage instanceof FileJunitTestResultStorage)) {
Run<?, ?> run = Stapler.getCurrentRequest().findAncestorObject(Run.class);
TestResultImpl pluggableStorage = storage.load(run.getParent().getFullName(), run.getNumber());
return pluggableStorage.getFailedSinceRun(this);
Expand Down
9 changes: 5 additions & 4 deletions src/main/java/hudson/tasks/junit/ClassResult.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,9 @@
package hudson.tasks.junit;

import hudson.model.Run;
import hudson.tasks.junit.storage.TestResultImpl;
import hudson.tasks.junit.storage.TestResultStorage;
import io.jenkins.plugins.junit.storage.FileJunitTestResultStorage;
import io.jenkins.plugins.junit.storage.TestResultImpl;
import io.jenkins.plugins.junit.storage.JunitTestResultStorage;
import hudson.tasks.test.TabulatedResult;
import hudson.tasks.test.TestResult;
import hudson.tasks.test.TestObject;
Expand Down Expand Up @@ -131,9 +132,9 @@ public CaseResult getCaseResult(String name) {

@Override
public Object getDynamic(String name, StaplerRequest req, StaplerResponse rsp) {
TestResultStorage storage = TestResultStorage.find();
JunitTestResultStorage storage = JunitTestResultStorage.find();
CaseResult c;
if (storage != null) {
if (!(storage instanceof FileJunitTestResultStorage)) {
Run<?, ?> run = Stapler.getCurrentRequest().findAncestorObject(Run.class);
TestResultImpl pluggableStorage = storage.load(run.getParent().getFullName(), run.getNumber());
c = pluggableStorage.getCaseResult(name);
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/hudson/tasks/junit/History.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,11 @@
import edu.hm.hafner.echarts.ChartModelConfiguration;
import edu.hm.hafner.echarts.JacksonFacade;
import edu.hm.hafner.echarts.LinesChartModel;
import hudson.tasks.junit.storage.TestResultImpl;
import hudson.tasks.test.TestObject;
import hudson.tasks.test.TestObjectIterable;
import hudson.tasks.test.TestResultDurationChart;
import hudson.tasks.test.TestResultTrendChart;
import io.jenkins.plugins.junit.storage.TestResultImpl;
import org.kohsuke.accmod.Restricted;
import org.kohsuke.accmod.restrictions.NoExternalUse;
import org.kohsuke.stapler.bind.JavaScriptMethod;
Expand Down
9 changes: 5 additions & 4 deletions src/main/java/hudson/tasks/junit/JUnitParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,9 @@
import hudson.model.AbstractBuild;
import hudson.model.Run;
import hudson.remoting.VirtualChannel;
import hudson.tasks.junit.storage.TestResultStorage;
import io.jenkins.plugins.junit.storage.JunitTestResultStorage;

import io.jenkins.plugins.junit.storage.JunitTestResultStorage.RemotePublisher;
import java.io.IOException;
import java.io.File;

Expand Down Expand Up @@ -107,7 +108,7 @@ public TestResult parseResult(String testResultLocations, Run<?,?> build, Pipeli
}

public TestResultSummary summarizeResult(String testResultLocations, Run<?,?> build, PipelineTestDetails pipelineTestDetails,
FilePath workspace, Launcher launcher, TaskListener listener, TestResultStorage storage)
FilePath workspace, Launcher launcher, TaskListener listener, JunitTestResultStorage storage)
throws InterruptedException, IOException {
return workspace.act(new StorageParseResultCallable(testResultLocations, build, keepLongStdio, allowEmptyResults, pipelineTestDetails, storage.createRemotePublisher(build), listener));
}
Expand Down Expand Up @@ -173,10 +174,10 @@ protected TestResult handle(TestResult result) throws IOException {

private static final class StorageParseResultCallable extends ParseResultCallable<TestResultSummary> {

private final TestResultStorage.RemotePublisher publisher;
private final RemotePublisher publisher;
private final TaskListener listener;

StorageParseResultCallable(String testResults, Run<?,?> build, boolean keepLongStdio, boolean allowEmptyResults, PipelineTestDetails pipelineTestDetails, TestResultStorage.RemotePublisher publisher, TaskListener listener) {
StorageParseResultCallable(String testResults, Run<?,?> build, boolean keepLongStdio, boolean allowEmptyResults, PipelineTestDetails pipelineTestDetails, RemotePublisher publisher, TaskListener listener) {
super(testResults, build, keepLongStdio, allowEmptyResults, pipelineTestDetails);
this.publisher = publisher;
this.listener = listener;
Expand Down
13 changes: 7 additions & 6 deletions src/main/java/hudson/tasks/junit/JUnitResultArchiver.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@
import hudson.tasks.Publisher;
import hudson.tasks.Recorder;
import hudson.tasks.junit.TestResultAction.Data;
import hudson.tasks.junit.storage.TestResultStorage;
import io.jenkins.plugins.junit.storage.FileJunitTestResultStorage;
import io.jenkins.plugins.junit.storage.JunitTestResultStorage;
import hudson.tasks.test.PipelineTestDetails;
import hudson.util.DescribableList;
import hudson.util.FormValidation;
Expand Down Expand Up @@ -220,16 +221,16 @@ public static TestResultAction parseAndAttach(@Nonnull JUnitTask task, PipelineT
public static TestResultSummary parseAndSummarize(@Nonnull JUnitTask task, PipelineTestDetails pipelineTestDetails,
Run<?, ?> build, FilePath workspace, Launcher launcher, TaskListener listener)
throws InterruptedException, IOException {
TestResultStorage storage = TestResultStorage.find();
if (storage == null) {
JunitTestResultStorage storage = JunitTestResultStorage.find();
if (storage instanceof FileJunitTestResultStorage) {
listener.getLogger().println(Messages.JUnitResultArchiver_Recording());
} // else let storage decide what to print

String testResults = build.getEnvironment(listener).expand(task.getTestResults());

TestResult result;
TestResultSummary summary;
if (storage == null) {
if (storage instanceof FileJunitTestResultStorage) {
result = parse(task, pipelineTestDetails, testResults, build, workspace, launcher, listener);
summary = null; // see below
} else {
Expand All @@ -246,13 +247,13 @@ public static TestResultSummary parseAndSummarize(@Nonnull JUnitTask task, Pipel
action = new TestResultAction(build, result, listener);
} else {
appending = true;
if (storage == null) {
if (storage instanceof FileJunitTestResultStorage) {
result.freeze(action);
action.mergeResult(result, listener);
}
}
if (summary == null) {
assert storage == null;
assert storage instanceof FileJunitTestResultStorage;
// Cannot do this above since the result has not yet been frozen.
summary = new TestResultSummary(result);
}
Expand Down
9 changes: 5 additions & 4 deletions src/main/java/hudson/tasks/junit/PackageResult.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,9 @@
package hudson.tasks.junit;

import hudson.model.Run;
import hudson.tasks.junit.storage.TestResultImpl;
import hudson.tasks.junit.storage.TestResultStorage;
import io.jenkins.plugins.junit.storage.FileJunitTestResultStorage;
import io.jenkins.plugins.junit.storage.TestResultImpl;
import io.jenkins.plugins.junit.storage.JunitTestResultStorage;
import hudson.tasks.test.MetaTabulatedResult;
import hudson.tasks.test.TestResult;
import org.kohsuke.stapler.Stapler;
Expand Down Expand Up @@ -147,9 +148,9 @@ public int getSkipCount() {

@Override
public Object getDynamic(String name, StaplerRequest req, StaplerResponse rsp) {
TestResultStorage storage = TestResultStorage.find();
JunitTestResultStorage storage = JunitTestResultStorage.find();
ClassResult result;
if (storage != null) {
if (!(storage instanceof FileJunitTestResultStorage)) {
Run<?, ?> run = Stapler.getCurrentRequest().findAncestorObject(Run.class);
TestResultImpl pluggableStorage = storage.load(run.getParent().getFullName(), run.getNumber());
result = pluggableStorage.getClassResult(name);
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/hudson/tasks/junit/TestResult.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
import hudson.AbortException;
import hudson.Util;
import hudson.model.Run;
import hudson.tasks.junit.storage.TestResultImpl;
import io.jenkins.plugins.junit.storage.TestResultImpl;
import hudson.tasks.test.AbstractTestResultAction;
import hudson.tasks.test.PipelineTestDetails;
import hudson.tasks.test.PipelineBlockWithTests;
Expand Down
25 changes: 13 additions & 12 deletions src/main/java/hudson/tasks/junit/TestResultAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@
import hudson.model.Job;
import hudson.model.Run;
import hudson.model.TaskListener;
import hudson.tasks.junit.storage.TestResultStorage;
import io.jenkins.plugins.junit.storage.FileJunitTestResultStorage;
import io.jenkins.plugins.junit.storage.JunitTestResultStorage;
import hudson.tasks.test.AbstractTestResultAction;
import hudson.tasks.test.TestObject;
import hudson.tasks.test.TestResultProjectAction;
Expand Down Expand Up @@ -66,7 +67,7 @@
public class TestResultAction extends AbstractTestResultAction<TestResultAction> implements StaplerProxy, SimpleBuildStep.LastBuildAction {
private transient WeakReference<TestResult> result;

/** null only if there is a {@link TestResultStorage} */
/** null only if there is a {@link JunitTestResultStorage} */
private @Nullable Integer failCount;
private @Nullable Integer skipCount;
// Hudson < 1.25 didn't set these fields, so use Integer
Expand All @@ -85,7 +86,7 @@ public TestResultAction(AbstractBuild owner, TestResult result, BuildListener li
*/
public TestResultAction(Run owner, TestResult result, TaskListener listener) {
super(owner);
if (TestResultStorage.find() == null) {
if (JunitTestResultStorage.find() instanceof FileJunitTestResultStorage) {
setResult(result, listener);
}
}
Expand All @@ -110,7 +111,7 @@ public TestResultAction(TestResult result, BuildListener listener) {
* @since 1.2-beta-1
*/
public synchronized void setResult(TestResult result, TaskListener listener) {
assert TestResultStorage.find() == null;
assert JunitTestResultStorage.find() instanceof FileJunitTestResultStorage;
result.freeze(this);

totalCount = result.getTotalCount();
Expand Down Expand Up @@ -140,8 +141,8 @@ private XmlFile getDataFile() {

@Override
public synchronized TestResult getResult() {
TestResultStorage storage = TestResultStorage.find();
if (storage != null) {
JunitTestResultStorage storage = JunitTestResultStorage.find();
if (!(storage instanceof FileJunitTestResultStorage)) {
return new TestResult(storage.load(run.getParent().getFullName(), run.getNumber()));
}
TestResult r;
Expand All @@ -166,8 +167,8 @@ public synchronized TestResult getResult() {

@Override
public synchronized int getFailCount() {
TestResultStorage storage = TestResultStorage.find();
if (storage != null) {
JunitTestResultStorage storage = JunitTestResultStorage.find();
if (!(storage instanceof FileJunitTestResultStorage)) {
return new TestResult(storage.load(run.getParent().getFullName(), run.getNumber())).getFailCount();
}
if(totalCount==null)
Expand All @@ -177,8 +178,8 @@ public synchronized int getFailCount() {

@Override
public synchronized int getSkipCount() {
TestResultStorage storage = TestResultStorage.find();
if (storage != null) {
JunitTestResultStorage storage = JunitTestResultStorage.find();
if (!(storage instanceof FileJunitTestResultStorage)) {
return new TestResult(storage.load(run.getParent().getFullName(), run.getNumber())).getSkipCount();
}
if(totalCount==null)
Expand All @@ -188,8 +189,8 @@ public synchronized int getSkipCount() {

@Override
public synchronized int getTotalCount() {
TestResultStorage storage = TestResultStorage.find();
if (storage != null) {
JunitTestResultStorage storage = JunitTestResultStorage.find();
if (!(storage instanceof FileJunitTestResultStorage)) {
return new TestResult(storage.load(run.getParent().getFullName(), run.getNumber())).getTotalCount();
}
if(totalCount==null)
Expand Down
28 changes: 0 additions & 28 deletions src/main/java/hudson/tasks/junit/storage/package-info.java

This file was deleted.

10 changes: 5 additions & 5 deletions src/main/java/hudson/tasks/test/TestResultProjectAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,11 @@
import hudson.model.Job;
import hudson.model.Run;
import hudson.tasks.junit.JUnitResultArchiver;
import hudson.tasks.junit.storage.TestResultImpl;
import hudson.tasks.junit.storage.TestResultStorage;
import io.jenkins.plugins.junit.storage.FileJunitTestResultStorage;
import io.jenkins.plugins.junit.storage.TestResultImpl;
import io.jenkins.plugins.junit.storage.JunitTestResultStorage;
import io.jenkins.plugins.echarts.AsyncTrendChart;
import org.kohsuke.stapler.Ancestor;
import org.kohsuke.stapler.Stapler;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;

Expand Down Expand Up @@ -113,8 +113,8 @@ public AbstractTestResultAction getLastTestResultAction() {
protected LinesChartModel createChartModel() {
Run<?, ?> lastCompletedBuild = job.getLastCompletedBuild();

TestResultStorage storage = TestResultStorage.find();
if (storage != null) {
JunitTestResultStorage storage = JunitTestResultStorage.find();
if (!(storage instanceof FileJunitTestResultStorage)) {
TestResultImpl pluggableStorage = storage.load(lastCompletedBuild.getParent().getFullName(), lastCompletedBuild.getNumber());
return new TestResultTrendChart().create(pluggableStorage.getTrendTestResultSummary());
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package io.jenkins.plugins.junit.storage;

import hudson.Extension;
import hudson.model.Run;
import java.io.IOException;
import org.jenkinsci.Symbol;
import org.kohsuke.accmod.Restricted;
import org.kohsuke.accmod.restrictions.Beta;
import org.kohsuke.stapler.DataBoundConstructor;

@Extension
@Restricted(Beta.class)
public class FileJunitTestResultStorage extends JunitTestResultStorage {

@DataBoundConstructor
public FileJunitTestResultStorage() {
}

@Override
public RemotePublisher createRemotePublisher(Run<?, ?> build) throws IOException {
return null;
}

@Override
public TestResultImpl load(String job, int build) {
return null;
}

@Extension
@Symbol("file")
public static class DescriptorImpl extends JunitTestResultStorageDescriptor {

@Override
public String getDisplayName() {
return Messages.FileJunitTestResultStorage_displayName();
}

}
}
Loading