def test_log_type_none(self): """When log type is none, TracError is not raised even if log level and log file in the parameters are missing. """ logging_config = self.env.config['logging'] logging_config.set('log_type', 'file') logging_config.set('log_level', 'WARN') logging_config.set('log_file', os.devnull) mod = AdminModule(self.env) req = MockRequest(self.env, path_info='/admin/general/logging') self.assertTrue(mod.match_request(req)) data = mod.process_request(req)[1] self.assertEqual('WARNING', data['log']['level']) self.assertIn('WARNING', data['log']['levels']) req = MockRequest(self.env, path_info='/admin/general/logging', method='POST', args={'log_type': 'none'}) self.assertTrue(mod.match_request(req)) self.assertRaises(RequestDone, mod.process_request, req) self.assertEqual('none', logging_config.get('log_type')) self.assertEqual('WARN', logging_config.get('log_level')) self.assertEqual(os.devnull, logging_config.get('log_file'))
def test_change_log_file(self): """Change the log file.""" logging_config = self.env.config['logging'] log_type = 'file' logging_config.set('log_type', log_type) log_level = logging_config.get('log_level') log_file = logging_config.get('log_file') req = MockRequest(self.env, path_info='/admin/general/logging', method='POST', args={ 'log_type': log_type, 'log_level': log_level, 'log_file': 'trac.log.1' }) mod = AdminModule(self.env) self.assertTrue(mod.match_request(req)) self.assertRaises(RequestDone, mod.process_request, req) self.assertEqual(0, len(req.chrome['warnings'])) self.assertEqual(log_type, logging_config.get('log_type')) self.assertEqual(log_level, logging_config.get('log_level')) self.assertNotEqual('trac.log.1', log_file) self.assertEqual('trac.log.1', logging_config.get('log_file'))
def test_invalid_log_configuration_not_saved(self): """Invalid log configuration is reverted and not saved.""" logging_config = self.env.config['logging'] log_type = logging_config.get('log_type') log_file = logging_config.get('log_file') log_level = logging_config.get('log_level') req = MockRequest(self.env, path_info='/admin/general/logging', method='POST', args={ 'log_type': 'file', 'log_level': log_level, 'log_file': '/path/to/invalid/file' }) mod = AdminModule(self.env) self.assertTrue(mod.match_request(req)) self.assertRaises(RequestDone, mod.process_request, req) self.assertEqual(1, len(req.chrome['warnings'])) self.assertIn('Changes not saved. Logger configuration error:', req.chrome['warnings'][0]) self.assertNotEqual('file', log_type) self.assertEqual(log_type, logging_config.get('log_type')) self.assertEqual(log_level, logging_config.get('log_level')) self.assertEqual(log_file, logging_config.get('log_file'))
def test_complete_milestone_retarget_tickets(self): name = 'milestone1' target = 'milestone2' insert_ticket(self.env, summary='Ticket 1', milestone=name) insert_ticket(self.env, summary='Ticket 2', milestone=name) ps = PermissionSystem(self.env) ps.grant_permission('user1', 'TICKET_ADMIN') ps.grant_permission('user1', 'MILESTONE_MODIFY') req = MockRequest(self.env, authname='user1', method='POST', path_info='/admin/ticket/milestones/%s' % name, args=dict(action='edit', save='Submit changes', name=name, description='', retarget='on', target=target, comment='', completed='on', completeddate='May 20, 2020, 9:07:52 PM')) mod = AdminModule(self.env) self.assertTrue(mod.match_request(req)) with self.assertRaises(RequestDone): mod.process_request(req) self.assertEqual(2, len(req.chrome['notices'])) self.assertEqual( 'The open tickets associated with milestone "milestone1" ' 'have been retargeted to milestone "milestone2".', req.chrome['notices'][0]) self.assertEqual('Your changes have been saved.', req.chrome['notices'][1]) self.assertEqual([], req.chrome['warnings']) self.assertEqual(['303 See Other'], req.status_sent) self.assertEqual('http://example.org/trac.cgi/admin/ticket/milestones', req.headers_sent['Location']) self.assertTrue(Milestone(self.env, name).is_completed) self.assertEqual(target, Ticket(self.env, 1)['milestone']) self.assertEqual(target, Ticket(self.env, 2)['milestone'])
def test_invalid_log_type_raises(self): """Invalid log type raises TracError.""" req = MockRequest(self.env, path_info='/admin/general/logging', method='POST', args={'log_type': 'invalid'}) mod = AdminModule(self.env) self.assertTrue(mod.match_request(req)) self.assertRaises(TracError, mod.process_request, req)
def test_empty_log_file_raises(self): """Empty log file raises TracError.""" req = MockRequest(self.env, path_info='/admin/general/logging', method='POST', args={'log_type': 'file', 'log_level': 'DEBUG', 'log_file': ''}) mod = AdminModule(self.env) self.assertTrue(mod.match_request(req)) self.assertRaises(TracError, mod.process_request, req)
def test_render_admin_panel(self): """GET request for admin panel.""" req = MockRequest(self.env, path_info='/admin/general/logging', method='GET') mod = AdminModule(self.env) self.assertTrue(mod.match_request(req)) data = mod.process_request(req)[1] self.assertEqual('none', data['log']['type']) self.assertEqual(['none', 'stderr', 'file', 'syslog', 'eventlog'], [t['name'] for t in data['log']['types']]) self.assertEqual('DEBUG', data['log']['level']) self.assertEqual(['CRITICAL', 'ERROR', 'WARNING', 'INFO', 'DEBUG'], data['log']['levels']) self.assertEqual('trac.log', data['log']['file']) self.assertEqual(self.env.log_dir, data['log']['dir'])