class AbstractDB(AbstractServer): def setUp(self): super(AbstractDB, self).setUp() # dummy session self.config = SessionStartupConfig() self.config.set_state_dir(self.getStateDir()) self.config.set_torrent_checking(False) self.config.set_multicast_local_peer_discovery(False) self.config.set_megacache(False) self.config.set_dispersy(False) self.config.set_mainline_dht(False) self.config.set_torrent_collecting(False) self.config.set_libtorrent(False) self.config.set_dht_torrent_collecting(False) self.config.set_videoplayer(False) self.config.set_torrent_store(False) self.session = Session(self.config, ignore_singleton=True) dbpath = init_bak_tribler_sdb('bak_new_tribler.sdb', destination_path=self.getStateDir(), overwrite=True) self.sqlitedb = SQLiteCacheDB(self.session, busytimeout=BUSYTIMEOUT) self.sqlitedb.initialize(dbpath) self.session.sqlite_db = self.sqlitedb @blocking_call_on_reactor_thread def tearDown(self): self.sqlitedb.close() self.sqlitedb = None self.session.del_instance() self.session = None super(AbstractDB, self).tearDown(self)
def checkReactor(self, phase, *_): delayed_calls = reactor.getDelayedCalls() if delayed_calls: self._logger.error("The reactor was dirty during %s:", phase) for dc in delayed_calls: self._logger.error("> %s" % dc) dc.cancel() has_network_selectables = False for item in reactor.getReaders() + reactor.getWriters(): if isinstance(item, HTTPChannel) or isinstance(item, Client): has_network_selectables = True break if has_network_selectables: # TODO(Martijn): we wait a while before we continue the check since network selectables # might take some time to cleanup. I'm not sure what's causing this. yield deferLater(reactor, 0.2, lambda: None) # This is the same check as in the _cleanReactor method of Twisted's Trial selectable_strings = [] for sel in reactor.removeAll(): if interfaces.IProcessTransport.providedBy(sel): self._logger.error("Sending kill signal to %s", repr(sel)) sel.signalProcess('KILL') selectable_strings.append(repr(sel)) self.assertFalse(delayed_calls, "The reactor was dirty during %s" % phase) if Session.has_instance(): try: yield Session.get_instance().shutdown() except: pass Session.del_instance() raise RuntimeError("Found a leftover session instance during %s" % phase) self.assertFalse( selectable_strings, "The reactor has leftover readers/writers during %s: %r" % (phase, selectable_strings)) # Check whether we have closed all the sockets open_readers = reactor.getReaders() for reader in open_readers: self.assertNotIsInstance( reader, BasePort, "Listening ports left on the reactor during %s: %s" % (phase, reader)) # Check whether the threadpool is clean tp_items = len(reactor.getThreadPool().working) if tp_items > 0: # Print all stacks to debug this issue self.watchdog.print_all_stacks() self.assertEqual(tp_items, 0, "Still items left in the threadpool")
def tearDown(self): if SQLiteCacheDB.hasInstance(): SQLiteCacheDB.getInstance().close_all() SQLiteCacheDB.delInstance() if Session.has_instance(): # Upgrading will create a session instance Session.del_instance() sqlitecachedb.INITIAL_UPGRADE_PAUSE, sqlitecachedb.SUCCESIVE_UPGRADE_PAUSE, sqlitecachedb.UPGRADE_BATCH_SIZE, sqlitecachedb.TEST_OVERRIDE = self.original_values self.tearDownCleanup()
class TestSqliteCacheDB(AbstractServer): def setUp(self): super(TestSqliteCacheDB, self).setUp() self.config = SessionStartupConfig() self.config.set_state_dir(self.getStateDir()) self.config.set_torrent_checking(False) self.config.set_multicast_local_peer_discovery(False) self.config.set_megacache(False) self.config.set_dispersy(False) self.config.set_mainline_dht(False) self.config.set_torrent_collecting(False) self.config.set_libtorrent(False) self.config.set_dht_torrent_collecting(False) self.config.set_videoplayer(False) self.session = Session(self.config, ignore_singleton=True) self.sqlitedb = None def tearDown(self): super(TestSqliteCacheDB, self).tearDown() if self.sqlitedb: self.sqlitedb.close() self.sqlitedb = None self.session.del_instance() self.session = None def test_upgrade_from_obsolete_version(self): """We no longer support DB versions older than 17 (Tribler 6.0)""" dbpath = init_bak_tribler_sdb(u"bak_old_tribler.sdb", destination_path=self.getStateDir(), overwrite=True) self.sqlitedb = SQLiteCacheDB(self.session) self.sqlitedb.initialize(dbpath) class MockTorrentStore(object): def flush(): pass def close(): pass db_migrator = DBUpgrader(self.session, self.sqlitedb, torrent_store=MockTorrentStore()) self.assertRaises(VersionNoLongerSupportedError, db_migrator.start_migrate) def test_upgrade_from_17(self): pass
def tearDown(self): self.annotate(self._testMethodName, start=False) """ unittest test tear down code """ if self.session is not None: self._shutdown_session(self.session) Session.del_instance() time.sleep(10) gc.collect() ts = enumerate_threads() self._logger.debug("test_as_server: Number of threads still running %d", len(ts)) for t in ts: self._logger.debug("Thread still running %s, daemon: %s, instance: %s", t.getName(), t.isDaemon(), t) super(TestAsServer, self).tearDown(annotate=False)
class AbstractDB(TriblerCoreTest): def setUpPreSession(self): self.config = SessionStartupConfig() self.config.set_state_dir(self.getStateDir()) self.config.set_torrent_checking(False) self.config.set_multicast_local_peer_discovery(False) self.config.set_megacache(False) self.config.set_dispersy(False) self.config.set_mainline_dht(False) self.config.set_torrent_collecting(False) self.config.set_libtorrent(False) self.config.set_dht_torrent_collecting(False) self.config.set_videoserver_enabled(False) self.config.set_torrent_store(False) @blocking_call_on_reactor_thread @inlineCallbacks def setUp(self): yield super(AbstractDB, self).setUp() self.setUpPreSession() self.session = Session(self.config, ignore_singleton=True) tar = tarfile.open( os.path.join(TESTS_DATA_DIR, 'bak_new_tribler.sdb.tar.gz'), 'r|gz') tar.extractall(self.session_base_dir) db_path = os.path.join(self.session_base_dir, 'bak_new_tribler.sdb') db_script_path = os.path.join(get_lib_path(), DB_SCRIPT_NAME) self.sqlitedb = SQLiteCacheDB(db_path, db_script_path, busytimeout=BUSYTIMEOUT) self.sqlitedb.initialize() self.session.sqlite_db = self.sqlitedb def tearDown(self): self.sqlitedb.close() self.sqlitedb = None self.session.del_instance() self.session = None super(AbstractDB, self).tearDown(self)
def tearDown(self, annotate=True): self.annotate(self._testMethodName, start=False) """ unittest test tear down code """ if self.session is not None: assert self.session is Session.get_instance() yield self.session.shutdown() assert self.session.has_shutdown() Session.del_instance() yield self.stop_seeder() ts = enumerate_threads() self._logger.debug( "test_as_server: Number of threads still running %d", len(ts)) for t in ts: self._logger.debug( "Thread still running %s, daemon: %s, instance: %s", t.getName(), t.isDaemon(), t) yield super(TestAsServer, self).tearDown(annotate=False)
def _stop(self): if self.clean_messages_lc: self.clean_messages_lc.stop() self.clean_messages_lc = None if self.build_history_lc: self.build_history_lc.stop() self.build_history_lc = None if self.session: session_shutdown_start = time.time() waittime = 60 self.session.shutdown() while not self.session.has_shutdown(): diff = time.time() - session_shutdown_start assert diff < waittime, "Took too long for Session to shutdown" logger.info("ONEXIT Waiting for Session to shutdown, will wait for %d more seconds" % ( waittime - diff)) time.sleep(1) logger.info("Session is shut down") Session.del_instance()
def _stop(self): if self.clean_messages_lc: self.clean_messages_lc.stop() self.clean_messages_lc = None if self.build_history_lc: self.build_history_lc.stop() self.build_history_lc = None if self.session: session_shutdown_start = time.time() waittime = 60 self.session.shutdown() while not self.session.has_shutdown(): diff = time.time() - session_shutdown_start assert diff < waittime, "Took too long for Session to shutdown" logger.info( "ONEXIT Waiting for Session to shutdown, will wait for %d more seconds" % (waittime - diff)) time.sleep(1) logger.info("Session is shut down") Session.del_instance()
class AbstractDB(TriblerCoreTest): def setUpPreSession(self): self.config = TriblerConfig(ConfigObj(configspec=CONFIG_SPEC_PATH)) self.config.set_state_dir(self.getStateDir()) self.config.set_torrent_checking_enabled(False) self.config.set_megacache_enabled(False) self.config.set_dispersy_enabled(False) self.config.set_mainline_dht_enabled(False) self.config.set_torrent_collecting_enabled(False) self.config.set_libtorrent_enabled(False) self.config.set_video_server_enabled(False) self.config.set_torrent_store_enabled(False) @blocking_call_on_reactor_thread @inlineCallbacks def setUp(self): yield super(AbstractDB, self).setUp() self.setUpPreSession() self.session = Session(self.config, ignore_singleton=True) tar = tarfile.open( os.path.join(TESTS_DATA_DIR, 'bak_new_tribler.sdb.tar.gz'), 'r|gz') tar.extractall(self.session_base_dir) db_path = os.path.join(self.session_base_dir, 'bak_new_tribler.sdb') self.sqlitedb = SQLiteCacheDB(db_path, busytimeout=BUSYTIMEOUT) self.sqlitedb.initialize() self.session.sqlite_db = self.sqlitedb def tearDown(self): self.sqlitedb.close() self.sqlitedb = None self.session.del_instance() self.session = None super(AbstractDB, self).tearDown(self)
def teardown(): if Session.has_instance(): Session.del_instance()
class TestSqliteCacheDB(AbstractServer): def setUp(self): super(TestSqliteCacheDB, self).setUp() self.config = SessionStartupConfig() self.config.set_state_dir(self.getStateDir()) self.config.set_torrent_checking(False) self.config.set_multicast_local_peer_discovery(False) self.config.set_megacache(False) self.config.set_dispersy(False) self.config.set_mainline_dht(False) self.config.set_torrent_collecting(False) self.config.set_libtorrent(False) self.config.set_dht_torrent_collecting(False) self.config.set_videoplayer(False) self.session = Session(self.config, ignore_singleton=True) self.sqlite_test = SQLiteCacheDB(self.session) self.db_path = u":memory:" self.sqlite_test.initialize(self.db_path) def tearDown(self): super(TestSqliteCacheDB, self).tearDown() self.sqlite_test.close() self.sqlite_test = None self.session.del_instance() self.session = None @blocking_call_on_reactor_thread def test_create_db(self): sql = u"CREATE TABLE person(lastname, firstname);" self.sqlite_test.execute(sql) @blocking_call_on_reactor_thread def test_insert(self): self.test_create_db() self.sqlite_test.insert('person', lastname='a', firstname='b') assert self.sqlite_test.size('person') == 1 @blocking_call_on_reactor_thread def test_fetchone(self): self.test_insert() one = self.sqlite_test.fetchone(u"SELECT * FROM person") assert one == ('a', 'b') one = self.sqlite_test.fetchone( u"SELECT lastname FROM person WHERE firstname == 'b'") assert one == 'a' one = self.sqlite_test.fetchone( u"SELECT lastname FROM person WHERE firstname == 'c'") assert one is None @blocking_call_on_reactor_thread def test_insertmany(self): self.test_create_db() values = [] for i in range(100): value = (str(i), str(i**2)) values.append(value) self.sqlite_test.insertMany('person', values) assert self.sqlite_test.size('person') == 100 @blocking_call_on_reactor_thread def test_fetchall(self): self.test_insertmany() all = self.sqlite_test.fetchall('select * from person') assert len(all) == 100 all = self.sqlite_test.fetchall( "select * from person where lastname=='101'") assert all == [] @blocking_call_on_reactor_thread def test_insertorder(self): self.test_insertmany() self.sqlite_test.insert('person', lastname='1', firstname='abc') one = self.sqlite_test.fetchone( "select firstname from person where lastname == '1'") assert one == '1' or one == 'abc' all = self.sqlite_test.fetchall( "select firstname from person where lastname == '1'") assert len(all) == 2 @blocking_call_on_reactor_thread def test_update(self): self.test_insertmany() self.sqlite_test.update('person', "lastname == '2'", firstname='56') one = self.sqlite_test.fetchone( "select firstname from person where lastname == '2'") assert one == '56', one self.sqlite_test.update('person', "lastname == '3'", firstname=65) one = self.sqlite_test.fetchone( "select firstname from person where lastname == '3'") assert one == 65, one self.sqlite_test.update('person', "lastname == '4'", firstname=654, lastname=44) one = self.sqlite_test.fetchone( "select firstname from person where lastname == 44") assert one == 654, one
def OnExit(self): bm = self.gui_image_manager.getImage(u'closescreen.png') self.closewindow = GaugeSplash(bm, "Closing...", 6) self.closewindow.Show() self._logger.info("main: ONEXIT") self.ready = False self.done = True # write all persistent data to disk self.closewindow.tick('Write all persistent data to disk') if self.torrentfeed: self.torrentfeed.shutdown() self.torrentfeed.delInstance() if self.webUI: self.webUI.stop() self.webUI.delInstance() if self.frame: self.frame.Destroy() self.frame = None # Don't checkpoint, interferes with current way of saving Preferences, # see Tribler/Main/Dialogs/abcoption.py if self.utility: # Niels: lets add a max waiting time for this session shutdown. session_shutdown_start = time() try: self._logger.info("ONEXIT cleaning database") self.closewindow.tick('Cleaning database') torrent_db = self.utility.session.open_dbhandler(NTFY_TORRENTS) torrent_db._db.clean_db(randint(0, 24) == 0, exiting=True) except: print_exc() self.closewindow.tick('Shutdown session') self.utility.session.shutdown(hacksessconfcheckpoint=False) # Arno, 2012-07-12: Shutdown should be quick # Niels, 2013-03-21: However, setting it too low will prevent checkpoints from being written to disk waittime = 60 while not self.utility.session.has_shutdown(): diff = time() - session_shutdown_start if diff > waittime: self._logger.info("main: ONEXIT NOT Waiting for Session to shutdown, took too long") break self._logger.info( "ONEXIT Waiting for Session to shutdown, will wait for an additional %d seconds", waittime - diff) sleep(3) self._logger.info("ONEXIT Session is shutdown") self.closewindow.tick('Deleting instances') self._logger.debug("ONEXIT deleting instances") Session.del_instance() GUIUtility.delInstance() GUIDBProducer.delInstance() DefaultDownloadStartupConfig.delInstance() GuiImageManager.delInstance() self.closewindow.tick('Exiting now') self.closewindow.Destroy() return 0
class AbstractUpgrader(TriblerCoreTest): FILE_DIR = os.path.abspath(os.path.dirname(os.path.realpath(__file__))) DATABASES_DIR = os.path.abspath( os.path.join(FILE_DIR, u"../data/upgrade_databases/")) def write_data_to_file(self, file_name): with open(file_name, 'w') as file: file.write("lorem ipsum") file.close() @blocking_call_on_reactor_thread @inlineCallbacks def setUp(self): yield super(AbstractUpgrader, self).setUp() self.config = SessionStartupConfig() self.config.set_torrent_collecting_dir( os.path.join(self.session_base_dir, 'torrent_collecting_dir')) self.session = Session(self.config, ignore_singleton=True) self.sqlitedb = None self.torrent_store = None def tearDown(self): if self.torrent_store: self.torrent_store.close() super(AbstractUpgrader, self).tearDown() if self.sqlitedb: self.sqlitedb.close() self.sqlitedb = None self.session.del_instance() self.session = None def copy_and_initialize_upgrade_database(self, db_name): # create a file to be removed in the thumbnails os.mkdir(self.session.get_torrent_collecting_dir()) os.mkdir( os.path.join(self.session.get_torrent_collecting_dir(), 'dir1')) self.write_data_to_file( os.path.join(self.session.get_torrent_collecting_dir(), 'dir1', 'file1.txt')) os.mkdir(os.path.join(self.session_base_dir, 'sqlite')) shutil.copyfile( os.path.join(self.DATABASES_DIR, db_name), os.path.join(self.session.get_state_dir(), 'sqlite', 'tribler.sdb')) shutil.copyfile( os.path.join(self.DATABASES_DIR, 'torrent_upgrade_64_dispersy.db'), os.path.join(self.session.get_state_dir(), 'sqlite', 'dispersy.db')) db_path = os.path.join(self.session.get_state_dir(), 'sqlite', 'tribler.sdb') db_script_path = os.path.join(os.path.dirname(Tribler.__file__), DB_SCRIPT_NAME) self.sqlitedb = SQLiteCacheDB(db_path, db_script_path) self.sqlitedb.initialize() self.sqlitedb.initial_begin() self.session.sqlite_db = self.sqlitedb
def tearDown(self, annotate=True): Session.del_instance() # We are opening a session when assigning a relevance score to a remote torrent TriblerCoreTest.tearDown(self, annotate=annotate)
def tearDown(self): Session.del_instance() DispersyTestFunc.tearDown(self) AbstractServer.tearDown(self)
def OnExit(self): self.utility.session.notifier.notify(NTFY_CLOSE_TICK, NTFY_CREATE, None, None) blockingCallFromThread(reactor, self.cancel_all_pending_tasks) if self.i2i_server: self.i2i_server.stop() self._logger.info("main: ONEXIT") self.ready = False self.done = True # write all persistent data to disk self.utility.session.notifier.notify( NTFY_CLOSE_TICK, NTFY_INSERT, None, 'Write all persistent data to disk') wx.Yield() if self.webUI: self.webUI.stop() self.webUI.delInstance() if self.frame: self.frame.Destroy() self.frame = None # Don't checkpoint, interferes with current way of saving Preferences, # see Tribler/Main/Dialogs/abcoption.py if self.utility: # Niels: lets add a max waiting time for this session shutdown. session_shutdown_start = time() # TODO(emilon): probably more notification callbacks should be remmoved # here s = self.utility.session s.remove_observer(self.sesscb_ntfy_newversion) s.remove_observer(self.sesscb_ntfy_corrupt_torrent) s.remove_observer(self.sesscb_ntfy_magnet) s.remove_observer(self.sesscb_ntfy_torrentfinished) s.remove_observer(self.sesscb_ntfy_markingupdates) s.remove_observer(self.sesscb_ntfy_moderationupdats) s.remove_observer(self.sesscb_ntfy_modificationupdates) s.remove_observer(self.sesscb_ntfy_commentupdates) s.remove_observer(self.sesscb_ntfy_playlistupdates) s.remove_observer(self.sesscb_ntfy_torrentupdates) s.remove_observer(self.sesscb_ntfy_myprefupdates) s.remove_observer(self.sesscb_ntfy_channelupdates) s.remove_observer(self.sesscb_ntfy_channelupdates) s.remove_observer(self.sesscb_ntfy_activities) s.remove_observer(self.sesscb_ntfy_reachable) try: self._logger.info("ONEXIT cleaning database") self.utility.session.notifier.notify(NTFY_CLOSE_TICK, NTFY_INSERT, None, 'Cleaning database') wx.Yield() torrent_db = self.utility.session.open_dbhandler(NTFY_TORRENTS) torrent_db._db.clean_db(randint(0, 24) == 0, exiting=True) except: print_exc() self.utility.session.notifier.notify(NTFY_CLOSE_TICK, NTFY_INSERT, None, 'Shutdown session') wx.Yield() self.utility.session.shutdown(hacksessconfcheckpoint=False) # Arno, 2012-07-12: Shutdown should be quick # Niels, 2013-03-21: However, setting it too low will prevent checkpoints from being written to disk waittime = 60 while not self.utility.session.has_shutdown(): diff = time() - session_shutdown_start if diff > waittime: self._logger.info( "main: ONEXIT NOT Waiting for Session to shutdown, took too long" ) break self._logger.info( "ONEXIT Waiting for Session to shutdown, will wait for an additional %d seconds", waittime - diff) sleep(3) self._logger.info("ONEXIT Session is shutdown") self.utility.session.notifier.notify(NTFY_CLOSE_TICK, NTFY_INSERT, None, 'Deleting instances') self._logger.debug("ONEXIT deleting instances") Session.del_instance() GUIDBProducer.delInstance() DefaultDownloadStartupConfig.delInstance() GuiImageManager.delInstance() self.utility.session.notifier.notify(NTFY_CLOSE_TICK, NTFY_INSERT, None, 'Exiting now') self.utility.session.notifier.notify(NTFY_CLOSE_TICK, NTFY_DELETE, None, None) GUIUtility.delInstance()
def OnExit(self): bm = self.gui_image_manager.getImage(u'closescreen.png') self.closewindow = GaugeSplash(bm, "Closing...", 6) self.closewindow.Show() self._logger.info("main: ONEXIT") self.ready = False self.done = True # write all persistent data to disk self.closewindow.tick('Write all persistent data to disk') if self.torrentfeed: self.torrentfeed.shutdown() self.torrentfeed.delInstance() if self.webUI: self.webUI.stop() self.webUI.delInstance() if self.frame: self.frame.Destroy() self.frame = None # Don't checkpoint, interferes with current way of saving Preferences, # see Tribler/Main/Dialogs/abcoption.py if self.utility: # Niels: lets add a max waiting time for this session shutdown. session_shutdown_start = time() try: self._logger.info("ONEXIT cleaning database") self.closewindow.tick('Cleaning database') torrent_db = self.utility.session.open_dbhandler(NTFY_TORRENTS) torrent_db._db.clean_db(randint(0, 24) == 0, exiting=True) except: print_exc() self.closewindow.tick('Shutdown session') self.utility.session.shutdown(hacksessconfcheckpoint=False) # Arno, 2012-07-12: Shutdown should be quick # Niels, 2013-03-21: However, setting it too low will prevent checkpoints from being written to disk waittime = 60 while not self.utility.session.has_shutdown(): diff = time() - session_shutdown_start if diff > waittime: self._logger.info( "main: ONEXIT NOT Waiting for Session to shutdown, took too long" ) break self._logger.info( "ONEXIT Waiting for Session to shutdown, will wait for an additional %d seconds", waittime - diff) sleep(3) self._logger.info("ONEXIT Session is shutdown") self.closewindow.tick('Deleting instances') self._logger.debug("ONEXIT deleting instances") Session.del_instance() GUIUtility.delInstance() GUIDBProducer.delInstance() DefaultDownloadStartupConfig.delInstance() GuiImageManager.delInstance() self.closewindow.tick('Exiting now') self.closewindow.Destroy() return 0
def tearDown(self): Session.del_instance() DispersyTestFunc.tearDown(self)
class TestSqliteCacheDB(AbstractServer): def setUp(self): super(TestSqliteCacheDB, self).setUp() self.config = SessionStartupConfig() self.config.set_state_dir(self.getStateDir()) self.config.set_torrent_checking(False) self.config.set_multicast_local_peer_discovery(False) self.config.set_megacache(False) self.config.set_dispersy(False) self.config.set_mainline_dht(False) self.config.set_torrent_collecting(False) self.config.set_libtorrent(False) self.config.set_dht_torrent_collecting(False) self.config.set_videoplayer(False) self.session = Session(self.config, ignore_singleton=True) self.sqlite_test = SQLiteCacheDB(self.session) self.db_path = u":memory:" self.sqlite_test.initialize(self.db_path) def tearDown(self): super(TestSqliteCacheDB, self).tearDown() self.sqlite_test.close() self.sqlite_test = None self.session.del_instance() self.session = None @blocking_call_on_reactor_thread def test_create_db(self): sql = u"CREATE TABLE person(lastname, firstname);" self.sqlite_test.execute(sql) @blocking_call_on_reactor_thread def test_insert(self): self.test_create_db() self.sqlite_test.insert('person', lastname='a', firstname='b') assert self.sqlite_test.size('person') == 1 @blocking_call_on_reactor_thread def test_fetchone(self): self.test_insert() one = self.sqlite_test.fetchone(u"SELECT * FROM person") assert one == ('a', 'b') one = self.sqlite_test.fetchone(u"SELECT lastname FROM person WHERE firstname == 'b'") assert one == 'a' one = self.sqlite_test.fetchone(u"SELECT lastname FROM person WHERE firstname == 'c'") assert one is None @blocking_call_on_reactor_thread def test_insertmany(self): self.test_create_db() values = [] for i in range(100): value = (str(i), str(i ** 2)) values.append(value) self.sqlite_test.insertMany('person', values) assert self.sqlite_test.size('person') == 100 @blocking_call_on_reactor_thread def test_fetchall(self): self.test_insertmany() all = self.sqlite_test.fetchall('select * from person') assert len(all) == 100 all = self.sqlite_test.fetchall("select * from person where lastname=='101'") assert all == [] @blocking_call_on_reactor_thread def test_insertorder(self): self.test_insertmany() self.sqlite_test.insert('person', lastname='1', firstname='abc') one = self.sqlite_test.fetchone("select firstname from person where lastname == '1'") assert one == '1' or one == 'abc' all = self.sqlite_test.fetchall("select firstname from person where lastname == '1'") assert len(all) == 2 @blocking_call_on_reactor_thread def test_update(self): self.test_insertmany() self.sqlite_test.update('person', "lastname == '2'", firstname='56') one = self.sqlite_test.fetchone("select firstname from person where lastname == '2'") assert one == '56', one self.sqlite_test.update('person', "lastname == '3'", firstname=65) one = self.sqlite_test.fetchone("select firstname from person where lastname == '3'") assert one == 65, one self.sqlite_test.update('person', "lastname == '4'", firstname=654, lastname=44) one = self.sqlite_test.fetchone("select firstname from person where lastname == 44") assert one == 654, one