blob: f8dd55575ed6ae22bcb20a1aa26ce317f31c139e [file] [log] [blame]
# Copyright 2015 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
from dashboard import testing_common
from dashboard import utils
from dashboard.models import graph_data
from dashboard.models import sheriff
from dashboard.models import stoppage_alert
class StoppageAlertTest(testing_common.TestCase):
def _AddSampleData(self):
"""Puts a Test and Row in the datastore and returns the entities."""
testing_common.AddTests(['M'], ['b'], {'suite': {'foo': {}}})
sheriff.Sheriff(id='Foo', patterns=['*/*/*/*']).put()
test_path = 'M/b/suite/foo'
test_key = utils.TestKey(test_path)
test = test_key.get()
testing_common.AddRows(test_path, {100})
row = graph_data.Row.query().get()
return test, row
def testCreateStoppageAlert_Basic(self):
test, row = self._AddSampleData()
alert = stoppage_alert.CreateStoppageAlert(test, row)
alert.put()
self.assertFalse(alert.internal_only)
self.assertEqual(test.sheriff, alert.sheriff)
self.assertEqual(test.key, alert.test)
self.assertEqual(row.revision, alert.revision)
self.assertEqual(row.revision, alert.start_revision)
self.assertEqual(row.revision, alert.end_revision)
self.assertFalse(alert.mail_sent)
self.assertIsNone(alert.bug_id)
self.assertIsNotNone(alert.timestamp)
def testCreateStoppageAlert_InternalOnly(self):
test, row = self._AddSampleData()
test.internal_only = True
test.put()
alert = stoppage_alert.CreateStoppageAlert(test, row)
self.assertTrue(alert.internal_only)
def testPutMultipleTimes_OnlyOneEntityPut(self):
test, row = self._AddSampleData()
stoppage_alert.CreateStoppageAlert(test, row).put()
stoppage_alert.CreateStoppageAlert(test, row).put()
self.assertEqual(1, len(stoppage_alert.StoppageAlert.query().fetch()))
def testGetStoppageAlert_NoEntity_ReturnsNone(self):
self.assertIsNone(stoppage_alert.GetStoppageAlert('M/b/suite/bar', 123))
def testGetStoppageAlert_EntityExists_ReturnsEntity(self):
test, row = self._AddSampleData()
stoppage_alert.CreateStoppageAlert(test, row).put()
self.assertIsNotNone(
stoppage_alert.GetStoppageAlert(test.test_path, row.revision))
def testCreateStoppageAlert_DoesNotCreateLargeGroups(self):
# First, create |_MAX_GROUP_SIZE| alerts; all of them can be created
# and they all belong to the same group.
tests = map(str, range(stoppage_alert._MAX_GROUP_SIZE))
testing_common.AddTests(['M'], ['b'], {'suite': {t: {} for t in tests}})
test_paths = ['M/b/suite/' + t for t in tests]
rows = []
alerts = []
for path in test_paths:
rows = testing_common.AddRows(path, [1])
test = utils.TestKey(path).get()
new_alert = stoppage_alert.CreateStoppageAlert(test, rows[0])
self.assertIsNotNone(new_alert)
new_alert.put()
alerts.append(new_alert)
self.assertEqual(stoppage_alert._MAX_GROUP_SIZE, len(alerts))
self.assertTrue(all(a.group == alerts[0].group for a in alerts))
# Making one more stoppage alert that belongs to this group fails.
testing_common.AddTests(['M'], ['b'], {'suite': {'another': {}}})
test_path = 'M/b/suite/another'
rows = testing_common.AddRows(test_path, [1])
test = utils.TestKey(test_path).get()
new_alert = stoppage_alert.CreateStoppageAlert(test, rows[0])
self.assertIsNone(new_alert)
if __name__ == '__main__':
unittest.main()