from trac.db.api import _parse_db_str
import os
import unittest
class ParseConnectionStringTestCase(unittest.TestCase):
def test_sqlite_relative(self):
# Default syntax for specifying DB path relative to the environment
# directory
self.assertEqual(('sqlite', {'path': 'db/trac.db'}),
_parse_db_str('sqlite:db/trac.db'))
def test_sqlite_absolute(self):
# Standard syntax
self.assertEqual(('sqlite', {'path': '/var/db/trac.db'}),
_parse_db_str('sqlite:///var/db/trac.db'))
# Legacy syntax
self.assertEqual(('sqlite', {'path': '/var/db/trac.db'}),
_parse_db_str('sqlite:/var/db/trac.db'))
def test_sqlite_with_timeout_param(self):
# In-memory database
self.assertEqual(('sqlite', {'path': 'db/trac.db',
'params': {'timeout': '10000'}}),
_parse_db_str('sqlite:db/trac.db?timeout=10000'))
def test_sqlite_windows_path(self):
# In-memory database
os_name = os.name
try:
os.name = 'nt'
self.assertEqual(('sqlite', {'path': 'C:/project/db/trac.db'}),
_parse_db_str('sqlite:C|/project/db/trac.db'))
finally:
os.name = os_name
def test_postgres_simple(self):
self.assertEqual(('postgres', {'host': 'localhost', 'path': '/trac'}),
_parse_db_str('postgres://localhost/trac'))
def test_postgres_with_port(self):
self.assertEqual(('postgres', {'host': 'localhost', 'port': 9431,
'path': '/trac'}),
_parse_db_str('postgres://localhost:9431/trac'))
def test_postgres_with_creds(self):
self.assertEqual(('postgres', {'user': 'john', 'password': 'letmein',
'host': 'localhost', 'port': 9431,
'path': '/trac'}),
_parse_db_str('postgres://john:letmein@localhost:9431/trac'))
def test_postgres_with_quoted_password(self):
self.assertEqual(('postgres', {'user': 'john', 'password': ':@/',
'host': 'localhost', 'path': '/trac'}),
_parse_db_str('postgres://john:%3a%40%2f@localhost/trac'))
def test_mysql_simple(self):
self.assertEqual(('mysql', {'host': 'localhost', 'path': '/trac'}),
_parse_db_str('mysql://localhost/trac'))
def test_mysql_with_creds(self):
self.assertEqual(('mysql', {'user': 'john', 'password': 'letmein',
'host': 'localhost', 'port': 3306,
'path': '/trac'}),
_parse_db_str('mysql://john:letmein@localhost:3306/trac'))
def suite():
return unittest.makeSuite(ParseConnectionStringTestCase,'test')
if __name__ == '__main__':
unittest.main()
|