| Index: testing/legion/examples/hello_world/controller_test.py
 | 
| diff --git a/testing/legion/examples/hello_world/controller_test.py b/testing/legion/examples/hello_world/controller_test.py
 | 
| index 37afcef6fda718ee3da73d6ca210af95d19dfd99..8253e9eb362c27b477dd0595bad1e388800adc49 100755
 | 
| --- a/testing/legion/examples/hello_world/controller_test.py
 | 
| +++ b/testing/legion/examples/hello_world/controller_test.py
 | 
| @@ -9,74 +9,69 @@ This module runs on the host machine and is responsible for creating 2
 | 
|  task machines, waiting for them, and running RPC calls on them.
 | 
|  """
 | 
|  
 | 
| -# 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 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):
 | 
| -  """A simple example controller for a test."""
 | 
|  
 | 
| -  def __init__(self):
 | 
| -    super(ExampleTestController, self).__init__()
 | 
| -    self.task1 = None
 | 
| -    self.task2 = None
 | 
| -
 | 
| -  def CreateTask(self, isolated_hash):
 | 
| -    """Create a task object and set the proper values."""
 | 
| -    task = self.CreateNewTask(
 | 
| -        isolated_hash=isolated_hash,
 | 
| -        dimensions={'os': 'Ubuntu-14.04', 'pool': 'Legion'}, priority=200,
 | 
| -        idle_timeout_secs=90, connection_timeout_secs=90,
 | 
| -        verbosity=logging.INFO,
 | 
| -        run_id=1)
 | 
| -    task.Create()
 | 
| -    return task
 | 
| -
 | 
| -  def SetUp(self):
 | 
| -    """Create the task machines and wait until they connect.
 | 
| +class ExampleTestController(legion_test_case.TestCase):
 | 
| +  """A simple example controller for a test."""
 | 
|  
 | 
| -    In this call the actual creation of the task machines is done in parallel
 | 
| -    by the system. The WaitForConnect calls are performed in series but will
 | 
| -    return as soon as the tasks connect.
 | 
| -    """
 | 
| +  @classmethod
 | 
| +  def CreateTestTask(cls):
 | 
| +    """Create a new task."""
 | 
|      parser = argparse.ArgumentParser()
 | 
|      parser.add_argument('--task-hash')
 | 
| +    parser.add_argument('--os', default='Ubuntu-14.04')
 | 
|      args, _ = parser.parse_known_args()
 | 
|  
 | 
| -    self.task1 = self.CreateTask(args.task_hash)
 | 
| -    self.task2 = self.CreateTask(args.task_hash)
 | 
| -    self.task1.WaitForConnection()
 | 
| -    self.task2.WaitForConnection()
 | 
| -
 | 
| -  def RunTest(self):
 | 
| -    """Main method to run the test code."""
 | 
| -    self.CallEcho(self.task1)
 | 
| -    self.CallEcho(self.task2)
 | 
| -    self.CallTaskTest(self.task1)
 | 
| -    self.CallTaskTest(self.task2)
 | 
| -
 | 
| -  def CallEcho(self, task):
 | 
| -    """Call rpc.Echo on a task."""
 | 
| -    logging.info('Calling Echo on %s', task.name)
 | 
| -    logging.info(task.rpc.Echo(task.name))
 | 
| +    task = cls.CreateTask(
 | 
| +        isolated_hash=args.task_hash,
 | 
| +        dimensions={'os': args.os},
 | 
| +        idle_timeout_secs=90,
 | 
| +        connection_timeout_secs=90,
 | 
| +        verbosity=logging.DEBUG)
 | 
| +    task.Create()
 | 
| +    return task
 | 
|  
 | 
| -  def CallTaskTest(self, task):
 | 
| -    """Call task_test.py name on a task."""
 | 
| -    logging.info('Calling Subprocess to run "./task_test.py %s"', task.name)
 | 
| -    proc = task.rpc.subprocess.Popen(['./task_test.py', task.name])
 | 
| -    task.rpc.subprocess.Wait(proc)
 | 
| -    retcode = task.rpc.subprocess.GetReturncode(proc)
 | 
| -    stdout = task.rpc.subprocess.ReadStdout(proc)
 | 
| -    stderr = task.rpc.subprocess.ReadStderr(proc)
 | 
| -    logging.info('retcode: %s, stdout: %s, stderr: %s', retcode, stdout, stderr)
 | 
| +  @classmethod
 | 
| +  def setUpClass(cls):
 | 
| +    """Creates the task machines and waits until they connect."""
 | 
| +    cls.task1 = cls.CreateTestTask()
 | 
| +    cls.task2 = cls.CreateTestTask()
 | 
| +    cls.task1.WaitForConnection()
 | 
| +    cls.task2.WaitForConnection()
 | 
| +
 | 
| +  def testCallEcho(self):
 | 
| +    """Tests rpc.Echo on a task."""
 | 
| +    logging.info('Calling Echo on %s', self.task2.name)
 | 
| +    self.assertEqual(self.task2.rpc.Echo('foo'), 'echo foo')
 | 
| +
 | 
| +  def testLaunchTaskBinary(self):
 | 
| +    """Call task_test.py 'name' on the tasks."""
 | 
| +    self.VerifyTaskBinaryLaunched(self.task1)
 | 
| +    self.VerifyTaskBinaryLaunched(self.task2)
 | 
| +
 | 
| +  def VerifyTaskBinaryLaunched(self, task):
 | 
| +    logging.info(
 | 
| +        'Calling Process to run "./task_test.py %s"', task.name)
 | 
| +    proc = task.Process(['./task_test.py', task.name])
 | 
| +    proc.Wait()
 | 
| +    self.assertEqual(proc.GetReturncode(), 0)
 | 
| +    self.assertIn(task.name, proc.ReadStdout())
 | 
| +    self.assertEquals(proc.ReadStderr(), '')
 | 
| +    proc.Delete()
 | 
|  
 | 
|  
 | 
|  if __name__ == '__main__':
 | 
| -  ExampleTestController().RunController()
 | 
| +  legion_test_case.main()
 | 
| 
 |