Skip to content
This repository was archived by the owner on Aug 16, 2022. It is now read-only.

Commit 82bb6fe

Browse files
committed
Berlinium tests
1 parent 47afa66 commit 82bb6fe

File tree

6 files changed

+125
-64
lines changed

6 files changed

+125
-64
lines changed

tests/__init__.py

Whitespace-only changes.

tests/berlinium/asleep_test.py

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,27 @@
33
import os, sys
44
import time
55
import subprocess
6+
import unittest
67

7-
if __name__ == "__main__":
8-
try:
9-
prcnum = int(sys.argv[1])
10-
except (IndexError, ValueError):
11-
sys.exit("Usage: script #processes")
128

13-
basedir = os.path.dirname(os.path.realpath(os.path.abspath(__file__)))
14-
daemon = subprocess.Popen([sys.executable, os.path.join(basedir, 'asleep_server.py')])
15-
time.sleep(2) # wait for initialization
9+
basedir = os.path.dirname(os.path.realpath(os.path.abspath(__file__)))
1610

17-
children = []
18-
for i in range(prcnum):
19-
children.append( subprocess.Popen([sys.executable, os.path.join(basedir, 'asleep_client.py')]) )
11+
class Test_Async_Sleep_Server(unittest.TestCase):
12+
@classmethod
13+
def setUpClass(cls):
14+
cls.daemon = subprocess.Popen([sys.executable, os.path.join(basedir, 'asleep_server.py')])
15+
time.sleep(2) # wait for initialization
2016

21-
time.sleep(prcnum + 2)
22-
daemon.terminate()
17+
def test_response(self):
18+
prcnum = 5
19+
children = []
20+
for i in range(prcnum):
21+
children.append( subprocess.Popen([sys.executable, os.path.join(basedir, 'asleep_client.py')]) )
22+
time.sleep(7)
2323

24-
for i in children:
25-
assert i.poll() == 0
24+
for i in children:
25+
self.assertEqual(i.poll(), 0, "Server response is too slow")
26+
27+
@classmethod
28+
def tearDownClass(cls):
29+
cls.daemon.terminate()

tests/berlinium/basic_test.py

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,27 @@
33
import os, sys
44
import time
55
import subprocess
6+
import unittest
67

7-
if __name__ == "__main__":
8-
try:
9-
prcnum = int(sys.argv[1])
10-
except (IndexError, ValueError):
11-
sys.exit("Usage: script #processes")
128

13-
basedir = os.path.dirname(os.path.realpath(os.path.abspath(__file__)))
14-
daemon = subprocess.Popen([sys.executable, os.path.join(basedir, 'basic_server.py')])
15-
time.sleep(2) # wait for initialization
9+
basedir = os.path.dirname(os.path.realpath(os.path.abspath(__file__)))
1610

17-
children = []
18-
for i in range(prcnum):
19-
children.append( subprocess.Popen([sys.executable, os.path.join(basedir, 'basic_client.py')]) )
11+
class Test_Async_Basic_Server(unittest.TestCase):
12+
@classmethod
13+
def setUpClass(cls):
14+
cls.daemon = subprocess.Popen([sys.executable, os.path.join(basedir, 'basic_server.py')])
15+
time.sleep(2) # wait for initialization
2016

21-
time.sleep(prcnum + 2)
22-
daemon.terminate()
17+
def test_response(self):
18+
prcnum = 5
19+
children = []
20+
for i in range(prcnum):
21+
children.append( subprocess.Popen([sys.executable, os.path.join(basedir, 'basic_client.py')]) )
22+
time.sleep(7)
2323

24-
for i in children:
25-
assert i.poll() == 0
24+
for i in children:
25+
self.assertEqual(i.poll(), 0, "Server response is too slow")
26+
27+
@classmethod
28+
def tearDownClass(cls):
29+
cls.daemon.terminate()

tests/berlinium/gui_test.py

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,27 @@
33
import os, sys
44
import time
55
import subprocess
6+
import unittest
67

7-
if __name__ == "__main__":
8-
try:
9-
prcnum = int(sys.argv[1])
10-
except (IndexError, ValueError):
11-
sys.exit("Usage: script #processes")
128

13-
basedir = os.path.dirname(os.path.realpath(os.path.abspath(__file__)))
14-
daemon = subprocess.Popen([sys.executable, os.path.join(basedir, '../../utils/gui_server.py')])
15-
time.sleep(2) # wait for initialization
9+
basedir = os.path.dirname(os.path.realpath(os.path.abspath(__file__)))
1610

17-
children = []
18-
for i in range(prcnum):
19-
children.append( subprocess.Popen([sys.executable, os.path.join(basedir, 'gui_client.py')]) )
11+
class Test_GUI_Server(unittest.TestCase):
12+
@classmethod
13+
def setUpClass(cls):
14+
cls.daemon = subprocess.Popen([sys.executable, os.path.join(basedir, '../../utils/gui_server.py')])
15+
time.sleep(2) # wait for initialization
2016

21-
time.sleep(prcnum + 2)
22-
daemon.terminate()
17+
def test_response(self):
18+
prcnum = 10
19+
children = []
20+
for i in range(prcnum):
21+
children.append( subprocess.Popen([sys.executable, os.path.join(basedir, 'gui_client.py')]) )
22+
time.sleep(6)
2323

24-
for i in children:
25-
assert i.poll() == 0
24+
for i in children:
25+
self.assertEqual(i.poll(), 0, "Server response is too slow")
26+
27+
@classmethod
28+
def tearDownClass(cls):
29+
cls.daemon.terminate()

tests/functional/query_approaches_test.py

Lines changed: 67 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,44 +16,92 @@
1616
from . import TestLayerDB
1717

1818

19-
class Test_Query_Approaches(TestLayerDB):
20-
__test_calcs_dir__ = EXAMPLE_DIR
21-
22-
_work = API()
23-
searched_category = (80, 'plane waves') # defined in /init-data.sql
19+
class Hierarchy_Params(object):
20+
work = API()
21+
searched_category = (80, 'gaussians') # defined in /init-data.sql
2422
searched_category_num = None # defined in hierarchy
2523
space_grp_topic_source = 'ng' # defined in parsers and set in API.classify()
26-
_categ_found = False
27-
for cid, series in _work.hierarchy_values.iteritems():
28-
if _categ_found: break
24+
categ_found = False
25+
for cid, series in work.hierarchy_values.iteritems():
26+
if categ_found: break
2927
elif cid == searched_category[0]:
3028
for num, name in series.iteritems():
3129
if name == searched_category[1]:
32-
_categ_found, searched_category_num = True, num
30+
categ_found, searched_category_num = True, num
3331
break
3432
else: raise RuntimeError("Cannot determine the category number!")
3533

34+
def get_serialized_results(sess_handle, topic_cid, topic_num, topic_src):
35+
serialized_results = {}
36+
for checksum, grid_json in sess_handle.query(model.Grid.checksum, model.Grid.info).join(model.tags, model.Grid.checksum == model.tags.c.checksum).join(model.Topic, model.tags.c.tid == model.Topic.tid).filter(model.Topic.cid == topic_cid, model.Topic.topic == topic_num).all():
37+
grid_json = json.loads(grid_json)
38+
try: serialized_results[checksum] = grid_json[topic_src]
39+
except KeyError: pass # no such property in JSON
40+
return serialized_results
41+
42+
def get_relational_results(sess_handle, topic_num):
43+
relational_results = {}
44+
for checksum, space_grp in sess_handle.query(model.Calculation.checksum, model.Spacegroup.n).join(model.Spacegroup, model.Calculation.checksum == model.Spacegroup.checksum).join(model.Basis, model.Calculation.checksum == model.Basis.checksum).filter(model.Basis.kind == topic_num).all():
45+
relational_results[checksum] = space_grp
46+
return relational_results
47+
48+
class Test_Query_Approaches(TestLayerDB):
49+
__test_calcs_dir__ = EXAMPLE_DIR
50+
3651
@classmethod
3752
def setUpClass(cls):
3853
super(Test_Query_Approaches, cls).setUpClass(dbname=__name__.split('.')[-1])
3954

4055
def test_equality(self):
41-
serialized_results = {}
4256
tick1 = time.time()
43-
for checksum, grid_json in self.db.session.query(model.Grid.checksum, model.Grid.info).join(model.tags, model.Grid.checksum == model.tags.c.checksum).join(model.Topic, model.tags.c.tid == model.Topic.tid).filter(model.Topic.cid == self.searched_category[0], model.Topic.topic == self.searched_category_num).all():
44-
grid_json = json.loads(grid_json)
45-
try: serialized_results[checksum] = grid_json[self.space_grp_topic_source]
46-
except KeyError: pass # no such property in JSON
47-
self.report.warning("Query in serialized approach (%s results) took %1.2f sc" % (len(serialized_results), time.time() - tick1))
57+
serialized_results = get_serialized_results(
58+
self.db.session,
59+
Hierarchy_Params.searched_category[0],
60+
Hierarchy_Params.searched_category_num,
61+
Hierarchy_Params.space_grp_topic_source
62+
)
63+
tick2 = time.time()
64+
self.report.warning("Query in serialized approach (%s results) took %1.2f sc" % (len(serialized_results), tick2 - tick1))
4865

49-
relational_results = {}
66+
tick1 = time.time()
67+
relational_results = get_relational_results(
68+
self.db.session,
69+
Hierarchy_Params.searched_category_num
70+
)
5071
tick2 = time.time()
51-
for checksum, space_grp in self.db.session.query(model.Calculation.checksum, model.Spacegroup.n).join(model.Spacegroup, model.Calculation.checksum == model.Spacegroup.checksum).join(model.Basis, model.Calculation.checksum == model.Basis.checksum).filter(model.Basis.kind == self.searched_category_num).all():
52-
relational_results[checksum] = space_grp
53-
self.report.warning("Query in relational approach (%s results) took %1.2f sc" % (len(relational_results), time.time() - tick2))
72+
self.report.warning("Query in relational approach (%s results) took %1.2f sc" % (len(relational_results), tick2 - tick1))
5473

5574
try: self.assertEqual(serialized_results, relational_results,
5675
"Approaches give different results!\nSerialized:\n%s\nRelational:\n%s\n" % (serialized_results, relational_results))
5776
except:
5877
TestLayerDB.failed = True
5978
raise
79+
80+
81+
if __name__ == "__main__":
82+
# NB -m tests.functional.query_approaches_test
83+
84+
from tilde.core.settings import settings, connect_database
85+
86+
session = connect_database(settings, default_actions=False)
87+
print "DB: %s" % (settings['db']['default_sqlite_db'] if settings['db']['engine'] == 'sqlite' else settings['db']['dbname'])
88+
89+
tick1 = time.time()
90+
serialized_results = get_serialized_results(
91+
session,
92+
Hierarchy_Params.searched_category[0],
93+
Hierarchy_Params.searched_category_num,
94+
Hierarchy_Params.space_grp_topic_source
95+
)
96+
tick2 = time.time()
97+
print "Query in serialized approach (%s results) took %1.2f sc" % (len(serialized_results), tick2 - tick1)
98+
99+
tick1 = time.time()
100+
relational_results = get_relational_results(
101+
session,
102+
Hierarchy_Params.searched_category_num
103+
)
104+
tick2 = time.time()
105+
print "Query in relational approach (%s results) took %1.2f sc" % (len(relational_results), tick2 - tick1)
106+
107+
print "Results equal?", serialized_results==relational_results

tests/run_tests.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@
33
nosetests $(dirname $0)/unit/*.py
44
#nosetests --nocapture $(dirname $0)/functional/*.py
55
nosetests $(dirname $0)/functional/*.py
6+
nosetests $(dirname $0)/berlinium/*_test.py

0 commit comments

Comments
 (0)