server/test/unittest_session.py
author Pierre-Yves David <pierre-yves.david@logilab.fr>
Fri, 22 Mar 2013 18:51:03 +0100
changeset 8763 0144b26e958d
parent 8694 d901c36bcfce
child 8771 519629422391
permissions -rw-r--r--
[transaction] handle ``mode`` default value in Transaction The transaction mode is now explicitly passed at creation time and always read from the Transaction object. Note that there is a slight behavior change. The transaction mode is now set at the creation of the transaction. Changes made to the default value have no longer any effect on existing transaction.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8554
6e5d8512b07d [repo cleanup] drop code moved to querier by 7e264ce34cd4
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8542
diff changeset
     1
# copyright 2003-2012 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5197
diff changeset
     2
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5197
diff changeset
     3
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5197
diff changeset
     4
# This file is part of CubicWeb.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5197
diff changeset
     5
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5197
diff changeset
     6
# CubicWeb is free software: you can redistribute it and/or modify it under the
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5197
diff changeset
     7
# terms of the GNU Lesser General Public License as published by the Free
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5197
diff changeset
     8
# Software Foundation, either version 2.1 of the License, or (at your option)
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5197
diff changeset
     9
# any later version.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5197
diff changeset
    10
#
5424
8ecbcbff9777 replace logilab-common by CubicWeb in disclaimer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5421
diff changeset
    11
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5197
diff changeset
    12
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5197
diff changeset
    13
# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5197
diff changeset
    14
# details.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5197
diff changeset
    15
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5197
diff changeset
    16
# You should have received a copy of the GNU Lesser General Public License along
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5197
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
7364
aff846ce1050 missing future import
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7350
diff changeset
    18
5193
c9671feff5e2 [session] no way for queries from an InternalSession to be a dbapi query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
    19
from cubicweb.devtools.testlib import CubicWebTC
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    20
5193
c9671feff5e2 [session] no way for queries from an InternalSession to be a dbapi query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
    21
class InternalSessionTC(CubicWebTC):
c9671feff5e2 [session] no way for queries from an InternalSession to be a dbapi query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
    22
    def test_dbapi_query(self):
c9671feff5e2 [session] no way for queries from an InternalSession to be a dbapi query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
    23
        session = self.repo.internal_session()
c9671feff5e2 [session] no way for queries from an InternalSession to be a dbapi query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
    24
        self.assertFalse(session.running_dbapi_query)
5197
98dc05495e3e [test] properly close session
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5193
diff changeset
    25
        session.close()
5193
c9671feff5e2 [session] no way for queries from an InternalSession to be a dbapi query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
    26
7350
c2452cd57026 [session] enhance session's transaction storage handling to fix cases where commit/rollback is done while in the context of hooks_control/security_enabled managers. Closes #1412648: commit or rollback during postcreate reset hooks control state
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    27
c2452cd57026 [session] enhance session's transaction storage handling to fix cases where commit/rollback is done while in the context of hooks_control/security_enabled managers. Closes #1412648: commit or rollback during postcreate reset hooks control state
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    28
class SessionTC(CubicWebTC):
c2452cd57026 [session] enhance session's transaction storage handling to fix cases where commit/rollback is done while in the context of hooks_control/security_enabled managers. Closes #1412648: commit or rollback during postcreate reset hooks control state
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    29
c2452cd57026 [session] enhance session's transaction storage handling to fix cases where commit/rollback is done while in the context of hooks_control/security_enabled managers. Closes #1412648: commit or rollback during postcreate reset hooks control state
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    30
    def test_hooks_control(self):
c2452cd57026 [session] enhance session's transaction storage handling to fix cases where commit/rollback is done while in the context of hooks_control/security_enabled managers. Closes #1412648: commit or rollback during postcreate reset hooks control state
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    31
        session = self.session
c2452cd57026 [session] enhance session's transaction storage handling to fix cases where commit/rollback is done while in the context of hooks_control/security_enabled managers. Closes #1412648: commit or rollback during postcreate reset hooks control state
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    32
        self.assertEqual(session.hooks_mode, session.HOOKS_ALLOW_ALL)
c2452cd57026 [session] enhance session's transaction storage handling to fix cases where commit/rollback is done while in the context of hooks_control/security_enabled managers. Closes #1412648: commit or rollback during postcreate reset hooks control state
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    33
        self.assertEqual(session.disabled_hook_categories, set())
c2452cd57026 [session] enhance session's transaction storage handling to fix cases where commit/rollback is done while in the context of hooks_control/security_enabled managers. Closes #1412648: commit or rollback during postcreate reset hooks control state
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    34
        self.assertEqual(session.enabled_hook_categories, set())
c2452cd57026 [session] enhance session's transaction storage handling to fix cases where commit/rollback is done while in the context of hooks_control/security_enabled managers. Closes #1412648: commit or rollback during postcreate reset hooks control state
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    35
        self.assertEqual(len(session._tx_data), 1)
8561
77ea3eed9946 [session] promote usage of [deny|all]_all_hooks_but session methods rather than hooks_control context manager directly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8554
diff changeset
    36
        with session.deny_all_hooks_but('metadata'):
7350
c2452cd57026 [session] enhance session's transaction storage handling to fix cases where commit/rollback is done while in the context of hooks_control/security_enabled managers. Closes #1412648: commit or rollback during postcreate reset hooks control state
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    37
            self.assertEqual(session.hooks_mode, session.HOOKS_DENY_ALL)
c2452cd57026 [session] enhance session's transaction storage handling to fix cases where commit/rollback is done while in the context of hooks_control/security_enabled managers. Closes #1412648: commit or rollback during postcreate reset hooks control state
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    38
            self.assertEqual(session.disabled_hook_categories, set())
c2452cd57026 [session] enhance session's transaction storage handling to fix cases where commit/rollback is done while in the context of hooks_control/security_enabled managers. Closes #1412648: commit or rollback during postcreate reset hooks control state
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    39
            self.assertEqual(session.enabled_hook_categories, set(('metadata',)))
c2452cd57026 [session] enhance session's transaction storage handling to fix cases where commit/rollback is done while in the context of hooks_control/security_enabled managers. Closes #1412648: commit or rollback during postcreate reset hooks control state
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    40
            session.commit()
c2452cd57026 [session] enhance session's transaction storage handling to fix cases where commit/rollback is done while in the context of hooks_control/security_enabled managers. Closes #1412648: commit or rollback during postcreate reset hooks control state
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    41
            self.assertEqual(session.hooks_mode, session.HOOKS_DENY_ALL)
c2452cd57026 [session] enhance session's transaction storage handling to fix cases where commit/rollback is done while in the context of hooks_control/security_enabled managers. Closes #1412648: commit or rollback during postcreate reset hooks control state
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    42
            self.assertEqual(session.disabled_hook_categories, set())
c2452cd57026 [session] enhance session's transaction storage handling to fix cases where commit/rollback is done while in the context of hooks_control/security_enabled managers. Closes #1412648: commit or rollback during postcreate reset hooks control state
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    43
            self.assertEqual(session.enabled_hook_categories, set(('metadata',)))
c2452cd57026 [session] enhance session's transaction storage handling to fix cases where commit/rollback is done while in the context of hooks_control/security_enabled managers. Closes #1412648: commit or rollback during postcreate reset hooks control state
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    44
            session.rollback()
c2452cd57026 [session] enhance session's transaction storage handling to fix cases where commit/rollback is done while in the context of hooks_control/security_enabled managers. Closes #1412648: commit or rollback during postcreate reset hooks control state
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    45
            self.assertEqual(session.hooks_mode, session.HOOKS_DENY_ALL)
c2452cd57026 [session] enhance session's transaction storage handling to fix cases where commit/rollback is done while in the context of hooks_control/security_enabled managers. Closes #1412648: commit or rollback during postcreate reset hooks control state
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    46
            self.assertEqual(session.disabled_hook_categories, set())
c2452cd57026 [session] enhance session's transaction storage handling to fix cases where commit/rollback is done while in the context of hooks_control/security_enabled managers. Closes #1412648: commit or rollback during postcreate reset hooks control state
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    47
            self.assertEqual(session.enabled_hook_categories, set(('metadata',)))
8561
77ea3eed9946 [session] promote usage of [deny|all]_all_hooks_but session methods rather than hooks_control context manager directly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8554
diff changeset
    48
            with session.allow_all_hooks_but('integrity'):
7757
5b3584c5a7c3 [hooks control] test and fix session.reset_hooks_mode_categories, closes #1908680
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7730
diff changeset
    49
                self.assertEqual(session.hooks_mode, session.HOOKS_ALLOW_ALL)
5b3584c5a7c3 [hooks control] test and fix session.reset_hooks_mode_categories, closes #1908680
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7730
diff changeset
    50
                self.assertEqual(session.disabled_hook_categories, set(('integrity',)))
5b3584c5a7c3 [hooks control] test and fix session.reset_hooks_mode_categories, closes #1908680
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7730
diff changeset
    51
                self.assertEqual(session.enabled_hook_categories, set(('metadata',))) # not changed in such case
5b3584c5a7c3 [hooks control] test and fix session.reset_hooks_mode_categories, closes #1908680
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7730
diff changeset
    52
            self.assertEqual(session.hooks_mode, session.HOOKS_DENY_ALL)
5b3584c5a7c3 [hooks control] test and fix session.reset_hooks_mode_categories, closes #1908680
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7730
diff changeset
    53
            self.assertEqual(session.disabled_hook_categories, set())
5b3584c5a7c3 [hooks control] test and fix session.reset_hooks_mode_categories, closes #1908680
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7730
diff changeset
    54
            self.assertEqual(session.enabled_hook_categories, set(('metadata',)))
7350
c2452cd57026 [session] enhance session's transaction storage handling to fix cases where commit/rollback is done while in the context of hooks_control/security_enabled managers. Closes #1412648: commit or rollback during postcreate reset hooks control state
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    55
        # leaving context manager with no transaction running should reset the
7398
26695dd703d8 [repository api] definitly kill usage of word 'pool' to refer to connections set used by a session
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7364
diff changeset
    56
        # transaction local storage (and associated cnxset)
7350
c2452cd57026 [session] enhance session's transaction storage handling to fix cases where commit/rollback is done while in the context of hooks_control/security_enabled managers. Closes #1412648: commit or rollback during postcreate reset hooks control state
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    57
        self.assertEqual(session._tx_data, {})
7398
26695dd703d8 [repository api] definitly kill usage of word 'pool' to refer to connections set used by a session
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7364
diff changeset
    58
        self.assertEqual(session.cnxset, None)
7757
5b3584c5a7c3 [hooks control] test and fix session.reset_hooks_mode_categories, closes #1908680
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7730
diff changeset
    59
        self.assertEqual(session.hooks_mode, session.HOOKS_ALLOW_ALL)
5b3584c5a7c3 [hooks control] test and fix session.reset_hooks_mode_categories, closes #1908680
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7730
diff changeset
    60
        self.assertEqual(session.disabled_hook_categories, set())
5b3584c5a7c3 [hooks control] test and fix session.reset_hooks_mode_categories, closes #1908680
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7730
diff changeset
    61
        self.assertEqual(session.enabled_hook_categories, set())
7350
c2452cd57026 [session] enhance session's transaction storage handling to fix cases where commit/rollback is done while in the context of hooks_control/security_enabled managers. Closes #1412648: commit or rollback during postcreate reset hooks control state
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    62
7730
8d0edec31aaf [querier] we should not insert None but skip the line when some unknown eid is detected (closes #1892491)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
    63
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    64
if __name__ == '__main__':
8561
77ea3eed9946 [session] promote usage of [deny|all]_all_hooks_but session methods rather than hooks_control context manager directly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8554
diff changeset
    65
    from logilab.common.testlib import unittest_main
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    66
    unittest_main()