#!/usr/bin/python2 from . import data_manager, mem_logger from picasso import Picasso from devices import mem import re import time from .common_fn import get_current_time class MemoryTester(object): def __init__(self, dialog_config): self.dialog_config = dialog_config self.test_stop_on_err = False self.thread_list = [] self.diag_ui = Picasso() def __str__(self): return 'Memory test' def start(self): dev_type = 'mem' module = data_manager._module_dict.get(dev_type, None) if not module: # mem_logger.info("Please run system scan first") print 'Please run system scan first.' return False if not module.scan_result: print ('Please fix issues reported by the System Scan first!') return False # Select test items test_memory_info_resp, test_memory_option_info = self.set_memory_test_items() if test_memory_info_resp is False: return False if re.search('Pattern', test_memory_option_info): # Pattern Test # Set memory test range test_range_resp, range_info = self.set_memory_test_range() if test_range_resp is False: return False test_pattern_resp, pattern_info = self.set_memory_test_pattern() if not test_pattern_resp: return False # update log name log_timestamp = "{}".format(time.strftime("%Y%m%d_%H%M%S")) mem_logger.update_log_name('MemoryPatternTest', log_timestamp) module.test('Pattern', range_info, pattern_info) elif re.search('Random', test_memory_option_info): # Random Test: # Set memory test range test_range_resp, range_info = self.set_memory_test_range() if test_range_resp is False: return False # update log name log_timestamp = "{}".format(time.strftime("%Y%m%d_%H%M%S")) mem_logger.update_log_name('MemoryRandomTest', log_timestamp) module.test('Random', range_info) elif re.search('NVDIMM', test_memory_option_info): # NVDIMM Test: dev_type = 'nvdimm' module = data_manager._module_dict.get(dev_type, None) # update log name log_timestamp = "{}".format(time.strftime("%Y%m%d_%H%M%S")) mem_logger.update_log_name('NVDIMMTest', log_timestamp) module.test() return True def stop(self): pass def set_memory_test_items(self): test_memory_option_resp, test_memory_option_info = self.diag_ui.show_dialog_from_file( self.dialog_config, 'test_menu') if (test_memory_option_resp == 'cancel' or test_memory_option_resp == 'esc'): return False, None return True, test_memory_option_info[1] def set_memory_test_range(self): test_range_resp, range_info = self.diag_ui.show_dialog_from_file( self.dialog_config, 'test_range') if (test_range_resp == 'cancel' or test_range_resp == 'esc'): return False, [] if ( int(range_info[0],16) < int(data_manager.mem_test_range[0], 16) or int(range_info[1],16) > int(data_manager.mem_test_range[1], 16) or int(range_info[0],16) > int(range_info[1],16)): print('Defined range out of scope!') return False, [] return True, range_info def set_memory_test_duration(self): test_duration_resp, duration_info = self.diag_ui.show_dialog_from_file( self.dialog_config, 'test_duration') if ((test_duration_resp == 'cancel') or (test_duration_resp == 'esc') or not duration_info.isdigit() or int(duration_info) <= 0): return False, None return True, duration_info def set_memory_test_pattern(self): test_pattern_resp, pattern_info = self.diag_ui.show_dialog_from_file( self.dialog_config, 'test_pattern') if ((test_pattern_resp == 'cancel') or (test_pattern_resp == 'esc')): return False, None if (len(pattern_info) > 16): print('Input length exceeds 16 digits(64bits) !' ) return False, None try: int(pattern_info, 16) except ValueError: print('Please input in hexadecimal') return False, None return True, pattern_info if __name__ == '__main__': mt = MemoryTester() mt.start()