Skip to content

Commit 362d4f0

Browse files
committed
Add DBManager test for service-only URI
Ref #16626 Also fixes runs with non-standard QGIS_PGTEST_DB env variable set
1 parent de9e70e commit 362d4f0

File tree

1 file changed

+71
-24
lines changed

1 file changed

+71
-24
lines changed

python/plugins/db_manager/db_plugins/postgis/plugin_test.py

+71-24
Original file line numberDiff line numberDiff line change
@@ -41,42 +41,89 @@
4141

4242
class TestDBManagerPostgisPlugin(unittest.TestCase):
4343

44-
# See https://issues.qgis.org/issues/16625
45-
# and https://issues.qgis.org/issues/10600
44+
@classmethod
45+
def setUpClass(self):
46+
self.old_pgdatabase_env = os.environ.get('PGDATABASE')
47+
self.testdb = os.environ.get('QGIS_PGTEST_DB') or 'qgis_test'
48+
os.environ['PGDATABASE'] = self.testdb
49+
50+
# Create temporary service file
51+
self.old_pgservicefile_env = os.environ.get('PGSERVICEFILE')
52+
self.tmpservicefile = '/tmp/qgis-test-{}-pg_service.conf'.format(os.getpid())
53+
os.environ['PGSERVICEFILE'] = self.tmpservicefile
54+
55+
f = open(self.tmpservicefile, "w")
56+
f.write("[dbmanager]\ndbname={}\n".format(self.testdb))
57+
# TODO: add more things if PGSERVICEFILE was already set ?
58+
f.close()
59+
60+
@classmethod
61+
def tearDownClass(self):
62+
# Restore previous env variables if needed
63+
if self.old_pgdatabase_env:
64+
os.environ['PGDATABASE'] = self.old_pgdatabase_env
65+
if self.old_pgservicefile_env:
66+
os.environ['PGSERVICEFILE'] = self.old_pgservicefile_env
67+
# Remove temporary service file
68+
os.unlink(self.tmpservicefile)
4669

47-
def test_rasterTable(self):
70+
# See https://issues.qgis.org/issues/16625
4871

49-
testdb = os.environ.get('QGIS_PGTEST_DB') or 'qgis_test'
50-
os.environ['PGDATABASE'] = testdb
72+
def test_rasterTableGdalURI(self):
73+
74+
def check_rasterTableGdalURI(expected_dbname):
75+
tables = database.tables()
76+
raster_tables_count = 0
77+
for tab in tables:
78+
if tab.type == Table.RasterType:
79+
raster_tables_count += 1
80+
gdalUri = tab.gdalUri()
81+
m = re.search(' dbname=([^ ]*) ', gdalUri)
82+
self.assertTrue(m)
83+
actual_dbname = m.group(1)
84+
self.assertEqual(actual_dbname, expected_dbname)
85+
#print(tab.type)
86+
#print(tab.quotedName())
87+
#print(tab)
88+
89+
# We need to make sure a database is created with at
90+
# least one raster table !
91+
self.assertEqual(raster_tables_count, 1)
5192

5293
obj = QObject() # needs to be kept alive
94+
95+
# Test for empty URI
96+
# See https://issues.qgis.org/issues/16625
97+
# and https://issues.qgis.org/issues/10600
98+
99+
expected_dbname = self.testdb
100+
os.environ['PGDATABASE'] = expected_dbname
101+
53102
database = PGDatabase(obj, QgsDataSourceUri())
54103
self.assertIsInstance(database, PGDatabase)
55104

56105
uri = database.uri()
57106
self.assertEqual(uri.host(), '')
58107
self.assertEqual(uri.username(), '')
59-
expected_user = os.environ.get('PGUSER') or os.environ.get('USER')
60-
expected_dbname = os.environ.get('PGDATABASE') or expected_user
61108
self.assertEqual(uri.database(), expected_dbname)
109+
self.assertEqual(uri.service(), '')
110+
111+
check_rasterTableGdalURI(expected_dbname)
112+
113+
# Test for service-only URI
114+
# See https://issues.qgis.org/issues/16626
115+
116+
os.environ['PGDATABASE'] = 'fake'
117+
database = PGDatabase(obj, QgsDataSourceUri('service=dbmanager'))
118+
self.assertIsInstance(database, PGDatabase)
119+
120+
uri = database.uri()
121+
self.assertEqual(uri.host(), '')
122+
self.assertEqual(uri.username(), '')
123+
self.assertEqual(uri.database(), '')
124+
self.assertEqual(uri.service(), 'dbmanager')
62125

63-
tables = database.tables()
64-
raster_tables_count = 0
65-
for tab in tables:
66-
if tab.type == Table.RasterType:
67-
raster_tables_count += 1
68-
gdalUri = tab.gdalUri()
69-
m = re.search(' dbname=([^ ]*) ', gdalUri)
70-
self.assertTrue(m)
71-
actual_dbname = m.group(1)
72-
self.assertEqual(actual_dbname, expected_dbname)
73-
#print(tab.type)
74-
#print(tab.quotedName())
75-
#print(tab)
76-
77-
# We need to make sure a database is created with at
78-
# least one raster table !
79-
self.assertEqual(raster_tables_count, 1)
126+
check_rasterTableGdalURI(expected_dbname)
80127

81128

82129
if __name__ == '__main__':

0 commit comments

Comments
 (0)