author | Julien Cristau <julien.cristau@logilab.fr> |
Fri, 12 Feb 2016 15:21:21 +0100 | |
changeset 11111 | 606d4fea99f5 |
parent 11034 | 75d752e6daf7 |
permissions | -rw-r--r-- |
10439
45e18b4a7466
[devtools] change the way we start/stop postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents:
10328
diff
changeset
|
1 |
# copyright 2003-2015 LOGILAB S.A. (Paris, FRANCE), all rights reserved. |
8343
6bd8db130476
Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents:
7228
diff
changeset
|
2 |
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr |
6bd8db130476
Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents:
7228
diff
changeset
|
3 |
# |
6bd8db130476
Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents:
7228
diff
changeset
|
4 |
# This file is part of CubicWeb. |
6bd8db130476
Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents:
7228
diff
changeset
|
5 |
# |
6bd8db130476
Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents:
7228
diff
changeset
|
6 |
# CubicWeb is free software: you can redistribute it and/or modify it under the |
6bd8db130476
Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents:
7228
diff
changeset
|
7 |
# terms of the GNU Lesser General Public License as published by the Free |
6bd8db130476
Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents:
7228
diff
changeset
|
8 |
# Software Foundation, either version 2.1 of the License, or (at your option) |
6bd8db130476
Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents:
7228
diff
changeset
|
9 |
# any later version. |
6bd8db130476
Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents:
7228
diff
changeset
|
10 |
# |
6bd8db130476
Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents:
7228
diff
changeset
|
11 |
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT |
6bd8db130476
Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents:
7228
diff
changeset
|
12 |
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
6bd8db130476
Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents:
7228
diff
changeset
|
13 |
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more |
6bd8db130476
Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents:
7228
diff
changeset
|
14 |
# details. |
6bd8db130476
Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents:
7228
diff
changeset
|
15 |
# |
6bd8db130476
Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents:
7228
diff
changeset
|
16 |
# You should have received a copy of the GNU Lesser General Public License along |
6bd8db130476
Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents:
7228
diff
changeset
|
17 |
# with CubicWeb. If not, see <http://www.gnu.org/licenses/>. |
6bd8db130476
Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents:
7228
diff
changeset
|
18 |
|
7166
dde161937d3e
[time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6818
diff
changeset
|
19 |
from datetime import datetime |
9585
3f5b59527d31
[source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9499
diff
changeset
|
20 |
from threading import Thread |
6206
d4c73211b0b8
[test] skip unittest_fti if we don't have the required setup...
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5877
diff
changeset
|
21 |
|
10609
e2d8e81bfe68
[py3k] import range using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents:
10522
diff
changeset
|
22 |
from six.moves import range |
e2d8e81bfe68
[py3k] import range using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents:
10522
diff
changeset
|
23 |
|
6818
5fa425574548
[server test] can't use skipTest method as a class method, raise appropriate exception instead
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6780
diff
changeset
|
24 |
from logilab.common.testlib import SkipTest |
5fa425574548
[server test] can't use skipTest method as a class method, raise appropriate exception instead
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6780
diff
changeset
|
25 |
|
10812
a747e211266b
[server/test] don't leak timeout from one test class to the next
Julien Cristau <julien.cristau@logilab.fr>
parents:
10609
diff
changeset
|
26 |
import logilab.database as lgdb |
10446
1e6655cff5ab
add IUserFriendlyError adapter for violation of check constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
10439
diff
changeset
|
27 |
from cubicweb import ValidationError |
10439
45e18b4a7466
[devtools] change the way we start/stop postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents:
10328
diff
changeset
|
28 |
from cubicweb.devtools import PostgresApptestConfiguration, startpgcluster, stoppgcluster |
5768
1e73a466aa69
[fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
29 |
from cubicweb.devtools.testlib import CubicWebTC |
8190
2a3c1b787688
[vreg] move base registry implementation to logilab.common. Closes #1916014
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8139
diff
changeset
|
30 |
from cubicweb.predicates import is_instance |
5768
1e73a466aa69
[fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
31 |
from cubicweb.entities.adapters import IFTIndexableAdapter |
1e73a466aa69
[fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
32 |
|
7166
dde161937d3e
[time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6818
diff
changeset
|
33 |
from unittest_querier import FixedOffset |
6780
92e4c07f86c0
[server/test] raise SkipTest from setUpModule instead of setUp( unittest2 behaviour) + kill some deprecation warnings
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
6436
diff
changeset
|
34 |
|
10439
45e18b4a7466
[devtools] change the way we start/stop postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents:
10328
diff
changeset
|
35 |
|
45e18b4a7466
[devtools] change the way we start/stop postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents:
10328
diff
changeset
|
36 |
def setUpModule(): |
45e18b4a7466
[devtools] change the way we start/stop postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents:
10328
diff
changeset
|
37 |
startpgcluster(__file__) |
45e18b4a7466
[devtools] change the way we start/stop postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents:
10328
diff
changeset
|
38 |
|
45e18b4a7466
[devtools] change the way we start/stop postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents:
10328
diff
changeset
|
39 |
|
45e18b4a7466
[devtools] change the way we start/stop postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents:
10328
diff
changeset
|
40 |
def tearDownModule(): |
45e18b4a7466
[devtools] change the way we start/stop postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents:
10328
diff
changeset
|
41 |
stoppgcluster(__file__) |
45e18b4a7466
[devtools] change the way we start/stop postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents:
10328
diff
changeset
|
42 |
|
45e18b4a7466
[devtools] change the way we start/stop postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents:
10328
diff
changeset
|
43 |
|
10455
ad0615d4500d
[server/test] Add a test for db-statement-timeout option
Julien Cristau <julien.cristau@logilab.fr>
parents:
10328
diff
changeset
|
44 |
class PostgresTimeoutConfiguration(PostgresApptestConfiguration): |
10522 | 45 |
def __init__(self, *args, **kwargs): |
46 |
self.default_sources = PostgresApptestConfiguration.default_sources.copy() |
|
47 |
self.default_sources['system'] = PostgresApptestConfiguration.default_sources['system'].copy() |
|
48 |
self.default_sources['system']['db-statement-timeout'] = 200 |
|
49 |
super(PostgresTimeoutConfiguration, self).__init__(*args, **kwargs) |
|
10455
ad0615d4500d
[server/test] Add a test for db-statement-timeout option
Julien Cristau <julien.cristau@logilab.fr>
parents:
10328
diff
changeset
|
50 |
|
ad0615d4500d
[server/test] Add a test for db-statement-timeout option
Julien Cristau <julien.cristau@logilab.fr>
parents:
10328
diff
changeset
|
51 |
|
5768
1e73a466aa69
[fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
52 |
class PostgresFTITC(CubicWebTC): |
10455
ad0615d4500d
[server/test] Add a test for db-statement-timeout option
Julien Cristau <julien.cristau@logilab.fr>
parents:
10328
diff
changeset
|
53 |
configcls = PostgresTimeoutConfiguration |
6206
d4c73211b0b8
[test] skip unittest_fti if we don't have the required setup...
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5877
diff
changeset
|
54 |
|
10812
a747e211266b
[server/test] don't leak timeout from one test class to the next
Julien Cristau <julien.cristau@logilab.fr>
parents:
10609
diff
changeset
|
55 |
@classmethod |
a747e211266b
[server/test] don't leak timeout from one test class to the next
Julien Cristau <julien.cristau@logilab.fr>
parents:
10609
diff
changeset
|
56 |
def setUpClass(cls): |
a747e211266b
[server/test] don't leak timeout from one test class to the next
Julien Cristau <julien.cristau@logilab.fr>
parents:
10609
diff
changeset
|
57 |
cls.orig_connect_hooks = lgdb.SQL_CONNECT_HOOKS['postgres'][:] |
a747e211266b
[server/test] don't leak timeout from one test class to the next
Julien Cristau <julien.cristau@logilab.fr>
parents:
10609
diff
changeset
|
58 |
|
a747e211266b
[server/test] don't leak timeout from one test class to the next
Julien Cristau <julien.cristau@logilab.fr>
parents:
10609
diff
changeset
|
59 |
@classmethod |
a747e211266b
[server/test] don't leak timeout from one test class to the next
Julien Cristau <julien.cristau@logilab.fr>
parents:
10609
diff
changeset
|
60 |
def tearDownClass(cls): |
a747e211266b
[server/test] don't leak timeout from one test class to the next
Julien Cristau <julien.cristau@logilab.fr>
parents:
10609
diff
changeset
|
61 |
lgdb.SQL_CONNECT_HOOKS['postgres'] = cls.orig_connect_hooks |
a747e211266b
[server/test] don't leak timeout from one test class to the next
Julien Cristau <julien.cristau@logilab.fr>
parents:
10609
diff
changeset
|
62 |
|
9585
3f5b59527d31
[source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9499
diff
changeset
|
63 |
def test_eid_range(self): |
3f5b59527d31
[source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9499
diff
changeset
|
64 |
# concurrent allocation of eid ranges |
3f5b59527d31
[source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9499
diff
changeset
|
65 |
source = self.session.repo.sources_by_uri['system'] |
3f5b59527d31
[source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9499
diff
changeset
|
66 |
range1 = [] |
3f5b59527d31
[source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9499
diff
changeset
|
67 |
range2 = [] |
3f5b59527d31
[source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9499
diff
changeset
|
68 |
def allocate_eid_ranges(session, target): |
10609
e2d8e81bfe68
[py3k] import range using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents:
10522
diff
changeset
|
69 |
for x in range(1, 10): |
9585
3f5b59527d31
[source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9499
diff
changeset
|
70 |
eid = source.create_eid(session, count=x) |
3f5b59527d31
[source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9499
diff
changeset
|
71 |
target.extend(range(eid-x, eid)) |
3f5b59527d31
[source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9499
diff
changeset
|
72 |
|
3f5b59527d31
[source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9499
diff
changeset
|
73 |
t1 = Thread(target=lambda: allocate_eid_ranges(self.session, range1)) |
3f5b59527d31
[source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9499
diff
changeset
|
74 |
t2 = Thread(target=lambda: allocate_eid_ranges(self.session, range2)) |
3f5b59527d31
[source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9499
diff
changeset
|
75 |
t1.start() |
3f5b59527d31
[source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9499
diff
changeset
|
76 |
t2.start() |
3f5b59527d31
[source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9499
diff
changeset
|
77 |
t1.join() |
3f5b59527d31
[source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9499
diff
changeset
|
78 |
t2.join() |
3f5b59527d31
[source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9499
diff
changeset
|
79 |
self.assertEqual(range1, sorted(range1)) |
3f5b59527d31
[source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9499
diff
changeset
|
80 |
self.assertEqual(range2, sorted(range2)) |
3f5b59527d31
[source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9499
diff
changeset
|
81 |
self.assertEqual(set(), set(range1) & set(range2)) |
3f5b59527d31
[source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9499
diff
changeset
|
82 |
|
5768
1e73a466aa69
[fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
83 |
def test_occurence_count(self): |
9804
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
84 |
with self.admin_access.repo_cnx() as cnx: |
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
85 |
c1 = cnx.create_entity('Card', title=u'c1', |
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
86 |
content=u'cubicweb cubicweb cubicweb') |
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
87 |
c2 = cnx.create_entity('Card', title=u'c3', |
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
88 |
content=u'cubicweb') |
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
89 |
c3 = cnx.create_entity('Card', title=u'c2', |
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
90 |
content=u'cubicweb cubicweb') |
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
91 |
cnx.commit() |
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
92 |
self.assertEqual(cnx.execute('Card X ORDERBY FTIRANK(X) DESC ' |
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
93 |
'WHERE X has_text "cubicweb"').rows, |
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
94 |
[[c1.eid,], [c3.eid,], [c2.eid,]]) |
5768
1e73a466aa69
[fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
95 |
|
1e73a466aa69
[fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
96 |
|
1e73a466aa69
[fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
97 |
def test_attr_weight(self): |
1e73a466aa69
[fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
98 |
class CardIFTIndexableAdapter(IFTIndexableAdapter): |
5877
0c7b7b76a84f
[selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5768
diff
changeset
|
99 |
__select__ = is_instance('Card') |
5768
1e73a466aa69
[fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
100 |
attr_weight = {'title': 'A'} |
1e73a466aa69
[fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
101 |
with self.temporary_appobjects(CardIFTIndexableAdapter): |
9804
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
102 |
with self.admin_access.repo_cnx() as cnx: |
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
103 |
c1 = cnx.create_entity('Card', title=u'c1', |
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
104 |
content=u'cubicweb cubicweb cubicweb') |
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
105 |
c2 = cnx.create_entity('Card', title=u'c2', |
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
106 |
content=u'cubicweb cubicweb') |
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
107 |
c3 = cnx.create_entity('Card', title=u'cubicweb', |
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
108 |
content=u'autre chose') |
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
109 |
cnx.commit() |
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
110 |
self.assertEqual(cnx.execute('Card X ORDERBY FTIRANK(X) DESC ' |
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
111 |
'WHERE X has_text "cubicweb"').rows, |
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
112 |
[[c3.eid,], [c1.eid,], [c2.eid,]]) |
5768
1e73a466aa69
[fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
113 |
|
1e73a466aa69
[fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
114 |
def test_entity_weight(self): |
1e73a466aa69
[fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
115 |
class PersonneIFTIndexableAdapter(IFTIndexableAdapter): |
5877
0c7b7b76a84f
[selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5768
diff
changeset
|
116 |
__select__ = is_instance('Personne') |
5768
1e73a466aa69
[fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
117 |
entity_weight = 2.0 |
1e73a466aa69
[fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff
changeset
|
118 |
with self.temporary_appobjects(PersonneIFTIndexableAdapter): |
9804
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
119 |
with self.admin_access.repo_cnx() as cnx: |
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
120 |
c1 = cnx.create_entity('Personne', nom=u'c1', prenom=u'cubicweb') |
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
121 |
c2 = cnx.create_entity('Comment', content=u'cubicweb cubicweb', |
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
122 |
comments=c1) |
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
123 |
c3 = cnx.create_entity('Comment', content=u'cubicweb cubicweb cubicweb', |
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
124 |
comments=c1) |
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
125 |
cnx.commit() |
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
126 |
self.assertEqual(cnx.execute('Any X ORDERBY FTIRANK(X) DESC ' |
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
127 |
'WHERE X has_text "cubicweb"').rows, |
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
128 |
[[c1.eid,], [c3.eid,], [c2.eid,]]) |
6436
275e9f402ccc
[test] missing main
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6340
diff
changeset
|
129 |
|
7166
dde161937d3e
[time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6818
diff
changeset
|
130 |
def test_tz_datetime(self): |
9804
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
131 |
with self.admin_access.repo_cnx() as cnx: |
11034
75d752e6daf7
[server] improve TZDatetime support
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
10812
diff
changeset
|
132 |
bob = cnx.create_entity('Personne', nom=u'bob', |
75d752e6daf7
[server] improve TZDatetime support
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
10812
diff
changeset
|
133 |
tzdatenaiss=datetime(1977, 6, 7, 2, 0, tzinfo=FixedOffset(1))) |
9804
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
134 |
datenaiss = cnx.execute("Any XD WHERE X nom 'bob', X tzdatenaiss XD")[0][0] |
11034
75d752e6daf7
[server] improve TZDatetime support
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
10812
diff
changeset
|
135 |
self.assertIsNotNone(datenaiss.tzinfo) |
9804
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
136 |
self.assertEqual(datenaiss.utctimetuple()[:5], (1977, 6, 7, 1, 0)) |
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
137 |
cnx.commit() |
11034
75d752e6daf7
[server] improve TZDatetime support
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
10812
diff
changeset
|
138 |
cnx.create_entity('Personne', nom=u'boby', |
75d752e6daf7
[server] improve TZDatetime support
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
10812
diff
changeset
|
139 |
tzdatenaiss=datetime(1977, 6, 7, 2, 0)) |
9804
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
140 |
datenaiss = cnx.execute("Any XD WHERE X nom 'boby', X tzdatenaiss XD")[0][0] |
11034
75d752e6daf7
[server] improve TZDatetime support
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
10812
diff
changeset
|
141 |
self.assertIsNotNone(datenaiss.tzinfo) |
9804
fe9ae959da08
[tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9585
diff
changeset
|
142 |
self.assertEqual(datenaiss.utctimetuple()[:5], (1977, 6, 7, 2, 0)) |
11034
75d752e6daf7
[server] improve TZDatetime support
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
10812
diff
changeset
|
143 |
rset = cnx.execute("Any X WHERE X tzdatenaiss %(d)s", |
75d752e6daf7
[server] improve TZDatetime support
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
10812
diff
changeset
|
144 |
{'d': datetime(1977, 6, 7, 2, 0, tzinfo=FixedOffset(1))}) |
75d752e6daf7
[server] improve TZDatetime support
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
10812
diff
changeset
|
145 |
self.assertEqual(rset.rows, [[bob.eid]]) |
7166
dde161937d3e
[time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6818
diff
changeset
|
146 |
|
10446
1e6655cff5ab
add IUserFriendlyError adapter for violation of check constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
10439
diff
changeset
|
147 |
def test_constraint_validationerror(self): |
1e6655cff5ab
add IUserFriendlyError adapter for violation of check constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
10439
diff
changeset
|
148 |
with self.admin_access.repo_cnx() as cnx: |
1e6655cff5ab
add IUserFriendlyError adapter for violation of check constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
10439
diff
changeset
|
149 |
with cnx.allow_all_hooks_but('integrity'): |
1e6655cff5ab
add IUserFriendlyError adapter for violation of check constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
10439
diff
changeset
|
150 |
with self.assertRaises(ValidationError) as cm: |
1e6655cff5ab
add IUserFriendlyError adapter for violation of check constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
10439
diff
changeset
|
151 |
cnx.execute("INSERT Note N: N type 'nogood'") |
1e6655cff5ab
add IUserFriendlyError adapter for violation of check constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
10439
diff
changeset
|
152 |
self.assertEqual(cm.exception.errors, |
1e6655cff5ab
add IUserFriendlyError adapter for violation of check constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
10439
diff
changeset
|
153 |
{'type-subject': u'invalid value %(KEY-value)s, it must be one of %(KEY-choices)s'}) |
1e6655cff5ab
add IUserFriendlyError adapter for violation of check constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
10439
diff
changeset
|
154 |
self.assertEqual(cm.exception.msgargs, |
1e6655cff5ab
add IUserFriendlyError adapter for violation of check constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
10439
diff
changeset
|
155 |
{'type-subject-value': u'"nogood"', |
1e6655cff5ab
add IUserFriendlyError adapter for violation of check constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
10439
diff
changeset
|
156 |
'type-subject-choices': u'"todo", "a", "b", "T", "lalala"'}) |
1e6655cff5ab
add IUserFriendlyError adapter for violation of check constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
10439
diff
changeset
|
157 |
|
10522 | 158 |
def test_statement_timeout(self): |
159 |
with self.admin_access.repo_cnx() as cnx: |
|
160 |
cnx.system_sql('select pg_sleep(0.1)') |
|
161 |
with self.assertRaises(Exception): |
|
162 |
cnx.system_sql('select pg_sleep(0.3)') |
|
163 |
||
10446
1e6655cff5ab
add IUserFriendlyError adapter for violation of check constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
10439
diff
changeset
|
164 |
|
10328
d7ff46d958f4
[postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
9804
diff
changeset
|
165 |
class PostgresLimitSizeTC(CubicWebTC): |
d7ff46d958f4
[postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
9804
diff
changeset
|
166 |
configcls = PostgresApptestConfiguration |
d7ff46d958f4
[postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
9804
diff
changeset
|
167 |
|
d7ff46d958f4
[postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
9804
diff
changeset
|
168 |
def test(self): |
d7ff46d958f4
[postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
9804
diff
changeset
|
169 |
with self.admin_access.repo_cnx() as cnx: |
d7ff46d958f4
[postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
9804
diff
changeset
|
170 |
def sql(string): |
d7ff46d958f4
[postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
9804
diff
changeset
|
171 |
return cnx.system_sql(string).fetchone()[0] |
d7ff46d958f4
[postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
9804
diff
changeset
|
172 |
yield self.assertEqual, sql("SELECT limit_size('<p>hello</p>', 'text/html', 20)"), \ |
d7ff46d958f4
[postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
9804
diff
changeset
|
173 |
'<p>hello</p>' |
d7ff46d958f4
[postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
9804
diff
changeset
|
174 |
yield self.assertEqual, sql("SELECT limit_size('<p>hello</p>', 'text/html', 2)"), \ |
d7ff46d958f4
[postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
9804
diff
changeset
|
175 |
'he...' |
d7ff46d958f4
[postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
9804
diff
changeset
|
176 |
yield self.assertEqual, sql("SELECT limit_size('<br/>hello', 'text/html', 2)"), \ |
d7ff46d958f4
[postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
9804
diff
changeset
|
177 |
'he...' |
d7ff46d958f4
[postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
9804
diff
changeset
|
178 |
yield self.assertEqual, sql("SELECT limit_size('<span class=\"1\">he</span>llo', 'text/html', 2)"), \ |
d7ff46d958f4
[postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
9804
diff
changeset
|
179 |
'he...' |
d7ff46d958f4
[postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
9804
diff
changeset
|
180 |
yield self.assertEqual, sql("SELECT limit_size('<span>a>b</span>', 'text/html', 2)"), \ |
d7ff46d958f4
[postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
9804
diff
changeset
|
181 |
'a>...' |
d7ff46d958f4
[postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
9804
diff
changeset
|
182 |
|
10455
ad0615d4500d
[server/test] Add a test for db-statement-timeout option
Julien Cristau <julien.cristau@logilab.fr>
parents:
10328
diff
changeset
|
183 |
|
6436
275e9f402ccc
[test] missing main
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6340
diff
changeset
|
184 |
if __name__ == '__main__': |
275e9f402ccc
[test] missing main
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6340
diff
changeset
|
185 |
from logilab.common.testlib import unittest_main |
275e9f402ccc
[test] missing main
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6340
diff
changeset
|
186 |
unittest_main() |