From: <jbo...@li...> - 2005-09-25 14:53:37
|
Author: aron.gombas Date: 2005-09-25 10:53:11 -0400 (Sun, 25 Sep 2005) New Revision: 1206 Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/model/CcProject.java trunk/labs/kosmos/src/java/hu/midori/kosmos/model/CcTestResult.java trunk/labs/kosmos/src/java/hu/midori/kosmos/model/ModelUtils.java trunk/labs/kosmos/src/java/hu/midori/kosmos/server/cc/CcServiceImpl.java trunk/labs/kosmos/src/java/hu/midori/kosmos/server/jira/JiraServiceImpl.java trunk/labs/kosmos/src/java/hu/midori/kosmos/server/util/ScrapingUtils.java trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/cc/ccmonitoringportlet.properties trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/cc/ccmonitoringportlet_hu.properties trunk/labs/kosmos/web-portlet/pages/cc_monitoring.jsp trunk/labs/kosmos/web-portlet/pages/cc_monitoring_test_details.jsp Log: Testcase parsing 99% done Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/model/CcProject.java =================================================================== --- trunk/labs/kosmos/src/java/hu/midori/kosmos/model/CcProject.java 2005-09-25 14:52:36 UTC (rev 1205) +++ trunk/labs/kosmos/src/java/hu/midori/kosmos/model/CcProject.java 2005-09-25 14:53:11 UTC (rev 1206) @@ -37,7 +37,7 @@ /** Number of unit test case errors. */ private int errors; /** All testcases run during this build. */ - private List<CcTest> testcases;// TODO better name? + private List<CcTest> testCases; /** URL of the tests-per-category chart image. */ private String testsPerCategoryChartUrl; @@ -52,7 +52,7 @@ public CcProject(String name, String buildLabel, int status, Date timestamp, int modifications, String buildTime, - int tests, int errors, int failures, List<CcTest> testcases, + int tests, int errors, int failures, List<CcTest> testCases, String testsPerCategoryChartUrl) { super(name + buildLabel + timestamp.getTime()); @@ -67,7 +67,7 @@ this.tests = tests; this.errors = errors; this.failures = failures; - this.testcases = testcases; + this.testCases = testCases; this.testsPerCategoryChartUrl = testsPerCategoryChartUrl; } @@ -112,8 +112,8 @@ return errors; } - public List<CcTest> getTestcases() { - return testcases; + public List<CcTest> getTestCases() { + return testCases; } public String getTestsPerCategoryChartUrl() { Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/model/CcTestResult.java =================================================================== --- trunk/labs/kosmos/src/java/hu/midori/kosmos/model/CcTestResult.java 2005-09-25 14:52:36 UTC (rev 1205) +++ trunk/labs/kosmos/src/java/hu/midori/kosmos/model/CcTestResult.java 2005-09-25 14:53:11 UTC (rev 1206) @@ -15,6 +15,10 @@ * @version $Id$ */ public class CcTestResult { + /** This class should never be instantiated. */ + protected CcTestResult() { + } + public static final int UNKNOWN = 0; public static final int SUCCEEDED = 1; public static final int FAILED = -1; Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/model/ModelUtils.java =================================================================== --- trunk/labs/kosmos/src/java/hu/midori/kosmos/model/ModelUtils.java 2005-09-25 14:52:36 UTC (rev 1205) +++ trunk/labs/kosmos/src/java/hu/midori/kosmos/model/ModelUtils.java 2005-09-25 14:53:11 UTC (rev 1206) @@ -14,7 +14,8 @@ */ public class ModelUtils { /** This class should never be instantiated. */ - protected ModelUtils() { } + protected ModelUtils() { + } /** Millis in one day. */ public final static long MILLIS_PER_DAY = 24*60*60*1000; Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/server/cc/CcServiceImpl.java =================================================================== --- trunk/labs/kosmos/src/java/hu/midori/kosmos/server/cc/CcServiceImpl.java 2005-09-25 14:52:36 UTC (rev 1205) +++ trunk/labs/kosmos/src/java/hu/midori/kosmos/server/cc/CcServiceImpl.java 2005-09-25 14:53:11 UTC (rev 1206) @@ -30,7 +30,6 @@ import java.util.Map; import java.util.StringTokenizer; -import net.sf.saxon.expr.Tokenizer; import net.sf.saxon.om.NodeInfo; import org.apache.commons.logging.Log; @@ -98,7 +97,7 @@ File latestLog = findLatestLog(dir); Document dom = ScrapingUtils.downloadDom(latestLog.toURL()); - // TODO is it possible to have more than one CC project in the same log? I think I saw such a logfile somewhere + // scape "global" properties String name = ScrapingUtils.runXQueryString(dom, "<dummy> { data(//property[@name='projectname']/@value) } </dummy>"); String buildLabel = ScrapingUtils.runXQueryString(dom, "<dummy> { data(//property[@name='label']/@value) } </dummy>"); int status = (ScrapingUtils.runXQueryString(dom, "<dummy> { data(//build/@error) } </dummy>").length() == 0) ? CcBuildStatus.SUCCEEDED : CcBuildStatus.FAILED; @@ -109,40 +108,36 @@ int errors = ScrapingUtils.runXQueryInt(dom, "<dummy> { data(count(//testcase/error)) } </dummy>"); int failures = ScrapingUtils.runXQueryInt(dom, "<dummy> { data(count(//testcase/failure)) } </dummy>"); -// TODO process testcases here -// TODO nevezektant rendberak -List<CcTest> testCases = new ArrayList(); -String query = - "for " + - "$d in //testcase " + - "return " + - "<dummy>" + - "{ data($d/@classname) }|" + - "{ data($d/@name) }|" + - "{ count($d/failure) }|" + - "{ count($d/error) }" + - "</dummy>"; - -List result = ScrapingUtils.runXQuery(dom, query); -for(Iterator it = result.iterator(); it.hasNext();) { - String value = ((NodeInfo)it.next()).getStringValue(); -if(value.charAt(0) == '|') - value = " " + value;// TODO kiemel es '-'-re cserel? JIRA-bol uezt hasznalni -System.out.println("value: " + value); - - StringTokenizer tokenizer = new StringTokenizer(value, "|"); - String className = tokenizer.nextToken(); - String testCaseName = tokenizer.nextToken(); - int result_ = CcTestResult.SUCCEEDED;//!!! - if(!tokenizer.nextToken().equals("0")) - result_ = CcTestResult.FAILED; - else if(!tokenizer.nextToken().equals("0")) - result_ = CcTestResult.ERROR; - - System.out.println(" ===> className: '" + className + "', testCaseName: '" + testCaseName + "', result: " + result_); - testCases.add(new CcTest(result_, className, testCaseName)); -} -// === + // scrape testcases + List<CcTest> testCases = new ArrayList<CcTest>(); + String query = + "for " + + "$d in //testcase " + + "return " + + "<dummy>" + + "{ data($d/@classname) }|" + + "{ data($d/@name) }|" + + "{ count($d/failure) }|" + + "{ count($d/error) }" + + "</dummy>"; + + List result = ScrapingUtils.runXQuery(dom, query); + for(Iterator it = result.iterator(); it.hasNext();) { + String value = ScrapingUtils.eliminateEmptyValues(((NodeInfo)it.next()).getStringValue()); + log.debug(String.format("Scraped testcase: \"%s\"", value)); + + StringTokenizer tokenizer = new StringTokenizer(value, "|"); + String className = tokenizer.nextToken(); + String testCaseName = tokenizer.nextToken(); + int result_ = CcTestResult.SUCCEEDED; + if(!tokenizer.nextToken().equals("0")) + result_ = CcTestResult.FAILED; + else if(!tokenizer.nextToken().equals("0")) + result_ = CcTestResult.ERROR; + + testCases.add(new CcTest(result_, className, testCaseName)); + } + // generate chart Map<Integer, Integer> testsPerCategory = new HashMap<Integer, Integer>(); int success = tests - errors - failures; Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/server/jira/JiraServiceImpl.java =================================================================== --- trunk/labs/kosmos/src/java/hu/midori/kosmos/server/jira/JiraServiceImpl.java 2005-09-25 14:52:36 UTC (rev 1205) +++ trunk/labs/kosmos/src/java/hu/midori/kosmos/server/jira/JiraServiceImpl.java 2005-09-25 14:53:11 UTC (rev 1206) @@ -145,9 +145,7 @@ // scrape for(Iterator itProject = resultProject.iterator(); itProject.hasNext();) { - String valueProject = ((NodeInfo)itProject.next()).getStringValue(); - valueProject = valueProject.replaceAll("\\|\\|\\|", "| | |"); // to eliminate empty items - valueProject = valueProject.replaceAll("\\|\\|", "| |"); // to eliminate empty items + String valueProject = ScrapingUtils.eliminateEmptyValues(((NodeInfo)itProject.next()).getStringValue()); log.debug(String.format("Scraped project: \"%s\"", valueProject)); StringTokenizer tokenizerProject = new StringTokenizer(valueProject, "|"); Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/server/util/ScrapingUtils.java =================================================================== --- trunk/labs/kosmos/src/java/hu/midori/kosmos/server/util/ScrapingUtils.java 2005-09-25 14:52:36 UTC (rev 1205) +++ trunk/labs/kosmos/src/java/hu/midori/kosmos/server/util/ScrapingUtils.java 2005-09-25 14:53:11 UTC (rev 1206) @@ -82,4 +82,16 @@ return ((NodeInfo)list.get(0)).getStringValue(); } + + /** + * Eliminates the empty items from a scraped value string to make + * the tokenizer happy. E.g. <code>||xxx|</code> will be transformed to <code> | |xxx| </code>. + */ + public static String eliminateEmptyValues(String value) { + if(value.charAt(0) == '|') + value = " " + value; + value = value.replaceAll("\\|\\|\\|", "| | |"); + value = value.replaceAll("\\|\\|", "| |"); + return value; + } } Modified: trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/cc/ccmonitoringportlet.properties =================================================================== --- trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/cc/ccmonitoringportlet.properties 2005-09-25 14:52:36 UTC (rev 1205) +++ trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/cc/ccmonitoringportlet.properties 2005-09-25 14:53:11 UTC (rev 1206) @@ -18,12 +18,15 @@ ccproject.tests=Tests Total ccproject.testsPerCategory=Tests Success Rate -status.success=Success. -status.failure=Failure. +status.success=Successful build with successful tests. +status.failure=Failed build or successful build with test failures, errors. legend.title=Legend -legend.success=Successful build. -legend.error=Failed build or successful build with failed tests. +legend.buildSuccess=Successful build. +legend.buildError=Failed build. +legend.testSuccess=Succesful test. +legend.testFailure=Failed test. +legend.testError=Test error. lastupdate=Last Update Modified: trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/cc/ccmonitoringportlet_hu.properties =================================================================== --- trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/cc/ccmonitoringportlet_hu.properties 2005-09-25 14:52:36 UTC (rev 1205) +++ trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/cc/ccmonitoringportlet_hu.properties 2005-09-25 14:53:11 UTC (rev 1206) @@ -18,12 +18,15 @@ ccproject.tests=Unit Tesztek szesen ccproject.testsPerCategory=Unit Teszt Eloszl -status.success=Sikeres. -status.failure=Sikertelen. +status.success=Sikeres build sikeres tesztekkel. +status.failure=Sikertelen build vagy sikeres build sikertelen tesztekkel. legend.title=Jelmagyart -legend.success=Sikeres build. -legend.error=Hibbuild vagy sikeres build sikertelen unit tesztekkel. +legend.buildSuccess=Sikeres build. +legend.buildError=Sikertelen build. +legend.testSuccess=Sikeres unit teszt. +legend.testFailure=Sikertelen unit teszt. +legend.testError=Hibunit teszt. lastupdate=Utolsisss Modified: trunk/labs/kosmos/web-portlet/pages/cc_monitoring.jsp =================================================================== --- trunk/labs/kosmos/web-portlet/pages/cc_monitoring.jsp 2005-09-25 14:52:36 UTC (rev 1205) +++ trunk/labs/kosmos/web-portlet/pages/cc_monitoring.jsp 2005-09-25 14:53:11 UTC (rev 1206) @@ -8,10 +8,10 @@ <display:column style="width:20px"> <c:choose> <c:when test="${(projectsIt.status == 1) && (projectsIt.failures == 0) && (projectsIt.errors == 0)}"> - <img src="<%= renderRequest.getContextPath() %>/pages/images/success.gif" title="<fmt:message key="legend.success"/>"/> + <img src="<%= renderRequest.getContextPath() %>/pages/images/success.gif" title="<fmt:message key="status.success"/>"/> </c:when> <c:otherwise> - <img src="<%= renderRequest.getContextPath() %>/pages/images/error.gif" title="<fmt:message key="legend.error"/>"/> + <img src="<%= renderRequest.getContextPath() %>/pages/images/error.gif" title="<fmt:message key="status.failure"/>"/> </c:otherwise> </c:choose> </display:column> @@ -23,10 +23,10 @@ <display:column titleKey="ccproject.status" sortProperty="status" sortable="true"> <c:choose> <c:when test="${projectsIt.status == 1}"> - <img src="<%= renderRequest.getContextPath() %>/pages/images/success.gif" title="<fmt:message key="status.success"/>"/> + <img src="<%= renderRequest.getContextPath() %>/pages/images/success.gif" title="<fmt:message key="legend.buildSuccess"/>"/> </c:when> <c:otherwise> - <img src="<%= renderRequest.getContextPath() %>/pages/images/error.gif" title="<fmt:message key="status.failure"/>"/> + <img src="<%= renderRequest.getContextPath() %>/pages/images/error.gif" title="<fmt:message key="legend.buildError"/>"/> </c:otherwise> </c:choose> </display:column> Modified: trunk/labs/kosmos/web-portlet/pages/cc_monitoring_test_details.jsp =================================================================== --- trunk/labs/kosmos/web-portlet/pages/cc_monitoring_test_details.jsp 2005-09-25 14:52:36 UTC (rev 1205) +++ trunk/labs/kosmos/web-portlet/pages/cc_monitoring_test_details.jsp 2005-09-25 14:53:11 UTC (rev 1206) @@ -46,19 +46,19 @@ <td><img src="<c:out value="${project.testsPerCategoryChartUrl}"/>" title="<fmt:message key="ccproject.testsPerCategory"/>"/></td> <td valign="top"> <table> - <c:forEach var="testcase" items="${project.testcases}" varStatus="status"> + <c:forEach var="testcase" items="${project.testCases}" varStatus="status"> <c:if test="${status.index < 138}"><!-- TODO 8, tooltips, result ordered by type? --> <tr class="portlet-section-body"> <td> <c:choose> <c:when test="${testcase.result == 1}"> - <img src="<%= renderRequest.getContextPath() %>/pages/images/success.gif" title="<fmt:message key="legend.success"/>"/> + <img src="<%= renderRequest.getContextPath() %>/pages/images/success.gif" title="<fmt:message key="legend.testSuccess"/>"/> </c:when> <c:when test="${testcase.result == -1}"> - <img src="<%= renderRequest.getContextPath() %>/pages/images/failure.gif" title="<fmt:message key="legend.failure"/>"/> + <img src="<%= renderRequest.getContextPath() %>/pages/images/failure.gif" title="<fmt:message key="legend.testFailure"/>"/> </c:when> <c:otherwise> - <img src="<%= renderRequest.getContextPath() %>/pages/images/error.gif" title="<fmt:message key="legend.error"/>"/> + <img src="<%= renderRequest.getContextPath() %>/pages/images/error.gif" title="<fmt:message key="legend.testError"/>"/> </c:otherwise> </c:choose> </td> |