Bug 792546 - Part 2: Move fake services into testing-only JS module; r=rnewman

We still import these functions in head.js. This will be cleaned up
later once functionality from head.js that uses them is moved into a
testing-only JS module.
This commit is contained in:
Gregory Szorc 2012-09-24 13:42:54 -07:00
Родитель feb37233f3
Коммит d16874d957
4 изменённых файлов: 107 добавлений и 83 удалений

Просмотреть файл

@ -63,6 +63,7 @@ sync_stage_modules := \
$(NULL) $(NULL)
sync_testing_modules := \ sync_testing_modules := \
fakeservices.js \
rotaryengine.js \ rotaryengine.js \
$(NULL) $(NULL)

Просмотреть файл

@ -0,0 +1,103 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
const EXPORTED_SYMBOLS = [
"FakeCryptoService",
"FakeFilesystemService",
"FakeGUIDService",
"fakeSHA256HMAC",
];
const {utils: Cu} = Components;
Cu.import("resource://services-sync/record.js");
Cu.import("resource://services-sync/util.js");
let btoa = Cu.import("resource://services-common/log4moz.js").btoa;
function FakeFilesystemService(contents) {
this.fakeContents = contents;
let self = this;
Utils.jsonSave = function jsonSave(filePath, that, obj, callback) {
let json = typeof obj == "function" ? obj.call(that) : obj;
self.fakeContents["weave/" + filePath + ".json"] = JSON.stringify(json);
callback.call(that);
};
Utils.jsonLoad = function jsonLoad(filePath, that, cb) {
let obj;
let json = self.fakeContents["weave/" + filePath + ".json"];
if (json) {
obj = JSON.parse(json);
}
cb.call(that, obj);
};
};
function fakeSHA256HMAC(message) {
message = message.substr(0, 64);
while (message.length < 64) {
message += " ";
}
return message;
}
function FakeGUIDService() {
let latestGUID = 0;
Utils.makeGUID = function makeGUID() {
return "fake-guid-" + latestGUID++;
};
}
/*
* Mock implementation of WeaveCrypto. It does not encrypt or
* decrypt, merely returning the input verbatim.
*/
function FakeCryptoService() {
this.counter = 0;
delete Svc.Crypto; // get rid of the getter first
Svc.Crypto = this;
CryptoWrapper.prototype.ciphertextHMAC = function ciphertextHMAC(keyBundle) {
return fakeSHA256HMAC(this.ciphertext);
};
}
FakeCryptoService.prototype = {
encrypt: function encrypt(clearText, symmetricKey, iv) {
return clearText;
},
decrypt: function decrypt(cipherText, symmetricKey, iv) {
return cipherText;
},
generateRandomKey: function generateRandomKey() {
return btoa("fake-symmetric-key-" + this.counter++);
},
generateRandomIV: function generateRandomIV() {
// A base64-encoded IV is 24 characters long
return btoa("fake-fake-fake-random-iv");
},
expandData: function expandData(data, len) {
return data;
},
deriveKeyFromPassphrase: function deriveKeyFromPassphrase(passphrase,
salt, keyLength) {
return "some derived key string composed of bytes";
},
generateRandomBytes: function generateRandomBytes(byteCount) {
return "not-so-random-now-are-we-HA-HA-HA! >:)".slice(byteCount);
}
};

Просмотреть файл

@ -6,6 +6,8 @@ Cu.import("resource://services-common/async.js");
Cu.import("resource://services-sync/util.js"); Cu.import("resource://services-sync/util.js");
Cu.import("resource://services-sync/record.js"); Cu.import("resource://services-sync/record.js");
Cu.import("resource://services-sync/engines.js"); Cu.import("resource://services-sync/engines.js");
Cu.import("resource://testing-common/services/sync/fakeservices.js");
let btoa; let btoa;
let atob; let atob;
@ -144,89 +146,6 @@ function uninstallAddon(addon) {
Async.waitForSyncCallback(cb); Async.waitForSyncCallback(cb);
} }
function FakeFilesystemService(contents) {
this.fakeContents = contents;
let self = this;
Utils.jsonSave = function jsonSave(filePath, that, obj, callback) {
let json = typeof obj == "function" ? obj.call(that) : obj;
self.fakeContents["weave/" + filePath + ".json"] = JSON.stringify(json);
callback.call(that);
};
Utils.jsonLoad = function jsonLoad(filePath, that, callback) {
let obj;
let json = self.fakeContents["weave/" + filePath + ".json"];
if (json) {
obj = JSON.parse(json);
}
callback.call(that, obj);
};
};
function FakeGUIDService() {
let latestGUID = 0;
Utils.makeGUID = function fake_makeGUID() {
return "fake-guid-" + latestGUID++;
};
}
function fakeSHA256HMAC(message) {
message = message.substr(0, 64);
while (message.length < 64) {
message += " ";
}
return message;
}
/*
* Mock implementation of WeaveCrypto. It does not encrypt or
* decrypt, merely returning the input verbatim.
*/
function FakeCryptoService() {
this.counter = 0;
delete Svc.Crypto; // get rid of the getter first
Svc.Crypto = this;
CryptoWrapper.prototype.ciphertextHMAC = function ciphertextHMAC(keyBundle) {
return fakeSHA256HMAC(this.ciphertext);
};
}
FakeCryptoService.prototype = {
encrypt: function(aClearText, aSymmetricKey, aIV) {
return aClearText;
},
decrypt: function(aCipherText, aSymmetricKey, aIV) {
return aCipherText;
},
generateRandomKey: function() {
return btoa("fake-symmetric-key-" + this.counter++);
},
generateRandomIV: function() {
// A base64-encoded IV is 24 characters long
return btoa("fake-fake-fake-random-iv");
},
expandData : function expandData(data, len) {
return data;
},
deriveKeyFromPassphrase : function (passphrase, salt, keyLength) {
return "some derived key string composed of bytes";
},
generateRandomBytes: function(aByteCount) {
return "not-so-random-now-are-we-HA-HA-HA! >:)".slice(aByteCount);
}
};
function setBasicCredentials(username, password, syncKey) { function setBasicCredentials(username, password, syncKey) {
let ns = {}; let ns = {};
Cu.import("resource://services-sync/service.js", ns); Cu.import("resource://services-sync/service.js", ns);

Просмотреть файл

@ -32,6 +32,7 @@ const modules = [
]; ];
const testingModules = [ const testingModules = [
"fakeservices.js",
"rotaryengine.js", "rotaryengine.js",
]; ];