diff options
| author | Martin Trigaux <mat@odoo.com> | 2019-09-13 08:46:08 +0000 |
|---|---|---|
| committer | Martin Trigaux <mat@odoo.com> | 2019-09-18 08:40:12 +0000 |
| commit | f4d5a7fe8b7584f79c58d562a9fc6325a24a3793 (patch) | |
| tree | 8ad764868ec24291998d6c68e116585ea73009f0 /odoo/addons/base/tests/test_base.py | |
| parent | b0ddc0fda1023b468137cbcf69373ccb5127cd3d (diff) | |
[IMP] base: improve test coverage
The forbidden cases were not tested, making it harder to detect
closes odoo/odoo#36846
Signed-off-by: Martin Trigaux (mat) <mat@odoo.com>
Diffstat (limited to 'odoo/addons/base/tests/test_base.py')
| -rw-r--r-- | odoo/addons/base/tests/test_base.py | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/odoo/addons/base/tests/test_base.py b/odoo/addons/base/tests/test_base.py index 5051fec4dad..e1a209b325e 100644 --- a/odoo/addons/base/tests/test_base.py +++ b/odoo/addons/base/tests/test_base.py @@ -7,7 +7,7 @@ from odoo import SUPERUSER_ID from odoo.exceptions import UserError, ValidationError from odoo.tests.common import TransactionCase, BaseCase from odoo.tools import mute_logger -from odoo.tools.safe_eval import safe_eval, const_eval +from odoo.tools.safe_eval import safe_eval, const_eval, expr_eval class TestSafeEval(BaseCase): @@ -17,6 +17,12 @@ class TestSafeEval(BaseCase): actual = const_eval('(1, {"a": {2.5}}, [None, u"foo"])') self.assertEqual(actual, expected) + def test_expr(self): + # NB: True and False are names in Python 2 not consts + expected = 3 * 4 + actual = expr_eval('3 * 4') + self.assertEqual(actual, expected) + def test_01_safe_eval(self): """ Try a few common expressions to verify they work with safe_eval """ expected = (1, {"a": 9 * 2}, (True, False, None)) @@ -41,10 +47,19 @@ class TestSafeEval(BaseCase): @mute_logger('odoo.tools.safe_eval') def test_05_safe_eval_forbiddon(self): - """ Try forbidden expressions in safe_eval to verify they are not allowed (open) """ + """ Try forbidden expressions in safe_eval to verify they are not allowed""" + # no forbidden builtin expression with self.assertRaises(ValueError): safe_eval('open("/etc/passwd","r")') + # no forbidden opcodes + with self.assertRaises(ValueError): + safe_eval("import odoo", mode="exec") + + # no dunder + with self.assertRaises(NameError): + safe_eval("self.__name__", {'self': self}, mode="exec") + # samples use effective TLDs from the Mozilla public suffix # list at http://publicsuffix.org |
