server/test/unittest_session.py
author Pierre-Yves David <pierre-yves.david@logilab.fr>
Tue, 25 Jun 2013 10:59:01 +0200
changeset 9070 4a803380f718
parent 9020 cb87e831c183
child 9109 499db4fd03f8
permissions -rw-r--r--
PARTIAL: Using the repoapi in test Test now use the repoapi.ClientConnection to access the repo. This is very big change. The current method to access the repo are kept for backward compatibility. The new methods will be introduced much later. The TestCase keep a ClientConnection To an admin session for the whole test. This changeset does not makes all tests pass without the next one that change set htt without the next one that change the http stack
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
8846
f31e2d6f1b53 [test] use the right order in some assertEqual
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8771
diff changeset
    20
from cubicweb.server.session import HOOKS_ALLOW_ALL, HOOKS_DENY_ALL
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    21
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
    22
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
    23
    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
    24
        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
    25
        self.assertFalse(session.running_dbapi_query)
5197
98dc05495e3e [test] properly close session
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5193
diff changeset
    26
        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
    27
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
    28
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
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
    30
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
    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
    32
        session = self.session
9070
4a803380f718 PARTIAL: Using the repoapi in test
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9020
diff changeset
    33
        # this test check the "old" behavior of session with automatic connection management
4a803380f718 PARTIAL: Using the repoapi in test
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9020
diff changeset
    34
        # close the default cnx, we do nto want it to interfer with the test
4a803380f718 PARTIAL: Using the repoapi in test
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9020
diff changeset
    35
        self.cnx.close()
4a803380f718 PARTIAL: Using the repoapi in test
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9020
diff changeset
    36
        # open a dedicated one
4a803380f718 PARTIAL: Using the repoapi in test
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9020
diff changeset
    37
        session.set_cnx('Some-random-cnx-unrelated-to-the-default-one')
4a803380f718 PARTIAL: Using the repoapi in test
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9020
diff changeset
    38
        # go test go
8846
f31e2d6f1b53 [test] use the right order in some assertEqual
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8771
diff changeset
    39
        self.assertEqual(HOOKS_ALLOW_ALL, session.hooks_mode)
f31e2d6f1b53 [test] use the right order in some assertEqual
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8771
diff changeset
    40
        self.assertEqual(set(), session.disabled_hook_categories)
f31e2d6f1b53 [test] use the right order in some assertEqual
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8771
diff changeset
    41
        self.assertEqual(set(), session.enabled_hook_categories)
9020
cb87e831c183 rename server.session.transaction into server.session.connection
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8846
diff changeset
    42
        self.assertEqual(1, len(session._cnxs))
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
    43
        with session.deny_all_hooks_but('metadata'):
8846
f31e2d6f1b53 [test] use the right order in some assertEqual
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8771
diff changeset
    44
            self.assertEqual(HOOKS_DENY_ALL, session.hooks_mode)
f31e2d6f1b53 [test] use the right order in some assertEqual
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8771
diff changeset
    45
            self.assertEqual(set(), session.disabled_hook_categories)
f31e2d6f1b53 [test] use the right order in some assertEqual
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8771
diff changeset
    46
            self.assertEqual(set(('metadata',)), session.enabled_hook_categories)
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
    47
            session.commit()
8846
f31e2d6f1b53 [test] use the right order in some assertEqual
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8771
diff changeset
    48
            self.assertEqual(HOOKS_DENY_ALL, session.hooks_mode)
f31e2d6f1b53 [test] use the right order in some assertEqual
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8771
diff changeset
    49
            self.assertEqual(set(), session.disabled_hook_categories)
f31e2d6f1b53 [test] use the right order in some assertEqual
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8771
diff changeset
    50
            self.assertEqual(set(('metadata',)), session.enabled_hook_categories)
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
    51
            session.rollback()
8846
f31e2d6f1b53 [test] use the right order in some assertEqual
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8771
diff changeset
    52
            self.assertEqual(HOOKS_DENY_ALL, session.hooks_mode)
f31e2d6f1b53 [test] use the right order in some assertEqual
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8771
diff changeset
    53
            self.assertEqual(set(), session.disabled_hook_categories)
f31e2d6f1b53 [test] use the right order in some assertEqual
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8771
diff changeset
    54
            self.assertEqual(set(('metadata',)), session.enabled_hook_categories)
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
    55
            with session.allow_all_hooks_but('integrity'):
8846
f31e2d6f1b53 [test] use the right order in some assertEqual
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8771
diff changeset
    56
                self.assertEqual(HOOKS_ALLOW_ALL, session.hooks_mode)
f31e2d6f1b53 [test] use the right order in some assertEqual
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8771
diff changeset
    57
                self.assertEqual(set(('integrity',)), session.disabled_hook_categories)
f31e2d6f1b53 [test] use the right order in some assertEqual
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8771
diff changeset
    58
                self.assertEqual(set(('metadata',)), session.enabled_hook_categories) # not changed in such case
f31e2d6f1b53 [test] use the right order in some assertEqual
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8771
diff changeset
    59
            self.assertEqual(HOOKS_DENY_ALL, session.hooks_mode)
f31e2d6f1b53 [test] use the right order in some assertEqual
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8771
diff changeset
    60
            self.assertEqual(set(), session.disabled_hook_categories)
f31e2d6f1b53 [test] use the right order in some assertEqual
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8771
diff changeset
    61
            self.assertEqual(set(('metadata',)), session.enabled_hook_categories)
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
        # 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
    63
        # transaction local storage (and associated cnxset)
9020
cb87e831c183 rename server.session.transaction into server.session.connection
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8846
diff changeset
    64
        self.assertEqual({}, session._cnxs)
8846
f31e2d6f1b53 [test] use the right order in some assertEqual
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8771
diff changeset
    65
        self.assertEqual(None, session.cnxset)
f31e2d6f1b53 [test] use the right order in some assertEqual
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8771
diff changeset
    66
        self.assertEqual(HOOKS_ALLOW_ALL, session.hooks_mode, session.HOOKS_ALLOW_ALL)
f31e2d6f1b53 [test] use the right order in some assertEqual
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8771
diff changeset
    67
        self.assertEqual(set(), session.disabled_hook_categories)
f31e2d6f1b53 [test] use the right order in some assertEqual
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8771
diff changeset
    68
        self.assertEqual(set(), session.enabled_hook_categories)
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
    69
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
    70
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    71
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
    72
    from logilab.common.testlib import unittest_main
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    73
    unittest_main()