Browse Source
[MIG] auth_session_timeout: Migrate to v10
[MIG] auth_session_timeout: Migrate to v10
* Bump versions * Installable to True * Add Usage section to ReadMe w/ Runbot link * `_crypt_context` now directly exposes the `CryptContext` * Change all instances of openerp to odoo * Add test coverage to IrConfigParameter * Add test coverage for res.users * Remove db from `get_session_parameters` method call * Remove deprecated skiparg for ormcache * Fix tests & lint * Switch cache to use self.cr.dbname * Fix ormcachepull/580/head
Dave Lasley
8 years ago
No known key found for this signature in database
GPG Key ID: 7DDBA4BA81B934CF
10 changed files with 195 additions and 91 deletions
-
43auth_session_timeout/README.rst
-
1auth_session_timeout/__init__.py
-
18auth_session_timeout/__manifest__.py
-
23auth_session_timeout/data/ir_config_parameter_data.xml
-
1auth_session_timeout/models/__init__.py
-
31auth_session_timeout/models/ir_config_parameter.py
-
29auth_session_timeout/models/res_users.py
-
4auth_session_timeout/tests/__init__.py
-
32auth_session_timeout/tests/test_ir_config_parameter.py
-
104auth_session_timeout/tests/test_res_users.py
@ -1,6 +1,5 @@ |
|||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||
# (c) 2015 ACSONE SA/NV, Dhinesh D |
# (c) 2015 ACSONE SA/NV, Dhinesh D |
||||
|
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
||||
|
|
||||
from . import models |
from . import models |
@ -1,28 +1,22 @@ |
|||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||
# (c) 2015 ACSONE SA/NV, Dhinesh D |
# (c) 2015 ACSONE SA/NV, Dhinesh D |
||||
|
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
||||
|
|
||||
{ |
{ |
||||
'name': "Inactive Sessions Timeout", |
'name': "Inactive Sessions Timeout", |
||||
|
|
||||
'summary': """ |
'summary': """ |
||||
This module disable all inactive sessions since a given delay""", |
This module disable all inactive sessions since a given delay""", |
||||
|
|
||||
'author': "ACSONE SA/NV, Dhinesh D, Odoo Community Association (OCA)", |
|
||||
|
'author': "ACSONE SA/NV, " |
||||
|
"Dhinesh D, " |
||||
|
"LasLabs, " |
||||
|
"Odoo Community Association (OCA)", |
||||
'maintainer': 'Odoo Community Association (OCA)', |
'maintainer': 'Odoo Community Association (OCA)', |
||||
'website': "http://acsone.eu", |
'website': "http://acsone.eu", |
||||
|
|
||||
'category': 'Tools', |
'category': 'Tools', |
||||
'version': '9.0.1.0.0', |
|
||||
|
'version': '10.0.1.0.0', |
||||
'license': 'AGPL-3', |
'license': 'AGPL-3', |
||||
|
|
||||
'depends': [ |
|
||||
'base', |
|
||||
], |
|
||||
|
|
||||
'data': [ |
'data': [ |
||||
'data/ir_config_parameter_data.xml' |
'data/ir_config_parameter_data.xml' |
||||
], |
], |
||||
'installable': False, |
|
||||
|
'installable': True, |
||||
} |
} |
@ -1,6 +1,5 @@ |
|||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||
# (c) 2015 ACSONE SA/NV, Dhinesh D |
# (c) 2015 ACSONE SA/NV, Dhinesh D |
||||
|
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
||||
|
|
||||
from . import res_users |
from . import res_users |
||||
|
@ -1,6 +1,4 @@ |
|||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||
# (c) 2015 ACSONE SA/NV, Dhinesh D |
|
||||
|
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
|
||||
|
|
||||
from . import test_ir_config_parameter |
from . import test_ir_config_parameter |
||||
|
from . import test_res_users |
@ -1,28 +1,32 @@ |
|||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||
# (c) 2015 ACSONE SA/NV, Dhinesh D |
# (c) 2015 ACSONE SA/NV, Dhinesh D |
||||
|
|
||||
|
# Copyright 2016 LasLabs Inc. |
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
||||
|
|
||||
import threading |
|
||||
|
|
||||
from openerp.tests import common |
|
||||
import openerp |
|
||||
|
from odoo.tests.common import TransactionCase |
||||
|
|
||||
|
|
||||
class TestIrConfigParameter(common.TransactionCase): |
|
||||
|
class TestIrConfigParameter(TransactionCase): |
||||
|
|
||||
def setUp(self): |
def setUp(self): |
||||
super(TestIrConfigParameter, self).setUp() |
super(TestIrConfigParameter, self).setUp() |
||||
self.db = openerp.tools.config['db_name'] |
|
||||
if not self.db and hasattr(threading.current_thread(), 'dbname'): |
|
||||
self.db = threading.current_thread().dbname |
|
||||
self.param_obj = self.env['ir.config_parameter'] |
self.param_obj = self.env['ir.config_parameter'] |
||||
self.data_obj = self.env['ir.model.data'] |
self.data_obj = self.env['ir.model.data'] |
||||
self.delay = self.env.ref( |
self.delay = self.env.ref( |
||||
'auth_session_timeout.inactive_session_time_out_delay') |
|
||||
|
'auth_session_timeout.inactive_session_time_out_delay' |
||||
|
) |
||||
|
self.url = self.env.ref( |
||||
|
'auth_session_timeout.inactive_session_time_out_ignored_url' |
||||
|
) |
||||
|
self.urls = ['url1', 'url2'] |
||||
|
self.url.value = ','.join(self.urls) |
||||
|
|
||||
def test_check_delay(self): |
|
||||
delay, urls = self.param_obj.get_session_parameters(self.db) |
|
||||
|
def test_get_session_parameters_delay(self): |
||||
|
""" It should return the proper delay """ |
||||
|
delay, _ = self.param_obj.get_session_parameters() |
||||
self.assertEqual(delay, int(self.delay.value)) |
self.assertEqual(delay, int(self.delay.value)) |
||||
self.assertIsInstance(delay, int) |
|
||||
self.assertIsInstance(urls, list) |
|
||||
|
|
||||
|
def test_get_session_parameters_url(self): |
||||
|
""" It should return URIs split by comma """ |
||||
|
_, urls = self.param_obj.get_session_parameters() |
||||
|
self.assertEqual(urls, self.urls) |
@ -0,0 +1,104 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# Copyright 2016 LasLabs Inc. |
||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
||||
|
|
||||
|
import mock |
||||
|
|
||||
|
from contextlib import contextmanager |
||||
|
|
||||
|
from odoo.tests.common import TransactionCase |
||||
|
|
||||
|
|
||||
|
class EndTestException(Exception): |
||||
|
""" It stops tests from continuing """ |
||||
|
pass |
||||
|
|
||||
|
|
||||
|
class TestResUsers(TransactionCase): |
||||
|
|
||||
|
def setUp(self): |
||||
|
super(TestResUsers, self).setUp() |
||||
|
self.ResUsers = self.env['res.users'] |
||||
|
|
||||
|
@contextmanager |
||||
|
def _mock_assets(self, assets=None): |
||||
|
""" It provides mocked imports from res_users.py |
||||
|
:param assets: (list) Name of imports to mock. Mocks `http` if None |
||||
|
:return: (dict) Dictionary of mocks, keyed by module name |
||||
|
""" |
||||
|
if assets is None: |
||||
|
assets = ['http'] |
||||
|
patches = {name: mock.DEFAULT for name in assets} |
||||
|
with mock.patch.multiple( |
||||
|
'odoo.addons.auth_session_timeout.models.res_users', **patches |
||||
|
) as mocks: |
||||
|
yield mocks |
||||
|
|
||||
|
def _check_session_validity(self): |
||||
|
""" It wraps ``_check_session_validity`` for easier calling """ |
||||
|
self.db = mock.MagicMock() |
||||
|
self.uid = mock.MagicMock() |
||||
|
self.passwd = mock.MagicMock() |
||||
|
return self.ResUsers._check_session_validity( |
||||
|
self.db, self.uid, self.passwd, |
||||
|
) |
||||
|
|
||||
|
def test_session_validity_no_request(self): |
||||
|
""" It should return immediately if no request """ |
||||
|
with self._mock_assets() as assets: |
||||
|
assets['http'].request = False |
||||
|
res = self._check_session_validity() |
||||
|
self.assertFalse(res) |
||||
|
|
||||
|
def test_session_validity_gets_params(self): |
||||
|
""" It should call ``get_session_parameters`` with db """ |
||||
|
with self._mock_assets() as assets: |
||||
|
get_params = assets['http'].request.env[''].get_session_parameters |
||||
|
get_params.side_effect = EndTestException |
||||
|
with self.assertRaises(EndTestException): |
||||
|
self._check_session_validity() |
||||
|
get_params.assert_called_once_with() |
||||
|
|
||||
|
def test_session_validity_gets_session_file(self): |
||||
|
""" It should call get the session file for the session id """ |
||||
|
with self._mock_assets() as assets: |
||||
|
get_params = assets['http'].request.env[''].get_session_parameters |
||||
|
get_params.return_value = 0, [] |
||||
|
store = assets['http'].root.session_store |
||||
|
store.get_session_filename.side_effect = EndTestException |
||||
|
with self.assertRaises(EndTestException): |
||||
|
self._check_session_validity() |
||||
|
store.get_session_filename.assert_called_once_with( |
||||
|
assets['http'].request.session.sid, |
||||
|
) |
||||
|
|
||||
|
def test_session_validity_logout(self): |
||||
|
""" It should log out of session if past deadline """ |
||||
|
with self._mock_assets(['http', 'getmtime', 'utime']) as assets: |
||||
|
get_params = assets['http'].request.env[''].get_session_parameters |
||||
|
get_params.return_value = -9999, [] |
||||
|
assets['getmtime'].return_value = 0 |
||||
|
self._check_session_validity() |
||||
|
assets['http'].request.session.logout.assert_called_once_with( |
||||
|
keep_db=True, |
||||
|
) |
||||
|
|
||||
|
def test_session_validity_updates_utime(self): |
||||
|
""" It should update utime of session file if not expired """ |
||||
|
with self._mock_assets(['http', 'getmtime', 'utime']) as assets: |
||||
|
get_params = assets['http'].request.env[''].get_session_parameters |
||||
|
get_params.return_value = 9999, [] |
||||
|
self._check_session_validity() |
||||
|
assets['utime'].assert_called_once_with( |
||||
|
assets['http'].root.session_store.get_session_filename(), |
||||
|
None, |
||||
|
) |
||||
|
|
||||
|
def test_session_validity_os_error_guard(self): |
||||
|
""" It should properly guard from OSError & return """ |
||||
|
with self._mock_assets(['http', 'utime', 'getmtime']) as assets: |
||||
|
get_params = assets['http'].request.env[''].get_session_parameters |
||||
|
get_params.return_value = 0, [] |
||||
|
assets['getmtime'].side_effect = OSError |
||||
|
res = self._check_session_validity() |
||||
|
self.assertFalse(res) |
Write
Preview
Loading…
Cancel
Save
Reference in new issue