root / test / pycurl_reset_unittest.py @ 0fcd0cad
History | View | Annotate | Download (2.3 kB)
1 | 4fd2660d | Michael Hanselmann | #!/usr/bin/python
|
---|---|---|---|
2 | 4fd2660d | Michael Hanselmann | #
|
3 | 4fd2660d | Michael Hanselmann | |
4 | 4fd2660d | Michael Hanselmann | # Copyright (C) 2011 Google Inc.
|
5 | 4fd2660d | Michael Hanselmann | #
|
6 | 4fd2660d | Michael Hanselmann | # This program is free software; you can redistribute it and/or modify
|
7 | 4fd2660d | Michael Hanselmann | # it under the terms of the GNU General Public License as published by
|
8 | 4fd2660d | Michael Hanselmann | # the Free Software Foundation; either version 2 of the License, or
|
9 | 4fd2660d | Michael Hanselmann | # (at your option) any later version.
|
10 | 4fd2660d | Michael Hanselmann | #
|
11 | 4fd2660d | Michael Hanselmann | # This program is distributed in the hope that it will be useful, but
|
12 | 4fd2660d | Michael Hanselmann | # WITHOUT ANY WARRANTY; without even the implied warranty of
|
13 | 4fd2660d | Michael Hanselmann | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14 | 4fd2660d | Michael Hanselmann | # General Public License for more details.
|
15 | 4fd2660d | Michael Hanselmann | #
|
16 | 4fd2660d | Michael Hanselmann | # You should have received a copy of the GNU General Public License
|
17 | 4fd2660d | Michael Hanselmann | # along with this program; if not, write to the Free Software
|
18 | 4fd2660d | Michael Hanselmann | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
19 | 4fd2660d | Michael Hanselmann | # 02110-1301, USA.
|
20 | 4fd2660d | Michael Hanselmann | |
21 | 4fd2660d | Michael Hanselmann | |
22 | 4fd2660d | Michael Hanselmann | """Script for testing for an issue in PycURL"""
|
23 | 4fd2660d | Michael Hanselmann | |
24 | 4fd2660d | Michael Hanselmann | import sys |
25 | 4fd2660d | Michael Hanselmann | import warnings |
26 | 4fd2660d | Michael Hanselmann | import unittest |
27 | 4fd2660d | Michael Hanselmann | import textwrap |
28 | 4fd2660d | Michael Hanselmann | import pycurl |
29 | 4fd2660d | Michael Hanselmann | |
30 | 4fd2660d | Michael Hanselmann | import testutils |
31 | 4fd2660d | Michael Hanselmann | |
32 | 4fd2660d | Michael Hanselmann | |
33 | 4fd2660d | Michael Hanselmann | DETAILS = [ |
34 | 4fd2660d | Michael Hanselmann | ("PycURL 7.19.0 added a new function named \"reset\" on \"pycurl.Curl\""
|
35 | 4fd2660d | Michael Hanselmann | " objects to release all references to other resources. Unfortunately that"
|
36 | 4fd2660d | Michael Hanselmann | " version contains a bug with reference counting on the \"None\" singleton,"
|
37 | 4fd2660d | Michael Hanselmann | " leading to a crash of the Python interpreter after a certain amount of"
|
38 | 4fd2660d | Michael Hanselmann | " performed requests. Your system uses a version of PycURL affected by this"
|
39 | 4fd2660d | Michael Hanselmann | " issue. A patch is available at [1]. A detailed description can be found"
|
40 | 4fd2660d | Michael Hanselmann | " at [2].\n"),
|
41 | 4fd2660d | Michael Hanselmann | "\n",
|
42 | 4fd2660d | Michael Hanselmann | ("[1] http://sf.net/tracker/?"
|
43 | 4fd2660d | Michael Hanselmann | "func=detail&aid=2893665&group_id=28236&atid=392777\n"),
|
44 | 4fd2660d | Michael Hanselmann | "[2] https://bugzilla.redhat.com/show_bug.cgi?id=624559",
|
45 | 4fd2660d | Michael Hanselmann | ] |
46 | 4fd2660d | Michael Hanselmann | |
47 | 4fd2660d | Michael Hanselmann | |
48 | 4fd2660d | Michael Hanselmann | class TestPyCurlReset(unittest.TestCase): |
49 | 4fd2660d | Michael Hanselmann | def test(self): |
50 | 4fd2660d | Michael Hanselmann | start_refcount = sys.getrefcount(None)
|
51 | 4fd2660d | Michael Hanselmann | abort_refcount = int(start_refcount * 0.8) |
52 | 4fd2660d | Michael Hanselmann | |
53 | 4fd2660d | Michael Hanselmann | assert start_refcount > 100 |
54 | 4fd2660d | Michael Hanselmann | |
55 | 4fd2660d | Michael Hanselmann | curl = pycurl.Curl() |
56 | 4fd2660d | Michael Hanselmann | try:
|
57 | 4fd2660d | Michael Hanselmann | reset_fn = curl.reset |
58 | 4fd2660d | Michael Hanselmann | except AttributeError: |
59 | 4fd2660d | Michael Hanselmann | pass
|
60 | 4fd2660d | Michael Hanselmann | else:
|
61 | 4fd2660d | Michael Hanselmann | for i in range(start_refcount * 2): |
62 | 4fd2660d | Michael Hanselmann | reset_fn() |
63 | 4fd2660d | Michael Hanselmann | # The bug can be detected if calling "reset" several times continously
|
64 | 4fd2660d | Michael Hanselmann | # reduces the number of references
|
65 | 4fd2660d | Michael Hanselmann | if sys.getrefcount(None) < abort_refcount: |
66 | 4fd2660d | Michael Hanselmann | print >>sys.stderr, "#" * 78 |
67 | 4fd2660d | Michael Hanselmann | for line in DETAILS: |
68 | 4fd2660d | Michael Hanselmann | print >>sys.stderr, textwrap.fill(line, width=78) |
69 | 4fd2660d | Michael Hanselmann | print >>sys.stderr, "#" * 78 |
70 | 4fd2660d | Michael Hanselmann | break
|
71 | 4fd2660d | Michael Hanselmann | |
72 | 4fd2660d | Michael Hanselmann | |
73 | 4fd2660d | Michael Hanselmann | if __name__ == "__main__": |
74 | 4fd2660d | Michael Hanselmann | testutils.GanetiTestProgram() |