Added test for refcounting/gc bug reported by Michael Tharp

This commit is contained in:
Federico Di Gregorio 2010-04-08 18:42:20 +02:00
parent e8286084e9
commit 0a33ed01f5
2 changed files with 35 additions and 1 deletions

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@ -170,6 +170,9 @@
<None Include="doc\src\tools\stitch_text.py" /> <None Include="doc\src\tools\stitch_text.py" />
<None Include="doc\src\_static\psycopg.css" /> <None Include="doc\src\_static\psycopg.css" />
<None Include="doc\src\faq.rst" /> <None Include="doc\src\faq.rst" />
<None Include="tests\test_async.py" />
<None Include="tests\test_copy.py" />
<None Include="tests\bug_gc.py" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="psycopg\adapter_asis.c" /> <Compile Include="psycopg\adapter_asis.c" />

31
tests/bug_gc.py Executable file
View File

@ -0,0 +1,31 @@
#!/usr/bin/env python
import psycopg2
import psycopg2.extensions
import time
import unittest
import gc
import sys
if sys.version_info < (3,):
import tests
else:
import py3tests as tests
class StolenReferenceTestCase(unittest.TestCase):
def test_stolen_reference_bug(self):
def fish(val, cur):
gc.collect()
return 42
conn = psycopg2.connect(tests.dsn)
UUID = psycopg2.extensions.new_type((2950,), "UUID", fish)
psycopg2.extensions.register_type(UUID, conn)
curs = conn.cursor()
curs.execute("select 'b5219e01-19ab-4994-b71e-149225dc51e4'::uuid")
curs.fetchone()
def test_suite():
return unittest.TestLoader().loadTestsFromName(__name__)
if __name__ == "__main__":
unittest.main()