2009-01-17 06:23:58 +08:00
# -*- coding: utf-8 -*-
2009-03-30 07:15:58 +08:00
# Unit and doctests for specific database backends.
2009-01-17 06:23:58 +08:00
import unittest
2009-12-22 23:18:51 +08:00
from django . db import backend , connection , DEFAULT_DB_ALIAS
2009-03-30 07:15:58 +08:00
from django . db . backends . signals import connection_created
2009-01-17 06:23:58 +08:00
from django . conf import settings
class Callproc ( unittest . TestCase ) :
def test_dbms_session ( self ) :
# If the backend is Oracle, test that we can call a standard
# stored procedure through our cursor wrapper.
2009-12-22 23:18:51 +08:00
if settings . DATABASES [ DEFAULT_DB_ALIAS ] [ ' ENGINE ' ] == ' django.db.backends.oracle ' :
2009-08-24 23:45:48 +08:00
convert_unicode = backend . convert_unicode
2009-01-17 06:23:58 +08:00
cursor = connection . cursor ( )
2009-08-24 23:45:48 +08:00
cursor . callproc ( convert_unicode ( ' DBMS_SESSION.SET_IDENTIFIER ' ) ,
[ convert_unicode ( ' _django_testing! ' ) , ] )
2009-01-17 06:23:58 +08:00
return True
else :
return True
2009-12-22 23:18:51 +08:00
2009-07-22 05:20:18 +08:00
class LongString ( unittest . TestCase ) :
def test_long_string ( self ) :
# If the backend is Oracle, test that we can save a text longer
# than 4000 chars and read it properly
2009-12-22 23:18:51 +08:00
if settings . DATABASES [ DEFAULT_DB_ALIAS ] [ ' ENGINE ' ] == ' django.db.backends.oracle ' :
2009-07-22 05:20:18 +08:00
c = connection . cursor ( )
c . execute ( ' CREATE TABLE ltext ( " TEXT " NCLOB) ' )
long_str = ' ' . join ( [ unicode ( x ) for x in xrange ( 4000 ) ] )
c . execute ( ' INSERT INTO ltext VALUES ( %s ) ' , [ long_str ] )
c . execute ( ' SELECT text FROM ltext ' )
row = c . fetchone ( )
c . execute ( ' DROP TABLE ltext ' )
self . assertEquals ( long_str , row [ 0 ] . read ( ) )
2009-01-17 06:23:58 +08:00
2009-03-30 07:15:58 +08:00
def connection_created_test ( sender , * * kwargs ) :
print ' connection_created signal '
2009-05-10 17:22:06 +08:00
__test__ = { ' API_TESTS ' : """
# Check Postgres version parsing
>> > from django . db . backends . postgresql import version as pg_version
>> > pg_version . _parse_version ( " PostgreSQL 8.3.1 on i386-apple-darwin9.2.2, compiled by GCC i686-apple-darwin9-gcc-4.0.1 (GCC) 4.0.1 (Apple Inc. build 5478) " )
( 8 , 3 , 1 )
>> > pg_version . _parse_version ( " PostgreSQL 8.3.6 " )
( 8 , 3 , 6 )
>> > pg_version . _parse_version ( " PostgreSQL 8.3 " )
( 8 , 3 , None )
>> > pg_version . _parse_version ( " EnterpriseDB 8.3 " )
( 8 , 3 , None )
>> > pg_version . _parse_version ( " PostgreSQL 8.3 beta4 " )
( 8 , 3 , None )
>> > pg_version . _parse_version ( " PostgreSQL 8.4beta1 " )
( 8 , 4 , None )
""" }
2009-03-30 07:15:58 +08:00
# Unfortunately with sqlite3 the in-memory test database cannot be
# closed, and so it cannot be re-opened during testing, and so we
# sadly disable this test for now.
2009-12-22 23:18:51 +08:00
if settings . DATABASES [ DEFAULT_DB_ALIAS ] [ ' ENGINE ' ] != ' django.db.backends.sqlite3 ' :
2009-03-30 07:15:58 +08:00
__test__ [ ' API_TESTS ' ] + = """
>> > connection_created . connect ( connection_created_test )
>> > connection . close ( ) # Ensure the connection is closed
>> > cursor = connection . cursor ( )
connection_created signal
>> > connection_created . disconnect ( connection_created_test )
>> > cursor = connection . cursor ( )
"""
2009-01-17 06:23:58 +08:00
if __name__ == ' __main__ ' :
unittest . main ( )