from unittest import TestCase from mock import patch, DEFAULT from rattail.db.sync import linux class SyncDaemonTests(TestCase): @patch.multiple('rattail.db.sync.linux', edbob=DEFAULT, get_default_engine=DEFAULT, get_sync_engines=DEFAULT, synchronize_changes=DEFAULT) def test_run(self, edbob, get_default_engine, get_sync_engines, synchronize_changes): daemon = linux.SyncDaemon('/tmp/rattail_dbsync.pid') # no remote engines configured get_sync_engines.return_value = None daemon.run() get_sync_engines.assert_called_once_with() self.assertFalse(get_default_engine.called) self.assertFalse(synchronize_changes.called) # with remote engines configured get_sync_engines.return_value = 'fake_remotes' get_default_engine.return_value = 'fake_local' daemon.run() synchronize_changes.assert_called_once_with('fake_local', 'fake_remotes') class ModuleTests(TestCase): @patch.multiple('rattail.db.sync.linux', edbob=DEFAULT, SyncDaemon=DEFAULT) def test_get_daemon(self, edbob, SyncDaemon): # pid file provided linux.get_daemon('some_pidfile') self.assertFalse(edbob.config.get.called) SyncDaemon.assert_called_once_with('some_pidfile') # no pid file; fall back to config SyncDaemon.reset_mock() edbob.config.get.return_value = 'configured_pidfile' linux.get_daemon() edbob.config.get.assert_called_once_with('rattail.db', 'sync.pid_path', default='/var/run/rattail/dbsync.pid') SyncDaemon.assert_called_once_with('configured_pidfile') @patch('rattail.db.sync.linux.get_daemon') def test_start_daemon(self, get_daemon): linux.start_daemon(pidfile='some_pidfile', daemonize='maybe') get_daemon.assert_called_once_with('some_pidfile') get_daemon.return_value.start.assert_called_once_with('maybe') @patch('rattail.db.sync.linux.get_daemon') def test_stop_daemon(self, get_daemon): linux.stop_daemon(pidfile='some_pidfile') get_daemon.assert_called_once_with('some_pidfile') get_daemon.return_value.stop.assert_called_once_with()