Author: brandonwilliams Date: Thu Oct 14 20:53:33 2010 New Revision: 1022703
URL: http://svn.apache.org/viewvc?rev=1022703&view=rev Log: System tests SIGKILL server if still alive and cleanup after it. Modified: cassandra/trunk/test/system/__init__.py Modified: cassandra/trunk/test/system/__init__.py URL: http://svn.apache.org/viewvc/cassandra/trunk/test/system/__init__.py?rev=1022703&r1=1022702&r2=1022703&view=diff ============================================================================== --- cassandra/trunk/test/system/__init__.py (original) +++ cassandra/trunk/test/system/__init__.py Thu Oct 14 20:53:33 2010 @@ -14,7 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -import os, sys, time, signal, httplib +import os, sys, time, signal, httplib, errno __all__ = ['root', 'thrift_client'] @@ -124,13 +124,30 @@ class BaseTester(object): self.define_schema() def tearDown(self): + def is_alive(pid): + try: + os.kill(pid, 0) + return 1 + except OSError, err: + return err.errno == errno.EPERM + if self.runserver: + spid = pid() + max_wait = 1 self.close_client() - open('/tmp/kill', 'w').write('killing %s\n' % pid()) - os.kill(pid(), signal.SIGTERM) - # TODO kill server with SIGKILL if it's still alive - time.sleep(0.5) - # TODO assert server is Truly Dead + open('/tmp/kill', 'w').write('killing %s\n' % spid) + os.kill(spid, signal.SIGTERM) + slept = 0 + while (slept < max_wait): + time.sleep(0.5) + if not is_alive(spid): + break + slept += 0.5 + if (slept > max_wait and is_alive(spid)): + os.kill(spid, signal.SIGKILL) + fpath = os.path.join(root, pid_fname) + if os.path.exists(fpath): os.unlink(fpath) + raise Exception('Server did not shutdown correctly') class ThriftTester(BaseTester): client = thrift_client