16 |
16 |
17 import unittest |
17 import unittest |
18 import os, shutil |
18 import os, shutil |
19 import sys |
19 import sys |
20 import logging |
20 import logging |
21 import __init__ |
|
22 |
21 |
23 from cone.public import exceptions,plugin,api,container |
22 from cone.public import exceptions,plugin,api,container |
24 from cone.storage import filestorage |
23 from cone.storage import filestorage |
25 from ruleplugin import ruleml |
24 from ruleplugin import ruleml |
26 from testautomation.base_testcase import BaseTestCase |
25 from testautomation.base_testcase import BaseTestCase |
56 return [FULL_PATH, handler, logger] |
55 return [FULL_PATH, handler, logger] |
57 |
56 |
58 def _execute_rules(self, project_location): |
57 def _execute_rules(self, project_location): |
59 project = api.Project(api.Storage.open(os.path.join(ROOT_PATH, project_location))) |
58 project = api.Project(api.Storage.open(os.path.join(ROOT_PATH, project_location))) |
60 config = project.get_configuration('root.confml') |
59 config = project.get_configuration('root.confml') |
61 |
60 context = plugin.GenerationContext(configuration=config) |
62 implcontainer = plugin.get_impl_set(config, r'\.ruleml$') |
61 implcontainer = plugin.get_impl_set(config, r'\.ruleml$') |
63 implcontainer.get_relation_container().execute() |
62 implcontainer.get_relation_container().execute(context) |
64 lastconfig = config.get_last_configuration() |
63 lastconfig = config.get_last_configuration() |
65 project.close() |
64 project.close() |
66 |
65 |
67 def test_terminal_expression_repr(self): |
66 def test_terminal_expression_repr(self): |
68 log_file, handler, logger = self._prepare_log('test1.log') |
67 log_file, handler, logger = self._prepare_log('test1.log') |
73 |
72 |
74 def test_invalid_python_code_eval(self): |
73 def test_invalid_python_code_eval(self): |
75 log_file, handler, logger = self._prepare_log('test2.log') |
74 log_file, handler, logger = self._prepare_log('test2.log') |
76 self._execute_rules('errorruleproject/test2') |
75 self._execute_rules('errorruleproject/test2') |
77 logger.removeHandler(handler) |
76 logger.removeHandler(handler) |
78 self.assert_file_contains(log_file, "INFO - cone.ruleml - Set u'EvalTest2.StringResult' = None from '-> this is invalid python code'") |
|
79 self.assert_file_contains(log_file, "WARNING - cone.ruleml - Invalid syntax in eval: -> this is invalid python code") |
77 self.assert_file_contains(log_file, "WARNING - cone.ruleml - Invalid syntax in eval: -> this is invalid python code") |
80 self.assert_file_contains(log_file, "ERROR - cone.ruleml_relation_container(implml/invalid_python_eval.ruleml) - '-> this is invalid python code'") |
|
81 |
78 |
82 def test_invalid_python_code_eval_globals(self): |
79 def test_invalid_python_code_eval_globals(self): |
83 log_file, handler, logger = self._prepare_log('test3.log') |
80 log_file, handler, logger = self._prepare_log('test3.log') |
84 self._execute_rules('errorruleproject/test3') |
81 self._execute_rules('errorruleproject/test3') |
85 logger.removeHandler(handler) |
82 logger.removeHandler(handler) |
94 |
91 |
95 def test_runtime_error_when_running_an_eval_block_inside_rule(self): |
92 def test_runtime_error_when_running_an_eval_block_inside_rule(self): |
96 log_file, handler, logger = self._prepare_log('test5.log') |
93 log_file, handler, logger = self._prepare_log('test5.log') |
97 self._execute_rules('errorruleproject/test5') |
94 self._execute_rules('errorruleproject/test5') |
98 logger.removeHandler(handler) |
95 logger.removeHandler(handler) |
99 |
96 |
100 self.assert_file_contains(log_file, "Execution failed for eval: 7/0 <type 'exceptions.ZeroDivisionError'>: integer division or modulo by zero") |
97 self.assert_file_contains(log_file, "Execution failed for eval: 7/0 <type 'exceptions.ZeroDivisionError'>: integer division or modulo by zero") |
101 |
98 |
102 def test_references_non_existent_settings(self): |
99 def test_references_non_existent_settings(self): |
103 log_file, handler, logger = self._prepare_log('test6.log') |
100 log_file, handler, logger = self._prepare_log('test6.log') |
104 self._execute_rules('errorruleproject/test6') |
101 self._execute_rules('errorruleproject/test6') |