123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- #!/usr/bin/env python
- # Copyright (c) 2012 The Chromium Authors. All rights reserved.
- # Use of this source code is governed by a BSD-style license that can be
- # found in the LICENSE file.
- """Unit tests for breakpad.py."""
- import os
- import sys
- sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
- from testing_support.super_mox import SuperMoxTestBase
- import breakpad
- class Breakpad(SuperMoxTestBase):
- """Setups and tear downs the mocks but doesn't test anything as-is."""
- def setUp(self):
- super(Breakpad, self).setUp()
- self.mox.StubOutWithMock(breakpad.atexit, 'register')
- self.mox.StubOutWithMock(breakpad.getpass, 'getuser')
- self.mox.StubOutWithMock(breakpad.urllib2, 'urlopen')
- breakpad._HOST_NAME = 'bozo'
- self.assertEquals(False, breakpad.IS_ENABLED)
- breakpad.IS_ENABLED = True
- self._old_sys_argv = breakpad.sys.argv
- breakpad.sys.argv = ['my_test']
- self._old_sys_version = breakpad.sys.version
- breakpad.sys.version = 'random python'
- def tearDown(self):
- breakpad.IS_ENABLED = False
- breakpad.sys.version = self._old_sys_version
- breakpad.sys.argv = self._old_sys_argv
- super(Breakpad, self).tearDown()
- def testMembersChanged(self):
- members = [
- 'CheckForException', 'DEFAULT_URL', 'FormatException', 'IS_ENABLED',
- 'Register', 'SendProfiling', 'SendStack',
- 'atexit', 'getpass', 'os', 'post', 'socket', 'sys', 'time', 'traceback',
- 'urllib', 'urllib2',
- ]
- # If this test fails, you should add the relevant test.
- self.compareMembers(breakpad, members)
- def _part_1_setup_mocks(self, exception):
- breakpad.os.getcwd().AndReturn('/tmp/asdf')
- breakpad.getpass.getuser().AndReturn('georges')
- obj = self.mox.CreateMockAnything()
- kwargs = {}
- if (breakpad.sys.version_info[0] * 10 + breakpad.sys.version_info[1]) >= 26:
- kwargs['timeout'] = 4
- breakpad.urllib2.urlopen(
- 'https://chromium-status.appspot.com/breakpad',
- breakpad.urllib.urlencode([('exception', exception)]) + (
- '&args=%5B%27my_test%27%5D'
- '&stack=bar'
- '&host=bozo'
- '&version=random+python'
- '&user=georges'
- '&cwd=%2Ftmp%2Fasdf'),
- **kwargs).AndReturn(obj)
- obj.read().AndReturn('ok')
- obj.close()
- def _part_2_verify_stdout(self, exception):
- self.checkstdout(
- ( "Sending crash report ...\n"
- " args: ['my_test']\n"
- " cwd: /tmp/asdf\n"
- " exception: %s\n"
- " host: bozo\n"
- " stack: bar\n"
- " user: georges\n"
- " version: random python\n"
- "ok\n") % exception)
- def _check(self, obj, result):
- self._part_1_setup_mocks(result)
- self.mox.ReplayAll()
- breakpad.SendStack(obj, 'bar')
- self._part_2_verify_stdout(result)
- def testSendBase(self):
- self._check('foo', 'foo')
- def testSendReprThrows(self):
- class Throws(object):
- def __repr__(self):
- raise NotImplementedError()
- def __str__(self):
- return '[foo]'
- self._check(Throws(), '[foo]')
- def testSendStrThrows(self):
- class Throws(object):
- def __repr__(self):
- return '[foo]'
- def __str__(self):
- raise NotImplementedError()
- self._check(Throws(), '[foo]')
- def testSendBoth(self):
- class Both(object):
- def __repr__(self):
- return '[foo]'
- def __str__(self):
- return '[bar]'
- self._check(Both(), '[bar]')
- def testSendException(self):
- obj = Exception('foo')
- obj.msg = 'a message'
- self._check(obj, 'foo\nMsg: a message')
- if __name__ == '__main__':
- import unittest
- unittest.main()
|