Blame bindings/python/tests/idwsf2_tests.py

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