mirror of
https://github.com/classilla/tenfourfox.git
synced 2026-04-20 14:16:49 +00:00
199 lines
7.7 KiB
JavaScript
199 lines
7.7 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
Cu.import("resource://services-sync/engines/passwords.js");
|
|
Cu.import("resource://services-sync/service.js");
|
|
Cu.import("resource://services-sync/util.js");
|
|
|
|
|
|
function checkRecord(name, record, expectedCount, timeCreated,
|
|
expectedTimeCreated, timePasswordChanged,
|
|
expectedTimePasswordChanged, recordIsUpdated) {
|
|
let engine = Service.engineManager.get("passwords");
|
|
let store = engine._store;
|
|
|
|
let count = {};
|
|
let logins = Services.logins.findLogins(count, record.hostname,
|
|
record.formSubmitURL, null);
|
|
|
|
_("Record" + name + ":" + JSON.stringify(logins));
|
|
_("Count" + name + ":" + count.value);
|
|
|
|
do_check_eq(count.value, expectedCount);
|
|
|
|
if (expectedCount > 0) {
|
|
do_check_true(!!store.getAllIDs()[record.id]);
|
|
let stored_record = logins[0].QueryInterface(Ci.nsILoginMetaInfo);
|
|
|
|
if (timeCreated !== undefined) {
|
|
do_check_eq(stored_record.timeCreated, expectedTimeCreated);
|
|
}
|
|
|
|
if (timePasswordChanged !== undefined) {
|
|
if (recordIsUpdated) {
|
|
do_check_true(stored_record.timePasswordChanged >= expectedTimePasswordChanged);
|
|
} else {
|
|
do_check_eq(stored_record.timePasswordChanged, expectedTimePasswordChanged);
|
|
}
|
|
return stored_record.timePasswordChanged;
|
|
}
|
|
} else {
|
|
do_check_true(!store.getAllIDs()[record.id]);
|
|
}
|
|
}
|
|
|
|
|
|
function changePassword(name, hostname, password, expectedCount, timeCreated,
|
|
expectedTimeCreated, timePasswordChanged,
|
|
expectedTimePasswordChanged, insert, recordIsUpdated) {
|
|
|
|
const BOGUS_GUID = "zzzzzz" + hostname;
|
|
|
|
let record = {id: BOGUS_GUID,
|
|
hostname: hostname,
|
|
formSubmitURL: hostname,
|
|
username: "john",
|
|
password: password,
|
|
usernameField: "username",
|
|
passwordField: "password"};
|
|
|
|
if (timeCreated !== undefined) {
|
|
record.timeCreated = timeCreated;
|
|
}
|
|
|
|
if (timePasswordChanged !== undefined) {
|
|
record.timePasswordChanged = timePasswordChanged;
|
|
}
|
|
|
|
|
|
let engine = Service.engineManager.get("passwords");
|
|
let store = engine._store;
|
|
|
|
if (insert) {
|
|
do_check_eq(store.applyIncomingBatch([record]).length, 0);
|
|
}
|
|
|
|
return checkRecord(name, record, expectedCount, timeCreated,
|
|
expectedTimeCreated, timePasswordChanged,
|
|
expectedTimePasswordChanged, recordIsUpdated);
|
|
|
|
}
|
|
|
|
|
|
function test_apply_records_with_times(hostname, timeCreated, timePasswordChanged) {
|
|
// The following record is going to be inserted in the store and it needs
|
|
// to be found there. Then its timestamps are going to be compared to
|
|
// the expected values.
|
|
changePassword(" ", hostname, "password", 1, timeCreated, timeCreated,
|
|
timePasswordChanged, timePasswordChanged, true);
|
|
}
|
|
|
|
|
|
function test_apply_multiple_records_with_times() {
|
|
// The following records are going to be inserted in the store and they need
|
|
// to be found there. Then their timestamps are going to be compared to
|
|
// the expected values.
|
|
changePassword("A", "http://foo.a.com", "password", 1, undefined, undefined,
|
|
undefined, undefined, true);
|
|
changePassword("B", "http://foo.b.com", "password", 1, 1000, 1000, undefined,
|
|
undefined, true);
|
|
changePassword("C", "http://foo.c.com", "password", 1, undefined, undefined,
|
|
1000, 1000, true);
|
|
changePassword("D", "http://foo.d.com", "password", 1, 1000, 1000, 1000,
|
|
1000, true);
|
|
|
|
// The following records are not going to be inserted in the store and they
|
|
// are not going to be found there.
|
|
changePassword("NotInStoreA", "http://foo.aaaa.com", "password", 0,
|
|
undefined, undefined, undefined, undefined, false);
|
|
changePassword("NotInStoreB", "http://foo.bbbb.com", "password", 0, 1000,
|
|
1000, undefined, undefined, false);
|
|
changePassword("NotInStoreC", "http://foo.cccc.com", "password", 0,
|
|
undefined, undefined, 1000, 1000, false);
|
|
changePassword("NotInStoreD", "http://foo.dddd.com", "password", 0, 1000,
|
|
1000, 1000, 1000, false);
|
|
}
|
|
|
|
|
|
function test_apply_same_record_with_different_times() {
|
|
// The following record is going to be inserted multiple times in the store
|
|
// and it needs to be found there. Then its timestamps are going to be
|
|
// compared to the expected values.
|
|
var timePasswordChanged = 100;
|
|
timePasswordChanged = changePassword("A", "http://a.tn", "password", 1, 100,
|
|
100, 100, timePasswordChanged, true);
|
|
timePasswordChanged = changePassword("A", "http://a.tn", "password", 1, 100,
|
|
100, 800, timePasswordChanged, true,
|
|
true);
|
|
timePasswordChanged = changePassword("A", "http://a.tn", "password", 1, 500,
|
|
100, 800, timePasswordChanged, true,
|
|
true);
|
|
timePasswordChanged = changePassword("A", "http://a.tn", "password2", 1, 500,
|
|
100, 1536213005222, timePasswordChanged,
|
|
true, true);
|
|
timePasswordChanged = changePassword("A", "http://a.tn", "password2", 1, 500,
|
|
100, 800, timePasswordChanged, true, true);
|
|
}
|
|
|
|
|
|
function run_test() {
|
|
initTestLogging("Trace");
|
|
Log.repository.getLogger("Sync.Engine.Passwords").level = Log.Level.Trace;
|
|
Log.repository.getLogger("Sync.Store.Passwords").level = Log.Level.Trace;
|
|
|
|
const BOGUS_GUID_A = "zzzzzzzzzzzz";
|
|
const BOGUS_GUID_B = "yyyyyyyyyyyy";
|
|
let recordA = {id: BOGUS_GUID_A,
|
|
hostname: "http://foo.bar.com",
|
|
formSubmitURL: "http://foo.bar.com/baz",
|
|
httpRealm: "secure",
|
|
username: "john",
|
|
password: "smith",
|
|
usernameField: "username",
|
|
passwordField: "password"};
|
|
let recordB = {id: BOGUS_GUID_B,
|
|
hostname: "http://foo.baz.com",
|
|
formSubmitURL: "http://foo.baz.com/baz",
|
|
username: "john",
|
|
password: "smith",
|
|
usernameField: "username",
|
|
passwordField: "password"};
|
|
|
|
let engine = Service.engineManager.get("passwords");
|
|
let store = engine._store;
|
|
|
|
try {
|
|
do_check_eq(store.applyIncomingBatch([recordA, recordB]).length, 0);
|
|
|
|
// Only the good record makes it to Services.logins.
|
|
let badCount = {};
|
|
let goodCount = {};
|
|
let badLogins = Services.logins.findLogins(badCount, recordA.hostname,
|
|
recordA.formSubmitURL,
|
|
recordA.httpRealm);
|
|
let goodLogins = Services.logins.findLogins(goodCount, recordB.hostname,
|
|
recordB.formSubmitURL, null);
|
|
|
|
_("Bad: " + JSON.stringify(badLogins));
|
|
_("Good: " + JSON.stringify(goodLogins));
|
|
_("Count: " + badCount.value + ", " + goodCount.value);
|
|
|
|
do_check_eq(goodCount.value, 1);
|
|
do_check_eq(badCount.value, 0);
|
|
|
|
do_check_true(!!store.getAllIDs()[BOGUS_GUID_B]);
|
|
do_check_true(!store.getAllIDs()[BOGUS_GUID_A]);
|
|
|
|
test_apply_records_with_times("http://afoo.baz.com", undefined, undefined);
|
|
test_apply_records_with_times("http://bfoo.baz.com", 1000, undefined);
|
|
test_apply_records_with_times("http://cfoo.baz.com", undefined, 2000);
|
|
test_apply_records_with_times("http://dfoo.baz.com", 1000, 2000);
|
|
|
|
test_apply_multiple_records_with_times();
|
|
|
|
test_apply_same_record_with_different_times();
|
|
|
|
} finally {
|
|
store.wipe();
|
|
}
|
|
} |