Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / page / html_page_measurement_results_unittest.py
1 # Copyright 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4 import os
5 import StringIO
6 import unittest
7
8 from telemetry.page import html_page_measurement_results
9 from telemetry.page import page_set
10
11
12 def _MakePageSet():
13   ps = page_set.PageSet(file_path=os.path.dirname(__file__))
14   ps.AddPageWithDefaultRunNavigate('http://www.foo.com/')
15   ps.AddPageWithDefaultRunNavigate('http://www.bar.com/')
16   ps.AddPageWithDefaultRunNavigate('http://www.baz.com/')
17   return ps
18
19
20 class DeterministicHtmlPageMeasurementResults(
21     html_page_measurement_results.HtmlPageMeasurementResults):
22   def _GetBuildTime(self):
23     return 'build_time'
24
25   def _GetRevision(self):
26     return 'revision'
27
28
29 # Wrap string IO with a .name property so that it behaves more like a file.
30 class StringIOFile(StringIO.StringIO):
31   name = 'fake_output_file'
32
33
34 class HtmlPageMeasurementResultsTest(unittest.TestCase):
35
36   def test_basic_summary(self):
37     test_page_set = _MakePageSet()
38     output_file = StringIOFile()
39
40     # Run the first time and verify the results are written to the HTML file.
41     results = DeterministicHtmlPageMeasurementResults(
42         output_file, 'test_name', False, False, 'browser_type')
43     results.WillMeasurePage(test_page_set.pages[0])
44     results.Add('a', 'seconds', 3)
45     results.DidMeasurePage()
46     results.AddSuccess(test_page_set.pages[0])
47
48     results.WillMeasurePage(test_page_set.pages[1])
49     results.Add('a', 'seconds', 7)
50     results.DidMeasurePage()
51     results.AddSuccess(test_page_set.pages[1])
52
53     results.PrintSummary()
54     results.GetResults()
55     expected = {
56       "platform": "browser_type",
57       "buildTime": "build_time",
58       "label": None,
59       "tests": {
60         "test_name": {
61           "metrics": {
62             "a": {
63               "current": [3, 7],
64               "units": "seconds",
65               "important": True
66             },
67             "telemetry_page_measurement_results.num_failed": {
68               "current": [0],
69               "units": "count",
70               "important": False
71             },
72             "a_by_url.http://www.bar.com/": {
73               "current": [7],
74               "units": "seconds",
75               "important": False
76             },
77             "telemetry_page_measurement_results.num_errored": {
78               "current": [0],
79               "units": "count",
80               "important": False
81             },
82             "a_by_url.http://www.foo.com/": {
83               "current": [3],
84               "units": "seconds",
85               "important": False
86             }
87           }
88         }
89       },
90       "revision": "revision"
91     }
92     self.assertEquals(expected, results.GetResults())
93
94     # Run the second time and verify the results are appended to the HTML file.
95     output_file.seek(0)
96     results = DeterministicHtmlPageMeasurementResults(
97         output_file, 'test_name', False, False, 'browser_type')
98     results.WillMeasurePage(test_page_set.pages[0])
99     results.Add('a', 'seconds', 4)
100     results.DidMeasurePage()
101     results.AddSuccess(test_page_set.pages[0])
102
103     results.WillMeasurePage(test_page_set.pages[1])
104     results.Add('a', 'seconds', 8)
105     results.DidMeasurePage()
106     results.AddSuccess(test_page_set.pages[1])
107
108     results.PrintSummary()
109     expected = [
110       {
111         "platform": "browser_type",
112         "buildTime": "build_time",
113         "label": None,
114         "tests": {
115           "test_name": {
116             "metrics": {
117               "a": {
118                 "current": [3, 7],
119                 "units": "seconds",
120                 "important": True
121               },
122               "telemetry_page_measurement_results.num_failed": {
123                 "current": [0],
124                 "units": "count",
125                 "important": False
126               },
127               "a_by_url.http://www.bar.com/": {
128                 "current": [7],
129                 "units": "seconds",
130                 "important": False
131               },
132               "telemetry_page_measurement_results.num_errored": {
133                 "current": [0],
134                 "units": "count",
135                 "important": False
136               },
137               "a_by_url.http://www.foo.com/": {
138                 "current": [3],
139                 "units": "seconds",
140                 "important": False
141               }
142             }
143           }
144         },
145         "revision": "revision"
146       },
147       {
148         "platform": "browser_type",
149         "buildTime": "build_time",
150         "label": None,
151         "tests": {
152           "test_name": {
153             "metrics": {
154               "a": {
155                 "current": [4, 8],
156                 "units": "seconds",
157                 "important": True
158               },
159               "telemetry_page_measurement_results.num_failed": {
160                 "current": [0],
161                 "units": "count",
162                 "important": False,
163               },
164               "a_by_url.http://www.bar.com/": {
165                 "current": [8],
166                 "units": "seconds",
167                 "important": False
168               },
169               "telemetry_page_measurement_results.num_errored": {
170                 "current": [0],
171                 "units": "count",
172                 "important": False
173               },
174               "a_by_url.http://www.foo.com/": {
175                 "current": [4],
176                 "units": "seconds",
177                 "important": False
178               }
179             }
180           }
181         },
182         "revision": "revision"
183       }]
184     self.assertEquals(expected, results.GetCombinedResults())
185     last_output_len = len(output_file.getvalue())
186
187     # Now reset the results and verify the old ones are gone.
188     output_file.seek(0)
189     results = DeterministicHtmlPageMeasurementResults(
190        output_file, 'test_name', True, False, 'browser_type')
191     results.WillMeasurePage(test_page_set.pages[0])
192     results.Add('a', 'seconds', 5)
193     results.DidMeasurePage()
194     results.AddSuccess(test_page_set.pages[0])
195
196     results.WillMeasurePage(test_page_set.pages[1])
197     results.Add('a', 'seconds', 9)
198     results.DidMeasurePage()
199     results.AddSuccess(test_page_set.pages[1])
200
201     results.PrintSummary()
202     expected = [{
203       "platform": "browser_type",
204       "buildTime": "build_time",
205       "label": None,
206       "tests": {
207         "test_name": {
208           "metrics": {
209             "a": {
210               "current": [5, 9],
211               "units": "seconds",
212               "important": True
213             },
214             "telemetry_page_measurement_results.num_failed": {
215               "current": [0],
216               "units": "count",
217               "important": False
218             },
219             "a_by_url.http://www.bar.com/": {
220               "current": [9],
221               "units": "seconds",
222               "important": False
223             },
224             "telemetry_page_measurement_results.num_errored": {
225               "current": [0],
226               "units": "count",
227               "important": False
228             },
229             "a_by_url.http://www.foo.com/": {
230               "current": [5],
231               "units": "seconds",
232               "important": False
233             }
234           }
235         }
236       },
237       "revision": "revision"
238     }]
239     self.assertEquals(expected, results.GetCombinedResults())
240     self.assertTrue(len(output_file.getvalue()) < last_output_len)