--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ximpfw/tsrc/src/t_presenceall/t_presenceall.cpp Wed Nov 03 09:32:20 2010 +0530
@@ -0,0 +1,1001 @@
+/*
+* Copyright (c) 2006 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: XIMP Framework Test Code
+*
+*/
+
+
+#include "eunittools.h"
+
+
+#include <platform/digia/eunit/eunitmacros.h>
+#include <platform/digia/eunit/teunitassertioninfo.h>
+#include <ecom/ecom.h>
+#include <badesca.h>
+
+#include <ximpbase.h>
+#include <ximpclient.h>
+#include <ximpcontext.h>
+#include <ximpcontextstateevent.h>
+#include <ximprequestcompleteevent.h>
+#include <ximpstatus.h>
+#include <presencefeatures.h>
+#include <presencewatching.h>
+#include <presencepublishing.h>
+#include <presentitypresenceevent.h>
+#include <ximpobjectfactory.h>
+
+#include <presentitygroups.h>
+#include <presentitygroupinfo.h>
+#include <presentitygrouplistevent.h>
+
+
+#include <presentitygroups.h>
+#include <presentitygroupmemberinfo.h>
+#include <presentitygroupcontentevent.h>
+
+#include <presenceauthorization.h>
+#include <presenceblocklistevent.h>
+#include <presenceblockinfo.h>
+
+#include "t_presenceall.h"
+#include "prfwteststatuseventlistener.h"
+#include "prfwtestmessaging.h"
+#include "prfwtestmessenger.h"
+#include "prfwtestcontextwrappermgr.h"
+#include "prfwtestcontextwrapper.h"
+
+#include "presenceinfoimp.h"
+#include "presenceinfofilterimp.h"
+#include "prfwtestpresencedatautils.h"
+#include "ximpidentityimp.h"
+#include "presentitygroupmemberinfoimp.h"
+#include "ximpobjecthelpers.h"
+#include "prfwtestfilesrvmsg.h"
+#include "prfwtestwaithelper.h"
+#include "prfwtestlistener.h"
+
+
+#include "presentitygroupcontenteventimp.h"
+#include "ximprequestcompleteeventimp.h"
+#include "presentitygroupinfoimp.h"
+#include "presentitygrouplisteventimp.h"
+#include "presentitygroupmemberinfoimp.h"
+#include "ximprequestcompleteeventimp.h"
+#include "ximprestrictedobjectcollection.h"
+#include "ximpobjectfactoryimp.h"
+
+#include "prfwtesteventfactory.h"
+
+#include "prfwtestpresencedatautils.h"
+
+#include "ximpobjecthelpers.h"
+#include "presentitygroupinfoimp.h"
+#include "presentitygrouplisteventimp.h"
+#include "presentitygroupcontenteventimp.h"
+
+#include "prfwtestfiletool.h"
+
+
+#include "prfwtestrobustnesstools.h"
+
+_LIT8( KPrefix1, "PreA_" );
+_LIT8( KPrefix2, "PreB_" );
+_LIT8( KPrefix3, "PreC_" );
+_LIT8( KPrefix4, "PreD_" );
+
+_LIT( KPrefix5, "PreXX_" );
+_LIT( KPrefix6, "PreYY_" );
+
+_LIT( KIdentity, "TestId@hello.world" );
+
+
+_LIT( KMemberId1, "tel:user1@foo.bar" );
+_LIT( KMemberDisplayName1, "user1" );
+
+_LIT( KMemberId2, "tel:user2@foo.bar" );
+_LIT( KMemberDisplayName2, "user2" );
+
+_LIT( KGroupId, "PrsDemoGrp" );
+_LIT( KGroupDisplayName, "demo group" );
+
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// CONSTRUCTION
+T_PresenceAll* T_PresenceAll::NewL()
+ {
+ T_PresenceAll* self = new( ELeave ) T_PresenceAll;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+
+T_PresenceAll::~T_PresenceAll()
+ {
+ }
+
+
+void T_PresenceAll::ConstructL()
+ {
+ CEUnitTestSuiteClass::ConstructL();
+ }
+
+
+T_PresenceAll::T_PresenceAll()
+ {
+ }
+
+
+
+// ===========================================================================
+// TEST CASE SETUP & TEARDOWN METHODS
+// ===========================================================================
+//
+
+void T_PresenceAll::Setup_L()
+ {
+ __UHEAP_MARK;
+ PrfwTestRobustness::DoPreCleaning();
+
+ iWrapperMgr = CXIMPTestContextWrapperMgr::NewL();
+ iWrapperMgr->CreateWrapperL();
+ }
+
+void T_PresenceAll::SetupMultiple_L()
+ {
+ PrfwTestRobustness::DoPreCleaning();
+
+ iWrapperMgr = CXIMPTestContextWrapperMgr::NewL();
+ iWrapperMgr->CreateWrapperL();
+ iWrapperMgr->CreateWrapperL();
+ iWrapperMgr->CreateWrapperL();
+ }
+
+
+void T_PresenceAll::BindL()
+ {
+ CXIMPTestContextWrapper* wrapper0 = iWrapperMgr->GetWrapperL( 0 );
+
+ wrapper0->BindL( 0 );
+ }
+
+void T_PresenceAll::BindAllL()
+ {
+ for( TInt a = 0; a < iWrapperMgr->WrapperCount(); ++a )
+ {
+ CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( a );
+ wrapper->BindL( 0 );
+ }
+ }
+
+
+void T_PresenceAll::Teardown()
+ {
+ delete iWrapperMgr;
+ iWrapperMgr = NULL;
+
+ REComSession::FinalClose();
+
+ PrfwTestRobustness::DoPreCleaning();
+ User::SetJustInTime( ETrue );
+ __UHEAP_MARKEND;
+ }
+
+void T_PresenceAll::UnbindL()
+ {
+ // Do unbind
+ CXIMPTestContextWrapper* wrapper0 = iWrapperMgr->GetWrapperL( 0 );
+ wrapper0->UnbindL();
+ }
+
+void T_PresenceAll::UnbindAllL()
+ {
+ for( TInt a = 0; a < iWrapperMgr->WrapperCount(); ++a )
+ {
+ CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( a );
+ wrapper->UnbindL();
+ }
+ }
+
+
+// ===========================================================================
+// TEST CASES for presentity presence subscription
+// ===========================================================================
+
+// Jani
+void T_PresenceAll::T_TMO_demo_Startup_L()
+ {
+ EUNIT_PRINT( _L("T_TMO_demo_Startup_L") );
+
+ BindL();
+
+ CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( 0 );
+ MXIMPContext* context = wrapper->GetContext();
+ CXIMPTestMessenger* messenger = wrapper->GetMessenger();
+
+ // Tell the protocol it should act normally
+ messenger->SetNoError();
+
+
+ // Get the interfaces
+ MPresenceFeatures* presFeat = wrapper->GetPresenceFeatures();
+ MPresencePublishing& presPub = presFeat->PresencePublishing();
+ MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+ MPresentityGroups& presGroup = presFeat->PresentityGroups();
+ MPresenceWatching& presWatch = presFeat->PresenceWatching();
+
+
+
+ //////////////////////////////////////////////////////////////////////////
+ // SUBSCRIBE OWN PRESENCE
+ //////////////////////////////////////////////////////////////////////////
+
+ // Create own presence info filter
+ CPresenceInfoFilterImp* ownPif = CPresenceInfoFilterImp::NewLC(); // << ownPif
+ ownPif->AcceptPersonFilterL( NPresenceInfo::NFieldType::KAcceptAll );
+ //ownPif->AcceptPersonFilterL( NPresenceInfo::NFieldType::KStatusMessage );
+ //ownPif->AcceptPersonFilterL( NPresenceInfo::NFieldType::KAvatar );
+
+ // Setup status event listener for RequestComplete
+ SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+ // subscribe own presence
+ TXIMPRequestId reqId = presPub.SubscribeOwnPresenceL( *ownPif );
+
+ // Wait for events on the request
+ wrapper->WaitRequestAndStackEvents( reqId );
+ wrapper->VerifyEventStackL( _L8("Subscribing own presence, complete with error: ") );
+
+ // verify that SubscribeOwnPresenceL was called
+ COMMONASSERT( messenger, EXIMPPlgTestSubscribeOwnPresenceCalled, "SubscribeOwnPresenceL was not called", ETrue, NULL );
+
+ //////////////////////////////////////////////////////////////////////////
+ // SUBSCRIBE PRESENCE WATCHER LIST
+ //////////////////////////////////////////////////////////////////////////
+
+ // Setup status event listener for RequestComplete
+ SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+ // subscribe
+ reqId = presPub.SubscribePresenceWatcherListL();
+
+ // Wait for events on the request
+ wrapper->WaitRequestAndStackEvents( reqId );
+ wrapper->VerifyEventStackL( _L8("Subscribing presence watcher list, complete with error: ") );
+
+ COMMONASSERT( messenger, EXIMPPlgTestSubscribePresenceWatcherListCalled, "SubscribeWatcherListL was not called", ETrue, NULL );
+
+
+ //////////////////////////////////////////////////////////////////////////
+ // SUBSCRIBE PRESENCE BLOCK LIST
+ //////////////////////////////////////////////////////////////////////////
+
+ // Setup status event listener for RequestComplete
+ SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+ // subscribe
+ reqId = presAuth.SubscribePresenceBlockListL();
+
+ // Wait for events on the request
+ wrapper->WaitRequestAndStackEvents( reqId );
+ wrapper->VerifyEventStackL( _L8("Subscribing presence watcher list, complete with error: ") );
+
+ // verify that SubscribeBlockListL was called
+ COMMONASSERT( messenger, EXIMPPlgTestSubscribePresenceBlockListCalled, "SubscribeBlockListL was not called", ETrue, NULL );
+
+
+
+ //////////////////////////////////////////////////////////////////////////
+ // SUBSCRIBE PRESENTITY GROUP LIST
+ //////////////////////////////////////////////////////////////////////////
+
+ // Setup status event listener for RequestComplete
+ SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+ // subscribe
+ reqId = presGroup.SubscribePresentityGroupListL();
+
+ // Wait for events on the request
+ wrapper->WaitRequestAndStackEvents( reqId );
+ wrapper->VerifyEventStackL( _L8("Subscribing presentity group list, complete with error: ") );
+
+ // verify that SubscribePresentityGroupListL was called
+ messenger->AssertSubscribePresentityGroupListCalled( ETrue );
+
+
+ //////////////////////////////////////////////////////////////////////////
+ // EMPTY GROUP LIST EVENT
+ /////////////////////////////////////////////////////////////////////////
+ // According to design, this should not be called
+ // because the group list is empty, this can be removed
+ // Create help listener
+
+/* CXIMPTestListener* listener2 = CXIMPTestListener::NewL( context );
+ CleanupStack::PushL( listener2 ); // << listener2
+
+ // Create faked server message about group list
+ SendSrvMsgL( CXIMPTestFileSrvMsg::ETestSrvMsgPresentityGroupList );
+
+ // expect empty MPresentityGroupList event.
+ CPresentityGroupListEventImp* event = XIMPTestEventFactory::CreateGroupListEventLCX(
+ KNullDesC, KNullDesC,
+ XIMPTestEventFactory::ETestPGLEmpty,
+ KNullDesC, KNullDesC,
+ MXIMPDataSubscriptionState::ESubscriptionActive,
+ MXIMPDataSubscriptionState::EDataAvailable
+ );
+
+ listener2->ExpectL( event );
+ CleanupStack::Pop( event ); // 4 more items in cleanupstack
+
+ EUNIT_ASSERT_DESC( KErrNone == listener2->WaitAndAssertL(), "HandlePresentityGroupListL failed" );
+ CleanupStack::PopAndDestroy( 4 ); // lists
+ CleanupStack::PopAndDestroy( listener2 ); // >>> listener2
+
+*/
+ //////////////////////////////////////////////////////////////////////////
+ // CREATE PRESENTITY GROUP
+ /////////////////////////////////////////////////////////////////////////
+
+ // Setup status event listener for RequestComplete
+ // This will also produce HandlePresentityGroupListEvent, since the
+ // the group is subscribed
+ SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+
+ MXIMPIdentity* groupId = context->ObjectFactory().NewIdentityLC();
+ CleanupStack::Pop(); // groupId
+ groupId->SetIdentityL( KGroupId );
+
+ // subscribe
+ reqId = presGroup.CreatePresentityGroupL( *groupId, KGroupDisplayName );
+
+ // Wait for events on the request
+ wrapper->WaitRequestAndStackEvents( reqId );
+ wrapper->VerifyEventStackL( _L8("CreatePresentityGroupL failed, complete with error: ") );
+
+ // verify that SubscribePresentityGroupListL was called
+ messenger->AssertCreatePresentityGroupCalled( ETrue );
+
+
+
+ //////////////////////////////////////////////////////////////////////////
+ // ADD PRESENTITY GROUP MEMBER
+ //////////////////////////////////////////////////////////////////////////
+
+ CXIMPTestListener* listener4 = CXIMPTestListener::NewL( context );
+ CleanupStack::PushL( listener4 ); // << listener4
+
+ MXIMPIdentity* member = context->ObjectFactory().NewIdentityLC(); // << member
+ member->SetIdentityL( KMemberId1 );
+
+
+ // request complete
+ TXIMPRequestId reqIdDummy;
+ CXIMPRequestCompleteEventImp* evReqComplete = CXIMPRequestCompleteEventImp::NewLC( reqIdDummy );
+
+ // group id
+ CXIMPIdentityImp* identity2 = CXIMPIdentityImp::NewLC( groupId->Identity() );
+ evReqComplete->AppendParamL( identity2 );
+ CleanupStack::Pop(identity2); // identity2
+
+ // id for member info
+ CXIMPIdentityImp* miId = CXIMPIdentityImp::NewLC( KMemberId1 );
+ // member info
+ CPresentityGroupMemberInfoImp* memInfoImp =
+ CPresentityGroupMemberInfoImp::NewLC( *miId, KMemberDisplayName1 );
+ evReqComplete->AppendParamL( memInfoImp );
+ CleanupStack::Pop(memInfoImp); // memInfoImp owned by AppendParamL
+ CleanupStack::PopAndDestroy( miId ); // copy was made
+
+ listener4->ExpectL( evReqComplete );
+ CleanupStack::Pop( evReqComplete );
+
+ // do the call
+ reqId = presGroup.AddPresentityGroupMemberL(
+ *groupId, *member, KMemberDisplayName1 );
+
+ // and wait
+ EUNIT_ASSERT_DESC( KErrNone == listener4->WaitAndAssertL(), "AddPresentityGroupMemberL (not subscribed) failed" );
+
+ messenger->AssertAddPresentityGroupMemberCalled( ETrue );
+ CleanupStack::PopAndDestroy(); // >>> member
+ CleanupStack::PopAndDestroy( listener4 );// >>> listener4
+
+
+ //////////////////////////////////////////////////////////////////////////
+ // SUBSCRIBE PRESENTITY GROUP CONTENT
+ //////////////////////////////////////////////////////////////////////////
+
+ // Setup status event listener for RequestComplete
+ SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+ // subscribe group content
+ MXIMPIdentity* identity = context->ObjectFactory().NewIdentityLC();
+ identity->SetIdentityL( KGroupId ); // << identity
+
+ reqId = presGroup.SubscribePresentityGroupContentL( *identity );
+
+ // Wait for events on the request
+ wrapper->WaitRequestAndStackEvents( reqId );
+ wrapper->VerifyEventStackL( _L8("Subscribe presentity group content, complete with error: ") );
+
+ COMMONASSERT( messenger, EXIMPPlgTestSubscribePresentityGroupContentCalled, "SubscribeGroupContentL was not called", ETrue, NULL );
+
+ //////////////////////////////////////////////////////////////////////////
+ // SUBSCRIBE PRESENTITY GROUP MEMBERS PRESENCE
+ //////////////////////////////////////////////////////////////////////////
+
+ // Setup status event listener for RequestComplete
+ SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+ // This is the group we are interested in
+ MXIMPIdentity* group = context->ObjectFactory().NewIdentityLC();
+ CleanupStack::Pop(); // group
+ group->SetIdentityL( KGroupId );
+ // Set filter for the group
+ //CPresenceInfoFilterImp* gpif = CPresenceInfoFilterImp::NewLC();
+ //gpif->AcceptPersonFilterL( NPresenceInfo::NFieldType::KStatusMessage );
+ //gpif->AcceptPersonFilterL( NPresenceInfo::NFieldType::KAvatar );
+
+
+
+ CPresenceInfoFilterImp* gpif =
+ XIMPTestPresenceDataUtils::GenerateInfoFilterLC( &KPrefix1 );
+
+ CleanupStack::Pop(gpif); // gpif
+
+ // register interest
+ reqId = presWatch.SubscribePresentityGroupMembersPresenceL( *group, *gpif );
+
+ // Wait for events on the request
+ wrapper->WaitRequestAndStackEvents( reqId );
+ wrapper->VerifyEventStackL( _L8("Subscribe presentity group members, complete with error: ") );
+
+ // verify that UpdateInterest was called
+ COMMONASSERT( messenger, EXIMPPlgTestSubscribePresentityGroupMembersPresesenceCalled, "SubscribePresentityGroupMembersPresenceL was not called", ETrue, NULL );
+
+ delete gpif;
+
+
+ //////////////////////////////////////////////////////////////////////////
+ // ADD PRESENTITY GROUP MEMBER, GROUP CONTENT SUBSCRIBED
+ //////////////////////////////////////////////////////////////////////////
+
+ // Setup status event listener for RequestComplete
+ // This will also produce HandlePresentityGroupMemberAddedL, since the
+ // the group is subscribed
+ SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+ MXIMPIdentity* member2 = context->ObjectFactory().NewIdentityLC(); // << member2
+ member2->SetIdentityL( KMemberId2 );
+
+ // do the call
+ reqId = presGroup.AddPresentityGroupMemberL(
+ *groupId, *member2, KMemberDisplayName2 );
+
+ // Wait for events on the request
+ wrapper->WaitRequestAndStackEvents( reqId );
+ wrapper->VerifyEventStackL( _L8("AddPresentityGroupMemberL (subscribed) failed, complete with error: ") );
+
+
+ messenger->AssertAddPresentityGroupMemberCalled( ETrue );
+ CleanupStack::PopAndDestroy(); // >>> member2
+
+
+
+ //////////////////////////////////////////////////////////////////////////
+ // GRANT PRESENTITY GROUP MEMBER
+ //////////////////////////////////////////////////////////////////////////
+
+ // This is the group we are interested in
+ MXIMPIdentity* ggroup = context->ObjectFactory().NewIdentityLC();
+ CleanupStack::Pop(); // ggroup
+ ggroup->SetIdentityL( KGroupId );
+ // Set filter for the group
+ CPresenceInfoFilterImp* ggpif = CPresenceInfoFilterImp::NewLC();
+ //ggpif->AcceptPersonFilterL( NPresenceInfo::NFieldType::KAcceptAll );
+ CleanupStack::Pop(); // ggpif
+
+ // Setup status event listener for RequestComplete
+ SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+ // grant for all
+ reqId = presAuth.GrantPresenceForPresentityGroupMembersL( *ggroup, *ggpif );
+
+ // Wait for events on the request
+ wrapper->WaitRequestAndStackEvents( reqId );
+
+ // verify that UpdateInterest was called
+ COMMONASSERT( messenger, EXIMPPlgTestGrantPresenceForPresentityGroupMembersCalled,
+ "GrantPresenceForPresentityGroupMembersL was not called", ETrue, NULL );
+
+ delete ggpif;
+
+
+ //////////////////////////////////////////////////////////////////////////
+ // WITHDRAW PRESENTITY GROUP MEMBER
+ //////////////////////////////////////////////////////////////////////////
+
+
+ // Setup status event listener for RequestComplete
+ SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+ // withdraw from all
+ reqId = presAuth.WithdrawPresenceGrantFromPresentityGroupMembersL( *ggroup );
+
+ // Wait for events on the request
+ wrapper->WaitRequestAndStackEvents( reqId );
+ // verify that UpdateInterest was called
+ COMMONASSERT( messenger, EXIMPPlgTestGrantPresenceForPresentityGroupMembersCalled,
+ "GrantPresenceForPresentityGroupMembersL was not called", ETrue, NULL );
+
+ delete ggroup;
+
+
+ //////////////////////////////////////////////////////////////////////////
+ // UNSUBSCRIBE PRESENTITY GROUP MEMBERS
+ //////////////////////////////////////////////////////////////////////////
+
+ // Setup status event listener for RequestComplete
+ SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+ // unregister interest
+ reqId = presWatch.UnsubscribePresentityGroupMembersPresenceL( *group );
+
+ // Wait for events on the request
+ wrapper->WaitRequestAndStackEvents( reqId );
+ wrapper->VerifyEventStackL( _L8("Unsubscribe presentity group members, complete with error: ") );
+
+ // verify that UpdateInterest was called
+ COMMONASSERT( messenger, EXIMPPlgTestUnsubscribePresentityGroupMembersPresesenceCalled, "UnsubscribePresentityGroupMembersPresenceL was not called", ETrue, NULL );
+
+
+
+ //////////////////////////////////////////////////////////////////////////
+ // UNSUBSCRIBE PRESENTITY GROUP CONTENT
+ //////////////////////////////////////////////////////////////////////////
+
+ // Setup status event listener for RequestComplete
+ SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+ // unsubscribe
+ reqId = presGroup.UnsubscribePresentityGroupContentL( *identity );
+
+ // Wait for events on the request
+ wrapper->WaitRequestAndStackEvents( reqId );
+ wrapper->VerifyEventStackL( _L8("Unsubscribe presentity group content, complete with error: ") );
+
+ // verify that UnsubscribePresentityGroupContentL was called
+ messenger->AssertUnsubscribePresentityGroupContentCalled( ETrue );
+
+ CleanupStack::PopAndDestroy(); // >>> identity
+
+ //////////////////////////////////////////////////////////////////////////
+ // UNSUBSCRIBE PRESENCE BLOCK LIST
+ //////////////////////////////////////////////////////////////////////////
+
+ // Setup status event listener for RequestComplete
+ SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+ // subscribe
+ reqId = presAuth.UnsubscribePresenceBlockListL();
+
+ // Wait for events on the request
+ wrapper->WaitRequestAndStackEvents( reqId );
+ wrapper->VerifyEventStackL( _L8("Unsubscribing presence watcher list, complete with error: ") );
+
+ // verify that SubscribeBlockListL was called
+ COMMONASSERT( messenger, EXIMPPlgTestUnsubscribePresenceBlockListCalled, "UnubscribeBlockListL was not called", ETrue, NULL );
+
+ //////////////////////////////////////////////////////////////////////////
+ // UNSUBSCRIBE PRESENTITY GROUP LIST
+ //////////////////////////////////////////////////////////////////////////
+
+ // Setup status event listener for RequestComplete
+ SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+ // unsubscribe
+ reqId = presGroup.UnsubscribePresentityGroupListL();
+
+ // Wait for events on the request
+ wrapper->WaitRequestAndStackEvents( reqId );
+ wrapper->VerifyEventStackL( _L8("Unsubscribing presentity group list, complete with error: ") );
+
+ // verify that SubscribePresentityGroupListL was called
+ messenger->AssertUnsubscribePresentityGroupListCalled( ETrue );
+
+
+ //////////////////////////////////////////////////////////////////////////
+ // UNSUBSCRIBE PRESENCE WATCHER LIST
+ //////////////////////////////////////////////////////////////////////////
+
+ // Setup status event listener for RequestComplete
+ SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+ // unsubscribe
+ reqId = presPub.UnsubscribePresenceWatcherListL();
+
+ // Wait for events on the request
+ wrapper->WaitRequestAndStackEvents( reqId );
+ wrapper->VerifyEventStackL( _L8("Unsubscribing presence watcher list, complete with error: ") );
+
+ // verify that UnsubscribeWatcherListL was called
+ COMMONASSERT( messenger, EXIMPPlgTestUnsubscribePresenceWatcherListCalled, "UnsubscribeWatcherListL was not called", ETrue, NULL );
+
+
+ ////////////////////////////////////////////////////////////////////////////
+ // UNSUBSCRIBE OWN PRESENCE
+ ////////////////////////////////////////////////////////////////////////////
+ // Setup status event listener for RequestComplete
+ SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+ // unsubscribe own presence
+ reqId = presPub.UnsubscribeOwnPresenceL();
+
+ // Wait for events on the request
+ wrapper->WaitRequestAndStackEvents( reqId );
+
+ wrapper->VerifyEventStackL( _L8("Unsubscribing own presence, complete with error: ") );
+
+ // verify that UnsubscribeOwnPresenceL was called
+ COMMONASSERT( messenger, EXIMPPlgTestUnsubscribeOwnPresenceCalled, "UnsubscribeOwnPresenceL was not called", ETrue, NULL );
+
+ CleanupStack::PopAndDestroy( ownPif ); // >>> ownPif
+ delete group;
+ delete groupId;
+
+
+ UnbindL();
+
+ wrapper = NULL;
+ context = NULL;
+ messenger = NULL;
+
+
+
+ }
+
+// Grant/Withdraw from group
+void T_PresenceAll::T_GrantWithdrawGroup_L()
+ {
+ EUNIT_PRINT( _L("T_GrantWithdrawGroup_L") );
+
+ BindL();
+
+ CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( 0 );
+ MXIMPContext* context = wrapper->GetContext();
+ CXIMPTestMessenger* messenger = wrapper->GetMessenger();
+
+ // Tell the protocol it should act normally
+ messenger->SetNoError();
+
+
+ // Get the interfaces
+ MPresenceFeatures* presFeat = wrapper->GetPresenceFeatures();
+ MPresencePublishing& presPub = presFeat->PresencePublishing();
+ MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+ MPresentityGroups& presGroup = presFeat->PresentityGroups();
+ MPresenceWatching& presWatch = presFeat->PresenceWatching();
+
+
+
+ //////////////////////////////////////////////////////////////////////////
+ // CREATE PRESENTITY GROUP
+ /////////////////////////////////////////////////////////////////////////
+
+ // Setup status event listener for RequestComplete
+ // This will also produce HandlePresentityGroupListEvent, since the
+ // the group is subscribed
+ SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+
+ MXIMPIdentity* groupId = context->ObjectFactory().NewIdentityLC();
+ CleanupStack::Pop(); // groupId
+ groupId->SetIdentityL( KGroupId );
+
+ // subscribe
+ TXIMPRequestId reqId = presGroup.CreatePresentityGroupL( *groupId, KGroupDisplayName );
+
+ // Wait for events on the request
+ wrapper->WaitRequestAndStackEvents( reqId );
+ wrapper->VerifyEventStackL( _L8("CreatePresentityGroupL failed, complete with error: ") );
+
+ // verify that SubscribePresentityGroupListL was called
+ messenger->AssertCreatePresentityGroupCalled( ETrue );
+
+
+
+ //////////////////////////////////////////////////////////////////////////
+ // ADD PRESENTITY GROUP MEMBER
+ //////////////////////////////////////////////////////////////////////////
+
+ CXIMPTestListener* listener4 = CXIMPTestListener::NewL( context );
+ CleanupStack::PushL( listener4 ); // << listener4
+
+ MXIMPIdentity* member = context->ObjectFactory().NewIdentityLC(); // << member
+ member->SetIdentityL( KMemberId1 );
+
+
+ // request complete
+ TXIMPRequestId reqIdDummy;
+ CXIMPRequestCompleteEventImp* evReqComplete = CXIMPRequestCompleteEventImp::NewLC( reqIdDummy );
+
+ // group id
+ CXIMPIdentityImp* identity2 = CXIMPIdentityImp::NewLC( groupId->Identity() );
+ evReqComplete->AppendParamL( identity2 );
+ CleanupStack::Pop(); // identity2
+
+ // id for member info
+ CXIMPIdentityImp* miId = CXIMPIdentityImp::NewLC( KMemberId1 );
+ // member info
+ CPresentityGroupMemberInfoImp* memInfoImp =
+ CPresentityGroupMemberInfoImp::NewLC( *miId, KMemberDisplayName1 );
+ evReqComplete->AppendParamL( memInfoImp );
+ CleanupStack::Pop(); // memInfoImp owned by AppendParamL
+ CleanupStack::PopAndDestroy( miId ); // copy was made
+
+ listener4->ExpectL( evReqComplete );
+ CleanupStack::Pop( evReqComplete );
+
+ // do the call
+ reqId = presGroup.AddPresentityGroupMemberL(
+ *groupId, *member, KMemberDisplayName1 );
+
+ // and wait
+ EUNIT_ASSERT_DESC( KErrNone == listener4->WaitAndAssertL(), "AddPresentityGroupMemberL (not subscribed) failed" );
+
+ messenger->AssertAddPresentityGroupMemberCalled( ETrue );
+ CleanupStack::PopAndDestroy(); // >>> member
+ CleanupStack::PopAndDestroy( listener4 );// >>> listener4
+
+ delete groupId;
+
+ //////////////////////////////////////////////////////////////////////////
+ // ADD PRESENTITY GROUP MEMBER, GROUP CONTENT SUBSCRIBED
+ //////////////////////////////////////////////////////////////////////////
+
+ // Setup status event listener for RequestComplete
+ // This will also produce HandlePresentityGroupMemberAddedL, since the
+ // the group is subscribed
+ SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+ MXIMPIdentity* member2 = context->ObjectFactory().NewIdentityLC(); // << member2
+ member2->SetIdentityL( KMemberId2 );
+
+ // do the call
+ reqId = presGroup.AddPresentityGroupMemberL(
+ *groupId, *member2, KMemberDisplayName2 );
+
+ // Wait for events on the request
+ wrapper->WaitRequestAndStackEvents( reqId );
+ wrapper->VerifyEventStackL( _L8("AddPresentityGroupMemberL (subscribed) failed, complete with error: ") );
+
+
+ messenger->AssertAddPresentityGroupMemberCalled( ETrue );
+ CleanupStack::PopAndDestroy(); // >>> member2
+
+
+
+ //////////////////////////////////////////////////////////////////////////
+ // GRANT PRESENTITY GROUP MEMBER
+ //////////////////////////////////////////////////////////////////////////
+
+ // This is the group we are interested in
+ MXIMPIdentity* ggroup = context->ObjectFactory().NewIdentityLC();
+ CleanupStack::Pop(); // ggroup
+ ggroup->SetIdentityL( KGroupId );
+ // Set filter for the group
+ CPresenceInfoFilterImp* ggpif = CPresenceInfoFilterImp::NewLC();
+ ggpif->AcceptPersonFilterL( NPresenceInfo::NFieldType::KAcceptAll );
+ CleanupStack::Pop(); // ggpif
+
+ // Setup status event listener for RequestComplete
+ SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+ // grant for all
+ reqId = presAuth.GrantPresenceForPresentityGroupMembersL( *ggroup, *ggpif );
+
+ // Wait for events on the request
+ wrapper->WaitRequestAndStackEvents( reqId );
+
+ // verify that UpdateInterest was called
+ COMMONASSERT( messenger, EXIMPPlgTestGrantPresenceForPresentityGroupMembersCalled,
+ "GrantPresenceForPresentityGroupMembersL was not called", ETrue, NULL );
+
+ delete ggpif;
+
+
+
+ //////////////////////////////////////////////////////////////////////////
+ // WITHDRAW PRESENTITY GROUP MEMBER
+ //////////////////////////////////////////////////////////////////////////
+
+
+ // Setup status event listener for RequestComplete
+ SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+ // withdraw from all
+ reqId = presAuth.WithdrawPresenceGrantFromPresentityGroupMembersL( *ggroup );
+
+ // Wait for events on the request
+ wrapper->WaitRequestAndStackEvents( reqId );
+ // verify that UpdateInterest was called
+ COMMONASSERT( messenger, EXIMPPlgTestGrantPresenceForPresentityGroupMembersCalled,
+ "GrantPresenceForPresentityGroupMembersL was not called", ETrue, NULL );
+
+ delete ggroup;
+
+ UnbindL();
+
+ wrapper = NULL;
+ context = NULL;
+ messenger = NULL;
+
+ }
+
+
+// ===========================================================================
+// SETUP HELPERS FOR THE LISTENER
+// ===========================================================================
+//
+void T_PresenceAll::SetupListenerReqCompleteL( CXIMPTestContextWrapper* aWrapper, TXIMPTestStatusEventTemplate aEventType )
+ {
+ RArray< TInt32 > array;
+ CleanupClosePushL( array );
+ array.Append( MXIMPContextStateEvent::KInterfaceId );
+ array.Append( MPresentityPresenceEvent::KInterfaceId );
+ aWrapper->SetupListenerReqCompleteL( aEventType, &array );
+ CleanupStack::PopAndDestroy(); // array
+ }
+
+void T_PresenceAll::SetupListenerReqCompleteAllowEventsL( CXIMPTestContextWrapper* aWrapper, TXIMPTestStatusEventTemplate aEventType )
+ {
+ RArray< TInt32 > array;
+ CleanupClosePushL( array );
+ array.AppendL( MXIMPRequestCompleteEvent::KInterfaceId );
+ array.AppendL( MXIMPContextStateEvent::KInterfaceId );
+ array.AppendL( MPresentityPresenceEvent::KInterfaceId );
+ aWrapper->SetupListenerReqCompleteL( aEventType, &array );
+ CleanupStack::PopAndDestroy(); // array
+ }
+
+void T_PresenceAll::SendSrvMsgL(
+ const TDesC& aUri, const TDesC& aDispName,
+ TInt aMsgType )
+ {
+ // we'll use hard-coded wrapper 0 instance for now.
+ CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( 0 );
+
+ // create a group info contained within the server-originated
+ // faked message
+ CXIMPIdentityImp* groupId = CXIMPIdentityImp::NewLC( aUri );
+ CPresentityGroupInfoImp* groupItem = CPresentityGroupInfoImp::NewLC( *groupId, aDispName );
+ HBufC8* packet = NULL;
+ if( aMsgType == CXIMPTestFileSrvMsg::ETestSrvMsgPresentityGroupDelete )
+ {
+ packet = TXIMPObjectPacker< CXIMPIdentityImp >::PackL( *groupId );
+ }
+ else
+ {
+ packet = TXIMPObjectPacker< CPresentityGroupInfoImp >::PackL( *groupItem );
+ }
+ CleanupStack::PushL( packet );
+
+ // use filetool to send it for plugin.
+ CXIMPTestFileSrvMsg* srvMsg = CXIMPTestFileSrvMsg::NewL( aMsgType, *packet );
+ CleanupStack::PushL( srvMsg );
+ wrapper->FileTool().CleanAllL();
+ wrapper->FileTool().SrvMsgStoreL( srvMsg );
+ CleanupStack::PopAndDestroy( 4, groupId ); // srvMsg, packet, groupItem, groupId
+ }
+
+// send a faked server-originated message with empty contents
+//
+void T_PresenceAll::SendSrvMsgL( TInt aMsgType )
+ {
+ // we'll use hard-coded wrapper 0 instance for now.
+ CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( 0 );
+
+ // create a server-originated faked message with empty contents
+ RXIMPObjOwningPtrArray<CPresentityGroupInfoImp> groupList;
+
+ HBufC8* packedArray = TXIMPObjectPacker<CPresentityGroupInfoImp>::PackArrayL( groupList );
+ CleanupStack::PushL( packedArray );
+
+ // use filetool to send it for plugin.
+ CXIMPTestFileSrvMsg* srvMsg = CXIMPTestFileSrvMsg::NewL( aMsgType,
+ *packedArray );
+ CleanupStack::PushL( srvMsg );
+ wrapper->FileTool().CleanAllL();
+ wrapper->FileTool().SrvMsgStoreL( srvMsg );
+ CleanupStack::PopAndDestroy( 2 ); // srvMsg, packedArray
+ }
+
+
+void T_PresenceAll::T_BindUnbindL()
+ {
+ EUNIT_PRINT( _L("T_BindUnbindL") );
+
+ BindL();
+
+ CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( 0 );
+ MXIMPContext* context = wrapper->GetContext();
+ CXIMPTestMessenger* messenger = wrapper->GetMessenger();
+
+ // Tell the protocol it should act normally
+ messenger->SetNoError();
+
+
+ UnbindL();
+
+ wrapper = NULL;
+ context = NULL;
+ messenger = NULL;
+ }
+// ===========================================================================
+// TEST CASE TABLE
+// ===========================================================================
+//
+EUNIT_BEGIN_TEST_TABLE(
+ T_PresenceAll,
+ "XIMP presence all tests",
+ "MODULE" )
+
+PRFW_DECORATED_TEST(
+ "TMO_demo_Startup",
+ "",
+ "",
+ "FUNCTIONALITY",
+ Setup_L,
+ T_TMO_demo_Startup_L,
+ Teardown )
+
+PRFW_DECORATED_TEST(
+ "BindUnbind",
+ "",
+ "",
+ "FUNCTIONALITY",
+ Setup_L,
+ T_BindUnbindL,
+ Teardown )
+
+PRFW_DECORATED_TEST(
+ "GrantWithdrawGroup",
+ "",
+ "",
+ "FUNCTIONALITY",
+ Setup_L,
+ T_GrantWithdrawGroup_L,
+ Teardown )
+
+EUNIT_END_TEST_TABLE
+
+
+// ===========================================================================
+// TEST SUITE CONSTRUCTION
+// ===========================================================================
+//
+EXPORT_C MEUnitTest* CreateTestSuiteL()
+ {
+ return T_PresenceAll::NewL();
+ }
+
+
+// end of file