670
670
'examine' : False,
671
671
'restart' : False }
672
672
self.ui.run_crash(report_file)
673
self.assertEqual(self.ui.msg_severity, None)
673
self.assertEqual(self.ui.msg_severity, None, self.ui.msg_text)
674
674
self.assertEqual(self.ui.msg_title, None)
675
675
self.assertEqual(self.ui.opened_url, 'http://coreutils.bugs.example.com/%i' % self.ui.crashdb.latest_id())
676
# no separate data collection dialog
677
676
self.assertFalse(self.ui.ic_progress_active)
678
self.assertEqual(self.ui.ic_progress_pulses, 0)
677
self.assertNotEqual(self.ui.ic_progress_pulses, 0)
679
678
self.assertTrue(self.ui.present_details_shown)
681
680
self.assertTrue('SourcePackage' in self.ui.report.keys())
728
727
self.assertFalse('ExecutableTimestamp' in self.ui.report.keys())
729
728
self.assertEqual(self.ui.report['Signal'], '6')
731
# we disable the ABRT filtering, we want these crashes after all
730
# we disable the ABRT filtering, we want these crashes after all
732
731
#self.assertTrue('assert' in self.ui.msg_text, '%s: %s' %
733
732
# (self.ui.msg_title, self.ui.msg_text))
734
733
#self.assertEqual(self.ui.msg_severity, 'info')
820
819
self.assertEqual(self.ui.msg_severity, 'info')
822
821
def test_run_crash_ignore(self):
823
'''run_crash() on a crash with the Ignore field'''
822
'''run_crash() on a crash with the Ignore field'''
824
823
self.report['Ignore'] = 'True'
825
824
self.report['ExecutablePath'] = '/bin/bash'
826
825
self.report['Package'] = 'bash 1'
892
891
self.assertEqual(self.ui.msg_severity, None, 'has %s message: %s: %s' % (
893
892
self.ui.msg_severity, str(self.ui.msg_title), str(self.ui.msg_text)))
894
893
self.assertEqual(self.ui.msg_title, None)
895
self.assertEqual(self.ui.opened_url, None)
896
self.assertEqual(self.ui.ic_progress_pulses, 0)
897
self.assertTrue(self.ui.present_details_shown)
894
self.assertTrue(self.ui.present_details_shown)
896
def test_run_crash_precollected(self):
897
'''run_crash() on complete report on uninstalled package
899
This happens when reporting a problem from a different machine through
900
copying a .crash file.
902
self.ui.report = self._gen_test_crash()
903
self.ui.collect_info()
905
# now pretend to move it to a machine where the package is not
907
self.ui.report['Package'] = 'uninstalled_pkg 1'
910
report_file = os.path.join(apport.fileutils.report_dir, 'test.crash')
911
self.ui.report.write(open(report_file, 'w'))
914
self.ui = TestSuiteUserInterface()
915
self.ui.present_details_response = {'report': True,
919
self.ui.run_crash(report_file)
920
self.assertEqual(self.ui.cur_package, 'uninstalled_pkg')
921
self.assertEqual(self.ui.msg_severity, None, 'has %s message: %s: %s' % (
922
self.ui.msg_severity, str(self.ui.msg_title), str(self.ui.msg_text)))
923
self.assertTrue(self.ui.opened_url.startswith('http://coreutils.bugs.example.com'))
924
self.assertTrue(self.ui.present_details_shown)
899
926
def test_run_crash_errors(self):
900
927
'''run_crash() on various error conditions'''
1069
1096
'examine' : False,
1070
1097
'restart' : False }
1071
1098
self.ui.run_crash(report_file)
1072
self.assertEqual(self.ui.msg_severity, None, str(self.ui.msg_title) +
1099
self.assertEqual(self.ui.msg_severity, None, str(self.ui.msg_title) +
1073
1100
' ' + str(self.ui.msg_text))
1074
1101
self.assertEqual(self.ui.msg_title, None)
1075
1102
self.assertEqual(self.ui.opened_url, 'http://linux.bugs.example.com/%i' % self.ui.crashdb.latest_id())
1255
1282
def _run_hook(self, code):
1256
1283
f = open(os.path.join(self.hookdir, 'coreutils.py'), 'w')
1257
f.write('def add_info(report, ui):\n%s\n' %
1284
f.write('def add_info(report, ui):\n%s\n' %
1258
1285
'\n'.join([' ' + l for l in code.splitlines()]))
1260
1287
self.ui.options.package = 'coreutils'
1493
1520
self.assertEqual(self.ui.run_argv(), True)
1494
1521
self.assertEqual(self.ui.msg_severity, None)
1495
1522
self.assertTrue('kind of problem' in self.ui.msg_text)
1496
self.assertEqual(set(self.ui.msg_choices),
1523
self.assertEqual(set(self.ui.msg_choices),
1497
1524
set(['bar', 'foo does not work', 'Other problem']))
1530
1557
# no arguments -> show pending crashes
1531
1558
_chk('apport-gtk', None, {'filebug': False, 'package': None,
1532
'pid': None, 'crash_file': None, 'symptom': None,
1533
'update_report': None, 'save': None, 'window': False,
1559
'pid': None, 'crash_file': None, 'symptom': None,
1560
'update_report': None, 'save': None, 'window': False,
1535
1562
# updating report not allowed without args
1536
1563
self.assertRaises(SystemExit, _chk, 'apport-collect', None, {})
1539
1566
_chk('apport-kde', 'coreutils', {'filebug': True, 'package':
1540
'coreutils', 'pid': None, 'crash_file': None, 'symptom': None,
1541
'update_report': None, 'save': None, 'window': False,
1567
'coreutils', 'pid': None, 'crash_file': None, 'symptom': None,
1568
'update_report': None, 'save': None, 'window': False,
1544
1571
# symptom is preferred over package
1551
1578
_chk('apport-cli', 'coreutils', {'filebug': True, 'package': None,
1552
1579
'pid': None, 'crash_file': None, 'symptom': 'coreutils',
1553
'update_report': None, 'save': None, 'window': False,
1580
'update_report': None, 'save': None, 'window': False,
1557
1584
_chk('apport-cli', '1234', {'filebug': True, 'package': None,
1558
1585
'pid': '1234', 'crash_file': None, 'symptom': None,
1559
'update_report': None, 'save': None, 'window': False,
1586
'update_report': None, 'save': None, 'window': False,
1562
1589
# .crash/.apport files; check correct handling of spaces
1563
1590
for suffix in ('.crash', '.apport'):
1564
1591
_chk('apport-cli', '/tmp/f oo' + suffix, {'filebug': False,
1565
'package': None, 'pid': None,
1592
'package': None, 'pid': None,
1566
1593
'crash_file': '/tmp/f oo' + suffix, 'symptom': None,
1567
'update_report': None, 'save': None, 'window': False,
1594
'update_report': None, 'save': None, 'window': False,
1571
_chk('apport-cli', '/usr/bin/tail', {'filebug': True,
1598
_chk('apport-cli', '/usr/bin/tail', {'filebug': True,
1572
1599
'package': 'coreutils',
1573
'pid': None, 'crash_file': None, 'symptom': None,
1574
'update_report': None, 'save': None, 'window': False,
1600
'pid': None, 'crash_file': None, 'symptom': None,
1601
'update_report': None, 'save': None, 'window': False,
1577
1604
# update existing report
1602
1629
# no arguments: default to 'ask for symptom' bug mode
1604
1631
_chk([], {'filebug': True, 'package': None,
1605
'pid': None, 'crash_file': None, 'symptom': None,
1632
'pid': None, 'crash_file': None, 'symptom': None,
1606
1633
'update_report': None, 'save': None, 'window': False,
1614
1641
_chk(['coreutils'], {'filebug': True, 'package':
1615
'coreutils', 'pid': None, 'crash_file': None, 'symptom': None,
1616
'update_report': None, 'save': None, 'window': False,
1642
'coreutils', 'pid': None, 'crash_file': None, 'symptom': None,
1643
'update_report': None, 'save': None, 'window': False,
1619
1646
# symptom (preferred over package)
1626
1653
_chk(['coreutils'], {'filebug': True, 'package': None,
1627
1654
'pid': None, 'crash_file': None, 'symptom': 'coreutils',
1628
'update_report': None, 'save': None, 'window': False,
1655
'update_report': None, 'save': None, 'window': False,
1630
1657
os.unlink(os.path.join(apport.ui.symptom_script_dir, 'coreutils.py'))
1633
1660
_chk(['1234'], {'filebug': True, 'package': None,
1634
1661
'pid': '1234', 'crash_file': None, 'symptom': None,
1635
'update_report': None, 'save': None, 'window': False,
1662
'update_report': None, 'save': None, 'window': False,
1638
1665
# .crash/.apport files; check correct handling of spaces
1639
1666
for suffix in ('.crash', '.apport'):
1640
1667
_chk(['/tmp/f oo' + suffix], {'filebug': False,
1641
'package': None, 'pid': None,
1668
'package': None, 'pid': None,
1642
1669
'crash_file': '/tmp/f oo' + suffix, 'symptom': None,
1643
'update_report': None, 'save': None, 'window': False,
1670
'update_report': None, 'save': None, 'window': False,
1646
1673
# executable name
1647
1674
_chk(['/usr/bin/tail'], {'filebug': True, 'package': 'coreutils',
1648
'pid': None, 'crash_file': None, 'symptom': None,
1649
'update_report': None, 'save': None, 'window': False,
1675
'pid': None, 'crash_file': None, 'symptom': None,
1676
'update_report': None, 'save': None, 'window': False,
1682
1709
self.assertEqual(self.ui.can_examine_locally(), False)
1684
1711
src_bindir = os.path.join(
1685
os.path.dirname(os.path.dirname(os.path.realpath(__file__))),
1712
os.path.dirname(os.path.dirname(os.path.realpath(__file__))),
1687
1714
# this will only work for running the tests in the source tree
1688
1715
if os.access(os.path.join(src_bindir, 'apport-retrace'), os.X_OK):