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