ximpfw/tsrc/src/t_presenceauthorization/t_presenceauthorization.cpp
changeset 0 e6b17d312c8b
child 20 eedf17a17c27
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ximpfw/tsrc/src/t_presenceauthorization/t_presenceauthorization.cpp	Thu Dec 17 08:54:49 2009 +0200
@@ -0,0 +1,2061 @@
+/*
+* 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 <eunitmacros.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 <presenceauthorization.h>
+#include <presencepublishing.h>
+#include <presentitypresenceevent.h>
+#include <ximpobjectfactory.h>
+
+#include "prfwtestlistener.h"
+
+#include <presentitygroups.h>
+#include <presentitygroupinfo.h>
+#include <presentitygrouplistevent.h>
+
+#include "t_presenceauthorization.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 "prfwtestrobustnesstools.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"
+
+_LIT8( KIdentity1, "Identity1" );
+_LIT8( KIdentity2, "Identity2" );
+_LIT8( KIdentity3, "Identity3" );
+
+_LIT( KIdentity1_16, "Identity1" );
+_LIT( KIdentity2_16, "Identity2" );
+_LIT( KIdentity3_16, "Identity3" );
+
+
+_LIT( KGroupId,  "Group" );
+_LIT( KGroupId1, "Group1" );
+_LIT( KGroupId2, "Group2" );
+
+
+_LIT( KGroupDisplayName, "GroupDisplayName" );
+
+
+_LIT8( KPrefix1, "PreA_" );
+_LIT8( KPrefix2, "PreB_" );
+_LIT8( KPrefix3, "PreC_" );
+_LIT8( KPrefix4, "PreD_" );
+
+_LIT( KIdentity, "TestId@hello.world" );
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// CONSTRUCTION
+T_PresenceAuthorization* T_PresenceAuthorization::NewL()
+    {
+    T_PresenceAuthorization* self = new( ELeave ) T_PresenceAuthorization;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+
+T_PresenceAuthorization::~T_PresenceAuthorization()
+    {
+    }
+
+
+void T_PresenceAuthorization::ConstructL()
+    {
+    CEUnitTestSuiteClass::ConstructL();
+    }
+
+
+T_PresenceAuthorization::T_PresenceAuthorization()
+    {
+    }
+
+
+
+// ===========================================================================
+// TEST CASE SETUP & TEARDOWN METHODS
+// ===========================================================================
+//
+
+void T_PresenceAuthorization::Setup_L()
+    {
+    PrfwTestRobustness::DoPreCleaning();
+
+    iWrapperMgr = CXIMPTestContextWrapperMgr::NewL();
+    iWrapperMgr->CreateWrapperL();
+    }
+
+void T_PresenceAuthorization::SetupMultiple_L()
+    {
+    PrfwTestRobustness::DoPreCleaning();
+
+    iWrapperMgr = CXIMPTestContextWrapperMgr::NewL();
+    iWrapperMgr->CreateWrapperL();
+    iWrapperMgr->CreateWrapperL();
+    iWrapperMgr->CreateWrapperL();
+    }
+
+
+void T_PresenceAuthorization::BindL()
+    {
+    CXIMPTestContextWrapper* wrapper0 = iWrapperMgr->GetWrapperL( 0 );
+
+    wrapper0->BindL( 0 );
+    }
+
+void T_PresenceAuthorization::BindAllL()
+    {
+    for( TInt a = 0; a < iWrapperMgr->WrapperCount(); ++a )
+        {
+        CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( a );
+        wrapper->BindL( 0 );
+        }
+    }
+
+
+void T_PresenceAuthorization::Teardown()
+    {
+    delete iWrapperMgr;
+    iWrapperMgr = NULL;
+
+    REComSession::FinalClose();
+
+    PrfwTestRobustness::DoPreCleaning();
+    }
+
+void T_PresenceAuthorization::UnbindL()
+    {
+    // Do unbind
+    CXIMPTestContextWrapper* wrapper0 = iWrapperMgr->GetWrapperL( 0 );
+    wrapper0->UnbindL();
+    }
+
+void T_PresenceAuthorization::UnbindAllL()
+    {
+    for( TInt a = 0; a < iWrapperMgr->WrapperCount(); ++a )
+        {
+        CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( a );
+        wrapper->UnbindL();
+        }
+    }
+
+
+// ===========================================================================
+// TEST CASES for presentity authorization
+// ===========================================================================
+
+void T_PresenceAuthorization::T_GrantPresenceForPresentity_L()
+    {
+    EUNIT_PRINT( _L("Grant presence for presentity") );
+
+// INITIALIZE
+
+    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();
+    MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+
+    CXIMPIdentityImp* identity = XIMPTestPresenceDataUtils::GenerateIdentityLC( &KNullDesC8 );
+    CPresenceInfoFilterImp* pif =
+                XIMPTestPresenceDataUtils::GenerateInfoFilterLC( &KPrefix1 );
+
+// GRANT
+
+    // Setup status event listener for RequestComplete
+    SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+    // register interest
+    TXIMPRequestId reqId = presAuth.GrantPresenceForPresentityL( *identity, *pif );
+
+    // Wait for events on the request
+    wrapper->WaitRequestAndStackEvents( reqId );
+    // verify that UpdateInterest was called
+    COMMONASSERT( messenger, EXIMPPlgTestGrantPresenceForPresentityCalled, 
+                        "GrantPresenceForPresentityL was not called", ETrue, NULL );
+
+// GRANT AGAIN
+
+    // Setup status event listener for RequestComplete
+    SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+    messenger->SetValueFor( EXIMPPlgTestGrantPresenceForPresentityCalled, 0 );
+    
+    // register interest
+    reqId = presAuth.GrantPresenceForPresentityL( *identity, *pif );
+
+    // Wait for events on the request
+    wrapper->WaitRequestAndStackEvents( reqId );
+    
+    // verify that UpdateInterest was called
+    COMMONASSERT( messenger, EXIMPPlgTestGrantPresenceForPresentityCalled, 
+                        "GrantPresenceForPresentityL was not called", EFalse, 
+                        "GrantPresenceForPresentityL was called" );
+
+// WITHDRAW
+
+    SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+    // register interest
+    reqId = presAuth.WithdrawPresenceGrantFromPresentityL( *identity );
+
+    // Wait for events on the request
+    wrapper->WaitRequestAndStackEvents( reqId );
+    wrapper->VerifyEventStackL( _L8("Grantin presence to presentity, complete with error: ") );
+    // verify that UpdateInterest was called
+    COMMONASSERT( messenger, EXIMPPlgTestWithdrawPresenceFromPresentityCalled, 
+                            "WithdrawPresenceForPresentityL was not called", ETrue, NULL );
+
+// DEINITIALIZE
+
+    CleanupStack::PopAndDestroy( 2, identity ); //pif, identity
+    UnbindL();
+    }
+
+// ==============================================================================================
+
+void T_PresenceAuthorization::T_WithdrawNotGrantedPresenceFromPresentity_L()
+    {
+    EUNIT_PRINT( _L("Withdraw presence from presentity not granted") );
+
+// INITIALIZE
+
+    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();
+    MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+
+    CXIMPIdentityImp* identity = XIMPTestPresenceDataUtils::GenerateIdentityLC( &KNullDesC8 );
+
+// WITHDRAW
+
+    SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+    // register interest
+    TXIMPRequestId reqId = presAuth.WithdrawPresenceGrantFromPresentityL( *identity );
+
+    // Wait for events on the request
+    wrapper->WaitRequestAndStackEvents( reqId );
+    wrapper->VerifyEventStackL( _L8("Grantin presence to presentity, complete with error: ") );
+    // Changed for OPAA-73BCS(
+    // verify that UpdateInterest was called
+    COMMONASSERT( messenger, EXIMPPlgTestWithdrawPresenceFromPresentityCalled, 
+                        "WithdrawPresenceForPresentityL was not called", ETrue/*EFalse*/, 
+                        "WithdrawPresenceForPresentityL was called" );
+
+// DEINITIALIZE
+
+    CleanupStack::PopAndDestroy( identity ); //identity
+    UnbindL();
+    }
+
+// ==============================================================================================
+
+
+void T_PresenceAuthorization::T_GrantPresenceForPresentityChangeId_L()
+    {
+    EUNIT_PRINT( _L("Grant presence for presentity change id") );
+
+// INITIALIZE
+
+    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 management interface
+    // Get the interfaces
+    MPresenceFeatures* presFeat = wrapper->GetPresenceFeatures();
+    MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+
+
+    CXIMPIdentityImp* identity = XIMPTestPresenceDataUtils::GenerateIdentityLC( &KNullDesC8 );
+    CPresenceInfoFilterImp* pif =
+                XIMPTestPresenceDataUtils::GenerateInfoFilterLC( &KPrefix1 );
+
+// ID CHANGE REQUEST TO ADAPTATION
+
+    MXIMPIdentity* identityParam = context->ObjectFactory().NewIdentityLC();
+    identityParam->SetIdentityL( KIdentity );
+    
+    CXIMPIdentityImp* identityParamImp =
+             ( CXIMPIdentityImp* ) identityParam->GetInterface(
+                                        CXIMPIdentityImp::KClassId,
+                                        MXIMPBase::EPanicIfUnknown );
+    HBufC8* packedId = TXIMPObjectPacker< CXIMPIdentityImp >::PackL( *identityParamImp );
+    CleanupStack::PopAndDestroy(); // identityParam
+    CleanupStack::PushL( packedId );
+    CXIMPTestFileSrvMsg* srvMsg = CXIMPTestFileSrvMsg::NewL( CXIMPTestFileSrvMsg::ETestSrvMsgReqParamIdentity, 
+                                                             *packedId );
+    CleanupStack::PopAndDestroy( packedId );
+    CleanupStack::PushL( srvMsg );
+    wrapper->FileTool().SrvMsgStoreL( srvMsg );
+    CleanupStack::PopAndDestroy( srvMsg );
+
+    // Wait for server to handle srvmsg.
+    CXIMPTestWaitHelper* wait = CXIMPTestWaitHelper::NewL();
+    CleanupStack::PushL( wait );
+    wait->WaitForL( 2 );
+    CleanupStack::PopAndDestroy( wait );
+
+// GRANT
+
+    // Setup status event listener for RequestComplete
+    SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+    // register interest
+    TXIMPRequestId reqId = presAuth.GrantPresenceForPresentityL( *identity, *pif );
+
+    // Wait for events on the request
+    wrapper->WaitRequestAndStackEvents( reqId );
+    // verify that UpdateInterest was called
+    COMMONASSERT( messenger, EXIMPPlgTestGrantPresenceForPresentityCalled, 
+                        "GrantPresenceForPresentityL was not called", ETrue, NULL );
+
+// DEINITIALIZE
+
+    CleanupStack::PopAndDestroy( 2, identity ); //pif, identity
+    UnbindL();
+    }
+
+// ==============================================================================================
+
+void T_PresenceAuthorization::T_WithdrawNotGrantedPresenceFromPresentity_Multiple_L()
+    {
+    EUNIT_PRINT( _L("Withdraw presence from presentity not granted multiple clients") );
+
+    BindAllL();
+
+    CXIMPIdentityImp* identity = XIMPTestPresenceDataUtils::GenerateIdentityLC( &KNullDesC8 );
+    CPresenceInfoFilterImp* pif =
+                XIMPTestPresenceDataUtils::GenerateInfoFilterLC( &KPrefix1 );
+
+// GRANT ALL BUT FIRST
+
+    TInt countOfWrappers = iWrapperMgr->WrapperCount();
+    TInt a(0);
+    for( a = countOfWrappers - 1; a >= 1; --a )
+        {
+        CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( a );
+        MXIMPContext* context = wrapper->GetContext();
+        CXIMPTestMessenger* messenger = wrapper->GetMessenger();
+
+        // Tell the protocol it should act normally
+        messenger->SetNoError();
+
+        // Get the interfaces
+        MPresenceFeatures* presFeat = wrapper->GetPresenceFeatures();
+        MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+
+        // Setup status event listener for RequestComplete
+        SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+        // register interest
+        TXIMPRequestId reqId = presAuth.GrantPresenceForPresentityL( *identity, *pif );
+
+        // Wait for events on the request
+        wrapper->WaitRequestAndStackEvents( reqId );
+        // verify that UpdateInterest was called
+        COMMONASSERT( messenger, EXIMPPlgTestGrantPresenceForPresentityCalled,
+            "GrantPresenceForPresentityL was not called",
+            ( a > 1 ) ? ETrue : EFalse,
+            "GrantPresenceForPresentityL was called" );
+        }
+        
+// WITHDRAW
+        
+    for( a = 0; a < countOfWrappers; ++a )
+        {
+        CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( a );
+        MXIMPContext* context = wrapper->GetContext();
+        CXIMPTestMessenger* messenger = wrapper->GetMessenger();
+        
+        // Get the interfaces
+        MPresenceFeatures* presFeat = wrapper->GetPresenceFeatures();
+        MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+
+        // Setup status event listener for RequestComplete
+        SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk ); // allow events after reqcomplete
+
+        // register interest
+        TXIMPRequestId reqId = presAuth.WithdrawPresenceGrantFromPresentityL( *identity );
+
+        // Wait for events on the request
+        wrapper->WaitRequestAndStackEvents( reqId );
+        wrapper->VerifyEventStackL( _L8("Subscribing presentity presence, complete with error: ") );
+        // Changed for OPAA-73BCS8
+        // verify that UpdateInterest was called
+        COMMONASSERT( messenger, EXIMPPlgTestWithdrawPresenceFromPresentityCalled, 
+            "WithdrawPresenceForPresentityL was not called",
+            ( a < ( countOfWrappers -1 ) /*a < 2*/ ) ? EFalse : ETrue,
+            "WithdrawPresenceForPresentityL was called" );
+        }
+    
+    CleanupStack::PopAndDestroy( pif );
+    CleanupStack::PopAndDestroy( identity );
+        
+    UnbindAllL();    
+    }
+
+
+// ==============================================================================================
+
+void T_PresenceAuthorization::T_ErrFromPlg_LeaveOnGrantPresenceForPresentity_L()
+    {
+    EUNIT_PRINT( _L("Error from plug-in in grant presence for presentity") );    
+
+// INITIALIZE
+
+    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();
+    MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+
+
+    CXIMPIdentityImp* identity = XIMPTestPresenceDataUtils::GenerateIdentityLC( &KNullDesC8 );
+    CPresenceInfoFilterImp* pif =
+                XIMPTestPresenceDataUtils::GenerateInfoFilterLC( &KPrefix1 );
+
+// GRANT
+
+    messenger->SetLeave( KErrAbort );
+
+    // Setup status event listener for RequestComplete
+    SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_PresentitySubscribeFailKErrAbort );
+
+    // register interest
+    TXIMPRequestId reqId = presAuth.GrantPresenceForPresentityL( *identity, *pif );
+
+    // Wait for events on the request
+    wrapper->WaitRequestAndStackEvents( reqId );
+    // verify that UpdateInterest was called
+    COMMONASSERT( messenger, EXIMPPlgTestGrantPresenceForPresentityCalled, 
+                        "GrantPresenceForPresentityL was not called", EFalse, 
+                        "GrantPresenceForPresentityL was called" );
+
+    messenger->SetLeave( KErrNone );
+
+// DEINITIALIZE
+
+    CleanupStack::PopAndDestroy( 2, identity ); //pif, identity
+    UnbindL();
+    }
+
+
+// ==============================================================================================
+
+void T_PresenceAuthorization::T_ErrFromPlg_LeaveOnWithdrawPresenceFromPresentity_L()
+    {
+    EUNIT_PRINT( _L("Error from plug-in in withdraw presence from presentity") );    
+
+// INITIALIZE
+
+    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();
+    MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+
+
+    CXIMPIdentityImp* identity = XIMPTestPresenceDataUtils::GenerateIdentityLC( &KNullDesC8 );
+    CPresenceInfoFilterImp* pif =
+                XIMPTestPresenceDataUtils::GenerateInfoFilterLC( &KPrefix1 );
+
+// GRANT
+
+    // Setup status event listener for RequestComplete
+    SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+    // register interest
+    TXIMPRequestId reqId = presAuth.GrantPresenceForPresentityL( *identity, *pif );
+
+    // Wait for events on the request
+    wrapper->WaitRequestAndStackEvents( reqId );
+    // verify that UpdateInterest was called
+    COMMONASSERT( messenger, EXIMPPlgTestGrantPresenceForPresentityCalled, 
+                        "GrantPresenceForPresentityL was not called", ETrue, 
+                        "GrantPresenceForPresentityL was called" );
+
+// WITHDRAW
+
+    messenger->SetLeave( KErrAbort );
+
+    SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_PresentitySubscribeFailKErrAbort );
+    // register interest
+    reqId = presAuth.WithdrawPresenceGrantFromPresentityL( *identity );
+
+    // Wait for events on the request
+    wrapper->WaitRequestAndStackEvents( reqId );
+    wrapper->VerifyEventStackL( _L8("Grantin presence to presentity, complete with error: ") );
+    // verify that UpdateInterest was called
+    COMMONASSERT( messenger, EXIMPPlgTestWithdrawPresenceFromPresentityCalled, 
+                        "WithdrawPresenceGrantFromPresentityL was not called", EFalse, 
+                        "WithdrawPresenceGrantFromPresentityL was called" );
+
+    messenger->SetLeave( KErrNone );
+
+// DEINITIALIZE
+
+    CleanupStack::PopAndDestroy( 2, identity ); //pif, identity
+    UnbindL();
+    }
+
+// ==============================================================================================
+
+void T_PresenceAuthorization::T_GrantPresenceForPresentity_Multiple_L()
+    {
+    EUNIT_PRINT( _L("Grant presence for presentity multiple clients") );
+
+    BindAllL();
+
+    CXIMPIdentityImp* identity = XIMPTestPresenceDataUtils::GenerateIdentityLC( &KNullDesC8 );
+    CPresenceInfoFilterImp* pif =
+                XIMPTestPresenceDataUtils::GenerateInfoFilterLC( &KPrefix1 );
+
+// GRANT
+
+    TInt countOfWrappers = iWrapperMgr->WrapperCount();
+    TInt a(0);
+    for( a = 0; a < countOfWrappers; ++a )
+        {
+        CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( a );
+        MXIMPContext* context = wrapper->GetContext();
+        CXIMPTestMessenger* messenger = wrapper->GetMessenger();
+
+        // Tell the protocol it should act normally
+        messenger->SetNoError();
+
+    // Get the interfaces
+    MPresenceFeatures* presFeat = wrapper->GetPresenceFeatures();
+    MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+
+
+        // Setup status event listener for RequestComplete
+        SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+        // register interest
+        TXIMPRequestId reqId = presAuth.GrantPresenceForPresentityL( *identity, *pif );
+
+        // Wait for events on the request
+        wrapper->WaitRequestAndStackEvents( reqId );
+        // verify that UpdateInterest was called
+        COMMONASSERT( messenger, EXIMPPlgTestGrantPresenceForPresentityCalled, 
+            "GrantPresenceForPresentityL was not called",
+            ( a == 0 ) ? ETrue : EFalse,
+            "GrantPresenceForPresentityL was called" );
+        }
+        
+// GRANT AGAIN        
+
+    for( a = 0; a < countOfWrappers; ++a )
+        {
+        CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( a );
+        MXIMPContext* context = wrapper->GetContext();
+        CXIMPTestMessenger* messenger = wrapper->GetMessenger();
+
+        // Tell the protocol it should act normally
+        messenger->SetNoError();
+
+        // Get the interfaces
+        MPresenceFeatures* presFeat = wrapper->GetPresenceFeatures();
+        MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+
+        // Setup status event listener for RequestComplete
+        SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+        messenger->SetValueFor( EXIMPPlgTestGrantPresenceForPresentityCalled, 0 );
+
+        // register interest
+        TXIMPRequestId reqId = presAuth.GrantPresenceForPresentityL( *identity, *pif );
+
+        // Wait for events on the request
+        wrapper->WaitRequestAndStackEvents( reqId );
+        // verify that UpdateInterest was called
+        COMMONASSERT( messenger, EXIMPPlgTestGrantPresenceForPresentityCalled, 
+            "GrantPresenceForPresentityL was not called", EFalse,
+            "GrantPresenceForPresentityL was called" );
+        }
+
+        
+// WITHDRAW
+        
+    for( a = 0; a < countOfWrappers; ++a )
+        {
+        CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( a );
+        MXIMPContext* context = wrapper->GetContext();
+        CXIMPTestMessenger* messenger = wrapper->GetMessenger();
+        
+    // Get the interfaces
+    MPresenceFeatures* presFeat = wrapper->GetPresenceFeatures();
+    MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+
+
+        // Setup status event listener for RequestComplete
+        SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk ); // allow events after reqcomplete
+
+        // register interest
+        TXIMPRequestId reqId = presAuth.WithdrawPresenceGrantFromPresentityL( *identity );
+
+        // Wait for events on the request
+        wrapper->WaitRequestAndStackEvents( reqId );
+        wrapper->VerifyEventStackL( _L8("Subscribing presentity presence, complete with error: ") );
+        // verify that UpdateInterest was called
+        COMMONASSERT( messenger, EXIMPPlgTestWithdrawPresenceFromPresentityCalled, 
+            "WithdrawPresenceForPresentityL was not called",
+            ( a < 2 ) ? EFalse : ETrue,
+            "WithdrawPresenceForPresentityL was called" );
+        }
+    
+    CleanupStack::PopAndDestroy( pif );
+    CleanupStack::PopAndDestroy( identity );
+        
+    UnbindAllL();    
+    }
+
+
+// ==============================================================================================
+
+void T_PresenceAuthorization::T_WithdrawNotGrantedPresenceFromGroupMembers_L()
+    {
+    EUNIT_PRINT( _L("Withdraw presence from group members not granted") );
+
+// INITIALIZE
+
+    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();
+    MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+
+
+    CXIMPIdentityImp* identity = XIMPTestPresenceDataUtils::GenerateIdentityLC( &KNullDesC8 );
+
+// WITHDRAW
+
+    SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+    // register interest
+    TXIMPRequestId reqId = presAuth.WithdrawPresenceGrantFromPresentityGroupMembersL( *identity );
+
+    // Wait for events on the request
+    wrapper->WaitRequestAndStackEvents( reqId );
+    wrapper->VerifyEventStackL( _L8("Withdraw not granted group members, complete with error: ") );
+    // Changed for OPAA-73BCS8
+    COMMONASSERT( messenger, EXIMPPlgTestWithdrawPresenceFromPresentityGroupMembersCalled, 
+                        "WithdrawPresenceGrantFromPresentityGroupMembersL was not called", ETrue/*EFalse*/, 
+                        "WithdrawPresenceGrantFromPresentityGroupMembersL was called" );
+
+// DEINITIALIZE
+
+    CleanupStack::PopAndDestroy( identity ); //identity
+    UnbindL();
+    }
+
+
+// ==============================================================================================
+
+void T_PresenceAuthorization::T_WithdrawNotGrantedPresenceFromGroupMembers_Multiple_L()
+    {
+    EUNIT_PRINT( _L("Withdraw presence from group members not granted multiple clients") );
+
+    BindAllL();
+
+    CXIMPIdentityImp* identity = XIMPTestPresenceDataUtils::GenerateIdentityLC( &KNullDesC8 );
+    CPresenceInfoFilterImp* pif =
+                XIMPTestPresenceDataUtils::GenerateInfoFilterLC( &KPrefix1 );
+
+// GRANT ALL BUT FIRST
+
+    TInt countOfWrappers = iWrapperMgr->WrapperCount();
+    TInt a(0);
+    for( a = countOfWrappers - 1; a >= 1; --a )
+        {
+        CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( a );
+        MXIMPContext* context = wrapper->GetContext();
+        CXIMPTestMessenger* messenger = wrapper->GetMessenger();
+
+        // Tell the protocol it should act normally
+        messenger->SetNoError();
+
+        // Get the interfaces
+        MPresenceFeatures* presFeat = wrapper->GetPresenceFeatures();
+        MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+
+
+        // Setup status event listener for RequestComplete
+        SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+        // register interest
+        TXIMPRequestId reqId = presAuth.GrantPresenceForPresentityGroupMembersL( *identity, *pif );
+
+        // Wait for events on the request
+        wrapper->WaitRequestAndStackEvents( reqId );
+        // verify that UpdateInterest was called
+        COMMONASSERT( messenger, EXIMPPlgTestGrantPresenceForPresentityGroupMembersCalled,
+            "GrantPresenceForPresentityGroupMembersL was not called",
+            ( a > 1 ) ? ETrue : EFalse,
+            "GrantPresenceForPresentityGroupMembersL was called" );
+        }
+        
+// WITHDRAW
+        
+    for( a = 0; a < countOfWrappers; ++a )
+        {
+        CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( a );
+        MXIMPContext* context = wrapper->GetContext();
+        CXIMPTestMessenger* messenger = wrapper->GetMessenger();
+        
+        // Get the interfaces
+        MPresenceFeatures* presFeat = wrapper->GetPresenceFeatures();
+        MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+
+
+        // Setup status event listener for RequestComplete
+        SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk ); // allow events after reqcomplete
+
+        // register interest
+        TXIMPRequestId reqId = presAuth.WithdrawPresenceGrantFromPresentityGroupMembersL( *identity );
+
+        // Wait for events on the request
+        wrapper->WaitRequestAndStackEvents( reqId );
+        wrapper->VerifyEventStackL( _L8("Subscribing presentity presence, complete with error: ") );
+        // Changed for OPAA-73BCS8
+        // verify that UpdateInterest was called
+        COMMONASSERT( messenger, EXIMPPlgTestWithdrawPresenceFromPresentityGroupMembersCalled, 
+            "WithdrawPresenceForPresentityGroupMembersL was not called",
+            ( a < ( countOfWrappers - 1 )/*a < 2*/ ) ? EFalse : ETrue,
+            "WithdrawPresenceForPresentityGroupMembersL was called" );
+        }
+    
+    CleanupStack::PopAndDestroy( pif );
+    CleanupStack::PopAndDestroy( identity );
+        
+    UnbindAllL();    
+    }
+
+// ==============================================================================================
+
+
+void T_PresenceAuthorization::T_GrantPresenceForGroupMembers_Multiple_L()
+    {
+    EUNIT_PRINT( _L("Grant presence for group members multiple clients") );
+
+    BindAllL();
+
+    CXIMPIdentityImp* identity = XIMPTestPresenceDataUtils::GenerateIdentityLC( &KNullDesC8 );
+    CPresenceInfoFilterImp* pif =
+                XIMPTestPresenceDataUtils::GenerateInfoFilterLC( &KPrefix1 );
+
+// GRANT
+
+    TInt countOfWrappers = iWrapperMgr->WrapperCount();
+    TInt a(0);
+    for( a = 0; a < countOfWrappers; ++a )
+        {
+        CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( a );
+        MXIMPContext* context = wrapper->GetContext();
+        CXIMPTestMessenger* messenger = wrapper->GetMessenger();
+
+        // Tell the protocol it should act normally
+        messenger->SetNoError();
+
+        // Get the interfaces
+        MPresenceFeatures* presFeat = wrapper->GetPresenceFeatures();
+        MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+
+
+        // Setup status event listener for RequestComplete
+        SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+        // register interest
+        TXIMPRequestId reqId = presAuth.GrantPresenceForPresentityGroupMembersL( *identity, *pif );
+
+        // Wait for events on the request
+        wrapper->WaitRequestAndStackEvents( reqId );
+        // verify that UpdateInterest was called
+        COMMONASSERT( messenger, EXIMPPlgTestGrantPresenceForPresentityGroupMembersCalled, 
+            "GrantPresenceForPresentityGroupMembersL was not called",
+            ( a == 0 ) ? ETrue : EFalse,
+            "GrantPresenceForPresentityGroupMembersL was called" );
+        }
+        
+// GRANT AGAIN        
+
+    for( a = 0; a < countOfWrappers; ++a )
+        {
+        CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( a );
+        MXIMPContext* context = wrapper->GetContext();
+        CXIMPTestMessenger* messenger = wrapper->GetMessenger();
+
+        // Tell the protocol it should act normally
+        messenger->SetNoError();
+
+        // Get the interfaces
+        MPresenceFeatures* presFeat = wrapper->GetPresenceFeatures();
+        MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+
+
+        // Setup status event listener for RequestComplete
+        SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+        messenger->SetValueFor( EXIMPPlgTestGrantPresenceForPresentityGroupMembersCalled, 0 );        
+
+        // register interest
+        TXIMPRequestId reqId = presAuth.GrantPresenceForPresentityGroupMembersL( *identity, *pif );
+
+        // Wait for events on the request
+        wrapper->WaitRequestAndStackEvents( reqId );
+        // verify that UpdateInterest was called
+        COMMONASSERT( messenger, EXIMPPlgTestGrantPresenceForPresentityGroupMembersCalled, 
+            "GrantPresenceForPresentityGroupMembersL was not called", EFalse,
+            "GrantPresenceForPresentityGroupMembersL was called" );
+        }
+
+        
+// WITHDRAW
+        
+    for( a = 0; a < countOfWrappers; ++a )
+        {
+        CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( a );
+        MXIMPContext* context = wrapper->GetContext();
+        CXIMPTestMessenger* messenger = wrapper->GetMessenger();
+        
+    // Get the interfaces
+    MPresenceFeatures* presFeat = wrapper->GetPresenceFeatures();
+    MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+
+
+        // Setup status event listener for RequestComplete
+        SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk ); // allow events after reqcomplete
+
+        // register interest
+        TXIMPRequestId reqId = presAuth.WithdrawPresenceGrantFromPresentityGroupMembersL( *identity );
+
+        // Wait for events on the request
+        wrapper->WaitRequestAndStackEvents( reqId );
+        wrapper->VerifyEventStackL( _L8("Subscribing presentity presence, complete with error: ") );
+        // verify that UpdateInterest was called
+        COMMONASSERT( messenger, EXIMPPlgTestWithdrawPresenceFromPresentityGroupMembersCalled, 
+            "WithdrawPresenceForPresentityGroupMembersL was not called",
+            ( a < 2 ) ? EFalse : ETrue,
+            "WithdrawPresenceForPresentityGroupMembersL was called" );
+        }
+    
+    CleanupStack::PopAndDestroy( pif );
+    CleanupStack::PopAndDestroy( identity );
+        
+    UnbindAllL();    
+    }
+
+// ==============================================================================================
+
+void T_PresenceAuthorization::T_ErrFromPlg_LeaveOnGrantPresenceForGroupMembers_L()
+    {
+    EUNIT_PRINT( _L("Error from plug-in in grant presence for group members") );    
+
+// INITIALIZE
+
+    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();
+    MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+
+    CXIMPIdentityImp* identity = XIMPTestPresenceDataUtils::GenerateIdentityLC( &KNullDesC8 );
+    CPresenceInfoFilterImp* pif =
+                XIMPTestPresenceDataUtils::GenerateInfoFilterLC( &KPrefix1 );
+
+// GRANT
+
+    messenger->SetLeave( KErrAbort );
+
+    // Setup status event listener for RequestComplete
+    SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_PresentitySubscribeFailKErrAbort );
+
+    // register interest
+    TXIMPRequestId reqId = presAuth.GrantPresenceForPresentityGroupMembersL( *identity, *pif );
+
+    // Wait for events on the request
+    wrapper->WaitRequestAndStackEvents( reqId );
+    // verify that UpdateInterest was called
+    COMMONASSERT( messenger, EXIMPPlgTestGrantPresenceForPresentityGroupMembersCalled, 
+                        "GrantPresenceForPresentityGroupMembersL was not called", EFalse, 
+                        "GrantPresenceForPresentityGroupMembersL was called" );
+
+    messenger->SetLeave( KErrNone );
+
+// DEINITIALIZE
+
+    CleanupStack::PopAndDestroy( 2, identity ); //pif, identity
+    UnbindL();
+    }
+
+// ==============================================================================================
+
+void T_PresenceAuthorization::T_ErrFromPlg_LeaveOnWithdrawPresenceFromGroupMembers_L()
+    {
+    EUNIT_PRINT( _L("Error from plug-in in withdraw presence from group members") );    
+
+// INITIALIZE
+
+    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();
+    MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+
+    CXIMPIdentityImp* identity = XIMPTestPresenceDataUtils::GenerateIdentityLC( &KNullDesC8 );
+    CPresenceInfoFilterImp* pif =
+                XIMPTestPresenceDataUtils::GenerateInfoFilterLC( &KPrefix1 );
+
+// GRANT
+
+    // Setup status event listener for RequestComplete
+    SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+    // register interest
+    TXIMPRequestId reqId = presAuth.GrantPresenceForPresentityGroupMembersL( *identity, *pif );
+
+    // Wait for events on the request
+    wrapper->WaitRequestAndStackEvents( reqId );
+    // verify that UpdateInterest was called
+    COMMONASSERT( messenger, EXIMPPlgTestGrantPresenceForPresentityGroupMembersCalled, 
+                        "GrantPresenceForPresentityGroupMembersL was not called", ETrue, 
+                        "GrantPresenceForPresentityGroupMembersL was called" );
+
+// WITHDRAW
+
+    messenger->SetLeave( KErrAbort );
+
+    SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_PresentitySubscribeFailKErrAbort );
+    // register interest
+    reqId = presAuth.WithdrawPresenceGrantFromPresentityGroupMembersL( *identity );
+
+    // Wait for events on the request
+    wrapper->WaitRequestAndStackEvents( reqId );
+    wrapper->VerifyEventStackL( _L8("Grantin presence to presentity, complete with error: ") );
+    // verify that UpdateInterest was called
+    COMMONASSERT( messenger, EXIMPPlgTestWithdrawPresenceFromPresentityGroupMembersCalled, 
+                        "WithdrawPresenceGrantFromPresentityGroupMembersL was not called", EFalse, 
+                        "WithdrawPresenceGrantFromPresentityGroupMembersL was called" );
+
+    messenger->SetLeave( KErrNone );
+
+// DEINITIALIZE
+
+    CleanupStack::PopAndDestroy( 2, identity ); //pif, identity
+    UnbindL();
+    }
+
+// ==============================================================================================
+
+// To Everyone, empty filter
+void T_PresenceAuthorization::T_GrantPresenceForEveryone_L()
+    {
+    EUNIT_PRINT( _L("Grant presence for everyone") );
+
+    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();
+    MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+
+    CPresenceInfoFilterImp* pif = XIMPTestPresenceDataUtils::GenerateInfoFilterLC( &KPrefix1 );
+
+// GRANT
+
+    // Setup status event listener for RequestComplete
+    SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+    TXIMPRequestId reqId = presAuth.GrantPresenceForEveryoneL( *pif );
+
+    // Wait for events on the request
+    wrapper->WaitRequestAndStackEvents( reqId );
+    // verify that UpdateInterest was called
+    COMMONASSERT( messenger, EXIMPPlgTestGrantPresenceForEveryoneCalled, "GrantPresenceForEveryoneL was not called", ETrue, NULL );
+
+// GRANT AGAIN
+
+    // Setup status event listener for RequestComplete
+    SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+    messenger->SetValueFor( EXIMPPlgTestGrantPresenceForEveryoneCalled, 0 );    
+
+    reqId = presAuth.GrantPresenceForEveryoneL( *pif );
+
+    // Wait for events on the request
+    wrapper->WaitRequestAndStackEvents( reqId );
+    // verify that UpdateInterest was called
+    COMMONASSERT( messenger, EXIMPPlgTestGrantPresenceForEveryoneCalled, "GrantPresenceForEveryoneL was not called", EFalse, "GrantPresenceForEveryoneL was called" );
+
+// WITHDRAW
+
+    SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+    // register interest
+    reqId = presAuth.WithdrawPresenceGrantFromEveryoneL();
+
+    // Wait for events on the request
+    wrapper->WaitRequestAndStackEvents( reqId );
+    wrapper->VerifyEventStackL( _L8("Granting presence to everyone, complete with error: ") );
+    // verify that UpdateInterest was called
+    COMMONASSERT( messenger, EXIMPPlgTestWithdrawPresenceFromEveryoneCalled, "WithdrawPresenceForEveryoneL was not called", ETrue, NULL );
+
+    CleanupStack::PopAndDestroy( pif ); //pif
+    UnbindL();
+    }    
+    
+// ==============================================================================================
+
+void T_PresenceAuthorization::T_ErrFromPlg_LeaveOnGrantPresenceForEveryone_L()
+    {
+    EUNIT_PRINT( _L("Error from plug-in in grant presence for everyone") );    
+
+// INITIALIZE
+
+    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();
+    MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+
+    CPresenceInfoFilterImp* pif =
+                XIMPTestPresenceDataUtils::GenerateInfoFilterLC( &KPrefix1 );
+
+// GRANT
+
+    messenger->SetLeave( KErrAbort );
+
+    // Setup status event listener for RequestComplete
+    SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_PresentitySubscribeFailKErrAbort );
+
+    // register interest
+    TXIMPRequestId reqId = presAuth.GrantPresenceForEveryoneL( *pif );
+
+    // Wait for events on the request
+    wrapper->WaitRequestAndStackEvents( reqId );
+    // verify that UpdateInterest was called
+    COMMONASSERT( messenger, EXIMPPlgTestGrantPresenceForEveryoneCalled, 
+                        "GrantPresenceForEveryoneL was not called", EFalse, 
+                        "GrantPresenceForEveryoneL was called" );
+
+    messenger->SetLeave( KErrNone );
+
+// DEINITIALIZE
+
+    CleanupStack::PopAndDestroy( pif ); //pif
+    UnbindL();
+    }
+
+// ==============================================================================================
+
+void T_PresenceAuthorization::T_GrantPresenceForEveryone_Multiple_L()
+    {
+    EUNIT_PRINT( _L("Grant presence for presentity multiple clients") );
+
+    BindAllL();
+
+    CPresenceInfoFilterImp* pif =
+                XIMPTestPresenceDataUtils::GenerateInfoFilterLC( &KPrefix1 );
+
+// GRANT
+
+    TInt countOfWrappers = iWrapperMgr->WrapperCount();
+    TInt a(0);
+    for( a = 0; a < countOfWrappers; ++a )
+        {
+        CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( a );
+        MXIMPContext* context = wrapper->GetContext();
+        CXIMPTestMessenger* messenger = wrapper->GetMessenger();
+
+        // Tell the protocol it should act normally
+        messenger->SetNoError();
+
+        // Get the interfaces
+        MPresenceFeatures* presFeat = wrapper->GetPresenceFeatures();
+        MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+
+        // Setup status event listener for RequestComplete
+        SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+        // register interest
+        TXIMPRequestId reqId = presAuth.GrantPresenceForEveryoneL( *pif );
+
+        // Wait for events on the request
+        wrapper->WaitRequestAndStackEvents( reqId );
+        // verify that UpdateInterest was called
+        COMMONASSERT( messenger, EXIMPPlgTestGrantPresenceForEveryoneCalled, 
+            "GrantPresenceForEveryoneL was not called",
+            ( a == 0 ) ? ETrue : EFalse,
+            "GrantPresenceForEveryoneL was called" );
+        }
+        
+// GRANT AGAIN        
+
+    for( a = 0; a < countOfWrappers; ++a )
+        {
+        CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( a );
+        MXIMPContext* context = wrapper->GetContext();
+        CXIMPTestMessenger* messenger = wrapper->GetMessenger();
+
+        // Tell the protocol it should act normally
+        messenger->SetNoError();
+
+        // Get the interfaces
+        MPresenceFeatures* presFeat = wrapper->GetPresenceFeatures();
+        MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+
+        // Setup status event listener for RequestComplete
+        SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+        messenger->SetValueFor( EXIMPPlgTestGrantPresenceForEveryoneCalled, 0 );
+
+
+        // register interest
+        TXIMPRequestId reqId = presAuth.GrantPresenceForEveryoneL( *pif );
+
+        // Wait for events on the request
+        wrapper->WaitRequestAndStackEvents( reqId );
+        // verify that UpdateInterest was called
+        COMMONASSERT( messenger, EXIMPPlgTestGrantPresenceForEveryoneCalled, 
+            "GrantPresenceForEveryoneL was not called", EFalse,
+            "GrantPresenceForEveryoneL was called" );
+        }
+
+        
+// WITHDRAW
+        
+    for( a = 0; a < countOfWrappers; ++a )
+        {
+        CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( a );
+        MXIMPContext* context = wrapper->GetContext();
+        CXIMPTestMessenger* messenger = wrapper->GetMessenger();
+        
+    // Get the interfaces
+    MPresenceFeatures* presFeat = wrapper->GetPresenceFeatures();
+    MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+
+        // Setup status event listener for RequestComplete
+        SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk ); // allow events after reqcomplete
+
+        // register interest
+        TXIMPRequestId reqId = presAuth.WithdrawPresenceGrantFromEveryoneL();
+
+        // Wait for events on the request
+        wrapper->WaitRequestAndStackEvents( reqId );
+        wrapper->VerifyEventStackL( _L8("Subscribing presentity presence, complete with error: ") );
+        // verify that UpdateInterest was called
+        COMMONASSERT( messenger, EXIMPPlgTestWithdrawPresenceFromEveryoneCalled, 
+            "WithdrawPresenceGrantFromEveryoneL was not called",
+            ( a < 2 ) ? EFalse : ETrue,
+            "WithdrawPresenceGrantFromEveryoneL was called" );
+        }
+    
+    CleanupStack::PopAndDestroy( pif );
+        
+    UnbindAllL();    
+    }
+
+
+// ==============================================================================================
+
+void T_PresenceAuthorization::T_ErrFromPlg_LeaveOnWithdrawPresenceFromEveryone_L()
+    {
+    EUNIT_PRINT( _L("Error from plug-in in withdraw presence from everyone") );    
+
+// INITIALIZE
+
+    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();
+    MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+
+    CPresenceInfoFilterImp* pif =
+                XIMPTestPresenceDataUtils::GenerateInfoFilterLC( &KPrefix1 );
+
+// GRANT
+
+    // Setup status event listener for RequestComplete
+    SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+    // register interest
+    TXIMPRequestId reqId = presAuth.GrantPresenceForEveryoneL( *pif );
+
+    // Wait for events on the request
+    wrapper->WaitRequestAndStackEvents( reqId );
+    // verify that UpdateInterest was called
+    COMMONASSERT( messenger, EXIMPPlgTestGrantPresenceForEveryoneCalled, 
+                        "GrantPresenceForEveryoneL was not called", ETrue, 
+                        "GrantPresenceForEveryoneL was called" );
+
+// WITHDRAW
+
+    messenger->SetLeave( KErrAbort );
+
+    SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_PresentitySubscribeFailKErrAbort );
+    // register interest
+    reqId = presAuth.WithdrawPresenceGrantFromEveryoneL();
+
+    // Wait for events on the request
+    wrapper->WaitRequestAndStackEvents( reqId );
+    wrapper->VerifyEventStackL( _L8("Grantin presence to presentity, complete with error: ") );
+    // verify that UpdateInterest was called
+    COMMONASSERT( messenger, EXIMPPlgTestWithdrawPresenceFromPresentityCalled, 
+                        "WithdrawPresenceGrantFromEveryoneL was not called", EFalse, 
+                        "WithdrawPresenceGrantFromEveryoneL was called" );
+
+    messenger->SetLeave( KErrNone );
+
+// DEINITIALIZE
+
+    CleanupStack::PopAndDestroy( pif ); //pif
+    UnbindL();
+    }
+    
+    
+
+// ==============================================================================================
+
+void T_PresenceAuthorization::T_GrantPresenceForGroupMembers_L()
+    {
+    EUNIT_PRINT( _L("Grant presence for presentity group members") );
+
+    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();
+    MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+
+    CXIMPIdentityImp* identity = XIMPTestPresenceDataUtils::GenerateIdentityLC( &KNullDesC8 );
+    CPresenceInfoFilterImp* pif =
+                XIMPTestPresenceDataUtils::GenerateInfoFilterLC( &KPrefix1 );
+
+// GRANT
+
+    // Setup status event listener for RequestComplete
+    SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+    // register interest
+    TXIMPRequestId reqId = presAuth.GrantPresenceForPresentityGroupMembersL( *identity, *pif );
+
+    // Wait for events on the request
+    wrapper->WaitRequestAndStackEvents( reqId );
+    // verify that UpdateInterest was called
+    COMMONASSERT( messenger, EXIMPPlgTestGrantPresenceForPresentityGroupMembersCalled, "GrantPresenceForPresentityGroupMembers was not called", ETrue, NULL );
+
+    // Setup status event listener for RequestComplete
+    SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk ); // allow events after reqcomplete
+
+// GRANT AGAIN
+
+    // Setup status event listener for RequestComplete
+    SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+    messenger->SetValueFor( EXIMPPlgTestGrantPresenceForPresentityGroupMembersCalled, 0 );
+     
+    reqId = presAuth.GrantPresenceForPresentityGroupMembersL( *identity, *pif );
+
+    // Wait for events on the request
+    wrapper->WaitRequestAndStackEvents( reqId );
+    // verify that UpdateInterest was called
+    COMMONASSERT( messenger, EXIMPPlgTestGrantPresenceForPresentityGroupMembersCalled, "GrantPresenceForPresentityGroupMembers was not called", EFalse, "GrantPresenceForPresentityGroupMembers was called" );
+
+    // Setup status event listener for RequestComplete
+    SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk ); // allow events after reqcomplete
+
+// WITHDRAW
+    // register interest
+    reqId = presAuth.WithdrawPresenceGrantFromPresentityGroupMembersL( *identity );
+
+    // Wait for events on the request
+    wrapper->WaitRequestAndStackEvents( reqId );
+    wrapper->VerifyEventStackL( _L8("Granting presence for presentity group members complete with error: ") );
+    // verify that UpdateInterest was called
+    COMMONASSERT( messenger, EXIMPPlgTestWithdrawPresenceFromPresentityGroupMembersCalled, "WithdrawPresenceFromPresentityGroupMembers was not called", ETrue, NULL );
+
+    CleanupStack::PopAndDestroy( 2, identity ); //pif, identity
+    UnbindL();
+    }
+
+// ==============================================================================================
+
+void T_PresenceAuthorization::T_GrantPresenceForGroupMembersChangeId_L()
+    {
+    EUNIT_PRINT( _L("Grant presence for presentity group members change id") );
+
+// INITIALIZE
+
+    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();
+    MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+
+// ID CHANGE REQUEST TO ADAPTATION
+
+    MXIMPIdentity* identityParam = context->ObjectFactory().NewIdentityLC();
+    identityParam->SetIdentityL( KIdentity );
+    
+    CXIMPIdentityImp* identityParamImp =
+             ( CXIMPIdentityImp* ) identityParam->GetInterface(
+                                        CXIMPIdentityImp::KClassId,
+                                        MXIMPBase::EPanicIfUnknown );
+    HBufC8* packedId = TXIMPObjectPacker< CXIMPIdentityImp >::PackL( *identityParamImp );
+    CleanupStack::PopAndDestroy(); // identityParam
+    CleanupStack::PushL( packedId );
+    CXIMPTestFileSrvMsg* srvMsg = CXIMPTestFileSrvMsg::NewL( CXIMPTestFileSrvMsg::ETestSrvMsgReqParamIdentity, 
+                                                             *packedId );
+    CleanupStack::PopAndDestroy( packedId );
+    CleanupStack::PushL( srvMsg );
+    wrapper->FileTool().SrvMsgStoreL( srvMsg );
+    CleanupStack::PopAndDestroy( srvMsg );
+
+    // Wait for server to handle srvmsg.
+    CXIMPTestWaitHelper* wait = CXIMPTestWaitHelper::NewL();
+    CleanupStack::PushL( wait );
+    wait->WaitForL( 2 );
+    CleanupStack::PopAndDestroy( wait );
+
+// GRANT
+
+    // Setup status event listener for RequestComplete
+    SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+    CXIMPIdentityImp* identity = XIMPTestPresenceDataUtils::GenerateIdentityLC( &KNullDesC8 );
+    CPresenceInfoFilterImp* pif =
+                XIMPTestPresenceDataUtils::GenerateInfoFilterLC( &KPrefix1 );
+
+    // register interest
+    TXIMPRequestId reqId = presAuth.GrantPresenceForPresentityGroupMembersL( *identity, *pif );
+
+    // Wait for events on the request
+    wrapper->WaitRequestAndStackEvents( reqId );
+    // verify that UpdateInterest was called
+    COMMONASSERT( messenger, EXIMPPlgTestGrantPresenceForPresentityGroupMembersCalled, "GrantPresenceForPresentityGroupMembers was not called", ETrue, NULL );
+
+// DEINITIALIZE
+
+    CleanupStack::PopAndDestroy( 2, identity ); //pif, identity
+    UnbindL();
+    }
+
+
+// ==============================================================================================
+
+void T_PresenceAuthorization::T_WithdrawNotGrantedPresenceFromEveryone_L()
+    {
+    EUNIT_PRINT( _L("Withdraw presence from everyone not granted") );
+
+// INITIALIZE
+
+    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();
+    MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+
+// WITHDRAW
+
+    SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+    // register interest
+    TXIMPRequestId reqId = presAuth.WithdrawPresenceGrantFromEveryoneL();
+
+    // Wait for events on the request
+    wrapper->WaitRequestAndStackEvents( reqId );
+    // Changed for OPAA-73BCS8
+    wrapper->VerifyEventStackL( _L8("Withdraw not granted everyone, complete with error: ") );
+    COMMONASSERT( messenger, EXIMPPlgTestWithdrawPresenceFromEveryoneCalled, 
+                        "WithdrawPresenceGrantFromEveryoneL was not called", ETrue /*EFalse*/, 
+                        "WithdrawPresenceGrantFromEveryoneL was called" );
+
+// DEINITIALIZE
+    UnbindL();
+    }
+
+
+// ==============================================================================================
+
+void T_PresenceAuthorization::T_WithdrawNotGrantedPresenceFromEveryone_Multiple_L()
+    {
+    EUNIT_PRINT( _L("Withdraw presence from everyone not granted multiple clients") );
+
+    BindAllL();
+
+    CPresenceInfoFilterImp* pif =
+                XIMPTestPresenceDataUtils::GenerateInfoFilterLC( &KPrefix1 );
+
+// GRANT ALL BUT FIRST
+
+    TInt countOfWrappers = iWrapperMgr->WrapperCount();
+    TInt a(0);
+    for( a = countOfWrappers - 1; a >= 1; --a )
+        {
+        CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( a );
+        MXIMPContext* context = wrapper->GetContext();
+        CXIMPTestMessenger* messenger = wrapper->GetMessenger();
+
+        // Tell the protocol it should act normally
+        messenger->SetNoError();
+
+        // Get the interfaces
+        MPresenceFeatures* presFeat = wrapper->GetPresenceFeatures();
+        MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+
+        // Setup status event listener for RequestComplete
+        SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+
+        // register interest
+        TXIMPRequestId reqId = presAuth.GrantPresenceForEveryoneL( *pif );
+
+        // Wait for events on the request
+        wrapper->WaitRequestAndStackEvents( reqId );
+        // verify that UpdateInterest was called
+        COMMONASSERT( messenger, EXIMPPlgTestGrantPresenceForEveryoneCalled,
+            "GrantPresenceForEveryoneL was not called",
+            ( a > 1 ) ? ETrue : EFalse,
+            "GrantPresenceForEveryoneL was called" );
+        }
+        
+// WITHDRAW
+        
+    for( a = 0; a < countOfWrappers; ++a )
+        {
+        CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( a );
+        MXIMPContext* context = wrapper->GetContext();
+        CXIMPTestMessenger* messenger = wrapper->GetMessenger();
+        
+        // Get the interfaces
+        MPresenceFeatures* presFeat = wrapper->GetPresenceFeatures();
+        MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+
+        // Setup status event listener for RequestComplete
+        SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk ); // allow events after reqcomplete
+
+        // register interest
+        TXIMPRequestId reqId = presAuth.WithdrawPresenceGrantFromEveryoneL();
+
+        // Wait for events on the request
+        wrapper->WaitRequestAndStackEvents( reqId );
+        wrapper->VerifyEventStackL( _L8("Subscribing presentity presence, complete with error: ") );
+        // verify that UpdateInterest was called
+        // Changed for OPAA-73BCS8
+        COMMONASSERT( messenger, EXIMPPlgTestWithdrawPresenceFromEveryoneCalled, 
+            "WithdrawPresenceGrantFromEveryoneL was not called",
+            ( a < ( countOfWrappers -1 )/*a < 2^*/ ) ? EFalse : ETrue,
+            "WithdrawPresenceGrantFromEveryoneL was called" );
+        }
+    
+    CleanupStack::PopAndDestroy( pif );
+        
+    UnbindAllL();    
+    }
+
+
+// ==============================================================================================
+void T_PresenceAuthorization::T_MakeAndGrantGroup_WithdrawOneID_L()
+    {
+    EUNIT_PRINT( _L("T_MakeAndGrantGroup_WithdrawOneID_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();
+    MPresenceAuthorization& presAuth = presFeat->PresenceAuthorization();
+    MPresentityGroups& presGroup = presFeat->PresentityGroups();
+    
+    
+    // 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;
+    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 1
+    
+    CXIMPTestListener* listener4 = CXIMPTestListener::NewL( context );
+    CleanupStack::PushL( listener4 );    // << listener4
+    
+    MXIMPIdentity* member = context->ObjectFactory().NewIdentityLC(); // << member
+    member->SetIdentityL( KIdentity1_16 );
+
+
+    // 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( KIdentity1_16 );
+    // member info
+    CPresentityGroupMemberInfoImp* memInfoImp =
+        CPresentityGroupMemberInfoImp::NewLC( *miId, KIdentity1_16 );
+    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, KIdentity1_16 );
+
+    // and wait
+    EUNIT_ASSERT_DESC( KErrNone == listener4->WaitAndAssertL(), "AddPresentityGroupMemberL (not subscribed) failed" );
+
+    messenger->AssertAddPresentityGroupMemberCalled( ETrue );
+    CleanupStack::PopAndDestroy(); // >>> member
+    CleanupStack::PopAndDestroy( listener4 );// >>> listener4
+    
+    // ADD PRESENTITY GROUP MEMBER 2
+    
+    listener4 = CXIMPTestListener::NewL( context );
+    CleanupStack::PushL( listener4 );    // << listener4
+    
+    member = context->ObjectFactory().NewIdentityLC(); // << member
+    member->SetIdentityL( KIdentity2_16 );
+
+
+    // request complete
+    evReqComplete = CXIMPRequestCompleteEventImp::NewLC( reqIdDummy );
+
+    // group id
+    //delete identity2;
+    identity2 = CXIMPIdentityImp::NewLC( groupId->Identity() );
+    evReqComplete->AppendParamL( identity2 );
+    CleanupStack::Pop(identity2); // identity2
+
+    // id for member info
+    miId = CXIMPIdentityImp::NewLC( KIdentity2_16 );
+    // member info
+    memInfoImp = CPresentityGroupMemberInfoImp::NewLC( *miId, KIdentity2_16 );
+    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, KIdentity2_16 );
+
+    // and wait
+    EUNIT_ASSERT_DESC( KErrNone == listener4->WaitAndAssertL(), "AddPresentityGroupMemberL (not subscribed) failed" );
+
+    messenger->AssertAddPresentityGroupMemberCalled( ETrue );
+    CleanupStack::PopAndDestroy(); // >>> member
+    CleanupStack::PopAndDestroy( listener4 );// >>> listener4
+
+    // ADD PRESENTITY GROUP MEMBER 3
+    
+    //delete identity2;
+    listener4 = CXIMPTestListener::NewL( context );
+    CleanupStack::PushL( listener4 );    // << listener4
+    
+    member = context->ObjectFactory().NewIdentityLC(); // << member
+    member->SetIdentityL( KIdentity3_16 );
+
+
+    // request complete
+    evReqComplete = CXIMPRequestCompleteEventImp::NewLC( reqIdDummy );
+
+    // group id
+    identity2 = CXIMPIdentityImp::NewLC( groupId->Identity() );
+    evReqComplete->AppendParamL( identity2 );
+    CleanupStack::Pop(identity2); // identity2
+
+    // id for member info
+    miId = CXIMPIdentityImp::NewLC( KIdentity3_16 );
+    // member info
+    memInfoImp = CPresentityGroupMemberInfoImp::NewLC( *miId, KIdentity3_16 );
+    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, KIdentity3_16 );
+
+    // and wait
+    EUNIT_ASSERT_DESC( KErrNone == listener4->WaitAndAssertL(), "AddPresentityGroupMemberL (not subscribed) failed" );
+
+    messenger->AssertAddPresentityGroupMemberCalled( ETrue );
+    CleanupStack::PopAndDestroy(); // >>> member
+    CleanupStack::PopAndDestroy( listener4 );// >>> listener4
+
+
+    // 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); // 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 ggroup;
+    delete ggpif;
+
+
+    // Withdraw one of group's member's ID
+    
+    MXIMPIdentity* identity = context->ObjectFactory().NewIdentityLC();
+    identity->SetIdentityL( KIdentity2_16 ); // << identity
+
+    
+    SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
+    // register interest
+    reqId = presAuth.WithdrawPresenceGrantFromPresentityL( *identity );
+
+    // Wait for events on the request
+    wrapper->WaitRequestAndStackEvents( reqId );
+    wrapper->VerifyEventStackL( _L8("Grantin presence to presentity, complete with error: ") );
+    
+    // Changed for OPAA-73BCS8
+    // verify that UpdateInterest was called
+    COMMONASSERT( messenger, EXIMPPlgTestWithdrawPresenceFromPresentityCalled, 
+                        "WithdrawPresenceForPresentityL was not called", ETrue/*EFalse*/, 
+                        "WithdrawPresenceForPresentityL was called" );
+                            
+    CleanupStack::PopAndDestroy(); // identity
+    delete groupId;
+
+    UnbindL();
+    
+    wrapper = NULL;
+    context = NULL;
+    messenger = NULL;
+    }
+
+
+// ===========================================================================
+// SETUP HELPERS FOR THE LISTENER
+// ===========================================================================
+//
+void T_PresenceAuthorization::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_PresenceAuthorization::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
+    }
+
+// ===========================================================================
+// TEST CASE TABLE
+// ===========================================================================
+//
+EUNIT_BEGIN_TEST_TABLE(
+        T_PresenceAuthorization,
+        "XIMP presence authorization tests",
+        "MODULE" )
+
+PRFW_DECORATED_TEST(
+        "Grant presence for presentity",
+        "",
+        "",
+        "FUNCTIONALITY",
+        Setup_L,
+        T_GrantPresenceForPresentity_L,
+        Teardown )
+
+        
+PRFW_DECORATED_TEST(
+        "MakeAndGrantGroup_WithdrawOneID",
+        "",
+        "",
+        "FUNCTIONALITY",
+        Setup_L,
+        T_MakeAndGrantGroup_WithdrawOneID_L,
+        Teardown )
+        
+        
+PRFW_DECORATED_TEST(
+        "Grant presence for presentity multiple",
+        "",
+        "",
+        "FUNCTIONALITY",
+        SetupMultiple_L,
+        T_GrantPresenceForPresentity_Multiple_L,
+        Teardown )
+
+
+PRFW_DECORATED_TEST(
+        "Withdraw not granted presence for presentity",
+        "",
+        "",
+        "FUNCTIONALITY",
+        Setup_L,
+        T_WithdrawNotGrantedPresenceFromPresentity_L,
+        Teardown )
+
+
+PRFW_DECORATED_TEST(
+        "Grant presence for presentity change id",
+        "",
+        "",
+        "FUNCTIONALITY",
+        Setup_L,
+        T_GrantPresenceForPresentityChangeId_L,
+        Teardown )
+
+PRFW_DECORATED_TEST(
+        "Grant presence for group members change id",
+        "",
+        "",
+        "FUNCTIONALITY",
+        Setup_L,
+        T_GrantPresenceForGroupMembersChangeId_L,
+        Teardown )
+
+
+PRFW_DECORATED_TEST(
+        "Withdraw not granted presence from presentity multiple",
+        "",
+        "",
+        "FUNCTIONALITY",
+        SetupMultiple_L,
+        T_WithdrawNotGrantedPresenceFromPresentity_Multiple_L,
+        Teardown )
+
+PRFW_DECORATED_TEST(
+        "ErrorPlugin - Leave on grant",
+        "",
+        "",
+        "ERRORHANDLING",
+        Setup_L,
+        T_ErrFromPlg_LeaveOnGrantPresenceForPresentity_L,
+        Teardown )
+
+PRFW_DECORATED_TEST(
+        "ErrorPlugin - Leave on withdraw",
+        "",
+        "",
+        "ERRORHANDLING",
+        Setup_L,
+        T_ErrFromPlg_LeaveOnWithdrawPresenceFromPresentity_L,
+        Teardown )
+
+PRFW_DECORATED_TEST(
+        "Withdraw not granted presence for group members",
+        "",
+        "",
+        "FUNCTIONALITY",
+        Setup_L,
+        T_WithdrawNotGrantedPresenceFromGroupMembers_L,
+        Teardown )
+
+PRFW_DECORATED_TEST(
+        "Withdraw not granted presence for group members multiple",
+        "",
+        "",
+        "FUNCTIONALITY",
+        SetupMultiple_L,
+        T_WithdrawNotGrantedPresenceFromGroupMembers_Multiple_L,
+        Teardown )
+
+PRFW_DECORATED_TEST(
+        "Grant presence for group members",
+        "",
+        "",
+        "FUNCTIONALITY",
+        Setup_L,
+        T_GrantPresenceForGroupMembers_L,
+        Teardown )
+
+
+PRFW_DECORATED_TEST(
+        "Grant presence for group members multiple",
+        "",
+        "",
+        "FUNCTIONALITY",
+        SetupMultiple_L,
+        T_GrantPresenceForGroupMembers_Multiple_L,
+        Teardown )
+
+
+PRFW_DECORATED_TEST(
+        "ErrorPlugin - Leave on withdraw for group members",
+        "",
+        "",
+        "ERRORHANDLING",
+        Setup_L,
+        T_ErrFromPlg_LeaveOnGrantPresenceForGroupMembers_L,
+        Teardown )
+
+PRFW_DECORATED_TEST(
+        "ErrorPlugin - Leave on withdraw from group members",
+        "",
+        "",
+        "ERRORHANDLING",
+        Setup_L,
+        T_ErrFromPlg_LeaveOnWithdrawPresenceFromGroupMembers_L,
+        Teardown )
+
+PRFW_DECORATED_TEST(
+        "Grant presence for everyone",
+        "",
+        "",
+        "FUNCTIONALITY",
+        Setup_L,
+        T_GrantPresenceForEveryone_L,
+        Teardown )
+        
+PRFW_DECORATED_TEST(
+        "ErrorPlugin - Leave on grant to everyone",
+        "",
+        "",
+        "ERRORHANDLING",
+        Setup_L,
+        T_ErrFromPlg_LeaveOnGrantPresenceForEveryone_L,
+        Teardown )
+
+PRFW_DECORATED_TEST(
+        "ErrorPlugin - Leave on withdraw from everyone",
+        "",
+        "",
+        "ERRORHANDLING",
+        Setup_L,
+        T_ErrFromPlg_LeaveOnWithdrawPresenceFromEveryone_L,
+        Teardown )
+
+PRFW_DECORATED_TEST(
+        "Grant presence for everyone multiple ",
+        "",
+        "",
+        "FUNCTIONALITY",
+        SetupMultiple_L,
+        T_GrantPresenceForEveryone_Multiple_L,
+        Teardown )
+
+PRFW_DECORATED_TEST(
+        "Withdraw not granted presence from everyone",
+        "",
+        "",
+        "FUNCTIONALITY",
+        Setup_L,
+        T_WithdrawNotGrantedPresenceFromEveryone_L,
+        Teardown )
+
+PRFW_DECORATED_TEST(
+        "Withdraw not granted presence from everyone multiple",
+        "",
+        "",
+        "FUNCTIONALITY",
+        SetupMultiple_L,
+        T_WithdrawNotGrantedPresenceFromEveryone_Multiple_L,
+        Teardown )
+        
+
+EUNIT_END_TEST_TABLE
+
+
+// ===========================================================================
+// TEST SUITE CONSTRUCTION
+// ===========================================================================
+//
+EXPORT_C MEUnitTest* CreateTestSuiteL()
+    {
+    return T_PresenceAuthorization::NewL();
+    }
+
+
+
+// end of file