multimediacommsengine/mmcesrv/mmceserver/tsrc/ut_server/src/UT_CMCESIPManager.cpp
changeset 0 1bce908db942
child 12 91f50911ea81
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommsengine/mmcesrv/mmceserver/tsrc/ut_server/src/UT_CMCESIPManager.cpp	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,627 @@
+/*
+* 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_cmcesipmanager.h"
+
+//  EXTERNAL INCLUDES
+#include <digia/eunit/EUnitMacros.h>
+#include <sipmanagedprofile.h>
+
+
+//  INTERNAL INCLUDES
+#include "MCETestHelper.h"
+
+#include "mceactionset.h"
+#include "mcesipsession.h"
+#include "mceservercore.h"
+#include "mcecssession.h"
+#include "mcecssessionimplementation.h"
+#include "mcesipconnection.h"
+#include "mcecomsession.h"
+
+
+#define MCE_INCOMING_REQUEST_POSTCONDITION \
+	MCE_CHECK_MEMORY_LEAVE( iStorage->iSipSentResponse && \
+	iStorage->iSipSentResponse->StatusCode() == KMceSipServerInternalError )
+
+// CONSTRUCTION
+UT_CMceSipManager* UT_CMceSipManager::NewL()
+    {
+    UT_CMceSipManager* self = UT_CMceSipManager::NewLC(); 
+    CleanupStack::Pop();
+
+    return self;
+    }
+
+UT_CMceSipManager* UT_CMceSipManager::NewLC()
+    {
+    UT_CMceSipManager* self = new( ELeave ) UT_CMceSipManager();
+    CleanupStack::PushL( self );
+
+	self->ConstructL(); 
+
+    return self;
+    }
+
+// Destructor (virtual by CBase)
+UT_CMceSipManager::~UT_CMceSipManager()
+    {
+    }
+
+// Default constructor
+UT_CMceSipManager::UT_CMceSipManager()
+    {
+    }
+
+// Second phase construct
+void UT_CMceSipManager::ConstructL()
+    {
+    // The ConstructL from the base class CEUnitTestSuiteClass must be called.
+    // It generates the test case table.
+    CEUnitTestSuiteClass::ConstructL();
+    }
+
+//  METHODS
+
+
+
+void UT_CMceSipManager::SetupL(  )
+    {
+    CMCETls::OpenL();
+    SdpCodecStringPool::OpenL();
+    
+    iIds.iAppUID = 1;
+    
+    
+    iStorage = CMCETls::Storage();
+    iServerCore = CMceServerCore::NewL();
+    iSession = CMceCsSession::NewL( *iServerCore );
+    iSession->SetClientUidL( iIds, RMessage2() );
+    
+    iManager = &iServerCore->Manager();
+    
+    iManager->ConnectionL( iManager->ProfileL( 1 ) );
+    
+    } 
+
+void UT_CMceSipManager::Teardown(  )
+    {
+    CMCETls::Close();
+   	delete iSession;
+    delete iServerCore;
+
+    SdpCodecStringPool::Close();
+
+    }
+
+
+void UT_CMceSipManager::UT_CMceSipManager_ProfileL_1_L()
+    {
+    TInt error = KErrNone;
+    
+  	CSIPProfile& profile = iManager->ProfileL( 1 );
+  	EUNIT_ASSERT( &profile != NULL );
+  	
+  	TRAP( error, CSIPProfile& profile1 = iManager->ProfileL( 100 ) );
+  	EUNIT_ASSERT( error != KErrNone );
+  	
+  	CSIPProfile& profile1 = iManager->ProfileL( 1 );
+  	EUNIT_ASSERT( &profile1 != NULL );
+  	
+  	TRAP( error, CSIPProfile& profile2 = iManager->ProfileL( 100 ) );
+  	EUNIT_ASSERT( error != KErrNone );
+  	
+    }
+
+
+void UT_CMceSipManager::UT_CMceSipManager_ProfileL_2_L()
+    {
+    TInt error = KErrNone;
+    
+    CSIPAddress* defAor = CSIPAddress::DecodeL( KSIPProfileDefAOR );
+    CleanupStack::PushL( defAor );
+    
+    CSIPAddress* reqUri = CSIPAddress::DecodeL( KRequestUri );
+    CleanupStack::PushL( reqUri );
+    
+    CSIPAddress* forwarded = CSIPAddress::DecodeL( KForwarded );
+    CleanupStack::PushL( forwarded );
+    
+    // Matches with existing profile by to header
+    
+    CSIPProfile& profile1 = iManager->ProfileL( 1, reqUri->Uri8() );
+  	EUNIT_ASSERT( &profile1 != NULL );
+    EUNIT_ASSERT( iManager->iProfiles.Count() == 1 );
+
+    // Matches with existing profile by request uri
+    CSIPProfile& profile2 = iManager->ProfileL( 1, reqUri->Uri8() );
+  	EUNIT_ASSERT( &profile2 != NULL );
+    EUNIT_ASSERT( iManager->iProfiles.Count() == 1 );
+    
+    
+    // Matches with not existing profile by to header
+    iManager->iProfiles.ResetAndDestroy();
+    CSIPProfile& profile3 = iManager->ProfileL( 1, reqUri->Uri8() );
+  	EUNIT_ASSERT( &profile3 != NULL );
+  	EUNIT_ASSERT( iManager->iProfiles.Count() == 1 );
+    
+    // Matches with not existing profile by request uri
+    iManager->iProfiles.ResetAndDestroy();
+    CSIPProfile& profile4 = iManager->ProfileL( 1,  reqUri->Uri8() );
+  	EUNIT_ASSERT( &profile4 != NULL );
+    EUNIT_ASSERT( iManager->iProfiles.Count() == 1 );
+    
+    // Does not match
+    TRAP( error, CSIPProfile& profile5 = iManager->ProfileL( 1, forwarded->Uri8() ) );
+  	EUNIT_ASSERT( error != KErrNone );
+  	
+    CleanupStack::PopAndDestroy( forwarded );
+    CleanupStack::PopAndDestroy( reqUri );
+    CleanupStack::PopAndDestroy( defAor );
+    }
+
+void UT_CMceSipManager::UT_CMceSipManager_ConnectionLL()
+    {
+  	CSIPProfile& profile = iManager->ProfileL( 1 );
+    CMceSipConnection& connection = iManager->ConnectionL( profile );
+  	EUNIT_ASSERT( &connection != NULL );
+    }
+
+void UT_CMceSipManager::UT_CMceSipManager_IncomingRequestL()
+    {
+    
+    CSIPServerTransaction* srvtransaction =
+        MCETestHelper::ServerTransactionL( SipStrConsts::EInvite, ETrue );
+ 
+   	EUNIT_ASSERT( iManager->iClients[0]->Implementation().SubSessions().Count() == 0 );
+
+  	iManager->IncomingRequest( 1, srvtransaction );
+  	MCE_INCOMING_REQUEST_POSTCONDITION
+
+  	iStorage->ExecuteCallback();
+  	MCE_INCOMING_REQUEST_POSTCONDITION
+  	
+   	EUNIT_ASSERT( iManager->iClients[0]->Implementation().SubSessions().Count() == 1 );
+
+    srvtransaction =
+        MCETestHelper::ServerTransactionL( SipStrConsts::EMessage, EFalse );
+ 
+  	iManager->IncomingRequest( 1, srvtransaction );  	
+   	EUNIT_ASSERT( iManager->iClients[0]->Implementation().SubSessions().Count() == 1 );
+   	
+   	
+    srvtransaction = 
+        CSIPServerTransaction::NewL( SIPStrings::StringF( SipStrConsts::EInvite )); 
+    CleanupStack::PushL( srvtransaction );
+    
+  	CUri8* uri = CUri8::NewLC(); //OK 
+    MCE_SET_URIL( uri );
+  	
+    CSIPRequestElements* requestelements = CSIPRequestElements::NewL( uri ); 
+    CleanupStack::Pop( uri );
+    CleanupStack::PushL( requestelements );
+
+    CSIPFromHeader* fromheader = CSIPFromHeader::DecodeL(_L8("User <user2@host>")); 
+    CleanupStack::PushL( fromheader );
+    
+    requestelements->SetFromHeaderL(fromheader); 
+    CleanupStack::Pop( fromheader );
+    
+    requestelements->SetMethodL( SIPStrings::StringF( SipStrConsts::EInvite ) );
+    srvtransaction->SetRequestElements( requestelements );
+    CleanupStack::Pop( requestelements );
+    CleanupStack::Pop( srvtransaction );
+    
+  	iManager->IncomingRequest( 1, srvtransaction );  	
+   	EUNIT_ASSERT( iManager->iClients[0]->Implementation().SubSessions().Count() == 1 );
+    }
+
+void UT_CMceSipManager::UT_CMceSipManager_TimedOutL()
+    {
+    CSIPServerTransaction* trx = NULL;
+    iManager->TimedOut( *trx );
+
+    }
+
+void UT_CMceSipManager::UT_CMceSipManager_ProfileRegistryEventOccurredL()
+    {
+
+    iManager->ProfileRegistryEventOccurred( 1, MSIPProfileRegistryObserver::EProfileUpdated );
+  	
+    }
+
+void UT_CMceSipManager::UT_CMceSipManager_ProfileRegistryErrorOccurredL()
+    {
+    
+    iManager->ProfileRegistryErrorOccurred( 1, KErrServerTerminated );
+  	
+    }
+    
+void UT_CMceSipManager::UT_CMceSipManager_MediaErrorL()
+    {
+    
+    iManager->MediaError( KErrServerTerminated );
+  	
+    }
+
+void UT_CMceSipManager::UT_CMceSipManager_NextDialogIdL()
+    {
+
+    iManager->iNextDialogId = 0;
+  	EUNIT_ASSERT( iManager->NextDialogId() == 1 );
+  	EUNIT_ASSERT( iManager->NextDialogId() == 2 );
+  	EUNIT_ASSERT( iManager->NextDialogId() == 3 );
+  	EUNIT_ASSERT( iManager->NextDialogId() == 4 );
+    
+  	
+    }
+
+
+void UT_CMceSipManager::UT_CMceSipManager_UnRegisterClientL()
+    {
+  	EUNIT_ASSERT( iManager->iClients.Count() == 1 );
+    
+    CMceCsSession* session = CMceCsSession::NewL( *iServerCore );
+    CleanupStack::PushL( session );
+    iIds.iAppUID = 2;
+    session->SetClientUidL( iIds, RMessage2() );
+
+    CMceCsSession* session2 = CMceCsSession::NewL( *iServerCore );
+    CleanupStack::PushL( session2 );
+    iIds.iAppUID = 3;
+    session2->SetClientUidL( iIds, RMessage2() );
+
+
+  	EUNIT_ASSERT( iManager->iClients.Count() == 3 );
+  	
+    CleanupStack::PopAndDestroy( session2 );
+    
+  	EUNIT_ASSERT( iManager->iClients.Count() == 2 );
+  	
+  	session = iManager->iClients[1];
+    iManager->UnRegisterClient( *session );
+  	EUNIT_ASSERT( iManager->iClients.Count() == 1 );
+  	
+    CleanupStack::PopAndDestroy( session );
+    
+  	EUNIT_ASSERT( iManager->iClients.Count() == 1 );
+  	
+  	
+    }
+
+void UT_CMceSipManager::UT_CMceSipManager_CreateSubSessionL_1L()
+    {
+    
+    iIds.iProfileID = 1;
+    iIds.iManagerType = KMceCSSIPSession;
+    iIds.iDialogType = KMceDlgTypeInvite;
+    
+	CDesC8ArrayFlat* params = new (ELeave) CDesC8ArrayFlat( KMceArrayGranularity );
+	CleanupStack::PushL( params );
+	params->AppendL( _L8("User <user2@host>") );
+	params->AppendL( _L8("User <user@host>") );
+    
+    CMceCsSubSession* session = 
+        iManager->CreateSubSessionL( *iSession, iIds, *params );
+    
+    CleanupStack::PopAndDestroy( params );
+    CleanupStack::PushL( session );
+  	EUNIT_ASSERT( session != NULL );
+  	EUNIT_ASSERT( session->Dialog() != NULL );
+  	EUNIT_ASSERT( session->DialogId() > 0 );
+  	EUNIT_ASSERT( &session->SIPConnection() != NULL );
+  	EUNIT_ASSERT( session->SIPConnection().iSessions.Count() == 1 );
+  	
+    CleanupStack::PopAndDestroy( session ); 	
+    }
+
+void UT_CMceSipManager::UT_CMceSipManager_CreateSubSessionL_2L()
+    {
+    iIds.iProfileID = 1;
+    iIds.iManagerType = KMceCSSIPSession;
+    iIds.iDialogType = KMceDlgTypeInvite;
+    
+	CDesC8ArrayFlat* params = new (ELeave) CDesC8ArrayFlat( KMceArrayGranularity );
+	CleanupStack::PushL( params );
+	params->AppendL( _L8("User <user2@host>") );
+	params->AppendL( _L8("User <user@host>") );
+    
+    CMceCsSubSession* session = 
+        iManager->CreateSubSessionL( *iSession, iIds, *params );
+    
+    CleanupStack::PopAndDestroy( params );
+    CleanupStack::PushL( session );
+  	EUNIT_ASSERT( session != NULL );
+  	EUNIT_ASSERT( session->Dialog() != NULL );
+  	EUNIT_ASSERT( session->DialogId() > 0 );
+  	EUNIT_ASSERT( &session->SIPConnection() != NULL );
+  	EUNIT_ASSERT( session->SIPConnection().iSessions.Count() == 1 );
+  	
+    CleanupStack::PopAndDestroy( session ); 	
+    }
+
+void UT_CMceSipManager::UT_CMceSipManager_CreateSubSessionL_3L()
+    {
+    CMceSipConnection& connection = iManager->ConnectionL( iManager->ProfileL( 1 ) );
+
+    CSIPServerTransaction* srvtransaction = 
+        MCETestHelper::ServerTransactionL( SipStrConsts::EInvite, ETrue );
+    CleanupStack::PushL( srvtransaction );    
+    iManager->CreateSubSessionL( srvtransaction, *iSession, connection );
+    CleanupStack::Pop( srvtransaction );
+    }
+
+void UT_CMceSipManager::UT_CMceSipManager_CreateSubSessionNoProfileL()
+    {
+    
+    iIds.iProfileID = 0;
+    iIds.iManagerType = KMceCSSIPSession;
+    iIds.iDialogType = KMceDlgTypeInvite;
+    
+	CDesC8ArrayFlat* params = new (ELeave) CDesC8ArrayFlat( KMceArrayGranularity );
+	CleanupStack::PushL( params );
+	params->AppendL( _L8("User <user2@host>") );
+	params->AppendL( _L8("User <user@host>") );
+	params->AppendL( _L8("6") );
+    
+    CMceCsSubSession* session = 
+        iManager->CreateSubSessionL( *iSession, iIds, *params );
+    
+    CleanupStack::PopAndDestroy( params );
+    CleanupStack::PushL( session );
+  	EUNIT_ASSERT( session != NULL );
+  	EUNIT_ASSERT( session->Dialog() != NULL );
+  	EUNIT_ASSERT( session->DialogId() > 0 );
+  	EUNIT_ASSERT( &session->SIPConnection() != NULL );
+  	EUNIT_ASSERT( session->SIPConnection().iSessions.Count() == 1 );
+  	
+    CleanupStack::PopAndDestroy( session ); 	
+    }
+
+void UT_CMceSipManager::UT_CMceSipManager_UnRegisterSubSessionL()
+    {
+    iIds.iProfileID = 1;
+    iIds.iManagerType = KMceCSSIPSession;
+    iIds.iDialogType = KMceDlgTypeInvite;
+    
+    CMceSipConnection& connection = iManager->ConnectionL( iManager->ProfileL( 1 ) );
+
+    
+	CDesC8ArrayFlat* params = new (ELeave) CDesC8ArrayFlat( KMceArrayGranularity );
+	CleanupStack::PushL( params );
+	params->AppendL( _L8("User <user2@host>") );
+	params->AppendL( _L8("User <user@host>") );
+    TInt i = 0;
+    for( i = 0;i<4;i++ )
+        {
+        CMceCsSubSession* session = 
+            iManager->CreateSubSessionL( *iSession, iIds, *params );
+        CleanupStack::PushL( session );
+      	EUNIT_ASSERT( &session->SIPConnection() == &connection );
+      	EUNIT_ASSERT( connection.iSessions.Count() == 1+i );            
+        }
+        
+    for( i = 0;i<4;i++ )
+        {
+      	EUNIT_ASSERT( connection.iSessions.Count() == 4-i );            
+        CleanupStack::PopAndDestroy();
+        }
+	  //After all CMceCsSubSession have been delete, all profile has been delete
+	  EUNIT_ASSERT( iManager->iProfiles.Count() == 0 );
+    CleanupStack::PopAndDestroy( params );
+  	
+    }
+
+void UT_CMceSipManager::UT_CMceSipManager_UnRegisterSubSessionNoProfileL()
+    {
+    iIds.iProfileID = 0;
+    iIds.iManagerType = KMceCSSIPSession;
+    iIds.iDialogType = KMceDlgTypeInvite;
+    
+    CMceSipConnection& connection = iManager->ConnectionL( 6 );
+
+    
+	CDesC8ArrayFlat* params = new (ELeave) CDesC8ArrayFlat( KMceArrayGranularity );
+	CleanupStack::PushL( params );
+	params->AppendL( _L8("User <user2@host>") );
+	params->AppendL( _L8("User <user@host>") );
+	params->AppendL( _L8("6") );
+    TInt i = 0;
+    for( i = 0;i<4;i++ )
+        {
+        CMceCsSubSession* session = 
+            iManager->CreateSubSessionL( *iSession, iIds, *params );
+        CleanupStack::PushL( session );
+      	EUNIT_ASSERT( &session->SIPConnection() == &connection );
+      	EUNIT_ASSERT( connection.iSessions.Count() == 1+i );            
+        }
+        
+    for( i = 0;i<4;i++ )
+        {
+      	EUNIT_ASSERT( connection.iSessions.Count() == 4-i );            
+        CleanupStack::PopAndDestroy();
+        }
+
+    CleanupStack::PopAndDestroy( params );
+  	
+    }
+
+void UT_CMceSipManager::UT_CMceSipManager_MediaManagerL()
+    {
+  	EUNIT_ASSERT( &iManager->MediaManager() != NULL );
+  	
+    }
+
+void UT_CMceSipManager::UT_CMceSipManager_SIPClientL()
+    {
+  	EUNIT_ASSERT( &iManager->SIPClient() != NULL );
+    }
+
+void UT_CMceSipManager::UT_CMceSipManager_OrphanSubSessionCountL()
+    {
+  	EUNIT_ASSERT( iManager->OrphanSubSessionCount() == 0 );
+    }
+
+
+//  TEST TABLE
+
+EUNIT_BEGIN_TEST_TABLE( 
+    UT_CMceSipManager,
+    "UT_CMceSipManager",
+    "UNIT" )
+
+EUNIT_TEST(
+    "ProfileL - test ",
+    "CMceSipManager",
+    "ProfileL",
+    "FUNCTIONALITY",
+    SetupL, UT_CMceSipManager_ProfileL_1_L, Teardown)
+
+EUNIT_TEST(
+    "ProfileL - test ",
+    "CMceSipManager",
+    "ProfileL",
+    "FUNCTIONALITY",
+    SetupL, UT_CMceSipManager_ProfileL_2_L, Teardown)
+
+EUNIT_TEST(
+    "ConnectionL - test ",
+    "CMceSipManager",
+    "ConnectionL",
+    "FUNCTIONALITY",
+    SetupL, UT_CMceSipManager_ConnectionLL, Teardown)
+
+
+EUNIT_TEST(
+    "IncomingRequest - test ",
+    "CMceSipManager",
+    "IncomingRequest",
+    "FUNCTIONALITY",
+    SetupL, UT_CMceSipManager_IncomingRequestL, Teardown)
+
+EUNIT_TEST(
+    "TimedOut - test ",
+    "CMceSipManager",
+    "TimedOut",
+    "FUNCTIONALITY",
+    SetupL, UT_CMceSipManager_TimedOutL, Teardown)
+
+EUNIT_TEST(
+    "ProfileRegistryEventOccurred - test ",
+    "CMceSipManager",
+    "ProfileRegistryEventOccurred",
+    "FUNCTIONALITY",
+    SetupL, UT_CMceSipManager_ProfileRegistryEventOccurredL, Teardown)
+
+EUNIT_TEST(
+    "ProfileRegistryErrorOccurred - test ",
+    "CMceSipManager",
+    "ProfileRegistryErrorOccurred",
+    "FUNCTIONALITY",
+    SetupL, UT_CMceSipManager_ProfileRegistryErrorOccurredL, Teardown)
+
+EUNIT_TEST(
+    "MediaError - test ",
+    "CMceSipManager",
+    "MediaError",
+    "FUNCTIONALITY",
+    SetupL, UT_CMceSipManager_MediaErrorL, Teardown)
+
+EUNIT_TEST(
+    "NextDialogId - test ",
+    "CMceSipManager",
+    "NextDialogId",
+    "FUNCTIONALITY",
+    SetupL, UT_CMceSipManager_NextDialogIdL, Teardown)
+
+EUNIT_TEST(
+    "UnRegisterClient - test ",
+    "CMceSipManager",
+    "UnRegisterClient",
+    "FUNCTIONALITY",
+    SetupL, UT_CMceSipManager_UnRegisterClientL, Teardown)
+
+EUNIT_TEST(
+    "CreateSubSessionL - MO test ",
+    "CMceSipManager",
+    "CreateSubSessionL",
+    "FUNCTIONALITY",
+    SetupL, UT_CMceSipManager_CreateSubSessionL_1L, Teardown)
+
+EUNIT_TEST(
+    "CreateSubSessionL - MO test ",
+    "CMceSipManager",
+    "CreateSubSessionL",
+    "FUNCTIONALITY",
+    SetupL, UT_CMceSipManager_CreateSubSessionL_2L, Teardown)
+EUNIT_TEST(
+    "CreateSubSessionL - MT test ",
+    "CMceSipManager",
+    "CreateSubSessionL",
+    "FUNCTIONALITY",
+    SetupL, UT_CMceSipManager_CreateSubSessionL_3L, Teardown)
+
+EUNIT_TEST(
+    "CreateSubSessionL - MT test ",
+    "CMceSipManager",
+    "CreateSubSessionL",
+    "FUNCTIONALITY",
+    SetupL, UT_CMceSipManager_CreateSubSessionNoProfileL, Teardown)
+
+EUNIT_TEST(
+    "UnRegisterSubSession - test ",
+    "CMceSipManager",
+    "UnRegisterSubSession",
+    "FUNCTIONALITY",
+    SetupL, UT_CMceSipManager_UnRegisterSubSessionL, Teardown)
+
+EUNIT_TEST(
+    "UnRegisterSubSessionNoProfile - test ",
+    "CMceSipManager",
+    "UnRegisterSubSessionNoProfile",
+    "FUNCTIONALITY",
+    SetupL, UT_CMceSipManager_UnRegisterSubSessionNoProfileL, Teardown)
+
+EUNIT_TEST(
+    "MediaManager - test ",
+    "CMceSipManager",
+    "MediaManager",
+    "FUNCTIONALITY",
+    SetupL, UT_CMceSipManager_MediaManagerL, Teardown)
+
+EUNIT_TEST(
+    "SIPClient - test ",
+    "CMceSipManager",
+    "SIPClient",
+    "FUNCTIONALITY",
+    SetupL, UT_CMceSipManager_SIPClientL, Teardown)
+
+EUNIT_TEST(
+    "OrphanSubSessionCount - test ",
+    "CMceSipManager",
+    "OrphanSubSessionCount",
+    "FUNCTIONALITY",
+    SetupL, UT_CMceSipManager_OrphanSubSessionCountL, Teardown)
+
+
+EUNIT_END_TEST_TABLE
+
+//  END OF FILE