schedv2_unittest.py revision 624bae7781fe3fc8ecbf2e314b1b637ea808d74f
1#!/usr/bin/python 2 3# Copyright 2015 Google Inc. All Rights Reserved. 4 5import mock 6import unittest 7import StringIO 8 9import machine_manager 10import test_flag 11from experiment_factory import ExperimentFactory 12from experiment_file import ExperimentFile 13from experiment_runner import ExperimentRunner 14from machine_manager import MockCrosMachine 15from utils import command_executer 16from utils.command_executer import CommandExecuter 17from experiment_runner_unittest import FakeLogger 18from schedv2 import Schedv2 19 20 21EXPERIMENT_FILE_1 = """ 22 board: daisy 23 remote: chromeos-daisy1.cros chromeos-daisy2.cros 24 25 benchmark: kraken { 26 suite: telemetry_Crosperf 27 iterations: 3 28 } 29 30 image1 { 31 chromeos_image: /chromeos/src/build/images/daisy/latest/cros_image1.bin 32 remote: chromeos-daisy3.cros 33 } 34 35 image2 { 36 chromeos_image: /chromeos/src/build/imaages/daisy/latest/cros_image2.bin 37 remote: chromeos-daisy4.cros chromeos-daisy5.cros 38 } 39 """ 40 41 42class Schedv2Test(unittest.TestCase): 43 44 mock_logger = FakeLogger() 45 mock_cmd_exec = mock.Mock(spec=CommandExecuter) 46 47 def _make_fake_experiment(self, expstr): 48 experiment_file = ExperimentFile(StringIO.StringIO(expstr)) 49 experiment = ExperimentFactory().GetExperiment( 50 experiment_file, working_directory="", log_dir="") 51 return experiment 52 53 def test_remote(self): 54 """Test that remotes in labels are aggregated into experiment.remote.""" 55 56 self.exp = self._make_fake_experiment(EXPERIMENT_FILE_1) 57 self.exp.log_level = 'verbose' 58 schedv2 = Schedv2(self.exp) 59 self.assertIn('chromeos-daisy1.cros', self.exp.remote) 60 self.assertIn('chromeos-daisy2.cros', self.exp.remote) 61 self.assertIn('chromeos-daisy3.cros', self.exp.remote) 62 self.assertIn('chromeos-daisy4.cros', self.exp.remote) 63 self.assertIn('chromeos-daisy5.cros', self.exp.remote) 64 65 def test_unreachable_remote(self): 66 """Test unreachable remotes are removed from experiment remote and 67 label.remote.""" 68 69 def MockIsReachable(cm): 70 return (cm.name != 'chromeos-daisy3.cros' and 71 cm.name != 'chromeos-daisy5.cros') 72 73 originalIsReachable = MockCrosMachine.IsReachable 74 75 try: 76 MockCrosMachine.IsReachable = MockIsReachable 77 self.exp = self._make_fake_experiment(EXPERIMENT_FILE_1) 78 self.assertIn('chromeos-daisy1.cros', self.exp.remote) 79 self.assertIn('chromeos-daisy2.cros', self.exp.remote) 80 self.assertNotIn('chromeos-daisy3.cros', self.exp.remote) 81 self.assertIn('chromeos-daisy4.cros', self.exp.remote) 82 self.assertNotIn('chromeos-daisy5.cros', self.exp.remote) 83 84 for l in self.exp.labels: 85 if l.name == 'image2': 86 self.assertNotIn('chromeos-daisy5.cros', l.remote) 87 self.assertIn('chromeos-daisy4.cros', l.remote) 88 elif l.name == 'image1': 89 self.assertNotIn('chromeos-daisy3.cros', l.remote) 90 finally: 91 MockCrosMachine.IsReachable = originalIsReachable 92 93 94if __name__ == '__main__': 95 test_flag.SetTestMode(True) 96 unittest.main() 97 98