更新UCD-API库及文档
This commit is contained in:
@@ -142,45 +142,25 @@ class DUTTests:
|
||||
- Make report after testing `make_report`.
|
||||
- Run test from file `run_from_file` - Not implemented. Will be added later.
|
||||
"""
|
||||
__DEFAULT_TEST_PARAMETERS = None
|
||||
|
||||
def __init__(self, dev_io: DeviceIO):
|
||||
self.__io = dev_io
|
||||
self.__opf_device = None
|
||||
self.__results = []
|
||||
self.__default_parameters = {}
|
||||
self.__test_groups = {}
|
||||
self.__parser = Parser()
|
||||
|
||||
self.__io.set_test_config(0)
|
||||
cfp_path = os.path.join(os.path.dirname(__file__), 'cfg')
|
||||
files = os.listdir(cfp_path)
|
||||
for file in files:
|
||||
try:
|
||||
if not os.path.isfile(os.path.join(cfp_path, file)):
|
||||
continue
|
||||
|
||||
with open(os.path.join(cfp_path, file), encoding='UTF-8') as cfg_json:
|
||||
json_obj = json.load(cfg_json)
|
||||
item_group = MergedTestGroups(int(json_obj.get('id'), 16))
|
||||
group_type = MERGED_GROUP_PARAMS_TYPE.get(item_group, None)
|
||||
|
||||
if group_type is None:
|
||||
continue
|
||||
|
||||
group_parameters_dict = {}
|
||||
for parameter in json_obj.get('descriptions'):
|
||||
group_parameters_dict[parameter["id"]] = parameter
|
||||
|
||||
self.__default_parameters[group_type] = group_type(group_parameters_dict)
|
||||
except ValueError:
|
||||
logging.info(
|
||||
f"[UniTAP] Failed to load {os.path.join(cfp_path, file)}.\n Value {int(json_obj.get('id'), 16)} is missing in MergedTestGroups.")
|
||||
|
||||
test_list = self.__io.get_test_list()
|
||||
|
||||
for test in test_list:
|
||||
test_id = test[0] & 0xFFFF
|
||||
group_id = TestGroupId(test[0] >> 16)
|
||||
try:
|
||||
group_id = TestGroupId(test[0] >> 16)
|
||||
except BaseException as e:
|
||||
logging.info(e)
|
||||
continue
|
||||
name = test[2]
|
||||
|
||||
if test[2].find(' / ') != -1:
|
||||
@@ -201,6 +181,49 @@ class DUTTests:
|
||||
|
||||
self.__test_groups[group_id]._add_new_test(Test(name=test_name, test_id=test_id))
|
||||
|
||||
@staticmethod
|
||||
def __enumerate_and_get_default_test_parameters():
|
||||
if DUTTests.__DEFAULT_TEST_PARAMETERS is None:
|
||||
DUTTests.__DEFAULT_TEST_PARAMETERS = {}
|
||||
|
||||
cfp_path = os.path.join(os.path.dirname(__file__), 'cfg')
|
||||
files = os.listdir(cfp_path)
|
||||
for file in files:
|
||||
try:
|
||||
if not os.path.isfile(os.path.join(cfp_path, file)):
|
||||
continue
|
||||
|
||||
with open(os.path.join(cfp_path, file), encoding='UTF-8') as cfg_json:
|
||||
json_obj = json.load(cfg_json)
|
||||
item_group = MergedTestGroups(int(json_obj.get('id'), 16))
|
||||
group_type = MERGED_GROUP_PARAMS_TYPE.get(item_group, None)
|
||||
|
||||
if group_type is None:
|
||||
continue
|
||||
|
||||
group_parameters_dict = {}
|
||||
for parameter in json_obj.get('descriptions'):
|
||||
group_parameters_dict[parameter["id"]] = parameter
|
||||
|
||||
DUTTests.__DEFAULT_TEST_PARAMETERS[group_type] = group_type(group_parameters_dict)
|
||||
except ValueError:
|
||||
logging.info(
|
||||
f"[UniTAP] Failed to load {os.path.join(cfp_path, file)}.\n Value {int(json_obj.get('id'), 16)} is missing in MergedTestGroups.")
|
||||
|
||||
return DUTTests.__DEFAULT_TEST_PARAMETERS
|
||||
|
||||
@staticmethod
|
||||
def __is_dsc_parameters_changed(param: Dp21SourceDUTTestParam):
|
||||
assert isinstance(param, Dp21SourceDUTTestParam)
|
||||
|
||||
result = []
|
||||
dsc_vm_params = vars(param.dsc_video_modes)
|
||||
for key in dsc_vm_params:
|
||||
vm_param_dict = vars(dsc_vm_params[key])
|
||||
result.append(any(vm_param_dict[param_key].is_modified for param_key in vm_param_dict))
|
||||
|
||||
return any(result)
|
||||
|
||||
def run(self, group_id: TestGroupId, test_id: int, params: Optional[DUTTestParameters] = None,
|
||||
print_fw_logs: bool = True, test_delay: int = 0) -> SubTestResultObject:
|
||||
"""
|
||||
@@ -234,8 +257,11 @@ class DUTTests:
|
||||
|
||||
if params is not None:
|
||||
params_list = get_param_list(params)
|
||||
if isinstance(params, Dp21SourceDUTTestParam) and not params.dsc_video_modes._Dp21AvailableDscVideoModes__is_config_changed:
|
||||
logging.warning("Detected that used didn't change new DSC config. Copy setting from video config.")
|
||||
|
||||
#
|
||||
# Backward compatibility with old config
|
||||
#
|
||||
if isinstance(params, Dp21SourceDUTTestParam):
|
||||
dsc_dp2_ci_remapper = {
|
||||
"TSI_DP20_SRCCTS_DSC_VMT_1920_1080_30": "TSI_DP20_SRCCTS_VMT_1920_1080_30",
|
||||
"TSI_DP20_SRCCTS_DSC_VMT_1920_1080_60": "TSI_DP20_SRCCTS_VMT_1920_1080_60",
|
||||
@@ -259,27 +285,33 @@ class DUTTests:
|
||||
"TSI_DP20_SRCCTS_DSC_VMT_10240_4320_60": "TSI_DP20_SRCCTS_VMT_10240_4320_60"
|
||||
}
|
||||
|
||||
for key in dsc_dp2_ci_remapper.keys():
|
||||
dst = next((obj for obj in params_list if obj.config_id_name == key), None)
|
||||
src = next((obj for obj in params_list if obj.config_id_name == dsc_dp2_ci_remapper[key]), None)
|
||||
if not DUTTests.__is_dsc_parameters_changed(params):
|
||||
logging.warn("Detected that user didn't change new DSC config. Copy setting from video config.")
|
||||
|
||||
if dst.default_value != src.default_value:
|
||||
logging.warn(f"DSC Config missmatch detected. Apply workaround: {key}:{hex(dst.default_value)}; {dsc_dp2_ci_remapper[key]}:{hex(src.default_value)}")
|
||||
dst.default_value = src.default_value
|
||||
for key in dsc_dp2_ci_remapper.keys():
|
||||
dst = next((obj for obj in params_list if obj.config_id_name == key), None)
|
||||
src = next((obj for obj in params_list if obj.config_id_name == dsc_dp2_ci_remapper[key]), None)
|
||||
|
||||
if dst.default_value != src.default_value:
|
||||
logging.warn(
|
||||
f"DSC Config missmatch detected. Apply workaround: {key}:{hex(dst.default_value)}; {dsc_dp2_ci_remapper[key]}:{hex(src.default_value)}")
|
||||
dst.default_value = src.default_value
|
||||
else:
|
||||
logging.warn(f"DSC Config modification detected. Skip workaround.")
|
||||
else:
|
||||
params_list = self.__default_parameters[merged_group_id]
|
||||
params_list = DUTTests.__enumerate_and_get_default_test_parameters()[merged_group_id]
|
||||
|
||||
for item in params_list:
|
||||
if group_id == TestGroupId.AUDIO_TEST and item.config_id_name == "TSI_REF1_FRAME_DATA":
|
||||
if isinstance(item.default_value, str) and os.path.exists(item.default_value):
|
||||
image_data = read_image_file(item.default_value)
|
||||
image_data, file_extension = read_image_file(item.default_value)
|
||||
if len(image_data) > 0:
|
||||
item.default_value = uicl_image_preparation(image_data, params)
|
||||
# It is assumed that the bin file already contains prepared data,
|
||||
# otherwise there is no way to determine whether additional conversion is required.
|
||||
item.default_value = uicl_image_preparation(image_data, params, file_extension == ".bin")
|
||||
elif isinstance(item, bytearray):
|
||||
# TODO: add 'bytearray' support
|
||||
item.default_value = uicl_image_preparation(item.default_value, params)
|
||||
item.default_value = uicl_image_preparation(item.default_value, params, False)
|
||||
|
||||
self.__io.set(item.config_id, item.default_value, dict_types.get(item.value_type),
|
||||
item.data_length)
|
||||
@@ -315,41 +347,51 @@ class DUTTests:
|
||||
result_obj.test_delay = test_delay
|
||||
|
||||
self.__results.append(result_obj)
|
||||
|
||||
|
||||
time.sleep(test_delay)
|
||||
|
||||
return copy.deepcopy(self.__results[-1])
|
||||
|
||||
def get_params_from_file(self, path: str) -> Tuple[TestGroupId, int, DUTTestParameters]:
|
||||
@staticmethod
|
||||
def get_params_from_file(path: str) -> Tuple[TestGroupId, int, DUTTestParameters]:
|
||||
"""
|
||||
Get test parameters from transferred file: td or json (not cdf).
|
||||
|
||||
Args:
|
||||
path ('str') - full path to config file
|
||||
"""
|
||||
self.__parser.set_file_name(path)
|
||||
group_id = self.__parser.detect_group()
|
||||
test_id = self.__parser.detect_test()
|
||||
parser = Parser()
|
||||
|
||||
parser.set_file_name(path)
|
||||
group_id = parser.detect_group()
|
||||
test_id = parser.detect_test()
|
||||
group_type = group_params_dict.get(group_id)
|
||||
params = self.__parser.parse(self.get_default_parameters(group_type))
|
||||
params = parser.parse(DUTTests.get_default_parameters(group_type))
|
||||
|
||||
return group_id, test_id, params
|
||||
|
||||
# TODO - add support parsing '.td' (other test groups) file extension
|
||||
|
||||
def get_params_from_cdf_file(self, path: str) -> DUTTestParameters:
|
||||
@staticmethod
|
||||
def get_params_from_cdf_file(path: str) -> DUTTestParameters:
|
||||
"""
|
||||
Get test parameters from transferred file: json (cdf).
|
||||
|
||||
Args:
|
||||
path ('str') - full path to config file
|
||||
"""
|
||||
self.__parser.set_file_name(path)
|
||||
group_id = self.__parser.detect_merged_group()
|
||||
|
||||
parser = Parser()
|
||||
|
||||
parser.set_file_name(path)
|
||||
group_id = parser.detect_merged_group()
|
||||
group_type = MERGED_GROUP_PARAMS_TYPE.get(group_id)
|
||||
params = self.__parser.parse(self.get_default_parameters(group_type))
|
||||
params = parser.parse(DUTTests.get_default_parameters(group_type))
|
||||
|
||||
return params
|
||||
|
||||
def get_default_parameters(self, group_type: Type[DUTTestParameters]) -> DUTTestParameters:
|
||||
@staticmethod
|
||||
def get_default_parameters(group_type: Type[DUTTestParameters]) -> DUTTestParameters:
|
||||
"""
|
||||
Get predefined (default) parameters of test group.
|
||||
|
||||
@@ -359,9 +401,9 @@ class DUTTests:
|
||||
Returns:
|
||||
object of `DUTTestParameters` type
|
||||
"""
|
||||
for group_id in self.__default_parameters.keys():
|
||||
if isinstance(self.__default_parameters.get(group_id), group_type):
|
||||
return copy.deepcopy(self.__default_parameters.get(group_id))
|
||||
for group_id in DUTTests.__enumerate_and_get_default_test_parameters().keys():
|
||||
if isinstance(DUTTests.__enumerate_and_get_default_test_parameters().get(group_id), group_type):
|
||||
return copy.deepcopy(DUTTests.__enumerate_and_get_default_test_parameters().get(group_id))
|
||||
raise ValueError(f"Group {group_type} is not available.")
|
||||
|
||||
def number_tests_in_group(self, group_id: TestGroupId) -> int:
|
||||
|
||||
Reference in New Issue
Block a user