88import json
99import logging
1010import os
11- import tempfile
1211import urllib .error
1312from unittest .mock import patch
1413
@@ -626,14 +625,16 @@ class TestProcessEventNodeResult:
626625 def _run (self , poller , event , translate = None ):
627626 translate = translate or {"return_value" : {}}
628627 captured = {}
629- with patch .object (poller , "_claim_node" , return_value = True ), \
630- patch .object (
631- poller , "_finish_node" ,
632- side_effect = lambda nid , outcome : captured .update (outcome = outcome ),
633- ), \
634- patch (_GET , return_value = {"artifacts" : {}}), \
635- patch ("kernel_ci_cloud_labs.pull_labs_poller.translate_job" , ** translate ), \
636- patch ("kernel_ci_cloud_labs.pull_labs_poller.submit_tests" , return_value = {}):
628+ with (
629+ patch .object (poller , "_claim_node" , return_value = True ),
630+ patch .object (
631+ poller , "_finish_node" ,
632+ side_effect = lambda nid , outcome : captured .update (outcome = outcome ),
633+ ),
634+ patch (_GET , return_value = {"artifacts" : {}}),
635+ patch ("kernel_ci_cloud_labs.pull_labs_poller.translate_job" ,
636+ ** translate ),
637+ ):
637638 poller .process_event (event )
638639 return captured ["outcome" ]
639640
@@ -682,9 +683,10 @@ def test_translate_failure_finishes_invalid_job_params(self):
682683 assert "missing artifacts.kernel" in outcome .error_msg
683684
684685 def test_per_instance_rows_carry_log_url_and_stable_test_id (self ):
685- """When executor returns per-instance rows with log_url, the submitted
686- KCIDB rows must each carry that URL and a test_id derived from the
687- instance_id (not the positional index)."""
686+ """When executor returns per-instance rows with log_url, the node
687+ outcome must carry those URLs in artifacts.test_log (first URL) and
688+ test_log_N (subsequent URLs), and the node result must reflect the
689+ aggregated per-instance statuses."""
688690 per_test = [
689691 {"name" : "boot" , "status" : "PASS" , "instance_id" : "i-aaaa1111" ,
690692 "log_url" : "https://b.s3.eu-west-1.amazonaws.com/a.log" },
@@ -695,31 +697,15 @@ def test_per_instance_rows_carry_log_url_and_stable_test_id(self):
695697 _minimal_kc (),
696698 job_executor = lambda cfg : (per_test , None ),
697699 )
698- seen = {}
699- with patch .object (p , "_claim_node" , return_value = True ), \
700- patch .object (p , "_finish_node" ), \
701- patch (_GET , return_value = {"artifacts" : {}}), \
702- patch ("kernel_ci_cloud_labs.pull_labs_poller.translate_job" ,
703- return_value = {}), \
704- patch (
705- "kernel_ci_cloud_labs.pull_labs_poller.submit_tests" ,
706- side_effect = lambda url , jwt , origin , build_id , rows : seen .update (rows = rows ),
707- ):
708- p .process_event (_job_event (node_id = "ndX" ))
709-
710- rows = seen ["rows" ]
711- assert len (rows ) == 2
712- by_id = {r ["id" ]: r for r in rows }
713- # test_id derived from instance_id => stable across retries.
714- assert set (by_id ) == {"pullab_cloud_aws:ndX.i-aaaa1111" , "pullab_cloud_aws:ndX.i-bbbb2222" }
715- # Per-row log_url survives the build_test_row pass-through.
716- assert by_id ["pullab_cloud_aws:ndX.i-aaaa1111" ]["log_url" ] == \
700+ outcome = self ._run (p , _job_event (node_id = "ndX" ))
701+
702+ # One FAIL among results -> overall node result is "fail".
703+ assert outcome .result == "fail"
704+ # Log URLs are attached to the outcome artifacts for send_kcidb.
705+ assert outcome .artifacts ["test_log" ] == \
717706 "https://b.s3.eu-west-1.amazonaws.com/a.log"
718- assert by_id [ "pullab_cloud_aws:ndX.i-bbbb2222" ][ "log_url " ] == \
707+ assert outcome . artifacts [ "test_log_1 " ] == \
719708 "https://b.s3.eu-west-1.amazonaws.com/b.log"
720- # instance_id surfaces in misc for traceability.
721- assert by_id ["pullab_cloud_aws:ndX.i-aaaa1111" ]["misc" ]["instance_id" ] == "i-aaaa1111"
722- # Aggregated node outcome from per-instance statuses.
723709 # (one fail among two -> fail; verified indirectly via existing tests).
724710
725711
0 commit comments