Blame bindings/python/tests/idwsf1_tests.py

Packit Service 88ab54
# -*- coding: UTF-8 -*-
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
import os
Packit Service 88ab54
import unittest
Packit Service 88ab54
import sys
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
    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
wsp_metadata = os.path.join(dataDir, 'sp1-la/metadata.xml')
Packit Service 88ab54
wsp_private_key = os.path.join(dataDir, 'sp1-la/private-key-raw.pem')
Packit Service 88ab54
wsp_public_key = os.path.join(dataDir, 'sp1-la/public-key.pem')
Packit Service 88ab54
wsc_metadata = os.path.join(dataDir, 'sp2-la/metadata.xml')
Packit Service 88ab54
wsc_private_key = os.path.join(dataDir, 'sp2-la/private-key-raw.pem')
Packit Service 88ab54
wsc_public_key = os.path.join(dataDir, 'sp2-la/public-key.pem')
Packit Service 88ab54
idp_metadata = os.path.join(dataDir, 'idp1-la/metadata.xml')
Packit Service 88ab54
idp_private_key = os.path.join(dataDir, 'idp1-la/private-key-raw.pem')
Packit Service 88ab54
idp_public_key = os.path.join(dataDir, 'idp1-la/public-key.pem')
Packit Service 88ab54
Packit Service 88ab54
abstract_description = "Personal Profile Resource"
Packit Service 88ab54
resource_id = "http://idp/user/resources/1"
Packit Service 88ab54
Packit Service 88ab54
def __LINE__():
Packit Service 88ab54
    try:
Packit Service 88ab54
        raise Exception
Packit Service 88ab54
    except:
Packit Service 88ab54
        return sys.exc_info()[2].tb_frame.f_back.f_lineno
Packit Service 88ab54
lasso.registerDstService('pp10', lasso.PP10_HREF)
Packit Service 88ab54
Packit Service 88ab54
class IdWsf1TestCase(unittest.TestCase):
Packit Service 88ab54
    def get_wsp_server(self):
Packit Service 88ab54
        server = lasso.Server(wsp_metadata, wsp_private_key, None, None)
Packit Service 88ab54
        server.addProvider(lasso.PROVIDER_ROLE_IDP, idp_metadata, idp_public_key, None)
Packit Service 88ab54
        return server
Packit Service 88ab54
Packit Service 88ab54
    def get_wsc_server(self):
Packit Service 88ab54
        server = lasso.Server(wsc_metadata, wsc_private_key, None, None)
Packit Service 88ab54
        server.addProvider(lasso.PROVIDER_ROLE_IDP, idp_metadata, idp_public_key, None)
Packit Service 88ab54
        return server
Packit Service 88ab54
Packit Service 88ab54
    def get_idp_server(self):
Packit Service 88ab54
        server = lasso.Server(idp_metadata, idp_private_key, None, None)
Packit Service 88ab54
        server.addProvider(lasso.PROVIDER_ROLE_SP, wsp_metadata, wsp_public_key, None)
Packit Service 88ab54
        server.addProvider(lasso.PROVIDER_ROLE_SP, wsc_metadata, wsc_public_key, None)
Packit Service 88ab54
        return server
Packit Service 88ab54
Packit Service 88ab54
    def add_services(self, idp):
Packit Service 88ab54
        # Add Discovery service
Packit Service 88ab54
        disco_description = lasso.DiscoDescription.newWithBriefSoapHttpDescription(
Packit Service 88ab54
                              lasso.SECURITY_MECH_NULL,
Packit Service 88ab54
                              "http://idp/discovery/soapEndpoint",
Packit Service 88ab54
                              "Discovery SOAP Endpoint description");
Packit Service 88ab54
        disco_service_instance = lasso.DiscoServiceInstance(
Packit Service 88ab54
                              lasso.DISCO_HREF,
Packit Service 88ab54
                              "http://idp/providerId",
Packit Service 88ab54
                              disco_description);
Packit Service 88ab54
        idp.addService(disco_service_instance);
Packit Service 88ab54
Packit Service 88ab54
        # Add Personal Profile service
Packit Service 88ab54
        pp_description = lasso.DiscoDescription.newWithBriefSoapHttpDescription(
Packit Service 88ab54
                            lasso.SECURITY_MECH_NULL,
Packit Service 88ab54
                            "http://idp/pp/soapEndpoint",
Packit Service 88ab54
                            "Discovery SOAP Endpoint description");
Packit Service 88ab54
        pp_service_instance = lasso.DiscoServiceInstance(
Packit Service 88ab54
                                lasso.PP10_HREF,
Packit Service 88ab54
                                "http://idp/providerId",
Packit Service 88ab54
                                pp_description);
Packit Service 88ab54
        idp.addService(pp_service_instance);
Packit Service 88ab54
        return idp
Packit Service 88ab54
Packit Service 88ab54
    def login(self, sp, idp):
Packit Service 88ab54
        sp_login = lasso.Login(sp)
Packit Service 88ab54
        sp_login.initAuthnRequest(sp.providerIds[0], lasso.HTTP_METHOD_POST)
Packit Service 88ab54
        sp_login.request.nameIdPolicy = lasso.LIB_NAMEID_POLICY_TYPE_FEDERATED
Packit Service 88ab54
        sp_login.request.protocolProfile = lasso.LIB_PROTOCOL_PROFILE_BRWS_POST
Packit Service 88ab54
        sp_login.buildAuthnRequestMsg()
Packit Service 88ab54
Packit Service 88ab54
        idp_login = lasso.Login(idp)
Packit Service 88ab54
        idp_login.processAuthnRequestMsg(sp_login.msgBody)
Packit Service 88ab54
        idp_login.validateRequestMsg(True, True)
Packit Service 88ab54
Packit Service 88ab54
        # Set a resource offering in the assertion
Packit Service 88ab54
        discovery_resource_id = "http://idp/discovery/resources/1"
Packit Service 88ab54
        idp_login.setResourceId(discovery_resource_id)
Packit Service 88ab54
        idp_login.buildAssertion(lasso.SAML_AUTHENTICATION_METHOD_PASSWORD, None, None, None, None)
Packit Service 88ab54
        idp_login.buildAuthnResponseMsg()
Packit Service 88ab54
Packit Service 88ab54
        sp_login = lasso.Login(sp)
Packit Service 88ab54
        sp_login.processAuthnResponseMsg(idp_login.msgBody)
Packit Service 88ab54
        sp_login.acceptSso()
Packit Service 88ab54
Packit Service 88ab54
        return sp_login.identity.dump(), sp_login.session.dump(), idp_login.identity.dump(), idp_login.session.dump()
Packit Service 88ab54
Packit Service 88ab54
    def get_resource_offering(self, soap_end_point='http://idp/pp/soapEndpoint'):
Packit Service 88ab54
        service_instance = lasso.DiscoServiceInstance(
Packit Service 88ab54
                lasso.PP10_HREF,
Packit Service 88ab54
                self.idp.providerId,
Packit Service 88ab54
                lasso.DiscoDescription_newWithBriefSoapHttpDescription(
Packit Service 88ab54
                    lasso.SECURITY_MECH_NULL,
Packit Service 88ab54
                    soap_end_point))
Packit Service 88ab54
        resource_offering = lasso.DiscoResourceOffering(service_instance)
Packit Service 88ab54
        resource_offering.resourceId = lasso.DiscoResourceID(resource_id)
Packit Service 88ab54
        resource_offering.abstract = abstract_description
Packit Service 88ab54
        return resource_offering
Packit Service 88ab54
Packit Service 88ab54
    def get_pp_service(self):
Packit Service 88ab54
        self.wsc = self.get_wsc_server()
Packit Service 88ab54
        self.idp = self.get_idp_server()
Packit Service 88ab54
        self.idp = self.add_services(self.idp)
Packit Service 88ab54
Packit Service 88ab54
        # Login from WSC
Packit Service 88ab54
        sp_identity_dump, sp_session_dump, idp_identity_dump, idp_session_dump = self.login(self.wsc, self.idp)
Packit Service 88ab54
Packit Service 88ab54
        # Init discovery query
Packit Service 88ab54
        wsc_disco = lasso.Discovery(self.wsc)
Packit Service 88ab54
        wsc_disco.setSessionFromDump(sp_session_dump)
Packit Service 88ab54
        wsc_disco.initQuery()
Packit Service 88ab54
        wsc_disco.addRequestedServiceType(lasso.PP10_HREF)
Packit Service 88ab54
        wsc_disco.buildRequestMsg()
Packit Service 88ab54
Packit Service 88ab54
        # Process query
Packit Service 88ab54
        idp_disco = lasso.Discovery(self.idp)
Packit Service 88ab54
        idp_disco.processRequestMsg(wsc_disco.msgBody)
Packit Service 88ab54
        idp_disco.setIdentityFromDump(idp_identity_dump)
Packit Service 88ab54
        idp_disco.getIdentity().addResourceOffering(self.get_resource_offering())
Packit Service 88ab54
        idp_disco.buildResponseMsg()
Packit Service 88ab54
Packit Service 88ab54
        # Process response
Packit Service 88ab54
        wsc_disco.processQueryResponseMsg(idp_disco.msgBody);
Packit Service 88ab54
        return wsc_disco.getService()
Packit Service 88ab54
Packit Service 88ab54
class DiscoveryQueryTestCase(IdWsf1TestCase):
Packit Service 88ab54
    def test01(self):
Packit Service 88ab54
        '''Test a discovery query'''
Packit Service 88ab54
        service = self.get_pp_service()
Packit Service 88ab54
        # Check service attributes
Packit Service 88ab54
        resource_offering = service.getResourceOffering()
Packit Service 88ab54
        self.failUnless(resource_offering is not None)
Packit Service 88ab54
        self.failUnless(resource_offering.resourceId is not None)
Packit Service 88ab54
        self.failUnless(resource_offering.resourceId.content == resource_id)
Packit Service 88ab54
        self.failUnless(resource_offering.serviceInstance.providerId == self.wsc.providerIds[0])
Packit Service 88ab54
        self.failUnless(resource_offering.abstract == abstract_description)
Packit Service 88ab54
Packit Service 88ab54
class DiscoveryModifyTestCase(IdWsf1TestCase):
Packit Service 88ab54
    def test01(self):
Packit Service 88ab54
        '''Test a discovery modify'''
Packit Service 88ab54
        self.wsp = self.get_wsp_server()
Packit Service 88ab54
        self.idp = self.get_idp_server()
Packit Service 88ab54
        self.idp = self.add_services(self.idp)
Packit Service 88ab54
Packit Service 88ab54
        # Login from WSP
Packit Service 88ab54
        sp_identity_dump, sp_session_dump, idp_identity_dump, idp_session_dump = self.login(self.wsp, self.idp)
Packit Service 88ab54
Packit Service 88ab54
        # Init discovery modify
Packit Service 88ab54
        wsp_disco = lasso.Discovery(self.wsp)
Packit Service 88ab54
        wsp_disco.setIdentityFromDump(sp_identity_dump)
Packit Service 88ab54
        wsp_disco.setSessionFromDump(sp_session_dump)
Packit Service 88ab54
        resource_offering = self.get_resource_offering()
Packit Service 88ab54
        wsp_disco.initModify()
Packit Service 88ab54
        wsp_disco.addInsertEntry(resource_offering.serviceInstance, resource_offering.resourceId)
Packit Service 88ab54
        wsp_disco.buildRequestMsg()
Packit Service 88ab54
Packit Service 88ab54
        # Process Modify
Packit Service 88ab54
        request_type = lasso.getRequestTypeFromSoapMsg(wsp_disco.msgBody)
Packit Service 88ab54
        self.failUnless(request_type == lasso.REQUEST_TYPE_DISCO_MODIFY)
Packit Service 88ab54
        idp_disco = lasso.Discovery(self.idp)
Packit Service 88ab54
        idp_disco.processRequestMsg(wsp_disco.msgBody)
Packit Service 88ab54
        idp_disco.setIdentityFromDump(idp_identity_dump)
Packit Service 88ab54
        idp_disco.buildResponseMsg()
Packit Service 88ab54
        offerings = idp_disco.identity.getOfferings()
Packit Service 88ab54
        self.failUnless('<disco:Status code="OK"/>' in idp_disco.msgBody)
Packit Service 88ab54
        self.failUnless('
Packit Service 88ab54
        self.failUnless('<disco:ServiceType>urn:liberty:id-sis-pp:2003-08</disco:ServiceType>' in
Packit Service 88ab54
            idp_disco.identity.dump())
Packit Service 88ab54
Packit Service 88ab54
        # Process Response
Packit Service 88ab54
        wsp_disco.processModifyResponseMsg(idp_disco.msgBody)
Packit Service 88ab54
        self.failUnless(wsp_disco.response.newEntryIds == '0')
Packit Service 88ab54
Packit Service 88ab54
class DiscoveryRemoveTestCase(IdWsf1TestCase):
Packit Service 88ab54
    def test01(self):
Packit Service 88ab54
        '''Test a discovery remove'''
Packit Service 88ab54
        self.wsp = self.get_wsp_server()
Packit Service 88ab54
        self.idp = self.get_idp_server()
Packit Service 88ab54
        self.idp = self.add_services(self.idp)
Packit Service 88ab54
Packit Service 88ab54
        # Login from WSP
Packit Service 88ab54
        sp_identity_dump, sp_session_dump, idp_identity_dump, idp_session_dump = self.login(self.wsp, self.idp)
Packit Service 88ab54
Packit Service 88ab54
        # Init discovery modify
Packit Service 88ab54
        wsp_disco = lasso.Discovery(self.wsp)
Packit Service 88ab54
        wsp_disco.setIdentityFromDump(sp_identity_dump)
Packit Service 88ab54
        wsp_disco.setSessionFromDump(sp_session_dump)
Packit Service 88ab54
        wsp_disco.initModify()
Packit Service 88ab54
        wsp_disco.addRemoveEntry('0')
Packit Service 88ab54
        wsp_disco.buildRequestMsg()
Packit Service 88ab54
Packit Service 88ab54
        # Process Modify
Packit Service 88ab54
        request_type = lasso.getRequestTypeFromSoapMsg(wsp_disco.msgBody)
Packit Service 88ab54
        self.failUnless(request_type == lasso.REQUEST_TYPE_DISCO_MODIFY)
Packit Service 88ab54
        idp_disco = lasso.Discovery(self.idp)
Packit Service 88ab54
        idp_disco.processRequestMsg(wsp_disco.msgBody)
Packit Service 88ab54
        idp_disco.setIdentityFromDump(idp_identity_dump)
Packit Service 88ab54
        offering = self.get_resource_offering()
Packit Service 88ab54
        idp_disco.getIdentity().addResourceOffering(offering)
Packit Service 88ab54
        self.failUnless('<disco:ServiceType>urn:liberty:id-sis-pp:2003-08</disco:ServiceType>' in
Packit Service 88ab54
            idp_disco.identity.dump())
Packit Service 88ab54
        idp_disco.buildResponseMsg()
Packit Service 88ab54
        self.failUnless('<disco:Status code="OK"/>' in idp_disco.msgBody)
Packit Service 88ab54
        self.failIf('<disco:ServiceType>urn:liberty:id-sis-pp:2003-08</disco:ServiceType>' in
Packit Service 88ab54
            idp_disco.identity.dump())
Packit Service 88ab54
Packit Service 88ab54
        # Process Response
Packit Service 88ab54
        wsp_disco.processModifyResponseMsg(idp_disco.msgBody)
Packit Service 88ab54
Packit Service 88ab54
class DataServiceQueryTestCase(IdWsf1TestCase):
Packit Service 88ab54
    def test01(self):
Packit Service 88ab54
        '''Test a data service query'''
Packit Service 88ab54
        wsc_service = self.get_pp_service()
Packit Service 88ab54
        wsc_service.initQuery('/pp10:PP/pp10:InformalName', 'name')
Packit Service 88ab54
        wsc_service.buildSoapRequestMsg()
Packit Service 88ab54
        self.failUnless(lasso.getRequestTypeFromSoapMsg(wsc_service.msgBody)
Packit Service 88ab54
                        == lasso.REQUEST_TYPE_DST_QUERY)
Packit Service 88ab54
Packit Service 88ab54
        self.wsp = self.get_wsp_server()
Packit Service 88ab54
        wsp_service = lasso.DataService(self.wsp)
Packit Service 88ab54
        wsp_service.processRequestMsg(wsc_service.msgBody)
Packit Service 88ab54
        self.failUnless(isinstance(wsp_service.request, lasso.DstQuery))
Packit Service 88ab54
        wsp_service.resourceData = '''
Packit Service 88ab54
            <PP xmlns="urn:liberty:id-sis-pp:2003-08">
Packit Service 88ab54
                    <InformalName>Damien</InformalName>
Packit Service 88ab54
            </PP>'''
Packit Service 88ab54
        wsp_service.validateRequest()
Packit Service 88ab54
        wsp_service.buildResponseMsg()
Packit Service 88ab54
Packit Service 88ab54
        wsc_service.processQueryResponseMsg(wsp_service.msgBody)
Packit Service 88ab54
        self.failUnless(wsc_service.getAnswer() ==
Packit Service 88ab54
                '<InformalName xmlns="urn:liberty:id-sis-pp:2003-08">Damien</InformalName>')
Packit Service 88ab54
Packit Service 88ab54
class DataServiceModifyTestCase(IdWsf1TestCase):
Packit Service 88ab54
    def test01(self):
Packit Service 88ab54
        '''Test a data service modify'''
Packit Service 88ab54
Packit Service 88ab54
        xpath = '/pp10:PP/pp10:InformalName'
Packit Service 88ab54
        old_data = '''
Packit Service 88ab54
            <PP xmlns="urn:liberty:id-sis-pp:2003-08">
Packit Service 88ab54
                <InformalName>Damien</InformalName>
Packit Service 88ab54
            </PP>'''
Packit Service 88ab54
        new_data = '<InformalName>Alain</InformalName>'
Packit Service 88ab54
Packit Service 88ab54
        new_full_data = '''<PP xmlns="urn:liberty:id-sis-pp:2003-08">
Packit Service 88ab54
                <pp10:InformalName xmlns:pp10="urn:liberty:id-sis-pp:2003-08">Alain</pp10:InformalName>
Packit Service 88ab54
            </PP>'''
Packit Service 88ab54
Packit Service 88ab54
        wsc_service = self.get_pp_service()
Packit Service 88ab54
        wsc_service.initModify()
Packit Service 88ab54
        wsc_service.addModification(xpath, new_data, overrideAllowed = True)
Packit Service 88ab54
        wsc_service.buildRequestMsg()
Packit Service 88ab54
Packit Service 88ab54
        request_type = lasso.getRequestTypeFromSoapMsg(wsc_service.msgBody)
Packit Service 88ab54
        self.failUnless(request_type == lasso.REQUEST_TYPE_DST_MODIFY)
Packit Service 88ab54
Packit Service 88ab54
        self.wsp = self.get_wsp_server()
Packit Service 88ab54
        wsp_service = lasso.DataService(self.wsp)
Packit Service 88ab54
        wsp_service.processRequestMsg(wsc_service.msgBody)
Packit Service 88ab54
Packit Service 88ab54
        item = wsp_service.request.modification[0]
Packit Service 88ab54
        self.failUnless(item.newData.any[0] ==
Packit Service 88ab54
            '<pp10:InformalName xmlns:pp10="urn:liberty:id-sis-pp:2003-08">Alain</pp10:InformalName>')
Packit Service 88ab54
        self.failUnless(item.select == '/pp10:PP/pp10:InformalName')
Packit Service 88ab54
Packit Service 88ab54
        wsp_service.resourceData = old_data
Packit Service 88ab54
        wsp_service.validateRequest()
Packit Service 88ab54
        wsp_service.buildModifyResponseMsg()
Packit Service 88ab54
        # Save the new wsp_service.resourceData here
Packit Service 88ab54
Packit Service 88ab54
        self.failUnless(wsp_service.resourceData == new_full_data)
Packit Service 88ab54
Packit Service 88ab54
        wsc_service.processModifyResponseMsg(wsp_service.msgBody)
Packit Service 88ab54
Packit Service 88ab54
    def test02(self):
Packit Service 88ab54
        '''Test a data service modify - root element'''
Packit Service 88ab54
Packit Service 88ab54
        xpath = '/pp10:PP'
Packit Service 88ab54
        old_data = '''
Packit Service 88ab54
            <PP xmlns="urn:liberty:id-sis-pp:2003-08">
Packit Service 88ab54
                <InformalName>Damien</InformalName>
Packit Service 88ab54
            </PP>'''
Packit Service 88ab54
        new_data = '''
Packit Service 88ab54
            <PP xmlns="urn:liberty:id-sis-pp:2003-08">
Packit Service 88ab54
                <InformalName>Alain</InformalName>
Packit Service 88ab54
            </PP>'''
Packit Service 88ab54
Packit Service 88ab54
        new_full_data = '''<PP xmlns="urn:liberty:id-sis-pp:2003-08">
Packit Service 88ab54
                <InformalName>Alain</InformalName>
Packit Service 88ab54
            </PP>'''
Packit Service 88ab54
Packit Service 88ab54
        wsc_service = self.get_pp_service()
Packit Service 88ab54
        wsc_service.initModify()
Packit Service 88ab54
        wsc_service.addModification(xpath, new_data, overrideAllowed = True)
Packit Service 88ab54
        wsc_service.buildRequestMsg()
Packit Service 88ab54
Packit Service 88ab54
        request_type = lasso.getRequestTypeFromSoapMsg(wsc_service.msgBody)
Packit Service 88ab54
        self.failUnless(request_type == lasso.REQUEST_TYPE_DST_MODIFY)
Packit Service 88ab54
Packit Service 88ab54
        self.wsp = self.get_wsp_server()
Packit Service 88ab54
        wsp_service = lasso.DataService(self.wsp)
Packit Service 88ab54
        wsp_service.processRequestMsg(wsc_service.msgBody)
Packit Service 88ab54
        wsp_service.resourceData = old_data
Packit Service 88ab54
        wsp_service.validateRequest()
Packit Service 88ab54
        wsp_service.buildModifyResponseMsg()
Packit Service 88ab54
        # Save the new wsp_service.resourceData here
Packit Service 88ab54
Packit Service 88ab54
        self.failUnless(wsp_service.resourceData == new_full_data)
Packit Service 88ab54
Packit Service 88ab54
        wsc_service.processModifyResponseMsg(wsp_service.msgBody)
Packit Service 88ab54
Packit Service 88ab54
    def test03(self):
Packit Service 88ab54
        '''Test a data service modify with redirect for consent'''
Packit Service 88ab54
Packit Service 88ab54
        xpath = '/pp:PP/pp:InformalName'
Packit Service 88ab54
        old_data = '''<PP xmlns="urn:liberty:id-sis-pp:2003-08">
Packit Service 88ab54
                <InformalName>Damien</InformalName>
Packit Service 88ab54
            </PP>'''
Packit Service 88ab54
        new_data = '<InformalName>Alain</InformalName>'
Packit Service 88ab54
Packit Service 88ab54
        new_full_data = '''<PP xmlns="urn:liberty:id-sis-pp:2003-08">
Packit Service 88ab54
                <pp:InformalName xmlns:pp="urn:liberty:id-sis-pp:2003-08">Alain</pp:InformalName>
Packit Service 88ab54
            </PP>'''
Packit Service 88ab54
        redir_url = 'http://site/redirect_for_consent'
Packit Service 88ab54
Packit Service 88ab54
        wsc_service = self.get_pp_service()
Packit Service 88ab54
        wsc_service.initModify()
Packit Service 88ab54
        wsc_service.addModification(xpath, new_data, overrideAllowed = True)
Packit Service 88ab54
        wsc_service.buildRequestMsg()
Packit Service 88ab54
Packit Service 88ab54
        request_type = lasso.getRequestTypeFromSoapMsg(wsc_service.msgBody)
Packit Service 88ab54
        self.failUnless(request_type == lasso.REQUEST_TYPE_DST_MODIFY)
Packit Service 88ab54
Packit Service 88ab54
        self.wsp = self.get_wsp_server()
Packit Service 88ab54
        wsp_service = lasso.DataService(self.wsp)
Packit Service 88ab54
        wsp_service.processRequestMsg(wsc_service.msgBody)
Packit Service 88ab54
        wsp_service.resourceData = old_data
Packit Service 88ab54
Packit Service 88ab54
        wsp_service.initInteractionServiceRedirect(redir_url)
Packit Service 88ab54
        wsp_service.buildModifyResponseMsg()
Packit Service 88ab54
        # Save the new wsp_service.resourceData here
Packit Service 88ab54
Packit Service 88ab54
        # Data mustn't have been modified here
Packit Service 88ab54
        self.failUnless(wsp_service.resourceData == old_data)
Packit Service 88ab54
        self.failUnless(wsp_service.msgBody is not None)
Packit Service 88ab54
Packit Service 88ab54
        try:
Packit Service 88ab54
            wsc_service.processModifyResponseMsg(wsp_service.msgBody)
Packit Service 88ab54
        except lasso.SoapRedirectRequestFaultError:
Packit Service 88ab54
            pass
Packit Service 88ab54
        except Exception, e:
Packit Service 88ab54
            self.fail(e)
Packit Service 88ab54
        self.failUnless(wsc_service.msgUrl == redir_url)
Packit Service 88ab54
Packit Service 88ab54
Packit Service 88ab54
discoveryQuerySuite = unittest.makeSuite(DiscoveryQueryTestCase, 'test')
Packit Service 88ab54
discoveryModifySuite = unittest.makeSuite(DiscoveryModifyTestCase, 'test')
Packit Service 88ab54
discoveryRemoveSuite = unittest.makeSuite(DiscoveryRemoveTestCase, 'test')
Packit Service 88ab54
dataServiceQuerySuite = unittest.makeSuite(DataServiceQueryTestCase, 'test')
Packit Service 88ab54
dataServiceModifySuite = unittest.makeSuite(DataServiceModifyTestCase, 'test')
Packit Service 88ab54
Packit Service 88ab54
allTests = unittest.TestSuite((discoveryQuerySuite, discoveryModifySuite, discoveryRemoveSuite,
Packit Service 88ab54
    dataServiceQuerySuite, dataServiceModifySuite))
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