Exemplo n.º 1
0
    def NewFileObject(self, resolver_context):
        """Creates a new file-like object.

    Args:
      resolver_context (Context): resolver context.

    Returns:
      FileIO: file-like object.
    """
        return lvm_file_io.LVMFile(resolver_context)
Exemplo n.º 2
0
    def testOpenClose(self):
        """Test the open and close functionality."""
        path_spec = lvm_path_spec.LVMPathSpec(parent=self._qcow_path_spec,
                                              volume_index=0)
        file_object = lvm_file_io.LVMFile(self._resolver_context)

        file_object.open(path_spec=path_spec)
        self.assertEqual(file_object.get_size(), 4194304)
        file_object.close()

        path_spec = lvm_path_spec.LVMPathSpec(parent=self._qcow_path_spec,
                                              volume_index=9)
        file_object = lvm_file_io.LVMFile(self._resolver_context)

        with self.assertRaises(errors.PathSpecError):
            file_object.open(path_spec=path_spec)

        path_spec = lvm_path_spec.LVMPathSpec(location='/lvm1',
                                              parent=self._qcow_path_spec)
        file_object = lvm_file_io.LVMFile(self._resolver_context)

        file_object.open(path_spec=path_spec)
        self.assertEqual(file_object.get_size(), 4194304)
        file_object.close()

        path_spec = lvm_path_spec.LVMPathSpec(location='/lvm0',
                                              parent=self._qcow_path_spec)
        file_object = lvm_file_io.LVMFile(self._resolver_context)

        with self.assertRaises(errors.PathSpecError):
            file_object.open(path_spec=path_spec)

        path_spec = lvm_path_spec.LVMPathSpec(location='/lvm9',
                                              parent=self._qcow_path_spec)
        file_object = lvm_file_io.LVMFile(self._resolver_context)

        with self.assertRaises(errors.PathSpecError):
            file_object.open(path_spec=path_spec)
Exemplo n.º 3
0
    def testRead(self):
        """Test the read functionality."""
        path_spec = lvm_path_spec.LVMPathSpec(parent=self._raw_path_spec,
                                              volume_index=0)
        file_object = lvm_file_io.LVMFile(self._resolver_context, path_spec)

        file_object.Open()
        self.assertEqual(file_object.get_size(), 4194304)

        file_object.seek(0x80400)

        expected_data = (
            b'This is a text file.\n\nWe should be able to parse it.\n')
        self.assertEqual(file_object.read(53), expected_data)
Exemplo n.º 4
0
    def testSeek(self):
        """Test the seek functionality."""
        path_spec = lvm_path_spec.LVMPathSpec(parent=self._qcow_path_spec,
                                              volume_index=0)
        file_object = lvm_file_io.LVMFile(self._resolver_context)

        file_object.open(path_spec=path_spec)
        self.assertEqual(file_object.get_size(), 4194304)

        file_object.seek(0x488)
        self.assertEqual(file_object.get_offset(), 0x00000488)
        self.assertEqual(file_object.read(11), b'/mnt/dfvfs\x00')
        self.assertEqual(file_object.get_offset(), 0x00000493)

        file_object.seek(-1047544, os.SEEK_END)
        self.assertEqual(file_object.get_offset(), 0x00300408)
        self.assertEqual(file_object.read(8), b'er,passw')
        self.assertEqual(file_object.get_offset(), 0x00300410)

        file_object.seek(3, os.SEEK_CUR)
        self.assertEqual(file_object.get_offset(), 0x00300413)
        self.assertEqual(file_object.read(7), b'\nbank,j')
        self.assertEqual(file_object.get_offset(), 0x0030041a)

        # Conforming to the POSIX seek the offset can exceed the file size
        # but reading will result in no data being returned.
        expected_offset = 4194304 + 100
        file_object.seek(expected_offset, os.SEEK_SET)
        self.assertEqual(file_object.get_offset(), expected_offset)
        self.assertEqual(file_object.read(20), b'')

        with self.assertRaises(IOError):
            file_object.seek(-10, os.SEEK_SET)

        # On error the offset should not change.
        self.assertEqual(file_object.get_offset(), expected_offset)

        with self.assertRaises(IOError):
            file_object.seek(10, 5)

        # On error the offset should not change.
        self.assertEqual(file_object.get_offset(), expected_offset)

        file_object.close()