Skip to content

Commit cf22c51

Browse files
author
Artur Zakirov
committed
Added tests using testgres framework
1 parent 344d1c0 commit cf22c51

File tree

3 files changed

+126
-1
lines changed

3 files changed

+126
-1
lines changed

.gitignore

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,13 @@
11
.deps
22
*.o
33
*.so
4-
results
4+
results
5+
__pycache__
6+
*.pyc
7+
8+
# virtualenv
9+
bin
10+
include
11+
lib
12+
pip-selfcheck.json
13+

tests/__init__.py

Whitespace-only changes.

tests/pglist_tests.py

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
#coding: utf-8
2+
"""
3+
Test RUM index with big base 'pglist'
4+
5+
Copyright (c) 2015-2016, Postgres Professional
6+
"""
7+
import unittest
8+
import os
9+
import sys
10+
import gzip
11+
import testgres as tg
12+
13+
if sys.version_info[0] < 3:
14+
import urllib as request
15+
else:
16+
import urllib.request as request
17+
18+
from os.path import expanduser
19+
20+
class PglistTests(unittest.TestCase):
21+
def setUp(self):
22+
self.node = tg.get_new_node("pglist_select")
23+
try:
24+
self.node.init()
25+
self.node.append_conf("postgresql.conf",
26+
"shared_buffers='4GB'\n"
27+
"maintenance_work_mem='2GB'\n"
28+
"max_wal_size='2GB'\n"
29+
"work_mem='50MB'")
30+
self.node.start()
31+
32+
self.init_pglist_data(self.node)
33+
except Exception as e:
34+
self.printlog(self.node.logs_dir + "/postgresql.log")
35+
raise e
36+
37+
def tearDown(self):
38+
tg.stop_all()
39+
40+
def init_pglist_data(self, node):
41+
# Check if 'pglist' base exists
42+
base_exists = False
43+
bases = node.execute("postgres", "SELECT datname FROM pg_database")
44+
for base in bases:
45+
if base[0].lower() == "pglist":
46+
base_exists = True
47+
break
48+
49+
if base_exists:
50+
return
51+
52+
# Check if 'pglist' dump exists
53+
home = expanduser("~")
54+
pglist_dump = os.path.join(home, "pglist-28-04-16.dump")
55+
if not os.path.isfile(pglist_dump):
56+
pglist_dumpgz = pglist_dump + ".gz"
57+
if not os.path.isfile(pglist_dumpgz):
58+
print("Downloading: %s" % pglist_dumpgz)
59+
request.urlretrieve("http://www.sai.msu.su/~megera/postgres/files/pglist-28-04-16.dump.gz",
60+
pglist_dumpgz)
61+
62+
print("Decompressing: %s" % pglist_dumpgz)
63+
gz = gzip.open(pglist_dumpgz, 'rb')
64+
with open(pglist_dump, 'wb') as f:
65+
f.write(gz.read())
66+
67+
os.remove(pglist_dumpgz)
68+
69+
# Restore dump file
70+
print("Restoring 'pglist'")
71+
node.safe_psql("postgres", "CREATE DATABASE pglist")
72+
node.psql("pglist", filename=pglist_dump)
73+
74+
node.safe_psql("pglist", "CREATE EXTENSION rum")
75+
76+
def printlog(self, logfile):
77+
with open(logfile, 'r') as log:
78+
for line in log.readlines():
79+
print(line)
80+
81+
def test_order_by(self):
82+
"""Tests SELECT constructions to 'pglist' base"""
83+
try:
84+
print("Creating index 'rumidx_orderby_sent'")
85+
86+
self.node.safe_psql("pglist",
87+
"CREATE INDEX rumidx_orderby_sent ON pglist USING rum ("
88+
" fts rum_tsvector_timestamp_ops, sent) "
89+
" WITH (attach=sent, to=fts, order_by_attach=t)")
90+
91+
print("Running tests")
92+
93+
self.assertEqual(
94+
self.node.safe_psql(
95+
"pglist",
96+
"SELECT sent, subject "
97+
" FROM pglist "
98+
" WHERE fts @@ to_tsquery('english', 'backend <-> crushed') "
99+
" ORDER BY sent <=| '2016-01-01 00:01' LIMIT 5"
100+
),
101+
b'1999-06-02 11:52:46|Re: [HACKERS] PID of backend\n'
102+
)
103+
104+
self.assertEqual(
105+
self.node.safe_psql(
106+
"pglist",
107+
"SELECT count(*) FROM pglist WHERE fts @@ to_tsquery('english', 'tom & lane')"
108+
),
109+
b'222813\n'
110+
)
111+
except Exception as e:
112+
self.printlog(self.node.logs_dir + "/postgresql.log")
113+
raise e
114+
115+
if __name__ == "__main__":
116+
unittest.main()

0 commit comments

Comments
 (0)