提交 9fc376ab 编写于 作者: O Olivier Lamy

[FIXED JENKINS-1557] Duplicate test results with Maven2 projects

merged with some modifications from https://github.com/kaydouble-u/jenkins/commit/0fff2e929015d50aa0811ae323503b8c6423ad0f

it test added
上级 0fff2e92
......@@ -45,10 +45,13 @@ import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import org.apache.commons.lang.StringUtils;
import org.apache.maven.artifact.versioning.ComparableVersion;
......@@ -72,7 +75,11 @@ public class SurefireArchiver extends MavenReporter {
* Note: Because this class can be run with different mojo goals with different path settings,
* we track multiple {@link FileSet}s for each encountered <tt>reportsDir</tt>
*/
private transient Map<File, FileSet> fileSets;
private transient Map<File, FileSet> fileSets = new ConcurrentHashMap<File,FileSet>();// Collections.synchronizedMap(new HashMap<File, FileSet>());
private final ReadWriteLock fileSetsReadWriteLock = new ReentrantReadWriteLock();
private final Lock fileSetsReadLock = fileSetsReadWriteLock.readLock();
private Lock fileSetsWriteLock = fileSetsReadWriteLock.writeLock();
public boolean preExecute(MavenBuildProxy build, MavenProject pom, MojoInfo mojo, BuildListener listener) throws InterruptedException, IOException {
if (isSurefireTest(mojo)) {
......@@ -169,16 +176,31 @@ public class SurefireArchiver extends MavenReporter {
* @param baseDir
* @return
*/
private synchronized FileSet getFileSet(File baseDir) {
if (fileSets == null) {
fileSets = Collections.synchronizedMap(new HashMap<File, FileSet>());
}
FileSet fs = fileSets.get(baseDir);
private FileSet getFileSet(File baseDir) {
FileSet fs = null;
if (fileSets == null) {
fileSetsWriteLock.lock();
try {
fileSets = new ConcurrentHashMap<File,FileSet>();
} finally {
fileSetsWriteLock.unlock();
}
}
fileSetsReadLock.lock();
try {
fs = fileSets.get(baseDir);
} finally {
fileSetsReadLock.unlock();
}
if (fs == null) {
fs = Util.createFileSet(baseDir, "*.xml","testng-results.xml,testng-failed.xml");
fileSets.put(baseDir, fs);
fileSetsWriteLock.lock();
try {
fileSets.put(baseDir, fs);
} finally {
fileSetsWriteLock.unlock();
}
}
return fs;
......@@ -258,12 +280,11 @@ public class SurefireArchiver extends MavenReporter {
}
}
else if (mojo.is("org.sonatype.flexmojos", "flexmojos-maven-plugin", "test-run")) {
Boolean skipTests = mojo.getConfigurationValue("skipTest", Boolean.class);
if (((skipTests != null) && (skipTests))) {
return false;
}
}
Boolean skipTests = mojo.getConfigurationValue("skipTest", Boolean.class);
if (((skipTests != null) && (skipTests))) {
return false;
}
}
} catch (ComponentConfigurationException e) {
return false;
......
......@@ -20,16 +20,16 @@ package hudson.maven;
*/
import hudson.Launcher;
import hudson.model.BuildListener;
import hudson.model.ParametersDefinitionProperty;
import hudson.model.Result;
import hudson.model.StringParameterDefinition;
import hudson.maven.reporters.SurefireReport;
import hudson.model.*;
import hudson.tasks.Maven.MavenInstallation;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import hudson.tasks.test.TestResult;
import hudson.tasks.test.TestResultProjectAction;
import org.apache.commons.io.FileUtils;
import org.jvnet.hudson.test.Bug;
import org.jvnet.hudson.test.Email;
......@@ -178,6 +178,21 @@ public class Maven3BuildTest extends HudsonTestCase {
assertFalse( content.contains( "${maven.build.timestamp}") );
assertFalse( content.contains( "${maven.build.timestamp}") );
}
@Bug(1557)
public void testDuplicateTestResults() throws Exception {
MavenInstallation mavenInstallation = configureMaven3();
MavenModuleSet m = createMavenProject();
m.setMaven( mavenInstallation.getName() );
m.getReporters().add(new TestReporter());
m.setScm(new ExtractResourceSCM(getClass().getResource("JENKINS-1557.zip")));
m.setGoals("verify");
buildAndAssertSuccess(m);
int totalCount = m.getModules().iterator().next()
.getAction(TestResultProjectAction.class).getLastTestResultAction().getTotalCount();
assertEquals(4, totalCount);
}
private static class TestReporter extends MavenReporter {
@Override
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册