1*760c253cSXin Li#!/usr/bin/env python3 2*760c253cSXin Li# -*- coding: utf-8 -*- 3*760c253cSXin Li 4*760c253cSXin Li# Copyright 2013 The ChromiumOS Authors 5*760c253cSXin Li# Use of this source code is governed by a BSD-style license that can be 6*760c253cSXin Li# found in the LICENSE file. 7*760c253cSXin Li 8*760c253cSXin Li"""Testing of benchmark_run.""" 9*760c253cSXin Li 10*760c253cSXin Li 11*760c253cSXin Liimport inspect 12*760c253cSXin Liimport unittest 13*760c253cSXin Liimport unittest.mock as mock 14*760c253cSXin Li 15*760c253cSXin Lifrom benchmark import Benchmark 16*760c253cSXin Liimport benchmark_run 17*760c253cSXin Lifrom cros_utils import logger 18*760c253cSXin Lifrom label import MockLabel 19*760c253cSXin Lifrom machine_manager import MachineManager 20*760c253cSXin Lifrom machine_manager import MockCrosMachine 21*760c253cSXin Lifrom machine_manager import MockMachineManager 22*760c253cSXin Lifrom results_cache import CacheConditions 23*760c253cSXin Lifrom results_cache import MockResultsCache 24*760c253cSXin Lifrom results_cache import Result 25*760c253cSXin Lifrom results_cache import ResultsCache 26*760c253cSXin Lifrom suite_runner import MockSuiteRunner 27*760c253cSXin Lifrom suite_runner import SuiteRunner 28*760c253cSXin Li 29*760c253cSXin Li 30*760c253cSXin Liclass BenchmarkRunTest(unittest.TestCase): 31*760c253cSXin Li """Unit tests for the BenchmarkRun class and all of its methods.""" 32*760c253cSXin Li 33*760c253cSXin Li def setUp(self): 34*760c253cSXin Li self.status = [] 35*760c253cSXin Li self.called_ReadCache = None 36*760c253cSXin Li self.log_error = [] 37*760c253cSXin Li self.log_output = [] 38*760c253cSXin Li self.err_msg = None 39*760c253cSXin Li self.test_benchmark = Benchmark( 40*760c253cSXin Li "page_cycler.netsim.top_10", # name 41*760c253cSXin Li "page_cycler.netsim.top_10", # test_name 42*760c253cSXin Li "", # test_args 43*760c253cSXin Li 1, # iterations 44*760c253cSXin Li False, # rm_chroot_tmp 45*760c253cSXin Li "", # perf_args 46*760c253cSXin Li suite="telemetry_Crosperf", 47*760c253cSXin Li ) # suite 48*760c253cSXin Li 49*760c253cSXin Li self.test_label = MockLabel( 50*760c253cSXin Li "test1", 51*760c253cSXin Li "build", 52*760c253cSXin Li "image1", 53*760c253cSXin Li "autotest_dir", 54*760c253cSXin Li "debug_dir", 55*760c253cSXin Li "/tmp/test_benchmark_run", 56*760c253cSXin Li "x86-alex", 57*760c253cSXin Li "chromeos2-row1-rack4-host9.cros", 58*760c253cSXin Li image_args="", 59*760c253cSXin Li cache_dir="", 60*760c253cSXin Li cache_only=False, 61*760c253cSXin Li log_level="average", 62*760c253cSXin Li compiler="gcc", 63*760c253cSXin Li crosfleet=False, 64*760c253cSXin Li ) 65*760c253cSXin Li 66*760c253cSXin Li self.test_cache_conditions = [ 67*760c253cSXin Li CacheConditions.CACHE_FILE_EXISTS, 68*760c253cSXin Li CacheConditions.CHECKSUMS_MATCH, 69*760c253cSXin Li ] 70*760c253cSXin Li 71*760c253cSXin Li self.mock_logger = logger.GetLogger(log_dir="", mock=True) 72*760c253cSXin Li 73*760c253cSXin Li self.mock_machine_manager = mock.Mock(spec=MachineManager) 74*760c253cSXin Li 75*760c253cSXin Li def testDryRun(self): 76*760c253cSXin Li my_label = MockLabel( 77*760c253cSXin Li "test1", 78*760c253cSXin Li "build", 79*760c253cSXin Li "image1", 80*760c253cSXin Li "autotest_dir", 81*760c253cSXin Li "debug_dir", 82*760c253cSXin Li "/tmp/test_benchmark_run", 83*760c253cSXin Li "x86-alex", 84*760c253cSXin Li "chromeos2-row1-rack4-host9.cros", 85*760c253cSXin Li image_args="", 86*760c253cSXin Li cache_dir="", 87*760c253cSXin Li cache_only=False, 88*760c253cSXin Li log_level="average", 89*760c253cSXin Li compiler="gcc", 90*760c253cSXin Li crosfleet=False, 91*760c253cSXin Li ) 92*760c253cSXin Li 93*760c253cSXin Li logging_level = "average" 94*760c253cSXin Li m = MockMachineManager("/tmp/chromeos_root", 0, logging_level, "") 95*760c253cSXin Li m.AddMachine("chromeos2-row1-rack4-host9.cros") 96*760c253cSXin Li bench = Benchmark( 97*760c253cSXin Li "page_cycler.netsim.top_10", # name 98*760c253cSXin Li "page_cycler.netsim.top_10", # test_name 99*760c253cSXin Li "", # test_args 100*760c253cSXin Li 1, # iterations 101*760c253cSXin Li False, # rm_chroot_tmp 102*760c253cSXin Li "", # perf_args 103*760c253cSXin Li suite="telemetry_Crosperf", 104*760c253cSXin Li ) # suite 105*760c253cSXin Li dut_conf = { 106*760c253cSXin Li "cooldown_time": 5, 107*760c253cSXin Li "cooldown_temp": 45, 108*760c253cSXin Li "governor": "powersave", 109*760c253cSXin Li "cpu_usage": "big_only", 110*760c253cSXin Li "cpu_freq_pct": 80, 111*760c253cSXin Li } 112*760c253cSXin Li b = benchmark_run.MockBenchmarkRun( 113*760c253cSXin Li "test run", 114*760c253cSXin Li bench, 115*760c253cSXin Li my_label, 116*760c253cSXin Li 1, 117*760c253cSXin Li [], 118*760c253cSXin Li m, 119*760c253cSXin Li logger.GetLogger(), 120*760c253cSXin Li logging_level, 121*760c253cSXin Li "", 122*760c253cSXin Li dut_conf, 123*760c253cSXin Li ) 124*760c253cSXin Li b.cache = MockResultsCache() 125*760c253cSXin Li b.suite_runner = MockSuiteRunner() 126*760c253cSXin Li b.start() 127*760c253cSXin Li 128*760c253cSXin Li # Make sure the arguments to BenchmarkRun.__init__ have not changed 129*760c253cSXin Li # since the last time this test was updated: 130*760c253cSXin Li args_list = [ 131*760c253cSXin Li "self", 132*760c253cSXin Li "name", 133*760c253cSXin Li "benchmark", 134*760c253cSXin Li "label", 135*760c253cSXin Li "iteration", 136*760c253cSXin Li "cache_conditions", 137*760c253cSXin Li "machine_manager", 138*760c253cSXin Li "logger_to_use", 139*760c253cSXin Li "log_level", 140*760c253cSXin Li "share_cache", 141*760c253cSXin Li "dut_config", 142*760c253cSXin Li ] 143*760c253cSXin Li arg_spec = inspect.getfullargspec(benchmark_run.BenchmarkRun.__init__) 144*760c253cSXin Li self.assertEqual(len(arg_spec.args), len(args_list)) 145*760c253cSXin Li self.assertEqual(arg_spec.args, args_list) 146*760c253cSXin Li 147*760c253cSXin Li def test_init(self): 148*760c253cSXin Li # Nothing really worth testing here; just field assignments. 149*760c253cSXin Li pass 150*760c253cSXin Li 151*760c253cSXin Li def test_read_cache(self): 152*760c253cSXin Li # Nothing really worth testing here, either. 153*760c253cSXin Li pass 154*760c253cSXin Li 155*760c253cSXin Li def test_run(self): 156*760c253cSXin Li br = benchmark_run.BenchmarkRun( 157*760c253cSXin Li "test_run", 158*760c253cSXin Li self.test_benchmark, 159*760c253cSXin Li self.test_label, 160*760c253cSXin Li 1, 161*760c253cSXin Li self.test_cache_conditions, 162*760c253cSXin Li self.mock_machine_manager, 163*760c253cSXin Li self.mock_logger, 164*760c253cSXin Li "average", 165*760c253cSXin Li "", 166*760c253cSXin Li {}, 167*760c253cSXin Li ) 168*760c253cSXin Li 169*760c253cSXin Li def MockLogOutput(msg, print_to_console=False): 170*760c253cSXin Li """Helper function for test_run.""" 171*760c253cSXin Li del print_to_console 172*760c253cSXin Li self.log_output.append(msg) 173*760c253cSXin Li 174*760c253cSXin Li def MockLogError(msg, print_to_console=False): 175*760c253cSXin Li """Helper function for test_run.""" 176*760c253cSXin Li del print_to_console 177*760c253cSXin Li self.log_error.append(msg) 178*760c253cSXin Li 179*760c253cSXin Li def MockRecordStatus(msg): 180*760c253cSXin Li """Helper function for test_run.""" 181*760c253cSXin Li self.status.append(msg) 182*760c253cSXin Li 183*760c253cSXin Li def FakeReadCache(): 184*760c253cSXin Li """Helper function for test_run.""" 185*760c253cSXin Li br.cache = mock.Mock(spec=ResultsCache) 186*760c253cSXin Li self.called_ReadCache = True 187*760c253cSXin Li return 0 188*760c253cSXin Li 189*760c253cSXin Li def FakeReadCacheSucceed(): 190*760c253cSXin Li """Helper function for test_run.""" 191*760c253cSXin Li br.cache = mock.Mock(spec=ResultsCache) 192*760c253cSXin Li br.result = mock.Mock(spec=Result) 193*760c253cSXin Li br.result.out = "result.out stuff" 194*760c253cSXin Li br.result.err = "result.err stuff" 195*760c253cSXin Li br.result.retval = 0 196*760c253cSXin Li self.called_ReadCache = True 197*760c253cSXin Li return 0 198*760c253cSXin Li 199*760c253cSXin Li def FakeReadCacheException(): 200*760c253cSXin Li """Helper function for test_run.""" 201*760c253cSXin Li raise RuntimeError( 202*760c253cSXin Li "This is an exception test; it is supposed to happen" 203*760c253cSXin Li ) 204*760c253cSXin Li 205*760c253cSXin Li def FakeAcquireMachine(): 206*760c253cSXin Li """Helper function for test_run.""" 207*760c253cSXin Li mock_machine = MockCrosMachine( 208*760c253cSXin Li "chromeos1-row3-rack5-host7.cros", "chromeos", "average" 209*760c253cSXin Li ) 210*760c253cSXin Li return mock_machine 211*760c253cSXin Li 212*760c253cSXin Li def FakeRunTest(_machine): 213*760c253cSXin Li """Helper function for test_run.""" 214*760c253cSXin Li mock_result = mock.Mock(spec=Result) 215*760c253cSXin Li mock_result.retval = 0 216*760c253cSXin Li return mock_result 217*760c253cSXin Li 218*760c253cSXin Li def FakeRunTestFail(_machine): 219*760c253cSXin Li """Helper function for test_run.""" 220*760c253cSXin Li mock_result = mock.Mock(spec=Result) 221*760c253cSXin Li mock_result.retval = 1 222*760c253cSXin Li return mock_result 223*760c253cSXin Li 224*760c253cSXin Li def ResetTestValues(): 225*760c253cSXin Li """Helper function for test_run.""" 226*760c253cSXin Li self.log_output = [] 227*760c253cSXin Li self.log_error = [] 228*760c253cSXin Li self.status = [] 229*760c253cSXin Li br.result = None 230*760c253cSXin Li self.called_ReadCache = False 231*760c253cSXin Li 232*760c253cSXin Li # Assign all the fake functions to the appropriate objects. 233*760c253cSXin Li br.logger().LogOutput = MockLogOutput 234*760c253cSXin Li br.logger().LogError = MockLogError 235*760c253cSXin Li br.timeline.Record = MockRecordStatus 236*760c253cSXin Li br.ReadCache = FakeReadCache 237*760c253cSXin Li br.RunTest = FakeRunTest 238*760c253cSXin Li br.AcquireMachine = FakeAcquireMachine 239*760c253cSXin Li 240*760c253cSXin Li # First test: No cache hit, all goes well. 241*760c253cSXin Li ResetTestValues() 242*760c253cSXin Li br.run() 243*760c253cSXin Li self.assertTrue(self.called_ReadCache) 244*760c253cSXin Li self.assertEqual( 245*760c253cSXin Li self.log_output, 246*760c253cSXin Li [ 247*760c253cSXin Li "test_run: No cache hit.", 248*760c253cSXin Li "Releasing machine: chromeos1-row3-rack5-host7.cros", 249*760c253cSXin Li "Released machine: chromeos1-row3-rack5-host7.cros", 250*760c253cSXin Li ], 251*760c253cSXin Li ) 252*760c253cSXin Li self.assertEqual(len(self.log_error), 0) 253*760c253cSXin Li self.assertEqual(self.status, ["WAITING", "SUCCEEDED"]) 254*760c253cSXin Li 255*760c253cSXin Li # Second test: No cached result found; test run was "terminated" for some 256*760c253cSXin Li # reason. 257*760c253cSXin Li ResetTestValues() 258*760c253cSXin Li br.terminated = True 259*760c253cSXin Li br.run() 260*760c253cSXin Li self.assertTrue(self.called_ReadCache) 261*760c253cSXin Li self.assertEqual( 262*760c253cSXin Li self.log_output, 263*760c253cSXin Li [ 264*760c253cSXin Li "test_run: No cache hit.", 265*760c253cSXin Li "Releasing machine: chromeos1-row3-rack5-host7.cros", 266*760c253cSXin Li "Released machine: chromeos1-row3-rack5-host7.cros", 267*760c253cSXin Li ], 268*760c253cSXin Li ) 269*760c253cSXin Li self.assertEqual(len(self.log_error), 0) 270*760c253cSXin Li self.assertEqual(self.status, ["WAITING"]) 271*760c253cSXin Li 272*760c253cSXin Li # Third test. No cached result found; RunTest failed for some reason. 273*760c253cSXin Li ResetTestValues() 274*760c253cSXin Li br.terminated = False 275*760c253cSXin Li br.RunTest = FakeRunTestFail 276*760c253cSXin Li br.run() 277*760c253cSXin Li self.assertTrue(self.called_ReadCache) 278*760c253cSXin Li self.assertEqual( 279*760c253cSXin Li self.log_output, 280*760c253cSXin Li [ 281*760c253cSXin Li "test_run: No cache hit.", 282*760c253cSXin Li "Releasing machine: chromeos1-row3-rack5-host7.cros", 283*760c253cSXin Li "Released machine: chromeos1-row3-rack5-host7.cros", 284*760c253cSXin Li ], 285*760c253cSXin Li ) 286*760c253cSXin Li self.assertEqual(len(self.log_error), 0) 287*760c253cSXin Li self.assertEqual(self.status, ["WAITING", "FAILED"]) 288*760c253cSXin Li 289*760c253cSXin Li # Fourth test: ReadCache found a cached result. 290*760c253cSXin Li ResetTestValues() 291*760c253cSXin Li br.RunTest = FakeRunTest 292*760c253cSXin Li br.ReadCache = FakeReadCacheSucceed 293*760c253cSXin Li br.run() 294*760c253cSXin Li self.assertTrue(self.called_ReadCache) 295*760c253cSXin Li self.assertEqual( 296*760c253cSXin Li self.log_output, 297*760c253cSXin Li [ 298*760c253cSXin Li "test_run: Cache hit.", 299*760c253cSXin Li "result.out stuff", 300*760c253cSXin Li "Releasing machine: chromeos1-row3-rack5-host7.cros", 301*760c253cSXin Li "Released machine: chromeos1-row3-rack5-host7.cros", 302*760c253cSXin Li ], 303*760c253cSXin Li ) 304*760c253cSXin Li self.assertEqual(self.log_error, ["result.err stuff"]) 305*760c253cSXin Li self.assertEqual(self.status, ["SUCCEEDED"]) 306*760c253cSXin Li 307*760c253cSXin Li # Fifth test: ReadCache generates an exception; does the try/finally block 308*760c253cSXin Li # work? 309*760c253cSXin Li ResetTestValues() 310*760c253cSXin Li br.ReadCache = FakeReadCacheException 311*760c253cSXin Li br.machine = FakeAcquireMachine() 312*760c253cSXin Li br.run() 313*760c253cSXin Li self.assertEqual( 314*760c253cSXin Li self.log_error, 315*760c253cSXin Li [ 316*760c253cSXin Li "Benchmark run: 'test_run' failed: This is an exception test; it is " 317*760c253cSXin Li "supposed to happen" 318*760c253cSXin Li ], 319*760c253cSXin Li ) 320*760c253cSXin Li self.assertEqual(self.status, ["FAILED"]) 321*760c253cSXin Li 322*760c253cSXin Li def test_terminate_pass(self): 323*760c253cSXin Li br = benchmark_run.BenchmarkRun( 324*760c253cSXin Li "test_run", 325*760c253cSXin Li self.test_benchmark, 326*760c253cSXin Li self.test_label, 327*760c253cSXin Li 1, 328*760c253cSXin Li self.test_cache_conditions, 329*760c253cSXin Li self.mock_machine_manager, 330*760c253cSXin Li self.mock_logger, 331*760c253cSXin Li "average", 332*760c253cSXin Li "", 333*760c253cSXin Li {}, 334*760c253cSXin Li ) 335*760c253cSXin Li 336*760c253cSXin Li def GetLastEventPassed(): 337*760c253cSXin Li """Helper function for test_terminate_pass""" 338*760c253cSXin Li return benchmark_run.STATUS_SUCCEEDED 339*760c253cSXin Li 340*760c253cSXin Li def RecordStub(status): 341*760c253cSXin Li """Helper function for test_terminate_pass""" 342*760c253cSXin Li self.status = status 343*760c253cSXin Li 344*760c253cSXin Li self.status = benchmark_run.STATUS_SUCCEEDED 345*760c253cSXin Li self.assertFalse(br.terminated) 346*760c253cSXin Li self.assertFalse(br.suite_runner.CommandTerminator().IsTerminated()) 347*760c253cSXin Li 348*760c253cSXin Li br.timeline.GetLastEvent = GetLastEventPassed 349*760c253cSXin Li br.timeline.Record = RecordStub 350*760c253cSXin Li 351*760c253cSXin Li br.Terminate() 352*760c253cSXin Li 353*760c253cSXin Li self.assertTrue(br.terminated) 354*760c253cSXin Li self.assertTrue(br.suite_runner.CommandTerminator().IsTerminated()) 355*760c253cSXin Li self.assertEqual(self.status, benchmark_run.STATUS_FAILED) 356*760c253cSXin Li 357*760c253cSXin Li def test_terminate_fail(self): 358*760c253cSXin Li br = benchmark_run.BenchmarkRun( 359*760c253cSXin Li "test_run", 360*760c253cSXin Li self.test_benchmark, 361*760c253cSXin Li self.test_label, 362*760c253cSXin Li 1, 363*760c253cSXin Li self.test_cache_conditions, 364*760c253cSXin Li self.mock_machine_manager, 365*760c253cSXin Li self.mock_logger, 366*760c253cSXin Li "average", 367*760c253cSXin Li "", 368*760c253cSXin Li {}, 369*760c253cSXin Li ) 370*760c253cSXin Li 371*760c253cSXin Li def GetLastEventFailed(): 372*760c253cSXin Li """Helper function for test_terminate_fail""" 373*760c253cSXin Li return benchmark_run.STATUS_FAILED 374*760c253cSXin Li 375*760c253cSXin Li def RecordStub(status): 376*760c253cSXin Li """Helper function for test_terminate_fail""" 377*760c253cSXin Li self.status = status 378*760c253cSXin Li 379*760c253cSXin Li self.status = benchmark_run.STATUS_SUCCEEDED 380*760c253cSXin Li self.assertFalse(br.terminated) 381*760c253cSXin Li self.assertFalse(br.suite_runner.CommandTerminator().IsTerminated()) 382*760c253cSXin Li 383*760c253cSXin Li br.timeline.GetLastEvent = GetLastEventFailed 384*760c253cSXin Li br.timeline.Record = RecordStub 385*760c253cSXin Li 386*760c253cSXin Li br.Terminate() 387*760c253cSXin Li 388*760c253cSXin Li self.assertTrue(br.terminated) 389*760c253cSXin Li self.assertTrue(br.suite_runner.CommandTerminator().IsTerminated()) 390*760c253cSXin Li self.assertEqual(self.status, benchmark_run.STATUS_SUCCEEDED) 391*760c253cSXin Li 392*760c253cSXin Li def test_acquire_machine(self): 393*760c253cSXin Li br = benchmark_run.BenchmarkRun( 394*760c253cSXin Li "test_run", 395*760c253cSXin Li self.test_benchmark, 396*760c253cSXin Li self.test_label, 397*760c253cSXin Li 1, 398*760c253cSXin Li self.test_cache_conditions, 399*760c253cSXin Li self.mock_machine_manager, 400*760c253cSXin Li self.mock_logger, 401*760c253cSXin Li "average", 402*760c253cSXin Li "", 403*760c253cSXin Li {}, 404*760c253cSXin Li ) 405*760c253cSXin Li 406*760c253cSXin Li br.terminated = True 407*760c253cSXin Li self.assertRaises(Exception, br.AcquireMachine) 408*760c253cSXin Li 409*760c253cSXin Li br.terminated = False 410*760c253cSXin Li mock_machine = MockCrosMachine( 411*760c253cSXin Li "chromeos1-row3-rack5-host7.cros", "chromeos", "average" 412*760c253cSXin Li ) 413*760c253cSXin Li self.mock_machine_manager.AcquireMachine.return_value = mock_machine 414*760c253cSXin Li 415*760c253cSXin Li machine = br.AcquireMachine() 416*760c253cSXin Li self.assertEqual(machine.name, "chromeos1-row3-rack5-host7.cros") 417*760c253cSXin Li 418*760c253cSXin Li def test_get_extra_autotest_args(self): 419*760c253cSXin Li br = benchmark_run.BenchmarkRun( 420*760c253cSXin Li "test_run", 421*760c253cSXin Li self.test_benchmark, 422*760c253cSXin Li self.test_label, 423*760c253cSXin Li 1, 424*760c253cSXin Li self.test_cache_conditions, 425*760c253cSXin Li self.mock_machine_manager, 426*760c253cSXin Li self.mock_logger, 427*760c253cSXin Li "average", 428*760c253cSXin Li "", 429*760c253cSXin Li {}, 430*760c253cSXin Li ) 431*760c253cSXin Li 432*760c253cSXin Li def MockLogError(err_msg): 433*760c253cSXin Li """Helper function for test_get_extra_autotest_args""" 434*760c253cSXin Li self.err_msg = err_msg 435*760c253cSXin Li 436*760c253cSXin Li self.mock_logger.LogError = MockLogError 437*760c253cSXin Li 438*760c253cSXin Li result = br.GetExtraAutotestArgs() 439*760c253cSXin Li self.assertEqual(result, "") 440*760c253cSXin Li 441*760c253cSXin Li self.test_benchmark.perf_args = "record -e cycles" 442*760c253cSXin Li result = br.GetExtraAutotestArgs() 443*760c253cSXin Li self.assertEqual( 444*760c253cSXin Li result, 445*760c253cSXin Li "--profiler=custom_perf --profiler_args='perf_options=\"record -a -e " 446*760c253cSXin Li "cycles\"'", 447*760c253cSXin Li ) 448*760c253cSXin Li 449*760c253cSXin Li self.test_benchmark.perf_args = "record -e cycles" 450*760c253cSXin Li self.test_benchmark.suite = "test_that" 451*760c253cSXin Li result = br.GetExtraAutotestArgs() 452*760c253cSXin Li self.assertEqual(result, "") 453*760c253cSXin Li self.assertEqual( 454*760c253cSXin Li self.err_msg, "Non-telemetry benchmark does not support profiler." 455*760c253cSXin Li ) 456*760c253cSXin Li 457*760c253cSXin Li self.test_benchmark.perf_args = "junk args" 458*760c253cSXin Li self.test_benchmark.suite = "telemetry_Crosperf" 459*760c253cSXin Li self.assertRaises(Exception, br.GetExtraAutotestArgs) 460*760c253cSXin Li 461*760c253cSXin Li @mock.patch.object(SuiteRunner, "Run") 462*760c253cSXin Li @mock.patch.object(Result, "CreateFromRun") 463*760c253cSXin Li def test_run_test(self, mock_result, mock_runner): 464*760c253cSXin Li br = benchmark_run.BenchmarkRun( 465*760c253cSXin Li "test_run", 466*760c253cSXin Li self.test_benchmark, 467*760c253cSXin Li self.test_label, 468*760c253cSXin Li 1, 469*760c253cSXin Li self.test_cache_conditions, 470*760c253cSXin Li self.mock_machine_manager, 471*760c253cSXin Li self.mock_logger, 472*760c253cSXin Li "average", 473*760c253cSXin Li "", 474*760c253cSXin Li {}, 475*760c253cSXin Li ) 476*760c253cSXin Li 477*760c253cSXin Li self.status = [] 478*760c253cSXin Li 479*760c253cSXin Li def MockRecord(status): 480*760c253cSXin Li self.status.append(status) 481*760c253cSXin Li 482*760c253cSXin Li br.timeline.Record = MockRecord 483*760c253cSXin Li mock_machine = MockCrosMachine( 484*760c253cSXin Li "chromeos1-row3-rack5-host7.cros", "chromeos", "average" 485*760c253cSXin Li ) 486*760c253cSXin Li mock_runner.return_value = [0, "{'Score':100}", ""] 487*760c253cSXin Li 488*760c253cSXin Li br.RunTest(mock_machine) 489*760c253cSXin Li 490*760c253cSXin Li self.assertTrue(br.run_completed) 491*760c253cSXin Li self.assertEqual( 492*760c253cSXin Li self.status, 493*760c253cSXin Li [benchmark_run.STATUS_IMAGING, benchmark_run.STATUS_RUNNING], 494*760c253cSXin Li ) 495*760c253cSXin Li 496*760c253cSXin Li self.assertEqual(br.machine_manager.ImageMachine.call_count, 1) 497*760c253cSXin Li br.machine_manager.ImageMachine.assert_called_with( 498*760c253cSXin Li mock_machine, self.test_label 499*760c253cSXin Li ) 500*760c253cSXin Li self.assertEqual(mock_runner.call_count, 1) 501*760c253cSXin Li mock_runner.assert_called_with( 502*760c253cSXin Li mock_machine, br.label, br.benchmark, "", br.profiler_args 503*760c253cSXin Li ) 504*760c253cSXin Li 505*760c253cSXin Li self.assertEqual(mock_result.call_count, 1) 506*760c253cSXin Li mock_result.assert_called_with( 507*760c253cSXin Li self.mock_logger, 508*760c253cSXin Li "average", 509*760c253cSXin Li self.test_label, 510*760c253cSXin Li None, 511*760c253cSXin Li "{'Score':100}", 512*760c253cSXin Li "", 513*760c253cSXin Li 0, 514*760c253cSXin Li "page_cycler.netsim.top_10", 515*760c253cSXin Li "telemetry_Crosperf", 516*760c253cSXin Li "", 517*760c253cSXin Li ) 518*760c253cSXin Li 519*760c253cSXin Li def test_set_cache_conditions(self): 520*760c253cSXin Li br = benchmark_run.BenchmarkRun( 521*760c253cSXin Li "test_run", 522*760c253cSXin Li self.test_benchmark, 523*760c253cSXin Li self.test_label, 524*760c253cSXin Li 1, 525*760c253cSXin Li self.test_cache_conditions, 526*760c253cSXin Li self.mock_machine_manager, 527*760c253cSXin Li self.mock_logger, 528*760c253cSXin Li "average", 529*760c253cSXin Li "", 530*760c253cSXin Li {}, 531*760c253cSXin Li ) 532*760c253cSXin Li 533*760c253cSXin Li phony_cache_conditions = [123, 456, True, False] 534*760c253cSXin Li 535*760c253cSXin Li self.assertEqual(br.cache_conditions, self.test_cache_conditions) 536*760c253cSXin Li 537*760c253cSXin Li br.SetCacheConditions(phony_cache_conditions) 538*760c253cSXin Li self.assertEqual(br.cache_conditions, phony_cache_conditions) 539*760c253cSXin Li 540*760c253cSXin Li br.SetCacheConditions(self.test_cache_conditions) 541*760c253cSXin Li self.assertEqual(br.cache_conditions, self.test_cache_conditions) 542*760c253cSXin Li 543*760c253cSXin Li 544*760c253cSXin Liif __name__ == "__main__": 545*760c253cSXin Li unittest.main() 546