Exemplo n.º 1
0
 def test_ignored_flag(self):
     on_error.log(foo='bar')
     self.assertEqual(1, models.Error.query().count())
     expected = {
         'args': [],
         'category': None,
         'created_ts': self._now,
         'cwd': None,
         'duration': None,
         'endpoint': None,
         'env': None,
         'exception_type': None,
         'hostname': None,
         'identity': None,
         'message': None,
         'method': None,
         'os': None,
         'params': None,
         'python_version': None,
         'request_id': None,
         'source': u'unknown',
         'source_ip': None,
         'stack': None,
         'user': None,
         'version': None,
     }
     self.assertEqual(expected, models.Error.query().get().to_dict())
Exemplo n.º 2
0
 def test_log(self):
   kwargs = dict((k, k) for k in on_error.VALID_ERROR_KEYS)
   kwargs['args'] = ['args']
   kwargs['category'] = 'exception'
   kwargs['duration'] = 2.3
   kwargs['env'] = {'foo': 'bar'}
   kwargs['params'] = {'foo': 'bar'}
   kwargs['source'] = 'bot'
   kwargs['source_ip'] = '0.0.0.0'
   on_error.log(**kwargs)
   self.assertEqual(1, models.Error.query().count())
   expected = {
     'args': [u'args'],
     'category': u'exception',
     'created_ts': self._now,
     'cwd': u'cwd',
     'duration': 2.3,
     'endpoint': u'endpoint',
     'env': {u'foo': u'bar'},
     'exception_type': u'exception_type',
     'hostname': u'hostname',
     'identity': None,
     'message': u'message',
     'method': u'method',
     'os': u'os',
     'params': {u'foo': u'bar'},
     'python_version': u'python_version',
     'request_id': u'request_id',
     'source': u'bot',
     'source_ip': u'0.0.0.0',
     'stack': u'stack',
     'user': u'user',
     'version': u'version',
   }
   self.assertEqual(expected, models.Error.query().get().to_dict())
Exemplo n.º 3
0
 def test_ignored_flag(self):
   on_error.log(foo='bar')
   self.assertEqual(1, models.Error.query().count())
   expected = {
     'args': [],
     'category': None,
     'created_ts': self._now,
     'cwd': None,
     'duration': None,
     'endpoint': None,
     'env': None,
     'exception_type': None,
     'hostname': None,
     'identity': None,
     'message': None,
     'method': None,
     'os': None,
     'params': None,
     'python_version': None,
     'request_id': None,
     'source': u'unknown',
     'source_ip': None,
     'stack': None,
     'user': None,
     'version': None,
   }
   self.assertEqual(expected, models.Error.query().get().to_dict())
Exemplo n.º 4
0
 def test_log(self):
   kwargs = dict((k, k) for k in on_error.VALID_ERROR_KEYS)
   kwargs['args'] = ['args']
   kwargs['category'] = 'exception'
   kwargs['duration'] = 2.3
   kwargs['env'] = {'foo': 'bar'}
   kwargs['params'] = {'foo': 'bar'}
   kwargs['source'] = 'bot'
   kwargs['source_ip'] = '0.0.0.0'
   on_error.log(**kwargs)
   self.assertEqual(1, models.Error.query().count())
   expected = {
     'args': [u'args'],
     'category': u'exception',
     'created_ts': self._now,
     'cwd': u'cwd',
     'duration': 2.3,
     'endpoint': u'endpoint',
     'env': {u'foo': u'bar'},
     'exception_type': u'exception_type',
     'hostname': u'hostname',
     'identity': None,
     'message': u'message',
     'method': u'method',
     'os': u'os',
     'params': {u'foo': u'bar'},
     'python_version': u'python_version',
     'request_id': u'request_id',
     'source': u'bot',
     'source_ip': u'0.0.0.0',
     'stack': u'stack',
     'user': u'user',
     'version': u'version',
   }
   self.assertEqual(expected, models.Error.query().get().to_dict())
Exemplo n.º 5
0
 def test_log_server(self):
     # version is automatiaclly added.
     on_error.log(source='server')
     self.assertEqual(1, models.Error.query().count())
     expected = dict((k, None) for k in on_error.VALID_ERROR_KEYS)
     expected['args'] = []
     expected['created_ts'] = self._now
     expected['identity'] = None
     expected['python_version'] = unicode(platform.python_version())
     expected['source'] = u'server'
     expected['source_ip'] = None
     expected['version'] = u'v1a'
     self.assertEqual(expected, models.Error.query().get().to_dict())
Exemplo n.º 6
0
 def test_log_server(self):
   # version is automatiaclly added.
   on_error.log(source='server')
   self.assertEqual(1, models.Error.query().count())
   expected = dict((k, None) for k in on_error.VALID_ERROR_KEYS)
   expected['args'] = []
   expected['created_ts'] = self._now
   expected['identity'] = None
   expected['python_version'] = unicode(platform.python_version())
   expected['source'] = u'server'
   expected['source_ip'] = None
   expected['version'] = u'v1a'
   self.assertEqual(expected, models.Error.query().get().to_dict())
Exemplo n.º 7
0
 def test_log(self):
     # It must work even if auth is not initialized.
     self.mock(logging, 'error', lambda *_, **_kwargs: None)
     error_id = on_error.log(source='bot',
                             category='task_failure',
                             message='Dang')
     self.assertEqual(1, models.Error.query().count())
     self.assertEqual(error_id, models.Error.query().get().key.integer_id())
     expected = {
         'args': [],
         'category': u'task_failure',
         'created_ts': self._now,
         'cwd': None,
         'duration': None,
         'endpoint': None,
         'env': None,
         'exception_type': None,
         'hostname': None,
         'identity': None,
         'message': u'Dang',
         'method': None,
         'os': None,
         'params': None,
         'python_version': None,
         'request_id': None,
         'source': u'bot',
         'source_ip': None,
         'stack': None,
         'user': None,
         'version': None,
     }
     self.assertEqual(expected, models.Error.query().get().to_dict())
Exemplo n.º 8
0
 def test_log(self):
   # It must work even if auth is not initialized.
   self.mock(logging, 'error', lambda *_, **_kwargs: None)
   error_id = on_error.log(
       source='bot', category='task_failure', message='Dang')
   self.assertEqual(1, models.Error.query().count())
   self.assertEqual(error_id, models.Error.query().get().key.integer_id())
   expected = {
     'args': [],
     'category': u'task_failure',
     'created_ts': self._now,
     'cwd': None,
     'duration': None,
     'endpoint': None,
     'env': None,
     'exception_type': None,
     'hostname': None,
     'identity': None,
     'message': u'Dang',
     'method': None,
     'os': None,
     'params': None,
     'python_version': None,
     'request_id': None,
     'source': u'bot',
     'source_ip': None,
     'stack': None,
     'user': None,
     'version': None,
   }
   self.assertEqual(expected, models.Error.query().get().to_dict())
Exemplo n.º 9
0
 def test_exception(self):
   on_error.log(env='str')
   self.assertEqual(1, models.Error.query().count())
   relpath_on_error = formatter._relative_path(ON_ERROR_PATH)
   expected = {
     'args': [],
     'category': u'exception',
     'created_ts': self._now,
     'cwd': None,
     'duration': None,
     'endpoint': None,
     'env': None,
     'exception_type': u'<type \'exceptions.TypeError\'>',
     'hostname': None,
     'identity': None,
     'message':
         u'log({\'env\': \'str\'}) caused: JSON property must be a '
         u'<type \'dict\'>',
     'method': None,
     'os': None,
     'params': None,
     'python_version': None,
     'request_id': None,
     'source': u'server',
     'source_ip': None,
     'stack':
         u'Traceback (most recent call last):\n'
         u'  File "%s", line 0, in log\n'
         u'    error = models.Error(identity=identity, **kwargs)\n'
         u'  File "appengine/ext/ndb/model.py", line 0, in __init__\n' %
           relpath_on_error.replace('.pyc', '.py'),
     'user': None,
     'version': None,
   }
   actual = models.Error.query().get().to_dict()
   # Zap out line numbers to 0, it's annoying otherwise to update the unit test
   # just for line move. Only keep the first 4 lines because json_dict
   # verification is a tad deep insode ndb/model.py.
   actual['stack'] = ''.join(
       re.sub(r' \d+', ' 0', actual['stack']).splitlines(True)[:4])
   # Also make no distinction between *.pyc and *.py files.
   actual['stack'] = actual['stack'].replace('.pyc', '.py')
   self.assertEqual(expected, actual)
Exemplo n.º 10
0
 def test_exception(self):
   on_error.log(env='str')
   self.assertEqual(1, models.Error.query().count())
   relpath_on_error = formatter._relative_path(ON_ERROR_PATH)
   expected = {
     'args': [],
     'category': u'exception',
     'created_ts': self._now,
     'cwd': None,
     'duration': None,
     'endpoint': None,
     'env': None,
     'exception_type': u'<type \'exceptions.TypeError\'>',
     'hostname': None,
     'identity': None,
     'message':
         u'log({\'env\': \'str\'}) caused: JSON property must be a '
         u'<type \'dict\'>',
     'method': None,
     'os': None,
     'params': None,
     'python_version': None,
     'request_id': None,
     'source': u'server',
     'source_ip': None,
     'stack':
         u'Traceback (most recent call last):\n'
         u'  File "%s", line 0, in log\n'
         u'    error = models.Error(identity=identity, **kwargs)\n'
         u'  File "appengine/ext/ndb/model.py", line 0, in __init__\n' %
           relpath_on_error.replace('.pyc', '.py'),
     'user': None,
     'version': None,
   }
   actual = models.Error.query().get().to_dict()
   # Zap out line numbers to 0, it's annoying otherwise to update the unit test
   # just for line move. Only keep the first 4 lines because json_dict
   # verification is a tad deep insode ndb/model.py.
   actual['stack'] = ''.join(
       re.sub(r' \d+', ' 0', actual['stack']).splitlines(True)[:4])
   # Also make no distinction between *.pyc and *.py files.
   actual['stack'] = actual['stack'].replace('.pyc', '.py')
   self.assertEqual(expected, actual)
Exemplo n.º 11
0
  def test_cron_old_errors(self):
    self.mock(logging, 'error', lambda *_a, **_k: None)
    kwargs = dict((k, k) for k in on_error.VALID_ERROR_KEYS)
    kwargs['category'] = 'exception'
    kwargs['duration'] = 2.3
    kwargs['source'] = 'bot'
    kwargs['source_ip'] = '0.0.0.0'
    on_error.log(**kwargs)

    # First call shouldn't delete the error since its not stale yet.
    headers = {'X-AppEngine-Cron': 'true'}
    response = self.app.get(
        '/internal/cron/ereporter2/cleanup', headers=headers)
    self.assertEqual('0', response.body)
    self.assertEqual(1, models.Error.query().count())

    # Set the current time to the future, but not too much.
    now = self._now + on_error.ERROR_TIME_TO_LIVE
    self.mock_now(now, -60)

    headers = {'X-AppEngine-Cron': 'true'}
    response = self.app.get(
        '/internal/cron/ereporter2/cleanup', headers=headers)
    self.assertEqual('0', response.body)
    self.assertEqual(1, models.Error.query().count())

    # Set the current time to the future.
    now = self._now + on_error.ERROR_TIME_TO_LIVE
    self.mock_now(now, 60)

    # Second call should remove the now stale error.
    headers = {'X-AppEngine-Cron': 'true'}
    response = self.app.get(
        '/internal/cron/ereporter2/cleanup', headers=headers)
    self.assertEqual('1', response.body)
    self.assertEqual(0, models.Error.query().count())
Exemplo n.º 12
0
  def test_cron_old_errors(self):
    self.mock(logging, 'error', lambda *_a, **_k: None)
    kwargs = dict((k, k) for k in on_error.VALID_ERROR_KEYS)
    kwargs['category'] = 'exception'
    kwargs['duration'] = 2.3
    kwargs['source'] = 'bot'
    kwargs['source_ip'] = '0.0.0.0'
    on_error.log(**kwargs)

    # First call shouldn't delete the error since its not stale yet.
    headers = {'X-AppEngine-Cron': 'true'}
    response = self.app.get(
        '/internal/cron/ereporter2/cleanup', headers=headers)
    self.assertEqual('0', response.body)
    self.assertEqual(1, models.Error.query().count())

    # Set the current time to the future, but not too much.
    now = self._now + on_error.ERROR_TIME_TO_LIVE
    self.mock_now(now, -60)

    headers = {'X-AppEngine-Cron': 'true'}
    response = self.app.get(
        '/internal/cron/ereporter2/cleanup', headers=headers)
    self.assertEqual('0', response.body)
    self.assertEqual(1, models.Error.query().count())

    # Set the current time to the future.
    now = self._now + on_error.ERROR_TIME_TO_LIVE
    self.mock_now(now, 60)

    # Second call should remove the now stale error.
    headers = {'X-AppEngine-Cron': 'true'}
    response = self.app.get(
        '/internal/cron/ereporter2/cleanup', headers=headers)
    self.assertEqual('1', response.body)
    self.assertEqual(0, models.Error.query().count())