diff options
author | nednguyen@google.com <nednguyen@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-12 07:57:52 +0000 |
---|---|---|
committer | nednguyen@google.com <nednguyen@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-12 07:57:52 +0000 |
commit | cda1b1673f3e065756e04ad480b3aea1dc390981 (patch) | |
tree | 9f61610c33df3855f8539728604cf66b265eb765 | |
parent | cd1715e4544418fe98dde860e1eb85e039c0abb9 (diff) | |
download | chromium_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
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 |