|  | #!/usr/bin/env python | 
|  | # Copyright 2015 The Chromium Authors. All rights reserved. | 
|  | # Use of this source code is governed by a BSD-style license that can be | 
|  | # found in the LICENSE file. | 
|  |  | 
|  | """A simple host test module. | 
|  |  | 
|  | This module runs on the host machine and is responsible for creating 2 | 
|  | task machines, waiting for them, and running RPC calls on them. | 
|  | """ | 
|  |  | 
|  | import argparse | 
|  | import logging | 
|  | import os | 
|  | import sys | 
|  | import time | 
|  |  | 
|  | # 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(legion_test_case.TestCase): | 
|  | """A simple example controller for a test.""" | 
|  |  | 
|  | @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() | 
|  |  | 
|  | 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 | 
|  |  | 
|  | @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(['python', '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__': | 
|  | legion_test_case.main() |