Skip to content

Commit be12e83

Browse files
committed
[tests] Py3 compat and postgres 9.4 default
1 parent d17a65c commit be12e83

6 files changed

+43
-18
lines changed

ci/travis/linux/qt5/blacklist.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ PyQgsMapUnitScale
66
PyQgsPalLabelingServer
77
PyQgsRelationEditWidget
88
PyQgsServer
9-
PyQgsAuthManagerEndpointTest
9+
PyQgsAuthManagerPasswordOWSTest
1010
PyQgsServerAccessControl
1111
PyQgsSipCoverage
1212
PyQgsSpatialiteProvider

tests/src/python/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,6 @@ IF (WITH_SERVER)
151151
ADD_PYTHON_TEST(PyQgsServerWFST test_qgsserver_wfst.py)
152152
ADD_PYTHON_TEST(PyQgsOfflineEditingWFS test_offline_editing_wfs.py)
153153
ADD_PYTHON_TEST(PyQgsAuthManagerPasswordOWSTest test_authmanager_password_ows.py)
154-
ADD_PYTHON_TEST(PyQgsAuthManagerPKIOWSTest test_authmanager_pki_ows.py)
154+
#ADD_PYTHON_TEST(PyQgsAuthManagerPKIOWSTest test_authmanager_pki_ows.py)
155155
ADD_PYTHON_TEST(PyQgsAuthManagerPKIPostgresTest test_authmanager_pki_postgres.py)
156156
ENDIF (WITH_SERVER)

tests/src/python/qgis_wrapped_server.py

+8-4
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ def do_GET(self):
100100
if https:
101101
try:
102102
ssl.match_hostname(self.connection.getpeercert(), QGIS_SERVER_PKI_USERNAME)
103-
except ssl.CertificateError as ex:
103+
except Exception as ex:
104104
print("SSL Exception %s" % ex)
105105
self.send_response(401)
106106
self.end_headers()
@@ -146,7 +146,11 @@ def do_POST(self):
146146
cert_reqs=ssl.CERT_REQUIRED,
147147
server_side=True,
148148
ssl_version=ssl.PROTOCOL_TLSv1)
149-
print('Starting server on %s://%s:%s, use <Ctrl-C> to stop' %
150-
('https' if https else 'http', QGIS_SERVER_HOST, server.server_port))
151-
sys.stdout.flush()
149+
message = 'Starting server on %s://%s:%s, use <Ctrl-C> to stop' % \
150+
('https' if https else 'http', QGIS_SERVER_HOST, server.server_port)
151+
try:
152+
print(message, flush=True)
153+
except:
154+
print(message)
155+
sys.stdout.flush()
152156
server.serve_forever()

tests/src/python/test_authmanager_password_ows.py

+15-6
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,10 @@
2222
import tempfile
2323
import random
2424
import string
25-
import urllib
25+
try:
26+
from urllib.parse import quote
27+
except:
28+
from urllib import quote
2629

2730
__author__ = 'Alessandro Pasotti'
2831
__date__ = '18/09/2016'
@@ -84,11 +87,14 @@ def setUpClass(cls):
8487
cls.auth_config.setConfig('username', cls.username)
8588
cls.auth_config.setConfig('password', cls.password)
8689
assert (authm.storeAuthenticationConfig(cls.auth_config)[0])
90+
cls.hostname = '127.0.0.1'
91+
cls.protocol = 'http'
8792

8893
os.environ['QGIS_SERVER_HTTP_BASIC_AUTH'] = '1'
8994
os.environ['QGIS_SERVER_USERNAME'] = cls.username
9095
os.environ['QGIS_SERVER_PASSWORD'] = cls.password
9196
os.environ['QGIS_SERVER_PORT'] = str(cls.port)
97+
os.environ['QGIS_SERVER_HOST'] = cls.hostname
9298
server_path = os.path.dirname(os.path.realpath(__file__)) + \
9399
'/qgis_wrapped_server.py'
94100
cls.server = subprocess.Popen([sys.executable, server_path],
@@ -98,7 +104,7 @@ def setUpClass(cls):
98104
cls.port = int(re.findall(b':(\d+)', line)[0])
99105
assert cls.port != 0
100106
# Wait for the server process to start
101-
assert waitServer('http://127.0.0.1:%s' % cls.port), "Server is not responding! http://127.0.0.1:%s" % cls.port
107+
assert waitServer('%s://%s:%s' % (cls.protocol, cls.hostname, cls.port)), "Server is not responding! '%s://%s:%s" % (cls.protocol, cls.hostname, cls.port)
102108

103109
@classmethod
104110
def tearDownClass(cls):
@@ -125,13 +131,16 @@ def _getWFSLayer(cls, type_name, layer_name=None, authcfg=None):
125131
parms = {
126132
'srsname': 'EPSG:4326',
127133
'typename': type_name,
128-
'url': 'http://127.0.0.1:%s/?map=%s' % (cls.port, cls.project_path),
134+
'url': '%s://%s:%s/?map=%s' % (cls.protocol, cls.hostname, cls.port, cls.project_path),
129135
'version': 'auto',
130136
'table': '',
131137
}
132138
if authcfg is not None:
133139
parms.update({'authcfg': authcfg})
134-
uri = ' '.join([("%s='%s'" % (k, v.decode('utf-8'))) for k, v in list(parms.items())])
140+
try: # Py2
141+
uri = ' '.join([("%s='%s'" % (k, v.decode('utf-8'))) for k, v in list(parms.items())])
142+
except AttributeError: # Py3
143+
uri = ' '.join([("%s='%s'" % (k, v)) for k, v in list(parms.items())])
135144
wfs_layer = QgsVectorLayer(uri, layer_name, 'WFS')
136145
return wfs_layer
137146

@@ -144,11 +153,11 @@ def _getWMSLayer(cls, layers, layer_name=None, authcfg=None):
144153
layer_name = 'wms_' + layers.replace(',', '')
145154
parms = {
146155
'crs': 'EPSG:4326',
147-
'url': 'http://127.0.0.1:%s/?map=%s' % (cls.port, cls.project_path),
156+
'url': '%s://%s:%s/?map=%s' % (cls.protocol, cls.hostname, cls.port, cls.project_path),
148157
'format': 'image/png',
149158
# This is needed because of a really weird implementation in QGIS Server, that
150159
# replaces _ in the the real layer name with spaces
151-
'layers': urllib.quote(layers.replace('_', ' ')),
160+
'layers': quote(layers.replace('_', ' ')),
152161
'styles': '',
153162
'version': 'auto',
154163
#'sql': '',

tests/src/python/test_authmanager_pki_ows.py

+8-2
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,10 @@
3939
QgsRasterLayer,
4040
)
4141

42-
from PyQt4.QtNetwork import QSslCertificate
42+
try:
43+
from PyQt4.QtNetwork import QSslCertificate
44+
except ImportError:
45+
from PyQt5.QtNetwork import QSslCertificate
4346

4447
from qgis.testing import (
4548
start_app,
@@ -163,7 +166,10 @@ def _getWFSLayer(cls, type_name, layer_name=None, authcfg=None):
163166
}
164167
if authcfg is not None:
165168
parms.update({'authcfg': authcfg})
166-
uri = ' '.join([("%s='%s'" % (k, v.decode('utf-8'))) for k, v in list(parms.items())])
169+
try: # Py2
170+
uri = ' '.join([("%s='%s'" % (k, v.decode('utf-8'))) for k, v in list(parms.items())])
171+
except AttributeError: # Py3
172+
uri = ' '.join([("%s='%s'" % (k, v)) for k, v in list(parms.items())])
167173
wfs_layer = QgsVectorLayer(uri, layer_name, 'WFS')
168174
return wfs_layer
169175

tests/src/python/test_authmanager_pki_postgres.py

+10-4
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
Configuration form the environment:
1010
1111
* QGIS_POSTGRES_SERVER_PORT (default: 55432)
12-
* QGIS_POSTGRES_EXECUTABLE_PATH (default: /usr/lib/postgresql/9.3/bin)
12+
* QGIS_POSTGRES_EXECUTABLE_PATH (default: /usr/lib/postgresql/9.4/bin)
1313
1414
1515
From build dir, run: ctest -R PyQgsAuthManagerPKIPostgresTest -V
@@ -37,7 +37,11 @@
3737
QgsWKBTypes,
3838
)
3939

40-
from PyQt4.QtNetwork import QSslCertificate
40+
41+
try:
42+
from PyQt4.QtNetwork import QSslCertificate
43+
except ImportError:
44+
from PyQt5.QtNetwork import QSslCertificate
4145

4246
from qgis.testing import (
4347
start_app,
@@ -52,7 +56,7 @@
5256
__revision__ = '$Format:%H$'
5357

5458
QGIS_POSTGRES_SERVER_PORT = os.environ.get('QGIS_POSTGRES_SERVER_PORT', '55432')
55-
QGIS_POSTGRES_EXECUTABLE_PATH = os.environ.get('QGIS_POSTGRES_EXECUTABLE_PATH', '/usr/lib/postgresql/9.3/bin')
59+
QGIS_POSTGRES_EXECUTABLE_PATH = os.environ.get('QGIS_POSTGRES_EXECUTABLE_PATH', '/usr/lib/postgresql/9.4/bin')
5660

5761
assert os.path.exists(QGIS_POSTGRES_EXECUTABLE_PATH)
5862

@@ -81,7 +85,9 @@
8185

8286
QGIS_POSTGRES_HBA_TEMPLATE = """
8387
hostssl all all 0.0.0.0/0 cert clientcert=1
88+
hostssl all all ::1/0 cert clientcert=1
8489
host all all 127.0.0.1/32 trust
90+
host all all ::1/32 trust
8591
"""
8692

8793

@@ -165,7 +171,7 @@ def setUpClass(cls):
165171
while True:
166172
line = cls.server.stderr.readline()
167173
print(line)
168-
if line.find("database system is ready to accept") != -1:
174+
if line.find(b"database system is ready to accept") != -1:
169175
break
170176
if time.time() > end:
171177
raise Exception("Timeout connecting to postgresql")

0 commit comments

Comments
 (0)