From b009d82992548515260f6cb3a4dda3319e7fdec7 Mon Sep 17 00:00:00 2001 From: Jamie Lennox Date: Mon, 7 Dec 2015 15:15:42 +1100 Subject: [PATCH] Extract SAML fixtures into templates I want to do some more complicated testing with SAML assertions, however I can't read the XML snippets as they are or have any chance of modifying them. Extract the SAML fixtures into template files that I can reuse again later. Change-Id: I0af6bc538e53eeff62feb1767f9913f8ba6b9239 --- .../tests/unit/extras/saml2/fixtures.py | 171 ------------------ .../unit/extras/saml2/fixtures/__init__.py | 113 ++++++++++++ .../fixtures/templates/saml_assertion.xml | 69 +++++++ .../fixtures/templates/soap_response.xml | 45 +++++ 4 files changed, 227 insertions(+), 171 deletions(-) delete mode 100644 keystoneauth1/tests/unit/extras/saml2/fixtures.py create mode 100644 keystoneauth1/tests/unit/extras/saml2/fixtures/__init__.py create mode 100644 keystoneauth1/tests/unit/extras/saml2/fixtures/templates/saml_assertion.xml create mode 100644 keystoneauth1/tests/unit/extras/saml2/fixtures/templates/soap_response.xml diff --git a/keystoneauth1/tests/unit/extras/saml2/fixtures.py b/keystoneauth1/tests/unit/extras/saml2/fixtures.py deleted file mode 100644 index 2ecae6ad..00000000 --- a/keystoneauth1/tests/unit/extras/saml2/fixtures.py +++ /dev/null @@ -1,171 +0,0 @@ -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -import six - -SP_SOAP_RESPONSE = six.b(""" - - - - -https://openstack4.local/shibboleth - - - - - -ss:mem:6f1f20fafbb38433467e9d477df67615 - - - https://openstack4.local/shibboleth - - - - -""") - - -SAML2_ASSERTION = six.b(""" - - - - - x= - - - - - -https://idp.testshib.org/idp/shibboleth - - - - - - - - - - - - - - -VALUE== - - -VALUE= - - -""") - -UNSCOPED_TOKEN_HEADER = 'UNSCOPED_TOKEN' - -UNSCOPED_TOKEN = { - "token": { - "issued_at": "2014-06-09T09:48:59.643406Z", - "extras": {}, - "methods": ["saml2"], - "expires_at": "2014-06-09T10:48:59.643375Z", - "user": { - "OS-FEDERATION": { - "identity_provider": { - "id": "testshib" - }, - "protocol": { - "id": "saml2" - }, - "groups": [ - {"id": "1764fa5cf69a49a4918131de5ce4af9a"} - ] - }, - "id": "testhib%20user", - "name": "testhib user" - } - } -} - -PROJECTS = { - "projects": [ - { - "domain_id": "37ef61", - "enabled": 'true', - "id": "12d706", - "links": { - "self": "http://identity:35357/v3/projects/12d706" - }, - "name": "a project name" - }, - { - "domain_id": "37ef61", - "enabled": 'true', - "id": "9ca0eb", - "links": { - "self": "http://identity:35357/v3/projects/9ca0eb" - }, - "name": "another project" - } - ], - "links": { - "self": "http://identity:35357/v3/OS-FEDERATION/projects", - "previous": 'null', - "next": 'null' - } -} - -DOMAINS = { - "domains": [ - { - "description": "desc of domain", - "enabled": 'true', - "id": "37ef61", - "links": { - "self": "http://identity:35357/v3/domains/37ef61" - }, - "name": "my domain" - } - ], - "links": { - "self": "http://identity:35357/v3/OS-FEDERATION/domains", - "previous": 'null', - "next": 'null' - } -} diff --git a/keystoneauth1/tests/unit/extras/saml2/fixtures/__init__.py b/keystoneauth1/tests/unit/extras/saml2/fixtures/__init__.py new file mode 100644 index 00000000..b41e2c15 --- /dev/null +++ b/keystoneauth1/tests/unit/extras/saml2/fixtures/__init__.py @@ -0,0 +1,113 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import os +import string + +DIR = os.path.dirname(os.path.abspath(__file__)) + + +def template(f, **kwargs): + with open(os.path.join(DIR, 'templates', f)) as f: + return string.Template(f.read()).substitute(**kwargs) + + +def soap_response(**kwargs): + kwargs.setdefault('provider', 'https://idp.testshib.org/idp/shibboleth') + kwargs.setdefault('consumer', + 'https://openstack4.local/Shibboleth.sso/SAML2/ECP') + kwargs.setdefault('issuer', 'https://openstack4.local/shibboleth') + return template('soap_response.xml', **kwargs).encode('utf-8') + + +def saml_assertion(**kwargs): + kwargs.setdefault('issuer', 'https://idp.testshib.org/idp/shibboleth') + kwargs.setdefault('destination', + 'https://openstack4.local/Shibboleth.sso/SAML2/ECP') + return template('saml_assertion.xml', **kwargs).encode('utf-8') + + +SP_SOAP_RESPONSE = soap_response() +SAML2_ASSERTION = saml_assertion() + +UNSCOPED_TOKEN_HEADER = 'UNSCOPED_TOKEN' + +UNSCOPED_TOKEN = { + "token": { + "issued_at": "2014-06-09T09:48:59.643406Z", + "extras": {}, + "methods": ["saml2"], + "expires_at": "2014-06-09T10:48:59.643375Z", + "user": { + "OS-FEDERATION": { + "identity_provider": { + "id": "testshib" + }, + "protocol": { + "id": "saml2" + }, + "groups": [ + {"id": "1764fa5cf69a49a4918131de5ce4af9a"} + ] + }, + "id": "testhib%20user", + "name": "testhib user" + } + } +} + +PROJECTS = { + "projects": [ + { + "domain_id": "37ef61", + "enabled": 'true', + "id": "12d706", + "links": { + "self": "http://identity:35357/v3/projects/12d706" + }, + "name": "a project name" + }, + { + "domain_id": "37ef61", + "enabled": 'true', + "id": "9ca0eb", + "links": { + "self": "http://identity:35357/v3/projects/9ca0eb" + }, + "name": "another project" + } + ], + "links": { + "self": "http://identity:35357/v3/OS-FEDERATION/projects", + "previous": 'null', + "next": 'null' + } +} + +DOMAINS = { + "domains": [ + { + "description": "desc of domain", + "enabled": 'true', + "id": "37ef61", + "links": { + "self": "http://identity:35357/v3/domains/37ef61" + }, + "name": "my domain" + } + ], + "links": { + "self": "http://identity:35357/v3/OS-FEDERATION/domains", + "previous": 'null', + "next": 'null' + } +} diff --git a/keystoneauth1/tests/unit/extras/saml2/fixtures/templates/saml_assertion.xml b/keystoneauth1/tests/unit/extras/saml2/fixtures/templates/saml_assertion.xml new file mode 100644 index 00000000..13069370 --- /dev/null +++ b/keystoneauth1/tests/unit/extras/saml2/fixtures/templates/saml_assertion.xml @@ -0,0 +1,69 @@ + + + + + x= + + + + + + $issuer + + + + + + + + + + + + + + + + + + + + + VALUE== + + + + + + + VALUE= + + + + + + + diff --git a/keystoneauth1/tests/unit/extras/saml2/fixtures/templates/soap_response.xml b/keystoneauth1/tests/unit/extras/saml2/fixtures/templates/soap_response.xml new file mode 100644 index 00000000..879e5f2e --- /dev/null +++ b/keystoneauth1/tests/unit/extras/saml2/fixtures/templates/soap_response.xml @@ -0,0 +1,45 @@ + + + + + + $issuer + + + + + + + ss:mem:6f1f20fafbb38433467e9d477df67615 + + + + + + $issuer + + + + + + + + + +