From ddd30a7b870b6b3b6ccd55ad047c3604f866f1b2 Mon Sep 17 00:00:00 2001 From: Eugine Blikh <bigbes@gmail.com> Date: Thu, 4 Jul 2013 19:04:26 +0400 Subject: [PATCH] 1) Moving ./test-run.py --gdb from xterm (or another standart X terminal emulator) to detached Screen session 2) Moving from unnecessary dependency "pexpect" to builtin "subprocess" module. --- test/lib/server.py | 48 ++++++++++++++++-------------------- test/lib/tarantool_server.py | 2 +- test/test-run.py | 6 ++--- 3 files changed, 25 insertions(+), 31 deletions(-) diff --git a/test/lib/server.py b/test/lib/server.py index 20be099eb8..0dff9c9559 100644 --- a/test/lib/server.py +++ b/test/lib/server.py @@ -1,20 +1,19 @@ import os -import stat -import shutil -import subprocess -import pexpect -import socket +import re import sys -import signal +import glob +import stat import time +import shlex import daemon -import glob +import shutil +import signal +import socket +import subprocess import ConfigParser -import re def check_port(port): """Check if the port we're connecting to is available""" - try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(("localhost", port)) @@ -22,18 +21,9 @@ def check_port(port): return raise RuntimeError("The server is already running on port {0}".format(port)) -def prepare_gdb(args): +def prepare_gdb(binary, args): """Prepare server startup arguments to run under gdb.""" - - if "TERM" in os.environ: - term = os.environ["TERM"] - else: - term = "xterm" - - if term not in ["xterm", "rxvt", "urxvt", "gnome-terminal", "konsole"]: - raise RuntimeError("--gdb: unsupported terminal {0}".format(term)) - - args = [ term, "-e", "gdb", "-ex", "break main", "-ex", "run" ] + args + args = shlex.split('screen -dmS tnt-gdb gdb %s -ex \'b main\' -ex run' % binary) + args return args def prepare_valgrind(args, valgrind_log, valgrind_sup): @@ -169,7 +159,7 @@ class Server(object): os.execvp(args[0], args) def prepare_args(self): - return [self.binary] + return [] def start(self, start_and_exit=None, gdb=None, valgrind=None, silent=True): if start_and_exit != None: self.start_and_exit = start_and_exit @@ -191,7 +181,7 @@ class Server(object): args = self.prepare_args() if self.gdb: - args = prepare_gdb(args) + args = prepare_gdb(self.binary, args) elif self.valgrind: args = prepare_valgrind(args, self.valgrind_log, os.path.abspath(os.path.join(self.vardir, @@ -200,8 +190,8 @@ class Server(object): if self.start_and_exit: self._start_and_exit(args) return - - self.process = pexpect.spawn(args[0], args[1:], cwd = self.vardir) + print args + self.process = subprocess.Popen(args, cwd = self.vardir) # wait until the server is connected self.wait_until_started() @@ -231,10 +221,14 @@ class Server(object): os.kill(pid, signal.SIGTERM) #self.process.kill(signal.SIGTERM) if self.gdb or self.valgrind: - self.process.expect(pexpect.EOF, timeout = 1 << 30) + time = 0 + while time < (1<<30) : + if self.process.poll() != None: + break + time += 1 + sleep(1) else: - self.process.expect(pexpect.EOF) - self.process.close() + self.process.wait() self.wait_until_stopped() # clean-up processs flags diff --git a/test/lib/tarantool_server.py b/test/lib/tarantool_server.py index 5ae0eb9f10..4312cce9da 100644 --- a/test/lib/tarantool_server.py +++ b/test/lib/tarantool_server.py @@ -176,5 +176,5 @@ class TarantoolServer(Server): args.append("--background") else: raise RuntimeError("'--gdb' and '--start-and-exit' can't be defined together") - self.server = pexpect.spawn(args[0], args[1:], cwd = self.vardir) + self.server = subprocess.Popen(args, cwd = self.vardir) self.server.wait() diff --git a/test/test-run.py b/test/test-run.py index 392ac2273d..4be93e95a0 100755 --- a/test/test-run.py +++ b/test/test-run.py @@ -90,9 +90,9 @@ class Options: dest = "gdb", action = "store_true", default = False, - help = """Start the server under 'gdb' debugger. - See also --start-and-exit. This option is mutually exclusive with - --valgrind. Default: false.""") + help = """Start the server under 'gdb' debugger in detached + Screen. See also --start-and-exit. This option is mutually + exclusive with --valgrind. Default: false.""") parser.add_argument( "--valgrind", -- GitLab