--- /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 <EscapeUtils.h>
+#include <digia/eunit/eunitmacros.h>
+#include <sipstrings.h>
+#include <sipstrconsts.h>
+#include <stringpool.h>
+#include <sipservertransaction.h>
+#include <siptransactionbase.h>
+#include <digia/eunit/eunitdecorators.h>
+// 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