[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:
@@ -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',
|
||||
|
||||
@@ -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");
|
||||
});
|
||||
});
|
||||
});*/
|
||||
});
|
||||
|
||||
})();
|
||||
|
||||
Reference in New Issue
Block a user