Bug 1260791 - Refactor and improve performance alert unit tests

This commit is contained in:
William Lachance 2016-04-22 17:13:29 -04:00
Родитель e2c92101df
Коммит 11bb8a0a8a
4 изменённых файлов: 83 добавлений и 81 удалений

Просмотреть файл

@ -579,3 +579,27 @@ def text_summary_lines(jm, failure_lines, test_repository, artifacts):
summary_lines.append(summary_line) summary_lines.append(summary_line)
return summary_lines return summary_lines
@pytest.fixture
def test_perf_alert_summary(test_repository, test_perf_signature):
from treeherder.perf.models import PerformanceAlertSummary
return PerformanceAlertSummary.objects.create(
repository=test_repository,
prev_result_set_id=0,
result_set_id=1,
last_updated=datetime.datetime.now())
@pytest.fixture
def test_perf_alert(test_perf_signature, test_perf_alert_summary):
from treeherder.perf.models import PerformanceAlert
return PerformanceAlert.objects.create(
summary=test_perf_alert_summary,
series_signature=test_perf_signature,
is_regression=True,
amount_pct=0.5,
amount_abs=50.0,
prev_value=100.0,
new_value=150.0,
t_value=20.0)

Просмотреть файл

@ -7,64 +7,36 @@ from treeherder.perf.models import (PerformanceAlert,
PerformanceAlertSummary) PerformanceAlertSummary)
def test_summary_modification(test_repository, test_perf_signature): def test_summary_modification(test_repository, test_perf_signature,
s = PerformanceAlertSummary.objects.create( test_perf_alert_summary, test_perf_alert):
id=1, (s, a) = (test_perf_alert_summary, test_perf_alert)
repository=test_repository,
prev_result_set_id=0,
result_set_id=1,
last_updated=datetime.datetime.now())
p = PerformanceAlert.objects.create(
id=1,
summary=s,
series_signature=test_perf_signature,
is_regression=True,
amount_pct=0.5,
amount_abs=50.0,
prev_value=100.0,
new_value=150.0,
t_value=20.0)
assert s.bug_number is None assert s.bug_number is None
assert s.status == PerformanceAlertSummary.UNTRIAGED assert s.status == PerformanceAlertSummary.UNTRIAGED
# acknowledge alert, make sure summary status is updated # acknowledge alert, make sure summary status is updated
p.status = PerformanceAlert.ACKNOWLEDGED a.status = PerformanceAlert.ACKNOWLEDGED
p.save() a.save()
s = PerformanceAlertSummary.objects.get(id=1) s = PerformanceAlertSummary.objects.get(id=1)
assert s.status == PerformanceAlertSummary.INVESTIGATING assert s.status == PerformanceAlertSummary.INVESTIGATING
# reset alert to untriaged, likewise make sure summary status # reset alert to untriaged, likewise make sure summary status
# gets updated # gets updated
p.status = PerformanceAlert.UNTRIAGED a.status = PerformanceAlert.UNTRIAGED
p.save() a.save()
s = PerformanceAlertSummary.objects.get(id=1) s = PerformanceAlertSummary.objects.get(id=1)
assert s.status == PerformanceAlertSummary.UNTRIAGED assert s.status == PerformanceAlertSummary.UNTRIAGED
def test_alert_modification(test_repository, test_perf_signature): def test_alert_modification(test_repository, test_perf_signature,
s = PerformanceAlertSummary.objects.create( test_perf_alert_summary, test_perf_alert):
id=1, p = test_perf_alert
repository=test_repository,
prev_result_set_id=0,
result_set_id=1,
last_updated=datetime.datetime.now())
s2 = PerformanceAlertSummary.objects.create( s2 = PerformanceAlertSummary.objects.create(
id=2, id=2,
repository=test_repository, repository=test_repository,
prev_result_set_id=1, prev_result_set_id=1,
result_set_id=2, result_set_id=2,
last_updated=datetime.datetime.now()) last_updated=datetime.datetime.now())
p = PerformanceAlert.objects.create(
id=1,
summary=s,
series_signature=test_perf_signature,
is_regression=True,
amount_pct=0.5,
amount_abs=50.0,
prev_value=100.0,
new_value=150.0,
t_value=20.0)
assert p.related_summary is None assert p.related_summary is None
assert p.status == PerformanceAlert.UNTRIAGED assert p.status == PerformanceAlert.UNTRIAGED

Просмотреть файл

@ -7,25 +7,7 @@ from treeherder.perf.models import (PerformanceAlert,
PerformanceAlertSummary) PerformanceAlertSummary)
def test_alerts(webapp, test_repository, test_perf_signature, test_user, def test_alerts_get(webapp, test_repository, test_perf_alert):
test_sheriff):
s = PerformanceAlertSummary.objects.create(
id=1,
repository=test_repository,
prev_result_set_id=0,
result_set_id=1,
last_updated=datetime.datetime.now())
PerformanceAlert.objects.create(
id=1,
summary=s,
series_signature=test_perf_signature,
is_regression=True,
amount_pct=0.5,
amount_abs=50.0,
prev_value=100.0,
new_value=150.0,
t_value=20.0)
resp = webapp.get(reverse('performance-alerts-list')) resp = webapp.get(reverse('performance-alerts-list'))
assert resp.status_int == 200 assert resp.status_int == 200
@ -48,7 +30,11 @@ def test_alerts(webapp, test_repository, test_perf_signature, test_user,
]) ])
assert resp.json['results'][0]['related_summary_id'] is None assert resp.json['results'][0]['related_summary_id'] is None
# create a new summary and reassign the alert to it
def test_alerts_put(webapp, test_repository, test_perf_alert, test_user,
test_sheriff):
# create a new summary and try to reassign the alert to it with varying
# levels of permission, then verify the return value changes accordingly
PerformanceAlertSummary.objects.create( PerformanceAlertSummary.objects.create(
id=2, id=2,
repository=test_repository, repository=test_repository,
@ -56,6 +42,10 @@ def test_alerts(webapp, test_repository, test_perf_signature, test_user,
result_set_id=2, result_set_id=2,
last_updated=datetime.datetime.now()) last_updated=datetime.datetime.now())
resp = webapp.get(reverse('performance-alerts-list'))
assert resp.status_int == 200
assert resp.json['results'][0]['related_summary_id'] is None
# verify that we fail if not authenticated # verify that we fail if not authenticated
webapp.put_json(reverse('performance-alerts-list') + '1/', { webapp.put_json(reverse('performance-alerts-list') + '1/', {
'related_summary_id': 2, 'related_summary_id': 2,

Просмотреть файл

@ -1,35 +1,51 @@
import datetime from django.contrib.auth.models import User
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from rest_framework.test import APIClient from rest_framework.test import APIClient
from treeherder.perf.models import (PerformanceAlert, from treeherder.perf.models import PerformanceAlertSummary
PerformanceAlertSummary)
def test_alert_summaries(webapp, test_repository, test_perf_signature, def test_alert_summaries_get(webapp, test_perf_alert_summary,
test_user, test_sheriff): test_perf_alert):
s = PerformanceAlertSummary.objects.create(
id=1,
repository=test_repository,
prev_result_set_id=0,
result_set_id=1,
last_updated=datetime.datetime.now())
PerformanceAlert.objects.create(
id=1,
summary=s,
series_signature=test_perf_signature,
is_regression=True,
amount_pct=0.5,
amount_abs=50.0,
prev_value=100.0,
new_value=150.0,
t_value=20.0)
# verify that we get the performance summary + alert on GET # verify that we get the performance summary + alert on GET
resp = webapp.get(reverse('performance-alert-summaries-list')) resp = webapp.get(reverse('performance-alert-summaries-list'))
assert resp.status_int == 200 assert resp.status_int == 200
# should just have the one alert summary (with one alert)
assert resp.json['next'] is None
assert resp.json['previous'] is None
assert len(resp.json['results']) == 1
assert set(resp.json['results'][0].keys()) == set([
'alerts',
'bug_number',
'framework',
'id',
'last_updated',
'prev_result_set_id',
'related_alerts',
'repository',
'result_set_id',
'status',
])
assert len(resp.json['results'][0]['alerts']) == 1
assert set(resp.json['results'][0]['alerts'][0].keys()) == set([
'id',
'status',
'series_signature',
'is_regression',
'prev_value',
'new_value',
't_value',
'amount_abs',
'amount_pct',
'summary_id',
'related_summary_id'
])
assert len(resp.json['results'][0]['related_alerts']) == 0
def test_alert_summaries_put(webapp, test_repository, test_perf_signature,
test_perf_alert_summary, test_user, test_sheriff):
# verify that we fail if not authenticated # verify that we fail if not authenticated
webapp.put_json(reverse('performance-alert-summaries-list') + '1/', { webapp.put_json(reverse('performance-alert-summaries-list') + '1/', {
'status': 1 'status': 1