aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcmtice <cmtice@google.com>2014-06-17 16:30:45 -0700
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2014-07-03 02:52:12 +0000
commit6367e17c2a01a67fe015f4a94a1cbb30d7958dfc (patch)
treed0ea87db69c375cd75ad6307bca287e54ea2f11e
parent4f0309db0ba1f1d927d8c477afe253959180f6a7 (diff)
downloadtoolchain-utils-6367e17c2a01a67fe015f4a94a1cbb30d7958dfc.tar.gz
Adding/updating a few more unittests for Crosperf.
BUG=None Test=Ran all regression tests. Ran 'normal' crosperf. Change-Id: If1dcafee39f10c20c935908c466fbae8fdb23a35 Reviewed-on: https://chrome-internal-review.googlesource.com/166485 Reviewed-by: Han Shen <shenhan@google.com> Commit-Queue: Caroline Tice <cmtice@google.com> Tested-by: Caroline Tice <cmtice@google.com>
-rwxr-xr-x[-rw-r--r--]crosperf/config_unittest.py2
-rw-r--r--crosperf/crosperf_unittest.py90
-rwxr-xr-xcrosperf/experiment_file_unittest.py22
-rwxr-xr-x[-rw-r--r--]crosperf/flag_test_unittest.py2
-rw-r--r--crosperf/settings_factory_unittest.py95
-rw-r--r--crosperf/settings_unittest.py198
6 files changed, 407 insertions, 2 deletions
diff --git a/crosperf/config_unittest.py b/crosperf/config_unittest.py
index af2b8fc9..098ea7c7 100644..100755
--- a/crosperf/config_unittest.py
+++ b/crosperf/config_unittest.py
@@ -1,4 +1,4 @@
-#!/usr/bi/python
+#!/usr/bin/python
#
# Copyright 2014 Google Inc. All Rights Reserved.
diff --git a/crosperf/crosperf_unittest.py b/crosperf/crosperf_unittest.py
new file mode 100644
index 00000000..9fc504a2
--- /dev/null
+++ b/crosperf/crosperf_unittest.py
@@ -0,0 +1,90 @@
+#!/usr/bin/python
+#
+# Copyright 2014 Google Inc. All Rights Reserved.
+
+"""Unittest for crosperf."""
+import atexit
+import os
+import optparse
+import StringIO
+
+
+import mock
+import unittest
+
+import crosperf
+import settings_factory
+import experiment_file
+import experiment_runner
+
+from help import Help
+
+from utils import command_executer
+from utils import logger
+
+EXPERIMENT_FILE_1 = """
+ board: x86-alex
+ remote: chromeos-alex3
+ 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):
+
+ def setUp(self):
+ input_file = StringIO.StringIO(EXPERIMENT_FILE_1)
+ self.exp_file = experiment_file.ExperimentFile(input_file)
+
+ def test_setup_parser_options(self):
+
+ parser = optparse.OptionParser(usage=Help().GetUsage(),
+ description=Help().GetHelp(),
+ formatter=crosperf.MyIndentedHelpFormatter(),
+ version="%prog 3.0")
+ parser.add_option("-l", "--log_dir",
+ dest="log_dir",
+ default="",
+ help="The log_dir, default is under <crosperf_logs>/logs")
+ options_before = parser._get_all_options()
+ self.assertEqual(len(options_before), 3)
+ crosperf.SetupParserOptions(parser)
+ options_after = parser._get_all_options()
+ self.assertEqual(len(options_after), 25)
+
+
+ def test_convert_options_to_settings(self):
+ parser = optparse.OptionParser(usage=Help().GetUsage(),
+ description=Help().GetHelp(),
+ formatter=crosperf.MyIndentedHelpFormatter(),
+ version="%prog 3.0")
+ parser.add_option("-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, args = parser.parse_args(argv)
+ settings = crosperf.ConvertOptionsToSettings(options)
+ self.assertIsNotNone(settings)
+ self.assertIsInstance(settings, settings_factory.GlobalSettings)
+ self.assertEqual(len(settings.fields), 21)
+ self.assertTrue(settings.GetField('rerun'))
+ argv = ['crosperf/crosperf.py', 'temp.exp']
+ options, args = parser.parse_args(argv)
+ settings = crosperf.ConvertOptionsToSettings(options)
+ self.assertFalse(settings.GetField('rerun'))
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/crosperf/experiment_file_unittest.py b/crosperf/experiment_file_unittest.py
index 335a516b..41e4a4c6 100755
--- a/crosperf/experiment_file_unittest.py
+++ b/crosperf/experiment_file_unittest.py
@@ -64,6 +64,23 @@ EXPERIMENT_FILE_3 = """
}
"""
+OUTPUT_FILE="""remote: chromeos-alex3
+board: x86-alex
+perf_args: record -a -e cycles
+
+benchmark: PageCycler {
+\titerations: 3
+}
+
+label: image1 {
+\tremote: chromeos-alex3
+\tchromeos_image: /usr/local/google/cros_image1.bin
+}
+
+label: image2 {
+\tremote: chromeos-lumpy1
+\tchromeos_image: /usr/local/google/cros_image2.bin
+}\n\n"""
class ExperimentFileTest(unittest.TestCase):
def testLoadExperimentFile1(self):
@@ -103,6 +120,11 @@ class ExperimentFileTest(unittest.TestCase):
input_file = StringIO.StringIO(EXPERIMENT_FILE_3)
self.assertRaises(Exception, ExperimentFile, input_file)
+ def testCanonicalize(self):
+ input_file = StringIO.StringIO(EXPERIMENT_FILE_1)
+ experiment_file = ExperimentFile(input_file)
+ res = experiment_file.Canonicalize()
+ self.assertEqual(res, OUTPUT_FILE)
if __name__ == "__main__":
unittest.main()
diff --git a/crosperf/flag_test_unittest.py b/crosperf/flag_test_unittest.py
index 71cce095..f3678cfd 100644..100755
--- a/crosperf/flag_test_unittest.py
+++ b/crosperf/flag_test_unittest.py
@@ -1,4 +1,4 @@
-#!/usr/bi/python
+#!/usr/bin/python
#
# Copyright 2014 Google Inc. All Rights Reserved.
diff --git a/crosperf/settings_factory_unittest.py b/crosperf/settings_factory_unittest.py
new file mode 100644
index 00000000..f3376db5
--- /dev/null
+++ b/crosperf/settings_factory_unittest.py
@@ -0,0 +1,95 @@
+#!/usr/bin/python
+#
+# Copyright 2014 Google Inc. All Rights Reserved.
+
+"""Unittest for crosperf."""
+import os
+
+import mock
+import unittest
+
+import settings_factory
+import settings
+
+from utils import command_executer
+from utils import logger
+
+class BenchmarkSettingsTest(unittest.TestCase):
+
+ def test_init(self):
+ res = settings_factory.BenchmarkSettings("b_settings")
+ self.assertIsNotNone(res)
+ self.assertEqual(len(res.fields), 4)
+ self.assertEqual(res.GetField('test_name'), '')
+ self.assertEqual(res.GetField('test_args'), '')
+ self.assertEqual(res.GetField('iterations'), 1)
+ self.assertEqual(res.GetField('suite'), '')
+
+class LabelSettingsTest(unittest.TestCase):
+
+ def test_init(self):
+ res = settings_factory.LabelSettings("l_settings")
+ self.assertIsNotNone(res)
+ self.assertEqual(len(res.fields), 7)
+ self.assertEqual(res.GetField('chromeos_image'), '')
+ self.assertEqual(res.GetField('chromeos_root'), '')
+ self.assertEqual(res.GetField('remote'), [])
+ self.assertEqual(res.GetField('image_args'), '')
+ self.assertEqual(res.GetField('cache_dir'), '')
+ self.assertEqual(res.GetField('chrome_src'), '')
+ self.assertEqual(res.GetField('build'), '')
+
+
+class GlobalSettingsTest(unittest.TestCase):
+
+ def test_init(self):
+ res = settings_factory.GlobalSettings("g_settings")
+ self.assertIsNotNone(res)
+ self.assertEqual(len(res.fields), 21)
+ self.assertEqual(res.GetField('name'), '')
+ self.assertEqual(res.GetField('board'), '')
+ self.assertEqual(res.GetField('remote'), [])
+ self.assertEqual(res.GetField('rerun_if_failed'), False)
+ self.assertEqual(res.GetField('rm_chroot_tmp'), False)
+ self.assertEqual(res.GetField('email'), [])
+ self.assertEqual(res.GetField('rerun'), False)
+ self.assertEqual(res.GetField('same_specs'), True)
+ self.assertEqual(res.GetField('same_machine'), False)
+ self.assertEqual(res.GetField('iterations'), 1)
+ self.assertEqual(res.GetField('chromeos_root'), '')
+ self.assertEqual(res.GetField('logging_level'), 'average')
+ self.assertEqual(res.GetField('acquire_timeout'), 0)
+ self.assertEqual(res.GetField('perf_args'), '')
+ self.assertEqual(res.GetField('cache_dir'), '')
+ self.assertEqual(res.GetField('cache_only'), False)
+ self.assertEqual(res.GetField('no_email'), False)
+ self.assertEqual(res.GetField('show_all_results'), False)
+ self.assertEqual(res.GetField('share_users'), '')
+ self.assertEqual(res.GetField('results_dir'), '')
+ self.assertEqual(res.GetField('chrome_src'), '')
+
+
+class SettingsFactoryTest(unittest.TestCase):
+
+ def test_get_settings(self):
+ self.assertRaises (Exception, settings_factory.SettingsFactory.GetSettings,
+ 'global', 'bad_type')
+
+
+ l_settings = settings_factory.SettingsFactory().GetSettings ('label', 'label')
+ self.assertIsInstance(l_settings, settings_factory.LabelSettings)
+ self.assertEqual(len(l_settings.fields), 7)
+
+ b_settings = settings_factory.SettingsFactory().GetSettings ('benchmark',
+ 'benchmark')
+ self.assertIsInstance(b_settings, settings_factory.BenchmarkSettings)
+ self.assertEqual(len(b_settings.fields), 4)
+
+ g_settings = settings_factory.SettingsFactory().GetSettings ('global',
+ 'global')
+ self.assertIsInstance(g_settings, settings_factory.GlobalSettings)
+ self.assertEqual(len(g_settings.fields), 21)
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/crosperf/settings_unittest.py b/crosperf/settings_unittest.py
new file mode 100644
index 00000000..dcb25906
--- /dev/null
+++ b/crosperf/settings_unittest.py
@@ -0,0 +1,198 @@
+#!/usr/bin/python
+#
+# Copyright 2014 Google Inc. All Rights Reserved.
+
+import mock
+import unittest
+
+import settings
+import settings_factory
+
+from field import IntegerField
+from field import ListField
+import download_images
+
+from utils import logger
+
+class TestSettings(unittest.TestCase):
+
+ def setUp(self):
+ self.settings = settings.Settings('global_name', 'global')
+
+ def test_init(self):
+ self.assertEqual(self.settings.name, 'global_name')
+ self.assertEqual(self.settings.settings_type, 'global')
+ self.assertIsNone(self.settings.parent)
+
+
+ def test_set_parent_settings(self):
+ self.assertIsNone(self.settings.parent)
+ settings_parent = { 'fake_parent_entry' : 0 }
+ self.settings.SetParentSettings(settings_parent)
+ self.assertIsNotNone(self.settings.parent)
+ self.assertEqual(type(self.settings.parent), dict)
+ self.assertEqual(self.settings.parent, settings_parent)
+
+
+ def test_add_field(self):
+ self.assertEqual (self.settings.fields, {})
+ self.settings.AddField(IntegerField("iterations", default=1, required=False,
+ description="Number of iterations to run the "
+ "test."))
+ self.assertEqual(len(self.settings.fields), 1)
+ # Adding the same field twice raises an exception.
+ self.assertRaises (Exception, self.settings.AddField,
+ (IntegerField("iterations", default=1, required=False,
+ description="Number of iterations to run the"
+ " test.")))
+ res = self.settings.fields['iterations']
+ self.assertIsInstance(res, IntegerField)
+ self.assertEqual(res.Get(), 1)
+
+
+ def test_set_field(self):
+ self.assertEqual (self.settings.fields, {})
+ self.settings.AddField(IntegerField("iterations", default=1, required=False,
+ description="Number of iterations to run the "
+ "test."))
+ res = self.settings.fields['iterations']
+ self.assertEqual(res.Get(), 1)
+
+ self.settings.SetField('iterations', 10)
+ res = self.settings.fields['iterations']
+ self.assertEqual(res.Get(), 10)
+
+ # Setting a field that's not there raises an exception.
+ self.assertRaises (Exception, self.settings.SetField, 'remote', 'lumpy1.cros')
+
+ self.settings.AddField(ListField("remote", default=[], description=
+ "A comma-separated list of ip's of chromeos"
+ "devices to run experiments on."))
+ self.assertEqual(type(self.settings.fields), dict)
+ self.assertEqual(len(self.settings.fields), 2)
+ res = self.settings.fields['remote']
+ self.assertEqual(res.Get(), [])
+ self.settings.SetField('remote', 'lumpy1.cros', append=True)
+ self.settings.SetField('remote', 'lumpy2.cros', append=True)
+ res = self.settings.fields['remote']
+ self.assertEqual(res.Get(), [ 'lumpy1.cros', 'lumpy2.cros' ])
+
+
+ def test_get_field(self):
+ # Getting a field that's not there raises an exception.
+ self.assertRaises (Exception, self.settings.GetField, 'iterations')
+
+ # Getting a required field that hasn't been assigned raises an exception.
+ self.settings.AddField(IntegerField("iterations", required=True,
+ description="Number of iterations to run "
+ "the test."))
+ self.assertIsNotNone(self.settings.fields['iterations'])
+ self.assertRaises (Exception, self.settings.GetField, 'iterations')
+
+ # Set the value, then get it.
+ self.settings.SetField('iterations', 5)
+ res = self.settings.GetField('iterations')
+ self.assertEqual(res, 5)
+
+
+ def test_inherit(self):
+ parent_settings = settings_factory.SettingsFactory().GetSettings('global',
+ 'global')
+ label_settings = settings_factory.SettingsFactory().GetSettings('label',
+ 'label')
+ self.assertEqual(parent_settings.GetField('chromeos_root'), '')
+ self.assertEqual(label_settings.GetField('chromeos_root'), '')
+ self.assertIsNone(label_settings.parent)
+
+ parent_settings.SetField('chromeos_root', '/tmp/chromeos')
+ label_settings.SetParentSettings (parent_settings)
+ self.assertEqual(parent_settings.GetField('chromeos_root'), '/tmp/chromeos')
+ self.assertEqual(label_settings.GetField('chromeos_root'), '')
+ label_settings.Inherit()
+ self.assertEqual(label_settings.GetField('chromeos_root'), '/tmp/chromeos')
+
+
+ def test_override(self):
+ self.settings.AddField(ListField("email", default=[],
+ description="Space-seperated"
+ "list of email addresses to send email to."))
+
+
+ global_settings = settings_factory.SettingsFactory().GetSettings('global',
+ 'global')
+
+ global_settings.SetField('email', 'john.doe@google.com', append=True)
+ global_settings.SetField('email', 'jane.smith@google.com', append=True)
+
+ res = self.settings.GetField('email')
+ self.assertEqual(res, [])
+
+ self.settings.Override(global_settings)
+ res = self.settings.GetField('email')
+ self.assertEqual(res, ['john.doe@google.com', 'jane.smith@google.com'])
+
+
+ def test_validate(self):
+
+ self.settings.AddField(IntegerField("iterations", required=True,
+ description="Number of iterations to run the "
+ "test."))
+ self.settings.AddField(ListField("remote", default=[], required=True,
+ description=
+ "A comma-separated list of ip's of chromeos"
+ "devices to run experiments on."))
+ self.settings.AddField(ListField("email", default=[],
+ description="Space-seperated"
+ "list of email addresses to send email to."))
+
+ # 'required' fields have not been assigned; should raise an exception.
+ self.assertRaises (Exception, self.settings.Validate)
+ self.settings.SetField('iterations', 2)
+ self.settings.SetField('remote', 'x86-alex.cros', append=True)
+ # Should run without exception now.
+ self.settings.Validate()
+
+ @mock.patch.object (logger,'GetLogger')
+ @mock.patch.object (download_images.ImageDownloader, 'Run')
+ @mock.patch.object (download_images, 'ImageDownloader')
+ def test_get_xbuddy_path(self, mock_downloader, mock_run, mock_logger):
+
+
+ mock_run.return_value = [ 0, 'fake_xbuddy_translation' ]
+ mock_downloader.Run = mock_run
+ board = 'lumpy'
+ chromeos_root = '/tmp/chromeos'
+ log_level = 'average'
+
+ trybot_str = 'trybot-lumpy-paladin/R34-5417.0.0-b1506'
+ official_str = 'lumpy-release/R34-5417.0.0'
+ xbuddy_str = 'latest-dev'
+
+ self.settings.GetXbuddyPath(trybot_str, board, chromeos_root, log_level)
+ self.assertEqual(mock_run.call_count, 1)
+ self.assertEqual(mock_run.call_args_list[0][0],
+ ('/tmp/chromeos',
+ 'remote/trybot-lumpy-paladin/R34-5417.0.0-b1506',))
+
+
+ mock_run.reset_mock()
+ self.settings.GetXbuddyPath(official_str, board, chromeos_root, log_level)
+ self.assertEqual(mock_run.call_count, 1)
+ self.assertEqual(mock_run.call_args_list[0][0],
+ ('/tmp/chromeos',
+ 'remote/lumpy-release/R34-5417.0.0',))
+
+
+ mock_run.reset_mock()
+ self.settings.GetXbuddyPath(xbuddy_str, board, chromeos_root, log_level)
+ self.assertEqual(mock_run.call_count, 1)
+ self.assertEqual(mock_run.call_args_list[0][0],
+ ('/tmp/chromeos',
+ 'remote/lumpy/latest-dev',))
+
+ mock_run.return_value = [ 1, 'fake_xbuddy_translation' ]
+ self.assertRaises (Exception, self.settings.GetXbuddyPath, xbuddy_str, board,
+ chromeos_root, log_level)
+
+if __name__ == "__main__":
+ unittest.main()