/** * Copyright (c) 2012 Cloudsmith Inc. and other contributors, as listed below. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Cloudsmith * */ package org.cloudsmith.geppetto.junitresult.tests; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.Date; import java.util.HashMap; import java.util.Map; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.TransformerException; import junit.framework.TestCase; import org.cloudsmith.geppetto.common.os.FileUtils; import org.cloudsmith.geppetto.junitresult.JunitResult; import org.cloudsmith.geppetto.junitresult.Testsuite; import org.cloudsmith.geppetto.junitresult.Testsuites; import org.cloudsmith.geppetto.junitresult.util.JunitresultAggregator; import org.cloudsmith.geppetto.junitresult.util.JunitresultDomSerializer; import org.eclipse.core.runtime.Path; /** * Tests the result aggregator. * */ public class TestAggregator extends TestCase { private static Map<String, String> correctTimestamps = new HashMap<String, String>(33); static { correctTimestamps.put("rakeruns", "2012-07-24T22:10:04+0200"); correctTimestamps.put("maven", "2012-07-24T19:04:44+0200"); correctTimestamps.put("xinetd", "2012-07-24T22:10:04+0200"); correctTimestamps.put("orientdb", "2012-07-24T20:14:34+0200"); correctTimestamps.put("puppetdb", "2012-07-24T21:09:24+0200"); correctTimestamps.put("jboss", "2012-07-24T18:47:52+0200"); correctTimestamps.put("postgresql", "2012-07-24T20:33:00+0200"); correctTimestamps.put("puppet", "2012-07-24T20:46:38+0200"); correctTimestamps.put("apache", "2012-07-24T18:23:12+0200"); correctTimestamps.put("libvirt", "2012-07-24T19:04:20+0200"); correctTimestamps.put("postfix", "2012-07-24T20:25:46+0200"); correctTimestamps.put("redis", "2012-07-24T21:15:40+0200"); correctTimestamps.put("puppi", "2012-07-24T21:11:14+0200"); correctTimestamps.put("munin", "2012-07-24T19:14:56+0200"); correctTimestamps.put("haproxy", "2012-07-24T18:41:52+0200"); correctTimestamps.put("nginx", "2012-07-24T19:28:58+0200"); correctTimestamps.put("ntp", "2012-07-24T19:47:34+0200"); correctTimestamps.put("tomcat", "2012-07-24T21:41:58+0200"); correctTimestamps.put("wordpress", "2012-07-24T22:00:16+0200"); correctTimestamps.put("mysql", "2012-07-24T19:22:02+0200"); correctTimestamps.put("openssh", "2012-07-24T20:01:46+0200"); correctTimestamps.put("resolver", "2012-07-24T21:19:38+0200"); correctTimestamps.put("tftp", "2012-07-24T21:31:38+0200"); correctTimestamps.put("puppetdashboard", "2012-07-24T21:00:40+0200"); correctTimestamps.put("splunk", "2012-07-24T21:26:44+0200"); correctTimestamps.put("vsftpd", "2012-07-24T21:50:32+0200"); correctTimestamps.put("foreman", "2012-07-24T18:35:40+0200"); correctTimestamps.put("openvpn", "2012-07-24T20:05:42+0200"); correctTimestamps.put("php", "2012-07-24T20:18:02+0200"); correctTimestamps.put("jenkins", "2012-07-24T18:56:08+0200"); correctTimestamps.put("foo", "2012-07-24T18:27:26+0200"); correctTimestamps.put("nrpe", "2012-07-24T19:38:54+0200"); correctTimestamps.put("openntpd", "2012-07-24T19:54:46+0200"); } private static boolean deleteRecursiveContent(File path, boolean top) { if(!path.exists()) throw new IllegalArgumentException("Can not remove non existing path:" + path.getAbsolutePath()); boolean ret = true; if(path.isDirectory()) { for(File f : path.listFiles()) { ret = ret && deleteRecursiveContent(f, false); } } return ret && (top || path.delete()); } private static String formatDate(Date date) { if(date == null) return null; return String.format("%1$tY-%1$tm-%1$tdT%1$tH:%1$tM:%1$tS%1$tz", date); } public void test_aggregatorSampleTest() throws IOException, TransformerException, ParserConfigurationException { JunitresultAggregator aggregator = new JunitresultAggregator(); File root = TestDataProvider.getTestFile(new Path("testData/allresults/")); JunitResult result = aggregator.aggregate(root, root); assertTrue(result instanceof Testsuites); Testsuites testsuite = (Testsuites) result; assertEquals("allresults", testsuite.getName()); assertEquals(1, testsuite.getErrors()); assertEquals(13, testsuite.getTests()); assertEquals(7, testsuite.getFailures()); JunitresultDomSerializer serializer = new JunitresultDomSerializer(); File outputDir = TestDataProvider.getTestFile(new Path("output/")); File output = new File(outputDir, "sample_result.xml"); if(!output.exists()) output.createNewFile(); serializer.serialize(result, new FileOutputStream(output)); } public void test_aggregatorSmokeTest() throws IOException, TransformerException, ParserConfigurationException { JunitresultAggregator aggregator = new JunitresultAggregator(); File root = null; try { root = TestDataProvider.getTestFile(new Path("testData/test_results")); root.mkdir(); FileUtils.unzip(TestDataProvider.getTestFile(new Path("testData/test_results.zip")), root); JunitResult result = aggregator.aggregate(root, root); assertTrue(result instanceof Testsuites); Testsuites testsuite = (Testsuites) result; assertEquals("test_results", testsuite.getName()); assertEquals(3, testsuite.getErrors()); assertEquals(1360, testsuite.getTests()); assertEquals(28, testsuite.getFailures()); for(Testsuite ts : testsuite.getTestsuites()) { String correctTimestamp = correctTimestamps.get(ts.getName()); if(correctTimestamp != null) assertEquals(formatDate(ts.getTimestamp()), correctTimestamp); } JunitresultDomSerializer serializer = new JunitresultDomSerializer(); File outputDir = TestDataProvider.getTestFile(new Path("output/")); File output = new File(outputDir, "smoke_result.xml"); if(!output.exists()) output.createNewFile(); serializer.serialize(result, new FileOutputStream(output)); } finally { if(root != null) deleteRecursiveContent(root, true); } } }