blob: c3a5fd06c4db977b56745c164265edbd4bb10cf7 [file]
# Copyright 2016 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.
from testing_utils import testing
from analysis.detect_regression_range import GetSpikes
from analysis.detect_regression_range import DetectRegressionRange
class DetectRegressionRangeTest(testing.AppengineTestCase):
def _VerifyCasesForDetectRegressonRange(self, cases):
for case, expected_result in cases:
result = DetectRegressionRange(case)
self.assertEqual(result, expected_result,
'Detected spikes of %s should be %s, instead of %s'
% (repr(case), expected_result, result))
# TODO(wrengr): make this test more comprehensive.
def testGetSpikes(self):
get_value = lambda x: x[1]
e0 = ('1', 0.5)
e1 = ('1', 0)
e2 = ('2', 0.5)
self.assertEqual(GetSpikes([], get_value),
[])
self.assertEqual(GetSpikes([e0], get_value),
[])
self.assertEqual(GetSpikes([e1, e2], get_value),
[(e1, e2)])
def testReturnNoneForEmptyCrashData(self):
self.assertEqual(DetectRegressionRange([]), None)
def testReturnNoneWhenSpikeDetectionFailed(self):
historic_metadata = [{'chrome_version': '1', 'cpm': 0},
{'chrome_version': '2', 'cpm': 0}]
self.assertEqual(DetectRegressionRange(historic_metadata), None)
def testDetectRegressionRangeForNewCrash(self):
"""Detect new crash that didn't happen before."""
cases = [
([{'chrome_version': '1', 'cpm': 0},
{'chrome_version': '2', 'cpm': 0},
{'chrome_version': '3', 'cpm': 0.5}],
('2', '3')),
([{'chrome_version': '1', 'cpm': 0},
{'chrome_version': '2', 'cpm': 0},
{'chrome_version': '3', 'cpm': 0.1},
{'chrome_version': '4', 'cpm': 0.6},
{'chrome_version': '5', 'cpm': 0.001}],
('2', '3'))]
self._VerifyCasesForDetectRegressonRange(cases)
def testDetectRegressionRangeForStableCrash(self):
"""Detect long-existing stable crashes."""
cases = [
([{'chrome_version': '1', 'cpm': 0.002},
{'chrome_version': '2', 'cpm': 0.8},
{'chrome_version': '3', 'cpm': 0.0007},
{'chrome_version': '4', 'cpm': 0.0007},
{'chrome_version': '5', 'cpm': 0.5}],
('4', '5')),
([{'chrome_version': '1', 'cpm': 0.06},
{'chrome_version': '2', 'cpm': 0.0003},
{'chrome_version': '3', 'cpm': 0.0007},
{'chrome_version': '4', 'cpm': 0.6},
{'chrome_version': '5', 'cpm': 0.002}],
('3', '4'))]
self._VerifyCasesForDetectRegressonRange(cases)