コード例 #1
0
    def test_everything_we_hoped_for_2(self, mocked_subprocess_module):
        config = self.get_basic_config()
        raw_crash = copy.copy(canonical_standard_raw_crash)
        raw_dumps = {config.dump_field: 'a_fake_dump.dump'}
        processed_crash = CDotDict()
        processed_crash.product = 'Firefox'
        processed_crash.os_name = 'Windows 386'
        processed_crash.cpu_name = 'x86'
        processed_crash.signature = 'EnterIon'
        processed_crash['json_dump.crashing_thread.frames'] = [
            DotDict({
                'not_module': 'not-a-module',
            }),
            DotDict({
                'module': 'a-module',
            })
        ]
        processor_meta = self.get_basic_processor_meta()

        mocked_subprocess_handle = (
            mocked_subprocess_module.Popen.return_value)
        mocked_subprocess_handle.stdout.read.return_value = ('EXTRA-SPECIAL')
        mocked_subprocess_handle.wait.return_value = 0

        rule = JitCrashCategorizeRule(config)

        # the call to be tested
        rule.act(raw_crash, raw_dumps, processed_crash, processor_meta)

        eq_(processor_meta.processor_notes, [])
        eq_(processed_crash.classifications.jit.category, 'EXTRA-SPECIAL')
        eq_(processed_crash.classifications.jit.category_return_code, 0)
コード例 #2
0
    def test_subprocess_fail(self, mocked_subprocess_module):
        config = self.get_basic_config()
        raw_crash = copy.copy(canonical_standard_raw_crash)
        raw_dumps = {config.dump_field: 'a_fake_dump.dump'}
        processed_crash = CDotDict()
        processed_crash.product = 'Firefox'
        processed_crash.os_name = 'Windows 386'
        processed_crash.cpu_name = 'x86'
        processed_crash.signature = 'EnterBaseline'
        processed_crash['json_dump.crashing_thread.frames'] = [
            DotDict({'not_module': 'not-a-module'}),
            DotDict({'module': 'a-module'})
        ]
        processor_meta = self.get_basic_processor_meta()

        mocked_subprocess_handle = (
            mocked_subprocess_module.Popen.return_value)
        mocked_subprocess_handle.stdout.read.return_value = (None)
        mocked_subprocess_handle.wait.return_value = -1

        rule = JitCrashCategorizeRule(config)

        # the call to be tested
        rule.act(raw_crash, raw_dumps, processed_crash, processor_meta)

        assert processor_meta.processor_notes == []
        assert processed_crash.classifications.jit.category is None
        assert processed_crash.classifications.jit.category_return_code == -1
コード例 #3
0
    def test_success_all_types_of_signatures(self, mocked_subprocess_module):
        config = self.get_basic_config()
        raw_crash = copy.copy(canonical_standard_raw_crash)
        raw_dumps = {config.dump_field: 'a_fake_dump.dump'}
        base_processed_crash = CDotDict()
        base_processed_crash.product = 'Firefox'
        base_processed_crash.os_name = 'Windows 386'
        base_processed_crash.cpu_name = 'x86'
        base_processed_crash['json_dump.crashing_thread.frames'] = [
            DotDict({'not_module': 'not-a-module'}),
            DotDict({'module': 'a-module'})
        ]
        processor_meta = self.get_basic_processor_meta()

        mocked_subprocess_handle = (
            mocked_subprocess_module.Popen.return_value
        )
        mocked_subprocess_handle.stdout.read.return_value = (
            'EXTRA-SPECIAL'
        )
        mocked_subprocess_handle.wait.return_value = 0

        rule = JitCrashCategorizeRule(config)

        signatures = [
            'EnterBaseline',
            'moz::something | EnterBaseline',
            'EnterIon',
            'js::jit::FastInvoke',
            'Foo::Bar__js::jit::IonCannon',
            'Small | js::irregexp::ExecuteCode<T>',
        ]
        for signature in signatures:
            processed_crash = CDotDict(base_processed_crash)
            processed_crash.signature = signature

            # the call to be tested
            rule.act(raw_crash, raw_dumps, processed_crash, processor_meta)

            eq_(processor_meta.processor_notes, [])
            eq_(processed_crash.classifications.jit.category, 'EXTRA-SPECIAL')
            eq_(processed_crash.classifications.jit.category_return_code, 0)
コード例 #4
0
 def get_basic_config(self):
     config = CDotDict()
     config.logger = Mock()
     config.dump_field = 'upload_file_minidump'
     config.command_line = (
         JitCrashCategorizeRule.required_config.command_line.default)
     config.result_key = 'classifications.jit.category'
     config.return_code_key = 'classifications.jit.category_return_code'
     config.command_pathname = \
         '/data/socorro/stackwalk/bin/jit-crash-categorize'
     config.temporary_file_system_storage_path = '/tmp'
     return config
コード例 #5
0
 def get_basic_config(self):
     config = CDotDict()
     config.logger = Mock()
     config.dump_field = 'upload_file_minidump'
     config.command_line = (
         BreakpadStackwalkerRule2015.required_config.command_line.default)
     config.kill_timeout = 5
     config.command_pathname = '/bin/stackwalker'
     config.symbols_urls = 'https://localhost'
     config.symbol_cache_path = '/mnt/socorro/symbols'
     config.symbol_tmp_path = '/mnt/socorro/symbols'
     config.temporary_file_system_storage_path = '/tmp'
     return config
コード例 #6
0
    def test_dot_save(self):
        d = {}
        ExternalProcessRule.dot_save(d, 'x', 1)
        assert d['x'] == 1

        ExternalProcessRule.dot_save(d, 'z.y', 10)
        assert d['z']['y'] == 10

        d['a'] = {}
        d['a']['b'] = {}
        ExternalProcessRule.dot_save(d, 'a.b.c', 100)
        assert d['a']['b']['c'] == 100

        dd = CDotDict()
        ExternalProcessRule.dot_save(dd, 'a.b.c.d.e.f', 1000)
        assert dd.a.b.c.d.e.f == 1000
コード例 #7
0
    def test_dot_save(self):
        d = {}
        ExternalProcessRule.dot_save(d, 'x', 1)
        ok_(d['x'], 1)

        ExternalProcessRule.dot_save(d, 'z.y', 10)
        ok_(d['z']['y'], 10)

        d['a'] = {}
        d['a']['b'] = {}
        ExternalProcessRule.dot_save(d, 'a.b.c', 100)
        ok_(d['a']['b']['c'], 100)

        dd = CDotDict()
        ExternalProcessRule.dot_save(dd, 'a.b.c.d.e.f', 1000)
        ok_(dd.a.b.c.d.e.f, 1000)
コード例 #8
0
 def get_basic_config(self):
     config = CDotDict()
     config.logger = Mock()
     config.dump_field = 'upload_file_minidump'
     config.command_line = ('timeout -s KILL 30 {command_pathname} '
                            '{dump_file_pathname} '
                            '{processor_symbols_pathname_list} 2>/dev/null')
     config.command_pathname = 'bogus_command'
     config.processor_symbols_pathname_list = (
         '/mnt/socorro/symbols/symbols_ffx,'
         '/mnt/socorro/symbols/symbols_sea,'
         '/mnt/socorro/symbols/symbols_tbrd,'
         '/mnt/socorro/symbols/symbols_sbrd,'
         '/mnt/socorro/symbols/symbols_os')
     config.symbol_cache_path = '/mnt/socorro/symbols'
     config.result_key = 'bogus_command_result'
     config.return_code_key = 'bogus_command_return_code'
     return config
コード例 #9
0
 def get_basic_config(self):
     config = CDotDict()
     config.logger = Mock()
     config.chatty = True
     config.dump_field = 'upload_file_minidump'
     config.stackwalk_command_line = (
         'timeout -s KILL 30 $minidump_stackwalk_pathname '
         '--raw-json $rawfilePathname $dumpfilePathname '
         '$processor_symbols_pathname_list 2>/dev/null')
     config.minidump_stackwalk_pathname = '/bin/stackwalker'
     config.processor_symbols_pathname_list = (
         '/mnt/socorro/symbols/symbols_ffx,'
         '/mnt/socorro/symbols/symbols_sea,'
         '/mnt/socorro/symbols/symbols_tbrd,'
         '/mnt/socorro/symbols/symbols_sbrd,'
         '/mnt/socorro/symbols/symbols_os')
     config.symbol_cache_path = '/mnt/socorro/symbols'
     return config
コード例 #10
0
 def get_basic_config(self):
     config = CDotDict()
     config.logger = Mock()
     return config
コード例 #11
0
 def get_basic_config(self):
     config = CDotDict()
     config.logger = Mock()
     config.chatty = True
     return config