Blame bindings/python/tests/idwsf2_tests.py

Packit Service 88ab54
# -*- coding: UTF-8 -*-
Packit Service 88ab54
#
Packit Service 88ab54
# $Id: idwsf2_tests.py 3254 2007-06-05 21:23:57Z dlaniel $
Packit Service 88ab54
#
Packit Service 88ab54
# Python unit tests for Lasso library
Packit Service 88ab54
#
Packit Service 88ab54
# Copyright (C) 2004-2007 Entr'ouvert
Packit Service 88ab54
# http://lasso.entrouvert.org
Packit Service 88ab54
#
Packit Service 88ab54
# Authors: See AUTHORS file in top-level directory.
Packit Service 88ab54
#
Packit Service 88ab54
# This program is free software; you can redistribute it and/or modify
Packit Service 88ab54
# it under the terms of the GNU General Public License as published by
Packit Service 88ab54
# the Free Software Foundation; either version 2 of the License, or
Packit Service 88ab54
# (at your option) any later version.
Packit Service 88ab54
#
Packit Service 88ab54
# This program is distributed in the hope that it will be useful,
Packit Service 88ab54
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 88ab54
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 88ab54
# GNU General Public License for more details.
Packit Service 88ab54
#
Packit Service 88ab54
# You should have received a copy of the GNU General Public License
Packit Service 88ab54
# along with this program; if not, see <http://www.gnu.org/licenses/>.
Packit Service 88ab54
Packit Service 88ab54
Packit Service 88ab54
import os
Packit Service 88ab54
import unittest
Packit Service 88ab54
import sys
Packit Service ad8a8e
from six import StringIO
Packit Service 88ab54
import logging
Packit Service 88ab54
Packit Service 88ab54
logging.basicConfig()
Packit Service 88ab54
Packit Service 88ab54
if not '..' in sys.path:
Packit Service 88ab54
    sys.path.insert(0, '..')
Packit Service 88ab54
if not '../.libs' in sys.path:
Packit Service 88ab54
    sys.path.insert(0, '../.libs')
Packit Service 88ab54
Packit Service 88ab54
import lasso
Packit Service 88ab54
Packit Service 88ab54
try:
Packit Service 88ab54
    import lxml.etree as ET
Packit Service 88ab54
except ImportError:
Packit Service 88ab54
    try:
Packit Service 88ab54
        import elementtree.ElementTree as ET
Packit Service 88ab54
    except ImportError:
Packit Service 88ab54
        import xml.etree.ElementTree as ET
Packit Service 88ab54
Packit Service 88ab54
try:
Packit Service 88ab54
    dataDir
Packit Service 88ab54
except NameError:
Packit Service 88ab54
    dataDir = os.path.join(os.environ['TOP_SRCDIR'], 'tests', 'data')
Packit Service 88ab54
Packit Service 88ab54
idpSoapEndpoint = 'http://idp1/soapEndpoint'
Packit Service 88ab54
spSoapEndpoint = 'http://sp1/soapEndpoint'
Packit Service 88ab54
spInteractionUrl = 'http://sp1/askMeAQuestion'
Packit Service 88ab54
Packit Service 88ab54
class IdWsf2TestCase(unittest.TestCase):
Packit Service 88ab54
    def getWspServer(self):
Packit Service 88ab54
        wsp_metadata = os.path.join(dataDir, 'sp5-saml2/metadata.xml')
Packit Service 88ab54
        wsp_private_key = os.path.join(dataDir, 'sp5-saml2/private-key.pem')
Packit Service 88ab54
        idp_metadata = os.path.join(dataDir, 'idp5-saml2/metadata.xml')
Packit Service 88ab54
Packit Service 88ab54
        server = lasso.Server(wsp_metadata, wsp_private_key, None, None)
Packit Service 88ab54
        server.role = lasso.PROVIDER_ROLE_SP
Packit Service 88ab54
        server.addProvider(lasso.PROVIDER_ROLE_IDP, idp_metadata, None, None)
Packit Service 88ab54
        server.setEncryptionPrivateKey(wsp_private_key);
Packit Service 88ab54
Packit Service 88ab54
        return server;
Packit Service 88ab54
Packit Service 88ab54
    def getWscServer(self):
Packit Service 88ab54
        wsc_metadata = os.path.join(dataDir, 'sp6-saml2/metadata.xml')
Packit Service 88ab54
        wsc_private_key = os.path.join(dataDir, 'sp6-saml2/private-key.pem')
Packit Service 88ab54
        idp_metadata = os.path.join(dataDir, 'idp5-saml2/metadata.xml')
Packit Service 88ab54
Packit Service 88ab54
        server = lasso.Server(wsc_metadata, wsc_private_key, None, None)
Packit Service 88ab54
        server.role = lasso.PROVIDER_ROLE_SP
Packit Service 88ab54
        server.addProvider(lasso.PROVIDER_ROLE_IDP, idp_metadata, None, None)
Packit Service 88ab54
Packit Service 88ab54
        return server;
Packit Service 88ab54
Packit Service 88ab54
    def getIdpServer(self):
Packit Service 88ab54
        if hasattr(self, 'idp_server_dump') and self.idp_server_dump is not None:
Packit Service 88ab54
            server = lasso.Server.newFromDump(self.idp_server_dump)
Packit Service 88ab54
            server.role = lasso.PROVIDER_ROLE_IDP
Packit Service 88ab54
        else:
Packit Service 88ab54
            idp_metadata = os.path.join(dataDir, 'idp5-saml2/metadata.xml')
Packit Service 88ab54
            idp_private_key = os.path.join(dataDir, 'idp5-saml2/private-key.pem')
Packit Service 88ab54
            wsp_metadata = os.path.join(dataDir, 'sp5-saml2/metadata.xml')
Packit Service 88ab54
            wsc_metadata = os.path.join(dataDir, 'sp6-saml2/metadata.xml')
Packit Service 88ab54
Packit Service 88ab54
            server = lasso.Server(idp_metadata, idp_private_key, None, None)
Packit Service 88ab54
            server.role = lasso.PROVIDER_ROLE_IDP
Packit Service 88ab54
            server.addProvider(lasso.PROVIDER_ROLE_SP, wsp_metadata, None, None)
Packit Service 88ab54
            server.getProvider(server.providerIds[0]).setEncryptionMode(lasso.ENCRYPTION_MODE_NAMEID);
Packit Service 88ab54
            server.addProvider(lasso.PROVIDER_ROLE_SP, wsc_metadata, None, None)
Packit Service 88ab54
            self.idp_server_dump = server.dump()
Packit Service 88ab54
Packit Service 88ab54
        return server
Packit Service 88ab54
Packit Service 88ab54
    def query(self, wsc, idp, idp_identity_dump, wsc_session_dump, uid, federations, services_map, service_associations, provider_ids = None, service_types = None, options = None, actions = None):
Packit Service 88ab54
        session = lasso.Session.newFromDump(wsc_session_dump)
Packit Service 88ab54
        assertion = session.getAssertion(idp.providerId)
Packit Service 88ab54
        self.failUnless(assertion is not None)
Packit Service 88ab54
        epr = assertion.idwsf2GetDiscoveryBootstrapEpr()
Packit Service 88ab54
        self.failUnless(epr is not None)
Packit Service 88ab54
        wsc_disco = lasso.IdWsf2Discovery(wsc)
Packit Service 88ab54
        wsc_disco.setEpr(epr)
Packit Service 88ab54
        wsc_disco.initQuery()
Packit Service 88ab54
        wsc_disco.addRequestedService(service_types = service_types, provider_ids = provider_ids, options = options, actions = actions)
Packit Service 88ab54
        wsc_disco.buildRequestMsg()
Packit Service 88ab54
        idp_disco = lasso.IdWsf2Discovery(idp)
Packit Service 88ab54
        idp_disco.setIdentityFromDump(idp_identity_dump)
Packit Service 88ab54
        idp_disco.processRequestMsg(wsc_disco.msgBody)
Packit Service 88ab54
        f = self.nid2tuple(idp_disco.getNameIdentifier())
Packit Service 88ab54
        uid = federations[f]
Packit Service 88ab54
        for id in service_associations[uid]:
Packit Service 88ab54
            idp_disco.addServiceMetadata(services_map[id])
Packit Service 88ab54
        idp_disco.validateRequest()
Packit Service 88ab54
        idp_disco.buildResponseMsg()
Packit Service 88ab54
        wsc_disco.processResponseMsg(idp_disco.msgBody)
Packit Service 88ab54
        return wsc_disco.endpointReferences
Packit Service 88ab54
Packit Service 88ab54
Packit Service 88ab54
Packit Service 88ab54
    def metadataRegister(self, wsp, idp, session_dump, abstract = None, address = None, provider_id = None, service_types = None, services_map = None):
Packit Service 88ab54
        session = lasso.Session.newFromDump(session_dump)
Packit Service 88ab54
        assertion = session.getAssertion(idp.providerId)
Packit Service 88ab54
        self.failUnless(assertion is not None)
Packit Service 88ab54
        epr = assertion.idwsf2GetDiscoveryBootstrapEpr()
Packit Service 88ab54
        self.failUnless(epr is not None)
Packit Service 88ab54
        wsp_disco = lasso.IdWsf2Discovery(wsp)
Packit Service 88ab54
        wsp_disco.setEpr(epr)
Packit Service 88ab54
        abstract = 'Personal Profile service'
Packit Service 88ab54
        self.failUnless(abstract is not None)
Packit Service 88ab54
        self.failUnless(address is not None)
Packit Service 88ab54
        self.failUnless(service_types is not None)
Packit Service 88ab54
        self.failUnless(isinstance(services_map, dict))
Packit Service 88ab54
        wsp_disco.initMetadataRegister()
Packit Service 88ab54
        if not provider_id:
Packit Service 88ab54
            provider_id = wsp.providerId
Packit Service 88ab54
        wsp_disco.addSimpleServiceMetadata(
Packit Service 88ab54
                service_types = service_types,
Packit Service 88ab54
                abstract = abstract, provider_id = provider_id,
Packit Service 88ab54
                address = address, 
Packit Service 88ab54
                security_mechanisms = (lasso.SECURITY_MECH_BEARER,))
Packit Service 88ab54
        wsp_disco.buildRequestMsg()
Packit Service 88ab54
Packit Service 88ab54
        idp_disco = lasso.IdWsf2Discovery(idp)
Packit Service 88ab54
        idp_disco.processRequestMsg(wsp_disco.msgBody)
Packit Service 88ab54
        idp_disco.checkSecurityMechanism()
Packit Service 88ab54
        idp_disco.validateRequest()
Packit Service 88ab54
        self.failUnlessEqual(len(idp_disco.metadatas), 1)
Packit Service 88ab54
        # add metadatas to directory
Packit Service 88ab54
        sender = idp_disco.getSoapEnvelopeRequest().sb2GetProviderId()
Packit Service 88ab54
        self.failUnless(sender is not None)
Packit Service 88ab54
        metadatas = services_map.get(sender, [])
Packit Service 88ab54
        for metadata in idp_disco.metadatas:
Packit Service 88ab54
            services_map[metadata.svcMDID] = metadata
Packit Service 88ab54
            metadatas.append(metadata.svcMDID)
Packit Service 88ab54
        services_map[sender] = metadatas
Packit Service 88ab54
        idp_disco.buildResponseMsg()
Packit Service 88ab54
        wsp_disco.processResponseMsg(idp_disco.msgBody)
Packit Service 88ab54
        self.failUnlessEqual(len(wsp_disco.metadatas), 1)
Packit Service 88ab54
        self.failUnlessEqual(wsp_disco.metadatas[0].svcMDID, wsp_disco.response.svcMDID[0])
Packit Service 88ab54
        return wsp_disco.metadatas[0].svcMDID
Packit Service 88ab54
Packit Service 88ab54
    def nid2tuple(self, nid):
Packit Service 88ab54
        return (nid.nameQualifier, nid.format, nid.sPNameQualifier, nid.content)
Packit Service 88ab54
Packit Service 88ab54
    def addAssociation(self, wsp, idp, session_dump, svcmdid, service_maps, federations, service_associations):
Packit Service 88ab54
        self.failUnless(isinstance(service_associations, dict))
Packit Service 88ab54
        self.failUnless(isinstance(service_maps, dict))
Packit Service 88ab54
        # Get the bootstrap
Packit Service 88ab54
        session = lasso.Session.newFromDump(session_dump)
Packit Service 88ab54
        assertion = session.getAssertion(idp.providerId)
Packit Service 88ab54
        self.failUnless(assertion is not None)
Packit Service 88ab54
        epr = assertion.idwsf2GetDiscoveryBootstrapEpr()
Packit Service 88ab54
        self.failUnless(epr is not None)
Packit Service 88ab54
        wsp_disco = lasso.IdWsf2Discovery(wsp)
Packit Service 88ab54
        wsp_disco.setEpr(epr)
Packit Service 88ab54
        wsp_disco.initMetadataAssociationAdd()
Packit Service 88ab54
        wsp_disco.svcmdids = (svcmdid,)
Packit Service 88ab54
        wsp_disco.buildRequestMsg()
Packit Service 88ab54
        # Handle request
Packit Service 88ab54
        idp_disco = lasso.IdWsf2Discovery(idp)
Packit Service 88ab54
        idp_disco.processRequestMsg(wsp_disco.msgBody)
Packit Service 88ab54
        idp_disco.checkSecurityMechanism()
Packit Service 88ab54
        self.failUnlessEqual(idp_disco.svcmdids, (svcmdid,))
Packit Service 88ab54
        sender = idp_disco.getSoapEnvelopeRequest().sb2GetProviderId()
Packit Service 88ab54
        name_identifier = idp_disco.getNameIdentifier()
Packit Service 88ab54
        f = self.nid2tuple(name_identifier)
Packit Service 88ab54
        uid = federations[f]
Packit Service 88ab54
        l = service_associations.get(uid, [])
Packit Service 88ab54
        for id in idp_disco.svcmdids:
Packit Service 88ab54
            # check it exists
Packit Service 88ab54
            self.failUnless(service_maps.get(id) is not None)
Packit Service 88ab54
            # create association
Packit Service 88ab54
            if id not in l:
Packit Service 88ab54
                l.append(id)
Packit Service 88ab54
        service_associations[uid] = l
Packit Service 88ab54
        idp_disco.validateRequest()
Packit Service 88ab54
        idp_disco.buildResponseMsg()
Packit Service 88ab54
        wsp_disco.processResponseMsg(idp_disco.msgBody)
Packit Service 88ab54
Packit Service 88ab54
    def login(self, sp, idp, user_id, federations, sp_identity_dump=None, sp_session_dump=None,
Packit Service 88ab54
            idp_identity_dump=None, idp_session_dump=None):
Packit Service 88ab54
        sp_login = lasso.Login(sp)
Packit Service 88ab54
        idp_provider_id = 'http://idp5/metadata'
Packit Service 88ab54
        sp_login.initAuthnRequest(idp_provider_id, lasso.HTTP_METHOD_REDIRECT)
Packit Service 88ab54
        sp_login.request.nameIDPolicy.format = lasso.SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT
Packit Service 88ab54
        sp_login.request.nameIDPolicy.allowCreate = True
Packit Service 88ab54
        sp_login.buildAuthnRequestMsg()
Packit Service 88ab54
Packit Service 88ab54
        idp_login = lasso.Login(idp)
Packit Service 88ab54
        query = sp_login.msgUrl.split('?')[1]
Packit Service 88ab54
        if idp_identity_dump is not None:
Packit Service 88ab54
            idp_login.setIdentityFromDump(idp_identity_dump)
Packit Service 88ab54
        if idp_session_dump is not None:
Packit Service 88ab54
            idp_login.setSessionFromDump(idp_session_dump)
Packit Service 88ab54
        idp_login.processAuthnRequestMsg(query)
Packit Service 88ab54
        idp_login.validateRequestMsg(True, True)
Packit Service 88ab54
        idp_login.buildAssertion(lasso.SAML_AUTHENTICATION_METHOD_PASSWORD, None, None, None, None)
Packit Service 88ab54
        if idp_login.assertion.subject.encryptedId:
Packit Service 88ab54
            f = self.nid2tuple(idp_login.assertion.subject.encryptedId.originalData)
Packit Service 88ab54
        else:
Packit Service 88ab54
            f = self.nid2tuple(idp_login.assertion.subject.nameId)
Packit Service 88ab54
        federations[f] = user_id
Packit Service 88ab54
        l = federations.get(user_id, [])
Packit Service 88ab54
        l.append(f)
Packit Service 88ab54
        federations[user_id] = l
Packit Service 88ab54
        idp_login.idwsf2AddDiscoveryBootstrapEpr(url = idpSoapEndpoint, abstract = 'Discovery Service', security_mechanisms = (lasso.SECURITY_MECH_BEARER,))
Packit Service 88ab54
        idp_login.buildArtifactMsg(lasso.HTTP_METHOD_ARTIFACT_GET)
Packit Service 88ab54
        artifact_message = idp_login.artifactMessage
Packit Service 88ab54
Packit Service 88ab54
        if idp_login.isIdentityDirty:
Packit Service 88ab54
            idp_identity_dump = idp_login.identity.dump()
Packit Service 88ab54
        if idp_login.isSessionDirty:
Packit Service 88ab54
            idp_session_dump = idp_login.session.dump()
Packit Service 88ab54
Packit Service 88ab54
        sp_login = lasso.Login(sp)
Packit Service 88ab54
        query = idp_login.msgUrl.split('?')[1]
Packit Service 88ab54
        query = query.replace("%3D", "=")
Packit Service 88ab54
        sp_login.initRequest(query, lasso.HTTP_METHOD_ARTIFACT_GET)
Packit Service 88ab54
        sp_login.buildRequestMsg()
Packit Service 88ab54
Packit Service 88ab54
        idp_login = lasso.Login(idp)
Packit Service 88ab54
        idp_login.processRequestMsg(sp_login.msgBody)
Packit Service 88ab54
        idp_login.artifactMessage = artifact_message
Packit Service 88ab54
        idp_login.buildResponseMsg(None)
Packit Service 88ab54
Packit Service 88ab54
        sp_login.processResponseMsg(idp_login.msgBody)
Packit Service 88ab54
        sp_login.acceptSso()
Packit Service 88ab54
        if sp_login.isIdentityDirty:
Packit Service 88ab54
            sp_identity_dump = sp_login.identity.dump()
Packit Service 88ab54
        if sp_login.isSessionDirty:
Packit Service 88ab54
            sp_session_dump = sp_login.session.dump()
Packit Service 88ab54
Packit Service 88ab54
        return sp_identity_dump, sp_session_dump, idp_identity_dump, idp_session_dump, sp_login.idwsf2GetDiscoveryBootstrapEpr()
Packit Service 88ab54
Packit Service 88ab54
Packit Service 88ab54
class MetadataTestCase(IdWsf2TestCase):
Packit Service 88ab54
    def test01(self):
Packit Service 88ab54
        """Test metadata registration on the IdP"""
Packit Service 88ab54
        idp = self.getIdpServer()
Packit Service 88ab54
        wsp = self.getWspServer()
Packit Service 88ab54
        wsp_identity_dump, wsp_session_dump, idp_identity_dump, idp_session_dump, dst_epr = self.login(wsp, idp, 1, {})
Packit Service 88ab54
Packit Service 88ab54
        wsp_disco = lasso.IdWsf2Discovery(wsp)
Packit Service 88ab54
        wsp_disco.setEpr(dst_epr)
Packit Service 88ab54
Packit Service 88ab54
        abstract = 'Personal Profile service'
Packit Service 88ab54
        wsp_disco.initMetadataRegister()
Packit Service 88ab54
        self.failUnless(wsp_disco.request is not None)
Packit Service 88ab54
        wsp_disco.addSimpleServiceMetadata(service_types = 
Packit Service 88ab54
                (lasso.PP11_HREF,), abstract = abstract,
Packit Service 88ab54
                provider_id = wsp.providerId, address = spSoapEndpoint,
Packit Service 88ab54
                security_mechanisms = (lasso.SECURITY_MECH_BEARER,))
Packit Service 88ab54
        self.failUnlessEqual(len(wsp_disco.metadatas), 1)
Packit Service 88ab54
        metadata = wsp_disco.metadatas[0]
Packit Service 88ab54
        self.failUnlessEqual(metadata.abstract, abstract)
Packit Service 88ab54
        self.failUnlessEqual(metadata.providerId, wsp.providerId)
Packit Service 88ab54
        self.failUnlessEqual(len(metadata.serviceContext), 1)
Packit Service 88ab54
        self.failUnlessEqual(len(metadata.serviceContext[0].serviceType), 1)
Packit Service 88ab54
        self.failUnlessEqual(metadata.serviceContext[0].serviceType[0],
Packit Service 88ab54
                lasso.PP11_HREF)
Packit Service 88ab54
        self.failUnlessEqual(len(metadata.serviceContext[0].endpointContext), 1)
Packit Service 88ab54
        self.failUnlessEqual(
Packit Service 88ab54
                len(metadata.serviceContext[0].endpointContext[0].address),
Packit Service 88ab54
                1)
Packit Service 88ab54
        self.failUnlessEqual(metadata.serviceContext[0].endpointContext[0].address[0],
Packit Service 88ab54
                spSoapEndpoint)
Packit Service 88ab54
        self.failUnlessEqual(
Packit Service 88ab54
                len(metadata.serviceContext[0].endpointContext[0].securityMechId),
Packit Service 88ab54
                1)
Packit Service 88ab54
        self.failUnlessEqual(
Packit Service 88ab54
                metadata.serviceContext[0].endpointContext[0].securityMechId[0],
Packit Service 88ab54
                lasso.SECURITY_MECH_BEARER)
Packit Service 88ab54
        self.failUnless(metadata.svcMDID is None)
Packit Service 88ab54
        wsp_disco.buildRequestMsg()
Packit Service 88ab54
        self.failUnlessEqual(wsp_disco.msgUrl, idpSoapEndpoint)
Packit Service 88ab54
        self.failUnless(wsp_disco.msgBody is not None)
Packit Service 88ab54
Packit Service 88ab54
        idp_disco = lasso.IdWsf2Discovery(idp)
Packit Service 88ab54
        self.failUnless(idp_disco is not None)
Packit Service 88ab54
        idp_disco.processRequestMsg(wsp_disco.msgBody)
Packit Service 88ab54
        self.failUnless(idp_disco.request is not None)
Packit Service 88ab54
        self.failUnlessEqual(len(idp_disco.request.svcMD), 1)
Packit Service 88ab54
        self.failUnless(idp_disco.request.svcMD[0].svcMDID is None)
Packit Service 88ab54
        try:
Packit Service 88ab54
            idp_disco.checkSecurityMechanism()
Packit Service ad8a8e
        except lasso.Error as e:
Packit Service 88ab54
            self.fail(e)
Packit Service 88ab54
        try:
Packit Service 88ab54
            idp_disco.validateRequest()
Packit Service ad8a8e
        except lasso.Error as e:
Packit Service 88ab54
            self.fail(e)
Packit Service 88ab54
        self.failUnless(idp_disco.response is not None)
Packit Service 88ab54
        self.failUnlessEqual(len(idp_disco.metadatas), 1)
Packit Service 88ab54
        metadata = idp_disco.metadatas[0]
Packit Service 88ab54
        self.failUnlessEqual(metadata.abstract, abstract)
Packit Service 88ab54
        self.failUnlessEqual(metadata.providerId, wsp.providerId)
Packit Service 88ab54
        self.failUnlessEqual(len(metadata.serviceContext), 1)
Packit Service 88ab54
        self.failUnlessEqual(len(metadata.serviceContext[0].serviceType), 1)
Packit Service 88ab54
        self.failUnlessEqual(metadata.serviceContext[0].serviceType[0],
Packit Service 88ab54
                lasso.PP11_HREF)
Packit Service 88ab54
        self.failUnlessEqual(len(metadata.serviceContext[0].endpointContext), 1)
Packit Service 88ab54
        self.failUnlessEqual(
Packit Service 88ab54
                len(metadata.serviceContext[0].endpointContext[0].address),
Packit Service 88ab54
                1)
Packit Service 88ab54
        self.failUnlessEqual(metadata.serviceContext[0].endpointContext[0].address[0],
Packit Service 88ab54
                spSoapEndpoint)
Packit Service 88ab54
        self.failUnlessEqual(
Packit Service 88ab54
                len(metadata.serviceContext[0].endpointContext[0].securityMechId),
Packit Service 88ab54
                1)
Packit Service 88ab54
        self.failUnlessEqual(
Packit Service 88ab54
                metadata.serviceContext[0].endpointContext[0].securityMechId[0],
Packit Service 88ab54
                lasso.SECURITY_MECH_BEARER)
Packit Service 88ab54
        idp_disco.buildResponseMsg()
Packit Service 88ab54
        self.failUnless(metadata.svcMDID is not None)
Packit Service 88ab54
        self.failUnless(idp_disco.msgUrl is None)
Packit Service 88ab54
        self.failUnless(idp_disco.msgBody is not None)
Packit Service 88ab54
Packit Service 88ab54
        wsp_disco.processResponseMsg(idp_disco.msgBody)
Packit Service 88ab54
Packit Service 88ab54
        self.failUnless(len(wsp_disco.metadatas) == 1, 'missing svcMDID')
Packit Service 88ab54
        self.failUnless(wsp_disco.metadatas[0].svcMDID, 'missing svcMDID')
Packit Service 88ab54
Packit Service 88ab54
    def test02(self):
Packit Service 88ab54
        "Test failure by IdP for register request"
Packit Service 88ab54
        idp = self.getIdpServer()
Packit Service 88ab54
        wsp = self.getWspServer()
Packit Service 88ab54
        wsp_identity_dump, wsp_session_dump, idp_identity_dump, idp_session_dump, dst_epr = self.login(wsp, idp, 1, {})
Packit Service 88ab54
Packit Service 88ab54
        wsp_disco = lasso.IdWsf2Discovery(wsp)
Packit Service 88ab54
        wsp_disco.setEpr(dst_epr)
Packit Service 88ab54
Packit Service 88ab54
        abstract = 'Personal Profile service'
Packit Service 88ab54
        wsp_disco.initMetadataRegister()
Packit Service 88ab54
        self.failUnless(wsp_disco.request is not None)
Packit Service 88ab54
        wsp_disco.addSimpleServiceMetadata(service_types = 
Packit Service 88ab54
                (lasso.PP11_HREF,), abstract = abstract,
Packit Service 88ab54
                provider_id = wsp.providerId, address = spSoapEndpoint,
Packit Service 88ab54
                security_mechanisms= (lasso.SECURITY_MECH_BEARER,))
Packit Service 88ab54
        self.failUnlessEqual(len(wsp_disco.metadatas), 1)
Packit Service 88ab54
        metadata = wsp_disco.metadatas[0]
Packit Service 88ab54
        self.failUnlessEqual(metadata.abstract, abstract)
Packit Service 88ab54
        self.failUnlessEqual(metadata.providerId, wsp.providerId)
Packit Service 88ab54
        self.failUnlessEqual(len(metadata.serviceContext[0].serviceType), 1)
Packit Service 88ab54
        self.failUnlessEqual(metadata.serviceContext[0].serviceType[0],
Packit Service 88ab54
                lasso.PP11_HREF)
Packit Service 88ab54
        self.failUnlessEqual(len(metadata.serviceContext[0].endpointContext), 1)
Packit Service 88ab54
        self.failUnlessEqual(
Packit Service 88ab54
                len(metadata.serviceContext[0].endpointContext[0].address),
Packit Service 88ab54
                1)
Packit Service 88ab54
        self.failUnlessEqual(metadata.serviceContext[0].endpointContext[0].address[0],
Packit Service 88ab54
                spSoapEndpoint)
Packit Service 88ab54
        self.failUnlessEqual(
Packit Service 88ab54
                len(metadata.serviceContext[0].endpointContext[0].securityMechId),
Packit Service 88ab54
                1)
Packit Service 88ab54
        self.failUnlessEqual(
Packit Service 88ab54
                metadata.serviceContext[0].endpointContext[0].securityMechId[0],
Packit Service 88ab54
                lasso.SECURITY_MECH_BEARER)
Packit Service 88ab54
        self.failUnless(metadata.svcMDID is None)
Packit Service 88ab54
        wsp_disco.buildRequestMsg()
Packit Service 88ab54
        self.failUnlessEqual(wsp_disco.msgUrl, idpSoapEndpoint)
Packit Service 88ab54
        self.failUnless(wsp_disco.msgBody is not None)
Packit Service 88ab54
Packit Service 88ab54
        idp_disco = lasso.IdWsf2Discovery(idp)
Packit Service 88ab54
        self.failUnless(idp_disco is not None)
Packit Service 88ab54
        try:
Packit Service 88ab54
            idp_disco.processRequestMsg(wsp_disco.msgBody)
Packit Service ad8a8e
        except lasso.Error as e:
Packit Service 88ab54
            self.fail(e)
Packit Service 88ab54
        self.failUnless(idp_disco.request is not None)
Packit Service 88ab54
        try:
Packit Service 88ab54
            idp_disco.checkSecurityMechanism()
Packit Service ad8a8e
        except lasso.Error as e:
Packit Service 88ab54
            self.fail(e)
Packit Service 88ab54
        try:
Packit Service 88ab54
            idp_disco.failRequest(lasso.IDWSF2_DISCOVERY_STATUS_CODE_FAILED, lasso.IDWSF2_DISCOVERY_STATUS_CODE_FORBIDDEN)
Packit Service ad8a8e
        except lasso.Error as e:
Packit Service 88ab54
            self.fail(e)
Packit Service 88ab54
        self.failUnless(idp_disco.response is not None)
Packit Service 88ab54
        self.failUnless(idp_disco.response.status is not None)
Packit Service 88ab54
        self.failUnless(idp_disco.response.status.code is not lasso.IDWSF2_DISCOVERY_STATUS_CODE_FAILED)
Packit Service 88ab54
        self.failUnlessEqual(len(idp_disco.response.status.status), 1)
Packit Service 88ab54
        self.failUnless(idp_disco.response.status.status[0].code is not lasso.IDWSF2_DISCOVERY_STATUS_CODE_FORBIDDEN)
Packit Service 88ab54
        idp_disco.buildResponseMsg()
Packit Service 88ab54
        self.failUnless(idp_disco.msgUrl is None)
Packit Service 88ab54
        self.failUnless(idp_disco.msgBody is not None)
Packit Service 88ab54
Packit Service 88ab54
        try:
Packit Service 88ab54
            wsp_disco.processResponseMsg(idp_disco.msgBody)
Packit Service 88ab54
        except lasso.Idwsf2DiscoveryForbiddenError:
Packit Service 88ab54
            pass
Packit Service ad8a8e
        except lasso.Error as e:
Packit Service 88ab54
            self.fail(e)
Packit Service 88ab54
Packit Service 88ab54
    def test03(self):
Packit Service 88ab54
        """Test metadata register with redirection"""
Packit Service 88ab54
        idp = self.getIdpServer()
Packit Service 88ab54
        wsp = self.getWspServer()
Packit Service 88ab54
        wsp_identity_dump, wsp_session_dump, idp_identity_dump, idp_session_dump, dst_epr = self.login(wsp, idp, 1, {})
Packit Service 88ab54
Packit Service 88ab54
        wsp_disco = lasso.IdWsf2Discovery(wsp)
Packit Service 88ab54
        wsp_disco.setEpr(dst_epr)
Packit Service 88ab54
Packit Service 88ab54
        abstract = 'Personal Profile service'
Packit Service 88ab54
        wsp_disco.initMetadataRegister()
Packit Service 88ab54
        soap_envelope = wsp_disco.getSoapEnvelopeRequest()
Packit Service 88ab54
        soap_envelope.setSb2UserInteractionHint(lasso.IDWSF2_SB2_USER_INTERACTION_HINT_INTERACT_IF_NEEDED)
Packit Service 88ab54
        self.failUnless(isinstance(soap_envelope.header, lasso.SoapHeader))
Packit Service 88ab54
        self.failUnless(len(soap_envelope.header.other) > 0)
Packit Service 88ab54
        self.failUnlessEqual(soap_envelope.getSb2UserInteractionHint(), lasso.IDWSF2_SB2_USER_INTERACTION_HINT_INTERACT_IF_NEEDED)
Packit Service 88ab54
        self.failUnless(wsp_disco.request is not None)
Packit Service 88ab54
        wsp_disco.addSimpleServiceMetadata(service_types = 
Packit Service 88ab54
                (lasso.PP11_HREF,), abstract = abstract,
Packit Service 88ab54
                provider_id = wsp.providerId, address = spSoapEndpoint,
Packit Service 88ab54
                security_mechanisms = (lasso.SECURITY_MECH_BEARER,))
Packit Service 88ab54
        self.failUnlessEqual(len(wsp_disco.metadatas), 1)
Packit Service 88ab54
        metadata = wsp_disco.metadatas[0]
Packit Service 88ab54
        self.failUnlessEqual(metadata.abstract, abstract)
Packit Service 88ab54
        self.failUnlessEqual(metadata.providerId, wsp.providerId)
Packit Service 88ab54
        self.failUnlessEqual(len(metadata.serviceContext), 1)
Packit Service 88ab54
        self.failUnlessEqual(len(metadata.serviceContext[0].serviceType), 1)
Packit Service 88ab54
        self.failUnlessEqual(metadata.serviceContext[0].serviceType[0],
Packit Service 88ab54
                lasso.PP11_HREF)
Packit Service 88ab54
        self.failUnlessEqual(len(metadata.serviceContext[0].endpointContext), 1)
Packit Service 88ab54
        self.failUnlessEqual(
Packit Service 88ab54
                len(metadata.serviceContext[0].endpointContext[0].address),
Packit Service 88ab54
                1)
Packit Service 88ab54
        self.failUnlessEqual(metadata.serviceContext[0].endpointContext[0].address[0],
Packit Service 88ab54
                spSoapEndpoint)
Packit Service 88ab54
        self.failUnlessEqual(
Packit Service 88ab54
                len(metadata.serviceContext[0].endpointContext[0].securityMechId),
Packit Service 88ab54
                1)
Packit Service 88ab54
        self.failUnlessEqual(
Packit Service 88ab54
                metadata.serviceContext[0].endpointContext[0].securityMechId[0],
Packit Service 88ab54
                lasso.SECURITY_MECH_BEARER)
Packit Service 88ab54
        self.failUnless(metadata.svcMDID is None)
Packit Service 88ab54
        wsp_disco.buildRequestMsg()
Packit Service 88ab54
        self.failUnlessEqual(wsp_disco.msgUrl, idpSoapEndpoint)
Packit Service 88ab54
        self.failUnless(wsp_disco.msgBody is not None)
Packit Service 88ab54
Packit Service 88ab54
        idp_disco = lasso.IdWsf2Discovery(idp)
Packit Service 88ab54
        self.failUnless(idp_disco is not None)
Packit Service 88ab54
        idp_disco.processRequestMsg(wsp_disco.msgBody)
Packit Service 88ab54
        self.failUnless(idp_disco.request is not None)
Packit Service 88ab54
        self.failUnlessEqual(len(idp_disco.request.svcMD), 1)
Packit Service 88ab54
        self.failUnless(idp_disco.request.svcMD[0].svcMDID is None)
Packit Service 88ab54
        soap_envelope = idp_disco.getSoapEnvelopeRequest()
Packit Service 88ab54
        self.failUnless(soap_envelope is not None)
Packit Service 88ab54
        self.failUnless(soap_envelope.getMessageId() is not None)
Packit Service 88ab54
        try:
Packit Service 88ab54
            idp_disco.checkSecurityMechanism()
Packit Service ad8a8e
        except lasso.Error as e:
Packit Service 88ab54
            self.fail(e)
Packit Service 88ab54
        # redirect
Packit Service 88ab54
        interactionUrl = spInteractionUrl
Packit Service 88ab54
        idp_disco.redirectUserForInteraction(interactionUrl, False)
Packit Service 88ab54
        response = idp_disco.response
Packit Service 88ab54
        self.failUnless(isinstance(response, lasso.SoapFault))
Packit Service 88ab54
        self.failUnless(response.detail is not None)
Packit Service 88ab54
        self.failUnlessEqual(len(response.detail.any), 1)
Packit Service 88ab54
        self.failUnless(isinstance(response.detail.any[0], lasso.IdWsf2Sb2RedirectRequest))
Packit Service 88ab54
        self.failUnless(response.detail.any[0].redirectURL.startswith(interactionUrl + '?transactionID='))
Packit Service 88ab54
        try:
Packit Service 88ab54
            idp_disco.buildResponseMsg()
Packit Service ad8a8e
        except lasso.Error as e:
Packit Service 88ab54
            self.fail(e)
Packit Service 88ab54
        self.failUnless(idp_disco.msgBody is not None)
Packit Service 88ab54
Packit Service 88ab54
Packit Service 88ab54
        self.failUnless(idp_disco.msgUrl is None)
Packit Service 88ab54
        self.failUnless(idp_disco.msgBody is not None)
Packit Service 88ab54
Packit Service 88ab54
        try:
Packit Service 88ab54
            wsp_disco.processResponseMsg(idp_disco.msgBody)
Packit Service 88ab54
        except lasso.WsfprofileRedirectRequestError:
Packit Service 88ab54
            pass
Packit Service ad8a8e
        except lasso.Error as e:
Packit Service 88ab54
            self.fail(e)
Packit Service 88ab54
        response_envelope = wsp_disco.getSoapEnvelopeResponse()
Packit Service 88ab54
        self.failUnless(response_envelope.sb2GetRedirectRequestUrl().startswith(interactionUrl + '?transactionID='))
Packit Service 88ab54
        # Here keep information about the request associated to ID: response_envelope.getMessageId().content
Packit Service 88ab54
        wsp_disco_dump = wsp_disco.dump()
Packit Service 88ab54
        wsp_disco = lasso.Node.newFromDump(wsp_disco_dump)
Packit Service 88ab54
        wsp_disco.server = wsp
Packit Service 88ab54
        request_envelope = wsp_disco.getSoapEnvelopeRequest()
Packit Service 88ab54
        self.failUnless(request_envelope is not None)
Packit Service 88ab54
        relates_to = request_envelope.getRelatesTo(True)
Packit Service 88ab54
        self.failUnless(relates_to is not None)
Packit Service 88ab54
        response_message_id = response_envelope.getMessageId().content
Packit Service 88ab54
        relates_to.content = response_message_id
Packit Service 88ab54
        wsp_disco.buildRequestMsg()
Packit Service 88ab54
        # now redo as for test01 after request building
Packit Service 88ab54
        self.failUnlessEqual(wsp_disco.msgUrl, idpSoapEndpoint)
Packit Service 88ab54
        self.failUnless(wsp_disco.msgBody is not None)
Packit Service 88ab54
Packit Service 88ab54
        idp_disco = lasso.IdWsf2Discovery(idp)
Packit Service 88ab54
        self.failUnless(idp_disco is not None)
Packit Service 88ab54
        idp_disco.processRequestMsg(wsp_disco.msgBody)
Packit Service 88ab54
        self.failUnless(idp_disco.request is not None)
Packit Service 88ab54
        self.failUnlessEqual(len(idp_disco.request.svcMD), 1)
Packit Service 88ab54
        self.failUnless(idp_disco.request.svcMD[0].svcMDID is None)
Packit Service 88ab54
        try:
Packit Service 88ab54
            idp_disco.checkSecurityMechanism()
Packit Service ad8a8e
        except lasso.Error as e:
Packit Service 88ab54
            self.fail(e)
Packit Service 88ab54
        try:
Packit Service 88ab54
            idp_disco.validateRequest()
Packit Service ad8a8e
        except lasso.Error as e:
Packit Service 88ab54
            self.fail(e)
Packit Service 88ab54
        self.failUnless(idp_disco.response is not None)
Packit Service 88ab54
        self.failUnlessEqual(len(idp_disco.metadatas), 1)
Packit Service 88ab54
        metadata = idp_disco.metadatas[0]
Packit Service 88ab54
        self.failUnlessEqual(metadata.abstract, abstract)
Packit Service 88ab54
        self.failUnlessEqual(metadata.providerId, wsp.providerId)
Packit Service 88ab54
        self.failUnlessEqual(len(metadata.serviceContext), 1)
Packit Service 88ab54
        self.failUnlessEqual(len(metadata.serviceContext[0].serviceType), 1)
Packit Service 88ab54
        self.failUnlessEqual(metadata.serviceContext[0].serviceType[0],
Packit Service 88ab54
                lasso.PP11_HREF)
Packit Service 88ab54
        self.failUnlessEqual(len(metadata.serviceContext[0].endpointContext), 1)
Packit Service 88ab54
        self.failUnlessEqual(
Packit Service 88ab54
                len(metadata.serviceContext[0].endpointContext[0].address),
Packit Service 88ab54
                1)
Packit Service 88ab54
        self.failUnlessEqual(metadata.serviceContext[0].endpointContext[0].address[0],
Packit Service 88ab54
                spSoapEndpoint)
Packit Service 88ab54
        self.failUnlessEqual(
Packit Service 88ab54
                len(metadata.serviceContext[0].endpointContext[0].securityMechId),
Packit Service 88ab54
                1)
Packit Service 88ab54
        self.failUnlessEqual(
Packit Service 88ab54
                metadata.serviceContext[0].endpointContext[0].securityMechId[0],
Packit Service 88ab54
                lasso.SECURITY_MECH_BEARER)
Packit Service 88ab54
        idp_disco.buildResponseMsg()
Packit Service 88ab54
        self.failUnless(metadata.svcMDID is not None)
Packit Service 88ab54
        self.failUnless(idp_disco.msgUrl is None)
Packit Service 88ab54
        self.failUnless(idp_disco.msgBody is not None)
Packit Service 88ab54
Packit Service 88ab54
        wsp_disco.processResponseMsg(idp_disco.msgBody)
Packit Service 88ab54
Packit Service 88ab54
        self.failUnless(len(wsp_disco.metadatas) == 1, 'missing svcMDID')
Packit Service 88ab54
        self.failUnless(wsp_disco.metadatas[0].svcMDID, 'missing svcMDID')
Packit Service 88ab54
Packit Service 88ab54
    def test04(self):
Packit Service 88ab54
        """Test metadata query"""
Packit Service 88ab54
        idp = self.getIdpServer()
Packit Service 88ab54
        wsp = self.getWspServer()
Packit Service 88ab54
        federations = {}
Packit Service 88ab54
        wsp_identity_dump, wsp_session_dump, idp_identity_dump, idp_session_dump, dst_epr = self.login(wsp, idp, 1, federations)
Packit Service 88ab54
        service_map = {}
Packit Service 88ab54
        self.metadataRegister(wsp, idp, wsp_session_dump, service_types =
Packit Service 88ab54
            (lasso.PP11_HREF,), address = spSoapEndpoint,
Packit Service 88ab54
            abstract = 'My first PP service', services_map = service_map)
Packit Service 88ab54
        self.metadataRegister(wsp, idp, wsp_session_dump, service_types =
Packit Service 88ab54
            (lasso.PP11_HREF,), address = spSoapEndpoint+'2',
Packit Service 88ab54
            abstract = 'My second PP service', services_map = service_map)
Packit Service 88ab54
        wsp_identity_dump, wsp_session_dump, idp_identity_dump, idp_session_dump, dst_epr = self.login(wsp, idp, 1, federations)
Packit Service 88ab54
        wsp_disco = lasso.IdWsf2Discovery(wsp)
Packit Service 88ab54
        wsp_disco.setEpr(dst_epr)
Packit Service 88ab54
        wsp_disco.initMetadataQuery()
Packit Service 88ab54
        wsp_disco.buildRequestMsg()
Packit Service 88ab54
Packit Service 88ab54
        idp_disco = lasso.IdWsf2Discovery(idp)
Packit Service 88ab54
        idp_disco.processRequestMsg(wsp_disco.msgBody)
Packit Service 88ab54
        idp_disco.checkSecurityMechanism()
Packit Service 88ab54
        self.failUnlessEqual(idp_disco.svcmdids, ())
Packit Service 88ab54
        sender = idp_disco.getSoapEnvelopeRequest().sb2GetProviderId()
Packit Service 88ab54
        for svcMDID in service_map.get(sender, []):
Packit Service 88ab54
            idp_disco.addServiceMetadata(service_map.get(svcMDID))
Packit Service 88ab54
        idp_disco.validateRequest()
Packit Service 88ab54
        idp_disco.buildResponseMsg()
Packit Service 88ab54
        wsp_disco.processResponseMsg(idp_disco.msgBody)
Packit Service 88ab54
        self.failUnless(len(wsp_disco.metadatas), 2)
Packit Service 88ab54
Packit Service 88ab54
    def test05(self):
Packit Service 88ab54
        """Test metadata delete"""
Packit Service 88ab54
        idp = self.getIdpServer()
Packit Service 88ab54
        wsp = self.getWspServer()
Packit Service 88ab54
        wsp_identity_dump, wsp_session_dump, idp_identity_dump, idp_session_dump, dst_epr = self.login(wsp, idp, 1, {})
Packit Service 88ab54
        service_map = {}
Packit Service 88ab54
        self.metadataRegister(wsp, idp, wsp_session_dump, service_types =
Packit Service 88ab54
            (lasso.PP11_HREF,), address = spSoapEndpoint,
Packit Service 88ab54
            abstract = 'My first PP service', services_map = service_map)
Packit Service 88ab54
        self.metadataRegister(wsp, idp, wsp_session_dump, service_types =
Packit Service 88ab54
            (lasso.PP11_HREF,), address = spSoapEndpoint+'2',
Packit Service 88ab54
            abstract = 'My second PP service', services_map = service_map)
Packit Service 88ab54
        wsp_identity_dump, wsp_session_dump, idp_identity_dump, idp_session_dump, dst_epr = self.login(wsp, idp, 1, {})
Packit Service 88ab54
Packit Service 88ab54
        wsp_disco = lasso.IdWsf2Discovery(wsp)
Packit Service 88ab54
        wsp_disco.setEpr(dst_epr)
Packit Service 88ab54
        wsp_disco.initMetadataDelete()
Packit Service 88ab54
        svcmdids = tuple(service_map[wsp.providerId])
Packit Service 88ab54
        wsp_disco.setSvcmdids(svcmdids)
Packit Service 88ab54
        wsp_disco.buildRequestMsg()
Packit Service 88ab54
Packit Service 88ab54
        idp_disco = lasso.IdWsf2Discovery(idp)
Packit Service 88ab54
        idp_disco.processRequestMsg(wsp_disco.msgBody)
Packit Service 88ab54
        idp_disco.checkSecurityMechanism()
Packit Service 88ab54
        self.failUnlessEqual(idp_disco.svcmdids, svcmdids)
Packit Service 88ab54
        sender = idp_disco.getSoapEnvelopeRequest().sb2GetProviderId()
Packit Service 88ab54
        self.failUnlessEqual(sender, wsp.providerId)
Packit Service 88ab54
        idp_disco.validateRequest()
Packit Service 88ab54
        idp_disco.buildResponseMsg()
Packit Service 88ab54
        wsp_disco.processResponseMsg(idp_disco.msgBody)
Packit Service 88ab54
Packit Service 88ab54
class MetadataAssociationTestCase(IdWsf2TestCase):
Packit Service 88ab54
    def test01(self):
Packit Service 88ab54
        """Metadata association add"""
Packit Service 88ab54
        idp = self.getIdpServer()
Packit Service 88ab54
        wsp = self.getWspServer()
Packit Service 88ab54
        wsp_identity_dump, wsp_session_dump, idp_identity_dump, idp_session_dump, dst_epr = self.login(wsp, idp, 1, {})
Packit Service 88ab54
        service_map = {}
Packit Service 88ab54
        svcMDID = self.metadataRegister(wsp, idp, wsp_session_dump, service_types =
Packit Service 88ab54
            (lasso.PP11_HREF,), address = spSoapEndpoint,
Packit Service 88ab54
            abstract = 'My first PP service', services_map = service_map)
Packit Service 88ab54
        # Make the request
Packit Service 88ab54
        wsp_disco = lasso.IdWsf2Discovery(wsp)
Packit Service 88ab54
        wsp_disco.setEpr(dst_epr)
Packit Service 88ab54
        wsp_disco.initMetadataAssociationAdd()
Packit Service 88ab54
        wsp_disco.svcmdids = (svcMDID,)
Packit Service 88ab54
        wsp_disco.buildRequestMsg()
Packit Service 88ab54
        # Receive it
Packit Service 88ab54
        idp_disco = lasso.IdWsf2Discovery(idp)
Packit Service 88ab54
        idp_disco.processRequestMsg(wsp_disco.msgBody)
Packit Service 88ab54
        idp_disco.checkSecurityMechanism()
Packit Service 88ab54
        self.failUnlessEqual(idp_disco.svcmdids, (svcMDID,))
Packit Service 88ab54
        sender = idp_disco.getSoapEnvelopeRequest().sb2GetProviderId()
Packit Service 88ab54
        name_identifier = idp_disco.getNameIdentifier()
Packit Service 88ab54
        # Store the association
Packit Service 88ab54
        self.failUnless(sender is not None)
Packit Service 88ab54
        self.failUnless(name_identifier is not None)
Packit Service 88ab54
        idp_disco.validateRequest()
Packit Service 88ab54
        idp_disco.buildResponseMsg()
Packit Service 88ab54
        wsp_disco.processResponseMsg(idp_disco.msgBody)
Packit Service 88ab54
Packit Service 88ab54
    def test02(self):
Packit Service 88ab54
        """Metadata association query"""
Packit Service 88ab54
        idp = self.getIdpServer()
Packit Service 88ab54
        wsp = self.getWspServer()
Packit Service 88ab54
        wsc = self.getWscServer()
Packit Service 88ab54
        # Register the service, add an association
Packit Service 88ab54
        federations = {}
Packit Service 88ab54
        wsp_identity_dump, wsp_session_dump, \
Packit Service 88ab54
                idp_identity_dump, idp_session_dump, \
Packit Service 88ab54
                wsp_dst_epr = self.login(wsp, idp, 1, federations)
Packit Service 88ab54
        service_maps = {}
Packit Service 88ab54
        svcMDID = self.metadataRegister(wsp, idp, wsp_session_dump,
Packit Service 88ab54
                service_types = (lasso.PP11_HREF,), address = spSoapEndpoint,
Packit Service 88ab54
            abstract = 'My first PP service', services_map = service_maps)
Packit Service 88ab54
        service_associations = {}
Packit Service 88ab54
        self.addAssociation(wsp, idp, wsp_session_dump, svcMDID, service_maps,
Packit Service 88ab54
                federations, service_associations)
Packit Service 88ab54
        # Start a query
Packit Service 88ab54
        wsp_disco = lasso.IdWsf2Discovery(wsp)
Packit Service 88ab54
        wsp_disco.setEpr(wsp_dst_epr)
Packit Service 88ab54
        wsp_disco.initMetadataAssociationQuery()
Packit Service 88ab54
        wsp_disco.buildRequestMsg()
Packit Service 88ab54
        #
Packit Service 88ab54
        idp_disco = lasso.IdWsf2Discovery(idp)
Packit Service 88ab54
        idp_disco.processRequestMsg(wsp_disco.msgBody)
Packit Service 88ab54
        idp_disco.checkSecurityMechanism()
Packit Service 88ab54
        self.failUnlessEqual(idp_disco.svcmdids, ())
Packit Service 88ab54
        f = self.nid2tuple(idp_disco.getNameIdentifier())
Packit Service 88ab54
        uid = federations[f]
Packit Service 88ab54
        result = []
Packit Service 88ab54
        for svcmdid in service_associations[uid]:
Packit Service 88ab54
            result.append(svcmdid)
Packit Service 88ab54
        idp_disco.svcmdids = tuple(result)
Packit Service 88ab54
        idp_disco.validateRequest()
Packit Service 88ab54
        idp_disco.buildResponseMsg()
Packit Service 88ab54
        wsp_disco.processResponseMsg(idp_disco.msgBody)
Packit Service 88ab54
        self.failUnlessEqual(wsp_disco.svcmdids, (svcMDID,))
Packit Service 88ab54
Packit Service 88ab54
    def test03(self):
Packit Service 88ab54
        """Metadata association delete"""
Packit Service 88ab54
        pass
Packit Service 88ab54
Packit Service 88ab54
class QueryTestCase(IdWsf2TestCase):
Packit Service 88ab54
    def test01(self):
Packit Service 88ab54
        """Discovery Service Query"""
Packit Service 88ab54
        idp = self.getIdpServer()
Packit Service 88ab54
        wsp = self.getWspServer()
Packit Service 88ab54
        wsc = self.getWscServer()
Packit Service 88ab54
        federations = {}
Packit Service 88ab54
        # Register the service, add an association
Packit Service 88ab54
        wsp_identity_dump, wsp_session_dump, idp_identity_dump, idp_session_dump, wsp_dst_epr = self.login(wsp, idp, 1, federations)
Packit Service 88ab54
        service_maps = {}
Packit Service 88ab54
        svcMDID = self.metadataRegister(wsp, idp, wsp_session_dump, service_types =
Packit Service 88ab54
            (lasso.PP11_HREF,), address = spSoapEndpoint,
Packit Service 88ab54
            abstract = 'My first PP service', services_map = service_maps)
Packit Service 88ab54
        service_associations = {}
Packit Service 88ab54
        self.addAssociation(wsp, idp, wsp_session_dump, svcMDID, service_maps, federations, service_associations)
Packit Service 88ab54
        # Try to find the service
Packit Service 88ab54
        wsc_identity_dump, wsc_session_dump, idp_identity_dump, idp_session_dump, wsc_dst_epr = self.login(wsc, idp, 1, federations, idp_identity_dump = idp_identity_dump, idp_session_dump = idp_session_dump)
Packit Service 88ab54
        wsc_disco = lasso.IdWsf2Discovery(wsc)
Packit Service 88ab54
        wsc_disco.setEpr(wsc_dst_epr)
Packit Service 88ab54
        wsc_disco.initQuery()
Packit Service 88ab54
        wsc_disco.addRequestedService(service_types = (lasso.PP11_HREF,))
Packit Service 88ab54
        wsc_disco.buildRequestMsg()
Packit Service 88ab54
        idp_disco = lasso.IdWsf2Discovery(idp)
Packit Service 88ab54
        idp_disco.setIdentityFromDump(idp_identity_dump)
Packit Service 88ab54
        idp_disco.processRequestMsg(wsc_disco.msgBody)
Packit Service 88ab54
        f = self.nid2tuple(idp_disco.getNameIdentifier())
Packit Service 88ab54
        uid = federations[f]
Packit Service 88ab54
        for id in service_associations[uid]:
Packit Service 88ab54
            idp_disco.addServiceMetadata(service_maps[id])
Packit Service 88ab54
        idp_disco.validateRequest()
Packit Service 88ab54
        idp_disco.buildResponseMsg()
Packit Service 88ab54
        wsc_disco.processResponseMsg(idp_disco.msgBody)
Packit Service 88ab54
        self.failUnlessEqual(len(wsc_disco.endpointReferences), 1)
Packit Service 88ab54
Packit Service 88ab54
class DstTestCase(IdWsf2TestCase):
Packit Service 88ab54
    def test01(self):
Packit Service 88ab54
        """Data Service Template Query"""
Packit Service 88ab54
        content = '<pp:PP xmlns:pp="%s">Coin</pp:PP>' % lasso.PP11_HREF
Packit Service 88ab54
        idp = self.getIdpServer()
Packit Service 88ab54
        wsp = self.getWspServer()
Packit Service 88ab54
        wsc = self.getWscServer()
Packit Service 88ab54
        federations = {}
Packit Service 88ab54
        # Register the service, add an association
Packit Service 88ab54
        wsp_identity_dump, wsp_session_dump, idp_identity_dump, \
Packit Service 88ab54
            idp_session_dump, wsp_dst_epr = self.login(wsp, idp, 1,
Packit Service 88ab54
                    federations)
Packit Service 88ab54
        service_maps = {}
Packit Service 88ab54
        svcMDID = self.metadataRegister(wsp, idp, wsp_session_dump,
Packit Service 88ab54
                service_types = (lasso.PP11_HREF,), address =
Packit Service 88ab54
                spSoapEndpoint, abstract = 'My first PP service',
Packit Service 88ab54
                services_map = service_maps)
Packit Service 88ab54
        service_associations = {}
Packit Service 88ab54
        self.addAssociation(wsp, idp, wsp_session_dump, svcMDID,
Packit Service 88ab54
                service_maps, federations, service_associations)
Packit Service 88ab54
        wsc_identity_dump, wsc_session_dump, idp_identity_dump, \
Packit Service 88ab54
        idp_session_dump, wsc_dst_epr = self.login(wsc, idp, 1, federations,
Packit Service 88ab54
                idp_identity_dump = idp_identity_dump, idp_session_dump =
Packit Service 88ab54
                idp_session_dump)
Packit Service 88ab54
        eprs = self.query(wsc, idp, idp_identity_dump, wsc_session_dump, 1,
Packit Service 88ab54
                federations, service_maps, service_associations,
Packit Service 88ab54
                service_types = (lasso.PP11_HREF,))
Packit Service 88ab54
        self.failUnless(len(eprs), 1)
Packit Service 88ab54
        lasso.registerIdwsf2DstService(lasso.PP11_PREFIX, lasso.PP11_HREF)
Packit Service 88ab54
        wsc_dst = lasso.IdWsf2DataService(wsc)
Packit Service 88ab54
        wsc_dst.setEpr(eprs[0])
Packit Service 88ab54
        wsc_dst.initQuery()
Packit Service 88ab54
        wsc_dst.setServiceType(lasso.PP11_PREFIX, lasso.PP11_HREF)
Packit Service 88ab54
        wsc_dst.addQueryItem('/%s:PP' % lasso.PP11_PREFIX, 'xxx')
Packit Service 88ab54
        wsc_dst.buildRequestMsg()
Packit Service 88ab54
        wsp_dst = lasso.IdWsf2DataService(wsp)
Packit Service 88ab54
        wsp_dst.processRequestMsg(wsc_dst.msgBody)
Packit Service 88ab54
        self.failUnlessEqual(wsp_dst.requestType, lasso.IDWSF2_DATA_SERVICE_REQUEST_TYPE_QUERY)
Packit Service 88ab54
        wsp_dst.checkSecurityMechanism()
Packit Service 88ab54
        data = ET.parse(StringIO(content))
Packit Service 88ab54
        for item in wsp_dst.items:
Packit Service 88ab54
            result = data.xpath(item.select, namespaces = { lasso.PP11_PREFIX: lasso.PP11_HREF })
Packit Service 88ab54
            for found in result:
Packit Service 88ab54
                wsp_dst.setQueryItemResult(item.itemId, ET.tostring(found), True)
Packit Service 88ab54
        wsp_dst.setServiceType(lasso.PP11_PREFIX, lasso.PP11_HREF)
Packit Service 88ab54
        wsp_dst.validateRequest()
Packit Service 88ab54
        wsp_dst.buildResponseMsg()
Packit Service 88ab54
        wsc_dst.processResponseMsg(wsp_dst.msgBody)
Packit Service 88ab54
Packit Service 88ab54
Packit Service 88ab54
metadataSuite = unittest.makeSuite(MetadataTestCase, 'test')
Packit Service 88ab54
metadataAssociationSuite = unittest.makeSuite(MetadataAssociationTestCase, 'test')
Packit Service 88ab54
querySuite = unittest.makeSuite(QueryTestCase, 'test')
Packit Service 88ab54
dstSuite = unittest.makeSuite(DstTestCase, 'test')
Packit Service 88ab54
Packit Service 88ab54
Packit Service 88ab54
allTests = unittest.TestSuite((metadataSuite,
Packit Service 88ab54
    metadataAssociationSuite,querySuite,dstSuite)) 
Packit Service 88ab54
Packit Service 88ab54
if __name__ == '__main__':
Packit Service 88ab54
    sys.exit(not unittest.TextTestRunner(verbosity = 2).run(allTests).wasSuccessful())
Packit Service 88ab54