videoutils_plat/videoconnutility_api/tsrc/src/VCXConnUtilTestBlocks.cpp
branchRCL_3
changeset 48 13a33d82ad98
parent 0 822a42b6c3f1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videoutils_plat/videoconnutility_api/tsrc/src/VCXConnUtilTestBlocks.cpp	Wed Sep 01 12:20:37 2010 +0100
@@ -0,0 +1,1381 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:   ?Description*
+*/
+
+
+// [INCLUDE FILES] - do not remove
+#include <e32svr.h>
+#include <commdbconnpref.h>
+#include <centralrepository.h>
+#include <mmf/common/mmfcontrollerpluginresolver.h> // CleanupResetAndDestroyPushL
+
+#include <StifParser.h>
+#include <Stiftestinterface.h>
+
+#include "VCXConnUtilTest.h"
+#include "VCXConnUtilTestCommon.h"
+#include "VCXTestCommon.h"
+#include "IptvTestUtilALR.h"
+#include "VCXConnUtilTestSubscriber.h"
+#include "CIptvTestTimer.h"
+#include "CIptvTestActiveWait.h"
+#include "VCXTestTimerWait.h"
+
+#include "vcxconnectionutility.h"
+#include "VCXTestLog.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CVCXConnUtilTest::Delete
+// Delete here all resources allocated and opened from test methods.
+// Called from destructor.
+// -----------------------------------------------------------------------------
+//
+void CVCXConnUtilTest::Delete()
+    {
+    VCXLOGLO2(">>>CVCXConnUtilTest::Delete (%S)", &iName);
+
+    delete iTestCommon;
+    iTestCommon = NULL;
+
+    if( iConnectionStatusSubscriber )
+        {
+        iConnectionStatusSubscriber->EndWait();
+        }
+    delete iConnectionStatusSubscriber;
+    iConnectionStatusSubscriber = NULL;
+
+    if( iIapIdSubscriber )
+        {
+        iIapIdSubscriber->EndWait();
+        }
+    delete iIapIdSubscriber;
+    iIapIdSubscriber = NULL;
+
+    if( iSnapIdSubscriber )
+        {
+        iSnapIdSubscriber->EndWait();
+        }
+    delete iSnapIdSubscriber;
+    iSnapIdSubscriber = NULL;
+
+    if( iMasterExistsSubscriber )
+        {
+        iMasterExistsSubscriber->EndWait();
+        }
+    delete iMasterExistsSubscriber;
+    iMasterExistsSubscriber = NULL;
+
+    if( iNbrConnInstancesSubscriber )
+        {
+        iNbrConnInstancesSubscriber->EndWait();
+        }
+    delete iNbrConnInstancesSubscriber;
+    iNbrConnInstancesSubscriber = NULL;
+
+    if( iRoamingRequestStatusSubscriber )
+        {
+        iRoamingRequestStatusSubscriber->EndWait();
+        }
+    delete iRoamingRequestStatusSubscriber;
+    iRoamingRequestStatusSubscriber = NULL;
+
+    if( iNbrRoamRespSubscriber )
+        {
+        iNbrRoamRespSubscriber->EndWait();
+        }
+    delete iNbrRoamRespSubscriber;
+    iNbrRoamRespSubscriber = NULL;
+
+    if( iNbRoamAcceptedSubscriber )
+        {
+        iNbRoamAcceptedSubscriber->EndWait();
+        }
+    delete iNbRoamAcceptedSubscriber;
+    iNbRoamAcceptedSubscriber = NULL;
+
+    delete iTesterCountSubscriber;
+    iTesterCountSubscriber = NULL;
+
+    iWaitedPSChanges.Reset();
+    iWaitedPSChanges.Close();
+
+    iNotAllowedPSChanges.Reset();
+    iNotAllowedPSChanges.Close();
+
+    if( iTimeoutTimer )
+        {
+        iTimeoutTimer->CancelTimer();
+        delete iTimeoutTimer;
+        iTimeoutTimer = NULL;
+        }
+
+    delete iWait;
+    iWait = NULL;
+
+    if( !iShutdownCalled )
+        {
+        CStifItemParser* fakeParser = NULL;
+        ShutdownTesterL( *fakeParser );
+        }
+
+    VCXLOGLO2("<<<CVCXConnUtilTest::Delete (%S)", &iName);
+    }
+
+// -----------------------------------------------------------------------------
+// CVCXConnUtilTest::RunMethodL
+// Run specified method. Contains also table of test mothods and their names.
+// -----------------------------------------------------------------------------
+//
+TInt CVCXConnUtilTest::RunMethodL(
+    CStifItemParser& aItem )
+    {
+    static TStifFunctionInfo const KFunctions[] =
+        {
+        // Copy this line for every implemented function.
+        // First string is the function name used in TestScripter script file.
+        // Second is the actual implementation member function.
+        ENTRY( "PrepareCase", CVCXConnUtilTest::PrepareCaseL ),
+        ENTRY( "ShutdownTester", CVCXConnUtilTest::ShutdownTesterL ),
+        ENTRY( "Create", CVCXConnUtilTest::CreateL ),
+        ENTRY( "GetIap", CVCXConnUtilTest::GetIapL ),
+        ENTRY( "WapIdFromIapId", CVCXConnUtilTest::WapIdFromIapIdL ),
+        ENTRY( "Disconnect", CVCXConnUtilTest::DisconnectL ),
+        ENTRY( "CheckProperty", CVCXConnUtilTest::CheckPropertyL ),
+        ENTRY( "SetRoamingAllowed", CVCXConnUtilTest::SetRoamingAllowedL ),
+        ENTRY( "SetLeaveAtRoamingRequest", CVCXConnUtilTest::SetLeaveAtRoamingRequestL ),
+        ENTRY( "SetDelayBeforeRoamingRequest", CVCXConnUtilTest::SetDelayBeforeRoamingRequestL ),
+        ENTRY( "PrintConnUtilDetails", CVCXConnUtilTest::PrintConnUtilDetails ),
+        ENTRY( "AddWaitedProperty", CVCXConnUtilTest::AddWaitedPropertyL ),
+        ENTRY( "AddNotAllowedProperty", CVCXConnUtilTest::AddNotAllowedPropertyL ),
+        ENTRY( "ResetWaitedProperties", CVCXConnUtilTest::ResetWaitedPropertiesL ),
+        ENTRY( "WaitForPropertyQueue", CVCXConnUtilTest::WaitForPropertyQueueL ),
+        };
+
+    const TInt count = sizeof( KFunctions ) /
+                        sizeof( TStifFunctionInfo );
+
+    return RunInternalL( KFunctions, count, aItem );
+
+    }
+
+// -----------------------------------------------------------------------------
+// CVCXMyVideosCollectionPluginTest::PrepareCaseL
+// -----------------------------------------------------------------------------
+//
+TInt CVCXConnUtilTest::PrepareCaseL( CStifItemParser& /* aItem */ )
+    {
+    VCXLOGLO1(">>>CVCXConnUtilTest::PrepareCaseL");
+    // Print to UI
+    _LIT( KVCXConnUtilTest, "CVCXConnUtilTest" );
+    _LIT( KWhere, "In PrepareCaseL" );
+    TestModuleIf().Printf( 0, KVCXConnUtilTest, KWhere );
+    // Print to log file
+    iLog->Log( KWhere );
+
+    TInt err = CVCXTestCommon::SetPSProperty( KVCXConnUtilTestPScategory, KVCXConnUtilTestExeGlobalShutdownKey, 1 );
+    if( err != KErrNone )
+        {
+        VCXLOGLO2("CVCXConnUtilTest:: Could not read KVCXConnUtilTestExeGlobalShutdownKey from PS. err: %d", err);
+        }
+
+    VCXLOGLO1("<<<CVCXConnUtilTest::PrepareCaseL");
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CVCXMyVideosCollectionPluginTest::ShutdownTesterL
+// -----------------------------------------------------------------------------
+//
+TInt CVCXConnUtilTest::ShutdownTesterL( CStifItemParser& /* aItem */ )
+    {
+    VCXLOGLO1(">>>CVCXConnUtilTest::ShutdownTesterL");
+    // Print to UI
+    _LIT( KVCXConnUtilTest, "CVCXConnUtilTest" );
+    _LIT( KWhere, "In ShutdownTesterL" );
+    TestModuleIf().Printf( 0, KVCXConnUtilTest, KWhere );
+    // Print to log file
+    iLog->Log( KWhere );
+
+    iShutdownCalled = ETrue;
+
+    // Stop listening P&S changes.
+
+    delete iTesterGetAckResponseSubscriber;
+    iTesterGetAckResponseSubscriber = NULL;
+
+    delete iTesterResponseSubscriber;
+    iTesterResponseSubscriber = NULL;
+
+    // Tell tester exe to shutdown.
+
+    VCXLOGLO1("CVCXConnUtilTest:: Setting cmd EVcxConnUtilCommandShutdown");
+
+    CVCXTestCommon::SetPSProperty( KVCXConnUtilTestPScategory,
+            KVCXConnUtilTestExePsKeyCmd + iPSKeyBase, EVcxConnUtilCommandShutdown );
+
+    User::After( 3000000 );
+
+    // Check the shutdown.
+
+    VCXLOGLO2("CVCXConnUtilTest:: Exit type: %d", iProcess.ExitType());
+    VCXLOGLO2("CVCXConnUtilTest:: Exit reason: %d", iProcess.ExitReason());
+    TExitCategoryName exitCatName = iProcess.ExitCategory();
+    VCXLOGLO2("CVCXConnUtilTest:: Exit category: %S", &exitCatName);
+
+    TInt err = iProcess.ExitReason();
+
+    if( err == KErrNone && iProcess.ExitType() != EExitKill && exitCatName.Length() == 0 )
+        {
+        VCXLOGLO1("CVCXConnUtilTest:: ERROR: No exit error, no panic but exit type is unusual or exe is stil running.");
+        err = KErrGeneral;
+        }
+
+    VCXLOGLO1("<<<CVCXConnUtilTest::ShutdownTesterL");
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CVCXMyVideosCollectionPluginTest::CreateL
+// -----------------------------------------------------------------------------
+//
+TInt CVCXConnUtilTest::CreateL( CStifItemParser& aItem )
+    {
+    // Print to UI
+    _LIT( KVCXConnUtilTest, "CVCXConnUtilTest" );
+    _LIT( KWhere, "In CreateL" );
+    TestModuleIf().Printf( 0, KVCXConnUtilTest, KWhere );
+    // Print to log file
+    iLog->Log( KWhere );
+
+    aItem.SetParsingType(CStifItemParser::EQuoteStyleParsing);
+
+    TPtrC name;
+    if( aItem.GetNextString( name ) == KErrNone )
+        {
+        iName = name;
+        }
+    else
+        {
+        iName = _L("DEFAULT");
+        }
+
+    VCXLOGLO2(">>>CVCXConnUtilTest::CreateL (%S) ----->", &iName);
+
+    if( aItem.GetNextInt( iMode ) != KErrNone )
+        {
+        iMode = KVcxConnUtilTestModeBoth;
+        }
+
+    iTestCommon = CVCXTestCommon::NewL();
+    iWait = CIptvTestActiveWait::NewL();
+    iTimeoutTimer = CIptvTestTimer::NewL( *this, KTimeoutTimerId );
+    iPSKeyBase = 0;
+
+    if( iMode == KVcxConnUtilTestModeBoth || iMode == KVcxConnUtilTestModeConnectivity )
+        {
+        CreateTesterProcessL();
+
+        User::LeaveIfError( CVCXTestCommon::GetPSProperty( KVCXConnUtilTestPScategory, 
+                KVCXConnUtilTestExeGlobalTesterCount, iPSKeyBase ) );
+        
+        iPSKeyBase = iPSKeyBase * 1000 + iProcess.Id();
+        VCXLOGLO2("CVCXConnUtilTest:: iPSKeyBase: %d", iPSKeyBase);
+        
+        CVCXTestCommon::SetPSProperty( KVCXConnUtilTestPScategory,
+                KVCXConnUtilTestExePsKeyCmd + iPSKeyBase, EVcxConnUtilCommandSetName );
+
+        CVCXTestCommon::SetPSProperty( KVCXConnUtilTestPScategory,
+                KVCXConnUtilTestExePsKeyCmdDescParam1 + iPSKeyBase, iName );
+
+        // Start listening P&S for the tester responses.
+        iTesterGetAckResponseSubscriber = CVCXConnUtilTestSubscriber::NewL( KVCXConnUtilTestPScategory,
+                KVCXConnUtilTestExePsKeyResponseAck + iPSKeyBase, RProperty::EInt, this );
+        iTesterGetAckResponseSubscriber->Start();
+        VCXLOGLO2("CVCXConnUtilTestExeTester:: Listening P&S key KVCXConnUtilTestExePsKeyResponseAck: %d", KVCXConnUtilTestExePsKeyResponseAck + iPSKeyBase);
+
+        iTesterResponseSubscriber = CVCXConnUtilTestSubscriber::NewL( KVCXConnUtilTestPScategory,
+                KVCXConnUtilTestExePsKeyResponseCmd + iPSKeyBase, RProperty::EInt, this );
+        iTesterResponseSubscriber->Start();
+        VCXLOGLO2("CVCXConnUtilTestExeTester:: Listening P&S key KVCXConnUtilTestExePsKeyResponseCmd: %d", KVCXConnUtilTestExePsKeyResponseCmd + iPSKeyBase);
+        }
+
+    // Start listening P&S for connutil status changes.
+    iConnectionStatusSubscriber = CVCXConnUtilTestSubscriber::NewL( KVcxConnUtilPScategory,
+            EVCxPSConnectionStatus, RProperty::EInt, this );
+
+    iIapIdSubscriber = CVCXConnUtilTestSubscriber::NewL( KVcxConnUtilPScategory,
+            EVCxPSIapId, RProperty::EInt, this );
+
+    iSnapIdSubscriber = CVCXConnUtilTestSubscriber::NewL( KVcxConnUtilPScategory,
+            EVCxPSSnapId, RProperty::EInt, this );
+
+    iMasterExistsSubscriber = CVCXConnUtilTestSubscriber::NewL( KVcxConnUtilPScategory,
+            EVCxPSMasterExists, RProperty::EInt, this );
+
+    iNbrConnInstancesSubscriber = CVCXConnUtilTestSubscriber::NewL( KVcxConnUtilPScategory,
+            EVCxPSNbrConnInstances, RProperty::EInt, this );
+
+    iRoamingRequestStatusSubscriber = CVCXConnUtilTestSubscriber::NewL( KVcxConnUtilPScategory,
+            EVCxPSRoamingRequestStatus, RProperty::EInt, this );
+
+    iNbrRoamRespSubscriber = CVCXConnUtilTestSubscriber::NewL( KVcxConnUtilPScategory,
+            EVCxPSNbrRoamResp, RProperty::EInt, this );
+
+    iNbRoamAcceptedSubscriber = CVCXConnUtilTestSubscriber::NewL( KVcxConnUtilPScategory,
+            EVCxPSNbRoamAccepted, RProperty::EInt, this );
+
+    if( iMode == KVcxConnUtilTestModeSubscriber || iMode == KVcxConnUtilTestModeBoth )
+        {
+        iConnectionStatusSubscriber->Start();
+        iIapIdSubscriber->Start();
+        iSnapIdSubscriber->Start();
+        iMasterExistsSubscriber->Start();
+        iNbrConnInstancesSubscriber->Start();
+        iRoamingRequestStatusSubscriber->Start();
+        iNbrRoamRespSubscriber->Start();
+        iNbRoamAcceptedSubscriber->Start();
+        }
+
+    VCXLOGLO2("<<<CVCXConnUtilTest::CreateL (%S)", &iName);
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CVCXMyVideosCollectionPluginTest::CreateTesterProcessL
+// -----------------------------------------------------------------------------
+//
+void CVCXConnUtilTest::CreateTesterProcessL()
+    {
+    VCXLOGLO2(">>>CVCXConnUtilTest::CreateTesterProcessL (%S)", &iName);
+    // Define tester count P&S key before starting the exe.    
+    TInt err = CVCXTestCommon::GetPSProperty( 
+            KVCXConnUtilTestPScategory, KVCXConnUtilTestExeGlobalTesterCount, iPSKeyBase );
+
+    if( err == KErrNotFound )
+        {
+        User::LeaveIfError( RProperty::Define( 
+                KVCXConnUtilTestPScategory, KVCXConnUtilTestExeGlobalTesterCount, RProperty::EInt ) );
+        VCXLOGLO1("CVCXConnUtilTest:: Defined KVCXConnUtilTestExeGlobalTesterCount");
+        User::LeaveIfError( CVCXTestCommon::SetPSProperty( 
+                KVCXConnUtilTestPScategory, KVCXConnUtilTestExeGlobalTesterCount, 1 ) );
+        }
+    else
+    if( err != KErrNone ) 
+        {
+        VCXLOGLO2("CVCXConnUtilTest:: err getting tester count P&S: %d", err);
+        User::Leave( err );
+        }
+    
+    // Lets subscribe tester count for changes.
+    iTesterCountSubscriber = CVCXConnUtilTestSubscriber::NewL( KVCXConnUtilTestPScategory,
+                KVCXConnUtilTestExeGlobalTesterCount, RProperty::EInt, this );
+    iTesterCountSubscriber->Start();
+    VCXLOGLO1("CVCXConnUtilTestExeTester:: Listening P&S key KVCXConnUtilTestExeGlobalTesterCount");
+
+    // Create the process.    
+    User::LeaveIfError( iProcess.Create( _L("VCXConnUtilTestExe.exe"), _L("") ) );
+    iProcess.Resume();       
+
+    TesterExeAliveL();
+
+    // Wait until tester count P&S key has been updated.
+    if( !iTesterCountChangedAlready )
+        {
+        iTesterCountSubscriber->WaitChangeL();
+        }
+    
+    // Not interested anymore.
+    delete iTesterCountSubscriber;
+    iTesterCountSubscriber = NULL;
+    
+    VCXLOGLO2("<<<CVCXConnUtilTest::CreateTesterProcessL (%S)", &iName);
+    }
+
+// -----------------------------------------------------------------------------
+// CVCXMyVideosCollectionPluginTest::GetIapL
+// -----------------------------------------------------------------------------
+//
+TInt CVCXConnUtilTest::GetIapL( CStifItemParser& aItem )
+    {
+    VCXLOGLO2(">>>CVCXConnUtilTest::GetIapL (%S)", &iName);
+    // Print to UI
+    _LIT( KVCXConnUtilTest, "CVCXConnUtilTest" );
+    _LIT( KWhere, "In GetIapL" );
+    TestModuleIf().Printf( 0, KVCXConnUtilTest, KWhere );
+    // Print to log file
+    iLog->Log( KWhere );
+
+    if( iMode == KVcxConnUtilTestModeSubscriber )
+        {
+        User::Leave( KErrNotSupported );
+        }
+    TesterExeAliveL();
+
+    aItem.SetParsingType(CStifItemParser::EQuoteStyleParsing);
+
+    TPtrC destName;
+    User::LeaveIfError( aItem.GetNextString( destName ) );
+
+    CIptvTestUtilALR* alrUtil = CIptvTestUtilALR::NewLC();
+    TInt destId = alrUtil->GetDestinationIdL( destName );
+    CleanupStack::PopAndDestroy( alrUtil );
+    
+    VCXLOGLO1("CVCXConnUtilTest:: Create cenrep.");
+    CRepository* cenRep = CRepository::NewLC( VCXTEST_KIptvAlrCenRepUid );
+    VCXLOGLO1("CVCXConnUtilTest:: Set cenrep.");
+    User::LeaveIfError( cenRep->Set( VCXTEST_KIptvCenRepUsedSnapIdKey, destId ) );
+    CleanupStack::PopAndDestroy( cenRep );
+
+    TInt isTimed(0);
+    if( aItem.GetNextInt( isTimed ) != KErrNone )
+        {
+        isTimed = 0;
+        }
+
+    VCXLOGLO2("CVCXConnUtilTest:: Setting cmd EVcxConnUtilCommandGetIap (%S) ----->", &iName);
+
+    // Silent call.
+    User::LeaveIfError( CVCXTestCommon::SetPSProperty( KVCXConnUtilTestPScategory,
+            KVCXConnUtilTestExePsKeyCmdIntParam1 + iPSKeyBase, 1 ) );
+
+    // Is this timed call.
+    User::LeaveIfError( CVCXTestCommon::SetPSProperty( KVCXConnUtilTestPScategory,
+            KVCXConnUtilTestExePsKeyCmdIntParam2 + iPSKeyBase, isTimed ) );
+
+    // Set the cmd.
+    User::LeaveIfError( CVCXTestCommon::SetPSProperty( KVCXConnUtilTestPScategory,
+            KVCXConnUtilTestExePsKeyCmd + iPSKeyBase, EVcxConnUtilCommandGetIap ) );
+
+    iTesterGetAckResponseSubscriber->WaitChangeL();
+
+    VCXLOGLO2("<<<CVCXConnUtilTest::GetIapL (%S)", &iName);
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CVCXMyVideosCollectionPluginTest::WapIdFromIapIdL
+// -----------------------------------------------------------------------------
+//
+TInt CVCXConnUtilTest::WapIdFromIapIdL( CStifItemParser& aItem )
+    {
+    VCXLOGLO2(">>>CVCXConnUtilTest::WapIdFromIapIdL (%S)", &iName);
+    // Print to UI
+    _LIT( KVCXConnUtilTest, "CVCXConnUtilTest" );
+    _LIT( KWhere, "In WapIdFromIapIdL" );
+    TestModuleIf().Printf( 0, KVCXConnUtilTest, KWhere );
+    // Print to log file
+    iLog->Log( KWhere );
+
+    TesterExeAliveL();
+
+    aItem.SetParsingType(CStifItemParser::EQuoteStyleParsing);
+
+    TPtrC iapName;
+    User::LeaveIfError( aItem.GetNextString( iapName ) );
+
+    VCXLOGLO3("CVCXConnUtilTest:: Iap name: %S (%S) ----->", &iapName, &iName);
+    
+    TUint32 iapId( 0 );
+    
+    TInt err( KErrNone );
+    if( !iTestCommon->GetIapIdL( iapName, iapId ) )
+        {
+        VCXLOGLO2("CVCXConnUtilTest:: Iap not found, error! (%S) ----->", &iName);
+        err = KErrNotFound;
+        }
+    else
+        {
+        VCXLOGLO2("CVCXConnUtilTest:: Setting cmd EVcxConnUtilCommandGetWapIdForIap (%S) ----->", &iName);
+    
+        // IAP ID
+        User::LeaveIfError( CVCXTestCommon::SetPSProperty( KVCXConnUtilTestPScategory,
+                KVCXConnUtilTestExePsKeyCmdIntParam1 + iPSKeyBase, iapId ) );
+    
+        // Set the cmd.
+        User::LeaveIfError( CVCXTestCommon::SetPSProperty( KVCXConnUtilTestPScategory,
+                KVCXConnUtilTestExePsKeyCmd + iPSKeyBase, EVcxConnUtilCommandGetWapIdForIap ) );
+    
+        iTesterGetAckResponseSubscriber->WaitChangeL();
+        }
+    
+    VCXLOGLO2("<<<CVCXConnUtilTest::WapIdFromIapIdL (%S)", &iName);
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CVCXMyVideosCollectionPluginTest::DisconnectL
+// -----------------------------------------------------------------------------
+//
+TInt CVCXConnUtilTest::DisconnectL( CStifItemParser& aItem )
+    {
+    VCXLOGLO2(">>>CVCXConnUtilTest::DisconnectL (%S)", &iName);
+    // Print to UI
+    _LIT( KVCXConnUtilTest, "CVCXConnUtilTest" );
+    _LIT( KWhere, "In DisconnectL" );
+    TestModuleIf().Printf( 0, KVCXConnUtilTest, KWhere );
+    // Print to log file
+    iLog->Log( KWhere );
+
+    if( iMode == KVcxConnUtilTestModeSubscriber )
+        {
+        User::Leave( KErrNotSupported );
+        }
+    TesterExeAliveL();
+
+    aItem.SetParsingType(CStifItemParser::EQuoteStyleParsing);
+
+    VCXLOGLO2("CVCXConnUtilTest:: Setting cmd EVcxConnUtilCommandDisconnect (%S) ----->", &iName);
+
+    // Set the cmd.
+    User::LeaveIfError( CVCXTestCommon::SetPSProperty( KVCXConnUtilTestPScategory,
+            KVCXConnUtilTestExePsKeyCmd + iPSKeyBase, EVcxConnUtilCommandDisconnect ) );
+
+    iTesterGetAckResponseSubscriber->WaitChangeL();
+
+    VCXLOGLO2("<<<CVCXConnUtilTest::DisconnectL (%S)", &iName);
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CVCXMyVideosCollectionPluginTest::CheckPropertyL
+// -----------------------------------------------------------------------------
+//
+TInt CVCXConnUtilTest::CheckPropertyL( CStifItemParser& aItem )
+    {
+    VCXLOGLO2(">>>CVCXConnUtilTest::CheckPropertyL (%S)", &iName);
+    // Print to UI
+    _LIT( KVCXConnUtilTest, "CVCXConnUtilTest" );
+    _LIT( KWhere, "In CheckPropertyL" );
+    TestModuleIf().Printf( 0, KVCXConnUtilTest, KWhere );
+    // Print to log file
+    iLog->Log( KWhere );
+
+    aItem.SetParsingType(CStifItemParser::EQuoteStyleParsing);
+
+    TInt property;
+    User::LeaveIfError( aItem.GetNextInt( property ) );
+
+    TInt intValue(0);
+    TBuf<256> stringValue;
+    stringValue.Zero();
+
+    TBuf<256> propertyName;
+    GetPropertyNameL( property, propertyName );
+
+    VCXLOGLO2("CVCXConnUtilTest:: check %S", &propertyName);
+
+    switch( property )
+        {
+        case EVCxPSConnectionStatus:
+            {
+            User::LeaveIfError( iConnectionStatusSubscriber->Get( intValue ) );
+            break;
+            }
+
+        case EVCxPSIapId:
+            {
+            User::LeaveIfError( iIapIdSubscriber->Get( intValue ) );
+            break;
+            }
+
+        case EVCxPSSnapId:
+            {
+            User::LeaveIfError( iSnapIdSubscriber->Get( intValue ) );
+            break;
+            }
+
+        case EVCxPSMasterExists:
+            {
+            User::LeaveIfError( iMasterExistsSubscriber->Get( intValue ) );
+            break;
+            }
+
+        case EVCxPSNbrConnInstances:
+            {
+            User::LeaveIfError( iNbrConnInstancesSubscriber->Get( intValue ) );
+            break;
+            }
+
+        case EVCxPSRoamingRequestStatus:
+            {
+            User::LeaveIfError( iRoamingRequestStatusSubscriber->Get( intValue ) );
+            break;
+            }
+
+        case EVCxPSNbrRoamResp:
+            {
+            User::LeaveIfError( iNbrRoamRespSubscriber->Get( intValue ) );
+            break;
+            }
+
+        case EVCxPSNbRoamAccepted:
+            {
+            User::LeaveIfError( iNbRoamAcceptedSubscriber->Get( intValue ) );
+            break;
+            }
+
+        default:
+            {
+            User::Leave( KErrArgument );
+            }
+            break;
+        }
+
+    TInt err(KErrNone);
+    TInt expectedValue(0);
+    if( aItem.GetNextInt( expectedValue ) != KErrNone )
+        {
+        err = KErrArgument;
+        }
+    else
+    if( err == KErrNone && intValue != expectedValue )
+        {
+        VCXLOGLO3("CVCXConnUtilTest:: mismatch: %d, expected: %d", intValue, expectedValue );
+        err = KErrCorrupt;
+        }
+
+    VCXLOGLO2("<<<CVCXConnUtilTest::CheckPropertyL (%S)", &iName);
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CVCXMyVideosCollectionPluginTest::PrintConnUtilDetails
+// -----------------------------------------------------------------------------
+//
+TInt CVCXConnUtilTest::PrintConnUtilDetails( CStifItemParser& /* aItem */ )
+    {
+    VCXLOGLO2(">>>CVCXConnUtilTest::PrintConnUtilDetails (%S)", &iName);
+
+    TInt connectionStatus( 0 );
+    TInt iapId( 0 );
+    TInt snapId( 0 );
+    TInt masterExists( 0 );
+    TInt nbrConnInstances( 0 );
+    TInt roamingRequestStatus( 0 );
+    TInt nbrRoamResp( 0 );
+    TInt nbrRoamAccepted( 0 );
+    TInt err( KErrNone );
+
+    err = iConnectionStatusSubscriber->Get( connectionStatus );
+    if( err != KErrNone ) VCXLOGLO2("CVCXConnUtilTest:: err: %d getting PS iConnectionStatusSubscriber", err);
+
+    err = iIapIdSubscriber->Get( iapId );
+    if( err != KErrNone ) VCXLOGLO2("CVCXConnUtilTest:: err: %d getting PS iIapIdSubscriber", err);
+
+    err = iSnapIdSubscriber->Get( snapId );
+    if( err != KErrNone ) VCXLOGLO2("CVCXConnUtilTest:: err: %d getting PS iSnapIdSubscriber", err);
+
+    err = iMasterExistsSubscriber->Get( masterExists );
+    if( err != KErrNone ) VCXLOGLO2("CVCXConnUtilTest:: err: %d getting PS iMasterExistsSubscriber", err);
+
+    err = iNbrConnInstancesSubscriber->Get( nbrConnInstances );
+    if( err != KErrNone ) VCXLOGLO2("CVCXConnUtilTest:: err: %d getting PS iNbrConnInstancesSubscriber", err);
+
+    err = iRoamingRequestStatusSubscriber->Get( roamingRequestStatus );
+    if( err != KErrNone ) VCXLOGLO2("CVCXConnUtilTest:: err: %d getting PS iRoamingRequestStatusSubscriber", err);
+
+    err = iNbrRoamRespSubscriber->Get( nbrRoamResp );
+    if( err != KErrNone ) VCXLOGLO2("CVCXConnUtilTest:: err: %d getting PS iNbrRoamRespSubscriber", err);
+
+    err = iNbRoamAcceptedSubscriber->Get( nbrRoamAccepted );
+    if( err != KErrNone ) VCXLOGLO2("CVCXConnUtilTest:: err: %d getting PS iNbRoamAcceptedSubscriber", err);
+
+    TBuf<256> statusStr;
+    TRAP_IGNORE( GetConnectionStatusL( connectionStatus, statusStr ) );
+
+    VCXLOGLO3("CVCXConnUtilTest:: status: %S (%d)", &statusStr, connectionStatus);
+    VCXLOGLO2("CVCXConnUtilTest:: iapId: %d", iapId);
+    VCXLOGLO2("CVCXConnUtilTest:: snapId: %d", snapId);
+    VCXLOGLO2("CVCXConnUtilTest:: masterExists: %d", masterExists);
+    VCXLOGLO2("CVCXConnUtilTest:: nbrConnInstances: %d", nbrConnInstances);
+    VCXLOGLO2("CVCXConnUtilTest:: roamingRequestStatus: %d", roamingRequestStatus);
+    VCXLOGLO2("CVCXConnUtilTest:: nbrRoamResp: %d", nbrRoamResp);
+    VCXLOGLO2("CVCXConnUtilTest:: nbrRoamAccepted: %d", nbrRoamAccepted);
+
+    VCXLOGLO2("<<<CVCXConnUtilTest::PrintConnUtilDetails (%S)", &iName);
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CVCXMyVideosCollectionPluginTest::SetRoamingAllowedL
+// -----------------------------------------------------------------------------
+//
+TInt CVCXConnUtilTest::SetRoamingAllowedL( CStifItemParser& aItem )
+    {
+    VCXLOGLO2(">>>CVCXConnUtilTest::SetRoamingAllowedL (%S)", &iName);
+    // Print to UI
+    _LIT( KVCXConnUtilTest, "CVCXConnUtilTest" );
+    _LIT( KWhere, "In SetRoamingAllowedL" );
+    TestModuleIf().Printf( 0, KVCXConnUtilTest, KWhere );
+    // Print to log file
+    iLog->Log( KWhere );
+
+    if( iMode == KVcxConnUtilTestModeSubscriber )
+        {
+        User::Leave( KErrNotSupported );
+        }
+    TesterExeAliveL();
+
+    aItem.SetParsingType(CStifItemParser::EQuoteStyleParsing);
+
+    TInt temp;
+    User::LeaveIfError( aItem.GetNextInt( temp ) );
+
+    VCXLOGLO2("CVCXConnUtilTest:: Setting cmd EVcxConnUtilCommandSetRoamingAllowed (%S) ----->", &iName);
+
+    // Set value.
+    User::LeaveIfError( CVCXTestCommon::SetPSProperty( KVCXConnUtilTestPScategory,
+            KVCXConnUtilTestExePsKeyCmdIntParam1 + iPSKeyBase, temp ) );
+
+    // Set the cmd.
+    User::LeaveIfError( CVCXTestCommon::SetPSProperty( KVCXConnUtilTestPScategory,
+            KVCXConnUtilTestExePsKeyCmd + iPSKeyBase, EVcxConnUtilCommandSetRoamingAllowed ) );
+
+    iTesterGetAckResponseSubscriber->WaitChangeL();
+
+    VCXLOGLO2("<<<CVCXConnUtilTest::SetRoamingAllowedL (%S)", &iName);
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CVCXMyVideosCollectionPluginTest::SetLeaveAtRoamingRequestL
+// -----------------------------------------------------------------------------
+//
+TInt CVCXConnUtilTest::SetLeaveAtRoamingRequestL( CStifItemParser& aItem )
+    {
+    VCXLOGLO2(">>>CVCXConnUtilTest::SetLeaveAtRoamingRequestL (%S)", &iName);
+    // Print to UI
+    _LIT( KVCXConnUtilTest, "CVCXConnUtilTest" );
+    _LIT( KWhere, "In SetLeaveAtRoamingRequestL" );
+    TestModuleIf().Printf( 0, KVCXConnUtilTest, KWhere );
+    // Print to log file
+    iLog->Log( KWhere );
+
+    if( iMode == KVcxConnUtilTestModeSubscriber )
+        {
+        User::Leave( KErrNotSupported );
+        }
+    TesterExeAliveL();
+
+    aItem.SetParsingType(CStifItemParser::EQuoteStyleParsing);
+
+    TInt temp;
+    User::LeaveIfError( aItem.GetNextInt( temp ) );
+
+    VCXLOGLO2("CVCXConnUtilTest:: Setting cmd EVcxConnUtilCommandSetRoamingLeaveAtRoamingRequest (%S) ----->", &iName);
+
+    // Set value.
+    User::LeaveIfError( CVCXTestCommon::SetPSProperty( KVCXConnUtilTestPScategory,
+            KVCXConnUtilTestExePsKeyCmdIntParam1 + iPSKeyBase, temp ) );
+
+    // Set the cmd.
+    User::LeaveIfError( CVCXTestCommon::SetPSProperty( KVCXConnUtilTestPScategory,
+            KVCXConnUtilTestExePsKeyCmd + iPSKeyBase, EVcxConnUtilCommandSetRoamingLeaveAtRoamingRequest ) );
+
+    iTesterGetAckResponseSubscriber->WaitChangeL();
+
+    VCXLOGLO2("<<<CVCXConnUtilTest::SetLeaveAtRoamingRequestL (%S)", &iName);
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CVCXMyVideosCollectionPluginTest::SetDelayBeforeRoamingRequest
+// -----------------------------------------------------------------------------
+//
+TInt CVCXConnUtilTest::SetDelayBeforeRoamingRequestL( CStifItemParser& aItem )
+    {
+    VCXLOGLO2(">>>CVCXConnUtilTest::SetDelayBeforeRoamingRequestL (%S)", &iName);
+    // Print to UI
+    _LIT( KVCXConnUtilTest, "CVCXConnUtilTest" );
+    _LIT( KWhere, "In SetDelayBeforeRoamingRequestL" );
+    TestModuleIf().Printf( 0, KVCXConnUtilTest, KWhere );
+    // Print to log file
+    iLog->Log( KWhere );
+
+    if( iMode == KVcxConnUtilTestModeSubscriber )
+        {
+        User::Leave( KErrNotSupported );
+        }
+    TesterExeAliveL();
+
+    aItem.SetParsingType(CStifItemParser::EQuoteStyleParsing);
+
+    TInt seconds(0);
+    User::LeaveIfError( aItem.GetNextInt( seconds ) );
+
+    VCXLOGLO2("CVCXConnUtilTest:: Setting cmd EVcxConnUtilCommandSetDelayBeforeRoamingRequest (%S) ----->", &iName);
+
+    // Set value.
+    User::LeaveIfError( CVCXTestCommon::SetPSProperty( KVCXConnUtilTestPScategory,
+            KVCXConnUtilTestExePsKeyCmdIntParam1 + iPSKeyBase, seconds ) );
+
+    // Set the cmd.
+    User::LeaveIfError( CVCXTestCommon::SetPSProperty( KVCXConnUtilTestPScategory,
+            KVCXConnUtilTestExePsKeyCmd + iPSKeyBase, EVcxConnUtilCommandSetDelayBeforeRoamingRequest ) );
+
+    iTesterGetAckResponseSubscriber->WaitChangeL();
+
+    VCXLOGLO2("<<<CVCXConnUtilTest::SetDelayBeforeRoamingRequestL (%S)", &iName);
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CVCXMyVideosCollectionPluginTest::AddWaitedProperty
+// -----------------------------------------------------------------------------
+//
+TInt CVCXConnUtilTest::AddWaitedPropertyL( CStifItemParser& aItem )
+    {
+    VCXLOGLO2(">>>CVCXConnUtilTest::AddWaitedPropertyL (%S)", &iName);
+    // Print to UI
+    _LIT( KVCXConnUtilTest, "CVCXConnUtilTest" );
+    _LIT( KWhere, "In AddWaitedPropertyL" );
+    TestModuleIf().Printf( 0, KVCXConnUtilTest, KWhere );
+    // Print to log file
+    iLog->Log( KWhere );
+
+    if( iMode == KVcxConnUtilTestModeConnectivity )
+        {
+        User::Leave( KErrNotSupported );
+        }
+
+    aItem.SetParsingType(CStifItemParser::EQuoteStyleParsing);
+
+    TInt property( -1 );
+    User::LeaveIfError( aItem.GetNextInt( property ) );
+
+    TBuf<256> propertyName;
+    GetPropertyNameL( property, propertyName );
+
+    TInt value(0);
+    User::LeaveIfError( aItem.GetNextInt( value ) );
+
+    if( property == EVCxPSConnectionStatus )
+        {
+        TBuf<256> connStr;
+        GetConnectionStatusL( value, connStr );
+        VCXLOGLO3("CVCXConnUtilTest:: %S = %S", &propertyName, &connStr);
+        }
+    else
+        {
+        VCXLOGLO3("CVCXConnUtilTest:: %S = %d", &propertyName, value);
+        }
+
+    TVcxConnTestPSProperty prop( property, value );
+    iWaitedPSChanges.Append( prop );
+
+    VCXLOGLO2("<<<CVCXConnUtilTest::AddWaitedPropertyL (%S)", &iName);
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CVCXMyVideosCollectionPluginTest::AddNotAllowedPropertyL
+// -----------------------------------------------------------------------------
+//
+TInt CVCXConnUtilTest::AddNotAllowedPropertyL( CStifItemParser& aItem )
+    {
+    VCXLOGLO2(">>>CVCXConnUtilTest::AddNotAllowedPropertyL (%S)", &iName);
+    // Print to UI
+    _LIT( KVCXConnUtilTest, "CVCXConnUtilTest" );
+    _LIT( KWhere, "In AddNotAllowedPropertyL" );
+    TestModuleIf().Printf( 0, KVCXConnUtilTest, KWhere );
+    // Print to log file
+    iLog->Log( KWhere );
+
+    if( iMode == KVcxConnUtilTestModeConnectivity )
+        {
+        User::Leave( KErrNotSupported );
+        }
+
+    aItem.SetParsingType(CStifItemParser::EQuoteStyleParsing);
+
+    TInt property( -1 );
+    User::LeaveIfError( aItem.GetNextInt( property ) );
+
+    TBuf<256> propertyName;
+    GetPropertyNameL( property, propertyName );
+
+    TInt value(0);
+    User::LeaveIfError( aItem.GetNextInt( value ) );
+
+    if( property == EVCxPSConnectionStatus )
+        {
+        TBuf<256> connStr;
+        GetConnectionStatusL( value, connStr );
+        VCXLOGLO3("CVCXConnUtilTest:: %S = %S", &propertyName, &connStr);
+        }
+    else
+        {
+        VCXLOGLO3("CVCXConnUtilTest:: %S = %d", &propertyName, value);
+        }
+
+    TVcxConnTestPSProperty prop( property, value );
+    iNotAllowedPSChanges.Append( prop );
+
+    VCXLOGLO2("<<<CVCXConnUtilTest::AddNotAllowedPropertyL (%S)", &iName);
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CVCXMyVideosCollectionPluginTest::ResetWaitedProperties
+// -----------------------------------------------------------------------------
+//
+TInt CVCXConnUtilTest::ResetWaitedPropertiesL( CStifItemParser& aItem )
+    {
+    VCXLOGLO2(">>>CVCXConnUtilTest::ResetWaitedPropertiesL (%S)", &iName);
+    // Print to UI
+    _LIT( KVCXConnUtilTest, "CVCXConnUtilTest" );
+    _LIT( KWhere, "In ResetWaitedPropertiesL" );
+    TestModuleIf().Printf( 0, KVCXConnUtilTest, KWhere );
+    // Print to log file
+    iLog->Log( KWhere );
+
+    if( iMode == KVcxConnUtilTestModeConnectivity )
+        {
+        User::Leave( KErrNotSupported );
+        }
+
+    iWaitedPSChanges.Reset();
+    iWaitingForEmptyPropertyQueue = EFalse;
+    iNotAllowedPSChanges.Reset();
+
+    aItem.SetParsingType(CStifItemParser::EQuoteStyleParsing);
+    VCXLOGLO2("<<<CVCXConnUtilTest::ResetWaitedPropertiesL (%S)", &iName);
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CVCXMyVideosCollectionPluginTest::WaitForPropertyQueueL
+// -----------------------------------------------------------------------------
+//
+TInt CVCXConnUtilTest::WaitForPropertyQueueL( CStifItemParser& aItem )
+    {
+    VCXLOGLO2(">>>CVCXConnUtilTest::WaitForPropertyQueueL (%S)", &iName);
+    // Print to UI
+    _LIT( KVCXConnUtilTest, "CVCXConnUtilTest" );
+    _LIT( KWhere, "In WaitForPropertyQueueL" );
+    TestModuleIf().Printf( 0, KVCXConnUtilTest, KWhere );
+    // Print to log file
+    iLog->Log( KWhere );
+
+    if( iMode == KVcxConnUtilTestModeConnectivity )
+        {
+        User::Leave( KErrNotSupported );
+        }
+    TesterExeAliveL();
+
+    iWaitingForEmptyPropertyQueue = ETrue;
+
+    // Timer is started always again when we correct property changes.
+    const TInt KTimeoutMinute = 60 * 1000000;
+    iTimeoutTimer->CancelTimer();
+    iTimeoutTimer->After( KTimeoutMinute * 1 );
+
+    aItem.SetParsingType(CStifItemParser::EQuoteStyleParsing);
+    VCXLOGLO2("<<<CVCXConnUtilTest::WaitForPropertyQueueL (%S)", &iName);
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CVCXConnUtilTest::ValueChangedL
+// -----------------------------------------------------------------------------
+//
+void CVCXConnUtilTest::ValueChangedL( const TUid& aUid, const TUint32& aKey, const TInt&  aValue )
+    {
+    VCXLOGLO2(">>>CVCXConnUtilTest::ValueChangedL (%S)", &iName);
+
+    if( aUid == KVcxConnUtilPScategory )
+        {
+        TBuf<256> pName;
+        GetPropertyNameL( aKey, pName );
+        if( aKey == EVCxPSConnectionStatus )
+            {
+            TBuf<256> connStr;
+            GetConnectionStatusL( aValue, connStr );
+            VCXLOGLO4("CVCXConnUtilTest::ValueChanged: %S = %S (%S) ----->", &pName, &connStr, &iName);
+
+            _LIT( KVCXConnUtilTest, "S:" );
+            TestModuleIf().Printf( 0, KVCXConnUtilTest, connStr );
+            }
+        else
+            {
+            VCXLOGLO4("CVCXConnUtilTest::ValueChanged: %S = %d (%S) ----->", &pName, aValue, &iName);
+            }
+
+        TBool found = EFalse;
+        for( TInt i = iWaitedPSChanges.Count() - 1; i >= 0; i-- )
+            {
+            if( iWaitedPSChanges[i].iProperty == aKey && iWaitedPSChanges[i].iIntegerValue == aValue )
+                {
+                iWaitedPSChanges.Remove( i );
+                found = ETrue;
+                break;
+                }
+            }
+
+        if( !found )
+            {
+            VCXLOGLO1("CVCXConnUtilTest:: The key was not found from wait queue.");
+
+            // Check not allowed property changes.
+            for( TInt i = iNotAllowedPSChanges.Count() - 1; i >= 0; i-- )
+                {
+                if( iNotAllowedPSChanges[i].iProperty == aKey && iNotAllowedPSChanges[i].iIntegerValue == aValue )
+                    {
+                    VCXLOGLO1("CVCXConnUtilTest:: Property change is not allowed. Error! SIGNAL.");
+                    iNotAllowedPSChanges.Remove( i );
+                    Signal( KErrCorrupt );
+                    break;
+                    }
+                }
+            }
+        else
+            {
+            VCXLOGLO1("CVCXConnUtilTest:: Key found and removed from wait queue.");
+
+            // Restart timer.
+            const TInt KTimeoutMinute = 60 * 1000000;
+            iTimeoutTimer->CancelTimer();
+            iTimeoutTimer->After( KTimeoutMinute * 1 );
+
+            if( iWaitedPSChanges.Count() == 0 )
+                {
+                if( iWaitingForEmptyPropertyQueue )
+                    {
+                    iWaitingForEmptyPropertyQueue = EFalse;
+                    VCXLOGLO1("CVCXConnUtilTest:: Property queue empty, SIGNAL.");
+                    iTimeoutTimer->CancelTimer();
+                    Signal();
+                    }
+                }
+            }
+
+        if( iWaitedPSChanges.Count() == 0 )
+            {
+            iNotAllowedPSChanges.Reset();
+            }
+        }
+
+    TInt err( KErrNone );
+
+    if( aUid == KVCXConnUtilTestPScategory )
+        {
+        if( aKey == KVCXConnUtilTestExeGlobalTesterCount )
+            {
+            iTesterCountChangedAlready = ETrue;
+            VCXLOGLO1("CVCXConnUtilTest:: KVCXConnUtilTestExeGlobalTesterCount changed.");
+            }
+        
+        if( aKey == KVCXConnUtilTestExePsKeyResponseAck + iPSKeyBase )
+            {
+            VCXLOGLO3("CVCXConnUtilTest:: received KVCXConnUtilTestExePsKeyResponseAck, value: %d (%S) ----->", aValue, &iName);
+            }
+
+        if( aKey == KVCXConnUtilTestExePsKeyResponseCmd + iPSKeyBase )
+            {
+            VCXLOGLO2("CVCXConnUtilTest:: received KVCXConnUtilTestExePsKeyResponseCmd (%S) ----->", &iName);
+
+            TInt cmd( aValue );
+            
+            TInt response( 0 );
+            
+            CVCXTestCommon::GetPSProperty( KVCXConnUtilTestPScategory,
+                    KVCXConnUtilTestExePsKeyResponseParam + iPSKeyBase, response );
+
+            CVCXTestCommon::GetPSProperty( KVCXConnUtilTestPScategory,
+                    KVCXConnUtilTestExePsKeyResponseError + iPSKeyBase, err );
+            
+            if( cmd == EVcxConnUtilCommandDisconnect )
+                {
+                VCXLOGLO3("CVCXConnUtilTest:: response for EVcxConnUtilCommandDisconnect, error: %d (%S) ----->", err, &iName);
+                }
+            
+            if( cmd == EVcxConnUtilCommandGetIap )
+                {
+                if( response == 0 )
+                    {
+                    VCXLOGLO1("CVCXConnUtilTest:: response for EVcxConnUtilCommandGetIap, IAP is 0, error!");
+                    err = KErrGeneral;
+                    }
+                else
+                    {
+                    VCXLOGLO2("CVCXConnUtilTest:: response for EVcxConnUtilCommandGetIap returned IAP: %d", response);
+                    }
+                }
+            
+            if( cmd == EVcxConnUtilCommandGetWapIdForIap )
+                {
+                VCXLOGLO2("CVCXConnUtilTest:: response for EVcxConnUtilCommandGetWapIdForIap returned: %d", response);
+                }            
+
+            Signal( err );
+            }
+        }
+
+    VCXLOGLO2("<<<CVCXConnUtilTest::ValueChangedL (%S)", &iName);
+    }
+
+// -----------------------------------------------------------------------------
+// CVCXConnUtilTest::ValueChangedL
+// -----------------------------------------------------------------------------
+//
+void CVCXConnUtilTest::ValueChangedL( const TUid& aUid, const TUint32& aKey, const TDesC& aValue )
+    {
+    VCXLOGLO2(">>>CVCXConnUtilTest::ValueChangedL (%S)", &iName);
+
+    if( aUid == KVcxConnUtilPScategory )
+        {
+        TBuf<256> pName;
+        GetPropertyNameL( aKey, pName );
+        VCXLOGLO3("CVCXConnUtilTest::ValueChanged: %S = %S", &pName, &aValue);
+
+        TBool found = EFalse;
+        for( TInt i = iWaitedPSChanges.Count() - 1; i >= 0; i-- )
+            {
+            if( iWaitedPSChanges[i].iProperty == aKey && iWaitedPSChanges[i].iStringValue.Compare( aValue ) == 0 )
+                {
+                iWaitedPSChanges.Remove( i );
+                found = ETrue;
+                break;
+                }
+            }
+
+        if( !found )
+            {
+            VCXLOGLO1("CVCXConnUtilTest:: The key was not found from wait queue.");
+
+            // Check not allowed property changes.
+            for( TInt i = iNotAllowedPSChanges.Count() - 1; i >= 0; i-- )
+                {
+                if( iNotAllowedPSChanges[i].iProperty == aKey && iWaitedPSChanges[i].iStringValue.Compare( aValue ) )
+                    {
+                    VCXLOGLO1("CVCXConnUtilTest:: Property change is not allowed. Error!");
+                    iNotAllowedPSChanges.Remove( i );
+                    Signal( KErrCorrupt );
+                    break;
+                    }
+                }
+            }
+        else
+            {
+            VCXLOGLO1("CVCXConnUtilTest:: Key found and removed from wait queue.");
+
+            const TInt KTimeoutMinute = 60 * 1000000;
+            iTimeoutTimer->CancelTimer();
+            iTimeoutTimer->After( KTimeoutMinute * 1 );
+
+            if( iWaitedPSChanges.Count() == 0 )
+                {
+                if( iWaitingForEmptyPropertyQueue )
+                    {
+                    iWaitingForEmptyPropertyQueue = EFalse;
+                    VCXLOGLO1("CVCXConnUtilTest:: Property queue empty, SIGNAL.");
+                    iTimeoutTimer->CancelTimer();
+                    Signal();
+                    }
+                }
+            }
+
+        if( iWaitedPSChanges.Count() == 0 )
+            {
+            iNotAllowedPSChanges.Reset();
+            }
+        }
+
+    if( aUid == KVCXConnUtilTestPScategory )
+        {
+
+        }
+
+    VCXLOGLO2("<<<CVCXConnUtilTest::ValueChangedL (%S)", &iName);
+    }
+
+// -----------------------------------------------------------------------------
+// CVCXConnUtilTest::TimerComplete
+// -----------------------------------------------------------------------------
+//
+void CVCXConnUtilTest::TimerComplete( TInt aTimerId, TInt aError )
+    {
+    VCXLOGLO3(">>>CVCXConnUtilTest::TimerComplete, err: %d (%S)", aError, &iName);
+
+    if( aError == KErrNone && aTimerId == KTimeoutTimerId && iWaitingForEmptyPropertyQueue )
+        {
+        if( iWaitedPSChanges.Count() > 0 )
+            {
+            VCXLOGLO1("CVCXConnUtilTest:: ---- TIMEOUT --- when waiting P&S changes ----->");
+
+            _LIT( KVCXConnUtilTest, "CVCXConnUtilTest" );
+            _LIT( KWhere, "TIMEOUT!" );
+            TestModuleIf().Printf( 0, KVCXConnUtilTest, KWhere );
+
+            Signal( KErrTimedOut );
+            }
+        else
+            {
+            VCXLOGLO1("CVCXConnUtilTest:: Timed out but property queue empty. Signal ok.");
+            Signal( KErrNone );
+            }
+        }
+
+    VCXLOGLO2("<<<CVCXConnUtilTest::TimerComplete (%S)", &iName);
+    }
+
+// -----------------------------------------------------------------------------
+// CVCXConnUtilTest::GetConnectionStatusL
+// -----------------------------------------------------------------------------
+//
+void CVCXConnUtilTest::GetConnectionStatusL( TInt aConnectionStatus, TDes& aStatusString )
+    {
+    switch( aConnectionStatus )
+        {
+        case EVCxNotConnected:
+            {
+            aStatusString.Copy( _L("EVCxNotConnected") );
+            }
+            break;
+
+        case EVCxConnecting:
+            {
+            aStatusString.Copy( _L("EVCxConnecting") );
+            }
+            break;
+
+        case EVCxConnected:
+            {
+            aStatusString.Copy( _L("EVCxConnected") );
+            }
+            break;
+
+        case EVCxDisconnecting:
+            {
+            aStatusString.Copy( _L("EVCxDisconnecting") );
+            }
+            break;
+
+        case EVCxRoamingRequest:
+            {
+            aStatusString.Copy( _L("EVCxRoamingRequest") );
+            }
+            break;
+
+        case EVCxRoamingAccepted:
+            {
+            aStatusString.Copy( _L("EVCxRoamingAccepted") );
+            }
+            break;
+
+        case EVCxError:
+            {
+            aStatusString.Copy( _L("EVCxError") );
+            }
+            break;
+
+        default:
+            {
+            VCXLOGLO2("CVCXConnUtilTest:: state %d is UKNOWN!", aConnectionStatus);
+            User::Leave( KErrArgument );
+            }
+            break;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CVCXConnUtilTest::TesterExeAliveL
+// -----------------------------------------------------------------------------
+//
+void CVCXConnUtilTest::TesterExeAliveL()
+    {
+    if( iProcess.ExitType() != EExitPending || iProcess.ExitReason() != KErrNone )
+        {
+        VCXLOGLO2("CVCXConnUtilTest:: ERROR: Tester process has terminated! (%S)", &iName);
+        VCXLOGLO2("CVCXConnUtilTest:: Exit type: %d", iProcess.ExitType());
+        VCXLOGLO2("CVCXConnUtilTest:: Exit reason: %d", iProcess.ExitReason());
+        TExitCategoryName exitCatName = iProcess.ExitCategory();
+        VCXLOGLO2("CVCXConnUtilTest:: Exit category: %S", &exitCatName);
+        User::Leave( KErrGeneral );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CVCXConnUtilTest::GetPropertyNameL
+// -----------------------------------------------------------------------------
+//
+void CVCXConnUtilTest::GetPropertyNameL( TInt aProperty, TDes& aPropertyName )
+    {
+    switch( aProperty )
+        {
+        case EVCxPSConnectionStatus:
+            {
+            aPropertyName.Copy( _L("EVCxPSConnectionStatus") );
+            break;
+            }
+
+        case EVCxPSIapId:
+            {
+            aPropertyName.Copy( _L("EVCxPSIapId") );
+            break;
+            }
+
+        case EVCxPSSnapId:
+            {
+            aPropertyName.Copy( _L("EVCxPSSnapId") );
+            break;
+            }
+
+        case EVCxPSMasterExists:
+            {
+            aPropertyName.Copy( _L("EVCxPSMasterExists") );
+            break;
+            }
+
+        case EVCxPSNbrConnInstances:
+            {
+            aPropertyName.Copy( _L("EVCxPSNbrConnInstances") );
+            break;
+            }
+
+        case EVCxPSRoamingRequestStatus:
+            {
+            aPropertyName.Copy( _L("EVCxPSRoamingRequestStatus") );
+            break;
+            }
+
+        case EVCxPSNbrRoamResp:
+            {
+            aPropertyName.Copy( _L("EVCxPSNbrRoamResp") );
+            break;
+            }
+
+        case EVCxPSNbRoamAccepted:
+            {
+            aPropertyName.Copy( _L("EVCxPSNbRoamAccepted") );
+            break;
+            }
+
+        default:
+            {
+            VCXLOGLO2("CVCXConnUtilTest:: Unknown property: %d!", aProperty);
+            User::Leave( KErrArgument );
+            }
+            break;
+        }
+    }
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+// None
+
+//  [End of File] - Do not remove
+