44import logging
55import time
66from pkg_resources import parse_version
7- from tests .platform_tests .thermal_control_test_helper import *
7+ from tests .platform_tests .thermal_control_test_helper import mocker , FanStatusMocker , ThermalStatusMocker , \
8+ SingleFanMocker
89from tests .common .mellanox_data import get_platform_data
910from minimum_table import get_min_table
1011
9697 }
9798}
9899
100+
99101class SysfsNotExistError (Exception ):
100102 """
101103 Exception when sys fs not exist.
@@ -138,7 +140,6 @@ def __init__(self, dut):
138140 :param dut: DUT object representing a SONiC switch under test.
139141 """
140142 self .dut = dut
141- #self.unlink_file_list = {}
142143 self ._extract_num_of_fans_and_fan_drawers ()
143144 self .deinit_retry = 5
144145
@@ -289,7 +290,7 @@ def deinit(self):
289290 for file_path , link_target in self .unlink_file_list .items ():
290291 try :
291292 self .dut .command ('ln -f -s {} {}' .format (link_target , file_path ))
292- except Exception as e :
293+ except Exception :
293294 # Catch any exception for later retry
294295 failed_recover_links [file_path ] = link_target
295296
@@ -300,7 +301,7 @@ def deinit(self):
300301 self .dut .shell ('rm -f {}' .format (file_path ))
301302 else :
302303 self .dut .shell ('echo \' {}\' > {}' .format (value , file_path ))
303- except Exception as e :
304+ except Exception :
304305 # Catch any exception for later retry
305306 failed_recover_files [file_path ] = value
306307
@@ -417,7 +418,7 @@ def mock_fan_direction_fan_dir_per_fan(self, direction):
417418 """
418419 try :
419420 _ = int (self .helper .read_value (FanDrawerData .FAN_DIR_PATH_PER_FAN .format (self .index )))
420- except SysfsNotExistError as e :
421+ except SysfsNotExistError :
421422 self .mocked_direction = NOT_AVAILABLE
422423 return
423424
@@ -438,7 +439,7 @@ def mock_fan_direction_fan_dir_for_all_fans(self, direction):
438439 """
439440 try :
440441 fan_dir_bits = int (self .helper .read_value (FanDrawerData .FAN_DIR_PATH_ALL_FANS ))
441- except SysfsNotExistError as e :
442+ except SysfsNotExistError :
442443 self .mocked_direction = NOT_AVAILABLE
443444 return
444445
@@ -479,6 +480,7 @@ def get_expect_led_color(self):
479480
480481 return 'green'
481482
483+
482484class FanData :
483485 """
484486 Data mocker of a FAN.
@@ -713,7 +715,7 @@ def check_result(self, actual_data):
713715 mismatch_in_actual_data = []
714716 for actual_data_item in actual_data :
715717 primary = actual_data_item [self .primary_field ]
716- if not primary in expected :
718+ if primary not in expected :
717719 extra_in_actual_data .append (actual_data_item )
718720 else :
719721 for field in actual_data_item .keys ():
@@ -726,16 +728,16 @@ def check_result(self, actual_data):
726728
727729 result = True
728730 if len (extra_in_actual_data ) > 0 :
729- logging .error ('Found extra data in actual_data: {}' \
730- .format (json .dumps (extra_in_actual_data , indent = 2 )))
731+ logging .error ('Found extra data in actual_data: {}'
732+ .format (json .dumps (extra_in_actual_data , indent = 2 )))
731733 result = False
732734 if len (mismatch_in_actual_data ) > 0 :
733- logging .error ('Found mismatch data in actual_data: {}' \
734- .format (json .dumps (mismatch_in_actual_data , indent = 2 )))
735+ logging .error ('Found mismatch data in actual_data: {}'
736+ .format (json .dumps (mismatch_in_actual_data , indent = 2 )))
735737 result = False
736738 if len (expected .keys ()) > 0 :
737- logging .error ('Expected data not found in actual_data: {}' \
738- .format (json .dumps (expected , indent = 2 )))
739+ logging .error ('Expected data not found in actual_data: {}'
740+ .format (json .dumps (expected , indent = 2 )))
739741 result = False
740742
741743 return result
@@ -761,7 +763,7 @@ def __init__(self, dut):
761763 self .expected_data = {}
762764 self .expected_data_headers = ['drawer' , 'led' , 'fan' , 'speed' , 'direction' , 'presence' , 'status' ]
763765 self .primary_field = 'fan'
764- self .excluded_fields = ['timestamp' ,]
766+ self .excluded_fields = ['timestamp' , ]
765767
766768 def deinit (self ):
767769 """
@@ -779,12 +781,11 @@ def mock_data(self):
779781 drawer_index = 1
780782 drawer_data = None
781783 presence = 0
782- direction = NOT_AVAILABLE
783784 naming_rule = FAN_NAMING_RULE ['fan' ]
784785 # All system fan is controlled to have the same speed, so only
785786 # get a random value once here
786787 speed = random .randint (60 , 100 )
787- FanData .mock_cooling_cur_state (self .mock_helper , speed / 10 )
788+ FanData .mock_cooling_cur_state (self .mock_helper , speed / 10 )
788789 while fan_index <= MockerHelper .FAN_NUM :
789790 try :
790791 if (fan_index - 1 ) % MockerHelper .FAN_NUM_PER_DRAWER == 0 :
@@ -806,7 +807,7 @@ def mock_data(self):
806807 fan_data .mock_target_speed (speed )
807808 self .expected_data [fan_data .name ] = [
808809 drawer_data .name ,
809- 'N/A' , # update this value later
810+ 'N/A' , # update this value later
810811 fan_data .name ,
811812 '{}%' .format (fan_data .mocked_speed ),
812813 drawer_data .mocked_direction ,
@@ -894,9 +895,10 @@ def __init__(self, dut):
894895 ThermalStatusMocker .__init__ (self , dut )
895896 self .mock_helper = MockerHelper (dut )
896897 self .expected_data = {}
897- self .expected_data_headers = ['sensor' , 'temperature' , 'high th' , 'low th' , 'crit high th' , 'crit low th' , 'warning' ]
898+ self .expected_data_headers = ['sensor' , 'temperature' , 'high th' , 'low th' , 'crit high th' , 'crit low th' ,
899+ 'warning' ]
898900 self .primary_field = 'sensor'
899- self .excluded_fields = ['timestamp' ,]
901+ self .excluded_fields = ['timestamp' , ]
900902
901903 def deinit (self ):
902904 """
@@ -1097,7 +1099,8 @@ def mock_over_speed(self):
10971099 Change the mocked FAN speed to faster than target speed and exceed speed tolerance.
10981100 :return:
10991101 """
1100- self .fan_data .mock_speed (AbnormalFanMocker .TARGET_SPEED_VALUE * (100 + AbnormalFanMocker .SPEED_TOLERANCE ) / 100 + 10 )
1102+ self .fan_data .mock_speed (
1103+ AbnormalFanMocker .TARGET_SPEED_VALUE * (100 + AbnormalFanMocker .SPEED_TOLERANCE ) / 100 + 10 )
11011104 self .fan_data .mock_target_speed (AbnormalFanMocker .TARGET_SPEED_VALUE )
11021105 self .expect_led_color = 'red'
11031106
@@ -1106,7 +1109,8 @@ def mock_under_speed(self):
11061109 Change the mocked FAN speed to slower than target speed and exceed speed tolerance.
11071110 :return:
11081111 """
1109- self .fan_data .mock_speed (AbnormalFanMocker .TARGET_SPEED_VALUE * (100 - AbnormalFanMocker .SPEED_TOLERANCE ) / 100 - 10 )
1112+ self .fan_data .mock_speed (
1113+ AbnormalFanMocker .TARGET_SPEED_VALUE * (100 - AbnormalFanMocker .SPEED_TOLERANCE ) / 100 - 10 )
11101114 self .fan_data .mock_target_speed (AbnormalFanMocker .TARGET_SPEED_VALUE )
11111115 self .expect_led_color = 'red'
11121116
@@ -1237,7 +1241,7 @@ def mock_power_threshold(self, number_psus):
12371241 if not max_power :
12381242 power = int (self .mock_helper .read_value (self .PSU_POWER .format (i + 1 )))
12391243 # Round up to 100 watt and then double it to avoid noise when power fluctuate
1240- max_power = int (round (power / 100000000.0 )) * 100000000 * 2
1244+ max_power = int (round (power / 100000000.0 )) * 100000000 * 2
12411245 self .mock_helper .mock_value (self .PSU_POWER_CAPACITY .format (i + 1 ), max_power , True )
12421246
12431247 # Also mock ambient temperatures
@@ -1273,3 +1277,25 @@ def read_port_ambient_thermal(self):
12731277
12741278 def read_fan_ambient_thermal (self ):
12751279 return int (self .mock_helper .read_value (self .FAN_AMBIENT_TEMP ))
1280+
1281+
1282+ @mocker ('RebootCauseMocker' )
1283+ class RebootCauseMocker (object ):
1284+ RESET_RELOAD_BIOS = '/var/run/hw-management/system/reset_reload_bios'
1285+ RESET_FROM_COMEX = '/var/run/hw-management/system/reset_from_comex'
1286+ RESET_FROM_ASIC = '/var/run/hw-management/system/reset_from_asic'
1287+
1288+ def __init__ (self , dut ):
1289+ self .mock_helper = MockerHelper (dut )
1290+
1291+ def deinit (self ):
1292+ self .mock_helper .deinit ()
1293+
1294+ def mock_reset_reload_bios (self ):
1295+ self .mock_helper .mock_value (self .RESET_RELOAD_BIOS , 1 )
1296+
1297+ def mock_reset_from_comex (self ):
1298+ self .mock_helper .mock_value (self .RESET_FROM_COMEX , 1 )
1299+
1300+ def mock_reset_from_asic (self ):
1301+ self .mock_helper .mock_value (self .RESET_FROM_ASIC , 1 )
0 commit comments