Diffstat (limited to 'frontend/gamma/tests/tests/Clipperz/PM/Connection.test.js') (more/less context) (ignore whitespace changes)
-rw-r--r-- | frontend/gamma/tests/tests/Clipperz/PM/Connection.test.js | 255 |
1 files changed, 255 insertions, 0 deletions
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/Connection.test.js b/frontend/gamma/tests/tests/Clipperz/PM/Connection.test.js new file mode 100644 index 0000000..e4d0d15 --- a/dev/null +++ b/frontend/gamma/tests/tests/Clipperz/PM/Connection.test.js @@ -0,0 +1,255 @@ +/* + +Copyright 2008-2011 Clipperz Srl + +This file is part of Clipperz's Javascript Crypto Library. +Javascript Crypto Library provides web developers with an extensive +and efficient set of cryptographic functions. The library aims to +obtain maximum execution speed while preserving modularity and +reusability. +For further information about its features and functionalities please +refer to http://www.clipperz.com + +* Javascript Crypto Library is free software: you can redistribute + it and/or modify it under the terms of the GNU Affero General Public + License as published by the Free Software Foundation, either version + 3 of the License, or (at your option) any later version. + +* Javascript Crypto Library is distributed in the hope that it will + be useful, but WITHOUT ANY WARRANTY; without even the implied + warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Affero General Public License for more details. + +* You should have received a copy of the GNU Affero General Public + License along with Javascript Crypto Library. If not, see + <http://www.gnu.org/licenses/>. + +*/ + +Clipperz.Crypto.PRNG.defaultRandomGenerator().fastEntropyAccumulationForTestingPurpose(); + +var tests = { + + //------------------------------------------------------------------------- + + 'simple_tests': function () { + var deferredResult; + + deferredResult = new Clipperz.Async.Deferred("simple_tests", {trace:false}); + deferredResult.addCallback(function() { + var connection; + + SimpleTest.is(Clipperz.PM.Connection.communicationProtocol.versions['current'], Clipperz.PM.Connection.SRP['1.1'], "the current connection is 1.1"); + + connection = new Clipperz.PM.Connection.communicationProtocol.versions['current'](); + SimpleTest.ok(connection != null, "can create a connection with the 'current' communication protocol"); + + SimpleTest.is(connection.proxy(), Clipperz.PM.Proxy.defaultProxy, "the connection uses the defaultProxy if no proxy is specified on the constructor"); + }); + + deferredResult.callback(); + + return deferredResult; + }, + + //------------------------------------------------------------------------- + + 'simpleProxy_tests': function () { + var deferredResult; + + deferredResult = new Clipperz.Async.Deferred("simple_tests", {trace:false}); + deferredResult.addCallback(function() { + var connection; + var proxy; + + proxy = new Clipperz.PM.Proxy(); + connection = new Clipperz.PM.Connection.communicationProtocol.versions['current']({proxy:proxy}); + SimpleTest.is(connection.proxy(), proxy, "the connection uses the specified proxy, when present"); + }); + + deferredResult.callback(); + + return deferredResult; + }, + + //------------------------------------------------------------------------- + + 'login_test': function () { + var deferredResult; + var connection; + var proxy; + + proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:false, shouldCheckExpectedRequests:true}); + connection = new Clipperz.PM.Connection.communicationProtocol.versions['current']({ + proxy: proxy, + getCredentialsFunction: function() { return {username:'joe', password:'clipperz'}; } + }); + + deferredResult = new Clipperz.Async.Deferred("login_tests", {trace:false}); + deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']); + deferredResult.addCallback(function() { + proxy.expectedRequests().unshift({ + name: "First handshake step", + functionName: 'handshake', + parameters: { + parameters: { + message: MochiKit.Base.partial(MochiKit.Base.operator.eq, "connect"), + version: MochiKit.Base.partial(MochiKit.Base.operator.eq, "0.2"), + parameters: { + C: MochiKit.Base.partial(MochiKit.Base.operator.eq, "f527cdd90d0d47f8524b4e165398ad1455eba515d04abd101d1e93b3c6ae0674"), + A: MochiKit.Base.operator.truth + } + } + } + }); + }); + deferredResult.addCallback(function() { + proxy.expectedRequests().unshift({ + name: "Second handshake step", + functionName: 'handshake', + parameters: { + parameters: { + message: MochiKit.Base.partial(MochiKit.Base.operator.eq, "credentialCheck"), + version: MochiKit.Base.partial(MochiKit.Base.operator.eq, "0.2"), + parameters: { + M1: MochiKit.Base.operator.truth + } + } + } + }); + }); + deferredResult.addMethod(connection, 'login'/*, 'joe', 'clipperz'*/); + deferredResult.addCallback(function(aResult) { + SimpleTest.is(aResult.result, 'done', "successfully logged in"); + }) + deferredResult.addErrback(SimpleTest.ok, false, "the login procedure should succeed, and NOT going through this code path"); + deferredResult.callback(); + + return deferredResult; + }, + + //------------------------------------------------------------------------- + + 'login_with_toll_test': function () { + var deferredResult; + var connection; + var proxy; + + proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, shouldCheckExpectedRequests:true}); + connection = new Clipperz.PM.Connection.communicationProtocol.versions['current']({ + proxy:proxy, + getCredentialsFunction: function() { return {username:'joe', password:'clipperz'}; } + }); + + deferredResult = new Clipperz.Async.Deferred("login_with_toll_test", {trace:false}); + deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']); + deferredResult.addCallback(function() { + proxy.expectedRequests().unshift({ + name: "knock step", + functionName: 'knock', + parameters: { + requestType: MochiKit.Base.partial(MochiKit.Base.operator.eq, "CONNECT") + } + }); + }); + deferredResult.addCallback(function() { + proxy.expectedRequests().unshift({ + name: "First handshake step", + functionName: 'handshake', + parameters: { + parameters: { + message: MochiKit.Base.partial(MochiKit.Base.operator.eq, "connect"), + version: MochiKit.Base.partial(MochiKit.Base.operator.eq, "0.2"), + parameters: { + C: MochiKit.Base.partial(MochiKit.Base.operator.eq, "f527cdd90d0d47f8524b4e165398ad1455eba515d04abd101d1e93b3c6ae0674"), + A: MochiKit.Base.operator.truth + } + }, + toll: { + targetValue: MochiKit.Base.operator.truth, + toll: MochiKit.Base.operator.truth + } + } + }); + }); + deferredResult.addCallback(function() { + proxy.expectedRequests().unshift({ + name: "Second handshake step", + functionName: 'handshake', + parameters: { + parameters: { + message: MochiKit.Base.partial(MochiKit.Base.operator.eq, "credentialCheck"), + version: MochiKit.Base.partial(MochiKit.Base.operator.eq, "0.2"), + parameters: { + M1: MochiKit.Base.operator.truth + } + }, + toll: { + targetValue: MochiKit.Base.operator.truth, + toll: MochiKit.Base.operator.truth + } + } + }); + }); + deferredResult.addMethod(connection, 'login'/*, 'joe', 'clipperz'*/); + deferredResult.addCallback(function(aResult) { + SimpleTest.is(aResult.result, 'done', "successfully logged in"); + }) + deferredResult.callback(); + + return deferredResult; + }, + + //------------------------------------------------------------------------- + + 'getUserDetails_test': function () { + var deferredResult; + var connection; + var proxy; + + proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, shouldCheckExpectedRequests:false}); + connection = new Clipperz.PM.Connection.communicationProtocol.versions['current']({ + proxy:proxy, + getCredentialsFunction: function() { return {username:'joe', password:'clipperz'}; } + }); + + deferredResult = new Clipperz.Async.Deferred("getUserDetails_test", {trace:false}); + deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']); + deferredResult.addMethod(connection, 'login'/*, 'joe', 'clipperz'*/); + deferredResult.addCallback(function(aResult) { + SimpleTest.is(aResult.result, 'done', "successfully logged in"); + }); + deferredResult.addMethod(proxy, 'setShouldCheckExpectedRequests', [ + { + name: "Get user details", + functionName: 'message', + parameters: { + parameters: { + message: MochiKit.Base.partial(MochiKit.Base.operator.eq, "getUserDetails"), + srpSharedSecret: MochiKit.Base.operator.truth + }, + toll: { + targetValue: MochiKit.Base.operator.truth, + toll: MochiKit.Base.operator.truth + } + } + } + ]); + deferredResult.addMethod(connection, 'message', 'getUserDetails'); + deferredResult.addCallback(function(aResult) { + SimpleTest.ok(aResult['header'] != null, "got user details - header"); + SimpleTest.ok(aResult['statistics'] != null, "got user details - statistics"); + SimpleTest.ok(aResult['version'] == '0.3', "got user details - version"); + }); + deferredResult.callback(); + + return deferredResult; + }, + + //------------------------------------------------------------------------- + 'syntaxFix': MochiKit.Base.noop +}; + +//############################################################################# + +SimpleTest.runDeferredTests("Clipperz.PM.Connection", tests, {trace:false}); |