Bug 1447903: Part 9a - Refactor test_AddonRepository*.js to be less insane. r?aswan draft
authorKris Maglione <maglione.k@gmail.com>
Wed, 21 Mar 2018 20:23:48 -0700
changeset 772376 5e50fd1ea7e0a23f4721b2b8cdedba95ac2c9876
parent 772375 67d08afbc5c0123cf6f708318b2dce54f21a3804
child 772377 1faf1d7802c0cf55076940cbf4f4fd50dd2bc2c6
push id103897
push usermaglione.k@gmail.com
push dateMon, 26 Mar 2018 01:31:53 +0000
reviewersaswan
bugs1447903
milestone61.0a1
Bug 1447903: Part 9a - Refactor test_AddonRepository*.js to be less insane. r?aswan MozReview-Commit-ID: 9hPZDy1HOfj
toolkit/mozapps/extensions/test/addons/test_AddonRepository_1/install.rdf
toolkit/mozapps/extensions/test/addons/test_AddonRepository_2/install.rdf
toolkit/mozapps/extensions/test/addons/test_AddonRepository_3/icon.png
toolkit/mozapps/extensions/test/addons/test_AddonRepository_3/install.rdf
toolkit/mozapps/extensions/test/addons/test_AddonRepository_3/preview.png
toolkit/mozapps/extensions/test/xpcshell/test_AddonRepository.js
toolkit/mozapps/extensions/test/xpcshell/test_AddonRepository_cache.js
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/addons/test_AddonRepository_1/install.rdf
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0"?>
-
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-
-  <Description about="urn:mozilla:install-manifest">
-    <em:id>test_AddonRepository_1@tests.mozilla.org</em:id>
-    <em:version>1.1</em:version>
-
-    <em:targetApplication>
-      <Description>
-        <em:id>xpcshell@tests.mozilla.org</em:id>
-        <em:minVersion>1</em:minVersion>
-        <em:maxVersion>1</em:maxVersion>
-      </Description>
-    </em:targetApplication>
-
-    <!-- Front End MetaData -->
-    <em:name>XPI Add-on 1</em:name>
-    <em:description>XPI Add-on 1 - Description</em:description>
-    <em:creator>XPI Add-on 1 - Creator</em:creator>
-    <em:developer>XPI Add-on 1 - First Developer</em:developer>
-    <em:developer>XPI Add-on 1 - Second Developer</em:developer>
-    <em:translator>XPI Add-on 1 - First Translator</em:translator>
-    <em:translator>XPI Add-on 1 - Second Translator</em:translator>
-    <em:contributor>XPI Add-on 1 - First Contributor</em:contributor>
-    <em:contributor>XPI Add-on 1 - Second Contributor</em:contributor>
-    <em:homepageURL>http://example.com/xpi/1/homepage.html</em:homepageURL>
-    <em:optionsURL>http://example.com/xpi/1/options.html</em:optionsURL>
-    <em:aboutURL>http://example.com/xpi/1/about.html</em:aboutURL>
-    <em:iconURL>http://example.com/xpi/1/icon.png</em:iconURL>
-  </Description>
-</RDF>
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/addons/test_AddonRepository_2/install.rdf
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0"?>
-
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-
-  <Description about="urn:mozilla:install-manifest">
-    <em:id>test_AddonRepository_2@tests.mozilla.org</em:id>
-    <em:type>4</em:type>
-    <em:internalName>test2/1.0</em:internalName>
-    <em:version>1.2</em:version>
-
-    <em:targetApplication>
-      <Description>
-        <em:id>xpcshell@tests.mozilla.org</em:id>
-        <em:minVersion>1</em:minVersion>
-        <em:maxVersion>1</em:maxVersion>
-      </Description>
-    </em:targetApplication>
-
-    <!-- Front End MetaData -->
-    <em:name>XPI Add-on 2</em:name>
-  </Description>
-</RDF>
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/addons/test_AddonRepository_3/icon.png
+++ /dev/null
@@ -1,1 +0,0 @@
-Fake icon image
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/addons/test_AddonRepository_3/install.rdf
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0"?>
-
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-
-  <Description about="urn:mozilla:install-manifest">
-    <em:id>test_AddonRepository_3@tests.mozilla.org</em:id>
-    <em:type>4</em:type>
-    <em:internalName>test3/1.0</em:internalName>
-    <em:version>1.3</em:version>
-
-    <em:targetApplication>
-      <Description>
-        <em:id>xpcshell@tests.mozilla.org</em:id>
-        <em:minVersion>1</em:minVersion>
-        <em:maxVersion>1</em:maxVersion>
-      </Description>
-    </em:targetApplication>
-
-    <!-- Front End MetaData -->
-    <em:name>XPI Add-on 3</em:name>
-  </Description>
-</RDF>
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/addons/test_AddonRepository_3/preview.png
+++ /dev/null
@@ -1,1 +0,0 @@
-Fake preview image
--- a/toolkit/mozapps/extensions/test/xpcshell/test_AddonRepository.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_AddonRepository.js
@@ -1,27 +1,75 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/
  */
 
 // Tests AddonRepository.jsm
 
 ChromeUtils.import("resource://gre/modules/addons/AddonRepository.jsm");
 
-ChromeUtils.import("resource://testing-common/httpd.js");
-var gServer = new HttpServer();
-gServer.start(-1);
+var gServer = AddonTestUtils.createHttpServer();
 
 const PREF_GETADDONS_BROWSEADDONS        = "extensions.getAddons.browseAddons";
 const PREF_GETADDONS_BROWSESEARCHRESULTS = "extensions.getAddons.search.browseURL";
 
 const PORT          = gServer.identity.primaryPort;
 const BASE_URL      = "http://localhost:" + PORT;
 const DEFAULT_URL   = "about:blank";
 
+const ADDONS = [
+  {
+    id: "test_AddonRepository_1@tests.mozilla.org",
+    version: "1.1",
+
+    name: "XPI Add-on 1",
+    description: "XPI Add-on 1 - Description",
+    creator: "XPI Add-on 1 - Creator",
+    developer: ["XPI Add-on 1 - First Developer",
+                "XPI Add-on 1 - Second Developer"],
+    translator: ["XPI Add-on 1 - First Translator",
+                 "XPI Add-on 1 - Second Translator"],
+    contributor: ["XPI Add-on 1 - First Contributor",
+                  "XPI Add-on 1 - Second Contributor"],
+    homepageURL: "http://example.com/xpi/1/homepage.html",
+    optionsURL: "http://example.com/xpi/1/options.html",
+    aboutURL: "http://example.com/xpi/1/about.html",
+    iconURL: "http://example.com/xpi/1/icon.png",
+
+    targetApplications: [{
+      id: "xpcshell@tests.mozilla.org",
+      minVersion: "1",
+      maxVersion: "1"}],
+  },
+  {
+    id: "test_AddonRepository_2@tests.mozilla.org",
+    type: 4,
+    internalName: "test2/1.0",
+    version: "1.2",
+    name: "XPI Add-on 2",
+
+    targetApplications: [{
+      id: "xpcshell@tests.mozilla.org",
+      minVersion: "1",
+      maxVersion: "1"}],
+  },
+  {
+    id: "test_AddonRepository_3@tests.mozilla.org",
+    type: "4",
+    internalName: "test3/1.0",
+    version: "1.3",
+    name: "XPI Add-on 3",
+
+    targetApplications: [{
+      id: "xpcshell@tests.mozilla.org",
+      minVersion: "1",
+      maxVersion: "1"}],
+  },
+];
+
 gPort = PORT;
 
 // Path to source URI of installing add-on
 const INSTALL_URL2  = "/addons/test_AddonRepository_2.xpi";
 // Path to source URI of non-active add-on (state = STATE_AVAILABLE)
 const INSTALL_URL3  = "/addons/test_AddonRepository_3.xpi";
 
 // Properties of an individual add-on that should be checked
@@ -104,78 +152,55 @@ function check_results(aActualAddons, aE
     if (aActualAddon.name == "FAIL")
       do_throw(aActualAddon.id + " - " + aActualAddon.description);
     if (aActualAddon.name != "PASS")
       do_throw(aActualAddon.id + " - invalid add-on name " + aActualAddon.name);
 
   });
 }
 
-function run_test() {
+add_task(async function setup() {
   // Setup for test
-  do_test_pending();
   createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9");
 
-  startupManager();
+  let xpis = ADDONS.map(addon => createTempXPIFile(addon));
+
+  // Register other add-on XPI files
+  gServer.registerFile(INSTALL_URL2, xpis[1]);
+  gServer.registerFile(INSTALL_URL3, xpis[2]);
+
+  // Register files used to test search failure
+  mapUrlToFile(GET_TEST.failedURL,
+               do_get_file("data/test_AddonRepository_fail.json"),
+               gServer);
+
+  // Register files used to test search success
+  mapUrlToFile(GET_TEST.successfulURL,
+               do_get_file("data/test_AddonRepository_getAddonsByIDs.json"),
+               gServer);
+
+  await promiseStartupManager();
 
   // Install an add-on so can check that it isn't returned in the results
-  installAllFiles([do_get_addon("test_AddonRepository_1")], function addon_1_install_callback() {
-    restartManager();
-
-    // Register other add-on XPI files
-    gServer.registerFile(INSTALL_URL2,
-                        do_get_addon("test_AddonRepository_2"));
-    gServer.registerFile(INSTALL_URL3,
-                        do_get_addon("test_AddonRepository_3"));
-
-    // Register files used to test search failure
-    mapUrlToFile(GET_TEST.failedURL,
-                 do_get_file("data/test_AddonRepository_fail.json"),
-                 gServer);
-
-    // Register files used to test search success
-    mapUrlToFile(GET_TEST.successfulURL,
-                 do_get_file("data/test_AddonRepository_getAddonsByIDs.json"),
-                 gServer);
+  await promiseInstallFile(xpis[0]);
+  await promiseRestartManager();
 
-    // Create an active AddonInstall so can check that it isn't returned in the results
-    AddonManager.getInstallForURL(BASE_URL + INSTALL_URL2, function addon_2_get(aInstall) {
-      try {
-        aInstall.install();
-      } catch (e) {
-        info("Failed to install add-on " + aInstall.sourceURI.spec);
-        do_report_unexpected_exception(e);
-      }
-
-      // Create a non-active AddonInstall so can check that it is returned in the results
-      AddonManager.getInstallForURL(BASE_URL + INSTALL_URL3,
-                                    run_test_1, "application/x-xpinstall");
-    }, "application/x-xpinstall");
-  });
-}
+  // Create an active AddonInstall so can check that it isn't returned in the results
+  let install = await AddonManager.getInstallForURL(BASE_URL + INSTALL_URL2,
+                                                    undefined,
+                                                    "application/x-xpinstall");
+  install.install();
 
-function end_test() {
-  let testDir = gProfD.clone();
-  testDir.append("extensions");
-  testDir.append("staged");
-  gServer.stop(function() {
-    function loop() {
-      if (!testDir.exists()) {
-        info("Staged directory has been cleaned up");
-        do_test_finished();
-      }
-      info("Waiting 1 second until cleanup is complete");
-      do_timeout(1000, loop);
-    }
-    loop();
-  });
-}
+  // Create a non-active AddonInstall so can check that it is returned in the results
+  await AddonManager.getInstallForURL(BASE_URL + INSTALL_URL3,
+                                      undefined, "application/x-xpinstall");
+});
 
 // Tests homepageURL and getSearchURL()
-function run_test_1() {
+add_task(async function test_1() {
   function check_urls(aPreference, aGetURL, aTests) {
     aTests.forEach(function(aTest) {
       Services.prefs.setCharPref(aPreference, aTest.preferenceValue);
       Assert.equal(aGetURL(aTest), aTest.expectedURL);
     });
   }
 
   var urlTests = [{
@@ -223,33 +248,24 @@ function run_test_1() {
       // Preference is not defined by default
       Assert.equal(Services.prefs.getPrefType(aTest.preference),
                    Services.prefs.PREF_INVALID);
       Assert.equal(aTest.getURL(), DEFAULT_URL);
     }
 
     check_urls(aTest.preference, aTest.getURL, aTest.urlTests);
   });
-
-  run_test_getAddonsByID_fails();
-}
+});
 
 // Tests failure of AddonRepository.getAddonsByIDs()
-function run_test_getAddonsByID_fails() {
+add_task(async function test_getAddonsByID_fails() {
   Services.prefs.setCharPref(GET_TEST.preference, GET_TEST.preferenceValue);
-  AddonRepository.getAddonsByIDs(GET_TEST.failedIDs).then(result => {
-    do_throw("getAddonsByIDs should not have succeeded");
-    end_test();
-  }).catch(err => {
-    run_test_getAddonsByID_succeeds();
-  });
-}
+
+  await Assert.rejects(
+    AddonRepository.getAddonsByIDs(GET_TEST.failedIDs));
+});
 
 // Tests success of AddonRepository.getAddonsByIDs()
-function run_test_getAddonsByID_succeeds() {
-  AddonRepository.getAddonsByIDs(GET_TEST.successfulIDs).then(result => {
-    check_results(result, GET_RESULTS);
-    end_test();
-  }).catch(err => {
-    do_throw(err);
-    end_test();
-  });
-}
+add_task(async function test_getAddonsByID_succeeds() {
+  let result = await AddonRepository.getAddonsByIDs(GET_TEST.successfulIDs);
+
+  check_results(result, GET_RESULTS);
+});
--- a/toolkit/mozapps/extensions/test/xpcshell/test_AddonRepository_cache.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_AddonRepository_cache.js
@@ -14,21 +14,77 @@ const BASE_URL  = "http://example.com";
 const PREF_GETADDONS_CACHE_ENABLED = "extensions.getAddons.cache.enabled";
 const PREF_GETADDONS_CACHE_TYPES   = "extensions.getAddons.cache.types";
 const GETADDONS_RESULTS            = BASE_URL + "/data/test_AddonRepository_cache.json";
 const COMPAT_RESULTS               = BASE_URL + "/data/test_AddonRepository_cache_compat.json";
 const EMPTY_RESULT                 = BASE_URL + "/data/test_AddonRepository_empty.json";
 const FAILED_RESULT                = BASE_URL + "/data/test_AddonRepository_fail.json";
 
 const FILE_DATABASE = "addons.json";
-const ADDON_NAMES = ["test_AddonRepository_1",
-                     "test_AddonRepository_2",
-                     "test_AddonRepository_3"];
-const ADDON_IDS = ADDON_NAMES.map(aName => aName + "@tests.mozilla.org");
-const ADDON_FILES = ADDON_NAMES.map(do_get_addon);
+
+const ADDONS = [
+  {
+    "install.rdf": {
+      id: "test_AddonRepository_1@tests.mozilla.org",
+      version: "1.1",
+
+      name: "XPI Add-on 1",
+      description: "XPI Add-on 1 - Description",
+      creator: "XPI Add-on 1 - Creator",
+      developer: ["XPI Add-on 1 - First Developer",
+                  "XPI Add-on 1 - Second Developer"],
+      translator: ["XPI Add-on 1 - First Translator",
+                   "XPI Add-on 1 - Second Translator"],
+      contributor: ["XPI Add-on 1 - First Contributor",
+                    "XPI Add-on 1 - Second Contributor"],
+      homepageURL: "http://example.com/xpi/1/homepage.html",
+      optionsURL: "http://example.com/xpi/1/options.html",
+      aboutURL: "http://example.com/xpi/1/about.html",
+      iconURL: "http://example.com/xpi/1/icon.png",
+
+      targetApplications: [{
+        id: "xpcshell@tests.mozilla.org",
+        minVersion: "1",
+        maxVersion: "1"}],
+    },
+  },
+  {
+    "install.rdf": {
+      id: "test_AddonRepository_2@tests.mozilla.org",
+      type: 4,
+      internalName: "test2/1.0",
+      version: "1.2",
+      name: "XPI Add-on 2",
+
+      targetApplications: [{
+        id: "xpcshell@tests.mozilla.org",
+        minVersion: "1",
+        maxVersion: "1"}],
+    },
+  },
+  {
+    "install.rdf": {
+      id: "test_AddonRepository_3@tests.mozilla.org",
+      type: "4",
+      internalName: "test3/1.0",
+      version: "1.3",
+      name: "XPI Add-on 3",
+
+      targetApplications: [{
+        id: "xpcshell@tests.mozilla.org",
+        minVersion: "1",
+        maxVersion: "1"}],
+    },
+    "icon.png": "",
+    "preview.png": "",
+  },
+];
+
+const ADDON_IDS = ADDONS.map(addon => addon["install.rdf"].id);
+const ADDON_FILES = ADDONS.map(addon => AddonTestUtils.createTempXPIFile(addon));
 
 const PREF_ADDON0_CACHE_ENABLED = "extensions." + ADDON_IDS[0] + ".getAddons.cache.enabled";
 const PREF_ADDON1_CACHE_ENABLED = "extensions." + ADDON_IDS[1] + ".getAddons.cache.enabled";
 
 // Properties of an individual add-on that should be checked
 // Note: size and updateDate are checked separately
 const ADDON_PROPERTIES = ["id", "type", "name", "version", "creator",
                           "developers", "translators", "contributors",