Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

"use strict";
var nextUniqId = 0;
function getNewUtils() {
const { Utils } = ChromeUtils.importESModule(
);
return Utils;
}
// A collection with a dump that's packaged on all builds where this test runs,
// including on Android at mobile/android/installer/package-manifest.in
const TEST_BUCKET = "main";
const TEST_COLLECTION = "password-recipes";
let client;
let DUMP_LAST_MODIFIED;
async function importData(records) {
await RemoteSettingsWorker._execute("_test_only_import", [
TEST_BUCKET,
TEST_COLLECTION,
records,
records[0]?.last_modified || 0,
]);
}
async function clear_state() {
Services.env.set("MOZ_REMOTE_SETTINGS_DEVTOOLS", "0");
Services.prefs.clearUserPref("services.settings.server");
Services.prefs.clearUserPref("services.settings.preview_enabled");
await client.db.clear();
}
add_setup(async function () {
// Set this env vars in order to test the code path where the
// server URL can only be overridden from Dev Tools.
// See `isRunningTests` in `services/settings/Utils.sys.mjs`.
const before = Services.env.get("MOZ_DISABLE_NONLOCAL_CONNECTIONS");
Services.env.set("MOZ_DISABLE_NONLOCAL_CONNECTIONS", "0");
// "services.settings.server" pref is not set.
// Test defaults to an unreachable server,
// and will only load from the dump if any.
client = new RemoteSettingsClient(TEST_COLLECTION);
const dump = await SharedUtils.loadJSONDump(TEST_BUCKET, TEST_COLLECTION);
DUMP_LAST_MODIFIED = dump.timestamp;
registerCleanupFunction(() => {
clear_state();
Services.env.set("MOZ_DISABLE_NONLOCAL_CONNECTIONS", before);
});
});
add_task(clear_state);
add_task(
{
skip_if: () => !AppConstants.RELEASE_OR_BETA,
},
async function test_server_url_cannot_be_toggled_in_release() {
Services.prefs.setStringPref(
"services.settings.server",
);
const Utils = getNewUtils();
Assert.equal(
Utils.SERVER_URL,
AppConstants.REMOTE_SETTINGS_SERVER_URL,
"Server url pref was not read in release"
);
}
);
add_task(
{
skip_if: () => AppConstants.RELEASE_OR_BETA,
},
async function test_server_url_cannot_be_toggled_in_dev_nightly() {
Services.prefs.setStringPref(
"services.settings.server",
);
const Utils = getNewUtils();
Assert.notEqual(
Utils.SERVER_URL,
AppConstants.REMOTE_SETTINGS_SERVER_URL,
"Server url pref was read in nightly/dev"
);
}
);
add_task(clear_state);
add_task(
{
skip_if: () => !AppConstants.RELEASE_OR_BETA,
},
async function test_preview_mode_cannot_be_toggled_in_release() {
Services.prefs.setBoolPref("services.settings.preview_enabled", true);
const Utils = getNewUtils();
Assert.ok(!Utils.PREVIEW_MODE, "Preview mode pref was not read in release");
}
);
add_task(clear_state);
add_task(
{
skip_if: () => AppConstants.RELEASE_OR_BETA,
},
async function test_preview_mode_cannot_be_toggled_in_dev_nightly() {
Services.prefs.setBoolPref("services.settings.preview_enabled", true);
const Utils = getNewUtils();
Assert.ok(Utils.PREVIEW_MODE, "Preview mode pref is read in dev/nightly");
}
);
add_task(clear_state);
add_task(
{
skip_if: () => !AppConstants.RELEASE_OR_BETA,
},
async function test_load_dumps_will_always_be_loaded_in_release() {
Services.prefs.setStringPref(
"services.settings.server",
);
const Utils = getNewUtils();
Assert.equal(
Utils.SERVER_URL,
AppConstants.REMOTE_SETTINGS_SERVER_URL,
"Server url pref was not read"
);
Assert.ok(Utils.LOAD_DUMPS, "Dumps will always be loaded");
}
);
add_task(
{
skip_if: () => AppConstants.RELEASE_OR_BETA,
},
async function test_load_dumps_can_be_disabled_in_dev_nightly() {
Services.prefs.setStringPref(
"services.settings.server",
);
const Utils = getNewUtils();
Assert.notEqual(
Utils.SERVER_URL,
AppConstants.REMOTE_SETTINGS_SERVER_URL,
"Server url pref was read"
);
Assert.ok(!Utils.LOAD_DUMPS, "Dumps are not loaded if server is not prod");
}
);
add_task(clear_state);
add_task(
async function test_server_url_can_be_changed_in_all_versions_if_running_for_devtools() {
Services.env.set("MOZ_REMOTE_SETTINGS_DEVTOOLS", "1");
Services.prefs.setStringPref(
"services.settings.server",
);
const Utils = getNewUtils();
Assert.notEqual(
Utils.SERVER_URL,
AppConstants.REMOTE_SETTINGS_SERVER_URL,
"Server url pref was read"
);
}
);
add_task(clear_state);
add_task(
async function test_preview_mode_can_be_changed_in_all_versions_if_running_for_devtools() {
Services.env.set("MOZ_REMOTE_SETTINGS_DEVTOOLS", "1");
Services.prefs.setBoolPref("services.settings.preview_enabled", true);
const Utils = getNewUtils();
Assert.ok(Utils.PREVIEW_MODE, "Preview mode pref was read");
}
);
add_task(clear_state);
add_task(
async function test_dumps_are_not_loaded_if_server_is_not_prod_if_running_for_devtools() {
Services.env.set("MOZ_REMOTE_SETTINGS_DEVTOOLS", "1");
Services.prefs.setStringPref(
"services.settings.server",
);
const Utils = getNewUtils();
Assert.ok(!Utils.LOAD_DUMPS, "Dumps won't be loaded");
// Dump is updated regularly, verify that the dump matches our expectations
// before running the test.
Assert.greater(
DUMP_LAST_MODIFIED,
1234,
"Assuming dump to be newer than dummy 1234"
);
await importData([{ last_modified: 1234, id: "dummy" }]);
const after = await client.get();
Assert.deepEqual(
after,
[{ last_modified: 1234, id: "dummy" }],
"Should have kept the original import"
);
Assert.equal(
await client.getLastModified(),
1234,
"Should have kept the import's timestamp"
);
}
);
add_task(clear_state);
add_task(
async function test_dumps_are_loaded_if_server_is_prod_if_running_for_devtools() {
Services.env.set("MOZ_REMOTE_SETTINGS_DEVTOOLS", "1");
Services.prefs.setStringPref(
"services.settings.server",
AppConstants.REMOTE_SETTINGS_SERVER_URL
);
const Utils = getNewUtils();
Assert.ok(Utils.LOAD_DUMPS, "dumps are loaded if prod");
}
);
add_task(clear_state);