summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornednguyen@google.com <nednguyen@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-12 07:57:52 +0000
committernednguyen@google.com <nednguyen@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-12 07:57:52 +0000
commitcda1b1673f3e065756e04ad480b3aea1dc390981 (patch)
tree9f61610c33df3855f8539728604cf66b265eb765
parentcd1715e4544418fe98dde860e1eb85e039c0abb9 (diff)
downloadchromium_src-cda1b1673f3e065756e04ad480b3aea1dc390981.zip
chromium_src-cda1b1673f3e065756e04ad480b3aea1dc390981.tar.gz
chromium_src-cda1b1673f3e065756e04ad480b3aea1dc390981.tar.bz2
Add unittest for gtest_test_results.
BUG=383100 Review URL: https://codereview.chromium.org/332513002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@276573 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--tools/telemetry/telemetry/results/base_test_results_unittest.py63
-rw-r--r--tools/telemetry/telemetry/results/buildbot_page_measurement_results_unittest.py38
-rw-r--r--tools/telemetry/telemetry/results/gtest_test_results_unittest.py130
-rw-r--r--tools/telemetry/telemetry/results/page_test_results_unittest.py11
-rw-r--r--tools/telemetry/telemetry/unittest/simple_mock.py3
5 files changed, 201 insertions, 44 deletions
diff --git a/tools/telemetry/telemetry/results/base_test_results_unittest.py b/tools/telemetry/telemetry/results/base_test_results_unittest.py
new file mode 100644
index 0000000..2312acc
--- /dev/null
+++ b/tools/telemetry/telemetry/results/base_test_results_unittest.py
@@ -0,0 +1,63 @@
+# 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 unittest
+import sys
+
+from telemetry.core import exceptions
+
+
+class TestOutputStream(object):
+
+ def __init__(self):
+ self.output_data = []
+
+ def write(self, data):
+ assert isinstance(data, str)
+ self.output_data.append(data)
+
+
+class BaseTestResultsUnittest(unittest.TestCase):
+
+ def CreateException(self):
+ try:
+ raise exceptions.IntentionalException
+ except Exception:
+ return sys.exc_info()
+
+ def assertEquals(self, ex, res):
+ # This helps diagnose result mismatches.
+ if ex != res and isinstance(ex, list):
+ def CleanList(l):
+ res = []
+ for x in l:
+ x = x.split('\n')
+ res.extend(x)
+ return res
+ ex = CleanList(ex)
+ res = CleanList(res)
+ max_len = max(len(ex), len(res))
+ max_width = max([len(x) for x in ex + res])
+ max_width = max(10, max_width)
+ print 'Lists differ!'
+ print '%*s | %*s' % (max_width, 'expected', max_width, 'result')
+ for i in range(max_len):
+ if i < len(ex):
+ e = ex[i]
+ else:
+ e = ''
+ if i < len(res):
+ r = res[i]
+ else:
+ r = ''
+ if e != r:
+ sep = '*'
+ else:
+ sep = '|'
+ print '%*s %s %*s' % (max_width, e, sep, max_width, r)
+ print ''
+ if ex != res and isinstance(ex, str) and isinstance(res, str):
+ print 'Strings differ!'
+ print 'exepected:\n%s' % repr(ex)
+ print 'result:\n%s\n' % repr(res)
+ super(BaseTestResultsUnittest, self).assertEquals(ex, res)
diff --git a/tools/telemetry/telemetry/results/buildbot_page_measurement_results_unittest.py b/tools/telemetry/telemetry/results/buildbot_page_measurement_results_unittest.py
index 8b41a93..dae4707 100644
--- a/tools/telemetry/telemetry/results/buildbot_page_measurement_results_unittest.py
+++ b/tools/telemetry/telemetry/results/buildbot_page_measurement_results_unittest.py
@@ -2,12 +2,12 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import os
-import unittest
from telemetry import perf_tests_helper
from telemetry.page import page_set
from telemetry.value import list_of_scalar_values
from telemetry.value import scalar
+from telemetry.results import base_test_results_unittest
from telemetry.results import buildbot_page_measurement_results
def _MakePageSet():
@@ -28,40 +28,8 @@ class SummarySavingPageMeasurementResults(
res = perf_tests_helper.PrintPerfResult(*args, print_to_stdout=False)
self.results.append(res)
-class BuildbotPageMeasurementResultsTest(unittest.TestCase):
- def assertEquals(self, ex, res):
- # This helps diagnose result mismatches.
- if ex != res and isinstance(ex, list):
- def CleanList(l):
- res = []
- for x in l:
- x = x.split('\n')
- res.extend(x)
- return res
- ex = CleanList(ex)
- res = CleanList(res)
- max_len = max(len(ex), len(res))
- max_width = max([len(x) for x in ex + res])
- max_width = max(10, max_width)
- print "Lists differ!"
- print '%*s | %*s' % (max_width, 'expected', max_width, 'result')
- for i in range(max_len):
- if i < len(ex):
- e = ex[i]
- else:
- e = ''
- if i < len(res):
- r = res[i]
- else:
- r = ''
- if e != r:
- sep = '*'
- else:
- sep = '|'
- print '%*s %s %*s' % (max_width, e, sep, max_width, r)
- print ""
- super(BuildbotPageMeasurementResultsTest, self).assertEquals(ex, res)
-
+class BuildbotPageMeasurementResultsTest(
+ base_test_results_unittest.BaseTestResultsUnittest):
def test_basic_summary(self):
test_page_set = _MakePageSet()
diff --git a/tools/telemetry/telemetry/results/gtest_test_results_unittest.py b/tools/telemetry/telemetry/results/gtest_test_results_unittest.py
new file mode 100644
index 0000000..7175f10
--- /dev/null
+++ b/tools/telemetry/telemetry/results/gtest_test_results_unittest.py
@@ -0,0 +1,130 @@
+# 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 traceback
+
+from telemetry.page import page_set
+from telemetry.results import base_test_results_unittest
+from telemetry.results import gtest_test_results
+from telemetry.unittest import simple_mock
+
+
+def _MakePageSet():
+ ps = page_set.PageSet(file_path=os.path.dirname(__file__))
+ ps.AddPageWithDefaultRunNavigate('http://www.foo.com/')
+ ps.AddPageWithDefaultRunNavigate('http://www.bar.com/')
+ ps.AddPageWithDefaultRunNavigate('http://www.baz.com/')
+ ps.AddPageWithDefaultRunNavigate('http://www.roz.com/')
+ return ps
+
+
+class SummaryGtestTestResults(
+ gtest_test_results.GTestTestResults):
+
+ def __init__(self):
+ super(SummaryGtestTestResults, self).__init__(
+ base_test_results_unittest.TestOutputStream())
+ self.output_data = self._output_stream.output_data
+
+
+class GTestTestResultsTest(
+ base_test_results_unittest.BaseTestResultsUnittest):
+
+ def setUp(self):
+ super(GTestTestResultsTest, self).setUp()
+ self._mock_timer = simple_mock.MockTimer()
+ self._real_gtest_time_time = gtest_test_results.time.time
+ gtest_test_results.time.time = self._mock_timer.GetTime
+
+ def testSingleSuccessPage(self):
+ test_page_set = _MakePageSet()
+
+ results = SummaryGtestTestResults()
+ results.StartTest(test_page_set.pages[0])
+ self._mock_timer.SetTime(0.007)
+ results.AddSuccess(test_page_set.pages[0])
+
+ results.PrintSummary()
+ expected = ('[ RUN ] http://www.foo.com/\n'
+ '[ OK ] http://www.foo.com/ (7 ms)\n'
+ '[ PASSED ] 1 test.\n\n')
+ self.assertEquals(expected, ''.join(results.output_data))
+
+ def testSingleFailedPage(self):
+ test_page_set = _MakePageSet()
+
+ results = SummaryGtestTestResults()
+ results.StartTest(test_page_set.pages[0])
+ exception = self.CreateException()
+ results.AddFailure(test_page_set.pages[0], exception)
+ results.PrintSummary()
+ exception_trace = ''.join(traceback.format_exception(*exception))
+ expected = ('[ RUN ] http://www.foo.com/\n'
+ '%s\n'
+ '[ FAILED ] http://www.foo.com/ (0 ms)\n'
+ '[ PASSED ] 0 tests.\n'
+ '[ FAILED ] 1 test, listed below:\n'
+ '[ FAILED ] http://www.foo.com/\n\n'
+ '1 FAILED TEST\n\n' % exception_trace)
+ self.assertEquals(expected, ''.join(results.output_data))
+
+ def testSingleErrorPage(self):
+ test_page_set = _MakePageSet()
+ results = SummaryGtestTestResults()
+ results.StartTest(test_page_set.pages[0])
+ exception = self.CreateException()
+ results.AddError(test_page_set.pages[0], exception)
+ results.PrintSummary()
+ exception_trace = ''.join(traceback.format_exception(*exception))
+ expected = ('[ RUN ] http://www.foo.com/\n'
+ '%s\n'
+ '[ FAILED ] http://www.foo.com/ (0 ms)\n'
+ '[ PASSED ] 0 tests.\n'
+ '[ FAILED ] 1 test, listed below:\n'
+ '[ FAILED ] http://www.foo.com/\n\n'
+ '1 FAILED TEST\n\n' % exception_trace)
+ self.assertEquals(expected, ''.join(results.output_data))
+
+ def testPassAndFailedPages(self):
+ test_page_set = _MakePageSet()
+ results = SummaryGtestTestResults()
+ exception = self.CreateException()
+
+ results.StartTest(test_page_set.pages[0])
+ self._mock_timer.SetTime(0.007)
+ results.AddSuccess(test_page_set.pages[0])
+
+ results.StartTest(test_page_set.pages[1])
+ self._mock_timer.SetTime(0.009)
+ results.AddError(test_page_set.pages[1], exception)
+
+ results.StartTest(test_page_set.pages[2])
+ self._mock_timer.SetTime(0.015)
+ results.AddFailure(test_page_set.pages[2], exception)
+
+ results.StartTest(test_page_set.pages[3])
+ self._mock_timer.SetTime(0.020)
+ results.AddSuccess(test_page_set.pages[3])
+
+ results.PrintSummary()
+ exception_trace = ''.join(traceback.format_exception(*exception))
+ expected = ('[ RUN ] http://www.foo.com/\n'
+ '[ OK ] http://www.foo.com/ (7 ms)\n'
+ '[ RUN ] http://www.bar.com/\n'
+ '%s\n'
+ '[ FAILED ] http://www.bar.com/ (2 ms)\n'
+ '[ RUN ] http://www.baz.com/\n'
+ '%s\n'
+ '[ FAILED ] http://www.baz.com/ (6 ms)\n'
+ '[ RUN ] http://www.roz.com/\n'
+ '[ OK ] http://www.roz.com/ (5 ms)\n'
+ '[ PASSED ] 2 tests.\n'
+ '[ FAILED ] 2 tests, listed below:\n'
+ '[ FAILED ] http://www.bar.com/\n'
+ '[ FAILED ] http://www.baz.com/\n\n'
+ '2 FAILED TESTS\n\n' % (exception_trace, exception_trace))
+ self.assertEquals(expected, ''.join(results.output_data))
+
+ def tearDown(self):
+ gtest_test_results.time.time = self._real_gtest_time_time
diff --git a/tools/telemetry/telemetry/results/page_test_results_unittest.py b/tools/telemetry/telemetry/results/page_test_results_unittest.py
index 7ef5f9e..2aef9ed 100644
--- a/tools/telemetry/telemetry/results/page_test_results_unittest.py
+++ b/tools/telemetry/telemetry/results/page_test_results_unittest.py
@@ -2,8 +2,7 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import os
-import sys
-import unittest
+from telemetry.results import base_test_results_unittest
from telemetry.page import page_set
from telemetry.results import page_test_results
@@ -16,7 +15,7 @@ class NonPrintingPageTestResults(
def _PrintPerfResult(self, *args):
pass
-class PageTestResultsTest(unittest.TestCase):
+class PageTestResultsTest(base_test_results_unittest.BaseTestResultsUnittest):
def setUp(self):
self.page_set = page_set.PageSet(file_path=os.path.dirname(__file__))
self.page_set.AddPageWithDefaultRunNavigate("http://www.bar.com/")
@@ -27,12 +26,6 @@ class PageTestResultsTest(unittest.TestCase):
def pages(self):
return self.page_set.pages
- def CreateException(self):
- try:
- raise Exception('Intentional exception')
- except Exception:
- return sys.exc_info()
-
def test_failures(self):
results = NonPrintingPageTestResults()
results.AddFailure(self.pages[0], self.CreateException())
diff --git a/tools/telemetry/telemetry/unittest/simple_mock.py b/tools/telemetry/telemetry/unittest/simple_mock.py
index 14ecf38..0df3092 100644
--- a/tools/telemetry/telemetry/unittest/simple_mock.py
+++ b/tools/telemetry/telemetry/unittest/simple_mock.py
@@ -107,3 +107,6 @@ class MockTimer(object):
def GetTime(self):
return self._elapsed_time
+
+ def SetTime(self, time):
+ self._elapsed_time = time