Index: testing/legion/examples/subprocess/subprocess_test.py |
diff --git a/testing/legion/examples/subprocess/subprocess_test.py b/testing/legion/examples/subprocess/subprocess_test.py |
index 1a28ddd5dabdc536568bf50f4348294dbea14835..cea871a4051f9fb28b950ae461b50dc47573cdcf 100755 |
--- a/testing/legion/examples/subprocess/subprocess_test.py |
+++ b/testing/legion/examples/subprocess/subprocess_test.py |
@@ -5,85 +5,91 @@ |
"""A host test module demonstrating interacting with remote subprocesses.""" |
-# Map the legion directory so we can import the host controller. |
-import sys |
-sys.path.append('../../') |
- |
import argparse |
import logging |
+import os |
+import sys |
import time |
import xmlrpclib |
-import test_controller |
+# Map the testing directory so we can import legion.legion_test. |
+TESTING_DIR = os.path.join( |
+ os.path.dirname(os.path.abspath(__file__)), |
+ '..', '..', '..', '..', 'testing') |
+sys.path.append(TESTING_DIR) |
+from legion import legion_test_case |
-class ExampleTestController(test_controller.TestController): |
- """An example controller using the remote subprocess functions.""" |
- def __init__(self): |
- super(ExampleTestController, self).__init__() |
- self.task = None |
+class ExampleTestController(legion_test_case.TestCase): |
+ """An example controller using the remote subprocess functions.""" |
- def SetUp(self): |
+ @classmethod |
+ def setUpClass(cls): |
"""Creates the task machine and waits until it connects.""" |
parser = argparse.ArgumentParser() |
parser.add_argument('--task-hash') |
+ parser.add_argument('--os', default='Ubuntu-14.04') |
args, _ = parser.parse_known_args() |
- self.task = self.CreateNewTask( |
+ cls.task = cls.CreateTask( |
isolated_hash=args.task_hash, |
- dimensions={'os': 'Ubuntu-14.04', 'pool': 'Chromoting'}, |
- idle_timeout_secs=90, connection_timeout_secs=90, |
+ dimensions={'os': args.os}, |
+ idle_timeout_secs=90, |
+ connection_timeout_secs=90, |
verbosity=logging.DEBUG) |
- self.task.Create() |
- self.task.WaitForConnection() |
- |
- def RunTest(self): |
- """Main method to run the test code.""" |
- self.TestLs() |
- self.TestTerminate() |
- self.TestMultipleProcesses() |
+ cls.task.Create() |
+ cls.task.WaitForConnection() |
- def TestMultipleProcesses(self): |
+ def testMultipleProcesses(self): |
+ """Tests that processes can be run and controlled simultaneously.""" |
start = time.time() |
+ logging.info('Starting "sleep 10" and "sleep 20"') |
+ sleep10 = self.task.Process(['sleep', '10']) |
+ sleep20 = self.task.Process(['sleep', '20']) |
- sleep20 = self.task.rpc.subprocess.Process(['sleep', '20']) |
- self.task.rpc.subprocess.Start(sleep20) |
- sleep10 = self.task.rpc.subprocess.Process(['sleep', '10']) |
- self.task.rpc.subprocess.Start(sleep10) |
- |
- self.task.rpc.subprocess.Wait(sleep10) |
+ logging.info('Waiting for sleep 10 to finish and verifying timing') |
+ sleep10.Wait() |
elapsed = time.time() - start |
- assert elapsed >= 10 and elapsed < 11 |
+ self.assertGreaterEqual(elapsed, 10) |
+ self.assertLess(elapsed, 11) |
- self.task.rpc.subprocess.Wait(sleep20) |
+ logging.info('Waiting for sleep 20 to finish and verifying timing') |
+ sleep20.Wait() |
elapsed = time.time() - start |
- assert elapsed >= 20 |
+ self.assertGreaterEqual(elapsed, 20) |
- self.task.rpc.subprocess.Delete(sleep20) |
- self.task.rpc.subprocess.Delete(sleep10) |
+ sleep10.Delete() |
+ sleep20.Delete() |
- def TestTerminate(self): |
+ def testTerminate(self): |
+ """Tests that a process can be correctly terminated.""" |
start = time.time() |
- proc = self.task.rpc.subprocess.Process(['sleep', '20']) |
- self.task.rpc.subprocess.Start(proc) |
- self.task.rpc.subprocess.Terminate(proc) |
+ |
+ logging.info('Starting "sleep 20"') |
+ sleep20 = self.task.Process(['sleep', '20']) |
+ logging.info('Calling Terminate()') |
+ sleep20.Terminate() |
try: |
- self.task.rpc.subprocess.Wait(proc) |
+ logging.info('Trying to wait for sleep 20 to complete') |
+ sleep20.Wait() |
except xmlrpclib.Fault: |
pass |
finally: |
- self.task.rpc.subprocess.Delete(proc) |
- assert time.time() - start < 20 |
+ sleep20.Delete() |
+ logging.info('Checking to make sure sleep 20 was actually terminated') |
+ self.assertLess(time.time() - start, 20) |
- def TestLs(self): |
- proc = self.task.rpc.subprocess.Process(['ls']) |
- self.task.rpc.subprocess.Start(proc) |
- self.task.rpc.subprocess.Wait(proc) |
- assert self.task.rpc.subprocess.GetReturncode(proc) == 0 |
- assert 'task.isolate' in self.task.rpc.subprocess.ReadStdout(proc) |
- self.task.rpc.subprocess.Delete(proc) |
+ def testLs(self): |
+ """Tests that the returned results from a process are correct.""" |
+ logging.info('Calling "ls"') |
+ ls = self.task.Process(['ls']) |
+ logging.info('Trying to wait for ls to complete') |
+ ls.Wait() |
+ logging.info('Checking that ls completed and returned the correct results') |
+ self.assertEqual(ls.GetReturncode(), 0) |
+ self.assertIn('task.isolate', ls.ReadStdout()) |
if __name__ == '__main__': |
- ExampleTestController().RunController() |
+ legion_test_case.main() |