diff --git a/openerp/tests/common.py b/openerp/tests/common.py index 44696384ce7..5b1b8096edf 100644 --- a/openerp/tests/common.py +++ b/openerp/tests/common.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- import os import time +import unittest2 import xmlrpclib import openerp @@ -16,15 +17,6 @@ ADMIN_USER = 'admin' ADMIN_USER_ID = 1 ADMIN_PASSWORD = 'admin' -common_proxy_60 = None -db_proxy_60 = None -object_proxy_60 = None - -common_proxy_61 = None -db_proxy_61 = None -model_proxy_61 = None -model_uri_61 = None - def start_openerp(): """ Start the OpenERP server similary to the openerp-server script. @@ -34,33 +26,52 @@ def start_openerp(): # Ugly way to ensure the server is listening. time.sleep(2) -def create_xmlrpc_proxies(): +def stop_openerp(): """ - setup some xmlrpclib proxies. + Shutdown the OpenERP server similarly to a single ctrl-c. """ - global common_proxy_60 - global db_proxy_60 - global object_proxy_60 - - # Use the old (pre 6.1) API. - url = 'http://%s:%d/xmlrpc/' % (HOST, PORT) - common_proxy_60 = xmlrpclib.ServerProxy(url + 'common') - db_proxy_60 = xmlrpclib.ServerProxy(url + 'db') - object_proxy_60 = xmlrpclib.ServerProxy(url + 'object') - - global common_proxy_61 - global db_proxy_61 - global model_proxy_61 - global model_uri_61 - - # Use the new (6.1) API. - model_uri_61 = 'http://%s:%d/openerp/xmlrpc/1/' % (HOST, PORT) - common_proxy_61 = xmlrpclib.ServerProxy(model_uri_61 + 'common') - db_proxy_61 = xmlrpclib.ServerProxy(model_uri_61 + 'db') - model_proxy_61 = xmlrpclib.ServerProxy(model_uri_61 + 'model/' + DB) - -def tearDownModule(): - """ Shutdown the OpenERP server similarly to a single ctrl-c. """ openerp.service.stop_services() +class TransactionCase(unittest2.TestCase): + """ + Subclass of TestCase with a single transaction, rolled-back at the end of + the tests. + """ + + def __init__(self, name): + super(TransactionCase, self).__init__(name) + self.registry = lambda model: \ + openerp.modules.registry.RegistryManager.get(DB)[model] + + def setUp(self): + self.cr = openerp.modules.registry.RegistryManager.get(DB).db.cursor() + + def tearDown(self): + self.cr.rollback() + self.cr.close() + +class RpcCase(unittest2.TestCase): + """ + Subclass of TestCase with a few XML-RPC proxies. + """ + + def __init__(self, name): + super(RpcCase, self).__init__(name) + + class A(object): + pass + self.proxy = A() + + # Use the old (pre 6.1) API. + self.proxy.url_60 = url_60 = 'http://%s:%d/xmlrpc/' % (HOST, PORT) + self.proxy.common_60 = xmlrpclib.ServerProxy(url_60 + 'common') + self.proxy.db_60 = xmlrpclib.ServerProxy(url_60 + 'db') + self.proxy.object_60 = xmlrpclib.ServerProxy(url_60 + 'object') + + # Use the new (6.1) API. + self.proxy.url_61 = url_61 = 'http://%s:%d/openerp/xmlrpc/1/' % (HOST, PORT) + self.proxy.common_61 = xmlrpclib.ServerProxy(url_61 + 'common') + self.proxy.db_61 = xmlrpclib.ServerProxy(url_61 + 'db') + self.proxy.model_61 = xmlrpclib.ServerProxy(url_61 + 'model/' + DB) + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/tests/test_ir_sequence.py b/openerp/tests/test_ir_sequence.py index 2e9623c09b9..f16a7b4b603 100644 --- a/openerp/tests/test_ir_sequence.py +++ b/openerp/tests/test_ir_sequence.py @@ -16,11 +16,6 @@ import common DB = common.DB ADMIN_USER_ID = common.ADMIN_USER_ID -def setUpModule(): - common.create_xmlrpc_proxies() - -tearDownModule = common.tearDownModule - def registry(model): return openerp.modules.registry.RegistryManager.get(DB)[model] diff --git a/openerp/tests/test_orm.py b/openerp/tests/test_orm.py index c11d4cd19d2..0c4046df2a4 100644 --- a/openerp/tests/test_orm.py +++ b/openerp/tests/test_orm.py @@ -2,9 +2,10 @@ import os import unittest2 import openerp +import common -UID = 1 -DB = openerp.tools.config['db_name'] +UID = common.ADMIN_USER_ID +DB = common.DB CREATE = lambda values: (0, False, values) UPDATE = lambda id, values: (1, id, values) @@ -14,16 +15,12 @@ LINK_TO = lambda id: (4, id, False) DELETE_ALL = lambda: (5, False, False) REPLACE_WITH = lambda ids: (6, False, ids) -class TestO2MSerialization(unittest2.TestCase): +class TestO2MSerialization(common.TransactionCase): def setUp(self): - self.cr = openerp.modules.registry.RegistryManager.get(DB).db.cursor() - self.partner = openerp.modules.registry.RegistryManager.get(DB)['res.partner'] - self.address = openerp.modules.registry.RegistryManager.get(DB)['res.partner.address'] - - def tearDown(self): - self.cr.rollback() - self.cr.close() + super(TestO2MSerialization, self).setUp() + self.partner = self.registry('res.partner') + self.address = self.registry('res.partner.address') def test_no_command(self): " empty list of commands yields an empty list of records " diff --git a/openerp/tests/test_xmlrpc.py b/openerp/tests/test_xmlrpc.py index 954d3447360..c24d6ba706e 100644 --- a/openerp/tests/test_xmlrpc.py +++ b/openerp/tests/test_xmlrpc.py @@ -12,52 +12,51 @@ import xmlrpclib import openerp import common +import core DB = common.DB ADMIN_USER = common.ADMIN_USER ADMIN_USER_ID = common.ADMIN_USER_ID ADMIN_PASSWORD = common.ADMIN_PASSWORD -def setUpModule(): - common.start_openerp() - common.create_xmlrpc_proxies() +setUpModule = common.start_openerp -tearDownModule = common.tearDownModule +tearDownModule = common.stop_openerp -class test_xmlrpc(unittest2.TestCase): +class test_xmlrpc(core.RpcCase): def test_00_xmlrpc_create_database_polling(self): """ Simulate a OpenERP client requesting the creation of a database and polling the server until the creation is complete. """ - progress_id = common.db_proxy_60.create(ADMIN_PASSWORD, DB, True, + progress_id = self.proxy.db_60.create(ADMIN_PASSWORD, DB, True, False, ADMIN_PASSWORD) while True: time.sleep(1) - progress, users = common.db_proxy_60.get_progress(ADMIN_PASSWORD, + progress, users = self.proxy.db_60.get_progress(ADMIN_PASSWORD, progress_id) if progress == 1.0: break def test_xmlrpc_login(self): """ Try to login on the common service. """ - uid = common.common_proxy_60.login(DB, ADMIN_USER, ADMIN_PASSWORD) + uid = self.proxy.common_60.login(DB, ADMIN_USER, ADMIN_PASSWORD) assert uid == ADMIN_USER_ID def test_xmlrpc_ir_model_search(self): """ Try a search on the object service. """ - ids = common.object_proxy_60.execute(DB, ADMIN_USER_ID, ADMIN_PASSWORD, + ids = self.proxy.object_60.execute(DB, ADMIN_USER_ID, ADMIN_PASSWORD, 'ir.model', 'search', []) assert ids - ids = common.object_proxy_60.execute(DB, ADMIN_USER_ID, ADMIN_PASSWORD, + ids = self.proxy.object_60.execute(DB, ADMIN_USER_ID, ADMIN_PASSWORD, 'ir.model', 'search', [], {}) assert ids def test_xmlrpc_61_ir_model_search(self): """ Try a search on the object service. """ - proxy = xmlrpclib.ServerProxy(common.model_uri_61 + 'model/' + DB + '/ir.model') + proxy = xmlrpclib.ServerProxy(self.proxy.url_61 + 'model/' + DB + '/ir.model') ids = proxy.execute(ADMIN_USER_ID, ADMIN_PASSWORD, 'search', []) assert ids ids = proxy.execute(ADMIN_USER_ID, ADMIN_PASSWORD, 'search', [], {})