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
-
41auth_session_timeout/README.rst
-
1auth_session_timeout/__init__.py
-
18auth_session_timeout/__manifest__.py
-
7auth_session_timeout/data/ir_config_parameter_data.xml
-
1auth_session_timeout/models/__init__.py
-
29auth_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 -*- |
|||
# (c) 2015 ACSONE SA/NV, Dhinesh D |
|||
|
|||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
|||
|
|||
from . import models |
@ -1,28 +1,22 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# (c) 2015 ACSONE SA/NV, Dhinesh D |
|||
|
|||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
|||
|
|||
{ |
|||
'name': "Inactive Sessions Timeout", |
|||
|
|||
'summary': """ |
|||
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)', |
|||
'website': "http://acsone.eu", |
|||
|
|||
'category': 'Tools', |
|||
'version': '9.0.1.0.0', |
|||
'version': '10.0.1.0.0', |
|||
'license': 'AGPL-3', |
|||
|
|||
'depends': [ |
|||
'base', |
|||
], |
|||
|
|||
'data': [ |
|||
'data/ir_config_parameter_data.xml' |
|||
], |
|||
'installable': False, |
|||
'installable': True, |
|||
} |
@ -1,6 +1,5 @@ |
|||
# -*- 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 res_users |
|||
|
@ -1,6 +1,4 @@ |
|||
# -*- 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_res_users |
@ -1,28 +1,32 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# (c) 2015 ACSONE SA/NV, Dhinesh D |
|||
|
|||
# Copyright 2016 LasLabs Inc. |
|||
# 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): |
|||
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.data_obj = self.env['ir.model.data'] |
|||
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.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