private void mergeAndUploadTestResult(GoPublisher publisher, List<File> allFiles) { if (allFiles.size() > 0) { File tempFolder = null; try { tempFolder = FileUtil.createTempFolder(); File testResultSource = new File(tempFolder, MERGED_TEST_RESULT_FOLDER); testResultSource.mkdirs(); UnitTestReportGenerator generator = new UnitTestReportGenerator(publisher, testResultSource); generator.generate(allFiles.toArray(new File[allFiles.size()]), "testoutput"); publisher.upload(testResultSource, "testoutput"); } finally { if (tempFolder != null) { FileUtils.deleteQuietly(tempFolder); } } } else { String message = "No files were found in the Test Results folders"; publisher.taggedConsumeLineWithPrefix(GoPublisher.PUBLISH_ERR, message); LOG.warn(message); } }
@Override public boolean execute(BuildCommand command, BuildSession buildSession) { File workingDirectory = buildSession.resolveRelativeDir(command.getWorkingDirectory()); String uploadPath = command.getStringArg("uploadPath"); String[] sources = command.getArrayArg("srcs"); ArrayList<File> allFiles = findMatchedSourceFiles(buildSession, workingDirectory, sources); if (allFiles.size() > 0) { File tempFolder = null; try { tempFolder = FileUtil.createTempFolder(); File testResultSource = new File(tempFolder, "result"); testResultSource.mkdirs(); UnitTestReportGenerator generator = new UnitTestReportGenerator(buildSession.getPublisher(), testResultSource); generator.generate(allFiles.toArray(new File[allFiles.size()]), uploadPath); } finally { if (tempFolder != null) { FileUtils.deleteQuietly(tempFolder); } } } else { String message = "No files were found in the Test Results folders"; buildSession.printlnWithPrefix(message); LOG.warn(message); } return true; }
@Test public void shouldNotGenerateAnyReportIfNoTestResultsWereFound() throws IOException, ArtifactPublishingException { generator.generate(testFolder.listFiles(), "testoutput"); expectZeroedProperties(); }
@Test public void shouldStillUploadResultsIfReportIsIllegalBug2319() throws IOException, ArtifactPublishingException { copyAndClose(source("xml_samples/Coverage.xml"), target("Coverage.xml")); generator.generate(testFolder.listFiles(), "testoutput"); verify(publisher).consumeLine("Ignoring file Coverage.xml - it is not a recognised test file."); verify(publisher).upload(any(File.class), any(String.class)); verify(publisher).setProperty(new Property(TOTAL_TEST_COUNT, "0")); verify(publisher).setProperty(new Property(FAILED_TEST_COUNT, "0")); verify(publisher).setProperty(new Property(IGNORED_TEST_COUNT, "0")); verify(publisher).setProperty(new Property(TEST_TIME, "0.000")); }
@Test public void shouldGenerateReportForNUnit() throws IOException, ArtifactPublishingException { copyAndClose(source("TestResult.xml"), target("test-result.xml")); final Properties properties = generator.generate(testFolder.listFiles(), "testoutput"); assertThat(testFolder.listFiles().length, is(2)); verify(publisher).upload(any(File.class), any(String.class)); verify(publisher).setProperty(new Property(TOTAL_TEST_COUNT, "206")); verify(publisher).setProperty(new Property(FAILED_TEST_COUNT, "0")); verify(publisher).setProperty(new Property(IGNORED_TEST_COUNT, "0")); verify(publisher).setProperty(new Property(TEST_TIME, "NaN")); }
@Test public void shouldGenerateReportForNUnitXmlWithByteOrderMark() throws IOException, ArtifactPublishingException { copyAndClose(source("NunitTestResultWithByteOrderMark.xml"), target("test-result.xml")); generator.generate(testFolder.listFiles(), "testoutput"); assertThat(testFolder.listFiles().length, is(2)); verify(publisher).upload(any(File.class), any(String.class)); verify(publisher).setProperty(new Property(TOTAL_TEST_COUNT, "18")); verify(publisher).setProperty(new Property(FAILED_TEST_COUNT, "0")); verify(publisher).setProperty(new Property(IGNORED_TEST_COUNT, "0")); verify(publisher).setProperty(new Property(TEST_TIME, "1.570")); }
@Test public void shouldNotGenerateAnyReportIfTestReportIsInvalid() throws IOException, ArtifactPublishingException { copyAndClose(source("InvalidTestResult.xml"), target("Invalid.xml")); generator.generate(testFolder.listFiles(), "testoutput"); verify(publisher).consumeLine("Ignoring file Invalid.xml - it is not a recognised test file."); verify(publisher).setProperty(new Property(TOTAL_TEST_COUNT, "0")); verify(publisher).setProperty(new Property(FAILED_TEST_COUNT, "0")); verify(publisher).setProperty(new Property(IGNORED_TEST_COUNT, "0")); verify(publisher).setProperty(new Property(TEST_TIME, "0.000")); verify(publisher).upload(any(File.class), any(String.class)); }
@Test public void shouldNotGenerateAnyReportIfTestResultIsEmpty() throws IOException, ArtifactPublishingException { copyAndClose(source("empty.xml"), target("empty.xml")); generator.generate(testFolder.listFiles(), "testoutput"); verify(publisher).consumeLine("Ignoring file empty.xml - it is not a recognised test file."); verify(publisher).setProperty(new Property(TOTAL_TEST_COUNT, "0")); verify(publisher).setProperty(new Property(FAILED_TEST_COUNT, "0")); verify(publisher).setProperty(new Property(IGNORED_TEST_COUNT, "0")); verify(publisher).setProperty(new Property(TEST_TIME, "0.000")); verify(publisher).upload(any(File.class), any(String.class)); }
@Test public void shouldGenerateReportForJUnitAlso() throws IOException, ArtifactPublishingException { copyAndClose(source("SerializableProjectConfigUtilTest.xml"), target("AgentTest.xml")); generator.generate(testFolder.listFiles(), "testoutput"); verify(publisher).upload(any(File.class), any(String.class)); verify(publisher).setProperty(new Property(TOTAL_TEST_COUNT, "1")); verify(publisher).setProperty(new Property(FAILED_TEST_COUNT, "0")); verify(publisher).setProperty(new Property(IGNORED_TEST_COUNT, "0")); verify(publisher).setProperty(new Property(TEST_TIME, "0.456")); }
@Test public void shouldGenerateReportForXmlFilesRecursivelyInAFolder() throws ArtifactPublishingException, IOException { File reports = new File(testFolder.getAbsoluteFile(), "reports"); reports.mkdir(); File module = new File(reports, "module"); module.mkdir(); copyAndClose(source("xml_samples/Coverage.xml"), target("reports/module/Coverage.xml")); copyAndClose(source("xml_samples/TestResult.xml"), target("reports/TestResult.xml")); generator.generate(testFolder.listFiles(), "testoutput"); verify(publisher).consumeLine("Ignoring file Coverage.xml - it is not a recognised test file."); verify(publisher).upload(any(File.class), any(String.class)); verify(publisher).setProperty(new Property(TOTAL_TEST_COUNT, "204")); verify(publisher).setProperty(new Property(FAILED_TEST_COUNT, "0")); verify(publisher).setProperty(new Property(IGNORED_TEST_COUNT, "6")); verify(publisher).setProperty(new Property(TEST_TIME, "80.231")); }
@Test public void shouldGenerateReportForNUnitGivenMutipleInputFiles() throws IOException, ArtifactPublishingException { copyAndClose(source("TestReport-Integration.xml"), target("test-result1.xml")); copyAndClose(source("TestReport-Unit.xml"), target("test-result2.xml")); generator.generate(testFolder.listFiles(), "testoutput"); verify(publisher).upload(any(File.class), any(String.class)); verify(publisher).setProperty(new Property(TOTAL_TEST_COUNT, "2762")); verify(publisher).setProperty(new Property(FAILED_TEST_COUNT, "0")); verify(publisher).setProperty(new Property(IGNORED_TEST_COUNT, "120")); verify(publisher).setProperty(new Property(TEST_TIME, "221.766")); }
@Test public void shouldGenerateReportForJUnitWithMultipleFiles() throws IOException, ArtifactPublishingException { copyAndClose(source("UnitTestReportGeneratorTest.xml"), target("UnitTestReportGeneratorTest.xml")); copyAndClose(source("SerializableProjectConfigUtilTest.xml"), target("SerializableProjectConfigUtilTest.xml")); generator.generate(testFolder.listFiles(), "testoutput"); verify(publisher).upload(any(File.class), any(String.class)); verify(publisher).setProperty(new Property(TOTAL_TEST_COUNT, "5")); verify(publisher).setProperty(new Property(FAILED_TEST_COUNT, "3")); verify(publisher).setProperty(new Property(IGNORED_TEST_COUNT, "0")); verify(publisher).setProperty(new Property(TEST_TIME, "1.286")); }