From 083d3fc91e149dae323e664b0ec1ff581125450b Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Fri, 11 Oct 2013 15:30:54 +0200 Subject: [PATCH] Added tests about timeouts and implemented it in jsonprpc2 bzr revid: nicolas.vanhoren@openerp.com-20131011133054-0dx3wxqcqbdocnlf --- addons/web/static/src/js/openerpframework.js | 20 ++++++++++- addons/web/static/test/jsonrpc.js | 36 ++++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) 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 f8a1d325375..93aa9894455 100644 --- a/addons/web/static/test/jsonrpc.js +++ b/addons/web/static/test/jsonrpc.js @@ -111,6 +111,42 @@ 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(); + }); + }); }); var login = "admin";