From d16874d957e701ecf287c966f784575ef46e24d0 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 24 Sep 2012 13:42:54 -0700 Subject: [PATCH] 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. --- services/sync/Makefile.in | 1 + services/sync/modules-testing/fakeservices.js | 103 ++++++++++++++++++ services/sync/tests/unit/head_helpers.js | 85 +-------------- services/sync/tests/unit/test_load_modules.js | 1 + 4 files changed, 107 insertions(+), 83 deletions(-) create mode 100644 services/sync/modules-testing/fakeservices.js diff --git a/services/sync/Makefile.in b/services/sync/Makefile.in index 796fcf8aebf2..ca8ca8f1fe6f 100644 --- a/services/sync/Makefile.in +++ b/services/sync/Makefile.in @@ -63,6 +63,7 @@ sync_stage_modules := \ $(NULL) sync_testing_modules := \ + fakeservices.js \ rotaryengine.js \ $(NULL) diff --git a/services/sync/modules-testing/fakeservices.js b/services/sync/modules-testing/fakeservices.js new file mode 100644 index 000000000000..48e4922c88c5 --- /dev/null +++ b/services/sync/modules-testing/fakeservices.js @@ -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); + } +}; + diff --git a/services/sync/tests/unit/head_helpers.js b/services/sync/tests/unit/head_helpers.js index 1e7e20973b32..d432c41af2db 100644 --- a/services/sync/tests/unit/head_helpers.js +++ b/services/sync/tests/unit/head_helpers.js @@ -6,6 +6,8 @@ Cu.import("resource://services-common/async.js"); Cu.import("resource://services-sync/util.js"); Cu.import("resource://services-sync/record.js"); Cu.import("resource://services-sync/engines.js"); +Cu.import("resource://testing-common/services/sync/fakeservices.js"); + let btoa; let atob; @@ -144,89 +146,6 @@ function uninstallAddon(addon) { 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) { let ns = {}; Cu.import("resource://services-sync/service.js", ns); diff --git a/services/sync/tests/unit/test_load_modules.js b/services/sync/tests/unit/test_load_modules.js index c9f840b95078..9580d269d55c 100644 --- a/services/sync/tests/unit/test_load_modules.js +++ b/services/sync/tests/unit/test_load_modules.js @@ -32,6 +32,7 @@ const modules = [ ]; const testingModules = [ + "fakeservices.js", "rotaryengine.js", ];