Exemplo n.º 1
0
 def testDownloadHuntResultCollection(self):
   """Check we can download files references in HuntResultCollection."""
   # Create a collection with URNs to some files.
   fd = results.HuntResultCollection(self.collection_urn)
   with data_store.DB.GetMutationPool() as pool:
     fd.AddAsMessage(
         rdfvalue.RDFURN(self.out.Add("testfile1")),
         self.client_id,
         mutation_pool=pool)
     fd.AddAsMessage(
         rdf_client_fs.StatEntry(
             pathspec=rdf_paths.PathSpec(path="testfile2", pathtype="OS")),
         self.client_id,
         mutation_pool=pool)
     fd.AddAsMessage(
         rdf_file_finder.FileFinderResult(
             stat_entry=rdf_client_fs.StatEntry(
                 pathspec=rdf_paths.PathSpec(path="testfile5",
                                             pathtype="OS"))),
         self.client_id,
         mutation_pool=pool)
     fd.AddAsMessage(
         collectors.ArtifactFilesDownloaderResult(
             downloaded_file=rdf_client_fs.StatEntry(
                 pathspec=rdf_paths.PathSpec(path="testfile6",
                                             pathtype="OS"))),
         self.client_id,
         mutation_pool=pool)
   self._VerifyDownload()
Exemplo n.º 2
0
    def testExportsOriginalResultAnywayIfItIsNotStatEntry(self):
        result = collectors.ArtifactFilesDownloaderResult(
            original_result=export_test_lib.DataAgnosticConverterTestValue())

        converter = file.ArtifactFilesDownloaderResultConverter()
        converted = list(converter.Convert(self.metadata, result))

        # Test that something gets exported and that this something wasn't
        # produced by ArtifactFilesDownloaderResultConverter.
        self.assertLen(converted, 1)
        self.assertNotIsInstance(converted[0],
                                 file.ExportedArtifactFilesDownloaderResult)
Exemplo n.º 3
0
    def testIncludesFileStatEntryFoundPathspecIntoYieldedResult(self):
        result = collectors.ArtifactFilesDownloaderResult(
            original_result=self.file_stat,
            found_pathspec=self.file_stat.pathspec)

        converter = file.ArtifactFilesDownloaderResultConverter()
        converted = list(converter.Convert(self.metadata, result))

        downloader_exports = [
            v for v in converted
            if isinstance(v, file.ExportedArtifactFilesDownloaderResult)
        ]
        self.assertLen(downloader_exports, 1)
        self.assertEqual(downloader_exports[0].found_path, "/tmp/bar.exe")
Exemplo n.º 4
0
    def testIncludesRegistryStatEntryFoundPathspecIntoYieldedResult(self):
        result = collectors.ArtifactFilesDownloaderResult(
            original_result=self.registry_stat,
            found_pathspec=rdf_paths.PathSpec(path="foo", pathtype="OS"))

        converter = file.ArtifactFilesDownloaderResultConverter()
        converted = list(converter.Convert(self.metadata, result))

        downloader_exports = [
            v for v in converted
            if isinstance(v, file.ExportedArtifactFilesDownloaderResult)
        ]
        self.assertLen(downloader_exports, 1)
        self.assertEqual(downloader_exports[0].found_path, "foo")
Exemplo n.º 5
0
    def testExportsOriginalResultIfOriginalResultIsNotRegistryOrFileStatEntry(
            self):
        stat = rdf_client_fs.StatEntry(pathspec=rdf_paths.PathSpec(
            path="some/path", pathtype=rdf_paths.PathSpec.PathType.TMPFILE))
        result = collectors.ArtifactFilesDownloaderResult(original_result=stat)

        converter = file.ArtifactFilesDownloaderResultConverter()
        converted = list(converter.Convert(self.metadata, result))

        # Test that something gets exported and that this something wasn't
        # produced by ArtifactFilesDownloaderResultConverter.
        self.assertLen(converted, 1)
        self.assertNotIsInstance(converted[0],
                                 file.ExportedArtifactFilesDownloaderResult)
Exemplo n.º 6
0
  def testDownloadCollectionIgnoresArtifactResultsWithoutFiles(self):
    # Create a collection with URNs to some files.
    fd = sequential_collection.GeneralIndexedCollection(self.collection_urn)
    with data_store.DB.GetMutationPool() as pool:
      fd.Add(collectors.ArtifactFilesDownloaderResult(), mutation_pool=pool)

    with utils.TempDirectory() as tmpdir:
      export_utils.DownloadCollection(
          self.collection_urn,
          tmpdir,
          overwrite=True,
          dump_client_info=True,
          token=self.token,
          max_threads=2)
      expected_outdir = os.path.join(tmpdir, self.out.Path()[1:])
      self.assertFalse(os.path.exists(expected_outdir))
Exemplo n.º 7
0
 def _AddTestData(self, fd):
     with data_store.DB.GetMutationPool() as pool:
         fd.Add(rdfvalue.RDFURN(self.out.Add("testfile1")),
                mutation_pool=pool)
         fd.Add(rdf_client_fs.StatEntry(
             pathspec=rdf_paths.PathSpec(path="testfile2", pathtype="OS")),
                mutation_pool=pool)
         fd.Add(rdf_file_finder.FileFinderResult(
             stat_entry=rdf_client_fs.StatEntry(pathspec=rdf_paths.PathSpec(
                 path="testfile5", pathtype="OS"))),
                mutation_pool=pool)
         fd.Add(collectors.ArtifactFilesDownloaderResult(
             downloaded_file=rdf_client_fs.StatEntry(
                 pathspec=rdf_paths.PathSpec(path="testfile6",
                                             pathtype="OS"))),
                mutation_pool=pool)
Exemplo n.º 8
0
    def testYieldsOneResultForRegistryStatEntryIfNoPathspecsWereFound(self):
        result = collectors.ArtifactFilesDownloaderResult(
            original_result=self.registry_stat)

        converter = file.ArtifactFilesDownloaderResultConverter()
        converted = list(converter.Convert(self.metadata, result))

        downloader_exports = [
            v for v in converted
            if isinstance(v, file.ExportedArtifactFilesDownloaderResult)
        ]
        self.assertLen(downloader_exports, 1)
        self.assertEqual(downloader_exports[0].original_registry_key.type,
                         "REG_SZ")
        self.assertEqual(downloader_exports[0].original_registry_key.data,
                         b"C:\\Windows\\Sidebar.exe")
Exemplo n.º 9
0
  def testShowsGenerateArchiveButtonForArtifactDownloaderHunt(self):
    stat_entry = rdf_client_fs.StatEntry(
        pathspec=rdf_paths.PathSpec(
            path="/foo/bar", pathtype=rdf_paths.PathSpec.PathType.OS))
    values = [
        collectors.ArtifactFilesDownloaderResult(downloaded_file=stat_entry)
    ]

    self.CreateGenericHuntWithCollection(values=values)

    self.Open("/")
    self.Click("css=a[grrtarget=hunts]")
    self.Click("css=td:contains('GenericHunt')")
    self.Click("css=li[heading=Results]")

    self.WaitUntil(self.IsTextPresent,
                   "Files referenced in this collection can be downloaded")
Exemplo n.º 10
0
  def testShowsPerFileDownloadButtonForArtifactDownloaderHunt(self):
    stat_entry = rdf_client_fs.StatEntry(
        pathspec=rdf_paths.PathSpec(
            path="/foo/bar", pathtype=rdf_paths.PathSpec.PathType.OS))
    values = [
        collectors.ArtifactFilesDownloaderResult(downloaded_file=stat_entry)
    ]

    self.CreateGenericHuntWithCollection(values=values)

    self.Open("/")
    self.Click("css=a[grrtarget=hunts]")
    self.Click("css=td:contains('GenericHunt')")
    self.Click("css=li[heading=Results]")

    self.WaitUntil(
        self.IsElementPresent,
        "css=grr-results-collection button:has(span.glyphicon-download)")
Exemplo n.º 11
0
    def testYieldsOneResultAndOneOriginalValueForFileStatEntry(self):
        result = collectors.ArtifactFilesDownloaderResult(
            original_result=self.file_stat)

        converter = file.ArtifactFilesDownloaderResultConverter()
        converted = list(converter.Convert(self.metadata, result))

        default_exports = [
            v for v in converted
            if not isinstance(v, file.ExportedArtifactFilesDownloaderResult)
        ]
        self.assertLen(default_exports, 1)
        self.assertLen(default_exports, 1)

        downloader_exports = [
            v for v in converted
            if isinstance(v, file.ExportedArtifactFilesDownloaderResult)
        ]
        self.assertLen(downloader_exports, 1)
        self.assertEqual(downloader_exports[0].original_file.basename,
                         "bar.exe")