Skip to content

Commit

Permalink
Add test for nested connection pool acquire freeze
Browse files Browse the repository at this point in the history
  • Loading branch information
m-kuhn committed Aug 2, 2018
1 parent 62a56b1 commit 7033b54
Showing 1 changed file with 24 additions and 1 deletion.
25 changes: 24 additions & 1 deletion tests/src/python/test_provider_postgres.py
Expand Up @@ -44,7 +44,9 @@
QgsCoordinateReferenceSystem,
QgsProject,
QgsWkbTypes,
QgsGeometry
QgsGeometry,
QgsExpression,
QgsExpressionContext
)
from qgis.gui import QgsGui, QgsAttributeForm
from qgis.PyQt.QtCore import QDate, QTime, QDateTime, QVariant, QDir, QObject
Expand Down Expand Up @@ -1141,6 +1143,27 @@ def testCurveToMultipolygon(self):
self.assertEqual(g.childCount(), 1)
self.assertTrue(g.childGeometry(0).vertexCount() > 3)

def testConcurrency(self):
"""
The connection pool has a maximum of 4 connections defined (+2 spare connections)
Make sure that if we exhaust those 4 connections and force another connection
it is actually using the spare connections and does not freeze.
This situation normally happens when (at least) 4 rendering threads are active
in parallel and one requires an expression to be evaluated.
"""
vl = QgsVectorLayer('{conn} srid=4326 table="qgis_test".{table} (geom) sql='.format(conn=self.dbconn, table='someData'), "testgeom", "postgres")
self.assertTrue(vl.isValid())
it = vl.getFeatures()
it2 = vl.getFeatures()
it3 = vl.getFeatures()
it4 = vl.getFeatures()
QgsProject.instance().addMapLayer(vl)
feat = next(it)
context = QgsExpressionContext()
context.setFeature(feat)
exp = QgsExpression('get_feature(\'{layer}\', \'pk\', 5)'.format(layer=vl.id()))
exp.evaluate(context)


class TestPyQgsPostgresProviderCompoundKey(unittest.TestCase, ProviderTestCase):

Expand Down

0 comments on commit 7033b54

Please sign in to comment.