|
11 | 11 |
|
12 | 12 | from ..driver import dbapi20 as dbapi20 |
13 | 13 | from .. import driver as pg_driver |
| 14 | +from .. import open as pg_open |
14 | 15 |
|
15 | 16 | class test_connect(pg_unittest.TestCaseWithCluster): |
16 | 17 | """ |
@@ -71,6 +72,88 @@ def initialize_database(self): |
71 | 72 | """ |
72 | 73 | ) |
73 | 74 |
|
| 75 | + def test_pg_open(self): |
| 76 | + # postgresql.open |
| 77 | + host, port = self.cluster.address() |
| 78 | + # test simple locators.. |
| 79 | + with pg_open( |
| 80 | + 'pq://' + 'md5:' + 'md5_password@' + host + ':' + str(port) \ |
| 81 | + + '/test' |
| 82 | + ) as db: |
| 83 | + self.failUnlessEqual(db.prepare('select 1')(), [(1,)]) |
| 84 | + self.failUnless(db.closed) |
| 85 | + |
| 86 | + with pg_open( |
| 87 | + 'pq://' + 'password:' + 'password_password@' + host + ':' + str(port) \ |
| 88 | + + '/test' |
| 89 | + ) as db: |
| 90 | + self.failUnlessEqual(db.prepare('select 1')(), [(1,)]) |
| 91 | + self.failUnless(db.closed) |
| 92 | + |
| 93 | + with pg_open( |
| 94 | + 'pq://' + 'trusted@' + host + ':' + str(port) + '/test' |
| 95 | + ) as db: |
| 96 | + self.failUnlessEqual(db.prepare('select 1')(), [(1,)]) |
| 97 | + self.failUnless(db.closed) |
| 98 | + |
| 99 | + # test environment collection |
| 100 | + pgenv = ('PGUSER', 'PGPORT', 'PGHOST', 'PGSERVICE', 'PGPASSWORD', 'PGDATABASE') |
| 101 | + stored = list(map(os.environ.get, pgenv)) |
| 102 | + try: |
| 103 | + os.environ.pop('PGSERVICE', None) |
| 104 | + os.environ['PGUSER'] = 'md5' |
| 105 | + os.environ['PGPASSWORD'] = 'md5_password' |
| 106 | + os.environ['PGHOST'] = host |
| 107 | + os.environ['PGPORT'] = str(port) |
| 108 | + os.environ['PGDATABASE'] = 'test' |
| 109 | + # No arguments, the environment provided everything. |
| 110 | + with pg_open() as db: |
| 111 | + self.failUnlessEqual(db.prepare('select 1')(), [(1,)]) |
| 112 | + self.failUnlessEqual(db.prepare('select current_user').first(), 'md5') |
| 113 | + self.failUnless(db.closed) |
| 114 | + finally: |
| 115 | + i = 0 |
| 116 | + for x in stored: |
| 117 | + env = pgenv[i] |
| 118 | + if x is None: |
| 119 | + os.environ.pop(env, None) |
| 120 | + else: |
| 121 | + os.environ[env] = x |
| 122 | + |
| 123 | + oldservice = os.environ.get('PGSERVICE') |
| 124 | + oldsysconfdir = os.environ.get('PGSYSCONFDIR') |
| 125 | + try: |
| 126 | + with open('pg_service.conf', 'w') as sf: |
| 127 | + sf.write(''' |
| 128 | +[myserv] |
| 129 | +user = password |
| 130 | +password = password_password |
| 131 | +host = {host} |
| 132 | +port = {port} |
| 133 | +dbname = test |
| 134 | +search_path = public |
| 135 | +'''.format(host = host, port = port)) |
| 136 | + sf.flush() |
| 137 | + try: |
| 138 | + os.environ['PGSERVICE'] = 'myserv' |
| 139 | + os.environ['PGSYSCONFDIR'] = os.getcwd() |
| 140 | + with pg_open() as db: |
| 141 | + self.failUnlessEqual(db.prepare('select 1')(), [(1,)]) |
| 142 | + self.failUnlessEqual(db.prepare('select current_user').first(), 'password') |
| 143 | + self.failUnlessEqual(db.settings['search_path'], 'public') |
| 144 | + finally: |
| 145 | + if oldservice is None: |
| 146 | + os.environ.pop('PGSERVICE', None) |
| 147 | + else: |
| 148 | + os.environ['PGSERVICE'] = oldservice |
| 149 | + if oldsysconfdir is None: |
| 150 | + os.environ.pop('PGSYSCONFDIR', None) |
| 151 | + else: |
| 152 | + os.environ['PGSYSCONFDIR'] = oldsysconfdir |
| 153 | + finally: |
| 154 | + if os.path.exists('pg_service.conf'): |
| 155 | + os.remove('pg_service.conf') |
| 156 | + |
74 | 157 | def test_dbapi_connect(self): |
75 | 158 | host, port = self.cluster.address() |
76 | 159 | MD5 = dbapi20.connect( |
|
0 commit comments