def verify_sriov_interrupts_change()

in microsoft/testsuites/network/sriov.py [0:0]


    def verify_sriov_interrupts_change(self, environment: Environment) -> None:
        server_node = cast(RemoteNode, environment.nodes[0])
        client_node = cast(RemoteNode, environment.nodes[1])
        vm_nics = initialize_nic_info(environment)
        # preparation work before launch iperf3
        stop_firewall(environment)

        server_iperf3 = server_node.tools[Iperf3]
        client_iperf3 = client_node.tools[Iperf3]
        # 1. Start iperf3 on server node.
        server_iperf3.run_as_server()
        client_interrupt_inspector = client_node.tools[InterruptInspector]
        for _, client_nic_info in vm_nics[client_node.name].items():
            # 2. Get initial interrupts sum per irq and cpu number on client node.
            initial_pci_interrupts_by_irqs = (
                client_interrupt_inspector.sum_cpu_counter_by_irqs(
                    client_nic_info.pci_slot
                )
            )
            initial_pci_interrupts_by_cpus = (
                client_interrupt_inspector.sum_cpu_counter_by_index(
                    client_nic_info.pci_slot
                )
            )
            matched_server_nic_info: NicInfo
            for _, server_nic_info in vm_nics[server_node.name].items():
                if (
                    server_nic_info.ip_addr.rsplit(".", maxsplit=1)[0]
                    == client_nic_info.ip_addr.rsplit(".", maxsplit=1)[0]
                ):
                    matched_server_nic_info = server_nic_info
                    break
            assert (
                matched_server_nic_info
            ), "not found the server nic has the same subnet of"
            f" {client_nic_info.ip_addr}"

            # 3. Start iperf3 for 30 seconds with 128 threads on client node.
            client_iperf3.run_as_client(
                server_ip=matched_server_nic_info.ip_addr,
                seconds=30,
                parallel_number=128,
                client_ip=client_nic_info.ip_addr,
            )
            # 4. Get final interrupts sum per irq number on client node.
            final_pci_interrupts_by_irqs = (
                client_interrupt_inspector.sum_cpu_counter_by_irqs(
                    client_nic_info.pci_slot
                )
            )
            for init_interrupts_irq in initial_pci_interrupts_by_irqs:
                init_irq_number = list(init_interrupts_irq)[0]
                init_interrupts_value = init_interrupts_irq[init_irq_number]
                for final_interrupts in final_pci_interrupts_by_irqs:
                    final_irq_number = list(final_interrupts)[0]
                    final_interrupts_value = final_interrupts[final_irq_number]
                    if init_irq_number == final_irq_number:
                        break
                # 5. Compare interrupts changes, expected to see interrupts increased.
                assert_that(final_interrupts_value).described_as(
                    f"irq {init_irq_number} didn't have an increased interrupts count"
                    " after iperf3 run!"
                ).is_greater_than(init_interrupts_value)
            # 6. Get final interrupts sum per cpu on client node.
            final_pci_interrupts_by_cpus = (
                client_interrupt_inspector.sum_cpu_counter_by_index(
                    client_nic_info.pci_slot
                )
            )
            for cpu, init_interrupts_value in initial_pci_interrupts_by_cpus.items():
                final_interrupts_value = final_pci_interrupts_by_cpus[cpu]
                # 7. Compare interrupts changes, expected to see interrupts increased.
                assert_that(final_interrupts_value).described_as(
                    f"CPU {cpu} didn't have an increased interrupts count"
                    " after iperf3 run!"
                ).is_greater_than(init_interrupts_value)