def get_virtual_paths_for_one_uid(self, root_uid: str = None) -> List[str]: ''' Get the virtual file path (vfp) of root_uid if argument set. If not, similar to :func:`get_root_uid` either return paths of `self.root_uid` or fall back to first uid of list of all root uids. :param root_uid: (Optional) root uid to get vfps for. :return: List of virtual paths. ''' file_paths = self.get_virtual_file_paths() req_root_uid = root_uid or self.root_uid if req_root_uid in file_paths: return file_paths[req_root_uid] return get_value_of_first_key(file_paths) # fallback
def get_virtual_paths_for_one_uid(self, root_uid=None): ''' returns the virtual path of root_uid if argument set if not: returns virtual path of self.root_uid if set else: return virtual_paths of first key ''' try: file_paths = self.get_virtual_file_paths() req_root_uid = root_uid or self.root_uid if req_root_uid is None: return get_value_of_first_key(file_paths) return file_paths[req_root_uid] except (AttributeError, IndexError, KeyError, TypeError): logging.error( 'Error on virtual file path retrieval. This should be fixed') return ["insufficient information: firmware analysis not complete"]
def get_virtual_paths_for_one_uid(self, root_uid=None): ''' returns the virtual path of root_uid if argument set if not: returns virtual path of self.root_uid if set else: return virtual_pathes of first key ''' try: file_paths = self.get_virtual_file_paths() if root_uid is not None: req_root_uid = root_uid else: req_root_uid = self.root_uid if req_root_uid is None: return get_value_of_first_key(file_paths) else: return file_paths[req_root_uid] except: return ["insufficient information: firmware analysis not complete"]
def generate_nice_list_data(db_iterable, root_uid): result = [] for db_entry in db_iterable: if db_entry is not None: virtual_file_path = db_entry['virtual_file_path'] result.append({ 'uid': db_entry['_id'], 'files_included': db_entry['files_included'], 'size': db_entry['size'], 'mime-type': db_entry['processed_analysis']['file_type']['mime'] if 'file_type' in db_entry['processed_analysis'] else 'file-type-plugin/not-run-yet', 'virtual_file_paths': virtual_file_path[root_uid] if root_uid in virtual_file_path else get_value_of_first_key(virtual_file_path) }) return result
TEST_FW_2 = create_test_firmware(device_class='test_class', device_name='test_firmware_2', vendor='test vendor', bin_path='container/test.7z') TEST_TEXT_FILE = create_test_file_object() NICE_LIST_DATA = { 'uid': TEST_FW.uid, 'files_included': TEST_FW.files_included, 'size': TEST_FW.size, 'mime-type': 'file-type-plugin/not-run-yet', 'current_virtual_path': get_value_of_first_key(TEST_FW.get_virtual_file_paths()) } class MockFileObject: def __init__(self, binary=b'test string', file_path='/bin/ls'): self.binary = binary self.file_path = file_path self.processed_analysis = { 'file_type': { 'mime': 'application/x-executable' } } class DatabaseMock: # pylint: disable=too-many-public-methods
def test_get_value_of_first_key(input_data, expected): assert get_value_of_first_key(input_data) == expected
def test_get_value_of_first_key(self): test_dict = {"b": "b", "c": "c", "a": "a"} self.assertEqual(get_value_of_first_key(test_dict), "a", "value not correct") self.assertEqual(get_value_of_first_key({}), None, "empty dict should result in None output")
def test_get_value_of_first_key(self): test_dict = {'b': 'b', 'c': 'c', 'a': 'a'} self.assertEqual(get_value_of_first_key(test_dict), 'a', 'value not correct') self.assertEqual(get_value_of_first_key({}), None, 'empty dict should result in None output')