#!/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()