Bug 1289028 - Retry when url-classifier test_gethash.html hits an exception. r=francois draft
authorDimi Lee <dlee@mozilla.com>
Fri, 29 Jul 2016 08:21:01 +0800
changeset 394056 d8e0d5f54434e6cc047d01ea87bea4f817d23ba3
parent 394055 ddeb0295df692695b36295177d6790e5393e1f9a
child 526720 e4562099f4988064b26cfb74ebbfde446807cfc4
push id24469
push userdlee@mozilla.com
push dateFri, 29 Jul 2016 00:21:37 +0000
reviewersfrancois
bugs1289028
milestone50.0a1
Bug 1289028 - Retry when url-classifier test_gethash.html hits an exception. r=francois MozReview-Commit-ID: 9BR7RfAthcU
toolkit/components/url-classifier/tests/mochitest/classifierCommon.js
--- a/toolkit/components/url-classifier/tests/mochitest/classifierCommon.js
+++ b/toolkit/components/url-classifier/tests/mochitest/classifierCommon.js
@@ -1,11 +1,20 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
+const { classes: Cc, interfaces: Ci, results: Cr } = Components;
+
+function setTimeout(callback, delay) {
+  let timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
+  timer.initWithCallback({ notify: callback },
+                           delay,
+                           Ci.nsITimer.TYPE_ONE_SHOT);
+}
+
 function doUpdate(update) {
   const { classes: Cc, interfaces: Ci, results: Cr } = Components;
 
   let listener = {
     QueryInterface: function(iid)
     {
       if (iid.equals(Ci.nsISupports) ||
           iid.equals(Ci.nsIUrlClassifierUpdateObserver))
@@ -21,18 +30,24 @@ function doUpdate(update) {
     updateSuccess: function(requestedTimeout) {
       sendAsyncMessage("updateSuccess");
     }
   };
 
   let dbService = Cc["@mozilla.org/url-classifier/dbservice;1"]
                   .getService(Ci.nsIUrlClassifierDBService);
 
-  dbService.beginUpdate(listener, "test-malware-simple,test-unwanted-simple", "");
-  dbService.beginStream("", "");
-  dbService.updateStream(update);
-  dbService.finishStream();
-  dbService.finishUpdate();
+  try {
+    dbService.beginUpdate(listener, "test-malware-simple,test-unwanted-simple", "");
+    dbService.beginStream("", "");
+    dbService.updateStream(update);
+    dbService.finishStream();
+    dbService.finishUpdate();
+  } catch(e) {
+    // beginUpdate may fail if there's an existing update in progress
+    // retry until success or testcase timeout.
+    setTimeout(() => { doUpdate(update); }, 1000);
+  }
 }
 
 addMessageListener("doUpdate", ({ testUpdate }) => {
   doUpdate(testUpdate);
 });