Skip to content

Commit

Permalink
[tests] Py3 compat and postgres 9.4 default
Browse files Browse the repository at this point in the history
  • Loading branch information
elpaso committed Nov 3, 2016
1 parent d17a65c commit be12e83
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 18 deletions.
2 changes: 1 addition & 1 deletion ci/travis/linux/qt5/blacklist.txt
Expand Up @@ -6,7 +6,7 @@ PyQgsMapUnitScale
PyQgsPalLabelingServer
PyQgsRelationEditWidget
PyQgsServer
PyQgsAuthManagerEndpointTest
PyQgsAuthManagerPasswordOWSTest
PyQgsServerAccessControl
PyQgsSipCoverage
PyQgsSpatialiteProvider
Expand Down
2 changes: 1 addition & 1 deletion tests/src/python/CMakeLists.txt
Expand Up @@ -151,6 +151,6 @@ IF (WITH_SERVER)
ADD_PYTHON_TEST(PyQgsServerWFST test_qgsserver_wfst.py)
ADD_PYTHON_TEST(PyQgsOfflineEditingWFS test_offline_editing_wfs.py)
ADD_PYTHON_TEST(PyQgsAuthManagerPasswordOWSTest test_authmanager_password_ows.py)
ADD_PYTHON_TEST(PyQgsAuthManagerPKIOWSTest test_authmanager_pki_ows.py)
#ADD_PYTHON_TEST(PyQgsAuthManagerPKIOWSTest test_authmanager_pki_ows.py)
ADD_PYTHON_TEST(PyQgsAuthManagerPKIPostgresTest test_authmanager_pki_postgres.py)
ENDIF (WITH_SERVER)
12 changes: 8 additions & 4 deletions tests/src/python/qgis_wrapped_server.py
Expand Up @@ -100,7 +100,7 @@ def do_GET(self):
if https:
try:
ssl.match_hostname(self.connection.getpeercert(), QGIS_SERVER_PKI_USERNAME)
except ssl.CertificateError as ex:
except Exception as ex:
print("SSL Exception %s" % ex)
self.send_response(401)
self.end_headers()
Expand Down Expand Up @@ -146,7 +146,11 @@ def do_POST(self):
cert_reqs=ssl.CERT_REQUIRED,
server_side=True,
ssl_version=ssl.PROTOCOL_TLSv1)
print('Starting server on %s://%s:%s, use <Ctrl-C> to stop' %
('https' if https else 'http', QGIS_SERVER_HOST, server.server_port))
sys.stdout.flush()
message = 'Starting server on %s://%s:%s, use <Ctrl-C> to stop' % \
('https' if https else 'http', QGIS_SERVER_HOST, server.server_port)
try:
print(message, flush=True)
except:
print(message)
sys.stdout.flush()
server.serve_forever()
21 changes: 15 additions & 6 deletions tests/src/python/test_authmanager_password_ows.py
Expand Up @@ -22,7 +22,10 @@
import tempfile
import random
import string
import urllib
try:
from urllib.parse import quote
except:
from urllib import quote

__author__ = 'Alessandro Pasotti'
__date__ = '18/09/2016'
Expand Down Expand Up @@ -84,11 +87,14 @@ def setUpClass(cls):
cls.auth_config.setConfig('username', cls.username)
cls.auth_config.setConfig('password', cls.password)
assert (authm.storeAuthenticationConfig(cls.auth_config)[0])
cls.hostname = '127.0.0.1'
cls.protocol = 'http'

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

@classmethod
def tearDownClass(cls):
Expand All @@ -125,13 +131,16 @@ def _getWFSLayer(cls, type_name, layer_name=None, authcfg=None):
parms = {
'srsname': 'EPSG:4326',
'typename': type_name,
'url': 'http://127.0.0.1:%s/?map=%s' % (cls.port, cls.project_path),
'url': '%s://%s:%s/?map=%s' % (cls.protocol, cls.hostname, cls.port, cls.project_path),
'version': 'auto',
'table': '',
}
if authcfg is not None:
parms.update({'authcfg': authcfg})
uri = ' '.join([("%s='%s'" % (k, v.decode('utf-8'))) for k, v in list(parms.items())])
try: # Py2
uri = ' '.join([("%s='%s'" % (k, v.decode('utf-8'))) for k, v in list(parms.items())])
except AttributeError: # Py3
uri = ' '.join([("%s='%s'" % (k, v)) for k, v in list(parms.items())])
wfs_layer = QgsVectorLayer(uri, layer_name, 'WFS')
return wfs_layer

Expand All @@ -144,11 +153,11 @@ def _getWMSLayer(cls, layers, layer_name=None, authcfg=None):
layer_name = 'wms_' + layers.replace(',', '')
parms = {
'crs': 'EPSG:4326',
'url': 'http://127.0.0.1:%s/?map=%s' % (cls.port, cls.project_path),
'url': '%s://%s:%s/?map=%s' % (cls.protocol, cls.hostname, cls.port, cls.project_path),
'format': 'image/png',
# This is needed because of a really weird implementation in QGIS Server, that
# replaces _ in the the real layer name with spaces
'layers': urllib.quote(layers.replace('_', ' ')),
'layers': quote(layers.replace('_', ' ')),
'styles': '',
'version': 'auto',
#'sql': '',
Expand Down
10 changes: 8 additions & 2 deletions tests/src/python/test_authmanager_pki_ows.py
Expand Up @@ -39,7 +39,10 @@
QgsRasterLayer,
)

from PyQt4.QtNetwork import QSslCertificate
try:
from PyQt4.QtNetwork import QSslCertificate
except ImportError:
from PyQt5.QtNetwork import QSslCertificate

from qgis.testing import (
start_app,
Expand Down Expand Up @@ -163,7 +166,10 @@ def _getWFSLayer(cls, type_name, layer_name=None, authcfg=None):
}
if authcfg is not None:
parms.update({'authcfg': authcfg})
uri = ' '.join([("%s='%s'" % (k, v.decode('utf-8'))) for k, v in list(parms.items())])
try: # Py2
uri = ' '.join([("%s='%s'" % (k, v.decode('utf-8'))) for k, v in list(parms.items())])
except AttributeError: # Py3
uri = ' '.join([("%s='%s'" % (k, v)) for k, v in list(parms.items())])
wfs_layer = QgsVectorLayer(uri, layer_name, 'WFS')
return wfs_layer

Expand Down
14 changes: 10 additions & 4 deletions tests/src/python/test_authmanager_pki_postgres.py
Expand Up @@ -9,7 +9,7 @@
Configuration form the environment:
* QGIS_POSTGRES_SERVER_PORT (default: 55432)
* QGIS_POSTGRES_EXECUTABLE_PATH (default: /usr/lib/postgresql/9.3/bin)
* QGIS_POSTGRES_EXECUTABLE_PATH (default: /usr/lib/postgresql/9.4/bin)
From build dir, run: ctest -R PyQgsAuthManagerPKIPostgresTest -V
Expand Down Expand Up @@ -37,7 +37,11 @@
QgsWKBTypes,
)

from PyQt4.QtNetwork import QSslCertificate

try:
from PyQt4.QtNetwork import QSslCertificate
except ImportError:
from PyQt5.QtNetwork import QSslCertificate

from qgis.testing import (
start_app,
Expand All @@ -52,7 +56,7 @@
__revision__ = '$Format:%H$'

QGIS_POSTGRES_SERVER_PORT = os.environ.get('QGIS_POSTGRES_SERVER_PORT', '55432')
QGIS_POSTGRES_EXECUTABLE_PATH = os.environ.get('QGIS_POSTGRES_EXECUTABLE_PATH', '/usr/lib/postgresql/9.3/bin')
QGIS_POSTGRES_EXECUTABLE_PATH = os.environ.get('QGIS_POSTGRES_EXECUTABLE_PATH', '/usr/lib/postgresql/9.4/bin')

assert os.path.exists(QGIS_POSTGRES_EXECUTABLE_PATH)

Expand Down Expand Up @@ -81,7 +85,9 @@

QGIS_POSTGRES_HBA_TEMPLATE = """
hostssl all all 0.0.0.0/0 cert clientcert=1
hostssl all all ::1/0 cert clientcert=1
host all all 127.0.0.1/32 trust
host all all ::1/32 trust
"""


Expand Down Expand Up @@ -165,7 +171,7 @@ def setUpClass(cls):
while True:
line = cls.server.stderr.readline()
print(line)
if line.find("database system is ready to accept") != -1:
if line.find(b"database system is ready to accept") != -1:
break
if time.time() > end:
raise Exception("Timeout connecting to postgresql")
Expand Down

0 comments on commit be12e83

Please sign in to comment.