~ubuntu-branches/debian/experimental/apport/experimental

« back to all changes in this revision

Viewing changes to test/test_ui.py

  • Committer: Package Import Robot
  • Author(s): Martin Pitt
  • Date: 2012-03-02 15:32:07 UTC
  • Revision ID: package-import@ubuntu.com-20120302153207-czi3npenjuyro9pm
Tags: upstream-1.94
ImportĀ upstreamĀ versionĀ 1.94

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
        self.crashdb_conf = tempfile.NamedTemporaryFile()
21
21
        self.crashdb_conf.write('''default = 'testsuite'
22
22
databases = {
23
 
    'testsuite': { 
 
23
    'testsuite': {
24
24
        'impl': 'memory',
25
25
        'bug_pattern_url': None
26
26
    }
209
209
        fsize = os.path.getsize(self.report_file.name)
210
210
        complete_ratio = float(self.ui.get_complete_size()) / fsize
211
211
        self.assertTrue(complete_ratio >= 0.99 and complete_ratio <= 1.01)
212
 
            
 
212
 
213
213
        rs = self.ui.get_reduced_size()
214
214
        self.assertTrue(rs > 1000)
215
215
        self.assertTrue(rs < 10000)
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)
680
679
 
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')
730
729
 
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')
771
770
                                            'blacklist': False,
772
771
                                            'examine' : False,
773
772
                                            'restart' : False }
774
 
        
 
773
 
775
774
        self.assertEqual(self.ui.run_argv(), True)
776
775
 
777
776
        self.assertEqual(self.ui.msg_text, None)
820
819
        self.assertEqual(self.ui.msg_severity, 'info')
821
820
 
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'
868
867
 
869
868
    def test_run_crash_preretraced(self):
870
869
        '''run_crash() pre-retraced reports.
871
 
        
 
870
 
872
871
        This happens with crashes which are pre-processed by
873
872
        apport-retrace.
874
873
        '''
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)
898
 
       
 
894
        self.assertTrue(self.ui.present_details_shown)
 
895
 
 
896
    def test_run_crash_precollected(self):
 
897
        '''run_crash() on complete report on uninstalled package
 
898
 
 
899
        This happens when reporting a problem from a different machine through
 
900
        copying a .crash file.
 
901
        '''
 
902
        self.ui.report = self._gen_test_crash()
 
903
        self.ui.collect_info()
 
904
 
 
905
        # now pretend to move it to a machine where the package is not
 
906
        # installed
 
907
        self.ui.report['Package'] = 'uninstalled_pkg 1'
 
908
 
 
909
        # write crash report
 
910
        report_file = os.path.join(apport.fileutils.report_dir, 'test.crash')
 
911
        self.ui.report.write(open(report_file, 'w'))
 
912
 
 
913
        # report it
 
914
        self.ui = TestSuiteUserInterface()
 
915
        self.ui.present_details_response = {'report': True,
 
916
                                            'blacklist': False,
 
917
                                            'examine' : False,
 
918
                                            'restart' : False }
 
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)
 
925
 
899
926
    def test_run_crash_errors(self):
900
927
        '''run_crash() on various error conditions'''
901
928
 
1033
1060
 
1034
1061
        # set up hook
1035
1062
        f = open(os.path.join(self.hookdir, 'source_linux.py'), 'w')
1036
 
        f.write('''def add_info(report, ui): 
 
1063
        f.write('''def add_info(report, ui):
1037
1064
    report['KernelDebug'] = 'LotsMoreInfo'
1038
1065
''')
1039
1066
        f.close()
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())
1254
1281
 
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()]))
1259
1286
        f.close()
1260
1287
        self.ui.options.package = 'coreutils'
1349
1376
    def test_interactive_hooks_cancel(self):
1350
1377
        '''interactive hooks: user cancels'''
1351
1378
 
1352
 
        self.assertRaises(SystemExit, self._run_hook, 
 
1379
        self.assertRaises(SystemExit, self._run_hook,
1353
1380
            '''report['begin'] = '1'
1354
1381
raise StopIteration
1355
1382
report['end'] = '1'
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']))
1498
1525
 
1499
1526
        # cancelled
1529
1556
 
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,
1534
1561
            'tag': []})
1535
1562
        # updating report not allowed without args
1536
1563
        self.assertRaises(SystemExit, _chk, 'apport-collect', None, {})
1537
1564
 
1538
 
        # package 
 
1565
        # package
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,
1542
1569
            'tag': []})
1543
1570
 
1544
1571
        # symptom is preferred over package
1550
1577
        f.close()
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,
1554
1581
             'tag': []})
1555
1582
 
1556
1583
        # PID
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,
1560
1587
             'tag': []})
1561
1588
 
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,
1568
1595
                 'tag': []})
1569
1596
 
1570
1597
        # executable
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,
1575
1602
             'tag': []})
1576
1603
 
1577
1604
        # update existing report
1602
1629
        # no arguments: default to 'ask for symptom' bug mode
1603
1630
        #
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,
1607
1634
            'tag': []})
1608
1635
 
1612
1639
 
1613
1640
        # package
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,
1617
1644
            'tag': []})
1618
1645
 
1619
1646
        # symptom (preferred over package)
1625
1652
        f.close()
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,
1629
1656
             'tag': []})
1630
1657
        os.unlink(os.path.join(apport.ui.symptom_script_dir, 'coreutils.py'))
1631
1658
 
1632
1659
        # PID
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,
1636
1663
             'tag': []})
1637
1664
 
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,
1644
1671
                 'tag': []})
1645
1672
 
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,
1650
1677
             'tag': []})
1651
1678
 
1652
1679
        #
1682
1709
            self.assertEqual(self.ui.can_examine_locally(), False)
1683
1710
 
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__))),
1686
1713
                    'bin')
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):