diff options
author | spingel | 2008-11-30 10:44:59 +0000 |
---|---|---|
committer | spingel | 2008-11-30 10:44:59 +0000 |
commit | a738bdb5243bf7c90de5d68d6382084f23b218b1 (patch) | |
tree | 798240a95276df0fd71c25d5f3100df47df0d658 /org.eclipse.mylyn.tests.report | |
parent | 60af685605c9e321691b60ea5c40369babca9fab (diff) | |
download | org.eclipse.mylyn.incubator-a738bdb5243bf7c90de5d68d6382084f23b218b1.tar.gz org.eclipse.mylyn.incubator-a738bdb5243bf7c90de5d68d6382084f23b218b1.tar.xz org.eclipse.mylyn.incubator-a738bdb5243bf7c90de5d68d6382084f23b218b1.zip |
NEW - bug 248310: [releng] use continuous integration to run builds and tests
https://bugs.eclipse.org/bugs/show_bug.cgi?id=248310
Diffstat (limited to 'org.eclipse.mylyn.tests.report')
2 files changed, 154 insertions, 41 deletions
diff --git a/org.eclipse.mylyn.tests.report/src/org/eclipse/mylyn/internal/tests/report/Main.java b/org.eclipse.mylyn.tests.report/src/org/eclipse/mylyn/internal/tests/report/Main.java index 15f0fc38..37b32c8f 100644 --- a/org.eclipse.mylyn.tests.report/src/org/eclipse/mylyn/internal/tests/report/Main.java +++ b/org.eclipse.mylyn.tests.report/src/org/eclipse/mylyn/internal/tests/report/Main.java @@ -14,7 +14,10 @@ package org.eclipse.mylyn.internal.tests.report; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; import java.util.Properties; +import java.util.StringTokenizer; import javax.xml.stream.XMLEventReader; import javax.xml.stream.XMLInputFactory; @@ -31,53 +34,65 @@ import org.eclipse.mylyn.tasks.core.TaskRepository; public class Main { public static void main(String[] args) { + List<String> filenames = new ArrayList<String>(); Build build = null; - String filename = null; String propertiesFilename = null; String tag = null; + boolean clear = false; for (int i = 0; i < args.length; i++) { - if ("-build".equals(args[i])) { - build = new Build(readArg(args, ++i)); - } else if ("-in".equals(args[i])) { - filename = readArg(args, ++i); - } - if ("-config".equals(args[i])) { - propertiesFilename = readArg(args, ++i); - } - if ("-tag".equals(args[i])) { - tag = readArg(args, ++i); + if (args[i].startsWith("-")) { + if ("-build".equals(args[i])) { + build = new Build(readArg(args, ++i)); + } else if ("-config".equals(args[i])) { + propertiesFilename = readArg(args, ++i); + } else if ("-tag".equals(args[i])) { + tag = readArg(args, ++i); + } else if ("-clear".equals(args[i])) { + clear = "YES".equals(readArg(args, ++i)); + } + + } else { + StringTokenizer t = new StringTokenizer(args[i], File.pathSeparator); + while (t.hasMoreTokens()) { + filenames.add(t.nextToken()); + } } } - if (build == null || filename == null || propertiesFilename == null) { + if (build == null || filenames.isEmpty() || propertiesFilename == null) { printUsage(); System.exit(1); } try { TaskRepository repository = readConfig(new File(propertiesFilename)); - process(repository, new File(filename), build, tag); + TaskReporter reporter = new TaskReporter(build, repository, tag); + if (clear) { + reporter.clearAll(); + } + reporter.initialize(); + for (String filename : filenames) { + process(repository, new File(filename), reporter); + } + reporter.done(); + System.out.println(reporter.getStatistics()); } catch (Exception e) { e.printStackTrace(); } } private static void printUsage() { - System.err.println("Main -in [junit report file] -config [config file] -build [id]"); + System.err.println("Main -config [config file] -build [id] [junit report file]..."); } - private static void process(TaskRepository repository, File file, Build build, String tag) throws Exception { + private static void process(TaskRepository repository, File file, TaskReporter reporter) throws Exception { XMLInputFactory inputFactory = XMLInputFactory.newInstance(); InputStream in = new FileInputStream(file); try { XMLEventReader reader = inputFactory.createXMLEventReader(in); - TaskReporter reporter = new TaskReporter(build, repository, tag); - reporter.initialize(); JUnitReportParser parser = new JUnitReportParser(reporter); parser.parse(reader); - reporter.done(); - System.out.println(reporter.getStatistics()); } finally { in.close(); } diff --git a/org.eclipse.mylyn.tests.report/src/org/eclipse/mylyn/internal/tests/report/TaskReporter.java b/org.eclipse.mylyn.tests.report/src/org/eclipse/mylyn/internal/tests/report/TaskReporter.java index b863505f..138e16b7 100644 --- a/org.eclipse.mylyn.tests.report/src/org/eclipse/mylyn/internal/tests/report/TaskReporter.java +++ b/org.eclipse.mylyn.tests.report/src/org/eclipse/mylyn/internal/tests/report/TaskReporter.java @@ -12,7 +12,11 @@ package org.eclipse.mylyn.internal.tests.report; import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; import java.util.List; +import java.util.Map; +import java.util.Set; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; @@ -22,6 +26,7 @@ import org.eclipse.mylyn.internal.tasks.core.TaskList; import org.eclipse.mylyn.internal.tasks.core.TaskRepositoryManager; import org.eclipse.mylyn.internal.tests.report.TestCaseResult.TestCaseResultType; import org.eclipse.mylyn.internal.trac.core.TracRepositoryConnector; +import org.eclipse.mylyn.internal.trac.core.TracTaskDataHandler; import org.eclipse.mylyn.internal.trac.core.TracTaskMapper; import org.eclipse.mylyn.internal.trac.core.TracRepositoryConnector.TaskStatus; import org.eclipse.mylyn.internal.trac.core.client.ITracClient; @@ -30,6 +35,7 @@ import org.eclipse.mylyn.internal.trac.core.model.TracSearch; import org.eclipse.mylyn.tasks.core.IRepositoryQuery; import org.eclipse.mylyn.tasks.core.ITaskMapping; import org.eclipse.mylyn.tasks.core.RepositoryResponse; +import org.eclipse.mylyn.tasks.core.RepositoryStatus; import org.eclipse.mylyn.tasks.core.TaskMapping; import org.eclipse.mylyn.tasks.core.TaskRepository; import org.eclipse.mylyn.tasks.core.data.AbstractTaskDataHandler; @@ -66,9 +72,9 @@ class TaskReporter implements TestCaseVisitor { private final String tag; - private List<TaskData> tasks; + private Map<String, TaskData> tasks; - private List<TaskData> processedTasks; + private Set<String> processedTasks; public TaskReporter(Build build, TaskRepository taskRepository, String tag) { this.build = build; @@ -101,6 +107,25 @@ class TaskReporter implements TestCaseVisitor { return taskData; } + private TaskData createParentTaskData(final TestCase testCase) throws CoreException { + TaskData taskData = new TaskData(taskDataHandler.getAttributeMapper(taskRepository), + taskRepository.getConnectorKind(), taskRepository.getRepositoryUrl(), ""); + ITaskMapping initializationData = new TaskMapping() { + @Override + public String getSummary() { + return getParentTaskSummary(testCase); + } + + @Override + public String getDescription() { + return getParentTaskDescription(testCase); + } + }; + taskDataHandler.initializeTaskData(taskRepository, taskData, null, null); + connector.getTaskMapping(taskData).merge(initializationData); + return taskData; + } + // private String getQueryUrl(TestCase testCase) { // TracSearch search = new TracSearch(); // search.addFilter("summary", getTaskSummary(testCase)); @@ -113,7 +138,7 @@ class TaskReporter implements TestCaseVisitor { // return sb.toString(); // } - private String getQueryUrl() { + private String getQueryUrl(String tag) { TracSearch search = new TracSearch(); if (tag != null) { search.addFilter("summary", "^" + tag); @@ -151,18 +176,32 @@ class TaskReporter implements TestCaseVisitor { return "Test results for " + testCase.getClassName() + "." + testCase.getTestName() + "()"; } + private String getParentTaskDescription(TestCase testCase) { + return "Test results for " + testCase.getClassName(); + } + private String getTaskSummary(TestCase testCase) { StringBuilder sb = new StringBuilder(); if (tag != null) { sb.append(tag); sb.append(" "); } - sb.append(testCase.getShortClassName()); - sb.append(": "); +// sb.append(testCase.getShortClassName()); +// sb.append(": "); sb.append(testCase.getTestName()); return sb.toString(); } + private String getParentTaskSummary(TestCase testCase) { + StringBuilder sb = new StringBuilder(); + if (tag != null) { + sb.append(tag); + sb.append(" "); + } + sb.append(testCase.getShortClassName()); + return sb.toString(); + } + private void handleError(IStatus status) { System.err.println(status); if (status.getException() != null) { @@ -186,12 +225,15 @@ class TaskReporter implements TestCaseVisitor { return; } } else { - processedTasks.add(taskData); + processedTasks.add(taskData.getTaskId()); if (taskData.isPartial()) { taskData = connector.getTaskData(taskRepository, taskData.getTaskId(), null); } } + // set as sub task + updateParentTask(testCase, taskData); + ITaskMapping taskMapping = connector.getTaskMapping(taskData); String status = taskMapping.getStatus(); if (testCase.getResult() != null) { @@ -224,6 +266,35 @@ class TaskReporter implements TestCaseVisitor { taskDataHandler.postTaskData(taskRepository, taskData, null, new NullProgressMonitor()); } + private void updateParentTask(TestCase testCase, TaskData taskData) throws CoreException { + TaskData parentTaskData = getParentTask(testCase); + if (parentTaskData == null) { + message(" creating parent task"); + parentTaskData = createParentTaskData(testCase); + RepositoryResponse response = taskDataHandler.postTaskData(taskRepository, parentTaskData, null, null); + parentTaskData = connector.getTaskData(taskRepository, response.getTaskId(), null); + tasks.put(parentTaskData.getTaskId(), parentTaskData); + } + + TaskAttribute attribute = parentTaskData.getRoot().getAttribute(TracTaskDataHandler.ATTRIBUTE_BLOCKED_BY); + if (attribute != null) { + String childId = " " + taskData.getTaskId(); + if (!(" " + attribute.getValue() + " ").contains(childId + " ")) { + message(" updating parent task"); + attribute.setValue(attribute.getValue() + childId); +// try { +// Thread.sleep(1000); +// } catch (InterruptedException e) { +// } + RepositoryResponse response = taskDataHandler.postTaskData(taskRepository, parentTaskData, null, null); + parentTaskData = connector.getTaskData(taskRepository, response.getTaskId(), null); + tasks.put(parentTaskData.getTaskId(), parentTaskData); + } + } + + processedTasks.add(parentTaskData.getTaskId()); + } + private void setNewComment(TaskData taskData, String comment) { TaskAttribute attribute = taskData.getRoot().getMappedAttribute(TaskAttribute.COMMENT_NEW); taskData.getAttributeMapper().setValue(attribute, comment); @@ -288,7 +359,7 @@ class TaskReporter implements TestCaseVisitor { } private TaskData getTask(TestCase testCase) { - for (TaskData task : tasks) { + for (TaskData task : tasks.values()) { TracTaskMapper mapping = connector.getTaskMapping(task); if (getTaskSummary(testCase).equals(mapping.getSummary()) && getTaskDescription(testCase).equals(mapping.getDescription())) { @@ -298,6 +369,17 @@ class TaskReporter implements TestCaseVisitor { return null; } + private TaskData getParentTask(TestCase testCase) { + for (TaskData task : tasks.values()) { + TracTaskMapper mapping = connector.getTaskMapping(task); + if (getParentTaskSummary(testCase).equals(mapping.getSummary()) + && getParentTaskDescription(testCase).equals(mapping.getDescription())) { + return task; + } + } + return null; + } + // private class SingleResultCollector extends TaskDataCollector { // private TaskData taskData; // @@ -326,32 +408,27 @@ class TaskReporter implements TestCaseVisitor { public void initialize() { message("Retrieving tasks from " + taskRepository.getRepositoryLabel()); - String queryUrl = getQueryUrl(); + String queryUrl = getQueryUrl(tag); IRepositoryQuery query = repositoryModel.createRepositoryQuery(taskRepository); query.setUrl(queryUrl); ResultCollector resultCollector = new ResultCollector(); IStatus status = connector.performQuery(taskRepository, query, resultCollector, null, new NullProgressMonitor()); if (status.isOK()) { - this.tasks = resultCollector.getResults(); -// for (TaskData task : this.tasks) { -// ITracClient client = connector.getClientManager().getTracClient(taskRepository); -// try { -// client.deleteTicket(Integer.parseInt(task.getTaskId()), null); -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } - this.processedTasks = new ArrayList<TaskData>(); + this.processedTasks = new HashSet<String>(); + this.tasks = new HashMap<String, TaskData>(); + for (TaskData task : resultCollector.getResults()) { + this.tasks.put(task.getTaskId(), task); + } } else { handleError(status); } } public void done() { - List<TaskData> deletedTasks = new ArrayList<TaskData>(tasks); + List<String> deletedTasks = new ArrayList<String>(tasks.keySet()); deletedTasks.removeAll(processedTasks); - for (TaskData taskData : deletedTasks) { - handleDeleted(taskData); + for (String taskId : deletedTasks) { + handleDeleted(tasks.get(taskId)); } } @@ -359,7 +436,7 @@ class TaskReporter implements TestCaseVisitor { ITaskMapping taskMapping = connector.getTaskMapping(taskData); message("Processing task: " + taskMapping.getSummary()); try { - processedTasks.add(taskData); + processedTasks.add(taskData.getTaskId()); String status = taskMapping.getStatus(); if (TaskStatus.CLOSED == TaskStatus.fromStatus(status)) { @@ -381,4 +458,25 @@ class TaskReporter implements TestCaseVisitor { } } + public void clearAll() { + message("Deleting all tasks from " + taskRepository.getRepositoryLabel()); + String queryUrl = getQueryUrl(null); + IRepositoryQuery query = repositoryModel.createRepositoryQuery(taskRepository); + query.setUrl(queryUrl); + ResultCollector resultCollector = new ResultCollector(); + IStatus status = connector.performQuery(taskRepository, query, resultCollector, null, new NullProgressMonitor()); + if (status.isOK()) { + ITracClient client = connector.getClientManager().getTracClient(taskRepository); + for (TaskData task : resultCollector.getResults()) { + try { + client.deleteTicket(Integer.parseInt(task.getTaskId()), null); + } catch (Exception e) { + handleError(new RepositoryStatus(taskRepository, IStatus.ERROR, "", 0, "Error deleting task", e)); + } + } + } else { + handleError(status); + } + } + } |