mirror of git://git.psyced.org/git/pypsyc
51 lines
1.4 KiB
Python
51 lines
1.4 KiB
Python
"""
|
|
:copyright: 2010 by Manuel Jacob
|
|
:license: MIT
|
|
"""
|
|
from greenlet import greenlet
|
|
from nose.tools import assert_raises
|
|
from tests.helpers import mockify, mockified, check_success
|
|
|
|
from pypsyc.server.db import Database
|
|
|
|
|
|
class TestDatabase:
|
|
def test_sync(self):
|
|
db = Database(':memory:')
|
|
db.execute('CREATE TABLE test(test TEXT)')
|
|
db.execute("INSERT INTO test VALUES ('test')")
|
|
|
|
result = db.fetch('SELECT test FROM test')
|
|
assert result == [('test',)]
|
|
assert isinstance(result[0][0], str)
|
|
|
|
db.stop()
|
|
|
|
@check_success
|
|
@mockified('pypsyc.server.db',['sqlite3', 'Thread', 'reactor'])
|
|
def test_async(self, sqlite3, Thread, reactor):
|
|
db = Database('')
|
|
mockify(db, ['_execute', '_fetch'])
|
|
e = Exception()
|
|
db._execute.side_effect = e
|
|
|
|
def f():
|
|
assert_raises(Exception, db.execute)
|
|
assert db.fetch() == db._fetch.return_value
|
|
self.success = True
|
|
gl = greenlet(f)
|
|
gl.switch()
|
|
|
|
# emulate reactor calling this methods
|
|
gl.throw(e)
|
|
gl.switch(db._fetch.return_value)
|
|
|
|
db.stop()
|
|
assert db.thread.method_calls == [('start',), ('join',)]
|
|
|
|
db.run_async()
|
|
assert sqlite3.method_calls == [('connect', ('',))]
|
|
assert reactor.method_calls == [
|
|
('callFromThread', (gl.throw, e)),
|
|
('callFromThread', (gl.switch, db._fetch.return_value))]
|