blob: bbcb17120bb87cd9c410968a5c3874fcfd0f92d6 [file] [log] [blame]
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# Copyright 2014 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Unittest for crosperf."""
import argparse
import io
import tempfile
import unittest
import unittest.mock as mock
import crosperf
import experiment_file
import settings_factory
EXPERIMENT_FILE_1 = """
board: x86-alex
remote: chromeos-alex3
locks_dir: /tmp
perf_args: record -a -e cycles
benchmark: PageCycler {
iterations: 3
}
image1 {
chromeos_image: /usr/local/google/cros_image1.bin
}
image2 {
remote: chromeos-lumpy1
chromeos_image: /usr/local/google/cros_image2.bin
}
"""
class CrosperfTest(unittest.TestCase):
"""Crosperf test class."""
def setUp(self):
input_file = io.StringIO(EXPERIMENT_FILE_1)
self.exp_file = experiment_file.ExperimentFile(input_file)
def testDryRun(self):
with tempfile.NamedTemporaryFile("w", encoding="utf-8") as f:
f.write(EXPERIMENT_FILE_1)
f.flush()
crosperf.Main(["", f.name, "--dry_run"])
def testConvertOptionsToSettings(self):
parser = argparse.ArgumentParser()
parser.add_argument(
"-l",
"--log_dir",
dest="log_dir",
default="",
help="The log_dir, default is under " "<crosperf_logs>/logs",
)
crosperf.SetupParserOptions(parser)
argv = ["crosperf/crosperf.py", "temp.exp", "--rerun=True"]
options, _ = parser.parse_known_args(argv)
settings = crosperf.ConvertOptionsToSettings(options)
self.assertIsNotNone(settings)
self.assertIsInstance(settings, settings_factory.GlobalSettings)
self.assertEqual(len(settings.fields), 42)
self.assertTrue(settings.GetField("rerun"))
argv = ["crosperf/crosperf.py", "temp.exp"]
options, _ = parser.parse_known_args(argv)
settings = crosperf.ConvertOptionsToSettings(options)
self.assertFalse(settings.GetField("rerun"))
def testExceptionPrintTraceback(self):
"""Test the main function can print traceback in exception."""
def mock_RunCrosperf(*_args, **_kwargs):
return 10 / 0
with mock.patch("crosperf.RunCrosperf", new=mock_RunCrosperf):
with self.assertRaises(ZeroDivisionError) as context:
crosperf.Main([])
self.assertEqual("division by zero", str(context.exception))
if __name__ == "__main__":
unittest.main()