Example #1
0
    def testRead(self):
        """Test the read functionality."""
        test_path = self._GetTestFilePath(['syslog.gz'])
        self._SkipIfPathNotExists(test_path)

        test_file = gzipfile.GzipCompressedStream()

        test_os_path_spec = path_spec_factory.Factory.NewPathSpec(
            definitions.TYPE_INDICATOR_OS, location=test_path)
        file_object = resolver.Resolver.OpenFileObject(test_os_path_spec)

        test_file.Open(file_object)

        try:
            test_file.seek(167, os.SEEK_SET)

            self.assertEqual(test_file.get_offset(), 167)

            expected_data = (
                b'Jan 22 07:53:01 myhostname.myhost.com CRON[31051]: (root) CMD '
                b'(touch /var/run/crond.somecheck)\n')

            data = test_file.read(95)
            self.assertEqual(data, expected_data)

            self.assertEqual(test_file.get_offset(), 262)

        finally:
            test_file.close()
Example #2
0
    def testSeek(self):
        """Test the seek functionality."""
        test_path = self._GetTestFilePath(['syslog.gz'])
        self._SkipIfPathNotExists(test_path)

        test_file = gzipfile.GzipCompressedStream()

        test_os_path_spec = path_spec_factory.Factory.NewPathSpec(
            definitions.TYPE_INDICATOR_OS, location=test_path)
        file_object = resolver.Resolver.OpenFileObject(test_os_path_spec)

        test_file.Open(file_object)

        try:
            test_file.seek(177)
            self.assertEqual(test_file.read(5), b'53:01')

            self.assertEqual(test_file.get_offset(), 182)

            test_file.seek(-10, os.SEEK_END)
            self.assertEqual(test_file.read(5), b'times')

            test_file.seek(2, os.SEEK_CUR)
            self.assertEqual(test_file.read(2), b'--')

            # Conforming to the POSIX seek the offset can exceed the file size
            # but reading will result in no data being returned.
            test_file.seek(2000, os.SEEK_SET)
            self.assertEqual(test_file.get_offset(), 2000)
            self.assertEqual(test_file.read(2), b'')

            # Test with an invalid offset.
            with self.assertRaises(IOError):
                test_file.seek(-10, os.SEEK_SET)

            # On error the offset should not change.
            self.assertEqual(test_file.get_offset(), 2000)

            # Test with an invalid whence.
            with self.assertRaises(IOError):
                test_file.seek(10, 5)

            # On error the offset should not change.
            self.assertEqual(test_file.get_offset(), 2000)

        finally:
            test_file.close()
Example #3
0
    def testOpenClose(self):
        """Test the Open and Close functions."""
        test_path = self._GetTestFilePath(['syslog.gz'])
        self._SkipIfPathNotExists(test_path)

        test_file = gzipfile.GzipCompressedStream()

        test_os_path_spec = path_spec_factory.Factory.NewPathSpec(
            definitions.TYPE_INDICATOR_OS, location=test_path)
        file_object = resolver.Resolver.OpenFileObject(test_os_path_spec)

        test_file.Open(file_object)

        try:
            self.assertEqual(len(test_file.members), 1)

        finally:
            test_file.close()
Example #4
0
    def testReadCorrupt(self):
        """Tests reading a file that is corrupt."""
        # The corrupt gzip has no member footer.
        test_path = self._GetTestFilePath(['corrupt1.gz'])
        self._SkipIfPathNotExists(test_path)

        test_file = gzipfile.GzipCompressedStream()

        test_os_path_spec = path_spec_factory.Factory.NewPathSpec(
            definitions.TYPE_INDICATOR_OS, location=test_path)
        file_object = resolver.Resolver.OpenFileObject(test_os_path_spec)

        test_file.Open(file_object)

        try:
            self.assertEqual(test_file.uncompressed_data_size, 2994187)

        finally:
            test_file.close()
Example #5
0
  def _OpenFileObject(self, path_spec):
    """Opens the file-like object defined by path specification.

    Args:
      path_spec (PathSpec): path specification.

    Returns:
      pyvde.volume: gzip file-like object.

    Raises:
      PathSpecError: if the path specification is incorrect.
    """
    if not path_spec.HasParent():
      raise errors.PathSpecError(
          'Unsupported path specification without parent.')

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

    gzip_compressed_stream = gzipfile.GzipCompressedStream()
    gzip_compressed_stream.Open(file_object)

    return gzip_compressed_stream
Example #6
0
    def testReadMultipleMembers(self):
        """Tests reading a file that contains multiple gzip members."""
        test_path = self._GetTestFilePath(['fsevents_000000000000b208'])
        self._SkipIfPathNotExists(test_path)

        test_file = gzipfile.GzipCompressedStream()

        test_os_path_spec = path_spec_factory.Factory.NewPathSpec(
            definitions.TYPE_INDICATOR_OS, location=test_path)
        file_object = resolver.Resolver.OpenFileObject(test_os_path_spec)

        test_file.Open(file_object)

        try:
            self.assertEqual(len(test_file.members), 2)

            file_start = test_file.read(4)
            self.assertEqual(file_start, b'1SLD')

            # Read the end of the second member
            test_file.seek(506631 - 4)
            file_end = test_file.read(4)
            self.assertEqual(file_end, b'\x02\x00\x80\x00')

            # Seek backwards, and read across a member boundary.
            test_file.seek(28530)
            self.assertEqual(test_file.read(6), b'OS\x00P\x07\x00')

            # Read with a size greater than the file size.
            test_file.seek(0)
            data = test_file.read(size=506631 + 4)
            self.assertEqual(len(data), 506631)
            self.assertEqual(data[-4:], b'\x02\x00\x80\x00')

        finally:
            test_file.close()