Index: telemetry/telemetry/internal/results/csv_output_formatter_unittest.py |
diff --git a/telemetry/telemetry/internal/results/csv_output_formatter_unittest.py b/telemetry/telemetry/internal/results/csv_output_formatter_unittest.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d9588a0e6415aea95e830e4da23fd09206c8c456 |
--- /dev/null |
+++ b/telemetry/telemetry/internal/results/csv_output_formatter_unittest.py |
@@ -0,0 +1,115 @@ |
+# Copyright 2014 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+import os |
+import StringIO |
+import unittest |
+ |
+import mock |
+ |
+from telemetry import story |
+from telemetry import benchmark |
+from telemetry.internal.results import csv_output_formatter |
+from telemetry.internal.results import page_test_results |
+from telemetry import page as page_module |
+from telemetry.value import improvement_direction |
+from telemetry.value import scalar |
+from telemetry.value import trace |
+from tracing.trace_data import trace_data |
+ |
+ |
+def _MakeStorySet(): |
+ story_set = story.StorySet(base_dir=os.path.dirname(__file__)) |
+ story_set.AddStory(page_module.Page( |
+ 'http://www.foo.com/', story_set, story_set.base_dir, |
+ name='http://www.foo.com/')) |
+ story_set.AddStory(page_module.Page( |
+ 'http://www.bar.com/', story_set, story_set.base_dir, |
+ name='http://www.bar.com/')) |
+ return story_set |
+ |
+ |
+class CsvOutputFormatterTest(unittest.TestCase): |
+ |
+ def setUp(self): |
+ self._output = StringIO.StringIO() |
+ self._story_set = _MakeStorySet() |
+ self._results = page_test_results.PageTestResults() |
+ self._formatter = None |
+ self.MakeFormatter() |
+ |
+ def MakeFormatter(self): |
+ self._formatter = csv_output_formatter.CsvOutputFormatter(self._output) |
+ |
+ def SimulateBenchmarkRun(self, list_of_page_and_values): |
+ """Simulate one run of a benchmark, using the supplied values. |
+ |
+ Args: |
+ list_of_pages_and_values: a list of tuple (page, list of values) |
+ """ |
+ for page, values in list_of_page_and_values: |
+ self._results.WillRunPage(page) |
+ for v in values: |
+ v.page = page |
+ self._results.AddValue(v) |
+ self._results.DidRunPage(page) |
+ |
+ def Format(self): |
+ self._results.telemetry_info.benchmark_start_epoch = 15e8 |
+ self._results.PopulateHistogramSet(benchmark.BenchmarkMetadata('benchmark')) |
+ self._formatter.Format(self._results) |
+ return self._output.getvalue() |
+ |
+ def testSimple(self): |
+ # Test a simple benchmark with only one value: |
+ self.SimulateBenchmarkRun([ |
+ (self._story_set[0], [scalar.ScalarValue( |
+ None, 'foo', 'seconds', 3, |
+ improvement_direction=improvement_direction.DOWN)])]) |
+ expected = '\r\n'.join([ |
+ 'name,unit,avg,count,max,min,std,sum,architectures,benchmarks,' + |
+ 'benchmarkStart,bots,builds,displayLabel,masters,memoryAmounts,' + |
+ 'osNames,osVersions,productVersions,stories,storysetRepeats,traceStart', |
+ 'foo,ms,3000,1,3000,3000,0,3000,,benchmark,2017-07-14 02:40:00,,,' + |
+ 'benchmark 2017-07-14 02:40:00,,,,,,http://www.foo.com/,,', |
+ '']) |
+ |
+ self.assertEqual(expected, self.Format()) |
+ |
+ @mock.patch('py_utils.cloud_storage.Insert') |
+ def testMultiplePagesAndValues(self, cs_insert_mock): |
+ cs_insert_mock.return_value = 'https://cloud_storage_url/foo' |
+ trace_value = trace.TraceValue( |
+ None, trace_data.CreateTraceDataFromRawData('{"traceEvents": []}')) |
+ trace_value.UploadToCloud(bucket='foo') |
+ self.SimulateBenchmarkRun([ |
+ (self._story_set[0], [ |
+ scalar.ScalarValue( |
+ None, 'foo', 'seconds', 4, |
+ improvement_direction=improvement_direction.DOWN)]), |
+ (self._story_set[1], [ |
+ scalar.ScalarValue( |
+ None, 'foo', 'seconds', 3.4, |
+ improvement_direction=improvement_direction.DOWN), |
+ trace_value, |
+ scalar.ScalarValue( |
+ None, 'bar', 'km', 10, |
+ improvement_direction=improvement_direction.DOWN), |
+ scalar.ScalarValue( |
+ None, 'baz', 'count', 5, |
+ improvement_direction=improvement_direction.DOWN)])]) |
+ |
+ # Parse CSV output into list of lists. |
+ csv_string = self.Format() |
+ lines = csv_string.split('\r\n') |
+ values = [s.split(',') for s in lines[1:-1]] |
+ values.sort() |
+ |
+ self.assertEquals(len(values), 4) |
+ self.assertEquals(len(set((v[1] for v in values))), 2) # 2 pages. |
+ self.assertEquals(len(set((v[2] for v in values))), 4) # 4 value names. |
+ self.assertEquals(values[2], [ |
+ 'foo', 'ms', '3400', '1', '3400', '3400', '0', '3400', '', 'benchmark', |
+ '2017-07-14 02:40:00', '', '', 'benchmark 2017-07-14 02:40:00', '', '', |
+ '', '', '', 'http://www.bar.com/', '', '']) |