diff --git a/tests/src/python/CMakeLists.txt b/tests/src/python/CMakeLists.txt index a7481fe91729..33d18779f06f 100755 --- a/tests/src/python/CMakeLists.txt +++ b/tests/src/python/CMakeLists.txt @@ -181,6 +181,7 @@ ADD_PYTHON_TEST(PyQgsFileDownloader test_qgsfiledownloader.py) ADD_PYTHON_TEST(PyQgsSettings test_qgssettings.py) ADD_PYTHON_TEST(PyQgsZipUtils test_qgsziputils.py) ADD_PYTHON_TEST(PyQgsSourceSelectProvider test_qgssourceselectprovider.py) +ADD_PYTHON_TEST(PyQgsAuthManagerProxy test_authmanager_proxy.py) IF (NOT WIN32) ADD_PYTHON_TEST(PyQgsLogger test_qgslogger.py) diff --git a/tests/src/python/test_authmanager_proxy.py b/tests/src/python/test_authmanager_proxy.py new file mode 100644 index 000000000000..b3bd93c545dd --- /dev/null +++ b/tests/src/python/test_authmanager_proxy.py @@ -0,0 +1,106 @@ +# -*- coding: utf-8 -*- +""" +Tests for auth manager Basic configuration update proxy + +From build dir, run from test directory: +LC_ALL=en_US.UTF-8 ctest -R PyQgsAuthManagerProxy -V + +.. note:: This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. +""" +import os +import re +import string +import sys +from functools import partial +from shutil import rmtree +import tempfile +import random + +from qgis.core import QgsAuthManager, QgsAuthMethodConfig, QgsNetworkAccessManager, QgsSettings +from qgis.testing import start_app, unittest + +from utilities import unitTestDataPath, waitServer + +__author__ = 'Alessandro Pasotti' +__date__ = '27/09/2017' +__copyright__ = 'Copyright 2017, The QGIS Project' +# This will get replaced with a git SHA1 when you do a git archive +__revision__ = '$Format:%H$' + + +QGIS_AUTH_DB_DIR_PATH = tempfile.mkdtemp() + +os.environ['QGIS_AUTH_DB_DIR_PATH'] = QGIS_AUTH_DB_DIR_PATH + +qgis_app = start_app() + + +class TestAuthManager(unittest.TestCase): + + @classmethod + def setUpClass(cls): + """Run before all tests: + Creates an auth configuration""" + cls.testdata_path = unitTestDataPath('qgis_server') + '/' + # Enable auth + # os.environ['QGIS_AUTH_PASSWORD_FILE'] = QGIS_AUTH_PASSWORD_FILE + authm = QgsAuthManager.instance() + assert (authm.setMasterPassword('masterpassword', True)) + cls.auth_config = QgsAuthMethodConfig('Basic') + cls.auth_config.setName('test_auth_config') + cls.username = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(6)) + cls.password = cls.username[::-1] # reversed + cls.auth_config.setConfig('username', cls.username) + cls.auth_config.setConfig('password', cls.password) + assert (authm.storeAuthenticationConfig(cls.auth_config)[0]) + + @classmethod + def tearDownClass(cls): + """Run after all tests""" + rmtree(QGIS_AUTH_DB_DIR_PATH) + + def setUp(self): + """Run before each test.""" + pass + + def tearDown(self): + """Run after each test.""" + pass + + def testProxyIsUpdated(self): + """ + Test that proxy is updated + """ + authm = QgsAuthManager.instance() + nam = QgsNetworkAccessManager.instance() + proxy = nam.proxy() + self.assertEqual(proxy.password(), '') + self.assertEqual(proxy.user(), '') + self.assertTrue(authm.updateNetworkProxy(proxy, self.auth_config.id())) + self.assertEqual(proxy.user(), self.username) + self.assertEqual(proxy.password(), self.password) + + def testProxyIsUpdatedByUserSettings(self): + """ + Test that proxy is updated + """ + nam = QgsNetworkAccessManager.instance() + nam.setupDefaultProxyAndCache() + proxy = nam.proxy() + self.assertEqual(proxy.password(), '') + self.assertEqual(proxy.user(), '') + settings = QgsSettings() + settings.setValue("proxy/authcfg", self.auth_config.id()) + settings.setValue("proxy/proxyEnabled", True) + del(settings) + nam.setupDefaultProxyAndCache() + proxy = nam.fallbackProxy() + self.assertEqual(proxy.password(), self.password) + self.assertEqual(proxy.user(), self.username) + + +if __name__ == '__main__': + unittest.main()