gecko/services/sync/tests/unit/test_service_sync_updateEnabledEngines.js

207 lines
6.1 KiB
JavaScript

Cu.import("resource://services-sync/service.js");
Cu.import("resource://services-sync/engines.js");
Cu.import("resource://services-sync/util.js");
Cu.import("resource://services-sync/constants.js");
Cu.import("resource://services-sync/base_records/crypto.js");
Cu.import("resource://services-sync/base_records/keys.js");
Cu.import("resource://services-sync/base_records/wbo.js");
function SteamEngine() {
SyncEngine.call(this, "Steam");
}
SteamEngine.prototype = {
__proto__: SyncEngine.prototype,
// We're not interested in engine sync but what the service does.
_sync: function _sync() {
this._syncStartup();
}
};
Engines.register(SteamEngine);
function sync_httpd_setup(handlers) {
handlers["/1.0/johndoe/info/collections"]
= (new ServerWBO("collections", {})).handler(),
handlers["/1.0/johndoe/storage/keys/pubkey"]
= (new ServerWBO("pubkey")).handler();
handlers["/1.0/johndoe/storage/keys/privkey"]
= (new ServerWBO("privkey")).handler();
handlers["/1.0/johndoe/storage/clients"]
= (new ServerCollection()).handler();
handlers["/1.0/johndoe/storage/crypto"]
= (new ServerCollection()).handler();
handlers["/1.0/johndoe/storage/crypto/clients"]
= (new ServerWBO("clients", {})).handler();
return httpd_setup(handlers);
}
function setUp() {
Service.username = "johndoe";
Service.password = "ilovejane";
Service.passphrase = "sekrit";
Service.clusterURL = "http://localhost:8080/";
new FakeCryptoService();
createAndUploadKeypair();
}
const PAYLOAD = 42;
function test_enabledLocally() {
_("Test: Engine is disabled on remote clients and enabled locally");
Service.syncID = "abcdefghij";
let engine = Engines.get("steam");
let metaWBO = new ServerWBO("global", {syncID: Service.syncID,
storageVersion: STORAGE_VERSION,
engines: {}});
let server = sync_httpd_setup({
"/1.0/johndoe/storage/meta/global": metaWBO.handler(),
"/1.0/johndoe/storage/crypto/steam": new ServerWBO("steam", {}).handler(),
"/1.0/johndoe/storage/steam": new ServerWBO("steam", {}).handler()
});
do_test_pending();
setUp();
try {
_("Enable engine locally.");
engine.enabled = true;
_("Sync.");
Weave.Service.login();
Weave.Service.sync();
_("Meta record now contains the new engine.");
do_check_true(!!metaWBO.data.engines.steam);
_("Engine continues to be enabled.");
do_check_true(engine.enabled);
} finally {
server.stop(do_test_finished);
Service.startOver();
}
}
function test_disabledLocally() {
_("Test: Engine is enabled on remote clients and disabled locally");
Service.syncID = "abcdefghij";
let engine = Engines.get("steam");
let metaWBO = new ServerWBO("global", {
syncID: Service.syncID,
storageVersion: STORAGE_VERSION,
engines: {steam: {syncID: engine.syncID,
version: engine.version}}
});
let steamCrypto = new ServerWBO("steam", PAYLOAD);
let steamCollection = new ServerWBO("steam", PAYLOAD);
let server = sync_httpd_setup({
"/1.0/johndoe/storage/meta/global": metaWBO.handler(),
"/1.0/johndoe/storage/crypto/steam": steamCrypto.handler(),
"/1.0/johndoe/storage/steam": steamCollection.handler()
});
do_test_pending();
setUp();
try {
_("Disable engine locally.");
Service._ignorePrefObserver = true;
engine.enabled = true;
Service._ignorePrefObserver = false;
engine.enabled = false;
_("Sync.");
Weave.Service.login();
Weave.Service.sync();
_("Meta record no longer contains engine.");
do_check_false(!!metaWBO.data.engines.steam);
_("Server records are wiped.");
do_check_eq(steamCollection.payload, undefined);
do_check_eq(steamCrypto.payload, undefined);
_("Engine continues to be disabled.");
do_check_false(engine.enabled);
} finally {
server.stop(do_test_finished);
Service.startOver();
}
}
function test_enabledRemotely() {
_("Test: Engine is disabled locally and enabled on a remote client");
Service.syncID = "abcdefghij";
let engine = Engines.get("steam");
let metaWBO = new ServerWBO("global", {
syncID: Service.syncID,
storageVersion: STORAGE_VERSION,
engines: {steam: {syncID: engine.syncID,
version: engine.version}}
});
let server = sync_httpd_setup({
"/1.0/johndoe/storage/meta/global": metaWBO.handler(),
"/1.0/johndoe/storage/crypto/steam": new ServerWBO("steam", {}).handler(),
"/1.0/johndoe/storage/steam": new ServerWBO("steam", {}).handler()
});
do_test_pending();
setUp();
try {
_("Engine is disabled.");
do_check_false(engine.enabled);
_("Sync.");
Weave.Service.login();
Weave.Service.sync();
_("Engine is enabled.");
do_check_true(engine.enabled);
_("Meta record still present.");
do_check_eq(metaWBO.data.engines.steam.syncID, engine.syncID);
} finally {
server.stop(do_test_finished);
Service.startOver();
}
}
function test_disabledRemotely() {
_("Test: Engine is enabled locally and disabled on a remote client");
Service.syncID = "abcdefghij";
let engine = Engines.get("steam");
let metaWBO = new ServerWBO("global", {syncID: Service.syncID,
storageVersion: STORAGE_VERSION,
engines: {}});
let server = sync_httpd_setup({
"/1.0/johndoe/storage/meta/global": metaWBO.handler(),
"/1.0/johndoe/storage/crypto/steam": new ServerWBO("steam", {}).handler(),
"/1.0/johndoe/storage/steam": new ServerWBO("steam", {}).handler()
});
do_test_pending();
setUp();
try {
_("Enable engine locally.");
Service._ignorePrefObserver = true;
engine.enabled = true;
Service._ignorePrefObserver = false;
_("Sync.");
Weave.Service.login();
Weave.Service.sync();
_("Engine is disabled.");
do_check_false(engine.enabled);
_("Meta record isn't uploaded.");
do_check_false(!!metaWBO.data.engines.steam);
} finally {
server.stop(do_test_finished);
Service.startOver();
}
}
function run_test() {
test_enabledLocally();
test_disabledLocally();
test_enabledRemotely();
test_disabledRemotely();
}