Exemple #1
0
    def testExtractMetadata(self):
        def side_effect(*args):
            params = self._CreateRunQueryResultsFromValues(
                version_number='Chrome/36.9.7934.4',
                os_name='Android',
                architecture='x86_64',
                bitness='64',
                version_code='857854',
                modules=[{
                    'name': '/libmonochrome.so',
                    'build_id': '3284389AB83CD'
                }, {
                    'name': '/missing',
                    'build_id': 'AB3288CDE3283'
                }, {
                    'name': '/chrome.so',
                    'build_id': 'abcdef'
                }])
            return params[args]

        extractor = metadata_extractor.MetadataExtractor(
            self.trace_processor_path, self.trace_file)
        trace_processor.RunQuery = mock.MagicMock(side_effect=side_effect)
        extractor.Initialize()

        self.assertEqual(extractor.version_number, '36.9.7934.4')
        self.assertEqual(extractor.os_name, OSName.ANDROID)
        self.assertEqual(extractor.architecture, 'x86_64')
        self.assertEqual(extractor.bitness, '64')
        self.assertEqual(extractor.version_code, '857854')
        self.assertEqual(extractor.modules, {
            '/libmonochrome.so': '3284389AB83CD',
            '/chrome.so': 'ABCDEF'
        })
Exemple #2
0
    def testSubtreeNoFilesExtracted(self):
        # Setup subtree symbol files. No files to be extracted.
        symbol_files, side_effect_map = self._setupSubtreeFiles()

        # Empty set of module IDs to extract. Nothing should be extracted.
        metadata = metadata_extractor.MetadataExtractor(
            'trace_processor_shell', 'trace_file.proto')
        metadata.InitializeForTesting(modules={})

        # Setup |_RunDumpSyms| mock for module ID optimization.
        breakpad_file_extractor._RunDumpSyms = mock.MagicMock(
            side_effect=self._mockDumpSyms(side_effect_map))
        exception_msg = (
            'No breakpad symbols could be extracted from files in the subtree: '
            + self.test_breakpad_dir)
        with self.assertRaises(Exception) as e:
            breakpad_file_extractor.ExtractBreakpadOnSubtree(
                self.test_breakpad_dir, metadata, self.test_dump_syms_binary)
        self.assertIn(exception_msg, str(e.exception))

        # Should be calls to extract module ID, but none to extract breakpad.
        expected_module_calls = self._getExpectedModuleExtractionCalls(
            symbol_files)
        breakpad_file_extractor._RunDumpSyms.assert_has_calls(
            expected_module_calls, any_order=True)
Exemple #3
0
    def testExtractOnSubtree(self):
        # Setup subtree symbol files.
        symbol_files, side_effect_map = self._setupSubtreeFiles()
        subdir_symbols = symbol_files[0]
        unstripped_symbols = symbol_files[1]

        # Setup metadata.
        metadata = metadata_extractor.MetadataExtractor(
            'trace_processor_shell', 'trace_file.proto')
        metadata.InitializeForTesting(modules={
            '/subdir.so': '34984AB4EF948D',
            '/unstripped.so': '34984AB4EF948C'
        })
        extracted_files = [subdir_symbols, unstripped_symbols]

        # Setup |_RunDumpSyms| mock for module ID optimization.
        breakpad_file_extractor._RunDumpSyms = mock.MagicMock(
            side_effect=self._mockDumpSyms(side_effect_map))
        breakpad_file_extractor.ExtractBreakpadOnSubtree(
            self.test_breakpad_dir, metadata, self.test_dump_syms_binary)

        # Ensure correct |_RunDumpSyms| calls.
        expected_module_calls = self._getExpectedModuleExtractionCalls(
            symbol_files)

        breakpad_files = self._getAndEnsureExpectedSubtreeBreakpadFiles(
            extracted_files)
        expected_extract_calls = self._getExpectedBreakpadExtractionCalls(
            extracted_files, breakpad_files)

        breakpad_file_extractor._RunDumpSyms.assert_has_calls(
            expected_module_calls + expected_extract_calls, any_order=True)
Exemple #4
0
 def testGetModuleIds(self):
     extractor = metadata_extractor.MetadataExtractor(
         self.trace_processor_path, self.trace_file)
     extractor.InitializeForTesting(modules={
         'name': '13423EDFAB2',
         'name2': '321468945',
         'name3': '4093492737482'
     })
     self.assertEqual(extractor.GetModuleIds(),
                      {'13423EDFAB2', '321468945', '4093492737482'})
Exemple #5
0
    def testParseOSNameFuschia(self):
        def side_effect(*args):
            params = self._CreateRunQueryResultsFromValues(os_name='Fuschia')
            return params[args]

        extractor = metadata_extractor.MetadataExtractor(
            self.trace_processor_path, self.trace_file)
        trace_processor.RunQuery = mock.MagicMock(side_effect=side_effect)
        extractor.Initialize()

        self.assertEqual(extractor.os_name, OSName.FUSCHIA)
Exemple #6
0
    def testExtractMetadataVersionNumberParsed(self):
        def side_effect(*args):
            params = self._CreateRunQueryResultsFromValues(
                version_number='36.9.7934.4')
            return params[args]

        extractor = metadata_extractor.MetadataExtractor(
            self.trace_processor_path, self.trace_file)
        trace_processor.RunQuery = mock.MagicMock(side_effect=side_effect)
        extractor.Initialize()

        self.assertEqual(extractor.version_number, '36.9.7934.4')
 def _createMetadataExtractor(self,
                              version_number=None,
                              os_name=None,
                              architecture=None,
                              bitness=None,
                              version_code=None,
                              modules=None):
   metadata = metadata_extractor.MetadataExtractor(self.trace_processor_path,
                                                   self.trace_file)
   metadata.InitializeForTesting(version_number, os_name, architecture,
                                 bitness, version_code, modules)
   return metadata
Exemple #8
0
    def testParseOSNameNotRecognized(self):
        def side_effect(*args):
            params = self._CreateRunQueryResultsFromValues(os_name='blah')
            return params[args]

        extractor = metadata_extractor.MetadataExtractor(
            self.trace_processor_path, self.trace_file)
        trace_processor.RunQuery = mock.MagicMock(side_effect=side_effect)

        exception_msg = 'OS name "blah" not recognized: ' + self.trace_file
        with self.assertRaises(Exception) as context:
            extractor.Initialize()
        self.assertEqual(exception_msg, str(context.exception))
Exemple #9
0
    def testParseMac64(self):
        def side_effect(*args):
            params = self._CreateRunQueryResultsFromValues(
                os_name='Mac OS X', version_number='Chrome/28.9.9364.32-64')
            return params[args]

        extractor = metadata_extractor.MetadataExtractor(
            self.trace_processor_path, self.trace_file)
        trace_processor.RunQuery = mock.MagicMock(side_effect=side_effect)
        extractor.Initialize()

        self.assertEqual(extractor.version_number, '28.9.9364.32')
        self.assertEqual(extractor.os_name, OSName.MAC)
Exemple #10
0
    def testExtractMetadataEmptyList(self):
        def side_effect(*args):
            params = self._CreateRunQueryResults()
            return params[args]

        extractor = metadata_extractor.MetadataExtractor(
            self.trace_processor_path, self.trace_file)
        trace_processor.RunQuery = mock.MagicMock(side_effect=side_effect)
        extractor.Initialize()

        self.assertEqual(extractor.version_number, None)
        self.assertEqual(extractor.os_name, None)
        self.assertEqual(extractor.architecture, None)
        self.assertEqual(extractor.bitness, None)
        self.assertEqual(extractor.version_code, None)
        self.assertEqual(extractor.modules, None)
Exemple #11
0
    def testExtractMetadataValuesNull(self):
        def side_effect(*args):
            params = self._CreateRunQueryResultsFromValues(
                modules=[{
                    'name': None,
                    'build_id': None
                }, {
                    'name': None,
                    'build_id': None
                }])
            return params[args]

        extractor = metadata_extractor.MetadataExtractor(
            self.trace_processor_path, self.trace_file)
        trace_processor.RunQuery = mock.MagicMock(side_effect=side_effect)
        extractor.Initialize()

        self.assertEqual(extractor.version_number, None)
        self.assertEqual(extractor.os_name, None)
        self.assertEqual(extractor.architecture, None)
        self.assertEqual(extractor.bitness, None)
        self.assertEqual(extractor.version_code, None)
        self.assertEqual(extractor.modules, None)
Exemple #12
0
 def testGetModuleIdsNone(self):
     extractor = metadata_extractor.MetadataExtractor(
         self.trace_processor_path, self.trace_file)
     extractor.InitializeForTesting(modules=None)
     self.assertEqual(extractor.GetModuleIds(), None)