author | Alexandre Fayolle <alexandre.fayolle@logilab.fr> |
Mon, 05 Apr 2010 09:06:16 +0200 | |
branch | stable |
changeset 5145 | bfa4d775219f |
parent 5093 | 8d073d2e089d |
child 5421 | 8167de96c523 |
permissions | -rw-r--r-- |
0 | 1 |
# -*- coding: utf-8 -*- |
3413
5cd27d2cc64f
update imports, rename test module
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2968
diff
changeset
|
2 |
"""unit/functional tests for cubicweb.server.hook |
1977
606923dff11b
big bunch of copyright / docstring update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
1787
diff
changeset
|
3 |
|
606923dff11b
big bunch of copyright / docstring update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
1787
diff
changeset
|
4 |
:organization: Logilab |
4212
ab6573088b4a
update copyright: welcome 2010
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
2920
diff
changeset
|
5 |
:copyright: 2001-2010 LOGILAB S.A. (Paris, FRANCE), license is LGPL v2. |
1977
606923dff11b
big bunch of copyright / docstring update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
1787
diff
changeset
|
6 |
:contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr |
606923dff11b
big bunch of copyright / docstring update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
1787
diff
changeset
|
7 |
:license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses |
606923dff11b
big bunch of copyright / docstring update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
1787
diff
changeset
|
8 |
""" |
0 | 9 |
|
3414
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
10 |
from logilab.common.testlib import TestCase, unittest_main, mock_object |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
11 |
|
3413
5cd27d2cc64f
update imports, rename test module
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2968
diff
changeset
|
12 |
|
3414
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
13 |
from cubicweb.devtools import TestServerConfiguration |
2773
b2530e3e0afb
[testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2637
diff
changeset
|
14 |
from cubicweb.devtools.testlib import CubicWebTC |
3414
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
15 |
from cubicweb.selectors import implements |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
16 |
from cubicweb.server import hook |
3413
5cd27d2cc64f
update imports, rename test module
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2968
diff
changeset
|
17 |
from cubicweb.hooks import integrity, syncschema |
0 | 18 |
|
19 |
||
2773
b2530e3e0afb
[testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2637
diff
changeset
|
20 |
def clean_session_ops(func): |
b2530e3e0afb
[testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2637
diff
changeset
|
21 |
def wrapper(self, *args, **kwargs): |
b2530e3e0afb
[testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2637
diff
changeset
|
22 |
try: |
b2530e3e0afb
[testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2637
diff
changeset
|
23 |
return func(self, *args, **kwargs) |
b2530e3e0afb
[testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2637
diff
changeset
|
24 |
finally: |
b2530e3e0afb
[testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2637
diff
changeset
|
25 |
self.session.pending_operations[:] = [] |
b2530e3e0afb
[testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2637
diff
changeset
|
26 |
return wrapper |
b2530e3e0afb
[testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2637
diff
changeset
|
27 |
|
3414
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
28 |
class OperationsTC(CubicWebTC): |
1787 | 29 |
|
0 | 30 |
def setUp(self): |
2773
b2530e3e0afb
[testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2637
diff
changeset
|
31 |
CubicWebTC.setUp(self) |
0 | 32 |
self.hm = self.repo.hm |
1787 | 33 |
|
2773
b2530e3e0afb
[testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2637
diff
changeset
|
34 |
@clean_session_ops |
0 | 35 |
def test_late_operation(self): |
36 |
session = self.session |
|
3414
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
37 |
l1 = hook.LateOperation(session) |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
38 |
l2 = hook.LateOperation(session) |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
39 |
l3 = hook.Operation(session) |
0 | 40 |
self.assertEquals(session.pending_operations, [l3, l1, l2]) |
1787 | 41 |
|
2773
b2530e3e0afb
[testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2637
diff
changeset
|
42 |
@clean_session_ops |
0 | 43 |
def test_single_last_operation(self): |
44 |
session = self.session |
|
3414
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
45 |
l0 = hook.SingleLastOperation(session) |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
46 |
l1 = hook.LateOperation(session) |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
47 |
l2 = hook.LateOperation(session) |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
48 |
l3 = hook.Operation(session) |
0 | 49 |
self.assertEquals(session.pending_operations, [l3, l1, l2, l0]) |
3414
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
50 |
l4 = hook.SingleLastOperation(session) |
0 | 51 |
self.assertEquals(session.pending_operations, [l3, l1, l2, l4]) |
1787 | 52 |
|
2773
b2530e3e0afb
[testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2637
diff
changeset
|
53 |
@clean_session_ops |
0 | 54 |
def test_global_operation_order(self): |
55 |
session = self.session |
|
3413
5cd27d2cc64f
update imports, rename test module
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2968
diff
changeset
|
56 |
op1 = integrity._DelayedDeleteOp(session) |
5cd27d2cc64f
update imports, rename test module
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2968
diff
changeset
|
57 |
op2 = syncschema.MemSchemaRDefDel(session) |
0 | 58 |
# equivalent operation generated by op2 but replace it here by op3 so we |
59 |
# can check the result... |
|
3413
5cd27d2cc64f
update imports, rename test module
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2968
diff
changeset
|
60 |
op3 = syncschema.MemSchemaNotifyChanges(session) |
5cd27d2cc64f
update imports, rename test module
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2968
diff
changeset
|
61 |
op4 = integrity._DelayedDeleteOp(session) |
5cd27d2cc64f
update imports, rename test module
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2968
diff
changeset
|
62 |
op5 = integrity._CheckORelationOp(session) |
0 | 63 |
self.assertEquals(session.pending_operations, [op1, op2, op4, op5, op3]) |
1787 | 64 |
|
3414
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
65 |
|
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
66 |
class HookCalled(Exception): pass |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
67 |
|
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
68 |
config = TestServerConfiguration('data') |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
69 |
config.bootstrap_cubes() |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
70 |
schema = config.load_schema() |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
71 |
|
4766
162b2b127b15
[test] get a chance to get proper garbage collection when running pytest on whole cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4252
diff
changeset
|
72 |
def teardown_module(*args): |
162b2b127b15
[test] get a chance to get proper garbage collection when running pytest on whole cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4252
diff
changeset
|
73 |
global config, schema |
162b2b127b15
[test] get a chance to get proper garbage collection when running pytest on whole cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4252
diff
changeset
|
74 |
del config, schema |
162b2b127b15
[test] get a chance to get proper garbage collection when running pytest on whole cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4252
diff
changeset
|
75 |
|
3414
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
76 |
class AddAnyHook(hook.Hook): |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
77 |
__regid__ = 'addany' |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
78 |
category = 'cat1' |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
79 |
events = ('before_add_entity',) |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
80 |
def __call__(self): |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
81 |
raise HookCalled() |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
82 |
|
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
83 |
|
5093
8d073d2e089d
[optimization] improve massive write performance by optimizing hooks selection
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5029
diff
changeset
|
84 |
class HooksRegistryTC(TestCase): |
3414
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
85 |
|
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
86 |
def setUp(self): |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
87 |
""" called before each test from this class """ |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
88 |
self.vreg = mock_object(config=config, schema=schema) |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
89 |
self.o = hook.HooksRegistry(self.vreg) |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
90 |
|
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
91 |
def test_register_bad_hook1(self): |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
92 |
class _Hook(hook.Hook): |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
93 |
events = ('before_add_entiti',) |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
94 |
ex = self.assertRaises(Exception, self.o.register, _Hook) |
5029
f7709d28fb79
[test] fixes when executed under apycot environment (also added ldap1 to test host /etc/hosts)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4835
diff
changeset
|
95 |
self.assertEquals(str(ex), 'bad event before_add_entiti on %s._Hook' % __name__) |
3414
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
96 |
|
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
97 |
def test_register_bad_hook2(self): |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
98 |
class _Hook(hook.Hook): |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
99 |
events = None |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
100 |
ex = self.assertRaises(Exception, self.o.register, _Hook) |
5029
f7709d28fb79
[test] fixes when executed under apycot environment (also added ldap1 to test host /etc/hosts)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4835
diff
changeset
|
101 |
self.assertEquals(str(ex), 'bad .events attribute None on %s._Hook' % __name__) |
3414
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
102 |
|
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
103 |
def test_register_bad_hook3(self): |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
104 |
class _Hook(hook.Hook): |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
105 |
events = 'before_add_entity' |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
106 |
ex = self.assertRaises(Exception, self.o.register, _Hook) |
5029
f7709d28fb79
[test] fixes when executed under apycot environment (also added ldap1 to test host /etc/hosts)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4835
diff
changeset
|
107 |
self.assertEquals(str(ex), 'bad event b on %s._Hook' % __name__) |
3414
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
108 |
|
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
109 |
def test_call_hook(self): |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
110 |
self.o.register(AddAnyHook) |
4834
b718626a0e60
move hooks activation control on session object, so we can have a per transaction control. Added a new `hooks_control` context manager for usual modification of hooks activation.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4766
diff
changeset
|
111 |
dis = set() |
b718626a0e60
move hooks activation control on session object, so we can have a per transaction control. Added a new `hooks_control` context manager for usual modification of hooks activation.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4766
diff
changeset
|
112 |
cw = mock_object(vreg=self.vreg, |
4835
13b0b96d7982
[repo] enhanced security handling: deprecates unsafe_execute, in favor of explicit read/write security control using the `enabled_security` context manager. Also code executed on the repository side is now unsafe by default.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4834
diff
changeset
|
113 |
set_read_security=lambda *a,**k: None, |
13b0b96d7982
[repo] enhanced security handling: deprecates unsafe_execute, in favor of explicit read/write security control using the `enabled_security` context manager. Also code executed on the repository side is now unsafe by default.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4834
diff
changeset
|
114 |
set_write_security=lambda *a,**k: None, |
4834
b718626a0e60
move hooks activation control on session object, so we can have a per transaction control. Added a new `hooks_control` context manager for usual modification of hooks activation.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4766
diff
changeset
|
115 |
is_hook_activated=lambda x, cls: cls.category not in dis) |
b718626a0e60
move hooks activation control on session object, so we can have a per transaction control. Added a new `hooks_control` context manager for usual modification of hooks activation.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4766
diff
changeset
|
116 |
self.assertRaises(HookCalled, |
b718626a0e60
move hooks activation control on session object, so we can have a per transaction control. Added a new `hooks_control` context manager for usual modification of hooks activation.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4766
diff
changeset
|
117 |
self.o.call_hooks, 'before_add_entity', cw) |
b718626a0e60
move hooks activation control on session object, so we can have a per transaction control. Added a new `hooks_control` context manager for usual modification of hooks activation.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4766
diff
changeset
|
118 |
dis.add('cat1') |
3414
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
119 |
self.o.call_hooks('before_add_entity', cw) # disabled hooks category, not called |
4834
b718626a0e60
move hooks activation control on session object, so we can have a per transaction control. Added a new `hooks_control` context manager for usual modification of hooks activation.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4766
diff
changeset
|
120 |
dis.remove('cat1') |
b718626a0e60
move hooks activation control on session object, so we can have a per transaction control. Added a new `hooks_control` context manager for usual modification of hooks activation.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4766
diff
changeset
|
121 |
self.assertRaises(HookCalled, |
b718626a0e60
move hooks activation control on session object, so we can have a per transaction control. Added a new `hooks_control` context manager for usual modification of hooks activation.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4766
diff
changeset
|
122 |
self.o.call_hooks, 'before_add_entity', cw) |
3414
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
123 |
self.o.unregister(AddAnyHook) |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
124 |
self.o.call_hooks('before_add_entity', cw) # nothing to call |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
125 |
|
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
126 |
|
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
127 |
class SystemHooksTC(CubicWebTC): |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
128 |
|
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
129 |
def test_startup_shutdown(self): |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
130 |
import hooks # cubicweb/server/test/data/hooks.py |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
131 |
self.assertEquals(hooks.CALLED_EVENTS['server_startup'], True) |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
132 |
# don't actually call repository.shutdown ! |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
133 |
self.repo.hm.call_hooks('server_shutdown', repo=self.repo) |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
134 |
self.assertEquals(hooks.CALLED_EVENTS['server_shutdown'], True) |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
135 |
|
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
136 |
def test_session_open_close(self): |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
137 |
import hooks # cubicweb/server/test/data/hooks.py |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
138 |
cnx = self.login('anon') |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
139 |
self.assertEquals(hooks.CALLED_EVENTS['session_open'], 'anon') |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
140 |
cnx.close() |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
141 |
self.assertEquals(hooks.CALLED_EVENTS['session_close'], 'anon') |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
142 |
|
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
143 |
|
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
144 |
# class RelationHookTC(TestCase): |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
145 |
# """testcase for relation hooks grouping""" |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
146 |
# def setUp(self): |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
147 |
# """ called before each test from this class """ |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
148 |
# self.o = HooksManager(schema) |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
149 |
# self.called = [] |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
150 |
|
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
151 |
# def test_before_add_relation(self): |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
152 |
# """make sure before_xxx_relation hooks are called directly""" |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
153 |
# self.o.register(self._before_relation_hook, |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
154 |
# 'before_add_relation', 'concerne') |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
155 |
# self.assertEquals(self.called, []) |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
156 |
# self.o.call_hooks('before_add_relation', 'concerne', 'USER', |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
157 |
# 1, 'concerne', 2) |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
158 |
# self.assertEquals(self.called, [(1, 'concerne', 2)]) |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
159 |
|
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
160 |
# def test_after_add_relation(self): |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
161 |
# """make sure after_xxx_relation hooks are deferred""" |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
162 |
# self.o.register(self._after_relation_hook, |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
163 |
# 'after_add_relation', 'concerne') |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
164 |
# self.assertEquals(self.called, []) |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
165 |
# self.o.call_hooks('after_add_relation', 'concerne', 'USER', |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
166 |
# 1, 'concerne', 2) |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
167 |
# self.o.call_hooks('after_add_relation', 'concerne', 'USER', |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
168 |
# 3, 'concerne', 4) |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
169 |
# self.assertEquals(self.called, [(1, 'concerne', 2), (3, 'concerne', 4)]) |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
170 |
|
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
171 |
# def test_before_delete_relation(self): |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
172 |
# """make sure before_xxx_relation hooks are called directly""" |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
173 |
# self.o.register(self._before_relation_hook, |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
174 |
# 'before_delete_relation', 'concerne') |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
175 |
# self.assertEquals(self.called, []) |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
176 |
# self.o.call_hooks('before_delete_relation', 'concerne', 'USER', |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
177 |
# 1, 'concerne', 2) |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
178 |
# self.assertEquals(self.called, [(1, 'concerne', 2)]) |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
179 |
|
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
180 |
# def test_after_delete_relation(self): |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
181 |
# """make sure after_xxx_relation hooks are deferred""" |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
182 |
# self.o.register(self._after_relation_hook, |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
183 |
# 'after_delete_relation', 'concerne') |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
184 |
# self.o.call_hooks('after_delete_relation', 'concerne', 'USER', |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
185 |
# 1, 'concerne', 2) |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
186 |
# self.o.call_hooks('after_delete_relation', 'concerne', 'USER', |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
187 |
# 3, 'concerne', 4) |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
188 |
# self.assertEquals(self.called, [(1, 'concerne', 2), (3, 'concerne', 4)]) |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
189 |
|
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
190 |
|
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
191 |
# def _before_relation_hook(self, pool, subject, r_type, object): |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
192 |
# self.called.append((subject, r_type, object)) |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
193 |
|
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
194 |
# def _after_relation_hook(self, pool, subject, r_type, object): |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
195 |
# self.called.append((subject, r_type, object)) |
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
196 |
|
fe6c99b96701
no more HooksManager but a HooksRegistry: update test accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3413
diff
changeset
|
197 |
|
0 | 198 |
if __name__ == '__main__': |
199 |
unittest_main() |