| 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 |