diff --git a/addons/web/static/src/js/openerpframework.js b/addons/web/static/src/js/openerpframework.js index 062ecb8fe80..ab10d304b30 100644 --- a/addons/web/static/src/js/openerpframework.js +++ b/addons/web/static/src/js/openerpframework.js @@ -817,7 +817,7 @@ var genericJsonRpc = function(fct_name, params, fct) { return result.result; } }, function() { - console.error("JsonRPC communication error", _.toArray(arguments)); + //console.error("JsonRPC communication error", _.toArray(arguments)); var def = $.Deferred(); return def.reject.apply(def, ["communication"].concat(_.toArray(arguments))); }); @@ -899,11 +899,29 @@ openerp.jsonpRpc = function(url, fct_name, params, settings) { }); // append the iframe to the DOM (will trigger the first load) $form.after($iframe); + if (settings.timeout) { + realSetTimeout(function() { + deferred.reject({}); + }, settings.timeout); + } return deferred; } }); }; +var realSetTimeout = function(fct, millis) { + var finished = new Date().getTime() + millis; + var wait = function() { + var current = new Date().getTime(); + if (current < finished) { + setTimeout(wait, finished - current); + } else { + fct(); + } + }; + setTimeout(wait, millis); +}; + openerp.Session = openerp.Class.extend(openerp.PropertiesMixin, { triggers: { 'request': 'Request sent', diff --git a/addons/web/static/test/jsonrpc.js b/addons/web/static/test/jsonrpc.js index a8b901d3b1c..46b7ceeac6e 100644 --- a/addons/web/static/test/jsonrpc.js +++ b/addons/web/static/test/jsonrpc.js @@ -111,27 +111,54 @@ function (test) { notEqual(result, origin_tmp, "Values in the different sessions should be different"); }); });*/ + test('timeout-jsonrpc', {asserts: 1}, function () { + var session = new openerp.Session(); + return session.rpc("/gen_session_id", {}, {timeout: 1}).then(function() { + ok(false, "the request incorrectly succeeded"); + return $.when(); + }, function(a, e) { + e.preventDefault(); + ok(true, "the request correctly failed"); + return $.when(); + }); + }); + test('timeout-jsonprpc', {asserts: 1}, function () { + var session = new openerp.Session(); + session.origin_server = false; + return session.rpc("/gen_session_id", {}, {timeout: 1}).then(function() { + ok(false, "the request incorrectly succeeded"); + return $.when(); + }, function(a, e) { + e.preventDefault(); + ok(true, "the request correctly failed"); + return $.when(); + }); + }); + // desactivated because the phantomjs runner crash + /*test('timeout-jsonprpc2', {asserts: 1}, function () { + var session = new openerp.Session(); + session.origin_server = false; + return session.rpc("/gen_session_id", {}, {force2step: true, timeout: 1}).then(function() { + ok(false, "the request incorrectly succeeded"); + return $.when(); + }, function(a, e) { + e.preventDefault(); + ok(true, "the request correctly failed"); + return $.when(); + }); + });*/ }); - -// desactivated because I can't manage to make these work in the runbot -/* var login = "admin"; var password = "admin"; -var db = null; ropenerp.testing.section('jsonrpc-auth', { - setup: function() { - var session = new openerp.Session(); - return session.session_reload().then(function() { - db = session.db; - ok(db, "db must be valid"); - }); - }, + rpc: "rpc", }, function (test) { - test('basic-auth', {asserts: 4}, function () { - var session = new openerp.Session(); + test('basic-auth', {asserts: 3}, function () { + var db = ropenerp.session.db; + var session = new openerp.Session(null, null, {override_session: true}); equal(session.uid, undefined, "uid is expected to be undefined"); return session.session_authenticate(db, login, password).then(function() { equal(session.uid, 1, "Admin's uid must be 1"); @@ -145,14 +172,16 @@ function (test) { }); }); }); - test('share-sessions', {asserts: 7}, function () { - var session = new openerp.Session(); + test('share-sessions', {asserts: 6}, function () { + var db = ropenerp.session.db; + var session = new openerp.Session(null, null, {override_session: true}); var session2; return session.session_authenticate(db, login, password).then(function() { equal(session.uid, 1, "Admin's uid must be 1"); session2 = new openerp.Session(null, null, {session_id: session.session_id}); equal(session2.uid, undefined, "uid should be undefined"); equal(session2.override_session, true, "overwrite_session should be true"); + console.log("session_id", session.session_id); return session2.session_reload(); }).then(function() { equal(session2.uid, session.uid); @@ -167,8 +196,9 @@ function (test) { }); }); }); - test('models', {asserts: 3}, function () { - var session = new openerp.Session(); + test('models', {asserts: 2}, function () { + var db = ropenerp.session.db; + var session = new openerp.Session(null, null, {override_session: true}); return session.session_authenticate(db, login, password).then(function() { return session.model("res.users").call("search_read", {fields: ["login"], domain: [["id", "=", 1]]}); }).then(function(result) { @@ -176,6 +206,6 @@ function (test) { equal(result[0].login, "admin", "Must have admin's login"); }); }); -});*/ +}); })();