Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Side by Side Diff: telemetry/telemetry/internal/results/csv_pivot_table_output_formatter_unittest.py

Issue 3010193002: Remove CsvPivotTableOutputFormatter from telemetry. (Closed)
Patch Set: Created 3 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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 os
5 import StringIO
6 import unittest
7
8 import mock
9
10 from telemetry import story
11 from telemetry.internal.results import csv_pivot_table_output_formatter
12 from telemetry.internal.results import page_test_results
13 from telemetry import page as page_module
14 from telemetry.value import improvement_direction
15 from telemetry.value import scalar
16 from telemetry.value import trace
17 from tracing.trace_data import trace_data
18
19
20 def _MakeStorySet():
21 story_set = story.StorySet(base_dir=os.path.dirname(__file__))
22 story_set.AddStory(page_module.Page(
23 'http://www.foo.com/', story_set, story_set.base_dir,
24 name='http://www.foo.com/'))
25 story_set.AddStory(page_module.Page(
26 'http://www.bar.com/', story_set, story_set.base_dir,
27 name='http://www.bar.com/'))
28 return story_set
29
30
31 class CsvPivotTableOutputFormatterTest(unittest.TestCase):
32
33 # The line separator used by CSV formatter.
34 _LINE_SEPARATOR = '\r\n'
35
36 def setUp(self):
37 self._output = StringIO.StringIO()
38 self._story_set = _MakeStorySet()
39 self._results = page_test_results.PageTestResults()
40 self._formatter = None
41 self.MakeFormatter()
42
43 def MakeFormatter(self, trace_tag=''):
44 self._formatter = (
45 csv_pivot_table_output_formatter.CsvPivotTableOutputFormatter(
46 self._output, trace_tag))
47
48 def SimulateBenchmarkRun(self, list_of_page_and_values):
49 """Simulate one run of a benchmark, using the supplied values.
50
51 Args:
52 list_of_pages_and_values: a list of tuple (page, list of values)
53 """
54 for page, values in list_of_page_and_values:
55 self._results.WillRunPage(page)
56 for v in values:
57 v.page = page
58 self._results.AddValue(v)
59 self._results.DidRunPage(page)
60
61 def Format(self):
62 self._formatter.Format(self._results)
63 return self._output.getvalue()
64
65 def testSimple(self):
66 # Test a simple benchmark with only one value:
67 self.SimulateBenchmarkRun([
68 (self._story_set[0], [scalar.ScalarValue(
69 None, 'foo', 'seconds', 3,
70 improvement_direction=improvement_direction.DOWN)])])
71 expected = self._LINE_SEPARATOR.join([
72 'story_set,page,name,value,units,run_index',
73 'story_set,http://www.foo.com/,foo,3,seconds,0',
74 ''])
75
76 self.assertEqual(expected, self.Format())
77
78 @mock.patch('py_utils.cloud_storage.Insert')
79 def testMultiplePagesAndValues(self, cs_insert_mock):
80 cs_insert_mock.return_value = 'https://cloud_storage_url/foo'
81 trace_value = trace.TraceValue(
82 None, trace_data.CreateTraceDataFromRawData('{"traceEvents": []}'))
83 trace_value.UploadToCloud(bucket='foo')
84 self.SimulateBenchmarkRun([
85 (self._story_set[0], [
86 scalar.ScalarValue(
87 None, 'foo', 'seconds', 4,
88 improvement_direction=improvement_direction.DOWN)]),
89 (self._story_set[1], [
90 scalar.ScalarValue(
91 None, 'foo', 'seconds', 3.4,
92 improvement_direction=improvement_direction.DOWN),
93 trace_value,
94 scalar.ScalarValue(
95 None, 'bar', 'km', 10,
96 improvement_direction=improvement_direction.DOWN),
97 scalar.ScalarValue(
98 None, 'baz', 'count', 5,
99 improvement_direction=improvement_direction.DOWN)])])
100
101 # Parse CSV output into list of lists.
102 csv_string = self.Format()
103 lines = csv_string.split(self._LINE_SEPARATOR)
104 values = [s.split(',') for s in lines[1:-1]]
105
106 self.assertEquals(len(values), 5) # We expect 5 value in total.
107 self.assertEquals(len(set((v[1] for v in values))), 2) # 2 pages.
108 self.assertEquals(len(set((v[2] for v in values))), 4) # 4 value names.
109 self.assertEquals(values[2],
110 ['story_set', 'http://www.bar.com/', 'trace',
111 'https://cloud_storage_url/foo', '', '1'])
112
113 def testTraceTag(self):
114 self.MakeFormatter(trace_tag='date,option')
115 self.SimulateBenchmarkRun([
116 (self._story_set[0], [
117 scalar.ScalarValue(
118 None, 'foo', 'seconds', 3,
119 improvement_direction=improvement_direction.DOWN),
120 scalar.ScalarValue(
121 None, 'bar', 'tons', 5,
122 improvement_direction=improvement_direction.DOWN)])])
123 output = self.Format().split(self._LINE_SEPARATOR)
124
125 self.assertTrue(output[0].endswith(',trace_tag_0,trace_tag_1'))
126 for line in output[1:-1]:
127 self.assertTrue(line.endswith(',date,option'))
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698