def test_is_locked(self):
    """Tests the is_locked function."""
    if not unittest.source:
      raise unittest.SkipTest("missing source")

    with DataRangeFileObject(
        unittest.source, unittest.offset or 0, None) as file_object:

      fsapfs_container = pyfsapfs.container()
      fsapfs_container.open_file_object(file_object)

      _ = fsapfs_container.is_locked()

      fsapfs_container.close()

    if unittest.password:
      with DataRangeFileObject(
          unittest.source, unittest.offset or 0, None) as file_object:

        fsapfs_container = pyfsapfs.container()
        fsapfs_container.open_file_object(file_object)

        _ = fsapfs_container.is_locked()

        fsapfs_container.close()
    def test_open_close(self):
        """Tests the open and close functions."""
        if not unittest.source:
            return

        if unittest.offset:
            raise unittest.SkipTest("source defines offset")

        fsapfs_container = pyfsapfs.container()

        # Test open and close.
        fsapfs_container.open(unittest.source)
        fsapfs_container.close()

        # Test open and close a second time to validate clean up on close.
        fsapfs_container.open(unittest.source)
        fsapfs_container.close()

        if os.path.isfile(unittest.source):
            with open(unittest.source, "rb") as file_object:

                # Test open_file_object and close.
                fsapfs_container.open_file_object(file_object)
                fsapfs_container.close()

                # Test open_file_object and close a second time to validate clean up on close.
                fsapfs_container.open_file_object(file_object)
                fsapfs_container.close()

                # Test open_file_object and close and dereferencing file_object.
                fsapfs_container.open_file_object(file_object)
                del file_object
                fsapfs_container.close()
    def test_open_file_object(self):
        """Tests the open_file_object function."""
        if not unittest.source:
            raise unittest.SkipTest("missing source")

        if not os.path.isfile(unittest.source):
            raise unittest.SkipTest("source not a regular file")

        fsapfs_container = pyfsapfs.container()

        with DataRangeFileObject(unittest.source, unittest.offset or 0,
                                 None) as file_object:

            fsapfs_container.open_file_object(file_object)

            with self.assertRaises(IOError):
                fsapfs_container.open_file_object(file_object)

            fsapfs_container.close()

            # TODO: change IOError into TypeError
            with self.assertRaises(IOError):
                fsapfs_container.open_file_object(None)

            with self.assertRaises(ValueError):
                fsapfs_container.open_file_object(file_object, mode="w")
    def _Open(self, mode='rb'):
        """Opens the file system defined by path specification.

    Args:
      mode (Optional[str])): file access mode. The default is 'rb' read-only
          binary.

    Raises:
      AccessError: if the access to open the file was denied.
      IOError: if the file system object could not be opened.
      PathSpecError: if the path specification is incorrect.
      ValueError: if the path specification is invalid.
    """
        if not self._path_spec.HasParent():
            raise errors.PathSpecError(
                'Unsupported path specification without parent.')

        file_object = resolver.Resolver.OpenFileObject(
            self._path_spec.parent, resolver_context=self._resolver_context)

        fsapfs_container = pyfsapfs.container()
        fsapfs_container.open_file_object(file_object)

        self._file_object = file_object
        self._fsapfs_container = fsapfs_container
    def test_close(self):
        """Tests the close function."""
        if not unittest.source:
            raise unittest.SkipTest("missing source")

        fsapfs_container = pyfsapfs.container()

        with self.assertRaises(IOError):
            fsapfs_container.close()
    def test_get_number_of_volumes(self):
        """Tests the get_number_of_volumes function and number_of_volumes property."""
        if not unittest.source:
            raise unittest.SkipTest("missing source")

        fsapfs_container = pyfsapfs.container()

        with DataRangeFileObject(unittest.source, unittest.offset or 0,
                                 None) as file_object:

            fsapfs_container = pyfsapfs.container()
            fsapfs_container.open_file_object(file_object)

            number_of_volumes = fsapfs_container.get_number_of_volumes()
            self.assertIsNotNone(number_of_volumes)

            self.assertIsNotNone(fsapfs_container.number_of_volumes)

            fsapfs_container.close()
    def test_get_size(self):
        """Tests the get_size function and size property."""
        if not unittest.source:
            raise unittest.SkipTest("missing source")

        fsapfs_container = pyfsapfs.container()

        with DataRangeFileObject(unittest.source, unittest.offset or 0,
                                 None) as file_object:

            fsapfs_container = pyfsapfs.container()
            fsapfs_container.open_file_object(file_object)

            size = fsapfs_container.get_size()
            self.assertIsNotNone(size)

            self.assertIsNotNone(fsapfs_container.size)

            fsapfs_container.close()
    def test_is_locked(self):
        """Tests the is_locked function."""
        if not unittest.source:
            raise unittest.SkipTest("missing source")

        if unittest.offset:
            raise unittest.SkipTest("source defines offset")

        fsapfs_container = pyfsapfs.container()

        fsapfs_container.open(unittest.source)

        result = fsapfs_container.is_locked()
        self.assertTrue(result)

        fsapfs_container.close()
  def test_open(self):
    """Tests the open function."""
    if not unittest.source:
      raise unittest.SkipTest("missing source")

    if unittest.offset:
      raise unittest.SkipTest("source defines offset")

    fsapfs_container = pyfsapfs.container()
    fsapfs_container.open(unittest.source)

    with self.assertRaises(IOError):
      fsapfs_container.open(unittest.source)

    fsapfs_container.close()

    with self.assertRaises(TypeError):
      fsapfs_container.open(None)

    with self.assertRaises(ValueError):
      fsapfs_container.open(unittest.source, mode="w")
    def test_signal_abort(self):
        """Tests the signal_abort function."""
        fsapfs_container = pyfsapfs.container()

        fsapfs_container.signal_abort()