diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaOptionHandler.cpp --- a/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaOptionHandler.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaOptionHandler.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -42,6 +42,7 @@ #include "musavasip.h" #include "CSipSseTestTls.h" #include "musavacapabilitytesthelper.h" +#include "musavasettingsobserverimp.h" // CONSTRUCTION @@ -86,7 +87,9 @@ { iSharedObject = CMusAvaSharedObject::GetSingletonL(); iAvailabilityObserver = CMusAvaAvailabilityObserverImp::NewL(); + iSettingsObserver = CMusAvaSettingsObserverImp::NewL(); iConcreteSettings = CMusAvaSettingsImp::NewL(); + iConcreteSettings->SetObserver( *iSettingsObserver ); iOptionHandler = CMusAvaOptionHandler::NewL( *iAvailabilityObserver, *iConcreteSettings ); @@ -95,6 +98,9 @@ CSIP& sip = iSharedObject->MusAvaSip().Sip(); CSipSseTestTls::OpenL(); iStorage = CSipSseTestTls::Storage(); + iStorage->Set( MusSettingsKeys::KFastStartupMode, + MusSettingsKeys::EFastModeOff ); + iSharedObject->MusAvaSip().CreateProfileL(); iProfile = iSharedObject->MusAvaSip().Profile(); iSharedObject->MusAvaSip().ConnectionL( ); @@ -125,6 +131,9 @@ iStorage = NULL; } delete iOptionHandler; + delete iSettingsObserver; + + PropertyHelper::Close(); } void UT_CMusAvaOptionHandler::UT_CMusAvaOptionHandler_NewLL( ) @@ -322,6 +331,143 @@ } +void UT_CMusAvaOptionHandler::UT_CMusAvaOptionHandler_DoSetStateL() + { + // Set some state which does not cause special handling + iOptionHandler->iFastModeCapable = EFalse; + iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaStatusOptionsSent ); + EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusOptionsSent ); + + // Set special handling state, but fast mode is not enabled + iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaStatusAvailable ); + EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusAvailable ); + EUNIT_ASSERT( !iSettingsObserver->iApplicationStarted ); + + // Set special handling state, fast capable but mode is not enabled + iOptionHandler->iFastModeCapable = ETrue; + iConcreteSettings->SetFastMode( MusSettingsKeys::EFastModeOff ); + iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaStatusAvailable ); + EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusAvailable ); + EUNIT_ASSERT( !iSettingsObserver->iApplicationStarted ); + } + +void UT_CMusAvaOptionHandler::UT_CMusAvaOptionHandler_DoSetStateFastModeL() + { + iOptionHandler->iFastModeCapable = ETrue; + iConcreteSettings->SetFastMode( MusSettingsKeys::EFastModeOn ); + iOptionHandler->iSettings.SetCallDirection( 1 ); + + // State which does not have special handling + iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaFailureCode ); + EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaFailureCode ); + EUNIT_ASSERT( !iOptionHandler->iFastModeAvailabilityDelayed ); + + // OptionsNotSent handling + // + + // MT, not answered + iOptionHandler->iSettings.SetCallDirection( 2 ); + iOptionHandler->iCapabilityQueryAnswered = EFalse; + iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaStatusOptionsNotSent ); + EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusOptionsNotSent ); + EUNIT_ASSERT( !iOptionHandler->iFastModeAvailabilityDelayed ); + + // MT, answered (makes state available delayed) + iOptionHandler->iCapabilityQueryAnswered = ETrue; + iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaStatusOptionsNotSent ); + EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusOptionsNotSent ); + EUNIT_ASSERT( iOptionHandler->iFastModeAvailabilityDelayed ); + + // Available handling + // + + // MO, start app + iOptionHandler->iSettings.SetCallDirection( 1 ); + iSettingsObserver->iApplicationStarted = EFalse; + iOptionHandler->iFastModeAvailabilityDelayed = EFalse; + iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaStatusAvailable ); + EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusAvailable ); + EUNIT_ASSERT( !iOptionHandler->iFastModeAvailabilityDelayed ); + EUNIT_ASSERT( iSettingsObserver->iApplicationStarted ); + + // App already started by going to available state, do not do twice + iSettingsObserver->iApplicationStarted = EFalse; + iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaStatusAvailable ); + EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusAvailable ); + EUNIT_ASSERT( !iOptionHandler->iFastModeAvailabilityDelayed ); + EUNIT_ASSERT( !iSettingsObserver->iApplicationStarted ); + + // MT, delayed availability publishing (state not changed yet) + iOptionHandler->iSettings.SetCallDirection( 2 ); + iOptionHandler->iFastModeAvailabilityDelayed = EFalse; + iSettingsObserver->iApplicationStarted = EFalse; + iOptionHandler->iState = MMusAvaObserver::EMusAvaStatusOptionsNotSent; + iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaStatusAvailable ); + EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusOptionsNotSent ); + EUNIT_ASSERT( iOptionHandler->iFastModeAvailabilityDelayed ); + EUNIT_ASSERT( !iSettingsObserver->iApplicationStarted ); + + // Invite ends availability delaying + iOptionHandler->PrepareForReceivedInviteL(); + EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusAvailable ); + EUNIT_ASSERT( !iOptionHandler->iFastModeAvailabilityDelayed ); + + // No effect if no delay pending + iOptionHandler->iState = MMusAvaObserver::EMusAvaStatusOptionsNotSent; + iOptionHandler->PrepareForReceivedInviteL(); + EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusOptionsNotSent ); + + // OptionNotAvailable handling + // + + // Normal handling when no pending availabilty publishing nor state is + // not already available + iOptionHandler->iFastModeAvailabilityDelayed = EFalse; + iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaOptionNotAvailable ); + EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaOptionNotAvailable ); + + // If already set to available by succesfull answer, sending failure + // does not clear availability + iOptionHandler->iState = MMusAvaObserver::EMusAvaStatusAvailable; + iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaOptionNotAvailable ); + EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusAvailable ); + } + +void UT_CMusAvaOptionHandler::UT_CMusAvaOptionHandler_FastModeResolvedL() + { + iOptionHandler->iFastModeCapable = ETrue; + + // Normal case + iOptionHandler->iSettings.SetFastMode( MusSettingsKeys::EFastModeOff ); + iOptionHandler->FastModeResolved( MusSettingsKeys::EFastModeOn ); + EUNIT_ASSERT( iOptionHandler->iSettings.FastMode() == MusSettingsKeys::EFastModeOn ) + + // MO side fast mode negotiation has failed, value is not set + iOptionHandler->iSettings.SetFastMode( MusSettingsKeys::EFastModeOff ); + iOptionHandler->iSettings.SetCallDirection( 1 ); + iOptionHandler->iState = MMusAvaObserver::EMusAvaOptionNotAvailable; + iOptionHandler->FastModeResolved( MusSettingsKeys::EFastModeOn ); + EUNIT_ASSERT( iOptionHandler->iSettings.FastMode() == MusSettingsKeys::EFastModeOff ) + } + +void UT_CMusAvaOptionHandler::UT_CMusAvaOptionHandler_CapabilityQueryAnsweredL() + { + iOptionHandler->iFastModeCapable = ETrue; + + // If fast mode MO side, no special handling for answer + iOptionHandler->CapabilityQueryAnswered( ETrue ); + EUNIT_ASSERT( iOptionHandler->iCapabilityQueryAnswered ) + EUNIT_ASSERT( !iOptionHandler->iFastModeAvailabilityDelayed ); + + // If fast mode MT side, MT can start waiting for invite already after answering + iOptionHandler->iCapabilityQueryAnswered = EFalse; + iOptionHandler->iSettings.SetFastMode( MusSettingsKeys::EFastModeOn ); + iOptionHandler->iSettings.SetCallDirection( 2 ); + iOptionHandler->CapabilityQueryAnswered( ETrue ); + EUNIT_ASSERT( iOptionHandler->iCapabilityQueryAnswered ) + EUNIT_ASSERT( iOptionHandler->iFastModeAvailabilityDelayed ); + } + // TEST TABLE EUNIT_BEGIN_TEST_TABLE( @@ -396,6 +542,38 @@ SetupL,UT_CMusAvaOptionHandler_VideoCodecsResolvedLL, Teardown) +EUNIT_TEST( + "DoSetState - test ", + "CMusAvaOptionHandler", + "DoSetState", + "FUNCTIONALITY", + SetupL,UT_CMusAvaOptionHandler_DoSetStateL, + Teardown) + +EUNIT_TEST( + "DoSetState - fastmode test ", + "CMusAvaOptionHandler", + "DoSetState", + "FUNCTIONALITY", + SetupL,UT_CMusAvaOptionHandler_DoSetStateFastModeL, + Teardown) + +EUNIT_TEST( + "FastModeResolved - test ", + "CMusAvaOptionHandler", + "FastModeResolved", + "FUNCTIONALITY", + SetupL,UT_CMusAvaOptionHandler_FastModeResolvedL, + Teardown) + +EUNIT_TEST( + "CapabilityQueryAnswered - test ", + "CMusAvaOptionHandler", + "CapabilityQueryAnswered", + "FUNCTIONALITY", + SetupL,UT_CMusAvaOptionHandler_CapabilityQueryAnsweredL, + Teardown) + EUNIT_END_TEST_TABLE // END OF FILE