From 8a8232b4b93305b4136084fbc4b9182650b991e2 Mon Sep 17 00:00:00 2001 From: Paul Marillonnet Date: Wed, 25 Oct 2017 15:59:47 +0200 Subject: [PATCH] WIP migration django1.11 --- debian/control | 4 ++-- mellon/urls.py | 3 --- setup.py | 2 +- tests/{metadata.xml => dummy_metadata.xml} | 0 tests/eoidp_metadata.xml | 17 ++++++++++++++++ tests/test_default_adapter.py | 2 +- tests/test_sso_slo.py | 2 +- tests/test_utils.py | 4 ++-- tests/test_views.py | 31 ++++++++++++++++++------------ tests/urls_tests.py | 5 +---- tests/utils.py | 2 +- testsettings.py | 2 +- tox.ini | 3 ++- 13 files changed, 48 insertions(+), 29 deletions(-) rename tests/{metadata.xml => dummy_metadata.xml} (100%) create mode 100644 tests/eoidp_metadata.xml diff --git a/debian/control b/debian/control index 2c58b9c..ab55df3 100644 --- a/debian/control +++ b/debian/control @@ -3,7 +3,7 @@ Maintainer: Entr'ouvert Section: python Priority: optional Build-Depends: python-setuptools (>= 0.6b3), python-all (>= 2.7), debhelper (>= 7.4.3), - python-django (>= 1.5) + python-django (>= 1.11) Standards-Version: 3.9.1 X-Python-Version: >= 2.7 @@ -11,7 +11,7 @@ Package: python-django-mellon Architecture: all Depends: ${misc:Depends}, ${python:Depends}, python (>= 2.7), - python-django (>= 1.5), + python-django (>= 1.11), python-isodate, python-lasso Breaks: python-hobo (<< 0.34.5) diff --git a/mellon/urls.py b/mellon/urls.py index ad09beb..601d765 100644 --- a/mellon/urls.py +++ b/mellon/urls.py @@ -12,6 +12,3 @@ urlpatterns = [ url('metadata/$', views.metadata, name='mellon_metadata') ] -if django.VERSION < (1, 8): - from django.conf.urls import patterns - urlpatterns = patterns('', *urlpatterns) diff --git a/setup.py b/setup.py index 27948bb..0c719de 100755 --- a/setup.py +++ b/setup.py @@ -91,7 +91,7 @@ setup(name="django-mellon", include_package_data=True, packages=find_packages(), install_requires=[ - 'django>=1.5', + 'django>=1.11', 'requests', 'isodate', ], diff --git a/tests/metadata.xml b/tests/dummy_metadata.xml similarity index 100% rename from tests/metadata.xml rename to tests/dummy_metadata.xml diff --git a/tests/eoidp_metadata.xml b/tests/eoidp_metadata.xml new file mode 100644 index 0000000..ca736bd --- /dev/null +++ b/tests/eoidp_metadata.xml @@ -0,0 +1,17 @@ + +MIIC+TCCAeGgAwIBAgIJAJqAKDUDlSinMA0GCSqGSIb3DQEBBQUAMBMxETAPBgNV +BAMMCHdob2NhcmVzMB4XDTE0MDUyNzE0MzE0OVoXDTI0MDUyNDE0MzE0OVowEzER +MA8GA1UEAwwId2hvY2FyZXMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQDrUFQGviUE+unV4afJQiRUPp4/D+Ltvuw59BuJwdNEWHA2vchhnwDLlp3RWKaf +SWBJift55C4ybQKn5AEe6FHlIapJPvNqYnVP+0IgUFJmrxTWG9IT/5ZvJS0yer/O +093I5HTqthgcByIAj2L4R3oW21HNCojT4WZDYjG6RAxRFU/10BYY1ILe1SPAMXqc +99QC5fy2sZEJ/Cyd2Vlt1kAQ1+BZSZCL3vvdLfVRKjKZn2yYp8XbSplAZxB+b/iM +duSQHtLaRsV5tizPCdftXECaDn1FKqK0JmcolHFBsfOH2x7I8XEljO/DR/Oy4kzv +/cLdZB5fft4+nCqwLzI7fcRFAgMBAAGjUDBOMB0GA1UdDgQWBBSFV52hDdxJAdbM +Nht32j7+PyFbKTAfBgNVHSMEGDAWgBSFV52hDdxJAdbMNht32j7+PyFbKTAMBgNV +HRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQCoNxpm99qip4nROCedBIbZnqWj +EkqHRLvIsm+oxf4Ctc6x/N1d2ngEygfT1xf5N5V221XTOgLCkuqi5r0/T6EB7U9y +6ACfVJQmvNaPbFmn2J9rNIAPYPj2cengSZyL3mWyrkPFLj5TsgT98GASX9iThhds +Nq6btZUL9ZUq8v3O7Y1uruMHJAACim4eYBjsCXaF7diKYaftFiwZWy1+3IQzUhmg +Ov4KR9P9bb+W/43i7zAYmdUrBr31/amEvGHoco7cO2bp43/1H8fFOcnkX0wRdN/k +r/hRVIsfeC6ss1NPDu/KzbRVVn5p9qKK6YVqqT3QapnQELgajEfhxpgY7AQx \ No newline at end of file diff --git a/tests/test_default_adapter.py b/tests/test_default_adapter.py index 8189a39..5900f33 100644 --- a/tests/test_default_adapter.py +++ b/tests/test_default_adapter.py @@ -12,7 +12,7 @@ from mellon.backends import SAMLBackend pytestmark = pytest.mark.django_db idp = { - 'METADATA': file('tests/metadata.xml').read(), + 'METADATA': file('tests/dummy_metadata.xml').read(), } saml_attributes = { 'name_id_format': lasso.SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT, diff --git a/tests/test_sso_slo.py b/tests/test_sso_slo.py index 795e53d..e88a12a 100644 --- a/tests/test_sso_slo.py +++ b/tests/test_sso_slo.py @@ -13,7 +13,7 @@ from utils import reset_caplog @fixture def idp_metadata(): - return open('tests/metadata.xml').read() + return open('tests/dummy_metadata.xml').read() @fixture diff --git a/tests/test_utils.py b/tests/test_utils.py index ca73ba6..64140f7 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -75,7 +75,7 @@ def test_create_server_good_metadata_file(mocker, rf, private_settings, caplog): ] request = rf.get('/') with mock.patch( - 'mellon.adapters.file', mock.mock_open(read_data=file('tests/metadata.xml').read()), + 'mellon.adapters.file', mock.mock_open(read_data=file('tests/dummy_metadata.xml').read()), create=True): server = create_server(request) assert 'ERROR' not in caplog.text @@ -85,7 +85,7 @@ def test_create_server_good_metadata_file(mocker, rf, private_settings, caplog): def test_create_server_good_metadata(mocker, rf, private_settings, caplog): private_settings.MELLON_IDENTITY_PROVIDERS = [ { - 'METADATA': file('tests/metadata.xml').read(), + 'METADATA': file('tests/dummy_metadata.xml').read(), } ] request = rf.get('/') diff --git a/tests/test_views.py b/tests/test_views.py index 44d4c8e..f283e4a 100644 --- a/tests/test_views.py +++ b/tests/test_views.py @@ -165,7 +165,7 @@ def test_sp_initiated_login_discovery_service_nodisco(private_settings, client): def test_sp_initiated_login(private_settings, client): private_settings.MELLON_IDENTITY_PROVIDERS = [{ - 'METADATA': open('tests/metadata.xml').read(), + 'METADATA': open('tests/dummy_metadata.xml').read(), }] response = client.get('/login/?next=%2Fwhatever') assert response.status_code == 302 @@ -179,7 +179,7 @@ def test_sp_initiated_login(private_settings, client): def test_sp_initiated_login_chosen(private_settings, client): private_settings.MELLON_IDENTITY_PROVIDERS = [{ - 'METADATA': open('tests/metadata.xml').read(), + 'METADATA': open('tests/dummy_metadata.xml').read(), }] qs = urlencode({ 'entityID': 'http://idp5/metadata', @@ -197,7 +197,7 @@ def test_sp_initiated_login_chosen(private_settings, client): def test_sp_initiated_login_requested_authn_context(private_settings, client): private_settings.MELLON_IDENTITY_PROVIDERS = [{ - 'METADATA': open('tests/metadata.xml').read(), + 'METADATA': open('tests/dummy_metadata.xml').read(), 'AUTHN_CLASSREF': [u'urn:be:fedict:iam:fas:citizen:eid', u'urn:be:fedict:iam:fas:citizen:token'], }] @@ -216,7 +216,7 @@ def test_sp_initiated_login_requested_authn_context(private_settings, client): def test_malfortmed_artifact(private_settings, client, caplog): private_settings.MELLON_IDENTITY_PROVIDERS = [{ - 'METADATA': open('tests/metadata.xml').read(), + 'METADATA': open('tests/dummy_metadata.xml').read(), }] response = client.get('/login/?SAMLart=xxx', status=400) assert 'artifact is malformed' in response.content @@ -224,25 +224,32 @@ def test_malfortmed_artifact(private_settings, client, caplog): @pytest.fixture -def artifact(): +def dummy_artifact(): entity_id = 'http://idp5/metadata' token = 'x' * 20 return base64.b64encode('\x00\x04\x00\x00' + hashlib.sha1(entity_id).digest() + token) -def test_error_500_on_artifact_resolve(private_settings, client, caplog, artifact): +@pytest.fixture +def eoidp_artifact(): + entity_id = 'https://cresson.entrouvert.org/idp/saml2/metadata' + token = 'x' * 20 + return base64.b64encode('\x00\x04\x00\x00' + hashlib.sha1(entity_id).digest() + token) + + +def test_error_500_on_artifact_resolve(private_settings, client, caplog, dummy_artifact): private_settings.MELLON_IDENTITY_PROVIDERS = [{ - 'METADATA': open('tests/metadata.xml').read(), + 'METADATA': open('tests/dummy_metadata.xml').read(), }] with HTTMock(error_500): - client.get('/login/?SAMLart=%s' % artifact) + client.get('/login/?SAMLart=%s' % dummy_artifact) assert 'IdP returned 500' in caplog.text -def test_invalid_msg_on_artifact_resolve(private_settings, client, caplog, artifact): +def test_valid_msg_on_artifact_resolve(private_settings, client, caplog, eoidp_artifact): private_settings.MELLON_IDENTITY_PROVIDERS = [{ - 'METADATA': open('tests/metadata.xml').read(), + 'METADATA': open('tests/eoidp_metadata.xml').read(), }] with HTTMock(html_response): - client.get('/login/?SAMLart=%s' % artifact) - assert 'ArtifactResolveResponse is malformed' in caplog.text + client.get('/login/?SAMLart=%s' % eoidp_artifact) + assert 'Got SAML Artifact Response' in caplog.text diff --git a/tests/urls_tests.py b/tests/urls_tests.py index 62494e4..d95e2c0 100644 --- a/tests/urls_tests.py +++ b/tests/urls_tests.py @@ -1,6 +1,6 @@ import django -from django.conf.urls import patterns, url, include +from django.conf.urls import url, include from django.http import HttpResponse @@ -11,6 +11,3 @@ urlpatterns = [ url('^', include('mellon.urls')), url('^$', homepage, name='homepage'), ] - -if django.VERSION < (1, 9): - urlpatterns = patterns('', *urlpatterns) diff --git a/tests/utils.py b/tests/utils.py index 366fe7b..26074bb 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -13,7 +13,7 @@ def html_response(url, request): @all_requests def metadata_response(url, request): - return response(200, content=file('tests/metadata.xml').read()) + return response(200, content=file('tests/dummy_metadata.xml').read()) def reset_caplog(cap): diff --git a/testsettings.py b/testsettings.py index f1da827..dbf6244 100644 --- a/testsettings.py +++ b/testsettings.py @@ -28,7 +28,7 @@ ROOT_URLCONF = 'urls_tests' TEMPLATE_DIRS = [ 'tests/templates/', ] -if django.VERSION >= (1, 8): +if django.VERSION >= (1, 11): TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', diff --git a/tox.ini b/tox.ini index 883b8ec..eb34ad5 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = {coverage-,}{dj18,dj19}-{pg,sqlite} +envlist = {coverage-,}{dj18,dj19,dj111}-{pg,sqlite} toxworkdir = {env:TMPDIR:/tmp}/tox-{env:USER}/django-mellon/ [testenv] @@ -17,6 +17,7 @@ usedevelop = deps = dj18: django>1.8,<1.9 dj19: django>1.9,<1.10 + dj111: django>1.11,<1.12 pg: psycopg2 httmock pytest -- 2.11.0