experiment_file_unittest.py revision 98a53692fb946a8eac46e3e82257f540d1350c18
1#!/usr/bin/python
2
3# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
4# Use of this source code is governed by a BSD-style license that can be
5# found in the LICENSE file.
6
7import StringIO
8import unittest
9from experiment_file import ExperimentFile
10
11EXPERIMENT_FILE_1 = """
12  board: x86-alex
13  remote: chromeos-alex3
14  perf_args: record -a -e cycles
15  benchmark: PageCycler {
16    iterations: 3
17  }
18
19  image1 {
20    chromeos_image: /usr/local/google/cros_image1.bin
21  }
22
23  image2 {
24    remote: chromeos-lumpy1
25    chromeos_image: /usr/local/google/cros_image2.bin
26  }
27  """
28
29EXPERIMENT_FILE_2 = """
30  board: x86-alex
31  remote: chromeos-alex3
32  iterations: 3
33
34  benchmark: PageCycler {
35  }
36
37  benchmark: AndroidBench {
38    iterations: 2
39  }
40
41  image1 {
42    chromeos_image:/usr/local/google/cros_image1.bin
43  }
44
45  image2 {
46    chromeos_image: /usr/local/google/cros_image2.bin
47  }
48  """
49
50EXPERIMENT_FILE_3 = """
51  board: x86-alex
52  remote: chromeos-alex3
53  iterations: 3
54
55  benchmark: PageCycler {
56  }
57
58  image1 {
59    chromeos_image:/usr/local/google/cros_image1.bin
60  }
61
62  image1 {
63    chromeos_image: /usr/local/google/cros_image2.bin
64  }
65  """
66
67
68class ExperimentFileTest(unittest.TestCase):
69  def testLoadExperimentFile1(self):
70    input_file = StringIO.StringIO(EXPERIMENT_FILE_1)
71    experiment_file = ExperimentFile(input_file)
72    global_settings = experiment_file.GetGlobalSettings()
73    self.assertEqual(global_settings.GetField("remote"), ["chromeos-alex3"])
74    self.assertEqual(global_settings.GetField("perf_args"),
75                     "record -a -e cycles")
76    benchmark_settings = experiment_file.GetSettings("benchmark")
77    self.assertEqual(len(benchmark_settings), 1)
78    self.assertEqual(benchmark_settings[0].name, "PageCycler")
79    self.assertEqual(benchmark_settings[0].GetField("iterations"), 3)
80
81    label_settings = experiment_file.GetSettings("label")
82    self.assertEqual(len(label_settings), 2)
83    self.assertEqual(label_settings[0].name, "image1")
84    self.assertEqual(label_settings[0].GetField("chromeos_image"),
85                     "/usr/local/google/cros_image1.bin")
86    self.assertEqual(label_settings[1].GetField("remote"), ["chromeos-lumpy1"])
87    self.assertEqual(label_settings[0].GetField("remote"), ["chromeos-alex3"])
88
89  def testOverrideSetting(self):
90    input_file = StringIO.StringIO(EXPERIMENT_FILE_2)
91    experiment_file = ExperimentFile(input_file)
92    global_settings = experiment_file.GetGlobalSettings()
93    self.assertEqual(global_settings.GetField("remote"), ["chromeos-alex3"])
94
95    benchmark_settings = experiment_file.GetSettings("benchmark")
96    self.assertEqual(len(benchmark_settings), 2)
97    self.assertEqual(benchmark_settings[0].name, "PageCycler")
98    self.assertEqual(benchmark_settings[0].GetField("iterations"), 3)
99    self.assertEqual(benchmark_settings[1].name, "AndroidBench")
100    self.assertEqual(benchmark_settings[1].GetField("iterations"), 2)
101
102  def testDuplicateLabel(self):
103    input_file = StringIO.StringIO(EXPERIMENT_FILE_3)
104    self.assertRaises(Exception, ExperimentFile, input_file)
105
106
107if __name__ == "__main__":
108  unittest.main()
109