def validate_device_msg_level_change()

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


    def validate_device_msg_level_change(self, node: Node, log: Logger) -> None:
        # Check if feature is supported by the kernel
        self._check_msg_level_change_supported(node)

        msg_types: Dict[str, str] = {
            "probe": "0x0002",
            "tx_done": "0x0400",
            "rx_status": "0x0800",
        }

        ethtool = node.tools[Ethtool]
        devices_msg_level = ethtool.get_all_device_msg_level()

        for msg_level_info in devices_msg_level:
            interface = msg_level_info.device_name
            original_msg_level_number = msg_level_info.msg_level_number
            original_msg_level_name = msg_level_info.msg_level_name

            name_test_flag = []
            number_test_flag = 0

            for msg_key, msg_value in msg_types.items():
                if msg_key not in original_msg_level_name:
                    name_test_flag.append(msg_key)
                    number_test_flag += int(msg_value, 16)

            # variable to indicate set or unset
            set = True

            # if test message flags are already set, pick first test flag in list.
            # validate change by first unsetting the flag and then unsetting
            if not name_test_flag and not number_test_flag:
                first_pair = list(msg_types.items())[0]
                name_test_flag.append(first_pair[0])
                number_test_flag = int(first_pair[1], 16)
                set = False

            # Testing set/unset message level by name
            new_settings = ethtool.set_unset_device_message_flag_by_name(
                interface, name_test_flag, set
            )
            if set:
                assert_that(
                    new_settings.msg_level_name,
                    f"Setting msg flags - {' '.join(name_test_flag)} didn't"
                    f" succeed. Current value is {new_settings.msg_level_name}",
                ).contains(" ".join(name_test_flag))
            else:
                assert_that(
                    new_settings.msg_level_name,
                    f"Setting msg flags by name - {' '.join(name_test_flag)} didn't"
                    f" succeed. Current value is {new_settings.msg_level_name}",
                ).does_not_contain(" ".join(name_test_flag))

            reverted_settings = ethtool.set_unset_device_message_flag_by_name(
                interface, name_test_flag, not set
            )
            if not set:
                assert_that(
                    reverted_settings.msg_level_name,
                    f"Setting msg flags by name - {' '.join(name_test_flag)} didn't"
                    f" succeed. Current value is {reverted_settings.msg_level_name}",
                ).contains(" ".join(name_test_flag))
            else:
                assert_that(
                    reverted_settings.msg_level_name,
                    f"Setting msg flags by name - {' '.join(name_test_flag)} didn't"
                    f" succeed. Current value is {reverted_settings.msg_level_name}",
                ).does_not_contain(" ".join(name_test_flag))

            # Testing set message level by number
            new_settings = ethtool.set_device_message_flag_by_num(
                interface, str(hex(number_test_flag))
            )
            assert_that(
                int(new_settings.msg_level_number, 16),
                f"Setting msg flags by number - {str(hex(number_test_flag))} didn't"
                f" succeed. Current value is {new_settings.msg_level_number}",
            ).is_equal_to(number_test_flag)

            reverted_settings = ethtool.set_device_message_flag_by_num(
                interface, original_msg_level_number
            )
            assert_that(
                int(reverted_settings.msg_level_number, 16),
                f"Setting msg flags by number - {original_msg_level_number} didn't"
                f" succeed. Current value is {reverted_settings.msg_level_number}",
            ).is_equal_to(int(original_msg_level_number, 16))