mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
5bb24d494d
Reduce amount of pointless network calls by not registering any engines for tests that provide their own fake engine implementations anyway.
353 lines
11 KiB
JavaScript
353 lines
11 KiB
JavaScript
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");
|
|
|
|
Svc.DefaultPrefs.set("registerEngines", "");
|
|
Cu.import("resource://services-sync/service.js");
|
|
|
|
initTestLogging();
|
|
|
|
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 StirlingEngine() {
|
|
SyncEngine.call(this, "Stirling");
|
|
}
|
|
StirlingEngine.prototype = {
|
|
__proto__: SteamEngine.prototype,
|
|
// This engine's enabled state is the same as the SteamEngine's.
|
|
get prefName() "steam"
|
|
};
|
|
Engines.register(StirlingEngine);
|
|
|
|
|
|
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_newAccount() {
|
|
_("Test: New account does not disable locally enabled engines.");
|
|
let engine = Engines.get("steam");
|
|
let server = sync_httpd_setup({
|
|
"/1.0/johndoe/storage/meta/global": new ServerWBO("global", {}).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 enabled from the beginning.");
|
|
Service._ignorePrefObserver = true;
|
|
engine.enabled = true;
|
|
Service._ignorePrefObserver = false;
|
|
|
|
_("Sync.");
|
|
Weave.Service.login();
|
|
Weave.Service.sync();
|
|
|
|
_("Engine continues to be enabled.");
|
|
do_check_true(engine.enabled);
|
|
} finally {
|
|
server.stop(do_test_finished);
|
|
Service.startOver();
|
|
}
|
|
}
|
|
|
|
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 test_dependentEnginesEnabledLocally() {
|
|
_("Test: Engine is disabled on remote clients and enabled locally");
|
|
Service.syncID = "abcdefghij";
|
|
let steamEngine = Engines.get("steam");
|
|
let stirlingEngine = Engines.get("stirling");
|
|
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(),
|
|
"/1.0/johndoe/storage/crypto/stirling": new ServerWBO("stirling", {}).handler(),
|
|
"/1.0/johndoe/storage/stirling": new ServerWBO("stirling", {}).handler()
|
|
});
|
|
do_test_pending();
|
|
setUp();
|
|
|
|
try {
|
|
_("Enable engine locally. Doing it on one is enough.");
|
|
steamEngine.enabled = true;
|
|
|
|
_("Sync.");
|
|
Weave.Service.login();
|
|
Weave.Service.sync();
|
|
|
|
_("Meta record now contains the new engines.");
|
|
do_check_true(!!metaWBO.data.engines.steam);
|
|
do_check_true(!!metaWBO.data.engines.stirling);
|
|
|
|
_("Engines continue to be enabled.");
|
|
do_check_true(steamEngine.enabled);
|
|
do_check_true(stirlingEngine.enabled);
|
|
} finally {
|
|
server.stop(do_test_finished);
|
|
Service.startOver();
|
|
}
|
|
}
|
|
|
|
function test_dependentEnginesDisabledLocally() {
|
|
_("Test: Two dependent engines are enabled on remote clients and disabled locally");
|
|
Service.syncID = "abcdefghij";
|
|
let steamEngine = Engines.get("steam");
|
|
let stirlingEngine = Engines.get("stirling");
|
|
let metaWBO = new ServerWBO("global", {
|
|
syncID: Service.syncID,
|
|
storageVersion: STORAGE_VERSION,
|
|
engines: {steam: {syncID: steamEngine.syncID,
|
|
version: steamEngine.version},
|
|
stirling: {syncID: stirlingEngine.syncID,
|
|
version: stirlingEngine.version}}
|
|
});
|
|
|
|
let steamCrypto = new ServerWBO("steam", PAYLOAD);
|
|
let steamCollection = new ServerWBO("steam", PAYLOAD);
|
|
let stirlingCrypto = new ServerWBO("stirling", PAYLOAD);
|
|
let stirlingCollection = new ServerWBO("stirling", 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(),
|
|
"/1.0/johndoe/storage/crypto/stirling": stirlingCrypto.handler(),
|
|
"/1.0/johndoe/storage/stirling": stirlingCollection.handler()
|
|
});
|
|
do_test_pending();
|
|
setUp();
|
|
|
|
try {
|
|
_("Disable engines locally. Doing it on one is enough.");
|
|
Service._ignorePrefObserver = true;
|
|
steamEngine.enabled = true;
|
|
do_check_true(stirlingEngine.enabled);
|
|
Service._ignorePrefObserver = false;
|
|
steamEngine.enabled = false;
|
|
do_check_false(stirlingEngine.enabled);
|
|
|
|
_("Sync.");
|
|
Weave.Service.login();
|
|
Weave.Service.sync();
|
|
|
|
_("Meta record no longer contains engines.");
|
|
do_check_false(!!metaWBO.data.engines.steam);
|
|
do_check_false(!!metaWBO.data.engines.stirling);
|
|
|
|
_("Server records are wiped.");
|
|
do_check_eq(steamCollection.payload, undefined);
|
|
do_check_eq(steamCrypto.payload, undefined);
|
|
do_check_eq(stirlingCollection.payload, undefined);
|
|
do_check_eq(stirlingCrypto.payload, undefined);
|
|
|
|
_("Engines continue to be disabled.");
|
|
do_check_false(steamEngine.enabled);
|
|
do_check_false(stirlingEngine.enabled);
|
|
} finally {
|
|
server.stop(do_test_finished);
|
|
Service.startOver();
|
|
}
|
|
}
|
|
|
|
function run_test() {
|
|
test_newAccount();
|
|
test_enabledLocally();
|
|
test_disabledLocally();
|
|
test_enabledRemotely();
|
|
test_disabledRemotely();
|
|
test_dependentEnginesEnabledLocally();
|
|
test_dependentEnginesDisabledLocally();
|
|
}
|