diff -r 000000000000 -r f0cf47e981f9 mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaCapabilityExchange.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaCapabilityExchange.cpp Thu Dec 17 08:44:37 2009 +0200 @@ -0,0 +1,928 @@ +/* +* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +// CLASS HEADER +#include "UT_CMusAvaCapabilityExchange.h" +#include "muslogger.h" + + + +// EXTERNAL INCLUDES +#include +#include +#include +#include +#include +#include +#include +#include +// INTERNAL INCLUDES +#include "musavaCapabilityExchange.h" +#include "musavaavailabilityobserver.h" +#include "musavaavailabilityobserverimp.h" +#include "musavacapabilitytesthelper.h" +#include "musavacapability.h" +#include "musavaterminal.h" +#include "CSipSseTestTls.h" +#include "musavaoptionhandler.h" +#include "musavasettingsimp.h" +#include "CSipSseTestTls.h" +#include "musavacapabilityquery.h" +#include "mussettings.h" +#include "mussettingskeys.h" +#include "musavaobserverimp.h" +#include "musavasharedobject.h" +#include "musavasip.h" +#include "musavaobserver.h" +// CONSTRUCTION +UT_CMusAvaCapabilityExchange* UT_CMusAvaCapabilityExchange::NewL() + { + UT_CMusAvaCapabilityExchange* self = UT_CMusAvaCapabilityExchange::NewLC(); + CleanupStack::Pop(); + + return self; + } + +UT_CMusAvaCapabilityExchange* UT_CMusAvaCapabilityExchange::NewLC() + { + UT_CMusAvaCapabilityExchange* self = new( ELeave ) UT_CMusAvaCapabilityExchange(); + CleanupStack::PushL( self ); + self->ConstructL(); + + return self; + } + +// Destructor (virtual by CBase) +UT_CMusAvaCapabilityExchange::~UT_CMusAvaCapabilityExchange() + { + } + +// Default constructor +UT_CMusAvaCapabilityExchange::UT_CMusAvaCapabilityExchange() + { + } + +// Second phase construct +void UT_CMusAvaCapabilityExchange::ConstructL() + { + // The ConstructL from the base class CEUnitTestSuiteClass must be called. + // It generates the test case table. + CEUnitTestSuiteClass::ConstructL(); + } + +// METHODS + +_LIT8( KTestNewTerminal, "new@foo.bar"); + +void UT_CMusAvaCapabilityExchange::SetupL( ) + { + MSIPObserver* dummyObserver = NULL; + CSIPProfileRegistry* dummyRegistry = NULL; + MSIPConnectionObserver* dummyConnectionObserver = NULL; + + TUid uid = TUid::Uid( 1 ); + TUint32 iapId = 32; + + iAvailabilityObserver = CMusAvaAvailabilityObserverImp::NewL(); + iConcreteSettings = CMusAvaSettingsImp::NewL(); + iOptionHandler = CMusAvaOptionHandler::NewL( *iAvailabilityObserver, + *iConcreteSettings ); + iSIP = CSIP::NewL( uid, *dummyObserver ); + iProfile = CSIPProfile::NewL( dummyRegistry ); + iOptionHandler->iSharedObj->MusAvaSip().iSipProfile = iProfile; + iSIPConnection = CSIPConnection::NewL( *iSIP, + iapId, + *dummyConnectionObserver ); + iOptionHandler->iSharedObj->MusAvaSip().iSipConnection = iSIPConnection; + + iExchange = iOptionHandler->iCapabilityExchange; + + iCapability = iOptionHandler->iSwisCapability; + if ( !iProfile->iRegisteredContact ) + { + iProfile->iRegisteredContact = KRegisteredContact().AllocL(); + } + + CSipSseTestTls::OpenL(); + iStorage = CSipSseTestTls::Storage(); + } + +void UT_CMusAvaCapabilityExchange::Teardown( ) + { + if ( iStorage ) + { + iStorage->Clear(); + CSipSseTestTls::Close(); + iStorage = NULL; + } + + delete iOptionHandler; + delete iAvailabilityObserver; + delete iConcreteSettings; + delete iSIP; + } + +void UT_CMusAvaCapabilityExchange::UT_CMusAvaCapabilityExchange_NewLL( ) + { + EUNIT_ASSERT( iExchange->Capabilities().Count() == 1 ); + EUNIT_ASSERT( iExchange->Terminals().Count() == 0 ); + EUNIT_ASSERT( iExchange->Capabilities()[0] == iCapability ); + } + +void UT_CMusAvaCapabilityExchange::UT_CMusAvaCapabilityExchange_QueryObserverL( ) + { + EUNIT_ASSERT( &iExchange->QueryObserver() == iOptionHandler ); + } + +void UT_CMusAvaCapabilityExchange::UT_CMusAvaCapabilityExchange_TerminalIdL( ) + { + EUNIT_ASSERT( iExchange->TerminalId().Compare( KNullDesC8 ) == 0 ); + } + +void UT_CMusAvaCapabilityExchange::UT_CMusAvaCapabilityExchange_QueryReceivedL() + { + EUNIT_DISABLE_ALLOC_DECORATOR; + MultimediaSharingSettings::SetSipProfileSettingL( 1 ); + if ( !iProfile->iArray ) + { + iProfile->iArray = new ( ELeave ) CDesC8ArrayFlat( 1 ); + iProfile->iArray->AppendL( _L8("sip:user@domain.com") ); + } + + MultimediaSharingSettings::SetOperatorVariantSettingL( + MusSettingsKeys::EStandard ); + MultimediaSharingSettings::SetCapabilityQuerySettingL( + MusSettingsKeys::ESequential ); + + CSIPServerTransaction* request = NULL; + + TBufC16<16> str(KCapabilityTestSIPAddressUri_BSIP); + HBufC16* ptr; + ptr = str.AllocLC(); + CDesCArrayFlat* sipAddress = new( ELeave ) CDesCArrayFlat( 1 ); + CleanupStack::PushL( sipAddress ); + sipAddress->AppendL( *ptr ); + iOptionHandler->iSettings.SetSipAddressesL( *sipAddress ); + sipAddress->Reset(); + CleanupStack::PopAndDestroy( sipAddress ); + CleanupStack::PopAndDestroy(); //ptr + EUNIT_ENABLE_ALLOC_DECORATOR; + + EUNIT_ASSERT( iExchange->Capabilities().Count() == 1 ); + EUNIT_ASSERT( iExchange->Capabilities()[0] == iCapability ); + EUNIT_ASSERT( iCapability->Feature().DesC().Compare( KCapabilitySwisFeature ) == 0 ); + +//ok & No terminal id configured + EUNIT_DISABLE_ALLOC_DECORATOR; + iStorage->Clear(); + iExchange->iTerminals.ResetAndDestroy(); + iOptionHandler->iState = MMusAvaObserver::EMusAvaStatusNotExecuted; + request = CapabilityTestHelper::OptionsRequestL( KCapabilityTestAddress_A, + KCapabilityTestAddress_B, + KCapabilitySwisFeature, + KCapabilitySwisFeature, + KCapabilityTestAcceptHeader, + KCapabilityTestTerminalID_B ); + + iOptionHandler->iCapabilitiesRequestAnswered = EFalse; + EUNIT_ENABLE_ALLOC_DECORATOR; + iExchange->QueryReceived( request ); + TInt count = NULL; + EUNIT_GET_ALLOC_DECORATOR_FAILCOUNT( count ); + if ( count > 0 && + iOptionHandler->State() != MMusAvaObserver::EMusAvaStatusOptionsSent ) + { + User::Leave( KErrNoMemory ); + } + + EUNIT_ASSERT( iOptionHandler->State() == MMusAvaObserver::EMusAvaStatusOptionsSent ); + EUNIT_ASSERT( iExchange->Terminals().Count() == 1 ); + EUNIT_ASSERT( iExchange->Terminals()[0]->Id().Compare( KCapabilityTestTerminalID_B ) == 0 ); + EUNIT_ASSERT( iExchange->Terminals()[0]->Uri().Compare( KCapabilityTestAddress_B ) == 0 ); + EUNIT_ASSERT( iExchange->Terminals()[0]->RequestedQuery() ); + EUNIT_ASSERT( !iExchange->Terminals()[0]->IsDiscovered() ); + + EUNIT_ASSERT( iStorage->iResponseToRequest == SIPStrings::StringF( SipStrConsts::EOptions ) ); + EUNIT_ASSERT( iStorage->iClientResponse->StatusCode() == KMUSAVASIP200 ); + EUNIT_ASSERT( iStorage->iClientResponse->MessageElements().Content().Length() > 0 ); + EUNIT_ASSERT( iStorage->iClientResponse->MessageElements().Content().Compare( KCapabilityTestSDP264And263 ) == 0 ); + + EUNIT_ASSERT( iStorage->iClientResponse->MessageElements().UserHeaders().Count() == 3 ); + MUS_HEADER_ASSERT( iStorage->iClientResponse, 0, KCapabilityTestContactHeader_A ); + iStorage->Clear(); + } + +void UT_CMusAvaCapabilityExchange::UT_CMusAvaCapabilityExchange_QueryReceived1L() + { + EUNIT_DISABLE_ALLOC_DECORATOR; + MultimediaSharingSettings::SetSipProfileSettingL( 1 ); + if ( !iProfile->iArray ) + { + iProfile->iArray = new ( ELeave ) CDesC8ArrayFlat( 1 ); + iProfile->iArray->AppendL( _L8("sip:user@domain.com") ); + } + + MultimediaSharingSettings::SetOperatorVariantSettingL( + MusSettingsKeys::EStandard ); + MultimediaSharingSettings::SetCapabilityQuerySettingL( + MusSettingsKeys::ESequential ); + + CSIPServerTransaction* request = NULL; + +//fails + iStorage->Clear(); + iOptionHandler->iState = MMusAvaObserver::EMusAvaStatusNotExecuted; + request = CapabilityTestHelper::OptionsRequestL( KCapabilityTestAddress_A, + KCapabilityTestAddress_B, + KNullDesC8,//Accepct-Contact + KCapabilitySwisFeature, + KCapabilityTestAcceptHeader, + KCapabilityTestTerminalID_B ); + + EUNIT_ENABLE_ALLOC_DECORATOR; + iExchange->QueryReceived( request ); + TInt count = NULL; + EUNIT_GET_ALLOC_DECORATOR_FAILCOUNT( count ); + if ( count > 0 && + ( iStorage->iResponseToRequest != SIPStrings::StringF( SipStrConsts::EOptions ) || + iExchange->Terminals().Count() < 1 ) ) + { + User::Leave( KErrNoMemory ); + } + + EUNIT_ASSERT( iStorage->iResponseToRequest == SIPStrings::StringF( SipStrConsts::EOptions ) ); + EUNIT_ASSERT( iExchange->Terminals().Count() == 1 ); + EUNIT_ASSERT( iExchange->Terminals()[0]->IsDiscovered() ); + EUNIT_ASSERT( iStorage->iResponseToRequest == SIPStrings::StringF( SipStrConsts::EOptions ) ); + EUNIT_ASSERT( iStorage->iClientResponse->StatusCode() == KMUSAVASIPServerInternalError ); + EUNIT_ASSERT( iStorage->iClientResponse->MessageElements().Content().Length() == 0 ); + + delete iExchange->iTerminals[ 0 ]; + iExchange->iTerminals.Remove( 0 ); + EUNIT_ASSERT( iExchange->Terminals().Count() == 0 ); + iStorage->Clear(); + } + +void UT_CMusAvaCapabilityExchange::UT_CMusAvaCapabilityExchange_QueryReceived2L() + { + EUNIT_DISABLE_ALLOC_DECORATOR; + MultimediaSharingSettings::SetSipProfileSettingL( 1 ); + if ( !iProfile->iArray ) + { + iProfile->iArray = new ( ELeave ) CDesC8ArrayFlat( 1 ); + iProfile->iArray->AppendL( _L8("sip:user@domain.com") ); + } + + MultimediaSharingSettings::SetOperatorVariantSettingL( + MusSettingsKeys::EStandard ); + MultimediaSharingSettings::SetCapabilityQuerySettingL( + MusSettingsKeys::ESequential ); + + CSIPServerTransaction* request = NULL; + + TBufC16<16> str(KCapabilityTestSIPAddressUri_BSIP); + HBufC16* ptr; + ptr = str.AllocLC(); + CDesCArrayFlat* sipAddress = new( ELeave ) CDesCArrayFlat( 1 ); + CleanupStack::PushL( sipAddress ); + sipAddress->AppendL( *ptr ); + iOptionHandler->iSettings.SetSipAddressesL( *sipAddress ); + sipAddress->Reset(); + CleanupStack::PopAndDestroy( sipAddress ); + CleanupStack::PopAndDestroy(); //ptr + EUNIT_ENABLE_ALLOC_DECORATOR; + + // cingular case && first OPTIONS request received + + iExchange->iTerminals.ResetAndDestroy(); + iOptionHandler->iCapabilitiesRequestAnswered = EFalse; + // set cingular variant key on + MultimediaSharingSettings::SetOperatorVariantSettingL( + MusSettingsKeys::EOperatorSpecific ); + request = CapabilityTestHelper::OptionsRequestL( KCapabilityTestAddress_A, + KCapabilityTestAddress_B, + KCapabilitySwisFeature, + KCapabilitySwisFeature, + KCapabilityTestAcceptHeader, + KCapabilityTestTerminalID_B ); + + iOptionHandler->iState = MMusAvaObserver::EMusAvaStatusNotExecuted; + iExchange->QueryReceived( request ); + TInt count = NULL; + EUNIT_GET_ALLOC_DECORATOR_FAILCOUNT( count ); + if ( count > 0 && + iOptionHandler->State() != MMusAvaObserver::EMusAvaStatusOptionsSent ) + { + User::Leave( KErrNoMemory ); + } + + EUNIT_ASSERT( iOptionHandler->State() == MMusAvaObserver::EMusAvaStatusOptionsSent); + EUNIT_ASSERT( iOptionHandler->CapabilitiesResolvedForCingular() == ETrue ); + MUS_HEADER_ASSERT( iStorage->iClientResponse, 0, KCapabilityTestContactHeader_A ); + + iStorage->Clear(); + // cingular case && second OPTIONS request received + // set cingular variant key on + EUNIT_DISABLE_ALLOC_DECORATOR; + MultimediaSharingSettings::SetOperatorVariantSettingL( + MusSettingsKeys::EOperatorSpecific ); + + + iExchange->iTerminals.ResetAndDestroy(); + iOptionHandler->iState = MMusAvaObserver::EMusAvaStatusNotExecuted; + iOptionHandler->iCapabilitiesRequestAnswered = ETrue; + + request = CapabilityTestHelper::OptionsRequestL( KCapabilityTestAddress_A, + KCapabilityTestAddress_B, + KCapabilitySwisFeature, + KCapabilitySwisFeature, + KCapabilityTestAcceptHeader, + KCapabilityTestTerminalID_B ); + EUNIT_ENABLE_ALLOC_DECORATOR; + iExchange->QueryReceived( request ); + EUNIT_GET_ALLOC_DECORATOR_FAILCOUNT( count ); + if ( count > 0 && + iStorage->iClientResponse->MessageElements().UserHeaders().Count() == 0 ) + { + User::Leave( KErrNoMemory ); + } + + EUNIT_ASSERT( iOptionHandler->CapabilitiesResolvedForCingular() == ETrue ); + EUNIT_ASSERT( MultimediaSharingSettings::OperatorVariantSettingL() == + MusSettingsKeys::EOperatorSpecific ); + EUNIT_ASSERT( iOptionHandler->State() == MMusAvaObserver::EMusAvaStatusNotExecuted ); + MUS_HEADER_ASSERT( iStorage->iClientResponse, 0, KCapabilityTestContactHeaderNoFeaturetag_A ); + } + +void UT_CMusAvaCapabilityExchange::UT_CMusAvaCapabilityExchange_CancelQueryL() + { + EUNIT_DISABLE_ALLOC_DECORATOR; + if ( !iProfile->iArray ) + { + iProfile->iArray = new ( ELeave ) CDesC8ArrayFlat( 1 ); + iProfile->iArray->AppendL( _L8("sip:user@domain.com") ); + } + + CMusAvaCapabilityQuery* query = NULL; + + query = CMusAvaCapabilityQuery::NewL( *iCapability, + *iSIPConnection, + *iProfile, + KCapabilityTestSIPAddressUri_B ); + CleanupStack::PushL( query ); + + EUNIT_ASSERT( query->Result() == KCapabilityQueryNotReady ); + EUNIT_ASSERT( query->State() == + CMusAvaCapabilityQueryBase::ECapabilityQueryCreated ); + EUNIT_ASSERT( !query->iTimer ); + EUNIT_ASSERT( !query->iTrx ); + + EUNIT_ASSERT( iExchange->Terminals().Count() == 1 ); + EUNIT_ASSERT( query->Terminal().Id().Length() == 0 ); + EUNIT_ASSERT( !query->Terminal().RequestedQuery() ); + EUNIT_ASSERT( !query->Terminal().IsDiscovered() ); + + query->Terminal().ExecuteQueryL( query ); + CleanupStack::Pop( query ); + + EUNIT_ASSERT( query->Terminal().iQuery == query ); + EUNIT_ASSERT( query->Result() == KCapabilityQueryNotReady ); + EUNIT_ASSERT( query->State() == + CMusAvaCapabilityQueryBase::ECapabilityQueryExecuting ); + EUNIT_ASSERT( !query->iTimer ); + EUNIT_ASSERT( query->iTrx ); + + query->SetState( CMusAvaCapabilityQueryBase::ECapabilityQueryExecuting ); + + //200 OK with User-Agent + CapabilityTestHelper::SetResponseL( *query->iTrx, + KMUSAVASIP200, + SipStrConsts::EPhraseOk, + KCapabilityTestAddress_B, + KCapabilitySwisFeature, + KCapabilityTestTerminalID_B, + KPAssertedIdentity_B, + KCapabilityTestSDP ); + TInt err = 404; + EUNIT_ENABLE_ALLOC_DECORATOR; + iExchange->CancelQuery( err, *query->iTrx ); + EUNIT_ASSERT( query->State() == + CMusAvaCapabilityQueryBase::ECapabilityQueryCompleted ); + } + +void UT_CMusAvaCapabilityExchange::UT_CMusAvaCapabilityExchange_AddCapabilityLL( ) + { + TInt index = KErrNotFound; + CMusAvaCapability* capability = NULL; + + for ( TInt i=0; i < iExchange->iCapabilities.Count() && index == KErrNotFound; i++ ) + { + capability = iExchange->iCapabilities[i]; + if ( capability->Feature() == iCapability->Feature() ) + { + index = i; + } + } + EUNIT_ASSERT( index == 0 ); + } + +void UT_CMusAvaCapabilityExchange::UT_CMusAvaCapabilityExchange_TerminalLL() + { + EUNIT_ASSERT( iExchange->Terminals().Count() == 0 ); + + CSIPServerTransaction* request = NULL; + + for( TInt i = 0;i<6;i++ ) + { + + if ( i == 0 || i == 1 ) + { + + request = + CapabilityTestHelper::OptionsRequestL( KCapabilityTestAddress_A, + KCapabilityTestAddress_B, + KCapabilitySwisFeature, + KCapabilitySwisFeature, + KCapabilityTestAcceptHeader, + KNullDesC8 ); + } + else if ( i == 2 || i == 3 ) + { + request = + CapabilityTestHelper::OptionsRequestL( KCapabilityTestAddress_A, + KCapabilityTestAddress_B, + KCapabilitySwisFeature, + KCapabilitySwisFeature, + KCapabilityTestAcceptHeader, + KCapabilityTestTerminalID_B ); + } + else if ( i == 4 ) + { + request = + CapabilityTestHelper::OptionsRequestL( KCapabilityTestAddress_A, + KCapabilityTestAddress_A,//OK + KCapabilitySwisFeature, + KCapabilitySwisFeature, + KCapabilityTestAcceptHeader, + KNullDesC8 ); + } + else if ( i == 5 ) + { + request = + CapabilityTestHelper::OptionsRequestL( KCapabilityTestAddress_A, + KCapabilityTestAddress_A,//OK + KCapabilitySwisFeature, + KCapabilitySwisFeature, + KCapabilityTestAcceptHeader, + KCapabilityTestTerminalID_A ); + } + + CleanupStack::PushL( request ); + + // Next function call creates a terminal for capability exchage + iExchange->TerminalL( *request ); + + if ( i == 0 ) + { + // Next function has the same uri as the already created terminal has, it should not create the new one + iExchange->TerminalL( KCapabilityTestAddress_B ); + EUNIT_ASSERT( iExchange->Terminals().Count() == 1 ); + EUNIT_ASSERT( iExchange->Terminals()[0]->Id().Compare( KNullDesC8 ) == 0 ); + EUNIT_ASSERT( iExchange->Terminals()[0]->Uri().Compare( KCapabilityTestAddress_B ) == 0 ); + } + else if ( i == 1 ) + { + // Next function has the same uri as the already created terminal has, it should not create the new one + iExchange->TerminalL( KCapabilityTestAddress_B ); + EUNIT_ASSERT( iExchange->Terminals().Count() == 1 ); + EUNIT_ASSERT( iExchange->Terminals()[0]->Id().Compare( KNullDesC8 ) == 0 ); + EUNIT_ASSERT( iExchange->Terminals()[0]->Uri().Compare( KCapabilityTestAddress_B ) == 0 ); + } + else if ( i == 2 ) + { + // Next function has the same uri as the already created terminal has, it should not create the new one + iExchange->TerminalL( KCapabilityTestAddress_B ); + EUNIT_ASSERT( iExchange->Terminals().Count() == 1 ); + EUNIT_ASSERT( iExchange->Terminals()[0]->Id().Compare( KCapabilityTestTerminalID_B ) == 0 ); + EUNIT_ASSERT( iExchange->Terminals()[0]->Uri().Compare( KCapabilityTestAddress_B ) == 0 ); + } + else if ( i == 3 ) + { + // Next function has the same uri as the already created terminal has, it should not create the new one + iExchange->TerminalL( KCapabilityTestAddress_B ); + EUNIT_ASSERT( iExchange->Terminals().Count() == 1 ); + EUNIT_ASSERT( iExchange->Terminals()[0]->Id().Compare( KCapabilityTestTerminalID_B ) == 0 ); + EUNIT_ASSERT( iExchange->Terminals()[0]->Uri().Compare( KCapabilityTestAddress_B ) == 0 ); + } + else if ( i == 4 ) + { + // Next function has the same uri as the already created terminal has, it should not create the new one + iExchange->TerminalL( KCapabilityTestAddress_B ); + EUNIT_ASSERT( iExchange->Terminals().Count() == 2 ); + EUNIT_ASSERT( iExchange->Terminals()[0]->Id().Compare( KCapabilityTestTerminalID_B ) == 0 ); + EUNIT_ASSERT( iExchange->Terminals()[0]->Uri().Compare( KCapabilityTestAddress_B ) == 0 ); + EUNIT_ASSERT( iExchange->Terminals()[1]->Id().Compare( KNullDesC8 ) == 0 ); + EUNIT_ASSERT( iExchange->Terminals()[1]->Uri().Compare( KCapabilityTestAddress_A ) == 0 ); + } + else if ( i == 5 ) + { + // Next function has the same uri as the already created terminal has, it should not create the new one + iExchange->TerminalL( KCapabilityTestAddress_B ); + EUNIT_ASSERT( iExchange->Terminals().Count() == 2 ); + EUNIT_ASSERT( iExchange->Terminals()[0]->Id().Compare( KCapabilityTestTerminalID_B ) == 0 ); + EUNIT_ASSERT( iExchange->Terminals()[0]->Uri().Compare( KCapabilityTestAddress_B ) == 0 ); + EUNIT_ASSERT( iExchange->Terminals()[1]->Id().Compare( KCapabilityTestTerminalID_A ) == 0 ); + EUNIT_ASSERT( iExchange->Terminals()[1]->Uri().Compare( KCapabilityTestAddress_A ) == 0 ); + } + + CleanupStack::PopAndDestroy( request ); + + } + + } + +void UT_CMusAvaCapabilityExchange::UT_CMusAvaCapabilityExchange_RejectQueryLL() + { + EUNIT_DISABLE_ALLOC_DECORATOR; + CSIPServerTransaction* request = NULL; + + iStorage->Clear(); + + request = + CapabilityTestHelper::OptionsRequestL( KCapabilityTestAddress_A, + KCapabilityTestAddress_B, + KCapabilitySwisFeature, + KCapabilitySwisFeature, + KCapabilityTestAcceptHeader, + KNullDesC8 ); + + + CleanupStack::PushL( request ); + EUNIT_ENABLE_ALLOC_DECORATOR; + + iExchange->RejectQueryL( *request, KMUSAVASIPNotImplemented ); + EUNIT_ASSERT( iStorage->iResponseToRequest == SIPStrings::StringF( SipStrConsts::EOptions ) ); + EUNIT_ASSERT( iStorage->iClientResponse->StatusCode() == KMUSAVASIPNotImplemented ); + EUNIT_ASSERT( iStorage->iClientResponse->ReasonPhrase() == SIPStrings::StringF( SipStrConsts::EEmpty ) ); + EUNIT_ASSERT( iStorage->iClientResponse->MessageElements().Content().Length() == 0 ); + + iStorage->Clear(); + + iExchange->RejectQueryL( *request, KErrGeneral ); + EUNIT_ASSERT( iStorage->iResponseToRequest == SIPStrings::StringF( SipStrConsts::EOptions ) ); + EUNIT_ASSERT( iStorage->iClientResponse->StatusCode() == KMUSAVASIPServerInternalError ); + EUNIT_ASSERT( iStorage->iClientResponse->ReasonPhrase() == SIPStrings::StringF( SipStrConsts::EPhraseServerInternalError ) ); + EUNIT_ASSERT( iStorage->iClientResponse->MessageElements().Content().Length() == 0 ); + + CleanupStack::PopAndDestroy( request ); + } + +void UT_CMusAvaCapabilityExchange::UT_CMusAvaCapabilityExchange_FindByFeatureL() + { + EUNIT_ASSERT( iExchange->FindByFeature(*iCapability) == 0 ); + } + +void UT_CMusAvaCapabilityExchange::UT_CMusAvaCapabilityExchange_AnswerToQueryReceivedL( ) + { + if ( !iProfile->iArray ) + { + iProfile->iArray = new ( ELeave ) CDesC8ArrayFlat( 1 ); + iProfile->iArray->AppendL( _L8("sip:user@domain.com") ); + } + + MultimediaSharingSettings::SetOperatorVariantSettingL( + MusSettingsKeys::EStandard ); + + EUNIT_ASSERT( iExchange->Capabilities().Count() == 1 ); + EUNIT_ASSERT( iExchange->Capabilities()[0] == iCapability ); + EUNIT_ASSERT( iCapability->Feature().DesC().Compare( KCapabilitySwisFeature ) == 0 ); + + CMusAvaCapabilityQuery* query = NULL; + + +//init + for( TInt i = 0; i<5;i++ ) + { + query = CMusAvaCapabilityQuery::NewL( *iCapability, + *iSIPConnection, + *iProfile, + KCapabilityTestSIPAddressUri_B ); + CleanupStack::PushL( query ); + + EUNIT_ASSERT( query->Result() == KCapabilityQueryNotReady ); + EUNIT_ASSERT( query->State() == CMusAvaCapabilityQueryBase::ECapabilityQueryCreated ); + EUNIT_ASSERT( !query->iTimer ); + EUNIT_ASSERT( !query->iTrx ); + + EUNIT_ASSERT( iExchange->Terminals().Count() == 1 ); + if ( i == 0 ) + { + EUNIT_ASSERT( query->Terminal().Id().Length() == 0 ); + } + else + { + EUNIT_ASSERT( query->Terminal().Id().Length() > 0 ); + EUNIT_ASSERT( query->Terminal().Id().Compare( KCapabilityTestTerminalID_B ) == 0 ); + } + + EUNIT_ASSERT( !query->Terminal().RequestedQuery() ); + EUNIT_ASSERT( !query->Terminal().IsDiscovered() ); + + // Since several queries cannot be executed, we delete the old one... + delete query->iTerminal->iQuery; + query->iTerminal->iQuery = NULL; + + // ...before execution + query->Terminal().ExecuteQueryL( query ); + CleanupStack::Pop( query ); + + EUNIT_ASSERT( query->Terminal().iQuery == query ); + EUNIT_ASSERT( query->Result() == KCapabilityQueryNotReady ); + EUNIT_ASSERT( query->State() == CMusAvaCapabilityQueryBase::ECapabilityQueryExecuting ); + EUNIT_ASSERT( !query->iTimer ); + EUNIT_ASSERT( query->iTrx ); + + EUNIT_ASSERT( iExchange->Terminals().Count() == 1 ); + if ( i == 0 ) + { + EUNIT_ASSERT( query->Terminal().Id().Length() == 0 ); + } + else + { + EUNIT_ASSERT( query->Terminal().Id().Length() > 0 ); + EUNIT_ASSERT( query->Terminal().Id().Compare( KCapabilityTestTerminalID_B ) == 0 ); + } + + HBufC* uri16 = EscapeUtils::ConvertToUnicodeFromUtf8L( query->Terminal().Uri() ); + EUNIT_ASSERT( uri16->Compare( KCapabilityTestSIPAddressUri_B ) == 0 ); + delete uri16; + uri16 = NULL; + EUNIT_ASSERT( !query->Terminal().RequestedQuery() ); + EUNIT_ASSERT( !query->Terminal().IsDiscovered() ); + + EUNIT_ASSERT( iStorage->iClientRequest->Method() == SIPStrings::StringF( SipStrConsts::EOptions ) ); + EUNIT_ASSERT( iStorage->iClientRequest->MessageElements().Content().Length() > 0 ); + EUNIT_ASSERT( iStorage->iClientRequest->MessageElements().ContentType() ); + EUNIT_ASSERT( iStorage->iClientRequest->MessageElements().UserHeaders().Count() == 6 ); + MUS_HEADER_ASSERT( iStorage->iClientRequest, 0, KCapabilityTestAcceptContactHeader ); + MUS_HEADER_ASSERT( iStorage->iClientRequest, 5, KCapabilityTestContactHeader_A1Updated ); + MUS_HEADER_ASSERT( iStorage->iClientRequest, 3, KCapabilityTestAcceptHeader ); + + //set response + + // GSMA Cingular + if ( i == 0 || i == 3 )//200 OK FT + { + CapabilityTestHelper::SetResponseL( *query->iTrx, KMUSAVASIP200, SipStrConsts::EPhraseOk, + KCapabilityTestAddress_B, + KCapabilitySwisFeature, + KCapabilityTestTerminalID_B, + KPAssertedIdentity_B, + KCapabilityTestSDP ); + } + // GSMA Cingular + else if ( i == 1 || i == 4 )//200 OK NO FT + { + CapabilityTestHelper::SetResponseL( *query->iTrx, KMUSAVASIP200, SipStrConsts::EPhraseOk, + KCapabilityTestAddress_B, + KNullDesC8, + KCapabilityTestTerminalID_B, + KPAssertedIdentity_B, + KCapabilityTestSDP ); + + } + else if ( i == 2 )//GSMA & 404 + { + CapabilityTestHelper::SetResponseL( *query->iTrx, KMUSAVASIPNotFound, SipStrConsts::EPhraseNotFound, + KCapabilityTestAddress_B, + KNullDesC8, + KNullDesC8, + KNullDesC8, + KNullDesC8 ); + + } + + if ( i == 4 ) + { + EUNIT_ASSERT( + MultimediaSharingSettings::OperatorVariantSettingL() == + MusSettingsKeys::EStandard ); + // set cingular variant key on + MultimediaSharingSettings::SetOperatorVariantSettingL( + MusSettingsKeys::EOperatorSpecific ); + EUNIT_ASSERT( MultimediaSharingSettings::OperatorVariantSettingL() + == MusSettingsKeys::EOperatorSpecific ); + } + + //iExchange->iTerminal + iExchange->AnswerToQueryReceived( *query->iTrx ); + TInt count = NULL; + EUNIT_GET_ALLOC_DECORATOR_FAILCOUNT( count ); + if ( count > 0 && + query->Terminal().Id().Length() == 0 ) + { + User::Leave( KErrNoMemory ); + } + if ( count > 0 && + i == 1 && + query->Terminal().iQuery->Result() != KCapabilityCapabilitesNotFound ) + { + User::Leave( KErrNoMemory ); + } + if ( count > 0 && + i == 2 && + !query->Retrying() ) + { + User::Leave( KErrNoMemory ); + } + + EUNIT_ASSERT( iExchange->Terminals().Count() == 1 ); + EUNIT_ASSERT( query->Terminal().Id().Length() > 0 ); + EUNIT_ASSERT( query->Terminal().Id().Compare( KCapabilityTestTerminalID_B ) == 0 ); + uri16 = EscapeUtils::ConvertToUnicodeFromUtf8L( query->Terminal().Uri() ); + delete uri16; + uri16 = NULL; + EUNIT_ASSERT( !query->Terminal().RequestedQuery() ); + + + if ( i == 0 || i == 3 )//200 OK FT + { + EUNIT_ASSERT( + MultimediaSharingSettings::OperatorVariantSettingL() == + MusSettingsKeys::EStandard ); + EUNIT_ASSERT( query->Terminal().iQuery->State() == CMusAvaCapabilityQueryBase::ECapabilityQueryCompleted ); + EUNIT_ASSERT( query->Terminal().IsDiscovered() ); + EUNIT_ASSERT( !query->Retrying() ); + EUNIT_ASSERT( query->iTimer == NULL ); + } + else if ( i == 1 )//GSMA & 200 OK NO FT + { + EUNIT_ASSERT( + MultimediaSharingSettings::OperatorVariantSettingL() == + MusSettingsKeys::EStandard ); + EUNIT_ASSERT( query->Terminal().iQuery == query ); + EUNIT_ASSERT( query->Terminal().iQuery->Result() == KCapabilityCapabilitesNotFound ); + EUNIT_ASSERT( query->Terminal().IsDiscovered() ); + EUNIT_ASSERT( !query->Retrying() ); + EUNIT_ASSERT( query->iTimer == NULL ); + } + else if ( i == 4 )//( not yet Cingular) & 200 OK NO FT + { + EUNIT_ASSERT( MultimediaSharingSettings::OperatorVariantSettingL() + == MusSettingsKeys::EOperatorSpecific ); + MultimediaSharingSettings::SetOperatorVariantSettingL( + MusSettingsKeys::EStandard ); + EUNIT_ASSERT( query->Terminal().iQuery == query ); + EUNIT_ASSERT( query->Terminal().iQuery->Result() == KCapabilityCapabilitesNotFound ); + EUNIT_ASSERT( query->Terminal().IsDiscovered() ); + EUNIT_ASSERT( !query->Retrying() ); + EUNIT_ASSERT( query->iTimer == NULL ); + } + else if ( i == 2 ) //GSMA & 404 + { + EUNIT_ASSERT( + MultimediaSharingSettings::OperatorVariantSettingL() == + MusSettingsKeys::EStandard ); + EUNIT_ASSERT( !query->Terminal().iQuery == NULL ); + EUNIT_ASSERT( !query->Terminal().IsDiscovered() ); + EUNIT_ASSERT( query->Retrying() ); + EUNIT_ASSERT( query->iTimer != NULL ); + + query->OnExpiredL( KErrNone ); + EUNIT_ASSERT( iStorage->iClientRequest->Method() == SIPStrings::StringF( SipStrConsts::EOptions ) ); + EUNIT_ASSERT( iStorage->iClientRequest->MessageElements().Content().Length() > 0 ); + EUNIT_ASSERT( iStorage->iClientRequest->MessageElements().ContentType() ); + EUNIT_ASSERT( iStorage->iClientRequest->MessageElements().UserHeaders().Count() == 6 ); + MUS_HEADER_ASSERT( iStorage->iClientRequest, 0, KCapabilityTestAcceptContactHeader ); + MUS_HEADER_ASSERT( iStorage->iClientRequest, 5, KCapabilityTestContactHeader_A1Updated ); + + CapabilityTestHelper::SetResponseL( *query->iTrx, KMUSAVASIPNotFound, SipStrConsts::EPhraseNotFound, + KCapabilityTestAddress_B, + KNullDesC8, + KNullDesC8, + KNullDesC8, + KNullDesC8 ); + iExchange->AnswerToQueryReceived( *query->iTrx ); + EUNIT_ASSERT( query->Terminal().iQuery == query ); + EUNIT_ASSERT( query->Terminal().iQuery->Result() == KCapabilityCapabilitesNotFound ); + EUNIT_ASSERT( query->Terminal().IsDiscovered() ); + EUNIT_ASSERT( !query->Retrying() ); + EUNIT_ASSERT( query->iTimer == NULL ); + + } + } + MultimediaSharingSettings::SetOperatorVariantSettingL( + MusSettingsKeys::EStandard ); + } + + +// TEST TABLE + +EUNIT_BEGIN_TEST_TABLE( + UT_CMusAvaCapabilityExchange, + "CMusAvaCapabilityExchange", + "UNIT" ) + +EUNIT_TEST( + "NewL - test ", + "CMusAvaCapabilityExchange", + "NewL", + "FUNCTIONALITY", + SetupL,UT_CMusAvaCapabilityExchange_NewLL, Teardown) + +EUNIT_TEST( + "QueryObserverL - test ", + "CMusAvaCapabilityExchange", + "QueryObserver", + "FUNCTIONALITY", + SetupL,UT_CMusAvaCapabilityExchange_QueryObserverL, Teardown) + +EUNIT_TEST( + "TerminalId - test ", + "CMusAvaCapabilityExchange", + "TerminalId", + "FUNCTIONALITY", + SetupL,UT_CMusAvaCapabilityExchange_TerminalIdL, Teardown) + + +EUNIT_TEST( + "QueryReceivedL - test ", + "CMusAvaCapabilityExchange", + "QueryReceivedL", + "FUNCTIONALITY", + SetupL,UT_CMusAvaCapabilityExchange_QueryReceivedL, Teardown) + +EUNIT_TEST( + "QueryReceivedL1 - test ", + "CMusAvaCapabilityExchange", + "QueryReceivedL", + "FUNCTIONALITY", + SetupL,UT_CMusAvaCapabilityExchange_QueryReceived1L, Teardown) + +EUNIT_TEST( + "QueryReceivedL2 - test ", + "CMusAvaCapabilityExchange", + "QueryReceivedL", + "FUNCTIONALITY", + SetupL,UT_CMusAvaCapabilityExchange_QueryReceived2L, Teardown) + +EUNIT_TEST( + "CancelQuery - test ", + "CMusAvaCapabilityExchange", + "CancelQuery", + "FUNCTIONALITY", + SetupL,UT_CMusAvaCapabilityExchange_CancelQueryL, Teardown) + + EUNIT_TEST( + "AddCapability - test ", + "CMusAvaCapabilityExchange", + "AddCapability", + "FUNCTIONALITY", + SetupL,UT_CMusAvaCapabilityExchange_AddCapabilityLL, Teardown) + + EUNIT_TEST( + "TerminalL - test ", + "CMusAvaCapabilityExchange", + "TerminalL", + "FUNCTIONALITY", + SetupL,UT_CMusAvaCapabilityExchange_TerminalLL, Teardown) + + EUNIT_TEST( + "RejectQueryL - test ", + "CMusAvaCapabilityExchange", + "RejectQueryL", + "FUNCTIONALITY", + SetupL,UT_CMusAvaCapabilityExchange_RejectQueryLL, Teardown) + + EUNIT_TEST( + "FindByFeature - test ", + "CMusAvaCapabilityExchange", + "FindByFeature", + "FUNCTIONALITY", + SetupL,UT_CMusAvaCapabilityExchange_FindByFeatureL, Teardown) + + EUNIT_TEST( + "AnswerToQueryReceived - test ", + "CMusAvaCapabilityExchange", + "AnswerToQueryReceived", + "FUNCTIONALITY", + SetupL,UT_CMusAvaCapabilityExchange_AnswerToQueryReceivedL, Teardown) + +EUNIT_END_TEST_TABLE + +// END OF FILE