mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaDefaultOptionHandler.cpp
changeset 22 496ad160a278
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaDefaultOptionHandler.cpp	Fri Jun 11 13:36:18 2010 +0300
@@ -0,0 +1,641 @@
+/*
+* 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_CMusAvaDefaultOptionHandler.h"
+#include "musavaavailabilityobserver.h"
+#include "musavaavailabilityobserverimp.h"
+#include "musavasettingsimp.h"
+#include "musavaobserverimp.h"
+#include "musavadefaultoptionhandler.h"
+#include "musavasettingsobserverimp.h"
+#include "mussettingskeys.h"
+#include "mussettings.h"
+#include "muslogger.h"
+#include "musavacapabilitytesthelper.h"
+#include "CSipSseTestTls.h"
+#include "musavacapabilitycontext.h"
+
+
+
+//  EXTERNAL INCLUDES
+#include <digia/eunit/eunitmacros.h>
+#include <sipstrings.h>
+#include <stringpool.h>
+#include <sipservertransaction.h>
+#include <siptransactionbase.h>
+#include <sipheaderbase.h>
+#include <SipStrConsts.h>
+#include <sipresponseelements.h>
+#include <sipmessageelements.h>
+#include <siprequestelements.h>
+#include <Uri8.h>
+//  INTERNAL INCLUDES
+
+
+_LIT8( KMUSAVATESTSipAddress, "sip:test@10.20.30.40");
+
+// CONSTRUCTION
+UT_CMusAvaDefaultOptionHandler* UT_CMusAvaDefaultOptionHandler::NewL()
+    {
+    UT_CMusAvaDefaultOptionHandler* self = UT_CMusAvaDefaultOptionHandler::NewLC(); 
+    CleanupStack::Pop();
+
+    return self;
+    }
+
+UT_CMusAvaDefaultOptionHandler* UT_CMusAvaDefaultOptionHandler::NewLC()
+    {
+    UT_CMusAvaDefaultOptionHandler* self = new( ELeave ) UT_CMusAvaDefaultOptionHandler();
+    CleanupStack::PushL( self );
+	self->ConstructL(); 
+
+    return self;
+    }
+
+// Destructor (virtual by CBase)
+UT_CMusAvaDefaultOptionHandler::~UT_CMusAvaDefaultOptionHandler()
+    {
+    }
+
+// Default constructor
+UT_CMusAvaDefaultOptionHandler::UT_CMusAvaDefaultOptionHandler()
+    {
+    }
+
+// Second phase construct
+void UT_CMusAvaDefaultOptionHandler::ConstructL()
+    {
+    // The ConstructL from the base class CEUnitTestSuiteClass must be called.
+    // It generates the test case table.
+    CEUnitTestSuiteClass::ConstructL();
+    }
+
+//  METHODS
+
+void UT_CMusAvaDefaultOptionHandler::SetupL(  )
+    {
+    TRAP_IGNORE( SIPStrings::OpenL() )
+    CSipSseTestTls::OpenL();
+    iStorage = CSipSseTestTls::Storage();
+    iStorage->Set( MusSettingsKeys::KFastStartupMode, 
+        MusSettingsKeys::EFastModeOff );
+
+    iStorage->Set( MusSettingsKeys::KFastStartupMode, 
+         MusSettingsKeys::EFastModeOff );
+    MultimediaSharingSettings::SetOperatorVariantSettingL( MusSettingsKeys::EStandard );
+    MultimediaSharingSettings::SetEdgeDtmSupportSettingL( MusSettingsKeys::EDtmModeAllowed );
+    iAvailabilityObserver = CMusAvaAvailabilityObserverImp::NewL();
+    iConcreteSettings = CMusAvaSettingsImp::NewL();
+    iSettingsObserverImp = CMusAvaSettingsObserverImp::NewL();
+    iConcreteSettings->SetObserver( *iSettingsObserverImp );
+    iOptionDefaultHandler = CMusAvaDefaultOptionHandler::NewL( *iAvailabilityObserver,
+                                                 *iConcreteSettings );
+    MultimediaSharingSettings::SetCapabilityQuerySettingL(
+                                                MusSettingsKeys::ENoOptions );
+    } 
+    
+void UT_CMusAvaDefaultOptionHandler::SetupOpSpecificL(  )
+    {
+    TRAP_IGNORE( SIPStrings::OpenL() )
+    CSipSseTestTls::OpenL();
+    iStorage = CSipSseTestTls::Storage();
+    iStorage->Set( MusSettingsKeys::KFastStartupMode, 
+        MusSettingsKeys::EFastModeOff );
+
+    MultimediaSharingSettings::SetOperatorVariantSettingL( MusSettingsKeys::EOperatorSpecific );
+    MultimediaSharingSettings::SetEdgeDtmSupportSettingL( MusSettingsKeys::EDtmModeAllowed );
+    iAvailabilityObserver = CMusAvaAvailabilityObserverImp::NewL();
+    iConcreteSettings = CMusAvaSettingsImp::NewL();
+    iSettingsObserverImp = CMusAvaSettingsObserverImp::NewL();
+    iConcreteSettings->SetObserver( *iSettingsObserverImp );
+    iOptionDefaultHandler = CMusAvaDefaultOptionHandler::NewL( *iAvailabilityObserver,
+                                                 *iConcreteSettings );
+    MultimediaSharingSettings::SetCapabilityQuerySettingL(
+                                                MusSettingsKeys::ENoOptions );
+    }     
+
+void UT_CMusAvaDefaultOptionHandler::Teardown(  )
+    {
+    if ( iStorage )
+	   {
+       iStorage->Clear();
+       CSipSseTestTls::Close();
+       iStorage = NULL;
+       }
+
+    SIPStrings::Close();
+    delete iAvailabilityObserver;
+    delete iConcreteSettings;
+    delete iSettingsObserverImp;
+    delete iOptionDefaultHandler;
+    }
+
+void UT_CMusAvaDefaultOptionHandler::UT_CMusAvaDefaultOptionHandler_NewLL(  )
+    {
+    EUNIT_ASSERT( iOptionDefaultHandler );
+    }
+    
+void UT_CMusAvaDefaultOptionHandler::UT_CMusAvaDefaultOptionHandler_IncomingRequestL()
+    {   
+    MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EAlwaysActive );
+    CSIPServerTransaction* serverTransaction = NULL;
+
+    serverTransaction = CSIPServerTransaction::NewL( SIPStrings::StringF( SipStrConsts::EOptions ) );
+    CleanupStack::PushL( serverTransaction );
+
+    TUriParser8 Uri;
+    User::LeaveIfError( Uri.Parse( KCapabilityTestAddress_A ) );
+    
+  	CUri8* uri = CUri8::NewLC( Uri );
+  	
+    CSIPRequestElements* requestelements = CSIPRequestElements::NewL( uri ); 
+    CleanupStack::Pop( uri );
+    CleanupStack::PushL( requestelements );
+    requestelements->SetMethodL( SIPStrings::StringF( SipStrConsts::EOptions ) );
+    serverTransaction->SetRequestElements( requestelements );
+    CleanupStack::Pop( requestelements );
+
+    TInt ret = iOptionDefaultHandler->IncomingRequest( serverTransaction );
+    if ( ret == KErrNoMemory ) User::Leave( ret );
+    EUNIT_ASSERT( ret == KErrNone );
+    
+    CleanupStack::Pop( serverTransaction ); 
+
+    serverTransaction = CSIPServerTransaction::NewL( SIPStrings::StringF( SipStrConsts::EInvite ) );
+    CleanupStack::PushL( serverTransaction );
+    ret = iOptionDefaultHandler->IncomingRequest( serverTransaction );
+    if ( ret == KErrNoMemory ) User::Leave( ret );
+    EUNIT_ASSERT( ret == KErrNotFound );
+    CleanupStack::PopAndDestroy( serverTransaction ); 
+
+    iSettingsObserverImp->iOptionAllowed = EFalse;
+    iAvailabilityObserver->AvailabilityChanged(
+                            MMusAvaObserver::EMusAvaDefaultOptionHandler,
+                            MMusAvaObserver::EMusAvaStatusAvailable );
+    serverTransaction = CSIPServerTransaction::NewL( SIPStrings::StringF( SipStrConsts::EOptions ) );
+    CleanupStack::PushL( serverTransaction );
+    
+    uri = CUri8::NewLC( Uri );
+  	
+    requestelements = CSIPRequestElements::NewL( uri ); 
+    CleanupStack::Pop( uri );
+    CleanupStack::PushL( requestelements );
+    requestelements->SetMethodL( SIPStrings::StringF( SipStrConsts::EOptions ) );
+    serverTransaction->SetRequestElements( requestelements );
+    CleanupStack::Pop( requestelements );
+
+    ret = iOptionDefaultHandler->IncomingRequest( serverTransaction );
+    if ( ret == KErrNoMemory ) User::Leave( ret );
+    EUNIT_ASSERT( ret == KErrNone );
+    
+    CleanupStack::Pop( serverTransaction );     
+
+    //IAP Request
+    iAvailabilityObserver->AvailabilityChanged(
+                            MMusAvaObserver::EMusAvaDefaultOptionHandler,
+                            MMusAvaObserver::EMusAvaStatusNotExecuted );    
+    serverTransaction = CSIPServerTransaction::NewL( SIPStrings::StringF( SipStrConsts::EOptions ) );
+    CleanupStack::PushL( serverTransaction );
+    
+    uri = CUri8::NewLC( Uri );
+  	
+    requestelements = CSIPRequestElements::NewL( uri ); 
+    CleanupStack::Pop( uri );
+    CleanupStack::PushL( requestelements );
+    requestelements->SetMethodL( SIPStrings::StringF( SipStrConsts::EOptions ) );
+    serverTransaction->SetRequestElements( requestelements );
+    CleanupStack::Pop( requestelements );
+
+    ret = iOptionDefaultHandler->IncomingRequest( 1, serverTransaction );
+    if ( ret == KErrNoMemory ) User::Leave( ret );
+    EUNIT_ASSERT( ret == KErrNone );
+    
+    CleanupStack::Pop( serverTransaction ); 
+                
+    serverTransaction = CSIPServerTransaction::NewL( SIPStrings::StringF( SipStrConsts::EInvite ) );
+    CleanupStack::PushL( serverTransaction );
+    ret = iOptionDefaultHandler->IncomingRequest( 1, serverTransaction );
+    if ( ret == KErrNoMemory ) User::Leave( ret );
+    EUNIT_ASSERT( ret == KErrNotFound );
+    CleanupStack::PopAndDestroy( serverTransaction );
+    
+    iSettingsObserverImp->iOptionAllowed = EFalse;
+    iAvailabilityObserver->AvailabilityChanged(
+                            MMusAvaObserver::EMusAvaOptionHandler,
+                            MMusAvaObserver::EMusAvaStatusAvailable );    
+    serverTransaction = CSIPServerTransaction::NewL( SIPStrings::StringF( SipStrConsts::EOptions ) );
+    CleanupStack::PushL( serverTransaction );
+    uri = CUri8::NewLC( Uri );
+  	
+    requestelements = CSIPRequestElements::NewL( uri ); 
+    CleanupStack::Pop( uri );
+    CleanupStack::PushL( requestelements );
+    requestelements->SetMethodL( SIPStrings::StringF( SipStrConsts::EOptions ) );
+    serverTransaction->SetRequestElements( requestelements );
+    CleanupStack::Pop( requestelements );
+    ret = iOptionDefaultHandler->IncomingRequest( 1, serverTransaction );
+    if ( ret == KErrNoMemory ) User::Leave( ret );
+    EUNIT_ASSERT( ret == KErrNotFound );
+    CleanupStack::PopAndDestroy( serverTransaction );     
+    }
+    
+void UT_CMusAvaDefaultOptionHandler::UT_CMusAvaDefaultOptionHandler_DoExecuteLL()
+    {   
+    TRAPD( error, iOptionDefaultHandler->DoExecuteL() );
+    if ( error == KErrNoMemory ) User::Leave( error );
+    EUNIT_ASSERT( error == KErrNone );
+    EUNIT_ASSERT( iOptionDefaultHandler->State() ==  MMusAvaObserver::EMusAvaStatusAvailable ); 
+    }
+
+void UT_CMusAvaDefaultOptionHandler::UT_CMusAvaDefaultOptionHandler_NameL()
+    {
+     EUNIT_ASSERT( iOptionDefaultHandler->Name() == MMusAvaObserver::EMusAvaDefaultOptionHandler );
+    }
+
+void UT_CMusAvaDefaultOptionHandler::UT_CMusAvaDefaultOptionHandler_StatusL()
+    {
+    EUNIT_ASSERT( iOptionDefaultHandler->State() == MMusAvaObserver::EMusAvaStatusAvailable );
+    }
+
+void UT_CMusAvaDefaultOptionHandler::UT_CMusAvaDefaultOptionHandler_StopL()
+    {
+    iOptionDefaultHandler->Stop();
+    }
+
+void UT_CMusAvaDefaultOptionHandler::UT_CMusAvaDefaultOptionHandler_IncomingOptionRequestLL()
+    {
+    CSIPServerTransaction* serverTransaction = 
+        CSIPServerTransaction::NewL( SIPStrings::StringF( SipStrConsts::EOptions ) );
+    CleanupStack::PushL( serverTransaction );
+
+    TUriParser8 Uri;
+    User::LeaveIfError( Uri.Parse( KCapabilityTestAddress_A ) );
+    
+  	CUri8* uri = CUri8::NewLC( Uri );
+  	
+    CSIPRequestElements* requestelements = CSIPRequestElements::NewL( uri ); 
+    CleanupStack::Pop( uri );
+    CleanupStack::PushL( requestelements );
+    requestelements->SetMethodL( SIPStrings::StringF( SipStrConsts::EOptions ) );
+    serverTransaction->SetRequestElements( requestelements );
+    CleanupStack::Pop( requestelements );
+
+    MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EAlwaysActive );
+    TRAPD( ret, iOptionDefaultHandler->IncomingOptionRequestL( serverTransaction ) );
+    if ( ret == KErrNoMemory ) User::Leave( ret );
+    EUNIT_ASSERT( ret == KErrNone );
+    
+    TUint statusCode = iStorage->iClientResponse->StatusCode();
+    EUNIT_ASSERT( statusCode == KMUSAVASIPTemporarilyUnavailable );
+    
+    iSettingsObserverImp->iOptionAllowed = ETrue;
+    iAvailabilityObserver->AvailabilityChanged(
+                            MMusAvaObserver::EMusAvaDefaultOptionHandler,
+                            MMusAvaObserver::EMusAvaStatusAvailable );
+    TRAP( ret, iOptionDefaultHandler->IncomingOptionRequestL( serverTransaction ) );
+    if ( ret == KErrNoMemory ) User::Leave( ret );
+    EUNIT_ASSERT( ret == KErrNone );
+    
+    iSettingsObserverImp->iOptionAllowed = EFalse;
+    MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EActiveInHomeNetworks );
+    TRAP( ret, iOptionDefaultHandler->IncomingOptionRequestL( serverTransaction ) );
+    if ( ret == KErrNoMemory ) User::Leave( ret );
+    EUNIT_ASSERT( ret == KErrNone );
+    
+    MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::ENever );
+    TRAP( ret, iOptionDefaultHandler->IncomingOptionRequestL( serverTransaction ) );
+    if ( ret == KErrNoMemory ) User::Leave( ret );
+    EUNIT_ASSERT( ret == KErrNone );
+    statusCode = iStorage->iClientResponse->StatusCode();
+    EUNIT_ASSERT( statusCode == KMUSAVASIPDecline );
+    
+    CleanupStack::PopAndDestroy( serverTransaction );
+    }
+    
+void UT_CMusAvaDefaultOptionHandler::UT_CMusAvaDefaultOptionHandler_IncomingOptionRequestLOpSpecificL()    
+    {
+    CSIPServerTransaction* serverTransaction = 
+        CSIPServerTransaction::NewL( SIPStrings::StringF( SipStrConsts::EOptions ) );
+    CleanupStack::PushL( serverTransaction );    
+    TUriParser8 Uri;
+    User::LeaveIfError( Uri.Parse( KCapabilityTestAddress_A ) );
+    CUri8* uri = CUri8::NewLC( Uri );
+  	CSIPRequestElements* requestelements = CSIPRequestElements::NewL( uri ); 
+    CleanupStack::Pop( uri );
+    CleanupStack::PushL( requestelements );
+    requestelements->SetMethodL( SIPStrings::StringF( SipStrConsts::EOptions ) );
+    serverTransaction->SetRequestElements( requestelements );
+    CleanupStack::Pop( requestelements );
+
+    TRAPD( ret, iOptionDefaultHandler->IncomingOptionRequestL( serverTransaction ) );
+    if ( ret == KErrNoMemory ) User::Leave( ret );
+    EUNIT_ASSERT( ret == KErrNone );
+    TUint statusCode = iStorage->iClientResponse->StatusCode();
+    EUNIT_ASSERT( statusCode == KMUSAVASIP200 );
+
+    CleanupStack::PopAndDestroy( serverTransaction );    
+    
+    }
+
+void UT_CMusAvaDefaultOptionHandler::UT_CMusAvaDefaultOptionHandler_ResponseLL()
+    {
+    TInt statusCode = KMUSAVASIPDecline;
+    RStringF reasonPhrase =
+        SIPStrings::StringF( SipStrConsts::EPhraseDecline);
+    CSIPResponseElements* respElem =
+        CSIPResponseElements::NewL( statusCode, reasonPhrase );
+    CleanupStack::PushL( respElem );
+    
+    CSIPServerTransaction* serverTransaction = 
+        CSIPServerTransaction::NewL( SIPStrings::StringF( SipStrConsts::EOptions ) );
+    CleanupStack::PushL( serverTransaction );    
+    
+    TUriParser8 Uri;
+    User::LeaveIfError( Uri.Parse( KCapabilityTestAddress_A ) );
+    
+  	CUri8* uri = CUri8::NewLC( Uri );
+  	
+    CSIPRequestElements* requestelements = CSIPRequestElements::NewL( uri ); 
+    CleanupStack::Pop( uri );
+    CleanupStack::PushL( requestelements );
+    requestelements->SetMethodL( SIPStrings::StringF( SipStrConsts::EOptions ) );
+    serverTransaction->SetRequestElements( requestelements );
+    CleanupStack::Pop( requestelements );
+    
+    //This transaction is not client TR 
+    serverTransaction->iIsClientTransaction = ETrue;
+    serverTransaction->iState = CSIPTransactionBase::ETerminated; 
+    TRAPD( error, iOptionDefaultHandler->ResponseL( respElem, serverTransaction ) );
+    if ( error == KErrNoMemory ) User::Leave( error );
+    EUNIT_ASSERT( error == KErrNotReady );
+    
+    // Transaction state proceeding
+    serverTransaction->ChangeState( CSIPTransactionBase::EProceeding );
+    TRAP( error, iOptionDefaultHandler->ResponseL( respElem, serverTransaction ) );
+    if ( error == KErrNoMemory ) User::Leave( error );
+    EUNIT_ASSERT( error == KErrNone );
+        
+    CleanupStack::PopAndDestroy( serverTransaction );     
+    CleanupStack::Pop( respElem );   
+   
+     //Sent response
+    serverTransaction = 
+        CSIPServerTransaction::NewL( SIPStrings::StringF( SipStrConsts::EOptions ) );
+    CleanupStack::PushL( serverTransaction );         
+    respElem =
+        CSIPResponseElements::NewL( statusCode, reasonPhrase );
+    CleanupStack::PushL( respElem );
+    
+    uri = CUri8::NewLC( Uri );
+    requestelements = CSIPRequestElements::NewL( uri ); 
+    CleanupStack::Pop( uri );
+    CleanupStack::PushL( requestelements );
+    requestelements->SetMethodL( SIPStrings::StringF( SipStrConsts::EOptions ) );
+    serverTransaction->SetRequestElements( requestelements );
+    CleanupStack::Pop( requestelements );
+
+    serverTransaction->iIsClientTransaction = ETrue;
+    serverTransaction->iState = CSIPTransactionBase::ETrying; 
+    iOptionDefaultHandler->ResponseL( respElem, serverTransaction );
+    CleanupStack::Pop( respElem );
+    statusCode = iStorage->iClientResponse->StatusCode();
+    EUNIT_ASSERT( statusCode == KMUSAVASIPDecline );
+           
+    CleanupStack::PopAndDestroy( serverTransaction );  
+    serverTransaction = NULL;
+    
+    // response not allowed
+    serverTransaction = 
+        CSIPServerTransaction::NewL( SIPStrings::StringF( SipStrConsts::EAck ) );
+    CleanupStack::PushL( serverTransaction );      
+    respElem =
+        CSIPResponseElements::NewL( statusCode, reasonPhrase );
+    CleanupStack::PushL( respElem );
+    
+    TRAP( error, iOptionDefaultHandler->ResponseL( respElem, serverTransaction ) );
+    if ( error == KErrNoMemory ) User::Leave( error );
+    CleanupStack::PopAndDestroy( respElem );
+    EUNIT_ASSERT( error == KErrNotReady );
+        
+    CleanupStack::PopAndDestroy( serverTransaction );                
+    }
+
+void UT_CMusAvaDefaultOptionHandler::UT_CMusAvaDefaultOptionHandler_NoCapabilityResponseLL()
+    {
+    CSIPServerTransaction* serverTransaction = 
+        CSIPServerTransaction::NewL( SIPStrings::StringF( SipStrConsts::EOptions ) );
+    CleanupStack::PushL( serverTransaction );
+
+    TUriParser8 Uri;
+    User::LeaveIfError( Uri.Parse( KCapabilityTestAddress_A ) );
+    
+  	CUri8* uri = CUri8::NewLC( Uri );
+  	
+    CSIPRequestElements* requestelements = CSIPRequestElements::NewL( uri ); 
+    CleanupStack::Pop( uri );
+    CleanupStack::PushL( requestelements );
+    requestelements->SetMethodL( SIPStrings::StringF( SipStrConsts::EOptions ) );
+    serverTransaction->SetRequestElements( requestelements );
+    CleanupStack::Pop( requestelements );
+
+    serverTransaction->iIsClientTransaction = ETrue;
+    serverTransaction->iState = CSIPTransactionBase::ETrying; 
+    iSettingsObserverImp->iOptionAllowed = ETrue;
+    iOptionDefaultHandler->NoCapabilityResponseL( serverTransaction,
+                                                  KMUSAVASIPTemporarilyUnavailable, 
+                                                  SipStrConsts::EPhraseTemporarilyNotAvailable );
+    TUint statusCode = iStorage->iClientResponse->StatusCode();
+    EUNIT_ASSERT( statusCode == KMUSAVASIPTemporarilyUnavailable );
+    
+    CleanupStack::PopAndDestroy( serverTransaction );
+    }
+    
+void UT_CMusAvaDefaultOptionHandler::UT_CMusAvaDefaultOptionHandler_NoCapabilityResponseLOpSpecificL() 
+    {
+    CSIPServerTransaction* serverTransaction = 
+        CSIPServerTransaction::NewL( SIPStrings::StringF( SipStrConsts::EOptions ) );
+    CleanupStack::PushL( serverTransaction );  
+    
+    TUriParser8 Uri;
+    User::LeaveIfError( Uri.Parse( KCapabilityTestAddress_A ) );
+    
+  	CUri8* uri = CUri8::NewLC( Uri );
+  	
+    CSIPRequestElements* requestelements = CSIPRequestElements::NewL( uri ); 
+    CleanupStack::Pop( uri );
+    CleanupStack::PushL( requestelements );
+    requestelements->SetMethodL( SIPStrings::StringF( SipStrConsts::EOptions ) );
+    serverTransaction->SetRequestElements( requestelements );
+    CleanupStack::Pop( requestelements );    
+    
+    serverTransaction->iIsClientTransaction = ETrue;
+    serverTransaction->iState = CSIPTransactionBase::ETrying; 
+    iSettingsObserverImp->iOptionAllowed = ETrue;
+    iOptionDefaultHandler->NoCapabilityResponseL( serverTransaction, 
+                                                  KMUSAVASIPTemporarilyUnavailable, 
+                                                  SipStrConsts::EPhraseTemporarilyNotAvailable );
+    TUint statusCode = iStorage->iClientResponse->StatusCode();
+    EUNIT_ASSERT( statusCode == KMUSAVASIP200 );
+          
+    CleanupStack::PopAndDestroy( serverTransaction );   
+    }
+
+void UT_CMusAvaDefaultOptionHandler::UT_CMusAvaDefaultOptionHandler_CreateResponseLL()
+    {
+    CSIPServerTransaction* serverTransaction = 
+        CSIPServerTransaction::NewL( SIPStrings::StringF( SipStrConsts::EOptions ) );
+    CleanupStack::PushL( serverTransaction );
+    TUriParser8 Uri;
+    User::LeaveIfError( Uri.Parse( KMUSAVATESTSipAddress() ) );
+    
+  	CUri8* uri = CUri8::NewLC( Uri );
+ 	CSIPRequestElements* requestelements = CSIPRequestElements::NewL( uri ); 
+    CleanupStack::Pop( uri );
+    CleanupStack::PushL( requestelements );
+    serverTransaction->SetRequestElements( requestelements );
+   	CleanupStack::Pop( requestelements );
+ 
+    //Sent response
+    serverTransaction->iIsClientTransaction = ETrue;
+    serverTransaction->iState = CSIPTransactionBase::ETrying; 
+    iSettingsObserverImp->iOptionAllowed = ETrue;
+    CSIPResponseElements* resp = 
+        iOptionDefaultHandler->CreateResponseL( *serverTransaction );
+    CleanupStack::PopAndDestroy( serverTransaction );
+    CleanupStack::PushL( resp );
+    EUNIT_ASSERT( resp->MessageElements().Content().Length() > 0);
+    EUNIT_ASSERT( resp->StatusCode() == KMUSAVASIP200 );
+    CleanupStack::PopAndDestroy( resp );
+    }
+    
+    
+void UT_CMusAvaDefaultOptionHandler::UT_CMusAvaDefaultOptionHandler_TimedOutL() 
+    {
+    CSIPServerTransaction* serverTransaction = 
+        CSIPServerTransaction::NewL( SIPStrings::StringF( SipStrConsts::EOptions ) );    
+    EUNIT_ASSERT_EQUALS( 
+            iOptionDefaultHandler->TimedOut( *serverTransaction ), 
+            KErrNotSupported );
+    delete serverTransaction;
+    }
+
+
+//  TEST TABLE
+
+EUNIT_BEGIN_TEST_TABLE( 
+    UT_CMusAvaDefaultOptionHandler,
+    "CMusAvaDefaultOptionHandler",
+    "UNIT" )
+
+EUNIT_TEST(
+    "NewL - test ",
+    "CMusAvaDefaultOptionHandler",
+    "NewL",
+    "FUNCTIONALITY",
+    SetupL,UT_CMusAvaDefaultOptionHandler_NewLL, Teardown)
+    
+EUNIT_TEST(
+    "IncomingRequest - test ",
+    "CMusAvaDefaultOptionHandler",
+    "IncomingRequest",
+    "FUNCTIONALITY",
+    SetupL,UT_CMusAvaDefaultOptionHandler_IncomingRequestL, Teardown)    
+    
+EUNIT_TEST(
+    "DoExecuteL - test ",
+    "CMusAvaDefaultOptionHandler",
+    "DoExecuteL",
+    "FUNCTIONALITY",
+    SetupL,UT_CMusAvaDefaultOptionHandler_DoExecuteLL, Teardown)        
+
+EUNIT_TEST(
+    "Name - test ",
+    "CMusAvaDefaultOptionHandler",
+    "Name",
+    "FUNCTIONALITY",
+    SetupL,UT_CMusAvaDefaultOptionHandler_NameL, Teardown)
+    
+
+EUNIT_TEST(
+    "Status - test ",
+    "CMusAvaDefaultOptionHandler",
+    "Status",
+    "FUNCTIONALITY",
+    SetupL,UT_CMusAvaDefaultOptionHandler_StatusL, Teardown)
+
+EUNIT_TEST(
+    "Stop - test ",
+    "CMusAvaDefaultOptionHandler",
+    "Stop",
+    "FUNCTIONALITY",
+    SetupL,UT_CMusAvaDefaultOptionHandler_StopL, Teardown)   
+
+EUNIT_TEST(
+    "IncomingOptionRequestL - test ",
+    "CMusAvaDefaultOptionHandler",
+    "IncomingOptionRequestL",
+    "FUNCTIONALITY",
+    SetupL,UT_CMusAvaDefaultOptionHandler_IncomingOptionRequestLL, Teardown)   
+    
+EUNIT_TEST(
+    "IncomingOptionRequestL - Op specific test ",
+    "CMusAvaDefaultOptionHandler",
+    "IncomingOptionRequestL",
+    "FUNCTIONALITY",
+    SetupOpSpecificL, UT_CMusAvaDefaultOptionHandler_IncomingOptionRequestLOpSpecificL, Teardown)       
+
+EUNIT_TEST(
+    "ResponseL - test ",
+    "CMusAvaDefaultOptionHandler",
+    "ResponseL",
+    "FUNCTIONALITY",
+    SetupL,UT_CMusAvaDefaultOptionHandler_ResponseLL, Teardown)   
+
+EUNIT_TEST(
+    "NoCapabilityResponseL - test ",
+    "CMusAvaDefaultOptionHandler",
+    "NoCapabilityResponseL",
+    "FUNCTIONALITY",
+    SetupL,UT_CMusAvaDefaultOptionHandler_NoCapabilityResponseLL, Teardown)
+    
+EUNIT_TEST(
+    "NoCapabilityResponseL Op specific- test ",
+    "CMusAvaDefaultOptionHandler",
+    "NoCapabilityResponseL",
+    "FUNCTIONALITY",
+    SetupOpSpecificL,UT_CMusAvaDefaultOptionHandler_NoCapabilityResponseLOpSpecificL, Teardown)    
+    
+EUNIT_TEST(
+    "CreateResponseL - test ",
+    "CMusAvaDefaultOptionHandler",
+    "CreateResponseL",
+    "FUNCTIONALITY",
+    SetupL,UT_CMusAvaDefaultOptionHandler_CreateResponseLL, Teardown)    
+    
+EUNIT_TEST(
+    "TimedOut - test ",
+    "CMusAvaDefaultOptionHandler",
+    "TimedOut",
+    "FUNCTIONALITY",
+    SetupL,UT_CMusAvaDefaultOptionHandler_TimedOutL, Teardown)        
+    
+          
+EUNIT_END_TEST_TABLE
+
+//  END OF FILE