Make the three jsonrpc protocols work correctly with and without session overriding and added tests for all the cases.

That's one small step for a man, a giant leap for all the poor programmers that would have to use that shit one day.

bzr revid: nicolas.vanhoren@openerp.com-20130802150815-k2yuf0b3ku5fvx7a
This commit is contained in:
niv-openerp 2013-08-02 17:08:15 +02:00
parent adc722348c
commit ab03d9c280
3 changed files with 104 additions and 7 deletions

View File

@ -13,6 +13,8 @@ from openerp.modules import module
from .main import module_topological_sort
from .. import http
from ..http import request
NOMODULE_TEMPLATE = Template(u"""<!DOCTYPE html>
<html>
<head>
@ -162,3 +164,11 @@ class TestRunnerController(http.Controller):
for path in glob.glob(normalized_pattern):
# replace OS path separators (from join & normpath) by URI ones
yield path[len(root):].replace(os.path.sep, '/')
@http.route('/web/tests/set_session_value', type='json', auth="none")
def set_session_value(self, value):
request.session.some_test_value = value
@http.route('/web/tests/get_session_value', type='json', auth="none")
def get_session_value(self):
return request.session.some_test_value

View File

@ -914,9 +914,9 @@ openerp.web.JsonRPC = openerp.web.Class.extend(openerp.web.PropertiesMixin, {
function always() {
self.avoid_recursion = false;
}
if (this.override_server) {
return this.rpc("/gen_session_id", {}).then(function() {
debugger;
if (this.override_session) {
return this.rpc("/gen_session_id", {}).then(function(result) {
self.session_id = result;
}).always(always);
} else {
this.avoid_recursion = true;
@ -957,10 +957,15 @@ openerp.web.JsonRPC = openerp.web.Class.extend(openerp.web.PropertiesMixin, {
var fct;
if (self.origin_server) {
fct = openerp.web.jsonRpc;
if (self.override_session) {
options.headers = _.extend({}, options.headers, {
"X-Openerp-Session-Id": self.override_session ? self.session_id || '' : '',
});
}
} else {
fct = openerp.web.jsonpRpc;
url = self.url(url, null);
options.session_id = self.session_id;
options.session_id = self.session_id || '';
}
var p = fct(url, "call", params, options);
p = p.then(function (result) {

View File

@ -1,23 +1,105 @@
openerp.testing.section('jsonrpc', {},
function (test) {
test('basic', {asserts: 1}, function () {
test('basic-jsonrpc', {asserts: 1}, function () {
var session = new openerp.web.JsonRPC();
return session.rpc("/gen_session_id", {}).then(function(result) {
ok(result.length > 0, "Result returned by /gen_session_id");
});
});
test('jsonprpc', {asserts: 1}, function () {
test('basic-jsonprpc', {asserts: 1}, function () {
var session = new openerp.web.JsonRPC();
session.origin_server = false;
return session.rpc("/gen_session_id", {}).then(function(result) {
ok(result.length > 0, "Result returned by /gen_session_id");
});
});
test('jsonprpc2', {asserts: 1}, function () {
test('basic-jsonprpc2', {asserts: 1}, function () {
var session = new openerp.web.JsonRPC();
session.origin_server = false;
return session.rpc("/gen_session_id", {}, {force2step: true}).then(function(result) {
ok(result.length > 0, "Result returned by /gen_session_id");
});
});
test('session-jsonrpc', {asserts: 2}, function () {
var session = new openerp.web.JsonRPC();
var tmp = _.uniqueId("something");
return session.rpc("/web/tests/set_session_value", {value: tmp}).then(function() {
ok(true, "set_session returned");
return session.rpc("/web/tests/get_session_value", {});
}).then(function(result) {
equal(result, tmp, "Got the same value from the session");
});
});
test('session-jsonprpc', {asserts: 2}, function () {
var session = new openerp.web.JsonRPC();
session.origin_server = false;
var tmp = _.uniqueId("something");
return session.rpc("/web/tests/set_session_value", {value: tmp}).then(function() {
ok(true, "set_session returned");
return session.rpc("/web/tests/get_session_value", {});
}).then(function(result) {
equal(result, tmp, "Got the same value from the session");
});
});
test('session-jsonprpc2', {asserts: 2}, function () {
var session = new openerp.web.JsonRPC();
session.origin_server = false;
var tmp = _.uniqueId("something");
return session.rpc("/web/tests/set_session_value", {value: tmp}, {force2step: true}).then(function() {
ok(true, "set_session returned");
return session.rpc("/web/tests/get_session_value", {}, {force2step: true});
}).then(function(result) {
equal(result, tmp, "Got the same value from the session");
});
});
test('overridesession-jsonrpc', {asserts: 4}, function () {
var origin_session = new openerp.web.JsonRPC();
var origin_tmp = _.uniqueId("something");
var session = new openerp.web.JsonRPC(null, null, {override_session: true});
var tmp = _.uniqueId("something_else");
return session.rpc("/web/tests/set_session_value", {value: tmp}).then(function() {
ok(true, "set_session returned");
return origin_session.rpc("/web/tests/set_session_value", {value: origin_tmp});
}).then(function(result) {
ok(true, "set_session on origin returned");
return session.rpc("/web/tests/get_session_value", {});
}).then(function(result) {
equal(result, tmp, "Got the same value from the session");
notEqual(result, origin_tmp, "Values in the different sessions should be different");
});
});
test('overridesession-jsonprpc', {asserts: 4}, function () {
var origin_session = new openerp.web.JsonRPC();
var origin_tmp = _.uniqueId("something");
var session = new openerp.web.JsonRPC(null, null, {override_session: true});
var tmp = _.uniqueId("something_else");
session.origin_server = false;
return session.rpc("/web/tests/set_session_value", {value: tmp}).then(function() {
ok(true, "set_session returned");
return origin_session.rpc("/web/tests/set_session_value", {value: origin_tmp});
}).then(function(result) {
ok(true, "set_session on origin returned");
return session.rpc("/web/tests/get_session_value", {});
}).then(function(result) {
equal(result, tmp, "Got the same value from the session");
notEqual(result, origin_tmp, "Values in the different sessions should be different");
});
});
test('overridesession-jsonprpc2', {asserts: 4}, function () {
var origin_session = new openerp.web.JsonRPC();
var origin_tmp = _.uniqueId("something");
var session = new openerp.web.JsonRPC(null, null, {override_session: true});
var tmp = _.uniqueId("something_else");
session.origin_server = false;
return session.rpc("/web/tests/set_session_value", {value: tmp}, {force2step: true}).then(function() {
ok(true, "set_session returned");
return origin_session.rpc("/web/tests/set_session_value", {value: origin_tmp});
}).then(function(result) {
ok(true, "set_session on origin returned");
return session.rpc("/web/tests/get_session_value", {}, {force2step: true});
}).then(function(result) {
equal(result, tmp, "Got the same value from the session");
notEqual(result, origin_tmp, "Values in the different sessions should be different");
});
});
});