toolkit/mozapps/extensions/test/xpcshell/test_syncGUID.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* Any copyright is dedicated to the Public Domain.
     2  * http://creativecommons.org/publicdomain/zero/1.0/
     3  */
     5 Components.utils.import("resource://gre/modules/Services.jsm");
     7 // restartManager() mucks with XPIProvider.jsm importing, so we hack around.
     8 this.__defineGetter__("XPIProvider", function () {
     9   let scope = {};
    10   return Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm", scope)
    11                    .XPIProvider;
    12 });
    14 const addonId = "addon1@tests.mozilla.org";
    16 function run_test() {
    17   Services.prefs.setBoolPref("extensions.checkUpdateSecurity", false);
    19   createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9");
    20   startupManager();
    22   run_next_test();
    23 }
    25 add_test(function test_getter_and_setter() {
    26   // Our test add-on requires a restart.
    27   let listener = {
    28     onInstallEnded: function onInstallEnded() {
    29      AddonManager.removeInstallListener(listener);
    30      // never restart directly inside an onInstallEnded handler!
    31      do_execute_soon(function getter_setter_install_ended() {
    32       restartManager();
    34       AddonManager.getAddonByID(addonId, function(addon) {
    36         do_check_neq(addon, null);
    37         do_check_neq(addon.syncGUID, null);
    38         do_check_true(addon.syncGUID.length >= 9);
    40         let oldGUID = addon.SyncGUID;
    41         let newGUID = "foo";
    43         addon.syncGUID = newGUID;
    44         do_check_eq(newGUID, addon.syncGUID);
    46         // Verify change made it to DB.
    47         AddonManager.getAddonByID(addonId, function(newAddon) {
    48           do_check_neq(newAddon, null);
    49           do_check_eq(newGUID, newAddon.syncGUID);
    50         });
    52         run_next_test();
    53       });
    54      });
    55     }
    56   };
    58   AddonManager.addInstallListener(listener);
    60   AddonManager.getInstallForFile(do_get_addon("test_install1"),
    61                                  function(install) {
    62     install.install();
    63   });
    64 });
    66 add_test(function test_fetch_by_guid_unknown_guid() {
    67   XPIProvider.getAddonBySyncGUID("XXXX", function(addon) {
    68     do_check_eq(null, addon);
    69     run_next_test();
    70   });
    71 });
    73 // Ensure setting an extension to an existing syncGUID results in error.
    74 add_test(function test_error_on_duplicate_syncguid_insert() {
    75   const installNames = ["test_install1", "test_install2_1"];
    76   const installIDs = ["addon1@tests.mozilla.org", "addon2@tests.mozilla.org"];
    78   let installCount = 0;
    80   let listener = {
    81     onInstallEnded: function onInstallEnded() {
    82       installCount++;
    84       if (installCount == installNames.length) {
    85        AddonManager.removeInstallListener(listener);
    86        do_execute_soon(function duplicate_syncguid_install_ended() {
    87         restartManager();
    89         AddonManager.getAddonsByIDs(installIDs, callback_soon(function(addons) {
    90           let initialGUID = addons[1].syncGUID;
    92           try {
    93             addons[1].syncGUID = addons[0].syncGUID;
    94             do_throw("Should not get here.");
    95           }
    96           catch (e) {
    97             do_check_true(e.message.startsWith("Addon sync GUID conflict"));
    98             restartManager();
   100             AddonManager.getAddonByID(installIDs[1], function(addon) {
   101               do_check_eq(initialGUID, addon.syncGUID);
   102               run_next_test();
   103             });
   104           }
   105         }));
   106        });
   107       }
   108     }
   109   };
   111   AddonManager.addInstallListener(listener);
   112   let getInstallCB = function(install) { install.install(); };
   114   for each (let name in installNames) {
   115     AddonManager.getInstallForFile(do_get_addon(name), getInstallCB);
   116   }
   117 });
   119 add_test(function test_fetch_by_guid_known_guid() {
   120   AddonManager.getAddonByID(addonId, function(addon) {
   121     do_check_neq(null, addon);
   122     do_check_neq(null, addon.syncGUID);
   124     let syncGUID = addon.syncGUID;
   126     XPIProvider.getAddonBySyncGUID(syncGUID, function(newAddon) {
   127       do_check_neq(null, newAddon);
   128       do_check_eq(syncGUID, newAddon.syncGUID);
   130       run_next_test();
   131     });
   132   });
   133 });
   135 add_test(function test_addon_manager_get_by_sync_guid() {
   136   AddonManager.getAddonByID(addonId, function(addon) {
   137     do_check_neq(null, addon.syncGUID);
   139     let syncGUID = addon.syncGUID;
   141     AddonManager.getAddonBySyncGUID(syncGUID, function(newAddon) {
   142       do_check_neq(null, newAddon);
   143       do_check_eq(addon.id, newAddon.id);
   144       do_check_eq(syncGUID, newAddon.syncGUID);
   146       AddonManager.getAddonBySyncGUID("DOES_NOT_EXIST", function(missing) {
   147         do_check_eq(undefined, missing);
   149         run_next_test();
   150       });
   151     });
   152   });
   153 });

mercurial