Skip to content

Commit 17cfcbe

Browse files
Add test to recreate the error
* Also begin to add detection for empty event
1 parent 5be4462 commit 17cfcbe

File tree

2 files changed

+48
-1
lines changed

2 files changed

+48
-1
lines changed

awx/api/views/__init__.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3666,9 +3666,12 @@ def get(self, request, **kwargs):
36663666
z = i
36673667
next_non_meta_event = events[-1]
36683668
while z < len(events):
3669-
if events[z]['event'] not in JobJobEventsChildrenSummary.meta_events:
3669+
if events[z]['event'] not in JobJobEventsChildrenSummary.meta_events + ('',):
36703670
next_non_meta_event = events[z]
36713671
break
3672+
elif not events[z]['event']:
3673+
breakpoint()
3674+
logging.warning(f"JobEventChildrenSummary: job event 'event' field is unexpectedly empty for job {job.id}")
36723675
z += 1
36733676
event_level_after = models.JobEvent.LEVEL_FOR_EVENT[next_non_meta_event['event']]
36743677
if event_level_after and event_level_after > event_level_before:

awx/main/tests/functional/api/test_events.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ def test_job_job_events_children_summary(get, organization_factory, job_template
7373
job_id=job.pk, uuid='uuid3', parent_uuid='uuid2', event="playbook_on_task_start", counter=3, stdout='a' * 1024, job_created=job.created
7474
).save()
7575
JobEvent.create_from_data(job_id=job.pk, uuid='uuid4', parent_uuid='', event='verbose', counter=4, stdout='a' * 1024, job_created=job.created).save()
76+
7677
JobEvent.create_from_data(
7778
job_id=job.pk, uuid='uuid5', parent_uuid='uuid1', event="playbook_on_play_start", counter=5, stdout='a' * 1024, job_created=job.created
7879
).save()
@@ -131,3 +132,46 @@ def test_job_job_events_children_summary_is_tree(get, organization_factory, job_
131132
assert response.data["meta_event_nested_uuid"] == {}
132133
assert response.data["event_processing_finished"] == True
133134
assert response.data["is_tree"] == False
135+
136+
137+
@pytest.mark.django_db
138+
def test_job_job_events_children_summary_empty_event(get, organization_factory, job_template_factory):
139+
objs = organization_factory("org", superusers=['admin'])
140+
jt = job_template_factory("jt", organization=objs.organization, inventory='test_inv', project='test_proj').job_template
141+
job = jt.create_unified_job()
142+
url = reverse('api:job_job_events_children_summary', kwargs={'pk': job.pk})
143+
response = get(url, user=objs.superusers.admin, expect=200)
144+
assert response.data["event_processing_finished"] == False
145+
'''
146+
E1
147+
E2
148+
E3
149+
E4 (verbose)
150+
E5
151+
'''
152+
JobEvent.create_from_data(
153+
job_id=job.pk, uuid='uuid1', parent_uuid='', event="playbook_on_start", counter=1, stdout='a' * 1024, job_created=job.created
154+
).save()
155+
JobEvent.create_from_data(
156+
job_id=job.pk, uuid='uuid2', parent_uuid='uuid1', event="playbook_on_play_start", counter=2, stdout='a' * 1024, job_created=job.created
157+
).save()
158+
JobEvent.create_from_data(
159+
job_id=job.pk, uuid='uuid3', parent_uuid='uuid2', event="playbook_on_task_start", counter=3, stdout='a' * 1024, job_created=job.created
160+
).save()
161+
JobEvent.create_from_data(job_id=job.pk, uuid='uuid4', parent_uuid='', event='verbose', counter=4, stdout='a' * 1024, job_created=job.created).save()
162+
163+
JobEvent.create_from_data(job_id=job.pk, uuid='uuid4', parent_uuid='', event='', counter=5, stdout='a' * 1024, job_created=job.created).save()
164+
165+
JobEvent.create_from_data(
166+
job_id=job.pk, uuid='uuid5', parent_uuid='uuid1', event="playbook_on_play_start", counter=6, stdout='a' * 1024, job_created=job.created
167+
).save()
168+
169+
job.emitted_events = job.get_event_queryset().count()
170+
job.status = "successful"
171+
job.save()
172+
url = reverse('api:job_job_events_children_summary', kwargs={'pk': job.pk})
173+
response = get(url, user=objs.superusers.admin, expect=200)
174+
assert response.data["children_summary"] == {1: {"rowNumber": 0, "numChildren": 4}, 2: {"rowNumber": 1, "numChildren": 2}}
175+
assert response.data["meta_event_nested_uuid"] == {4: "uuid2"}
176+
assert response.data["event_processing_finished"] == True
177+
assert response.data["is_tree"] == True

0 commit comments

Comments
 (0)