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_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' fake_processor = create_basic_fake_processor() fake_processor.config.firefox_out_of_date_version = '17' classifier = OutOfDateClassifier() self.assertTrue(classifier._predicate( raw_crash, processed_crash, fake_processor )) raw_crash.Version = '19' self.assertFalse(classifier._predicate( raw_crash, processed_crash, fake_processor )) raw_crash.Version = '12' raw_crash.ProductName = 'NotFireFox' self.assertFalse(classifier._predicate( raw_crash, processed_crash, fake_processor ))
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_windows_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'] = 'Windows NT' processed_crash.json_dump['system_info']['os_ver'] = \ '5.1.2600 Service Pack 2' ok_(classifier._windows_action( raw_crash, raw_dumps, processed_crash, fake_processor )) eq_( processed_crash.classifications.support.classification, 'firefox-no-longer-works-some-versions-windows-xp' ) classifier = OutOfDateClassifier() classifier.out_of_date_threshold = ('17',) processed_crash.json_dump['system_info']['os'] = 'Windows NT' processed_crash.json_dump['system_info']['os_ver'] = \ '5.0 Service Pack 23' ok_(classifier._windows_action( raw_crash, raw_dumps, processed_crash, fake_processor )) eq_( processed_crash.classifications.support.classification, 'firefox-no-longer-works-windows-2000' ) classifier = OutOfDateClassifier() classifier.out_of_date_threshold = ('17',) 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._windows_action( raw_crash, raw_dumps, processed_crash, fake_processor )) eq_( processed_crash.classifications.support.classification, 'update-firefox-latest-version' )
def test_windows_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' fake_processor = create_basic_fake_processor() classifier = OutOfDateClassifier() classifier.out_of_date_threshold = ('17', ) processed_crash.json_dump['system_info']['os'] = 'Windows NT' processed_crash.json_dump['system_info']['os_ver'] = \ '5.1.2600 Service Pack 2' ok_( classifier._windows_action(raw_crash, processed_crash, fake_processor)) eq_(processed_crash.classifications.support.classification, 'firefox-no-longer-works-some-versions-windows-xp') classifier = OutOfDateClassifier() classifier.out_of_date_threshold = ('17', ) processed_crash.json_dump['system_info']['os'] = 'Windows NT' processed_crash.json_dump['system_info']['os_ver'] = \ '5.0 Service Pack 23' ok_( classifier._windows_action(raw_crash, processed_crash, fake_processor)) eq_(processed_crash.classifications.support.classification, 'firefox-no-longer-works-windows-2000') classifier = OutOfDateClassifier() classifier.out_of_date_threshold = ('17', ) 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._windows_action(raw_crash, processed_crash, fake_processor)) eq_(processed_crash.classifications.support.classification, 'update-firefox-latest-version')
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' 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' self.assertTrue(classifier._action( raw_crash, processed_crash, fake_processor )) self.assertEqual( 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' self.assertTrue(classifier._action( raw_crash, processed_crash, fake_processor )) self.assertEqual( processed_crash.classifications.support.classification, 'update-firefox-latest-version' )
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" ok_(filter_rule.predicate(test_raw_crash, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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_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_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_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_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_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_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_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_processed_crash, fake_processor))
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 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 test_osx_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' 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._osx_action( raw_crash, processed_crash, fake_processor )) eq_( processed_crash.classifications.support.classification, 'firefox-no-longer-works-mac-os-10-4-or-powerpc' ) 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.5' processed_crash.json_dump['system_info']['cpu_arch'] = 'ppc' ok_(classifier._osx_action( raw_crash, processed_crash, fake_processor )) eq_( processed_crash.classifications.support.classification, 'firefox-no-longer-works-mac-os-10-4-or-powerpc' ) 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.5' processed_crash.json_dump['system_info']['cpu_arch'] = 'x86' ok_(classifier._osx_action( raw_crash, processed_crash, fake_processor )) eq_( processed_crash.classifications.support.classification, 'firefox-no-longer-works-mac-os-x-10-5' ) 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.99' ok_(classifier._osx_action( raw_crash, processed_crash, fake_processor )) eq_( processed_crash.classifications.support.classification, 'update-firefox-latest-version' )