Commit 1b47bf54 authored by Mark Hammond's avatar Mark Hammond
Browse files

Bug 1635352 (part 2) - Add TPS test for new extension-storage engine. r=lina

parent 5de4cd64
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@ module.exports = {
    CreditCards: false,
    EnableEngines: false,
    EnsureTracking: false,
    ExtStorage: false,
    Formdata: false,
    History: false,
    Login: false,
+2 −1
Original line number Diff line number Diff line
@@ -27,7 +27,8 @@
    "test_addon_wipe.js": {},
    "test_existing_bookmarks.js": {},
    "test_addresses.js": {},
    "test_creditcards.js": {}
    "test_creditcards.js": {},
    "test_extstorage.js": {}
  }
}

+154 −0
Original line number Diff line number Diff line
/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */

EnableEngines(["addons"]);

/*
 * The list of phases mapped to their corresponding profiles.  The object
 * here must be in JSON format as it will get parsed by the Python
 * testrunner. It is parsed by the YAML package, so it relatively flexible.
 */
var phases = {
  phase1: "profile1",
  phase2: "profile2",
  phase3: "profile1",
  phase4: "profile2",
  phase5: "profile1",
};

/*
 * Test phases
 */

Phase("phase1", [
  [
    ExtStorage.set,
    "ext-1",
    {
      "key-1": {
        sub_key_1: "value 1",
        sub_key_2: "value 2",
      },
      "key-2": {
        sk_1: "v1",
        sk_2: "v2",
      },
    },
  ],
  [
    ExtStorage.verify,
    "ext-1",
    null,
    {
      "key-1": {
        sub_key_1: "value 1",
        sub_key_2: "value 2",
      },
      "key-2": {
        sk_1: "v1",
        sk_2: "v2",
      },
    },
  ],
  [Sync],
]);

Phase("phase2", [
  [Sync],
  [
    ExtStorage.set,
    "ext-1",
    {
      "key-2": "value from profile 2",
    },
  ],
  [
    ExtStorage.verify,
    "ext-1",
    null,
    {
      "key-1": {
        sub_key_1: "value 1",
        sub_key_2: "value 2",
      },
      "key-2": "value from profile 2",
    },
  ],
  [Sync],
]);

Phase("phase3", [
  [Sync],
  [
    ExtStorage.verify,
    "ext-1",
    null,
    {
      "key-1": {
        sub_key_1: "value 1",
        sub_key_2: "value 2",
      },
      "key-2": "value from profile 2",
    },
  ],
  [
    ExtStorage.set,
    "ext-1",
    {
      "key-2": "value from profile 1",
    },
  ],
  // exit without syncing.
]);

Phase("phase4", [
  [Sync],
  [
    ExtStorage.verify,
    "ext-1",
    null,
    {
      "key-1": {
        sub_key_1: "value 1",
        sub_key_2: "value 2",
      },
      "key-2": "value from profile 2",
    },
  ],
  [
    ExtStorage.set,
    "ext-1",
    {
      "key-2": "second value from profile 2",
    },
  ],
  [Sync],
]);

Phase("phase5", [
  [
    ExtStorage.verify,
    "ext-1",
    null,
    {
      "key-1": {
        sub_key_1: "value 1",
        sub_key_2: "value 2",
      },
      "key-2": "value from profile 1",
    },
  ],
  [Sync],
  [
    ExtStorage.verify,
    "ext-1",
    null,
    {
      "key-1": {
        sub_key_1: "value 1",
        sub_key_2: "value 2",
      },
      "key-2": "second value from profile 2",
    },
  ],
]);
+12 −5
Original line number Diff line number Diff line
@@ -9,7 +9,14 @@

var EXPORTED_SYMBOLS = ["Logger"];

const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
const { XPCOMUtils } = ChromeUtils.import(
  "resource://gre/modules/XPCOMUtils.jsm"
);

XPCOMUtils.defineLazyModuleGetters(this, {
  ObjectUtils: "resource://gre/modules/ObjectUtils.jsm",
  Services: "resource://gre/modules/Services.jsm",
});

var Logger = {
  _foStream: null,
@@ -78,15 +85,15 @@ var Logger = {
    return this.AssertTrue(!bool, msg, showPotentialError);
  },

  AssertEqual(val1, val2, msg) {
    if (val1 != val2) {
  AssertEqual(got, expected, msg) {
    if (!ObjectUtils.deepEqual(got, expected)) {
      throw new Error(
        "ASSERTION FAILED! " +
          msg +
          "; expected " +
          JSON.stringify(val2) +
          JSON.stringify(expected) +
          ", got " +
          JSON.stringify(val1)
          JSON.stringify(got)
      );
    }
  },
+64 −74
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@ var EXPORTED_SYMBOLS = [
  "Addresses",
  "Bookmarks",
  "CreditCards",
  "ExtensionStorage",
  "Formdata",
  "History",
  "Passwords",
@@ -24,83 +25,58 @@ var EXPORTED_SYMBOLS = [

var module = this;

// Global modules
const { Log } = ChromeUtils.import("resource://gre/modules/Log.jsm");
const { XPCOMUtils } = ChromeUtils.import(
  "resource://gre/modules/XPCOMUtils.jsm"
);
const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
const { AppConstants } = ChromeUtils.import(
  "resource://gre/modules/AppConstants.jsm"
);
const { PlacesUtils } = ChromeUtils.import(
  "resource://gre/modules/PlacesUtils.jsm"
);
const { FileUtils } = ChromeUtils.import(
  "resource://gre/modules/FileUtils.jsm"
);
const { setTimeout } = ChromeUtils.import("resource://gre/modules/Timer.jsm");
const { PromiseUtils } = ChromeUtils.import(
  "resource://gre/modules/PromiseUtils.jsm"
);
const { OS } = ChromeUtils.import("resource://gre/modules/osfile.jsm");
const { SessionStore } = ChromeUtils.import(
  "resource:///modules/sessionstore/SessionStore.jsm"
);
const { Async } = ChromeUtils.import("resource://services-common/async.js");
const { CommonUtils } = ChromeUtils.import(
  "resource://services-common/utils.js"
);
const { WEAVE_VERSION } = ChromeUtils.import(
  "resource://services-sync/constants.js"
);
const { Weave } = ChromeUtils.import("resource://services-sync/main.js");
const { Svc } = ChromeUtils.import("resource://services-sync/util.js");
const { SyncTelemetry } = ChromeUtils.import(
  "resource://services-sync/telemetry.js"
);
const { BookmarkValidator } = ChromeUtils.import(
  "resource://services-sync/bookmark_validator.js"
);
const { PasswordValidator } = ChromeUtils.import(
  "resource://services-sync/engines/passwords.js"
);
const { FormValidator } = ChromeUtils.import(
  "resource://services-sync/engines/forms.js"
);
const { AddonValidator } = ChromeUtils.import(
  "resource://services-sync/engines/addons.js"
);
// TPS modules
const { Logger } = ChromeUtils.import("resource://tps/logger.jsm");

// Module wrappers for tests
const { Addon } = ChromeUtils.import("resource://tps/modules/addons.jsm");
const {
  Bookmark,
  BookmarkFolder,
  DumpBookmarks,
  Livemark,
  Separator,
} = ChromeUtils.import("resource://tps/modules/bookmarks.jsm");
const {
  Address,
  CreditCard,
  DumpAddresses,
  DumpCreditCards,
} = ChromeUtils.import("resource://tps/modules/formautofill.jsm");
const { FormData } = ChromeUtils.import("resource://tps/modules/forms.jsm");
const { DumpHistory, HistoryEntry } = ChromeUtils.import(
  "resource://tps/modules/history.jsm"
);
const { DumpPasswords, Password } = ChromeUtils.import(
  "resource://tps/modules/passwords.jsm"
);
const { Preference } = ChromeUtils.import("resource://tps/modules/prefs.jsm");
const { BrowserTabs } = ChromeUtils.import("resource://tps/modules/tabs.jsm");
const { BrowserWindows } = ChromeUtils.import(
  "resource://tps/modules/windows.jsm"
);

XPCOMUtils.defineLazyModuleGetters(this, {
  AppConstants: "resource://gre/modules/AppConstants.jsm",
  Async: "resource://services-common/async.js",
  BrowserTabs: "resource://tps/modules/tabs.jsm",
  BrowserWindows: "resource://tps/modules/windows.jsm",
  CommonUtils: "resource://services-common/utils.js",
  extensionStorageSync: "resource://gre/modules/ExtensionStorageSync.jsm",
  FileUtils: "resource://gre/modules/FileUtils.jsm",
  Log: "resource://gre/modules/Log.jsm",
  Logger: "resource://tps/logger.jsm",
  OS: "resource://gre/modules/osfile.jsm",
  PlacesUtils: "resource://gre/modules/PlacesUtils.jsm",
  PromiseUtils: "resource://gre/modules/PromiseUtils.jsm",
  Services: "resource://gre/modules/Services.jsm",
  SessionStore: "resource:///modules/sessionstore/SessionStore.jsm",
  setTimeout: "resource://gre/modules/Timer.jsm",
  Svc: "resource://services-sync/util.js",
  SyncTelemetry: "resource://services-sync/telemetry.js",
  Weave: "resource://services-sync/main.js",
  WEAVE_VERSION: "resource://services-sync/constants.js",

  Addon: "resource://tps/modules/addons.jsm",
  AddonValidator: "resource://services-sync/engines/addons.js",

  FormData: "resource://tps/modules/forms.jsm",
  FormValidator: "resource://services-sync/engines/forms.js",

  Bookmark: "resource://tps/modules/bookmarks.jsm",
  DumpBookmarks: "resource://tps/modules/bookmarks.jsm",
  BookmarkFolder: "resource://tps/modules/bookmarks.jsm",
  Livemark: "resource://tps/modules/bookmarks.jsm",
  Separator: "resource://tps/modules/bookmarks.jsm",
  BookmarkValidator: "resource://services-sync/bookmark_validator.js",

  Address: "resource://tps/modules/formautofill.jsm",
  DumpAddresses: "resource://tps/modules/formautofill.jsm",
  CreditCard: "resource://tps/modules/formautofill.jsm",
  DumpCreditCards: "resource://tps/modules/formautofill.jsm",

  DumpHistory: "resource://tps/modules/history.jsm",
  HistoryEntry: "resource://tps/modules/history.jsm",

  Preference: "resource://tps/modules/prefs.jsm",

  DumpPasswords: "resource://tps/modules/passwords.jsm",
  Password: "resource://tps/modules/passwords.jsm",
  PasswordValidator: "resource://services-sync/engines/passwords.js",
});

XPCOMUtils.defineLazyGetter(this, "fileProtocolHandler", () => {
  let fileHandler = Services.io.getProtocolHandler("file");
@@ -1597,5 +1573,19 @@ var Windows = {
  },
};

// Jumping through loads of hoops via calling back into a "HandleXXX" method
// and adding an ACTION_XXX indirection adds no value - let's KISS!
// eslint-disable-next-line no-unused-vars
var ExtStorage = {
  async set(id, data) {
    Logger.logInfo(`setting data for '${id}': ${data}`);
    await extensionStorageSync.set({ id }, data);
  },
  async verify(id, keys, data) {
    let got = await extensionStorageSync.get({ id }, keys);
    Logger.AssertEqual(got, data, `data for '${id}'/${keys}`);
  },
};

// Initialize TPS
TPS._init();
Loading