summaryrefslogtreecommitdiffstats
path: root/deluge/tests/daemon_base.py
diff options
context:
space:
mode:
Diffstat (limited to 'deluge/tests/daemon_base.py')
-rw-r--r--deluge/tests/daemon_base.py86
1 files changed, 86 insertions, 0 deletions
diff --git a/deluge/tests/daemon_base.py b/deluge/tests/daemon_base.py
new file mode 100644
index 0000000..eda2193
--- /dev/null
+++ b/deluge/tests/daemon_base.py
@@ -0,0 +1,86 @@
+# -*- coding: utf-8 -*-
+#
+# This file is part of Deluge and is licensed under GNU General Public License 3.0, or later, with
+# the additional special exception to link portions of this program with the OpenSSL library.
+# See LICENSE for more details.
+#
+
+from __future__ import print_function, unicode_literals
+
+import os.path
+
+import pytest
+from twisted.internet import defer
+from twisted.internet.error import CannotListenError
+
+import deluge.component as component
+from deluge.common import windows_check
+
+from . import common
+
+
+class DaemonBase(object):
+
+ if windows_check():
+ skip = 'windows cant start_core not enough arguments for format string'
+
+ def common_set_up(self):
+ common.set_tmp_config_dir()
+ self.listen_port = 58900
+ self.core = None
+ return component.start()
+
+ def terminate_core(self, *args):
+ if args[0] is not None:
+ if hasattr(args[0], 'getTraceback'):
+ print('terminate_core: Errback Exception: %s' % args[0].getTraceback())
+
+ if not self.core.killed:
+ d = self.core.kill()
+ return d
+
+ @defer.inlineCallbacks
+ def start_core(
+ self,
+ arg,
+ custom_script='',
+ logfile='',
+ print_stdout=True,
+ print_stderr=True,
+ timeout=5,
+ port_range=10,
+ extra_callbacks=None,
+ ):
+ if logfile == '':
+ logfile = 'daemon_%s.log' % self.id()
+
+ # We are running py.test
+ if hasattr(pytest, 'config'):
+ # Put log file in the py.test --basetemp argument
+ basetemp = pytest.config.option.basetemp
+ if basetemp:
+ if not os.path.exists(basetemp):
+ os.makedirs(basetemp)
+ logfile = os.path.join(basetemp, logfile)
+
+ for dummy in range(port_range):
+ try:
+ d, self.core = common.start_core(
+ listen_port=self.listen_port,
+ logfile=logfile,
+ timeout=timeout,
+ timeout_msg='Timeout!',
+ custom_script=custom_script,
+ print_stdout=print_stdout,
+ print_stderr=print_stderr,
+ extra_callbacks=extra_callbacks,
+ )
+ yield d
+ except CannotListenError as ex:
+ exception_error = ex
+ self.listen_port += 1
+ except (KeyboardInterrupt, SystemExit):
+ raise
+ else:
+ return
+ raise exception_error