[IMP] added timeout handling in jsonprpc2 and added more javascript tests about jsonrpc connections and sessions handling

bzr revid: nicolas.vanhoren@openerp.com-20131011141156-po7fh1sc7gp64k9x
This commit is contained in:
niv-openerp
2013-10-11 16:11:56 +02:00
2 changed files with 67 additions and 19 deletions
+19 -1
View File
@@ -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',
+48 -18
View File
@@ -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");
});
});
});*/
});
})();