Best Python code snippet using lisa_python
ethtool.py
Source:ethtool.py
...457 return self._device_set458 def get_device_channels_info(459 self, interface: str, force_run: bool = False460 ) -> DeviceChannel:461 device = self._get_or_create_device_setting(interface)462 if not force_run and device.device_channel:463 return device.device_channel464 result = self.run(f"-l {interface}", force_run=force_run)465 if (result.exit_code != 0) and ("Operation not supported" in result.stdout):466 raise UnsupportedOperationException(467 "ethtool -l {interface} operation not supported."468 )469 result.assert_exit_code(470 message=f"Couldn't get device {interface} channels info."471 )472 device_channel_info = DeviceChannel(interface, result.stdout)473 # Find the vCPU count to accurately get max channels for the device.474 lscpu = self.node.tools[Lscpu]475 vcpu_count = lscpu.get_core_count(force_run=True)476 if vcpu_count < device_channel_info.max_channels:477 device_channel_info.max_channels = vcpu_count478 device.device_channel = device_channel_info479 return device_channel_info480 def change_device_channels_info(481 self,482 interface: str,483 channel_count: int,484 ) -> DeviceChannel:485 change_result = self.run(486 f"-L {interface} combined {channel_count}", sudo=True, force_run=True487 )488 change_result.assert_exit_code(489 message=f" Couldn't change device {interface} channels count."490 )491 return self.get_device_channels_info(interface, force_run=True)492 def get_device_enabled_features(493 self, interface: str, force_run: bool = False494 ) -> DeviceFeatures:495 device = self._get_or_create_device_setting(interface)496 if not force_run and device.device_features:497 return device.device_features498 result = self.run(f"-k {interface}", force_run=force_run)499 result.assert_exit_code()500 device.device_features = DeviceFeatures(interface, result.stdout)501 return device.device_features502 def get_device_gro_lro_settings(503 self, interface: str, force_run: bool = False504 ) -> DeviceGroLroSettings:505 device = self._get_or_create_device_setting(interface)506 if not force_run and device.device_gro_lro_settings:507 return device.device_gro_lro_settings508 result = self.run(f"-k {interface}", force_run=force_run)509 result.assert_exit_code()510 device.device_gro_lro_settings = DeviceGroLroSettings(interface, result.stdout)511 return device.device_gro_lro_settings512 def change_device_gro_lro_settings(513 self, interface: str, gro_setting: bool, lro_setting: bool514 ) -> DeviceGroLroSettings:515 gro = "on" if gro_setting else "off"516 lro = "on" if lro_setting else "off"517 change_result = self.run(518 f"-K {interface} gro {gro} lro {lro}",519 sudo=True,520 force_run=True,521 )522 change_result.assert_exit_code(523 message=f" Couldn't change device {interface} GRO LRO settings."524 )525 return self.get_device_gro_lro_settings(interface, force_run=True)526 def get_device_link_settings(self, interface: str) -> DeviceLinkSettings:527 device = self._get_or_create_device_setting(interface)528 if device.device_link_settings:529 return device.device_link_settings530 result = self.run(interface)531 result.assert_exit_code()532 link_settings = DeviceLinkSettings(interface, result.stdout)533 device.device_link_settings = link_settings534 # Caching the message level settings if captured in DeviceLinkSettings.535 # Not returning this info from this method. Only caching.536 if link_settings.msg_level_number and link_settings.msg_level_name:537 msg_level_settings = DeviceMessageLevel(538 interface,539 msg_level_number=link_settings.msg_level_number,540 msg_level_name=link_settings.msg_level_name,541 )542 device.device_msg_level = msg_level_settings543 return link_settings544 def get_device_msg_level(545 self, interface: str, force_run: bool = False546 ) -> DeviceMessageLevel:547 device = self._get_or_create_device_setting(interface)548 if not force_run and device.device_msg_level:549 return device.device_msg_level550 result = self.run(interface, force_run=force_run)551 if (result.exit_code != 0) and ("Operation not supported" in result.stdout):552 raise UnsupportedOperationException(553 f"ethtool {interface} operation not supported."554 )555 result.assert_exit_code(556 message=f"Couldn't get device {interface} message level information"557 )558 msg_level_settings = DeviceMessageLevel(interface, result.stdout)559 device.device_msg_level = msg_level_settings560 # caching the link settings if captured in DeviceMessageLevel.561 # will not this info from this method. Only caching.562 if msg_level_settings.link_settings:563 link_settings = DeviceLinkSettings(564 interface, link_settings=msg_level_settings.link_settings565 )566 device.device_link_settings = link_settings567 return msg_level_settings568 def set_unset_device_message_flag_by_name(569 self, interface: str, msg_flag: List[str], set: bool570 ) -> DeviceMessageLevel:571 if set:572 result = self.run(573 f"-s {interface} msglvl {' on '.join(flag for flag in msg_flag)} on",574 sudo=True,575 force_run=True,576 )577 result.assert_exit_code(578 message=f" Couldn't set device {interface} message flag/s {msg_flag}."579 )580 else:581 result = self.run(582 f"-s {interface} msglvl {' off '.join(flag for flag in msg_flag)} off",583 sudo=True,584 force_run=True,585 )586 result.assert_exit_code(587 message=f" Couldn't unset device {interface} message flag/s {msg_flag}."588 )589 return self.get_device_msg_level(interface, force_run=True)590 def set_device_message_flag_by_num(591 self, interface: str, msg_flag: str592 ) -> DeviceMessageLevel:593 result = self.run(594 f"-s {interface} msglvl {msg_flag}",595 sudo=True,596 force_run=True,597 )598 result.assert_exit_code(599 message=f" Couldn't set device {interface} message flag {msg_flag}."600 )601 return self.get_device_msg_level(interface, force_run=True)602 def get_device_ring_buffer_settings(603 self, interface: str, force_run: bool = False604 ) -> DeviceRingBufferSettings:605 device = self._get_or_create_device_setting(interface)606 if not force_run and device.device_ringbuffer_settings:607 return device.device_ringbuffer_settings608 result = self.run(f"-g {interface}", force_run=force_run)609 if (result.exit_code != 0) and ("Operation not supported" in result.stdout):610 raise UnsupportedOperationException(611 f"ethtool -g {interface} operation not supported."612 )613 result.assert_exit_code(614 message=f"Couldn't get device {interface} ring buffer settings."615 )616 device.device_ringbuffer_settings = DeviceRingBufferSettings(617 interface, result.stdout618 )619 return device.device_ringbuffer_settings620 def change_device_ring_buffer_settings(621 self, interface: str, rx: int, tx: int622 ) -> DeviceRingBufferSettings:623 change_result = self.run(624 f"-G {interface} rx {rx} tx {tx}", sudo=True, force_run=True625 )626 change_result.assert_exit_code(627 message=f" Couldn't change device {interface} ring buffer settings."628 )629 return self.get_device_ring_buffer_settings(interface, force_run=True)630 def get_device_rss_hash_key(631 self, interface: str, force_run: bool = False632 ) -> DeviceRssHashKey:633 device = self._get_or_create_device_setting(interface)634 if not force_run and device.device_rss_hash_key:635 return device.device_rss_hash_key636 result = self.run(f"-x {interface}", force_run=force_run)637 if (result.exit_code != 0) and ("Operation not supported" in result.stdout):638 raise UnsupportedOperationException(639 f"ethtool -x {interface} operation not supported."640 )641 result.assert_exit_code(642 message=f"Couldn't get device {interface} ring buffer settings."643 )644 device.device_rss_hash_key = DeviceRssHashKey(interface, result.stdout)645 return device.device_rss_hash_key646 def change_device_rss_hash_key(647 self, interface: str, hash_key: str648 ) -> DeviceRssHashKey:649 result = self.run(f"-X {interface} hkey {hash_key}", sudo=True, force_run=True)650 if (result.exit_code != 0) and ("Operation not supported" in result.stdout):651 raise UnsupportedOperationException(652 f"Changing RSS hash key with 'ethtool -X {interface}' not supported."653 )654 result.assert_exit_code(655 message=f" Couldn't change device {interface} hash key."656 )657 return self.get_device_rss_hash_key(interface, force_run=True)658 def get_device_rx_hash_level(659 self, interface: str, protocol: str, force_run: bool = False660 ) -> DeviceRxHashLevel:661 device = self._get_or_create_device_setting(interface)662 if (663 not force_run664 and device.device_rx_hash_level665 and (protocol in device.device_rx_hash_level.protocol_hash_map.keys())666 ):667 return device.device_rx_hash_level668 result = self.run(669 f"-n {interface} rx-flow-hash {protocol}", force_run=force_run670 )671 if "Operation not supported" in result.stdout:672 raise UnsupportedOperationException(673 f"ethtool -n {interface} operation not supported."674 )675 result.assert_exit_code(676 message=f"Couldn't get device {interface} RX flow hash level for"677 f" protocol {protocol}."678 )679 if device.device_rx_hash_level:680 device.device_rx_hash_level._parse_rx_hash_level(681 interface, protocol, result.stdout682 )683 device_rx_hash_level = device.device_rx_hash_level684 else:685 device_rx_hash_level = DeviceRxHashLevel(interface, protocol, result.stdout)686 device.device_rx_hash_level = device_rx_hash_level687 return device_rx_hash_level688 def change_device_rx_hash_level(689 self, interface: str, protocol: str, enable: bool690 ) -> DeviceRxHashLevel:691 param = "sd"692 if enable:693 param = "sdfn"694 result = self.run(695 f"-N {interface} rx-flow-hash {protocol} {param}",696 sudo=True,697 force_run=True,698 )699 if "Operation not supported" in result.stdout:700 raise UnsupportedOperationException(701 f"ethtool -N {interface} rx-flow-hash {protocol} {param}"702 " operation not supported."703 )704 result.assert_exit_code(705 message=f" Couldn't change device {interface} hash level for {protocol}."706 )707 return self.get_device_rx_hash_level(interface, protocol, force_run=True)708 def get_device_sg_settings(709 self, interface: str, force_run: bool = False710 ) -> DeviceSgSettings:711 device = self._get_or_create_device_setting(interface)712 if not force_run and device.device_sg_settings:713 return device.device_sg_settings714 result = self.run(f"-k {interface}", force_run=force_run)715 result.assert_exit_code()716 device.device_sg_settings = DeviceSgSettings(interface, result.stdout)717 return device.device_sg_settings718 def change_device_sg_settings(719 self, interface: str, sg_setting: bool720 ) -> DeviceSgSettings:721 sg = "on" if sg_setting else "off"722 change_result = self.run(723 f"-K {interface} sg {sg}",724 sudo=True,725 force_run=True,726 )727 change_result.assert_exit_code(728 message=f" Couldn't change device {interface} scatter-gather settings."729 )730 return self.get_device_sg_settings(interface, force_run=True)731 def get_device_statistics(732 self, interface: str, force_run: bool = False733 ) -> DeviceStatistics:734 device = self._get_or_create_device_setting(interface)735 if not force_run and device.device_statistics:736 return device.device_statistics737 result = self.run(f"-S {interface}", force_run=True)738 if (result.exit_code != 0) and (739 "Operation not supported" in result.stdout740 or "no stats available" in result.stdout741 ):742 raise UnsupportedOperationException(743 f"ethtool -S {interface} operation not supported."744 )745 result.assert_exit_code(message=f"Couldn't get device {interface} statistics.")746 device.device_statistics = DeviceStatistics(interface, result.stdout)747 return device.device_statistics748 def get_device_statistics_delta(749 self, interface: str, previous_statistics: Dict[str, int]750 ) -> Dict[str, int]:751 """752 use this method to get the delta of an operation.753 """754 new_statistics = self.get_device_statistics(755 interface=interface, force_run=True756 ).counters757 for key, value in previous_statistics.items():758 new_statistics[key] = new_statistics.get(key, 0) - value759 self._log.debug(f"none-zero delta statistics on {interface}:")760 self._log.debug(761 {key: value for key, value in new_statistics.items() if value != 0}762 )763 return new_statistics764 def get_device_firmware_version(765 self, interface: str, force_run: bool = False766 ) -> str:767 device = self._get_or_create_device_setting(interface)768 if not force_run and device.device_firmware_version:769 return device.device_firmware_version770 result = self.run(f"-i {interface}", force_run=force_run)771 if (result.exit_code != 0) and ("Operation not supported" in result.stdout):772 raise UnsupportedOperationException(773 f"ethtool -i {interface} operation not supported."774 )775 result.assert_exit_code(776 message=f"Couldn't get device {interface} firmware version info."777 )778 firmware_version_pattern = self._firmware_version_pattern.search(result.stdout)779 if not firmware_version_pattern:780 raise LisaException(781 f"Cannot get {interface} device firmware version information"782 )783 firmware_version = firmware_version_pattern.group("value")784 device.device_firmware_version = firmware_version785 return firmware_version786 def get_all_device_channels_info(self) -> List[DeviceChannel]:787 devices_channel_list = []788 devices = self.get_device_list()789 for device in devices:790 devices_channel_list.append(self.get_device_channels_info(device))791 return devices_channel_list792 def get_all_device_enabled_features(793 self, force_run: bool = False794 ) -> List[DeviceFeatures]:795 devices_features_list = []796 devices = self.get_device_list(force_run)797 for device in devices:798 devices_features_list.append(799 self.get_device_enabled_features(device, force_run)800 )801 return devices_features_list802 def get_all_device_gro_lro_settings(self) -> List[DeviceGroLroSettings]:803 devices_gro_lro_settings = []804 devices = self.get_device_list()805 for device in devices:806 devices_gro_lro_settings.append(self.get_device_gro_lro_settings(device))807 return devices_gro_lro_settings808 def get_all_device_link_settings(self) -> List[DeviceLinkSettings]:809 devices_link_settings_list = []810 devices = self.get_device_list()811 for device in devices:812 devices_link_settings_list.append(self.get_device_link_settings(device))813 return devices_link_settings_list814 def get_all_device_msg_level(self) -> List[DeviceMessageLevel]:815 devices_msg_level_list = []816 devices = self.get_device_list()817 for device in devices:818 devices_msg_level_list.append(self.get_device_msg_level(device))819 return devices_msg_level_list820 def get_all_device_ring_buffer_settings(self) -> List[DeviceRingBufferSettings]:821 devices_ring_buffer_settings_list = []822 devices = self.get_device_list()823 for device in devices:824 devices_ring_buffer_settings_list.append(825 self.get_device_ring_buffer_settings(device)826 )827 return devices_ring_buffer_settings_list828 def get_all_device_rss_hash_key(self) -> List[DeviceRssHashKey]:829 devices_rss_hash_keys = []830 devices = self.get_device_list()831 for device in devices:832 devices_rss_hash_keys.append(self.get_device_rss_hash_key(device))833 return devices_rss_hash_keys834 def get_all_device_rx_hash_level(self, protocol: str) -> List[DeviceRxHashLevel]:835 devices_rx_hash_level = []836 devices = self.get_device_list()837 for device in devices:838 devices_rx_hash_level.append(839 self.get_device_rx_hash_level(device, protocol)840 )841 return devices_rx_hash_level842 def get_all_device_statistics(self) -> List[DeviceStatistics]:843 devices_statistics = []844 devices = self.get_device_list()845 for device in devices:846 devices_statistics.append(847 self.get_device_statistics(device, force_run=True)848 )849 return devices_statistics850 def get_all_device_firmware_version(self) -> Dict[str, str]:851 devices_firmware_versions: Dict[str, str] = {}852 devices = self.get_device_list()853 for device in devices:854 devices_firmware_versions[device] = self.get_device_firmware_version(855 device, force_run=True856 )857 return devices_firmware_versions858 def _get_or_create_device_setting(self, interface: str) -> DeviceSettings:859 settings = self._device_settings_map.get(interface, None)860 if settings is None:861 settings = DeviceSettings(interface)862 self._device_settings_map[interface] = settings...
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!