Chromium Code Reviews| Index: tests/breakpad_unittest.py |
| diff --git a/tests/breakpad_unittest.py b/tests/breakpad_unittest.py |
| new file mode 100755 |
| index 0000000000000000000000000000000000000000..139bb0d43d395c7168309c44e15dafaa508fed56 |
| --- /dev/null |
| +++ b/tests/breakpad_unittest.py |
| @@ -0,0 +1,115 @@ |
| +#!/usr/bin/env python |
| +# Copyright (c) 2011 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.""" |
| + |
| +# pylint: disable=W0403 |
| + |
| +# Fixes include path. |
| +from 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._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.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', '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 _part1(self, exception): |
|
Dirk Pranke
2011/10/03 19:09:16
Nit: can you come up with better names than "part1
|
| + breakpad.os.getcwd().AndReturn('/tmp/asdf') |
| + breakpad.getpass.getuser().AndReturn('georges') |
| + obj = self.mox.CreateMockAnything() |
| + 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') |
| + ).AndReturn(obj) |
| + obj.read().AndReturn('ok') |
| + obj.close() |
| + |
| + def _part2(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._part1(result) |
| + self.mox.ReplayAll() |
| + breakpad.SendStack(obj, 'bar') |
| + self._part2(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() |