def test_action_case_4(self): """nothing in 1st dump, sentinel but no secondary in upload_file_minidump_flash2 dump""" pc = DotDict() pc.dump = DotDict() pijd = copy.deepcopy(cannonical_json_dump) pc.dump.json_dump = pijd f2jd = copy.deepcopy(cannonical_json_dump) pc.upload_file_minidump_flash2 = DotDict() pc.upload_file_minidump_flash2.json_dump = f2jd pc.upload_file_minidump_flash2.json_dump['crashing_thread']['frames'][2]['function'] = ( 'NtUserSetWindowPos' ) fake_processor = create_basic_fake_processor() rc = DotDict() rd = {} rule = SetWindowPos() action_result = rule.action(rc, rd, pc, fake_processor) ok_(action_result) ok_('classifications' in pc) ok_('skunk_works' in pc.classifications) eq_( pc.classifications.skunk_works.classification, 'NtUserSetWindowPos | other' )
def test_action_case_2(self): """sentinel exsits in stack, plus one secondary""" pc = DotDict() pc.process_type = 'plugin' pijd = copy.deepcopy(cannonical_json_dump) pc.json_dump = pijd pc.json_dump['crashing_thread']['frames'][2]['function'] = \ 'NtUserSetWindowPos' pc.json_dump['crashing_thread']['frames'][4]['function'] = \ 'F_1378698112' f2jd = copy.deepcopy(cannonical_json_dump) pc.upload_file_minidump_flash2 = DotDict() pc.upload_file_minidump_flash2.json_dump = f2jd fake_processor = create_basic_fake_processor() rc = DotDict() rd = {} rule = SetWindowPos() action_result = rule.action(rc, rd, pc, fake_processor) ok_(action_result) ok_('classifications' in pc) ok_('skunk_works' in pc.classifications) eq_( pc.classifications.skunk_works.classification, 'NtUserSetWindowPos | F_1378698112' )
def test_action_case_2(self): """sentinel exsits in stack, plus one secondary""" pc = DotDict() pc.process_type = 'plugin' pijd = copy.deepcopy(cannonical_json_dump) pc.json_dump = pijd pc.json_dump['crashing_thread']['frames'][2]['function'] = \ 'NtUserSetWindowPos' pc.json_dump['crashing_thread']['frames'][4]['function'] = \ 'F_1378698112' f2jd = copy.deepcopy(cannonical_json_dump) pc.upload_file_minidump_flash2 = DotDict() pc.upload_file_minidump_flash2.json_dump = f2jd fake_processor = create_basic_fake_processor() rc = DotDict() rd = {} rule = SetWindowPos() action_result = rule.action(rc, rd, pc, fake_processor) ok_(action_result) ok_('classifications' in pc) ok_('skunk_works' in pc.classifications) eq_(pc.classifications.skunk_works.classification, 'NtUserSetWindowPos | F_1378698112')
def test_action_case_4(self): """nothing in 1st dump, sentinel but no secondary in upload_file_minidump_flash2 dump""" pc = DotDict() pc.dump = DotDict() pijd = copy.deepcopy(cannonical_json_dump) pc.dump.json_dump = pijd f2jd = copy.deepcopy(cannonical_json_dump) pc.upload_file_minidump_flash2 = DotDict() pc.upload_file_minidump_flash2.json_dump = f2jd pc.upload_file_minidump_flash2.json_dump['crashing_thread']['frames'][ 2]['function'] = ('NtUserSetWindowPos') fake_processor = create_basic_fake_processor() rc = DotDict() rd = {} rule = SetWindowPos() action_result = rule.action(rc, rd, pc, fake_processor) ok_(action_result) ok_('classifications' in pc) ok_('skunk_works' in pc.classifications) eq_(pc.classifications.skunk_works.classification, 'NtUserSetWindowPos | other')
def test_action(self): jd = copy.deepcopy(cannonical_json_dump) processed_crash = DotDict() processed_crash.json_dump = jd raw_crash = DotDict() raw_crash.ProductName = 'Firefox' raw_crash.Version = '16' raw_dumps = {} fake_processor = create_basic_fake_processor() classifier = OutOfDateClassifier() classifier.out_of_date_threshold = ('17', ) processed_crash.json_dump['system_info']['os'] = 'Mac OS X' processed_crash.json_dump['system_info']['os_ver'] = '10.1' processed_crash.json_dump['system_info']['cpu_arch'] = 'ppc' ok_( classifier._action(raw_crash, raw_dumps, processed_crash, fake_processor)) eq_(processed_crash.classifications.support.classification, 'firefox-no-longer-works-mac-os-10-4-or-powerpc') processed_crash.json_dump['system_info']['os'] = 'Windows NT' processed_crash.json_dump['system_info']['os_ver'] = \ '5.1.2600 Service Pack 3' ok_( classifier._action(raw_crash, raw_dumps, processed_crash, fake_processor)) eq_(processed_crash.classifications.support.classification, 'update-firefox-latest-version')
def test_action_wrong_order(self): jd = copy.deepcopy(cannonical_json_dump) jd['crashing_thread']['frames'][4]['function'] = ( "F_1152915508___________________________________" ) jd['crashing_thread']['frames'][3]['function'] = ( "mozilla::plugins::PluginInstanceChild::UpdateWindowAttributes" "(bool)" ) jd['crashing_thread']['frames'][5]['function'] = ( "mozilla::ipc::RPCChannel::Call(IPC::Message*, IPC::Message*)" ) pc = DotDict() pc.dump = DotDict() pc.dump.json_dump = jd fake_processor = create_basic_fake_processor() rc = DotDict() rd = {} rule = UpdateWindowAttributes() action_result = rule.action(rc, rd, pc, fake_processor) ok_(not action_result) ok_('classifications' not in pc)
def test_action_case_1(self): """success - both targets found in top 5 frames of stack""" pc = DotDict() f2jd = copy.deepcopy(cannonical_json_dump) pc.upload_file_minidump_flash2 = DotDict() pc.upload_file_minidump_flash2.json_dump = f2jd pc.upload_file_minidump_flash2.json_dump['crashing_thread']['frames'][1]['function'] = ( 'NtUserPeekMessage' ) pc.upload_file_minidump_flash2.json_dump['crashing_thread']['frames'][2]['function'] = ( 'F849276792______________________________' ) fake_processor = create_basic_fake_processor() rc = DotDict() rd = {} rule = Bug812318() action_result = rule.action(rc, rd, pc, fake_processor) ok_(action_result) ok_('classifications' in pc) eq_( pc.classifications.skunk_works.classification, 'bug812318-PeekMessage' )
def test_action_success(self): jd = copy.deepcopy(cannonical_json_dump) jd['crashing_thread']['frames'][1]['function'] = ( "F_1152915508___________________________________") jd['crashing_thread']['frames'][3]['function'] = ( "mozilla::plugins::PluginInstanceChild::UpdateWindowAttributes" "(bool)") jd['crashing_thread']['frames'][5]['function'] = ( "mozilla::ipc::RPCChannel::Call(IPC::Message*, IPC::Message*)") pc = DotDict() pc.process_type = 'plugin' pc.json_dump = jd fake_processor = create_basic_fake_processor() rc = DotDict() rd = {} rule = UpdateWindowAttributes() action_result = rule.action(rc, rd, pc, fake_processor) ok_(action_result) ok_('classifications' in pc) ok_('skunk_works' in pc['classifications'])
def test_predicate(self): jd = copy.deepcopy(cannonical_json_dump) processed_crash = DotDict() processed_crash.json_dump = jd raw_crash = DotDict() raw_crash.ProductName = 'Firefox' raw_crash.Version = '16' raw_dumps = {} fake_processor = create_basic_fake_processor() fake_processor.config.firefox_out_of_date_version = '17' classifier = OutOfDateClassifier() ok_( classifier._predicate(raw_crash, raw_dumps, processed_crash, fake_processor)) raw_crash.Version = '19' ok_(not classifier._predicate(raw_crash, raw_dumps, processed_crash, fake_processor)) raw_crash.Version = '12' raw_crash.ProductName = 'NotFireFox' ok_(not classifier._predicate(raw_crash, raw_dumps, processed_crash, fake_processor))
def test_action_fail(self): jd = copy.deepcopy(cannonical_json_dump) pc = DotDict() pc.json_dump = jd fake_processor = create_basic_fake_processor() rc = DotDict() rd = {} rule = BitguardClassifier() action_result = rule.action(rc, rd, pc, fake_processor) ok_(not action_result) ok_('classifications' not in pc)
def test_action_case_3(self): """failure - no targets found in top 5 frames of stack""" pc = DotDict() f2jd = copy.deepcopy(cannonical_json_dump) pc.upload_file_minidump_flash2 = DotDict() pc.upload_file_minidump_flash2.json_dump = f2jd fake_processor = create_basic_fake_processor() rc = DotDict() rd = {} rule = Bug812318() action_result = rule.action(rc, rd, pc, fake_processor) ok_(not action_result) ok_('classifications' not in pc)
def test_action_case_3(self): """failure - no targets found in top 5 frames of stack""" pc = DotDict() f2jd = copy.deepcopy(cannonical_json_dump) pc.upload_file_minidump_flash2 = DotDict() pc.upload_file_minidump_flash2.json_dump = f2jd fake_processor = create_basic_fake_processor() rc = DotDict() rd = {} rule = Bug812318() action_result = rule.action(rc, rd, pc, fake_processor) ok_(not action_result) ok_('classifications' not in pc)
def test_action_success(self): jd = copy.deepcopy(cannonical_json_dump) jd['modules'].append({'filename': 'bitguard.dll'}) pc = DotDict() pc.json_dump = jd fake_processor = create_basic_fake_processor() rc = DotDict() rd = {} rule = BitguardClassifier() action_result = rule.action(rc, rd, pc, fake_processor) ok_(action_result) ok_('classifications' in pc) ok_('support' in pc.classifications) eq_('bitguard', pc.classifications.support.classification)
def test_action_failure(self): """success - target signature not found""" pc = DotDict() f2jd = copy.deepcopy(cannonical_json_dump) pc.upload_file_minidump_flash2 = DotDict() pc.upload_file_minidump_flash2.json_dump = f2jd pc.upload_file_minidump_flash2.signature = 'lars was here' fake_processor = create_basic_fake_processor() rc = DotDict() rd = {} rule = Bug811804() action_result = rule.action(rc, rd, pc, fake_processor) ok_(not action_result) ok_('classifications' not in pc)
def test_action_failure(self): """success - target signature not found""" pc = DotDict() f2jd = copy.deepcopy(cannonical_json_dump) pc.upload_file_minidump_flash2 = DotDict() pc.upload_file_minidump_flash2.json_dump = f2jd pc.upload_file_minidump_flash2.signature = 'lars was here' fake_processor = create_basic_fake_processor() rc = DotDict() rd = {} rule = Bug811804() action_result = rule.action(rc, rd, pc, fake_processor) ok_(not action_result) ok_('classifications' not in pc)
def test_action_case_1(self): """success - target found in top 5 frames of stack""" pc = DotDict() f2jd = copy.deepcopy(cannonical_json_dump) pc.upload_file_minidump_flash2 = DotDict() pc.upload_file_minidump_flash2.json_dump = f2jd pc.upload_file_minidump_flash2.json_dump['crashing_thread']['frames'][ 2]['function'] = ('NtAlpcSendWaitReceivePort') fake_processor = create_basic_fake_processor() rc = DotDict() rd = {} rule = SendWaitReceivePort() action_result = rule.action(rc, rd, pc, fake_processor) ok_(action_result) ok_('classifications' in pc)
def test_action_case_1(self): """success - target found in top 5 frames of stack""" pc = DotDict() f2jd = copy.deepcopy(cannonical_json_dump) pc.upload_file_minidump_flash2 = DotDict() pc.upload_file_minidump_flash2.json_dump = f2jd pc.upload_file_minidump_flash2.json_dump['crashing_thread']['frames'][2]['function'] = ( 'NtAlpcSendWaitReceivePort' ) fake_processor = create_basic_fake_processor() rc = DotDict() rd = {} rule = SendWaitReceivePort() action_result = rule.action(rc, rd, pc, fake_processor) ok_(action_result) ok_('classifications' in pc)
def test_action_case_5(self): """nothing in either dump""" pc = DotDict() pc.dump = DotDict() pijd = copy.deepcopy(cannonical_json_dump) pc.dump.json_dump = pijd f2jd = copy.deepcopy(cannonical_json_dump) pc.upload_file_minidump_flash2 = DotDict() pc.upload_file_minidump_flash2.json_dump = f2jd fake_processor = create_basic_fake_processor() rc = DotDict() rd = {} rule = SetWindowPos() action_result = rule.action(rc, rd, pc, fake_processor) ok_(not action_result) ok_('classifications' not in pc)
def test_action_case_5(self): """nothing in either dump""" pc = DotDict() pc.dump = DotDict() pijd = copy.deepcopy(cannonical_json_dump) pc.dump.json_dump = pijd f2jd = copy.deepcopy(cannonical_json_dump) pc.upload_file_minidump_flash2 = DotDict() pc.upload_file_minidump_flash2.json_dump = f2jd fake_processor = create_basic_fake_processor() rc = DotDict() rd = {} rule = SetWindowPos() action_result = rule.action(rc, rd, pc, fake_processor) ok_(not action_result) ok_('classifications' not in pc)
def test_action_case_2(self): """success - only 1st target found in top 5 frames of stack""" pc = DotDict() f2jd = copy.deepcopy(cannonical_json_dump) pc.upload_file_minidump_flash2 = DotDict() pc.upload_file_minidump_flash2.json_dump = f2jd pc.upload_file_minidump_flash2.json_dump['crashing_thread']['frames'][ 1]['function'] = ('NtUserPeekMessage') fake_processor = create_basic_fake_processor() rc = DotDict() rd = {} rule = Bug812318() action_result = rule.action(rc, rd, pc, fake_processor) ok_(action_result) ok_('classifications' in pc) eq_(pc.classifications.skunk_works.classification, 'NtUserPeekMessage-other')
def test_action_success(self): """success - target signature fonud""" pc = DotDict() f2jd = copy.deepcopy(cannonical_json_dump) pc.upload_file_minidump_flash2 = DotDict() pc.upload_file_minidump_flash2.json_dump = f2jd pc.upload_file_minidump_flash2.signature = \ 'hang | NtUserWaitMessage | F34033164' \ '________________________________' fake_processor = create_basic_fake_processor() rc = DotDict() rd = {} rule = Bug811804() action_result = rule.action(rc, rd, pc, fake_processor) ok_(action_result) ok_('classifications' in pc) eq_(pc.classifications.skunk_works.classification, 'bug811804-NtUserWaitMessage')
def test_action_success(self): """success - target signature fonud""" pc = DotDict() f2jd = copy.deepcopy(cannonical_json_dump) pc.upload_file_minidump_flash2 = DotDict() pc.upload_file_minidump_flash2.json_dump = f2jd pc.upload_file_minidump_flash2.signature = \ 'hang | NtUserWaitMessage | F34033164' \ '________________________________' fake_processor = create_basic_fake_processor() rc = DotDict() rd = {} rule = Bug811804() action_result = rule.action(rc, rd, pc, fake_processor) ok_(action_result) ok_('classifications' in pc) eq_( pc.classifications.skunk_works.classification, 'bug811804-NtUserWaitMessage' )
def get_config(self): fake_processor = create_basic_fake_processor() return fake_processor.config
def get_config(self): fake_processor = create_basic_fake_processor() # FIXME(willkg): we should switch logging testing to use pytest's caplog fake_processor.config.logger = mock.MagicMock() return fake_processor.config
def test_action_predicate_accept(self): """test all of the case where the predicate should return True""" filter_rule = DontConsiderTheseFilter() fake_processor = create_basic_fake_processor() # find non-plugin crashes test_raw_crash = DotDict() test_raw_crash.PluginHang = '0' test_raw_dumps = {} ok_( filter_rule.predicate(test_raw_crash, test_raw_dumps, DotDict(), fake_processor)) # find non-Firefox crashes test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Internet Explorer" ok_( filter_rule.predicate(test_raw_crash, test_raw_dumps, DotDict(), fake_processor)) # find crashes with no Version info test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" ok_( filter_rule.predicate(test_raw_crash, test_raw_dumps, DotDict(), fake_processor)) # find crashes with faulty Version info test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = 'dwight' ok_( filter_rule.predicate(test_raw_crash, test_raw_dumps, DotDict(), fake_processor)) # find crashes with no BuildID info test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '17.1' ok_( filter_rule.predicate(test_raw_crash, test_raw_dumps, DotDict(), fake_processor)) # find crashes with faulty BuildID info test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '17.1' test_raw_crash.BuildID = '201307E2' ok_( filter_rule.predicate(test_raw_crash, test_raw_dumps, DotDict(), fake_processor)) # find crashes with faulty BuildID info (not integer) test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '17.1' test_raw_crash.BuildID = '201307E2' ok_( filter_rule.predicate(test_raw_crash, test_raw_dumps, DotDict(), fake_processor)) # find crashes with faulty BuildID info (bad month & day) test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '17.1' test_raw_crash.BuildID = '20131458' ok_( filter_rule.predicate(test_raw_crash, test_raw_dumps, DotDict(), fake_processor)) # find crashes with pre-17 version test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '15' test_raw_crash.BuildID = '20121015' ok_( filter_rule.predicate(test_raw_crash, test_raw_dumps, DotDict(), fake_processor)) # find crashes with 18 version but build date less than 2012-10-23 test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '18' test_raw_crash.BuildID = '20121015' ok_( filter_rule.predicate(test_raw_crash, test_raw_dumps, DotDict(), fake_processor)) # find crashes with build date less than 2012-10-17 # and version 17 or above test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '17' test_raw_crash.BuildID = '20121015' ok_( filter_rule.predicate(test_raw_crash, test_raw_dumps, DotDict(), fake_processor)) # find crashes with no default dump test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '19' test_raw_crash.BuildID = '20121031' test_processed_crash = DotDict() ok_( filter_rule.predicate(test_raw_crash, test_raw_dumps, test_processed_crash, fake_processor)) # find crashes with no architecture info test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '19' test_raw_crash.BuildID = '20121031' test_processed_crash = DotDict() test_processed_crash.dump = 'fake dump' test_processed_crash.json_dump = DotDict() ok_( filter_rule.predicate(test_raw_crash, test_raw_dumps, test_processed_crash, fake_processor)) # find crashes with amd64 architecture info test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '19' test_raw_crash.BuildID = '20121031' test_processed_crash = DotDict() test_processed_crash.dump = 'fake dump' test_processed_crash.json_dump = DotDict() test_processed_crash.json_dump.system_info = DotDict() test_processed_crash.json_dump.cpu_arch = 'amd64' ok_( filter_rule.predicate(test_raw_crash, test_raw_dumps, test_processed_crash, fake_processor)) # find crashes with main dump processing errors test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '19' test_raw_crash.BuildID = '20121031' test_processed_crash = DotDict() test_processed_crash.dump = 'fake dump' test_processed_crash.json_dump = DotDict() test_processed_crash.json_dump.system_info = DotDict() test_processed_crash.json_dump.system_info.cpu_arch = 'x86' test_processed_crash.success = False ok_( filter_rule.predicate(test_raw_crash, test_raw_dumps, test_processed_crash, fake_processor)) # find crashes with extra dump processing errors test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '19' test_raw_crash.BuildID = '20121031' test_processed_crash = DotDict() test_processed_crash.dump = 'fake dump' test_processed_crash.json_dump = DotDict() test_processed_crash.json_dump.system_info = DotDict() test_processed_crash.json_dump.system_info.cpu_arch = 'x86' test_processed_crash.success = True test_processed_crash.additional_minidumps = ['a', 'b', 'c'] test_processed_crash.a = DotDict() test_processed_crash.a.success = True test_processed_crash.b = DotDict() test_processed_crash.b.success = True test_processed_crash.c = DotDict() test_processed_crash.c.success = False ok_( filter_rule.predicate(test_raw_crash, test_raw_dumps, test_processed_crash, fake_processor)) # find crashes with missing critical attribute test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '19' test_raw_crash.BuildID = '20121031' test_processed_crash = DotDict() test_processed_crash.dump = 'fake dump' test_processed_crash.json_dump = DotDict() test_processed_crash.json_dump.system_info = DotDict() test_processed_crash.json_dump.system_info.cpu_arch = 'x86' test_processed_crash.success = True test_processed_crash.additional_minidumps = ['a', 'b', 'c'] test_processed_crash.a = DotDict() test_processed_crash.a.success = True test_processed_crash.b = DotDict() test_processed_crash.b.success = True test_processed_crash.c = DotDict() test_processed_crash.c.success = False ok_( filter_rule.predicate(test_raw_crash, test_raw_dumps, test_processed_crash, fake_processor)) # find crashes with missing critical attribute test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '19' test_raw_crash.BuildID = '20121031' test_processed_crash = DotDict() test_processed_crash.dump = 'fake dump' test_processed_crash.json_dump = DotDict() test_processed_crash.json_dump.system_info = DotDict() test_processed_crash.json_dump.system_info.cpu_arch = 'x86' test_processed_crash.success = True test_processed_crash.additional_minidumps = ['a', 'b', 'c'] test_processed_crash.a = DotDict() test_processed_crash.a.success = True test_processed_crash.b = DotDict() test_processed_crash.b.success = True test_processed_crash.c = DotDict() test_processed_crash.c.success = False ok_( filter_rule.predicate(test_raw_crash, test_raw_dumps, test_processed_crash, fake_processor)) # reject the perfect crash test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '19' test_raw_crash.BuildID = '20121031' test_processed_crash = DotDict() test_processed_crash.dump = 'fake dump' test_processed_crash.json_dump = DotDict() test_processed_crash.json_dump.system_info = DotDict() test_processed_crash.json_dump.system_info.cpu_arch = 'x86' test_processed_crash.success = True test_processed_crash.additional_minidumps = ['a', 'b', 'c'] test_processed_crash.a = DotDict() test_processed_crash.a.success = True test_processed_crash.b = DotDict() test_processed_crash.b.success = True test_processed_crash.c = DotDict() test_processed_crash.c.success = True ok_(not filter_rule.predicate(test_raw_crash, test_raw_dumps, test_processed_crash, fake_processor)) # test the do-nothing action test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '19' test_raw_crash.BuildID = '20121031' test_processed_crash = DotDict() test_processed_crash.dump = 'fake dump' test_processed_crash.json_dump = DotDict() test_processed_crash.json_dump.system_info = DotDict() test_processed_crash.json_dump.system_info.cpu_arch = 'x86' test_processed_crash.success = True test_processed_crash.additional_minidumps = ['a', 'b', 'c'] test_processed_crash.a = DotDict() test_processed_crash.a.success = True test_processed_crash.b = DotDict() test_processed_crash.b.success = True test_processed_crash.c = DotDict() test_processed_crash.c.success = True ok_( filter_rule.action(test_raw_crash, test_raw_dumps, test_processed_crash, fake_processor))
def get_config(self): fake_processor = create_basic_fake_processor() # FIXME(willkg): we should switch logging testing to use pytest's caplog fake_processor.config.logger = mock.MagicMock() return fake_processor.config
def get_config(self): fake_processor = create_basic_fake_processor() return fake_processor.config
def test_action_predicate_accept(self): """test all of the case where the predicate should return True""" filter_rule = DontConsiderTheseFilter() fake_processor = create_basic_fake_processor() # find non-plugin crashes test_raw_crash = DotDict() test_raw_crash.PluginHang = '0' test_raw_dumps = {} ok_(filter_rule.predicate( test_raw_crash, test_raw_dumps, DotDict(), fake_processor )) # find non-Firefox crashes test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Internet Explorer" ok_(filter_rule.predicate( test_raw_crash, test_raw_dumps, DotDict(), fake_processor )) # find crashes with no Version info test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" ok_(filter_rule.predicate( test_raw_crash, test_raw_dumps, DotDict(), fake_processor )) # find crashes with faulty Version info test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = 'dwight' ok_(filter_rule.predicate( test_raw_crash, test_raw_dumps, DotDict(), fake_processor )) # find crashes with no BuildID info test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '17.1' ok_(filter_rule.predicate( test_raw_crash, test_raw_dumps, DotDict(), fake_processor )) # find crashes with faulty BuildID info test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '17.1' test_raw_crash.BuildID = '201307E2' ok_(filter_rule.predicate( test_raw_crash, test_raw_dumps, DotDict(), fake_processor )) # find crashes with faulty BuildID info (not integer) test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '17.1' test_raw_crash.BuildID = '201307E2' ok_(filter_rule.predicate( test_raw_crash, test_raw_dumps, DotDict(), fake_processor )) # find crashes with faulty BuildID info (bad month & day) test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '17.1' test_raw_crash.BuildID = '20131458' ok_(filter_rule.predicate( test_raw_crash, test_raw_dumps, DotDict(), fake_processor )) # find crashes with pre-17 version test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '15' test_raw_crash.BuildID = '20121015' ok_(filter_rule.predicate( test_raw_crash, test_raw_dumps, DotDict(), fake_processor )) # find crashes with 18 version but build date less than 2012-10-23 test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '18' test_raw_crash.BuildID = '20121015' ok_(filter_rule.predicate( test_raw_crash, test_raw_dumps, DotDict(), fake_processor )) # find crashes with build date less than 2012-10-17 # and version 17 or above test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '17' test_raw_crash.BuildID = '20121015' ok_(filter_rule.predicate( test_raw_crash, test_raw_dumps, DotDict(), fake_processor )) # find crashes with no default dump test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '19' test_raw_crash.BuildID = '20121031' test_processed_crash = DotDict() ok_(filter_rule.predicate( test_raw_crash, test_raw_dumps, test_processed_crash, fake_processor )) # find crashes with no architecture info test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '19' test_raw_crash.BuildID = '20121031' test_processed_crash = DotDict() test_processed_crash.dump = 'fake dump' test_processed_crash.json_dump = DotDict() ok_(filter_rule.predicate( test_raw_crash, test_raw_dumps, test_processed_crash, fake_processor )) # find crashes with amd64 architecture info test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '19' test_raw_crash.BuildID = '20121031' test_processed_crash = DotDict() test_processed_crash.dump = 'fake dump' test_processed_crash.json_dump = DotDict() test_processed_crash.json_dump.system_info = DotDict() test_processed_crash.json_dump.cpu_arch = 'amd64' ok_(filter_rule.predicate( test_raw_crash, test_raw_dumps, test_processed_crash, fake_processor )) # find crashes with main dump processing errors test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '19' test_raw_crash.BuildID = '20121031' test_processed_crash = DotDict() test_processed_crash.dump = 'fake dump' test_processed_crash.json_dump = DotDict() test_processed_crash.json_dump.system_info = DotDict() test_processed_crash.json_dump.system_info.cpu_arch = 'x86' test_processed_crash.success = False ok_(filter_rule.predicate( test_raw_crash, test_raw_dumps, test_processed_crash, fake_processor )) # find crashes with extra dump processing errors test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '19' test_raw_crash.BuildID = '20121031' test_processed_crash = DotDict() test_processed_crash.dump = 'fake dump' test_processed_crash.json_dump = DotDict() test_processed_crash.json_dump.system_info = DotDict() test_processed_crash.json_dump.system_info.cpu_arch = 'x86' test_processed_crash.success = True test_processed_crash.additional_minidumps = ['a', 'b', 'c'] test_processed_crash.a = DotDict() test_processed_crash.a.success = True test_processed_crash.b = DotDict() test_processed_crash.b.success = True test_processed_crash.c = DotDict() test_processed_crash.c.success = False ok_(filter_rule.predicate( test_raw_crash, test_raw_dumps, test_processed_crash, fake_processor )) # find crashes with missing critical attribute test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '19' test_raw_crash.BuildID = '20121031' test_processed_crash = DotDict() test_processed_crash.dump = 'fake dump' test_processed_crash.json_dump = DotDict() test_processed_crash.json_dump.system_info = DotDict() test_processed_crash.json_dump.system_info.cpu_arch = 'x86' test_processed_crash.success = True test_processed_crash.additional_minidumps = ['a', 'b', 'c'] test_processed_crash.a = DotDict() test_processed_crash.a.success = True test_processed_crash.b = DotDict() test_processed_crash.b.success = True test_processed_crash.c = DotDict() test_processed_crash.c.success = False ok_(filter_rule.predicate( test_raw_crash, test_raw_dumps, test_processed_crash, fake_processor )) # find crashes with missing critical attribute test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '19' test_raw_crash.BuildID = '20121031' test_processed_crash = DotDict() test_processed_crash.dump = 'fake dump' test_processed_crash.json_dump = DotDict() test_processed_crash.json_dump.system_info = DotDict() test_processed_crash.json_dump.system_info.cpu_arch = 'x86' test_processed_crash.success = True test_processed_crash.additional_minidumps = ['a', 'b', 'c'] test_processed_crash.a = DotDict() test_processed_crash.a.success = True test_processed_crash.b = DotDict() test_processed_crash.b.success = True test_processed_crash.c = DotDict() test_processed_crash.c.success = False ok_(filter_rule.predicate( test_raw_crash, test_raw_dumps, test_processed_crash, fake_processor )) # reject the perfect crash test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '19' test_raw_crash.BuildID = '20121031' test_processed_crash = DotDict() test_processed_crash.dump = 'fake dump' test_processed_crash.json_dump = DotDict() test_processed_crash.json_dump.system_info = DotDict() test_processed_crash.json_dump.system_info.cpu_arch = 'x86' test_processed_crash.success = True test_processed_crash.additional_minidumps = ['a', 'b', 'c'] test_processed_crash.a = DotDict() test_processed_crash.a.success = True test_processed_crash.b = DotDict() test_processed_crash.b.success = True test_processed_crash.c = DotDict() test_processed_crash.c.success = True ok_(not filter_rule.predicate( test_raw_crash, test_raw_dumps, test_processed_crash, fake_processor )) # test the do-nothing action test_raw_crash = DotDict() test_raw_crash.PluginHang = '1' test_raw_crash.ProductName = "Firefox" test_raw_crash.Version = '19' test_raw_crash.BuildID = '20121031' test_processed_crash = DotDict() test_processed_crash.dump = 'fake dump' test_processed_crash.json_dump = DotDict() test_processed_crash.json_dump.system_info = DotDict() test_processed_crash.json_dump.system_info.cpu_arch = 'x86' test_processed_crash.success = True test_processed_crash.additional_minidumps = ['a', 'b', 'c'] test_processed_crash.a = DotDict() test_processed_crash.a.success = True test_processed_crash.b = DotDict() test_processed_crash.b.success = True test_processed_crash.c = DotDict() test_processed_crash.c.success = True ok_(filter_rule.action( test_raw_crash, test_raw_dumps, test_processed_crash, fake_processor ))