import signal
import time
import unittest
from helper import Debugger
class SignalsTestCase(unittest.TestCase):
def test_signal_stop_single_thread(self):
self.debugger = Debugger(path='./examples/target/debug/signals -- single_thread')
self.debugger.cmd('run')
time.sleep(1)
self.debugger.debugee_process().send_signal(signal.SIGUSR1)
self.debugger.expect_in_output('Signal SIGUSR1 received, debugee stopped')
self.debugger.cmd('continue', 'got SIGUSR1')
def test_multi_thread_signal(self):
self.debugger = Debugger(path='./examples/target/debug/signals -- multi_thread')
self.debugger.cmd('run')
time.sleep(1)
self.debugger.debugee_process().send_signal(signal.SIGUSR1)
self.debugger.expect_in_output('Signal SIGUSR1 received, debugee stopped')
self.debugger.cmd('continue', 'threads join')
def test_multi_thread_multi_signal(self):
self.debugger = Debugger(path='./examples/target/debug/signals -- multi_thread_multi_signal')
debugee_process = self.debugger.debugee_process()
self.debugger.cmd('run')
time.sleep(1)
debugee_process.send_signal(signal.SIGUSR1)
debugee_process.send_signal(signal.SIGUSR2)
self.debugger.expect_in_output_re(r'Signal SIGUSR[1,2]{1} received, debugee stopped')
self.debugger.cmd_re('continue', 'Signal SIGUSR[1,2]{1} received, debugee stopped')
self.debugger.cmd('continue', 'threads join')
def test_signal_stop_on_continue(self):
self.debugger = Debugger(path='./examples/target/debug/vars')
self.debugger.cmd('break vars.rs:9', 'New breakpoint')
self.debugger.cmd('run', 'Hit breakpoint 1')
self.debugger.debugee_process().send_signal(signal.SIGWINCH)
time.sleep(1)
self.debugger.cmd('continue', 'Signal SIGWINCH received, debugee stopped')
self.debugger.cmd('continue', 'Program exit with code: 0')
def test_signal_stop_on_step(self):
self.debugger = Debugger(path='./examples/target/debug/vars')
self.debugger.cmd('break vars.rs:9', 'New breakpoint')
self.debugger.cmd('run', 'Hit breakpoint 1')
self.debugger.debugee_process().send_signal(signal.SIGWINCH)
time.sleep(1)
self.debugger.cmd('step', 'Signal SIGWINCH received, debugee stopped')
self.debugger.cmd('step', '10 let int64 = -2_i64;')
def test_signal_stop_on_step_over(self):
self.debugger = Debugger(path='./examples/target/debug/vars')
self.debugger.cmd('break vars.rs:9', 'New breakpoint')
self.debugger.cmd('run', 'Hit breakpoint 1')
self.debugger.debugee_process().send_signal(signal.SIGWINCH)
time.sleep(1)
self.debugger.cmd('next', 'Signal SIGWINCH received, debugee stopped')
self.debugger.cmd('next', '10 let int64 = -2_i64;')
def test_transparent_signal(self):
self.debugger = Debugger(path='./examples/target/debug/sleeper -- -s 5')
self.debugger.cmd('run')
time.sleep(3)
self.debugger.control('c')
self.debugger.expect_in_output('Signal SIGINT received, debugee stopped')
self.debugger.cmd('bt', 'sleeper::main')