blob: e7d29497b72e3492824f9dcd9285b09c172c736e [file] [log] [blame]
#!/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()