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

Reply via email to