コード例 #1
0
ファイル: vfs_test.py プロジェクト: avmi/grr
  def testOffsetAndLengthRestrictResult(self):
    args = vfs_plugin.ApiGetFileBlobArgs(
        client_id=self.client_id, file_path=self.file_path, offset=2, length=3)
    result = self.handler.Handle(args, context=self.context)

    self.assertTrue(hasattr(result, "GenerateContent"))
    self.assertEqual(next(result.GenerateContent()), b"odb")
コード例 #2
0
ファイル: vfs_test.py プロジェクト: avmi/grr
  def testNewestFileContentIsReturnedByDefault(self):
    args = vfs_plugin.ApiGetFileBlobArgs(
        client_id=self.client_id, file_path=self.file_path)
    result = self.handler.Handle(args, context=self.context)

    self.assertTrue(hasattr(result, "GenerateContent"))
    self.assertEqual(next(result.GenerateContent()), b"Goodbye World")
コード例 #3
0
    def testReturnsOlderVersionIfTimestampIsSupplied(self):
        args = vfs_plugin.ApiGetFileBlobArgs(client_id=self.client_id,
                                             file_path=self.file_path,
                                             timestamp=self.time_1)
        result = self.handler.Handle(args, context=self.context)

        self.assertTrue(hasattr(result, "GenerateContent"))
        self.assertEqual(next(result.GenerateContent()), b"Hello World")
コード例 #4
0
    def testVfsMethodsAreAccessChecked(self):
        args = api_vfs.ApiListFilesArgs(client_id=self.client_id)
        self.CheckMethodIsAccessChecked(self.router.ListFiles,
                                        "CheckClientAccess",
                                        args=args)

        args = api_vfs.ApiGetVfsFilesArchiveArgs(client_id=self.client_id)
        self.CheckMethodIsAccessChecked(self.router.GetVfsFilesArchive,
                                        "CheckClientAccess",
                                        args=args)

        args = api_vfs.ApiGetFileDetailsArgs(client_id=self.client_id)
        self.CheckMethodIsAccessChecked(self.router.GetFileDetails,
                                        "CheckClientAccess",
                                        args=args)

        args = api_vfs.ApiGetFileTextArgs(client_id=self.client_id)
        self.CheckMethodIsAccessChecked(self.router.GetFileText,
                                        "CheckClientAccess",
                                        args=args)

        args = api_vfs.ApiGetFileBlobArgs(client_id=self.client_id)
        self.CheckMethodIsAccessChecked(self.router.GetFileBlob,
                                        "CheckClientAccess",
                                        args=args)

        args = api_vfs.ApiGetFileVersionTimesArgs(client_id=self.client_id)
        self.CheckMethodIsAccessChecked(self.router.GetFileVersionTimes,
                                        "CheckClientAccess",
                                        args=args)

        args = api_vfs.ApiGetFileDownloadCommandArgs(client_id=self.client_id)
        self.CheckMethodIsAccessChecked(self.router.GetFileDownloadCommand,
                                        "CheckClientAccess",
                                        args=args)

        args = api_vfs.ApiCreateVfsRefreshOperationArgs(
            client_id=self.client_id)
        self.CheckMethodIsAccessChecked(self.router.CreateVfsRefreshOperation,
                                        "CheckClientAccess",
                                        args=args)

        args = api_vfs.ApiGetVfsTimelineArgs(client_id=self.client_id)
        self.CheckMethodIsAccessChecked(self.router.GetVfsTimeline,
                                        "CheckClientAccess",
                                        args=args)

        args = api_vfs.ApiGetVfsTimelineAsCsvArgs(client_id=self.client_id)
        self.CheckMethodIsAccessChecked(self.router.GetVfsTimelineAsCsv,
                                        "CheckClientAccess",
                                        args=args)

        args = api_vfs.ApiUpdateVfsFileContentArgs(client_id=self.client_id)
        self.CheckMethodIsAccessChecked(self.router.UpdateVfsFileContent,
                                        "CheckClientAccess",
                                        args=args)
コード例 #5
0
ファイル: vfs_test.py プロジェクト: avmi/grr
  def testRaisesOnNonExistentPath(self):
    args = vfs_plugin.ApiGetFileBlobArgs(
        client_id=self.client_id, file_path="fs/os/foo/bar")
    with self.assertRaises(vfs_plugin.FileNotFoundError) as context:
      self.handler.Handle(args, context=self.context)

    exception = context.exception
    self.assertEqual(exception.client_id, self.client_id)
    self.assertEqual(exception.path_type, rdf_objects.PathInfo.PathType.OS)
    self.assertCountEqual(exception.components, ["foo", "bar"])
コード例 #6
0
ファイル: vfs_test.py プロジェクト: avmi/grr
  def testRaisesOnExistingPathWithoutContent(self):
    path_info = rdf_objects.PathInfo.OS(components=["foo", "bar"])
    data_store.REL_DB.WritePathInfos(self.client_id, [path_info])

    args = vfs_plugin.ApiGetFileBlobArgs(
        client_id=self.client_id, file_path="fs/os/foo/bar")

    with self.assertRaises(vfs_plugin.FileContentNotFoundError) as context:
      self.handler.Handle(args, context=self.context)

    exception = context.exception
    self.assertEqual(exception.client_id, self.client_id)
    self.assertEqual(exception.path_type, rdf_objects.PathInfo.PathType.OS)
    self.assertCountEqual(exception.components, ["foo", "bar"])
    self.assertIsNone(exception.timestamp)
コード例 #7
0
ファイル: vfs_test.py プロジェクト: avmi/grr
  def testLargeFileIsReturnedInMultipleChunks(self):
    chars = [b"a", b"b", b"x"]

    # Overwrite CHUNK_SIZE in handler for smaller test streams.
    self.handler.CHUNK_SIZE = 5

    client_path = db.ClientPath.OS(self.client_id,
                                   ["c", "Downloads", "huge.txt"])
    vfs_test_lib.CreateFile(
        client_path,
        content=b"".join([c * self.handler.CHUNK_SIZE for c in chars]))

    args = vfs_plugin.ApiGetFileBlobArgs(
        client_id=self.client_id, file_path="fs/os/c/Downloads/huge.txt")
    result = self.handler.Handle(args, context=self.context)

    self.assertTrue(hasattr(result, "GenerateContent"))
    for chunk, char in zip(result.GenerateContent(), chars):
      self.assertEqual(chunk, char * self.handler.CHUNK_SIZE)
コード例 #8
0
    def testLargeFileIsReturnedInMultipleChunks(self):
        chars = ["a", "b", "x"]
        huge_file_path = "fs/os/c/Downloads/huge.txt"

        # Overwrite CHUNK_SIZE in handler for smaller test streams.
        self.handler.CHUNK_SIZE = 5

        # Create a file that requires several chunks to load.
        with aff4.FACTORY.Create(self.client_id.Add(huge_file_path),
                                 aff4.AFF4MemoryStream,
                                 mode="w",
                                 token=self.token) as fd:
            for char in chars:
                fd.Write(char * self.handler.CHUNK_SIZE)

        args = vfs_plugin.ApiGetFileBlobArgs(client_id=self.client_id,
                                             file_path=huge_file_path)
        result = self.handler.Handle(args, token=self.token)

        self.assertTrue(hasattr(result, "GenerateContent"))
        for chunk, char in zip(result.GenerateContent(), chars):
            self.assertEqual(chunk, char * self.handler.CHUNK_SIZE)
コード例 #9
0
ファイル: vfs_test.py プロジェクト: avmi/grr
 def testRaisesIfFirstComponentNotInAllowlist(self):
   args = vfs_plugin.ApiGetFileBlobArgs(
       client_id=self.client_id, file_path="/analysis")
   with self.assertRaises(ValueError):
     self.handler.Handle(args, context=self.context)
コード例 #10
0
ファイル: vfs_test.py プロジェクト: avmi/grr
 def testRaisesOnRootPath(self):
   args = vfs_plugin.ApiGetFileBlobArgs(
       client_id=self.client_id, file_path="/")
   with self.assertRaises(ValueError):
     self.handler.Handle(args, context=self.context)
コード例 #11
0
ファイル: vfs_test.py プロジェクト: x35029/grr
 def testRaisesOnEmptyPath(self):
   args = vfs_plugin.ApiGetFileBlobArgs(client_id=self.client_id, file_path="")
   with self.assertRaises(ValueError):
     self.handler.Handle(args, token=self.token)