Revision: 3125
Author: jussi.ao.malinen
Date: Mon May 3 07:16:06 2010
Log: Cleaned up latest changes to signal handling tests for issue 108
http://code.google.com/p/robotframework/source/detail?r=3125
Deleted:
/trunk/atest/robot/running/JavaStarter.py
Modified:
/trunk/atest/robot/running/ProcessManager.py
/trunk/atest/robot/running/stopping_with_signal.txt
/trunk/atest/testdata/running/stopping_with_signal/Library.py
/trunk/atest/testdata/running/stopping_with_signal/keyword-timeout.txt
/trunk/atest/testdata/running/stopping_with_signal/run_keyword.txt
/trunk/atest/testdata/running/stopping_with_signal/test-timeout.txt
/trunk/atest/testdata/running/stopping_with_signal/without_any_timeout.txt
=======================================
--- /trunk/atest/robot/running/JavaStarter.py Mon May 3 06:04:35 2010
+++ /dev/null
@@ -1,30 +0,0 @@
-import subprocess
-import os
-import signal
-
-class JavaStarter(object):
-
- def __init__(self):
- self._jython_home = os.getenv('JYTHON_HOME')
- if not self._jython_home:
- return
- jython_jar = os.path.join(self._jython_home, 'jython.jar')
- self._classpath = jython_jar + os.pathsep +
os.getenv('CLASSPATH','')
- java_home = os.getenv('JAVA_HOME')
- if java_home and java_home.startswith('"') and
java_home.endswith('"'):
- java_home = java_home[1:-1]
- self._java = os.path.join(java_home, 'bin', 'java') if java_home
else 'java'
-
- def get_jython_path(self):
- if not self._jython_home:
- raise RuntimeError('This test requires JYTHON_HOME environment
variable to be set.')
- return '%s -Dpython.home=%s -classpath %s
org.python.util.jython' % (self._java, self._jython_home, self._classpath)
-
-
-# CP="/home/peke/Prog/jython2.2/jython.jar"
-# if [ ! -z "$CLASSPATH" ]
-# then
-# CP=$CP:$CLASSPATH
-# fi
-# "/usr/bin/java" -Dpython.home="/home/peke/Prog/jython2.2" -classpath
-# "$CP" org.python.util.jython "$@"
=======================================
--- /trunk/atest/robot/running/ProcessManager.py Mon May 3 06:04:35 2010
+++ /trunk/atest/robot/running/ProcessManager.py Mon May 3 07:16:06 2010
@@ -1,49 +1,71 @@
import subprocess
import os
import signal
+import ctypes
+import time
+
class ProcessManager(object):
def __init__(self):
- self._current_running_process = None
+ self._process = None
+ self._stdout = ''
+ self._stderr = ''
def start_process(self, *args):
- if ' ' in args[0]:
- args = args[0].split() + list(args[1:])
- print args
- print ' '.join(args)
- self._current_running_process = subprocess.Popen(args,
shell=False, stderr=subprocess.PIPE,
-
stdout=subprocess.PIPE)
- self._output = ''
- self._err = ''
+ args = args[0].split() + list(args[1:])
+ self._process = subprocess.Popen(args, stderr=subprocess.PIPE,
+ stdout=subprocess.PIPE)
+ self._stdout = ''
+ self._stderr = ''
def returncode(self):
- self._current_running_process.poll()
- return self._current_running_process.returncode
+ self._process.poll()
+ return self._process.returncode
def send_terminate(self, signal_name):
- signal_to_send = getattr(signal, signal_name)
- pid = self._current_running_process.pid
- if not os.name == 'nt':
+ if os.name != 'nt':
+ signal_to_send = getattr(signal, signal_name)
+ pid = self._process.pid
os.kill(pid, signal_to_send)
else:
- print "Process pid is:", pid
- signal.signal(signal.SIGINT, signal.SIG_IGN)
- import ctypes
+ signal_handler = signal.signal(signal.SIGINT, signal.SIG_IGN)
kernel32 = ctypes.windll.kernel32
kernel32.GenerateConsoleCtrlEvent(0, 0)
+ signal.signal(signal.SIGINT, signal_handler)
def get_stdout(self):
- self._output += self._current_running_process.stdout.read()
- return self._output
+ self._stdout += self._process.stdout.read()
+ return self._stdout
def get_stderr(self):
- self._err += self._current_running_process.stderr.read()
- return self._err
+ self._stderr += self._process.stderr.read()
+ return self._stderr
def wait_until_finished(self):
- self._current_running_process.wait()
-
- def wait_until_err_contains(self, search):
- while not search in self.get_stderr():
+ self._process.wait()
+
+ def busy_sleep(self, seconds):
+ max_time = time.time() + int(seconds)
+ while time.time() < max_time:
pass
+
+ def get_jython_path(self):
+ jython_home = os.getenv('JYTHON_HOME')
+ if not jython_home:
+ raise RuntimeError('This test requires JYTHON_HOME environment
variable to be set.')
+ return '%s -Dpython.home=%s -classpath %s org.python.util.jython' \
+ % (self._get_java(), jython_home,
self._get_classpath(jython_home))
+
+ def _get_java(self):
+ java_home = os.getenv('JAVA_HOME')
+ if not java_home:
+ return 'java'
+ if java_home.startswith('"') and java_home.endswith('"'):
+ java_home = java_home[1:-1]
+ return os.path.join(java_home, 'bin', 'java')
+
+ def _get_classpath(self, jython_home):
+ jython_jar = os.path.join(jython_home, 'jython.jar')
+ return jython_jar + os.pathsep + os.getenv('CLASSPATH','')
+
=======================================
--- /trunk/atest/robot/running/stopping_with_signal.txt Mon May 3 06:04:35
2010
+++ /trunk/atest/robot/running/stopping_with_signal.txt Mon May 3 07:16:06
2010
@@ -3,7 +3,6 @@
Default Tags pybot jybot
Resource atest_resource.txt
Library ProcessManager.py
-Library JavaStarter.py
*** Test Cases ***
SIGINT Signal Should Stop Test Execution Gracefully
@@ -96,5 +95,5 @@
Two Signals
[arguments] ${signal}
send terminate ${signal}
- Sleep 0.1s
+ Busy Sleep 1
send terminate ${signal}
=======================================
--- /trunk/atest/testdata/running/stopping_with_signal/Library.py Wed Apr
28 02:45:48 2010
+++ /trunk/atest/testdata/running/stopping_with_signal/Library.py Mon May
3 07:16:06 2010
@@ -1,7 +1,7 @@
import time
class Library:
- def my_sleep(self, seconds):
- start_time = time.time()
- while (time.time() - int(seconds) < start_time):
- time.sleep(1)
+ def busy_sleep(self, seconds):
+ max_time = time.time() + int(seconds)
+ while time.time() < max_time:
+ pass
=======================================
--- /trunk/atest/testdata/running/stopping_with_signal/keyword-timeout.txt
Mon May 3 03:40:19 2010
+++ /trunk/atest/testdata/running/stopping_with_signal/keyword-timeout.txt
Mon May 3 07:16:06 2010
@@ -18,6 +18,6 @@
*** Keywords ***
Timeout In UK
[Timeout] 3 seconds
- My Sleep 2
+ Busy Sleep 2
No operation
=======================================
--- /trunk/atest/testdata/running/stopping_with_signal/run_keyword.txt Mon
May 3 03:40:19 2010
+++ /trunk/atest/testdata/running/stopping_with_signal/run_keyword.txt Mon
May 3 07:16:06 2010
@@ -9,7 +9,7 @@
*** Test Case ***
Test
Create File ${TEMPDIR}/robot_signal_test_started.txt
- Run Keyword My Sleep 2
+ Run Keyword Busy Sleep 2
No Operation
Test 2
=======================================
--- /trunk/atest/testdata/running/stopping_with_signal/test-timeout.txt Mon
May 3 03:40:19 2010
+++ /trunk/atest/testdata/running/stopping_with_signal/test-timeout.txt Mon
May 3 07:16:06 2010
@@ -9,7 +9,7 @@
*** Test Case ***
Test [timeout] 3 Seconds
Create File ${TEMPDIR}/robot_signal_test_started.txt
- My Sleep 2
+ Busy Sleep 2
No Operation
Test 2
=======================================
---
/trunk/atest/testdata/running/stopping_with_signal/without_any_timeout.txt
Mon May 3 03:40:19 2010
+++
/trunk/atest/testdata/running/stopping_with_signal/without_any_timeout.txt
Mon May 3 07:16:06 2010
@@ -9,7 +9,7 @@
*** Test Case ***
Test
Create File ${TEMPDIR}/robot_signal_test_started.txt
- My Sleep 2
+ Busy Sleep 2
No Operation
Test 2