提交 0512d517 编写于 作者: C Christoph Kutzinski

SurefireArchiver was supposed to be thread-safe, but, as the unit tests has shown, it wasn't.

上级 54d568d2
......@@ -47,11 +47,8 @@ import java.util.Collection;
import java.util.Collections;
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 java.util.concurrent.ConcurrentMap;
import org.apache.commons.lang.StringUtils;
import org.apache.maven.artifact.versioning.ComparableVersion;
......@@ -75,11 +72,7 @@ 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 = 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();
private transient ConcurrentMap<File, FileSet> fileSets = new ConcurrentHashMap<File,FileSet>();
public boolean preExecute(MavenBuildProxy build, MavenProject pom, MojoInfo mojo, BuildListener listener) throws InterruptedException, IOException {
if (isSurefireTest(mojo)) {
......@@ -132,7 +125,11 @@ public class SurefireArchiver extends MavenReporter {
// surefire:test just skips itself when the current project is not a java project
FileSet fileSet = getFileSet(reportsDir);
DirectoryScanner ds = fileSet.getDirectoryScanner();
DirectoryScanner ds;
synchronized (fileSet) {
ds = fileSet.getDirectoryScanner();
}
if(ds.getIncludedFilesCount()==0)
// no test in this module
......@@ -144,20 +141,23 @@ public class SurefireArchiver extends MavenReporter {
if(result==null) result = new TestResult();
result.parse(System.currentTimeMillis() - build.getMilliSecsSinceBuildStart(), reportsDir, reportFiles);
int failCount = build.execute(new BuildCallable<Integer, IOException>() {
public Integer call(MavenBuild build) throws IOException, InterruptedException {
SurefireReport sr = build.getAction(SurefireReport.class);
if(sr==null)
build.getActions().add(new SurefireReport(build, result, listener));
else
sr.setResult(result,listener);
if(result.getFailCount()>0)
build.setResult(Result.UNSTABLE);
build.registerAsProjectAction(new FactoryImpl());
return result.getFailCount();
}
});
int failCount;
synchronized (build) {
failCount = build.execute(new BuildCallable<Integer, IOException>() {
public Integer call(MavenBuild build) throws IOException, InterruptedException {
SurefireReport sr = build.getAction(SurefireReport.class);
if(sr==null)
build.getActions().add(new SurefireReport(build, result, listener));
else
sr.setResult(result,listener);
if(result.getFailCount()>0)
build.setResult(Result.UNSTABLE);
build.registerAsProjectAction(new FactoryImpl());
return result.getFailCount();
}
});
}
// if surefire plugin is going to kill maven because of a test failure,
// intercept that (or otherwise build will be marked as failure)
if(failCount>0 && error instanceof MojoFailureException) {
......@@ -177,31 +177,14 @@ public class SurefireArchiver extends MavenReporter {
* @param baseDir
* @return
*/
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();
}
FileSet getFileSet(File baseDir) {
FileSet fs = fileSets.get(baseDir);
if (fs == null) {
fs = Util.createFileSet(baseDir, "*.xml","testng-results.xml,testng-failed.xml");
fileSetsWriteLock.lock();
try {
fileSets.put(baseDir, fs);
} finally {
fileSetsWriteLock.unlock();
}
FileSet previous = fileSets.putIfAbsent(baseDir, fs);
if (previous != null) {
return previous;
}
}
return fs;
......@@ -214,7 +197,7 @@ public class SurefireArchiver extends MavenReporter {
FileSet fileSet = getFileSet(baseDir);
for (String file : reportFiles) {
fileSet.setExcludes(file);
fileSet.createExclude().setName(file);
}
}
......@@ -313,7 +296,14 @@ public class SurefireArchiver extends MavenReporter {
return false;
}
return new ComparableVersion (mavenVersion).compareTo( new ComparableVersion ("3.0") ) >= 0;
}
}
// I'm not sure if SurefireArchiver is actually ever (de-)serialized,
// but just to be sure, set fileSets here
protected Object readResolve() {
fileSets = new ConcurrentHashMap<File,FileSet>();
return this;
}
@Extension
public static final class DescriptorImpl extends MavenReporterDescriptor {
......
package hudson.maven.reporters;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import hudson.FilePath;
import hudson.console.ConsoleNote;
import hudson.maven.ExecutedMojo;
import hudson.maven.MavenBuild;
import hudson.maven.MavenBuildInformation;
import hudson.maven.MavenBuildProxy;
import hudson.maven.MavenProjectActionBuilder;
import hudson.maven.MavenReporter;
import hudson.maven.MojoInfo;
import hudson.model.BuildListener;
import hudson.model.Cause;
import hudson.model.Result;
import hudson.tasks.junit.TestResult;
import java.io.File;
import java.io.IOException;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Calendar;
import java.util.List;
import org.apache.commons.io.output.NullOutputStream;
import org.apache.maven.plugin.MojoExecution;
import org.apache.maven.plugin.descriptor.MojoDescriptor;
import org.apache.maven.plugin.descriptor.PluginDescriptor;
import org.apache.tools.ant.types.FileSet;
import org.codehaus.plexus.component.configurator.ComponentConfigurationException;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Matchers;
public class SurefireArchiverUnitTest {
private SurefireArchiver archiver;
private MavenBuild build;
private TestBuildProxy buildProxy;
private MojoInfo mojoInfo;
@Before
@SuppressWarnings("unchecked")
public void before() throws ComponentConfigurationException, URISyntaxException {
//suppress(constructor(MavenBuild.class, new Class[0]));
this.archiver = new SurefireArchiver();
this.build = mock(MavenBuild.class);
when(build.getAction(Matchers.any(Class.class))).thenCallRealMethod();
when(build.getActions()).thenCallRealMethod();
when(build.getRootDir()).thenReturn(new File("target"));
this.buildProxy = new TestBuildProxy(build);
MojoInfo spy = createMojoInfo();
this.mojoInfo = spy;
}
private MojoInfo createMojoInfo() throws ComponentConfigurationException {
PluginDescriptor pluginDescriptor = new PluginDescriptor();
pluginDescriptor.setGroupId("org.apache.maven.plugins");
pluginDescriptor.setArtifactId("maven-surefire-plugin");
pluginDescriptor.setVersion("2.9");
MojoDescriptor mojoDescriptor = new MojoDescriptor();
mojoDescriptor.setPluginDescriptor(pluginDescriptor);
mojoDescriptor.setGoal("test");
MojoExecution mojoExecution = new MojoExecution(mojoDescriptor);
MojoInfo info = new MojoInfo(mojoExecution, null, null, null);
MojoInfo spy = spy(info);
doReturn(Boolean.FALSE).when(spy).getConfigurationValue(Matchers.anyString(), Matchers.eq(Boolean.class));
return spy;
}
@Test
public void testNotArchivingEmptyResults() throws InterruptedException, IOException, URISyntaxException, ComponentConfigurationException {
URL resource = SurefireArchiverUnitTest.class.getResource("/surefire-archiver-test1");
File reportsDir = new File(resource.toURI().getPath());
doReturn(reportsDir).when(this.mojoInfo).getConfigurationValue("reportsDirectory", File.class);
System.out.println("Using reports directory: " + reportsDir.getAbsolutePath());
this.archiver.postExecute(buildProxy, null, this.mojoInfo, new NullBuildListener(), null);
SurefireReport action = this.build.getAction(SurefireReport.class);
Assert.assertNull(action);
}
@Test
public void testArchiveResults() throws InterruptedException, IOException, URISyntaxException, ComponentConfigurationException {
URL resource = SurefireArchiverUnitTest.class.getResource("/surefire-archiver-test2");
File reportsDir = new File(resource.toURI().getPath());
doReturn(reportsDir).when(this.mojoInfo).getConfigurationValue("reportsDirectory", File.class);
System.out.println("Using reports directory: " + reportsDir.getAbsolutePath());
touchReportFiles(reportsDir);
this.archiver.postExecute(buildProxy, null, this.mojoInfo, new NullBuildListener(), null);
SurefireReport action = this.build.getAction(SurefireReport.class);
Assert.assertNotNull(action);
TestResult result = action.getResult();
Assert.assertNotNull(result);
Assert.assertEquals(2658, result.getTotalCount());
resource = SurefireArchiverUnitTest.class.getResource("/surefire-archiver-test3");
reportsDir = new File(resource.toURI().getPath());
doReturn(reportsDir).when(this.mojoInfo).getConfigurationValue("reportsDirectory", File.class);
System.out.println("Using reports directory: " + reportsDir.getAbsolutePath());
touchReportFiles(reportsDir);
this.archiver.postExecute(buildProxy, null, this.mojoInfo, new NullBuildListener(), null);
action = this.build.getAction(SurefireReport.class);
Assert.assertNotNull(action);
result = action.getResult();
Assert.assertNotNull(result);
Assert.assertEquals(2670, result.getTotalCount());
}
@Test
public void testAlreadyCheckedFilesAreNotParsedAgain() throws InterruptedException, IOException, URISyntaxException, ComponentConfigurationException {
URL resource = SurefireArchiverUnitTest.class.getResource("/surefire-archiver-test2");
File reportsDir = new File(resource.toURI().getPath());
doReturn(reportsDir).when(this.mojoInfo).getConfigurationValue("reportsDirectory", File.class);
System.out.println("Using reports directory: " + reportsDir.getAbsolutePath());
touchReportFiles(reportsDir);
FileSet fileSet = this.archiver.getFileSet(reportsDir);
Assert.assertEquals(2, fileSet.getDirectoryScanner().getIncludedFilesCount());
this.archiver.postExecute(buildProxy, null, this.mojoInfo, new NullBuildListener(), null);
fileSet = this.archiver.getFileSet(reportsDir);
Assert.assertEquals(0, fileSet.getDirectoryScanner().getIncludedFilesCount());
}
@Test
public void testMultiThreaded() throws InterruptedException, IOException, URISyntaxException, ComponentConfigurationException {
File reportsDir2 = new File(SurefireArchiverUnitTest.class.getResource("/surefire-archiver-test2").toURI().getPath());
doReturn(reportsDir2).when(this.mojoInfo).getConfigurationValue("reportsDirectory", File.class);
touchReportFiles(reportsDir2);
final MojoInfo mojoInfo2 = createMojoInfo();
doReturn(reportsDir2).when(mojoInfo2).getConfigurationValue("reportsDirectory", File.class);
int count = 20;
ArchiverThread t1 = new ArchiverThread(this.mojoInfo, count);
ArchiverThread t2 = new ArchiverThread(mojoInfo2, count);
t1.start();
t2.start();
t1.join();
t2.join();
if (t1.exception != null) {
t1.exception.printStackTrace(System.out);
Assert.fail(t1.exception.toString());
}
if (t2.exception != null) {
t2.exception.printStackTrace(System.out);
Assert.fail(t2.exception.toString());
}
SurefireReport action = this.build.getAction(SurefireReport.class);
Assert.assertNotNull(action);
TestResult result = action.getResult();
Assert.assertNotNull(result);
Assert.assertEquals(2658, result.getTotalCount());
}
private class ArchiverThread extends Thread {
private MojoInfo info;
private Throwable exception;
private int count;
public ArchiverThread(MojoInfo info, int count) {
this.info = info;
this.count = count;
}
public void run() {
try {
for (int i=0; i < count; i++) {
archiver.postExecute(buildProxy, null, this.info, new NullBuildListener(), null);
}
} catch (Throwable e) {
this.exception = e;
}
}
}
private void touchReportFiles(File reportsDir) {
File[] files = reportsDir.listFiles();
for(File f : files) {
f.setLastModified(System.currentTimeMillis());
}
}
private static class TestBuildProxy implements MavenBuildProxy {
private final MavenBuild build;
public TestBuildProxy(MavenBuild build) {
this.build = build;
}
@Override
public <V, T extends Throwable> V execute(BuildCallable<V, T> program)
throws T, IOException, InterruptedException {
return program.call(build);
}
@Override
public void executeAsync(BuildCallable<?, ?> program)
throws IOException {
try {
program.call(this.build);
} catch(Throwable e) {
throw new IOException(e);
}
}
@Override
public FilePath getRootDir() {
return null;
}
@Override
public FilePath getProjectRootDir() {
return null;
}
@Override
public FilePath getModuleSetRootDir() {
return null;
}
@Override
public FilePath getArtifactsDir() {
return null;
}
@Override
public void setResult(Result result) {
}
@Override
public Calendar getTimestamp() {
return null;
}
@Override
public long getMilliSecsSinceBuildStart() {
return 0;
}
@Override
public boolean isArchivingDisabled() {
return false;
}
@Override
public void registerAsProjectAction(MavenReporter reporter) {
}
@Override
public void registerAsProjectAction(MavenProjectActionBuilder builder) {
}
@Override
public void registerAsAggregatedProjectAction(MavenReporter reporter) {
}
@Override
public void setExecutedMojos(List<ExecutedMojo> executedMojos) {
}
@Override
public MavenBuildInformation getMavenBuildInformation() {
return null;
}
}
private static class NullBuildListener implements BuildListener {
private static final long serialVersionUID = 1L;
@Override
public PrintStream getLogger() {
return new PrintStream(new NullOutputStream());
}
@SuppressWarnings("rawtypes")
@Override
public void annotate(ConsoleNote ann) throws IOException {
}
@Override
public void hyperlink(String url, String text) throws IOException {
}
@Override
public PrintWriter error(String msg) {
return null;
}
@Override
public PrintWriter error(String format, Object... args) {
return null;
}
@Override
public PrintWriter fatalError(String msg) {
return null;
}
@Override
public PrintWriter fatalError(String format, Object... args) {
return null;
}
@Override
public void started(List<Cause> causes) {
}
@Override
public void finished(Result result) {
}
}
}
SurefirArchiver must ignore this file
\ No newline at end of file
SurefirArchiver must ignore this file
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<!--
The MIT License
Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Erik Ramfelt
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
-->
<testsuites>
<testsuite errors="0" failures="0" hostname="archbuild" id="0"
name="StudioAllTests" package="test.infor.clearux.studio.integration"
tests="456" time="107.824" timestamp="2008-01-23T10:49:26">
<testcase classname="test.foo.bar.DefaultIntegrationTest" name="experimentsWithJavaElements" time="0.0" />
<testcase classname="test.foo.bar.BundleResolverIntegrationTest" name="testGetBundle" time="0.0" />
<testcase classname="test.foo.bar.BundleResolverIntegrationTest" name="testGetBundleLocation" time="0.656" />
<testcase classname="test.foo.bar.ProjectSettingsTest" name="testNatureAddition" time="0.125" />
<testcase classname="test.foo.bar.ProjectSettingsTest" name="testNatureRemoval" time="0.11" />
</testsuite>
</testsuites>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<!--
The MIT License
Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Erik Ramfelt
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
-->
<testsuites>
<testsuite name="WLI-FI-Tests-Fake" tests="6" failures="0" errors="0" time="1426" package="IT-Interface-WLI-FI" id="1">
<properties>
<property name="java.runtime.name" value="Java(TM) SE Runtime Environment"/>
<property name="sun.boot.library.path" value="C:\Program Files\Java\jdk1.6.0_02\jre\bin"/>
<property name="java.vm.version" value="1.6.0_02-b06"/>
<property name="java.vm.vendor" value="Sun Microsystems Inc."/>
<property name="java.vendor.url" value="http://java.sun.com/"/>
<property name="path.separator" value=";"/>
<property name="java.vm.name" value="Java HotSpot(TM) Client VM"/>
<property name="file.encoding.pkg" value="sun.io"/>
<property name="sun.java.launcher" value="SUN_STANDARD"/>
<property name="user.country" value="NO"/>
<property name="sun.os.patch.level" value="Service Pack 2"/>
<property name="java.vm.specification.name" value="Java Virtual Machine Specification"/>
<property name="user.dir" value="C:\CI\hudson\jobs\Interface_WLI-FI-Fake\workspace"/>
<property name="java.runtime.version" value="1.6.0_02-b06"/>
<property name="java.awt.graphicsenv" value="sun.awt.Win32GraphicsEnvironment"/>
<property name="java.endorsed.dirs" value="C:\Program Files\Java\jdk1.6.0_02\jre\lib\endorsed"/>
<property name="os.arch" value="x86"/>
<property name="java.io.tmpdir" value="C:\Documents and Settings\e5274\Local Settings\Temp\"/>
<property name="line.separator" value="
"/>
<property name="java.vm.specification.vendor" value="Sun Microsystems Inc."/>
<property name="user.variant" value=""/>
<property name="os.name" value="Windows XP"/>
<property name="sun.jnu.encoding" value="Cp1252"/>
<property name="java.library.path" value="C:\Program Files\Java\jdk1.6.0_02\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\Java\jdk1.6.0_02\bin;C:\PROGRA~1\COMPUW~1\FILE-A~1\Dme;C:\PROGRA~1\COMPUW~1\FILE-A~1;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\oracle\ora92\jre\1.4.2\bin\client\;C:\oracle\ora92\jre\1.4.2\bin;c:\oracle\ora92\bin;C:\Program Files\Oracle\jre\1.1.8\bin;C:\Program Files\IBM\Personal Communications\;C:\Program Files\IBM\Trace Facility\;C:\Groovy\groovy-1.1-RC1\bin;C:\Program Files\Subversion\bin;C:\Program Files\GnuWin32\bin;C:\Program Files\putty;C:\Program Files\Common Files\Compuware"/>
<property name="java.specification.name" value="Java Platform API Specification"/>
<property name="java.class.version" value="50.0"/>
<property name="sun.management.compiler" value="HotSpot Client Compiler"/>
<property name="os.version" value="5.1"/>
<property name="user.home" value="C:\Documents and Settings\e5274"/>
<property name="user.timezone" value="Europe/Berlin"/>
<property name="java.awt.printerjob" value="sun.awt.windows.WPrinterJob"/>
<property name="file.encoding" value="Cp1252"/>
<property name="java.specification.version" value="1.6"/>
<property name="java.class.path" value="C:\eviware\soapUI-Pro-1.7.6\bin\soapui-pro-1.7.6.jar;C:\eviware\soapUI-Pro-1.7.6\lib\activation-1.1.jar;C:\eviware\soapUI-Pro-1.7.6\lib\javamail-1.4.jar;C:\eviware\soapUI-Pro-1.7.6\lib\wsdl4j-1.6.2-fixed.jar;C:\eviware\soapUI-Pro-1.7.6\lib\junit-3.8.1.jar;C:\eviware\soapUI-Pro-1.7.6\lib\log4j-1.2.14.jar;C:\eviware\soapUI-Pro-1.7.6\lib\looks-2.1.2.jar;C:\eviware\soapUI-Pro-1.7.6\lib\forms-1.0.7.jar;C:\eviware\soapUI-Pro-1.7.6\lib\jcalendar-1.3.2.jar;C:\eviware\soapUI-Pro-1.7.6\lib\commons-logging-1.1.jar;C:\eviware\soapUI-Pro-1.7.6\lib\not-yet-commons-ssl-0.3.8.jar;C:\eviware\soapUI-Pro-1.7.6\lib\commons-cli-1.0.jar;C:\eviware\soapUI-Pro-1.7.6\lib\commons-beanutils-1.7.0.jar;C:\eviware\soapUI-Pro-1.7.6\lib\commons-httpclient-3.0.1-soapui.jar;C:\eviware\soapUI-Pro-1.7.6\lib\swingx-SNAPSHOT.jar;C:\eviware\soapUI-Pro-1.7.6\lib\l2fprod-common-fontchooser-0.2-dev.jar;C:\eviware\soapUI-Pro-1.7.6\lib\commons-codec-1.3.jar;C:\eviware\soapUI-Pro-1.7.6\lib\groovy-all-1.0.jar;C:\eviware\soapUI-Pro-1.7.6\lib\jetty-6.1.5.jar;C:\eviware\soapUI-Pro-1.7.6\lib\jetty-util-6.1.5.jar;C:\eviware\soapUI-Pro-1.7.6\lib\servlet-api-2.5-6.1.5.jar;C:\eviware\soapUI-Pro-1.7.6\lib\jxl-2.6.5.jar;C:\eviware\soapUI-Pro-1.7.6\lib\idw-1.5.0.jar;C:\eviware\soapUI-Pro-1.7.6\lib\ant-1.6.1.jar;C:\eviware\soapUI-Pro-1.7.6\lib\xbean-2.3.0.jar;C:\eviware\soapUI-Pro-1.7.6\lib\xbean_xpath-2.3.0.jar;C:\eviware\soapUI-Pro-1.7.6\lib\xmlpublic-2.3.0.jar;C:\eviware\soapUI-Pro-1.7.6\lib\jsr173_1.0_api-xmlbeans-2.3.0.jar;C:\eviware\soapUI-Pro-1.7.6\lib\soapui-xmlbeans-1.7.6.jar;C:\eviware\soapUI-Pro-1.7.6\lib\license4j-1.3.jar;C:\eviware\soapUI-Pro-1.7.6\lib\soapui-1.7.6.jar;C:\eviware\soapUI-Pro-1.7.6\lib\soap-xmlbeans-1.2.jar;C:\eviware\soapUI-Pro-1.7.6\lib\j2ee-xmlbeans-1.4.jar;C:\eviware\soapUI-Pro-1.7.6\lib\ext-xmlbeans-1.0.jar;C:\eviware\soapUI-Pro-1.7.6\lib\saxon-8.8.jar;C:\eviware\soapUI-Pro-1.7.6\lib\saxon-dom-8.8.jar;C:\eviware\soapUI-Pro-1.7.6\lib\xmlunit-1.1.jar;C:\eviware\soapUI-Pro-1.7.6\lib\xmlsec-1.2.1.jar;C:\eviware\soapUI-Pro-1.7.6\lib\xalan-2.6.0.jar;C:\eviware\soapUI-Pro-1.7.6\lib\dtd-xercesImpl-2.9.1.jar;C:\eviware\soapUI-Pro-1.7.6\lib\wss4j-1.5.0.jar;C:\eviware\soapUI-Pro-1.7.6\lib\bcprov-jdk15-133.jar"/>
<property name="user.name" value="e5274"/>
<property name="java.vm.specification.version" value="1.0"/>
<property name="java.home" value="C:\Program Files\Java\jdk1.6.0_02\jre"/>
<property name="sun.arch.data.model" value="32"/>
<property name="user.language" value="no"/>
<property name="java.specification.vendor" value="Sun Microsystems Inc."/>
<property name="awt.toolkit" value="sun.awt.windows.WToolkit"/>
<property name="java.vm.info" value="mixed mode"/>
<property name="java.version" value="1.6.0_02"/>
<property name="java.ext.dirs" value="C:\Program Files\Java\jdk1.6.0_02\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext"/>
<property name="sun.boot.class.path" value="C:\Program Files\Java\jdk1.6.0_02\jre\lib\resources.jar;C:\Program Files\Java\jdk1.6.0_02\jre\lib\rt.jar;C:\Program Files\Java\jdk1.6.0_02\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.6.0_02\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.6.0_02\jre\lib\jce.jar;C:\Program Files\Java\jdk1.6.0_02\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.6.0_02\jre\classes"/>
<property name="java.vendor" value="Sun Microsystems Inc."/>
<property name="file.separator" value="\"/>
<property name="java.vendor.url.bug" value="http://java.sun.com/cgi-bin/bugreport.cgi"/>
<property name="sun.io.unicode.encoding" value="UnicodeLittle"/>
<property name="sun.cpu.endian" value="little"/>
<property name="sun.desktop" value="windows"/>
<property name="sun.cpu.isalist" value=""/>
</properties>
<testcase name="IF_importTradeConfirmationToDwh" time="198.0"/>
<testcase name="IF_getAmartaDisbursements" time="119.0"/>
<testcase name="IF_importGLReconDataToDwh" time="423.0"/>
<testcase name="IF_importTradeInstructionsToDwh" time="278.0"/>
<testcase name="IF_getDeviationTradeInstructions" time="408.0"/>
<testcase name="IF_getDwhGLData" time="0.0"/>
</testsuite>
</testsuites>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<!--
The MIT License
Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Xavier Le Vourch
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
-->
<testsuites>
<testsuite errors="0" failures="0" hostname="molene" id="0" name="DummyTest" package="" tests="1" time="4.158" timestamp="2009-01-16T22:57:13">
<testcase classname="DummyTest" name="testDummyMethod" time="3.521" />
</testsuite>
</testsuites>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<testsuite errors="1" failures="0" hostname="whatever" name="gda.device.detector.XHDetectorTest" tests="1" time="0.0" timestamp="2011-07-22T13:12:19">
<properties>
<property name="sun.arch.data.model" value="32" />
Etc etc
</properties>
<error message="gda/device/detector/DAServer" type="java.lang.NoClassDefFoundError">java.lang.NoClassDefFoundError: gda/device/detector/DAServer
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
Caused by: java.lang.ClassNotFoundException: gda.device.detector.DAServer
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
</error>
<system-out><![CDATA[]]></system-out>
<system-err><![CDATA[]]></system-err>
</testsuite>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<!--
The MIT License
Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
-->
<testsuite errors="1" failures="0" hostname="whocares" name="vodafone.nip.services.types.TestStringMapType" tests="2" time="0.016" timestamp="2008-07-03T15:42:30">
<testcase classname="some.package.somewhere.WhooHoo" name="testHudsonReporting" time="0.016">
<error message="this normally has the string like, expected mullet, but got bream" type="org.junit.ComparisonFailure"> at some.package.somewhere.WhooHoo.testHudsonReporting(WhooHoo.java:48)
</error>
</testcase>
<system-out><![CDATA[]]></system-out>
<system-err><![CDATA[]]></system-err>
</testsuite>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<testsuites name="Automated Tests" tests="186" errors="0" failures="0" ignored="0">
<testsuite name="test.AutomatedTests" time="4.486">
<testsuite name="test.fs.FileSystemTest" time="0.014">
<testcase name="testPrefix" classname="test.fs.FileSystemTest" time="0.003"/>
</testsuite>
<testsuite name="test.db.DatabaseTest" time="0.014">
<testsuite errors="1" failures="0" hostname="whatever" name="test.3rdlevel" tests="1" time="0.0" timestamp="2011-07-22T13:12:19">
<error message="bla bla" type="java.lang.IllegalStateException">java.lang.IllegalStateException: bla bla
at test.Test(Test:35)
</error>
</testsuite>
<testcase name="testTable" classname="test.db.DatabaseTest" time="0.003"/>
</testsuite>
</testsuite>
</testsuites>
\ No newline at end of file
<?xml version='1.0' encoding='UTF-8'?>
<result>
<suites>
<suite>
<file>./TEST-TestSuite.xml</file>
<name>TestSuite</name>
<duration>0.128</duration>
<cases>
<case>
<duration>0.128</duration>
<className>service.EchoServletIT</className>
<testName>sayHello</testName>
<skipped>true</skipped>
<failedSince>0</failedSince>
</case>
</cases>
</suite>
<suite>
<file>./failsafe-summary.xml</file>
<name>(failsafe-summary.xml)</name>
<duration>0.0</duration>
<cases/>
</suite>
<suite>
<file>./testng-results.xml</file>
<name>(testng-results.xml)</name>
<duration>0.0</duration>
<cases/>
</suite>
<suite>
<file>./TEST-TestSuite.xml</file>
<name>TestSuite</name>
<duration>0.293</duration>
<cases>
<case>
<duration>0.293</duration>
<className>service.EchoServletTest</className>
<testName>sayHello</testName>
<skipped>false</skipped>
<failedSince>0</failedSince>
</case>
</cases>
</suite>
<suite>
<file>./testng-results.xml</file>
<name>(testng-results.xml)</name>
<duration>0.0</duration>
<cases/>
</suite>
<suite>
<file>./TEST-TestSuite.xml</file>
<name>broken</name>
<duration>0.155</duration>
<cases>
<case>
<duration>0.0020</duration>
<className>breakable.misc.StupidTest</className>
<testName>doSomething</testName>
<skipped>false</skipped>
<failedSince>0</failedSince>
</case>
<case>
<duration>0.0</duration>
<className>breakable.misc.StupidTest</className>
<testName>jumparound</testName>
<skipped>false</skipped>
<failedSince>0</failedSince>
</case>
<case>
<duration>0.0</duration>
<className>breakable.misc.UglyTest</className>
<testName>jumpAroundYouUglyPerson</testName>
<skipped>false</skipped>
<failedSince>0</failedSince>
</case>
<case>
<duration>0.0</duration>
<className>breakable.misc.UglyTest</className>
<testName>doSomethingUgly</testName>
<skipped>false</skipped>
<failedSince>0</failedSince>
</case>
<case>
<duration>0.0010</duration>
<className>breakable.misc.UglyTest</className>
<testName>becomeUglier</testName>
<skipped>false</skipped>
<errorStackTrace>java.lang.AssertionError: Yeah, ugly and broken.
at org.testng.Assert.fail(Assert.java:84)
at breakable.misc.UglyTest.becomeUglier(UglyTest.java:25)
</errorStackTrace>
<errorDetails>Yeah, ugly and broken.</errorDetails>
<failedSince>5</failedSince>
</case>
<case>
<duration>0.15</duration>
<className>breakable.service.EchoServletTest</className>
<testName>sayHello</testName>
<skipped>false</skipped>
<failedSince>0</failedSince>
</case>
<case>
<duration>0.0020</duration>
<className>service.EchoServletTest</className>
<testName>sayHello</testName>
<skipped>false</skipped>
<failedSince>0</failedSince>
</case>
</cases>
</suite>
</suites>
<duration>0.576</duration>
</result>
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册