File: manager.py

package info (click to toggle)
dfvfs 20240505-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 475,508 kB
  • sloc: python: 36,533; vhdl: 1,922; sh: 448; xml: 52; makefile: 16
file content (109 lines) | stat: -rw-r--r-- 3,950 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Tests for the Virtual File System (VFS) mount point manager."""

import platform
import unittest

from dfvfs.lib import definitions
from dfvfs.lib import errors
from dfvfs.mount import manager
from dfvfs.path import factory as path_spec_factory
from dfvfs.resolver import context
from dfvfs.resolver import resolver

from tests import test_lib as shared_test_lib


class MountPointManagerTest(shared_test_lib.BaseTestCase):
  """Class to test the mount point manager."""

  def setUp(self):
    """Sets up the needed objects used throughout the test."""
    test_path = self._GetTestFilePath(['ext2.qcow2'])
    self._SkipIfPathNotExists(test_path)

    self._resolver_context = context.Context()

    test_os_path_spec = path_spec_factory.Factory.NewPathSpec(
        definitions.TYPE_INDICATOR_OS, location=test_path)
    self._qcow_path_spec = path_spec_factory.Factory.NewPathSpec(
        definitions.TYPE_INDICATOR_QCOW, parent=test_os_path_spec)

  def testGetMountPoint(self):
    """Function to test the get mount point function."""
    manager.MountPointManager.RegisterMountPoint('C', self._qcow_path_spec)

    try:
      mount_point_path_spec = manager.MountPointManager.GetMountPoint('C')
      self.assertEqual(mount_point_path_spec, self._qcow_path_spec)

      mount_point_path_spec = manager.MountPointManager.GetMountPoint('D')
      self.assertIsNone(mount_point_path_spec)

    finally:
      manager.MountPointManager.DeregisterMountPoint('C')

  def testOpenFileObjectOnDirectory(self):
    """Function to test mount point resolving on a directory."""
    test_path = self._GetTestFilePath(['testdir_os'])
    self._SkipIfPathNotExists(test_path)

    if platform.system() == 'Windows':
      test_mounted_location = '\\file1.txt'
    else:
      test_mounted_location = '/file1.txt'

    test_os_path_spec = path_spec_factory.Factory.NewPathSpec(
        definitions.TYPE_INDICATOR_OS, location=test_path)

    manager.MountPointManager.RegisterMountPoint(
        'testdir_os', test_os_path_spec)

    try:
      parent_path_spec = path_spec_factory.Factory.NewPathSpec(
          definitions.TYPE_INDICATOR_MOUNT, identifier='testdir_os')
      path_spec = path_spec_factory.Factory.NewPathSpec(
          definitions.TYPE_INDICATOR_OS, location=test_mounted_location,
          parent=parent_path_spec)
      file_object = resolver.Resolver.OpenFileObject(
          path_spec, resolver_context=self._resolver_context)

      self.assertIsNotNone(file_object)
      self.assertEqual(file_object.get_size(), 6)

    finally:
      manager.MountPointManager.DeregisterMountPoint('testdir_os')

  def testOpenFileObjectOnImage(self):
    """Function to test mount point resolving on a storage media image."""
    manager.MountPointManager.RegisterMountPoint('C', self._qcow_path_spec)

    try:
      parent_path_spec = path_spec_factory.Factory.NewPathSpec(
          definitions.TYPE_INDICATOR_MOUNT, identifier='C')
      path_spec = path_spec_factory.Factory.NewPathSpec(
          definitions.PREFERRED_EXT_BACK_END, location='/passwords.txt',
          parent=parent_path_spec)
      file_object = resolver.Resolver.OpenFileObject(
          path_spec, resolver_context=self._resolver_context)

      self.assertIsNotNone(file_object)
      self.assertEqual(file_object.get_size(), 116)

      parent_path_spec = path_spec_factory.Factory.NewPathSpec(
          definitions.TYPE_INDICATOR_MOUNT, identifier='D')
      path_spec = path_spec_factory.Factory.NewPathSpec(
          definitions.PREFERRED_EXT_BACK_END, location='/passwords.txt',
          parent=parent_path_spec)

      with self.assertRaises(errors.MountPointError):
        file_object = resolver.Resolver.OpenFileObject(
            path_spec, resolver_context=self._resolver_context)

    finally:
      manager.MountPointManager.DeregisterMountPoint('C')


if __name__ == '__main__':
  unittest.main()