<div dir="ltr"><div>Hi Luca,</div><div>Thanks for the review. I will send a new version that addresses the comments shortly.</div><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Fri, Oct 16, 2026 at 12:28 PM Luca Vizzarro <<a href="mailto:Luca.Vizzarro@arm.com">Luca.Vizzarro@arm.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi Koushik,<br>
<br>
Apologies for the long wait. To start off, could you please address the <br>
AI Code Review as it raised a few concerns:<br>
<br>
<a href="http://mails.dpdk.org/archives/test-report/2026-August/1029040.html" rel="noreferrer" target="_blank">http://mails.dpdk.org/archives/test-report/2026-August/1029040.html</a><br>
<br></blockquote><div><br></div><div>In terms of the 'del self._lshw_net_Info' section, i added the 'if <span style="background-color:transparent">self._lshw_net_Info' to check if the attribute exists before deleting, as it's done in other sections of the file</span></div><div><span style="background-color:transparent">For the error checking and TG resource teardown, this is already handled by DTS.</span></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
The patch will also require rebasing.<br>
<br>
On 11/08/2026 19:55, Koushik Bhargav Nimoji wrote:<br>
> diff --git a/dts/framework/test_result.py b/dts/framework/test_result.py<br>
> index 21faa55dc1..13ed8f671c 100644<br>
> --- a/dts/framework/test_result.py<br>
> +++ b/dts/framework/test_result.py<br>
> @@ -117,6 +117,7 @@ class ResultNode(BaseModel):<br>
> label: str<br>
> children: list[Union["ResultNode", ResultLeaf]] = Field(default_factory=list)<br>
> parent: Union["ResultNode", None] = None<br>
> + ports: list[dict[str, str]] | None = None<br>
<br>
This attribute lacks the appropriate documentation. Also unless I missed <br>
something, I am not sure how this belongs to this patch. Can you please <br>
clarify?<br></blockquote><div><span style="background-color:transparent"><br></span></div><div><span style="background-color:transparent">This shouldn't be here, will be removed.</span></div><div><span style="background-color:transparent"> </span></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
> <br>
> def add_child(self, label: str) -> "ResultNode":<br>
> """Creates and append a child node to the model.<br>
> diff --git a/dts/framework/test_run.py b/dts/framework/test_run.py<br>
> index c20a0fa885..b23930b953 100644<br>
> --- a/dts/framework/test_run.py<br>
> +++ b/dts/framework/test_run.py<br>
> @@ -115,7 +115,7 @@<br>
> from framework.remote_session.dpdk import DPDKBuildEnvironment, DPDKRuntimeEnvironment<br>
> from framework.settings import SETTINGS<br>
> from framework.test_result import Result, ResultNode, TestRunResult<br>
> -from framework.test_suite import BaseConfig, TestCase, TestCaseType, TestSuite<br>
> +from framework.test_suite import BaseConfig, TestCase, TestCaseType, TestSuite, TestSuiteType<br>
> from framework.testbed_model.capability import (<br>
> Capability,<br>
> get_supported_capabilities,<br>
> @@ -375,11 +375,6 @@ def next(self) -> State | None:<br>
> ctx.topology.bind_cryptodevs("dpdk")<br>
> <br>
> ctx.topology.configure_ports("sut", "dpdk")<br>
> - if ctx.func_tg and ctx.topology.type is not LinkTopology.NO_LINK:<br>
> - ctx.func_tg.setup(ctx.topology)<br>
> - if ctx.perf_tg and ctx.topology.type is not LinkTopology.NO_LINK:<br>
> - ctx.perf_tg.setup(ctx.topology)<br>
> -<br>
> self.result.ports = [<br>
> port.to_dict() for port in ctx.topology.sut_ports + ctx.topology.tg_ports<br>
> ]<br>
> @@ -506,12 +501,34 @@ class TestSuiteSetup(TestSuiteState):<br>
> """Test suite setup."""<br>
> <br>
> logger_name: ClassVar[str] = "test_suite_setup"<br>
> + test_run: TestRun<br>
<br>
Unsure why this is necessary, given it's already inherited by <br>
TestSuiteState.<br><br></blockquote><div><br></div><div>I kept it this way as it is the same style as TestRunSetup. TestRunSetup inherits from State, which has a 'test_run: TestRun' attribute, but also has its own test_run attribute. I will have it inherit test_run in my upcoming version. as that's a better approach.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
> + if (<br>
> + ctx.topology.type is not LinkTopology.NO_LINK<br>
> + and testsuite_type is not TestSuiteType.CRYPTO<br>
> + ):<br>
> + if testsuite_type == TestSuiteType.FUNC:<br>
> + required_tg, other_tg = ctx.func_tg, ctx.perf_tg<br>
> + else:<br>
> + required_tg, other_tg = ctx.perf_tg, ctx.func_tg<br>
> +<br>
> + if other_tg and other_tg.is_setup:<br>
> + other_tg.teardown()<br>
> +<br>
> + if testsuite_type == TestSuiteType.FUNC and ctx.tg_node:<br>
> + for port in ctx.topology.tg_ports:<br>
> + ctx.tg_node.main_session.bind_ports_to_driver([port], port.config.os_driver)<br>
<br>
I am a bit confused why this happens here. The driver to be bound to <br>
should be governed by the TG that uses such ports. Could be os_driver, <br>
could be dpdk_driver, regardless of Scapy and TRex.<br>
<br></blockquote><div>This section exists because of how scapy and TRex handle port driver bindings. TRex automatically binds ports to the required driver when setup, but scapy requires it to be done manually. That's why if the next test suite to be tested is a functional test suite, the TG ports are rebound to the os_driver manually here.</div></div></div>