420165: fix failures due to too fast task submission in
TracTaskDataHandlerXmlRpcTest

Change-Id: I4ba997880ee0614c072da99fa8f30eef88b3850f
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=420165
diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/core/TracTaskDataHandlerXmlRpcTest.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/core/TracTaskDataHandlerXmlRpcTest.java
index 683c9be..352b468 100644
--- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/core/TracTaskDataHandlerXmlRpcTest.java
+++ b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/core/TracTaskDataHandlerXmlRpcTest.java
@@ -199,6 +199,7 @@
 		AbstractTaskAttachmentHandler attachmentHandler = connector.getTaskAttachmentHandler();
 		ITask task = harness.createTask("attachmentChangesLastModifiedDate");
 		Date lastModified = task.getModificationDate();
+		harness.getFixture().waitToGuaranteeTaskUpdate();
 		// XXX the test case fails when comment == null
 		attachmentHandler.postContent(repository, task, new TextTaskAttachmentSource("abc"), "comment", null, null);
 
@@ -441,6 +442,8 @@
 		ticket.putBuiltinValue(Key.PRIORITY, "trivial");
 		client.updateTicket(ticket, "changing priority", null);
 
+		harness.getFixture().waitToGuaranteeTaskUpdate();
+
 		// submit conflicting change 
 		try {
 			taskDataHandler.postTaskData(repository, taskData, null, new NullProgressMonitor());
diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/support/TracFixture.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/support/TracFixture.java
index 3760f25..f292e80 100644
--- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/support/TracFixture.java
+++ b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/support/TracFixture.java
@@ -197,4 +197,15 @@
 		return super.isExcluded() || excluded;
 	}
 
+	public void waitToGuaranteeTaskUpdate() {
+		if (getVersion().compareTo("0.12") < 0) {
+			// Trac 0.11 can fail with database errors if subsequent task updates happen too quickly
+			try {
+				Thread.sleep(1000);
+			} catch (InterruptedException e) {
+				throw new RuntimeException(e);
+			}
+		}
+	}
+
 }