def pyvmdk_test_multi_open_close_file(filename, mode): print( "Testing multi open close of: {0:s} with access: {1:s}\t".format( filename, get_mode_string(mode)), end="") result = True try: vmdk_handle = pyvmdk.handle() vmdk_handle.open(filename, mode) vmdk_handle.close() vmdk_handle.open(filename, mode) vmdk_handle.close() except Exception as exception: error_string = str(exception) result = False if not result: print("(FAIL)") else: print("(PASS)") if error_string: print(error_string) return result
def pyvmdk_test_single_open_close_file_object_with_dereference(filename, mode): print(("Testing single open close of file-like object with dereference " "of: {0:s} with access: {1:s}\t").format(filename, get_mode_string(mode)), end="") result = True try: file_object = open(filename, "rb") vmdk_handle = pyvmdk.handle() vmdk_handle.open_file_object(file_object, mode) del file_object vmdk_handle.close() except Exception as exception: error_string = str(exception) result = False if not result: print("(FAIL)") else: print("(PASS)") if error_string: print(error_string) return result
def pyvmdk_test_single_open_close_file_object_with_dereference( filename, mode): print( ("Testing single open close of file-like object with dereference " "of: {0:s} with access: {1:s}\t").format( filename, get_mode_string(mode)), end="") result = True try: file_object = open(filename, "rb") vmdk_handle = pyvmdk.handle() vmdk_handle.open_file_object(file_object, mode) del file_object vmdk_handle.close() except Exception as exception: error_string = str(exception) result = False if not result: print("(FAIL)") else: print("(PASS)") if error_string: print(error_string) return result
def test_read_buffer_file_object(self): """Tests the read_buffer function on a file-like object.""" if not unittest.source: raise unittest.SkipTest("missing source") if not os.path.isfile(unittest.source): raise unittest.SkipTest("source not a regular file") with open(unittest.source, "rb") as file_object: vmdk_handle = pyvmdk.handle() vmdk_handle.open_file_object(file_object) extent_data_file_objects = [] for extent_descriptor in vmdk_handle.extent_descriptors: extend_data_file_path = os.path.join( os.path.dirname(unittest.source), extent_descriptor.filename) extend_data_file_object = open(extend_data_file_path, "rb") extent_data_file_objects.append(extend_data_file_object) vmdk_handle.open_extent_data_files_as_file_objects( extent_data_file_objects) media_size = vmdk_handle.get_media_size() # Test normal read. data = vmdk_handle.read_buffer(size=4096) self.assertIsNotNone(data) self.assertEqual(len(data), min(media_size, 4096)) vmdk_handle.close() for extend_data_file_object in extent_data_file_objects: extend_data_file_object.close()
def test_read_buffer_at_offset(self): """Tests the read_buffer_at_offset function.""" if not unittest.source: return vmdk_handle = pyvmdk.handle() vmdk_handle.open(unittest.source) file_size = vmdk_handle.get_size() # Test normal read. data = vmdk_handle.read_buffer_at_offset(4096, 0) self.assertIsNotNone(data) self.assertEqual(len(data), min(file_size, 4096)) # Test read beyond file size. if file_size > 16: data = vmdk_handle.read_buffer_at_offset(4096, file_size - 16) self.assertIsNotNone(data) self.assertEqual(len(data), 16) with self.assertRaises(ValueError): vmdk_handle.read_buffer_at_offset(-1, 0) with self.assertRaises(ValueError): vmdk_handle.read_buffer_at_offset(4096, -1) vmdk_handle.close() # Test the read without open. with self.assertRaises(IOError): vmdk_handle.read_buffer_at_offset(4096, 0)
def test_open_close(self): """Tests the open and close functions.""" if not unittest.source: return vmdk_handle = pyvmdk.handle() # Test open and close. vmdk_handle.open(unittest.source) vmdk_handle.close() # Test open and close a second time to validate clean up on close. vmdk_handle.open(unittest.source) vmdk_handle.close() file_object = open(unittest.source, "rb") # Test open_file_object and close. vmdk_handle.open_file_object(file_object) vmdk_handle.close() # Test open_file_object and close a second time to validate clean up on close. vmdk_handle.open_file_object(file_object) vmdk_handle.close() # Test open_file_object and close and dereferencing file_object. vmdk_handle.open_file_object(file_object) del file_object vmdk_handle.close()
def test_open_file_object(self): """Tests the open_file_object function.""" test_source = unittest.source if not test_source: raise unittest.SkipTest("missing source") if not os.path.isfile(test_source): raise unittest.SkipTest("source not a regular file") vmdk_handle = pyvmdk.handle() with open(test_source, "rb") as file_object: vmdk_handle.open_file_object(file_object) with self.assertRaises(IOError): vmdk_handle.open_file_object(file_object) vmdk_handle.close() with self.assertRaises(TypeError): vmdk_handle.open_file_object(None) with self.assertRaises(ValueError): vmdk_handle.open_file_object(file_object, mode="w")
def test_open_close(self): """Tests the open and close functions.""" test_source = unittest.source if not test_source: return vmdk_handle = pyvmdk.handle() # Test open and close. vmdk_handle.open(test_source) vmdk_handle.close() # Test open and close a second time to validate clean up on close. vmdk_handle.open(test_source) vmdk_handle.close() if os.path.isfile(test_source): with open(test_source, "rb") as file_object: # Test open_file_object and close. vmdk_handle.open_file_object(file_object) vmdk_handle.close() # Test open_file_object and close a second time to validate clean up on close. vmdk_handle.open_file_object(file_object) vmdk_handle.close() # Test open_file_object and close and dereferencing file_object. vmdk_handle.open_file_object(file_object) del file_object vmdk_handle.close()
def test_seek_offset(self): """Tests the seek_offset function.""" test_source = unittest.source if not test_source: raise unittest.SkipTest("missing source") vmdk_handle = pyvmdk.handle() vmdk_handle.open(test_source) vmdk_handle.open_extent_data_files() media_size = vmdk_handle.get_media_size() vmdk_handle.seek_offset(16, os.SEEK_SET) offset = vmdk_handle.get_offset() self.assertEqual(offset, 16) vmdk_handle.seek_offset(16, os.SEEK_CUR) offset = vmdk_handle.get_offset() self.assertEqual(offset, 32) vmdk_handle.seek_offset(-16, os.SEEK_CUR) offset = vmdk_handle.get_offset() self.assertEqual(offset, 16) if media_size > 16: vmdk_handle.seek_offset(-16, os.SEEK_END) offset = vmdk_handle.get_offset() self.assertEqual(offset, media_size - 16) vmdk_handle.seek_offset(16, os.SEEK_END) offset = vmdk_handle.get_offset() self.assertEqual(offset, media_size + 16) # TODO: change IOError into ValueError with self.assertRaises(IOError): vmdk_handle.seek_offset(-1, os.SEEK_SET) # TODO: change IOError into ValueError with self.assertRaises(IOError): vmdk_handle.seek_offset(-32 - media_size, os.SEEK_CUR) # TODO: change IOError into ValueError with self.assertRaises(IOError): vmdk_handle.seek_offset(-32 - media_size, os.SEEK_END) # TODO: change IOError into ValueError with self.assertRaises(IOError): vmdk_handle.seek_offset(0, -1) vmdk_handle.close() # Test the seek without open. with self.assertRaises(IOError): vmdk_handle.seek_offset(16, os.SEEK_SET)
def pyvmdk_test_multi_open_close_file(filename, mode): print("Testing multi open close of: {0:s} with access: {1:s}\t".format( filename, get_mode_string(mode)), end="") result = True try: vmdk_handle = pyvmdk.handle() vmdk_handle.open(filename, mode) vmdk_handle.close() vmdk_handle.open(filename, mode) vmdk_handle.close() except Exception as exception: error_string = str(exception) result = False if not result: print("(FAIL)") else: print("(PASS)") if error_string: print(error_string) return result
def GetImgInfoObjectForVMDK(path): vmdk_handle = pyvmdk.handle() vmdk_handle.open(path) base_directory = os.path.dirname(path) #vmdk_handle.open_extent_data_files() Broken in current version #20170226 OpenExtentDataFiles(vmdk_handle, base_directory) img_info = vmdk_Img_Info(vmdk_handle) return img_info
def pyvmdk_test_read_file(filename): vmdk_handle = pyvmdk.handle() vmdk_handle.open(filename, "r") vmdk_handle.open_extent_data_files() result = pyvmdk_test_read(vmdk_handle) vmdk_handle.close() return result
def test_seek_offset(self): """Tests the seek_offset function.""" if not unittest.source: return vmdk_handle = pyvmdk.handle() vmdk_handle.open(unittest.source) file_size = vmdk_handle.get_size() vmdk_handle.seek_offset(16, os.SEEK_SET) offset = vmdk_handle.get_offset() self.assertEqual(offset, 16) vmdk_handle.seek_offset(16, os.SEEK_CUR) offset = vmdk_handle.get_offset() self.assertEqual(offset, 32) vmdk_handle.seek_offset(-16, os.SEEK_CUR) offset = vmdk_handle.get_offset() self.assertEqual(offset, 16) vmdk_handle.seek_offset(-16, os.SEEK_END) offset = vmdk_handle.get_offset() self.assertEqual(offset, file_size - 16) vmdk_handle.seek_offset(16, os.SEEK_END) offset = vmdk_handle.get_offset() self.assertEqual(offset, file_size + 16) # TODO: change IOError into ValueError with self.assertRaises(IOError): vmdk_handle.seek_offset(-1, os.SEEK_SET) # TODO: change IOError into ValueError with self.assertRaises(IOError): vmdk_handle.seek_offset(-32 - file_size, os.SEEK_CUR) # TODO: change IOError into ValueError with self.assertRaises(IOError): vmdk_handle.seek_offset(-32 - file_size, os.SEEK_END) # TODO: change IOError into ValueError with self.assertRaises(IOError): vmdk_handle.seek_offset(0, -1) vmdk_handle.close() # Test the seek without open. with self.assertRaises(IOError): vmdk_handle.seek_offset(16, os.SEEK_SET)
def test_close(self): """Tests the close function.""" if not unittest.source: return vmdk_handle = pyvmdk.handle() with self.assertRaises(IOError): vmdk_handle.close()
def test_close(self): """Tests the close function.""" if not unittest.source: raise unittest.SkipTest("missing source") vmdk_handle = pyvmdk.handle() with self.assertRaises(IOError): vmdk_handle.close()
def pyvmdk_test_single_open_close_file(filename, mode): if not filename: filename_string = "None" else: filename_string = filename print( "Testing single open close of: {0:s} with access: {1:s}\t".format( filename_string, get_mode_string(mode)), end="") result = True try: vmdk_handle = pyvmdk.handle() vmdk_handle.open(filename, mode) vmdk_handle.close() except TypeError as exception: expected_message = ( "{0:s}: unsupported string object type.").format( "pyvmdk_handle_open") if not filename and str(exception) == expected_message: pass else: error_string = str(exception) result = False except ValueError as exception: expected_message = ( "{0:s}: unsupported mode: w.").format( "pyvmdk_handle_open") if mode != "w" or str(exception) != expected_message: error_string = str(exception) result = False except Exception as exception: error_string = str(exception) result = False if not result: print("(FAIL)") else: print("(PASS)") if error_string: print(error_string) return result
def test_get_offset(self): """Tests the get_offset function.""" if not unittest.source: raise unittest.SkipTest("missing source") vmdk_handle = pyvmdk.handle() vmdk_handle.open(unittest.source) vmdk_handle.open_extent_data_files() offset = vmdk_handle.get_offset() self.assertIsNotNone(offset) vmdk_handle.close()
def test_get_parent_filename(self): """Tests the get_parent_filename function and parent_filename property.""" if not unittest.source: raise unittest.SkipTest("missing source") vmdk_handle = pyvmdk.handle() vmdk_handle.open(unittest.source) _ = vmdk_handle.get_parent_filename() _ = vmdk_handle.parent_filename vmdk_handle.close()
def test_get_parent_content_identifier(self): """Tests the get_parent_content_identifier function and parent_content_identifier property.""" if not unittest.source: raise unittest.SkipTest("missing source") vmdk_handle = pyvmdk.handle() vmdk_handle.open(unittest.source) parent_content_identifier = vmdk_handle.get_parent_content_identifier() self.assertIsNotNone(parent_content_identifier) self.assertIsNotNone(vmdk_handle.parent_content_identifier) vmdk_handle.close()
def test_get_number_of_extents(self): """Tests the get_number_of_extents function and number_of_extents property.""" if not unittest.source: raise unittest.SkipTest("missing source") vmdk_handle = pyvmdk.handle() vmdk_handle.open(unittest.source) number_of_extents = vmdk_handle.get_number_of_extents() self.assertIsNotNone(number_of_extents) self.assertIsNotNone(vmdk_handle.number_of_extents) vmdk_handle.close()
def test_get_disk_type(self): """Tests the get_disk_type function and disk_type property.""" if not unittest.source: raise unittest.SkipTest("missing source") vmdk_handle = pyvmdk.handle() vmdk_handle.open(unittest.source) disk_type = vmdk_handle.get_disk_type() self.assertIsNotNone(disk_type) self.assertIsNotNone(vmdk_handle.disk_type) vmdk_handle.close()
def test_get_media_size(self): """Tests the get_media_size function and media_size property.""" if not unittest.source: raise unittest.SkipTest("missing source") vmdk_handle = pyvmdk.handle() vmdk_handle.open(unittest.source) media_size = vmdk_handle.get_media_size() self.assertIsNotNone(media_size) self.assertIsNotNone(vmdk_handle.media_size) vmdk_handle.close()
def pyvmdk_test_single_open_close_file(filename, mode): if not filename: filename_string = "None" else: filename_string = filename print("Testing single open close of: {0:s} with access: {1:s}\t".format( filename_string, get_mode_string(mode)), end="") result = True try: vmdk_handle = pyvmdk.handle() vmdk_handle.open(filename, mode) vmdk_handle.close() except TypeError as exception: expected_message = ("{0:s}: unsupported string object type." ).format("pyvmdk_handle_open") if not filename and str(exception) == expected_message: pass else: error_string = str(exception) result = False except ValueError as exception: expected_message = ( "{0:s}: unsupported mode: w.").format("pyvmdk_handle_open") if mode != "w" or str(exception) != expected_message: error_string = str(exception) result = False except Exception as exception: error_string = str(exception) result = False if not result: print("(FAIL)") else: print("(PASS)") if error_string: print(error_string) return result
def pyvmdk_test_seek_file_no_open(filename): print("Testing seek of offset without open:\n") vmdk_handle = pyvmdk.handle() result = False try: vmdk_handle.seek(0, os.SEEK_SET) except Exception as exception: print(str(exception)) result = True if not result: print("(FAIL)") else: print("(PASS)") return result
def pyvmdk_test_single_open_close_file_object(filename, mode): print ("Testing single open close of file-like object of: {0:s} with access: " "{1:s}\t").format(filename, get_mode_string(mode)) try: file_object = open(filename, mode) vmdk_handle = pyvmdk.handle() vmdk_handle.open_file_object(file_object, mode) vmdk_handle.close() except: print "(FAIL)" return False print "(PASS)" return True
def pyvmdk_test_multi_open_close_file(filename, mode): print "Testing multi open close of: {0:s} with access: {1:s}\t".format( filename, get_mode_string(mode)) try: vmdk_handle = pyvmdk.handle() vmdk_handle.open(filename, mode) vmdk_handle.close() vmdk_handle.open(filename, mode) vmdk_handle.close() except: print "(FAIL)" return False print "(PASS)" return True
def test_open(self): """Tests the open function.""" if not unittest.source: return vmdk_handle = pyvmdk.handle() vmdk_handle.open(unittest.source) with self.assertRaises(IOError): vmdk_handle.open(unittest.source) vmdk_handle.close() with self.assertRaises(TypeError): vmdk_handle.open(None) with self.assertRaises(ValueError): vmdk_handle.open(unittest.source, mode="w")
def pyvmdk_test_seek_file_object(filename): file_object = open(filename, "rb") vmdk_handle = pyvmdk.handle() vmdk_handle.open_file_object(file_object, "r") base_directory = os.path.dirname(filename) extent_data_files = [] for extent_descriptor in vmdk_handle.extent_descriptors: extent_data_filename = extent_descriptor.filename _, path_separator, filename = extent_data_filename.rpartition(u"/") if not path_separator: _, path_separator, filename = extent_data_filename.rpartition( u"\\") if not path_separator: filename = extent_data_filename extent_data_file_path = os.path.join(base_directory, filename) if not os.path.exists(extent_data_file_path): break extent_data_files.append(extent_data_file_path) if len(extent_data_files) != vmdk_handle.number_of_extents: print("Unable to locate all extent data files.\n") return False file_objects = [] for extent_data_file_path in extent_data_files: file_object = open(extent_data_file_path, "rb") file_objects.append(file_object) vmdk_handle.open_extent_data_files_file_objects(file_objects) result = pyvmdk_test_seek(vmdk_handle) vmdk_handle.close() return result
def test_read_buffer_file_object(self): """Tests the read_buffer function on a file-like object.""" if not unittest.source: return file_object = open(unittest.source, "rb") vmdk_handle = pyvmdk.handle() vmdk_handle.open_file_object(file_object) file_size = vmdk_handle.get_size() # Test normal read. data = vmdk_handle.read_buffer(size=4096) self.assertIsNotNone(data) self.assertEqual(len(data), min(file_size, 4096)) vmdk_handle.close()
def test_open(self): """Tests the open function.""" test_source = unittest.source if not test_source: raise unittest.SkipTest("missing source") vmdk_handle = pyvmdk.handle() vmdk_handle.open(test_source) with self.assertRaises(IOError): vmdk_handle.open(test_source) vmdk_handle.close() with self.assertRaises(TypeError): vmdk_handle.open(None) with self.assertRaises(ValueError): vmdk_handle.open(test_source, mode="w")
def pyvmdk_test_seek_file_object(filename): file_object = open(filename, "rb") vmdk_handle = pyvmdk.handle() vmdk_handle.open_file_object(file_object, "r") base_directory = os.path.dirname(filename) extent_data_files = [] for extent_descriptor in vmdk_handle.extent_descriptors: extent_data_filename = extent_descriptor.filename _, path_separator, filename = extent_data_filename.rpartition(u"/") if not path_separator: _, path_separator, filename = extent_data_filename.rpartition(u"\\") if not path_separator: filename = extent_data_filename extent_data_file_path = os.path.join(base_directory, filename) if not os.path.exists(extent_data_file_path): break extent_data_files.append(extent_data_file_path) if len(extent_data_files) != vmdk_handle.number_of_extents: print("Unable to locate all extent data files.\n") return False file_objects = [] for extent_data_file_path in extent_data_files: file_object = open(extent_data_file_path, "rb") file_objects.append(file_object) vmdk_handle.open_extent_data_files_file_objects(file_objects) result = pyvmdk_test_seek(vmdk_handle) vmdk_handle.close() return result
def pyvmdk_test_single_open_close_file_object(filename, mode): print(("Testing single open close of file-like object of: {0:s} " "with access: {1:s}\t").format(filename, get_mode_string(mode))) result = True try: file_object = open(filename, "rb") vmdk_handle = pyvmdk.handle() vmdk_handle.open_file_object(file_object, mode) vmdk_handle.close() except Exception as exception: print(str(exception)) result = False if not result: print("(FAIL)") else: print("(PASS)") return result
def pyvmdk_test_read_file_no_open(filename): print("Testing read of offset without open:\t", end="") vmdk_handle = pyvmdk.handle() error_string = "" result = False try: vmdk_handle.read(size=4096) except Exception as exception: error_string = str(exception) result = True if not result: print("(FAIL)") else: print("(PASS)") if error_string: print(error_string) return result
def pyvmdk_test_seek_file_no_open(filename): print("Testing seek of offset without open:\t", end="") vmdk_handle = pyvmdk.handle() error_string = "" result = False try: vmdk_handle.seek(0, os.SEEK_SET) except Exception as exception: error_string = str(exception) result = True if not result: print("(FAIL)") else: print("(PASS)") if error_string: print(error_string) return result
def extractFile2(imageFile, filenames): vmdk_handle = pyvmdk.handle() vmdk_handle.open(imageFile) vmdk_handle.open_extent_data_files() img_info = vmdk_Img_Info(vmdk_handle) partitionTable = pytsk3.Volume_Info(img_info) for partition in partitionTable: print partition.addr, partition.desc, "%ss(%s)" % ( partition.start, partition.start * 512), partition.len # try: if 'NTFS' in partition.desc: filesystemObject = pytsk3.FS_Info(img_info, offset=(partition.start * 512)) # except: # print "Partition has no supported file system" # continue print "File System Type Dectected ", filesystemObject.info.ftype directoryObject = filesystemObject.open_dir(path=dirPath) print "Directory:", dirPath outputPath = 'ex_differ_file' for filename in filenames: if not os.path.exists(outputPath): os.makedirs(outputPath) if not os.path.isdir(str(filename)): try: ex_path = ( '%s/%s' % (outputPath, os.path.basename(str(filename)))).replace( '//', '/') extractFile = open(ex_path, 'w') fileobject = filesystemObject.open(str(filename)) filedata = fileobject.read_random(0, fileobject.info.meta.size) extractFile.write(filedata) extractFile.close except IOError: print('cannot open', str(filename))
def test_open_file_object(self): """Tests the open_file_object function.""" if not unittest.source: return file_object = open(unittest.source, "rb") vmdk_handle = pyvmdk.handle() vmdk_handle.open_file_object(file_object) with self.assertRaises(IOError): vmdk_handle.open_file_object(file_object) vmdk_handle.close() # TODO: change IOError into TypeError with self.assertRaises(IOError): vmdk_handle.open_file_object(None) with self.assertRaises(ValueError): vmdk_handle.open_file_object(file_object, mode="w")
def pyvmdk_test_single_open_close_file(filename, mode): if not filename: filename_string = "None" else: filename_string = filename print "Testing single open close of: {0:s} with access: {1:s}\t".format( filename_string, get_mode_string(mode)) try: vmdk_handle = pyvmdk.handle() vmdk_handle.open(filename, mode) vmdk_handle.close() except TypeError, exception: if (not filename and exception.message == "pyvmdk_handle_open: unsupported string object type."): pass else: print "(FAIL)" return False
def _OpenFileObject(self, path_spec): """Opens the file-like object defined by path specification. Args: path_spec: the path specification (instance of path.PathSpec). Returns: A file-like object. Raises: IOError: if the file-like object could not be opened. PathSpecError: if the path specification is incorrect. """ if not path_spec.HasParent(): raise errors.PathSpecError( u'Unsupported path specification without parent.') parent_path_spec = path_spec.parent parent_location = getattr(parent_path_spec, u'location', None) if not parent_location: raise errors.PathSpecError( u'Unsupported parent path specification without location.') # Note that we cannot use pyvmdk's open_extent_data_files function # since it does not handle the file system abstraction dfvfs provides. file_system = resolver.Resolver.OpenFileSystem( parent_path_spec, resolver_context=self._resolver_context) file_object = resolver.Resolver.OpenFileObject( parent_path_spec, resolver_context=self._resolver_context) vmdk_handle = pyvmdk.handle() vmdk_handle.open_file_object(file_object) parent_location_path_segments = file_system.SplitPath(parent_location) extent_data_files = [] for extent_descriptor in vmdk_handle.extent_descriptors: extent_data_filename = extent_descriptor.filename _, path_separator, filename = extent_data_filename.rpartition(u'/') if not path_separator: _, path_separator, filename = extent_data_filename.rpartition(u'\\') if not path_separator: filename = extent_data_filename # The last parent location path segment contains the extent data filename. # Since we want to check if the next extent data file exists we remove # the previous one form the path segments list and add the new filename. # After that the path segments list can be used to create the location # string. parent_location_path_segments.pop() parent_location_path_segments.append(filename) extent_data_file_location = file_system.JoinPath( parent_location_path_segments) # Note that we don't want to set the keyword arguments when not used # because the path specification base class will check for unused # keyword arguments and raise. kwargs = path_spec_factory.Factory.GetProperties(parent_path_spec) kwargs[u'location'] = extent_data_file_location if parent_path_spec.parent is not None: kwargs[u'parent'] = parent_path_spec.parent extent_data_file_path_spec = path_spec_factory.Factory.NewPathSpec( parent_path_spec.type_indicator, **kwargs) if not file_system.FileEntryExistsByPathSpec(extent_data_file_path_spec): break extent_data_files.append(extent_data_file_path_spec) if len(extent_data_files) != vmdk_handle.number_of_extents: raise IOError(u'Unable to locate all extent data files.') file_objects = [] for extent_data_file_path_spec in extent_data_files: file_object = resolver.Resolver.OpenFileObject( extent_data_file_path_spec, resolver_context=self._resolver_context) file_objects.append(file_object) # TODO: add parent image support. vmdk_handle.open_extent_data_files_file_objects(file_objects) return vmdk_handle
def test_signal_abort(self): """Tests the signal_abort function.""" vmdk_handle = pyvmdk.handle() vmdk_handle.signal_abort()