2010-08-25 15:49:45 -07:00
|
|
|
Cu.import("resource://services-sync/main.js");
|
2010-08-23 06:20:39 -07:00
|
|
|
Cu.import("resource://services-sync/util.js");
|
|
|
|
Cu.import("resource://services-sync/log4moz.js");
|
|
|
|
|
|
|
|
function run_test() {
|
|
|
|
let logger = Log4Moz.repository.rootLogger;
|
|
|
|
Log4Moz.repository.rootLogger.addAppender(new Log4Moz.DumpAppender());
|
|
|
|
|
|
|
|
let guidSvc = new FakeGUIDService();
|
|
|
|
let cryptoSvc = new FakeCryptoService();
|
|
|
|
|
|
|
|
let keys = new ServerCollection({privkey: new ServerWBO('privkey'),
|
|
|
|
pubkey: new ServerWBO('pubkey')});
|
|
|
|
let crypto = new ServerCollection({keys: new ServerWBO('keys'),
|
|
|
|
clients: new ServerWBO('clients')});
|
|
|
|
let clients = new ServerCollection();
|
|
|
|
let meta_global = new ServerWBO('global');
|
|
|
|
|
|
|
|
let collections = {};
|
|
|
|
function info_collections(request, response) {
|
|
|
|
let body = JSON.stringify(collections);
|
|
|
|
response.setStatusLine(request.httpVersion, 200, "OK");
|
|
|
|
response.bodyOutputStream.write(body, body.length);
|
|
|
|
}
|
|
|
|
|
|
|
|
function wasCalledHandler(wbo) {
|
|
|
|
let handler = wbo.handler();
|
|
|
|
return function() {
|
|
|
|
wbo.wasCalled = true;
|
|
|
|
handler.apply(this, arguments);
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
do_test_pending();
|
|
|
|
let server = httpd_setup({
|
|
|
|
"/1.0/johndoe/storage/keys": keys.handler(),
|
|
|
|
"/1.0/johndoe/storage/keys/pubkey": wasCalledHandler(keys.wbos.pubkey),
|
|
|
|
"/1.0/johndoe/storage/keys/privkey": wasCalledHandler(keys.wbos.privkey),
|
|
|
|
|
|
|
|
"/1.0/johndoe/storage/crypto": crypto.handler(),
|
|
|
|
"/1.0/johndoe/storage/crypto/keys": crypto.wbos.keys.handler(),
|
|
|
|
"/1.0/johndoe/storage/crypto/clients": crypto.wbos.clients.handler(),
|
|
|
|
|
|
|
|
"/1.0/johndoe/storage/clients": clients.handler(),
|
|
|
|
"/1.0/johndoe/storage/meta/global": wasCalledHandler(meta_global),
|
|
|
|
"/1.0/johndoe/info/collections": info_collections
|
|
|
|
});
|
|
|
|
|
|
|
|
try {
|
|
|
|
_("Log in.");
|
|
|
|
Weave.Service.serverURL = "http://localhost:8080/";
|
|
|
|
Weave.Service.clusterURL = "http://localhost:8080/";
|
|
|
|
Weave.Service.login("johndoe", "ilovejane", "foo");
|
|
|
|
do_check_true(Weave.Service.isLoggedIn);
|
|
|
|
|
|
|
|
_("Do an initial sync.");
|
|
|
|
let beforeSync = Date.now()/1000;
|
|
|
|
Weave.Service.sync();
|
|
|
|
|
|
|
|
_("Verify that the meta record and keys was uploaded.");
|
|
|
|
do_check_eq(meta_global.data.syncID, Weave.Service.syncID);
|
|
|
|
do_check_eq(meta_global.data.storageVersion, Weave.STORAGE_VERSION);
|
|
|
|
do_check_eq(meta_global.data.engines.clients.version, Weave.Clients.version);
|
|
|
|
do_check_eq(meta_global.data.engines.clients.syncID, Weave.Clients.syncID);
|
|
|
|
do_check_true(!!keys.wbos.privkey.payload);
|
|
|
|
do_check_true(!!keys.wbos.pubkey.payload);
|
|
|
|
|
|
|
|
_("Set the collection info hash so that sync() will remember the modified times for future runs.");
|
|
|
|
collections = {meta: Weave.Clients.lastSync,
|
|
|
|
keys: Weave.Clients.lastSync,
|
|
|
|
clients: Weave.Clients.lastSync,
|
|
|
|
crypto: Weave.Clients.lastSync};
|
|
|
|
Weave.Service.sync();
|
|
|
|
|
|
|
|
_("Sync again and verify that meta/global and keys weren't downloaded again");
|
|
|
|
meta_global.wasCalled = false;
|
|
|
|
keys.wbos.pubkey.wasCalled = false;
|
|
|
|
keys.wbos.privkey.wasCalled = false;
|
|
|
|
Weave.Service.sync();
|
|
|
|
do_check_false(meta_global.wasCalled);
|
|
|
|
do_check_false(keys.wbos.pubkey.wasCalled);
|
|
|
|
do_check_false(keys.wbos.privkey.wasCalled);
|
|
|
|
|
|
|
|
_("Fake modified records. This will cause a redownload, but not reupload since it hasn't changed.");
|
|
|
|
collections.meta += 42;
|
|
|
|
collections.keys += 23;
|
|
|
|
meta_global.wasCalled = false;
|
|
|
|
keys.wbos.pubkey.wasCalled = false;
|
|
|
|
keys.wbos.privkey.wasCalled = false;
|
|
|
|
|
|
|
|
let metaModified = meta_global.modified;
|
|
|
|
let pubkeyModified = keys.wbos.pubkey.modified;
|
|
|
|
let privkeyModified = keys.wbos.privkey.modified;
|
|
|
|
|
|
|
|
Weave.Service.sync();
|
|
|
|
do_check_true(meta_global.wasCalled);
|
|
|
|
do_check_true(keys.wbos.privkey.wasCalled);
|
|
|
|
do_check_true(keys.wbos.pubkey.wasCalled);
|
|
|
|
do_check_eq(metaModified, meta_global.modified);
|
|
|
|
do_check_eq(privkeyModified, keys.wbos.privkey.modified);
|
|
|
|
do_check_eq(pubkeyModified, keys.wbos.pubkey.modified);
|
|
|
|
|
|
|
|
} finally {
|
|
|
|
Weave.Svc.Prefs.resetBranch("");
|
|
|
|
server.stop(do_test_finished);
|
|
|
|
}
|
|
|
|
}
|