OLD | NEW |
| (Empty) |
1 # Copyright 2014 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 json | |
5 import os | |
6 import shutil | |
7 import StringIO | |
8 import tempfile | |
9 import unittest | |
10 | |
11 from telemetry import story | |
12 from telemetry import benchmark | |
13 from telemetry.internal.results import json_output_formatter | |
14 from telemetry.internal.results import page_test_results | |
15 from telemetry import page as page_module | |
16 from telemetry.value import improvement_direction | |
17 from telemetry.value import scalar | |
18 from telemetry.value import trace | |
19 from tracing.trace_data import trace_data | |
20 | |
21 | |
22 def _MakeStorySet(): | |
23 story_set = story.StorySet(base_dir=os.path.dirname(__file__)) | |
24 story_set.AddStory( | |
25 page_module.Page('http://www.foo.com/', story_set, story_set.base_dir, | |
26 name='http://www.foo.com/')) | |
27 story_set.AddStory( | |
28 page_module.Page('http://www.bar.com/', story_set, story_set.base_dir, | |
29 name='http://www.bar.com/')) | |
30 return story_set | |
31 | |
32 def _HasPage(pages, page): | |
33 return pages.get(page.id, None) != None | |
34 | |
35 def _HasValueNamed(values, name): | |
36 return len([x for x in values if x['name'] == name]) == 1 | |
37 | |
38 class JsonOutputFormatterTest(unittest.TestCase): | |
39 def setUp(self): | |
40 self._output = StringIO.StringIO() | |
41 self._story_set = _MakeStorySet() | |
42 self._formatter = json_output_formatter.JsonOutputFormatter( | |
43 self._output, | |
44 benchmark.BenchmarkMetadata('benchmark_name')) | |
45 | |
46 def testOutputAndParse(self): | |
47 results = page_test_results.PageTestResults() | |
48 | |
49 self._output.truncate(0) | |
50 | |
51 results.WillRunPage(self._story_set[0]) | |
52 v0 = scalar.ScalarValue(results.current_page, 'foo', 'seconds', 3, | |
53 improvement_direction=improvement_direction.DOWN) | |
54 results.AddValue(v0) | |
55 results.DidRunPage(self._story_set[0]) | |
56 | |
57 self._formatter.Format(results) | |
58 json.loads(self._output.getvalue()) | |
59 | |
60 def testAsDictBaseKeys(self): | |
61 results = page_test_results.PageTestResults() | |
62 d = json_output_formatter.ResultsAsDict( | |
63 results, self._formatter.benchmark_metadata) | |
64 | |
65 self.assertEquals(d['format_version'], '0.2') | |
66 self.assertEquals(d['next_version'], '0.3') | |
67 self.assertEquals(d['benchmark_metadata']['name'], 'benchmark_name') | |
68 | |
69 def testAsDictWithOnePage(self): | |
70 results = page_test_results.PageTestResults() | |
71 results.WillRunPage(self._story_set[0]) | |
72 v0 = scalar.ScalarValue(results.current_page, 'foo', 'seconds', 3, | |
73 improvement_direction=improvement_direction.DOWN) | |
74 results.AddValue(v0) | |
75 results.DidRunPage(self._story_set[0]) | |
76 | |
77 d = json_output_formatter.ResultsAsDict( | |
78 results, self._formatter.benchmark_metadata) | |
79 | |
80 self.assertTrue(_HasPage(d['pages'], self._story_set[0])) | |
81 self.assertTrue(_HasValueNamed(d['per_page_values'], 'foo')) | |
82 | |
83 def testAsDictWithTraceValue(self): | |
84 tempdir = tempfile.mkdtemp() | |
85 try: | |
86 results = page_test_results.PageTestResults() | |
87 results.WillRunPage(self._story_set[0]) | |
88 v0 = trace.TraceValue( | |
89 results.current_page, | |
90 trace_data.CreateTraceDataFromRawData([{'event': 'test'}])) | |
91 results.AddValue(v0) | |
92 results.DidRunPage(self._story_set[0]) | |
93 results._SerializeTracesToDirPath(tempdir) | |
94 d = json_output_formatter.ResultsAsDict( | |
95 results, self._formatter.benchmark_metadata) | |
96 | |
97 self.assertTrue(_HasPage(d['pages'], self._story_set[0])) | |
98 self.assertTrue(_HasValueNamed(d['per_page_values'], 'trace')) | |
99 self.assertEquals(len(d['files']), 1) | |
100 output_trace_path = d['files'].values()[0] | |
101 self.assertTrue(output_trace_path.startswith(tempdir)) | |
102 self.assertTrue(os.path.exists(output_trace_path)) | |
103 finally: | |
104 shutil.rmtree(tempdir) | |
105 | |
106 def testAsDictWithTwoPages(self): | |
107 results = page_test_results.PageTestResults() | |
108 results.WillRunPage(self._story_set[0]) | |
109 v0 = scalar.ScalarValue(results.current_page, 'foo', 'seconds', 3, | |
110 improvement_direction=improvement_direction.DOWN) | |
111 results.AddValue(v0) | |
112 results.DidRunPage(self._story_set[0]) | |
113 | |
114 results.WillRunPage(self._story_set[1]) | |
115 v1 = scalar.ScalarValue(results.current_page, 'bar', 'seconds', 4, | |
116 improvement_direction=improvement_direction.DOWN) | |
117 results.AddValue(v1) | |
118 results.DidRunPage(self._story_set[1]) | |
119 | |
120 d = json_output_formatter.ResultsAsDict( | |
121 results, self._formatter.benchmark_metadata) | |
122 | |
123 self.assertTrue(_HasPage(d['pages'], self._story_set[0])) | |
124 self.assertTrue(_HasPage(d['pages'], self._story_set[1])) | |
125 self.assertTrue(_HasValueNamed(d['per_page_values'], 'foo')) | |
126 self.assertTrue(_HasValueNamed(d['per_page_values'], 'bar')) | |
127 | |
128 def testAsDictWithSummaryValueOnly(self): | |
129 results = page_test_results.PageTestResults() | |
130 v = scalar.ScalarValue(None, 'baz', 'seconds', 5, | |
131 improvement_direction=improvement_direction.DOWN) | |
132 results.AddSummaryValue(v) | |
133 | |
134 d = json_output_formatter.ResultsAsDict( | |
135 results, self._formatter.benchmark_metadata) | |
136 | |
137 self.assertFalse(d['pages']) | |
138 self.assertTrue(_HasValueNamed(d['summary_values'], 'baz')) | |
OLD | NEW |