--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysstatemgmt/systemstatereferenceplugins/test/tclayer/src/tclayer_step_startersessionwithssm.cpp Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,355 @@
+// Copyright (c) 2009 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:
+//Check SetState functionality for ENormal,EBTSap,EOffline of RStarterSession class.
+//Check ResetNetwork() behaviour of RStarterSession class.
+//Check IsRTCTimeValid when property is valid and invalid
+//Check rfstatusswp transition failure when process does not have WriteDeviceData or PowerMgmt Capabilities.
+
+//In case of a system wide errors, Set error should be passed with the system wide error else
+//ETrue should be passed to mark the test block as Fail.
+//Note that ETrue value is 1 and incase where test block expects the result to be 1 some appropriate value other than ETrue should be used.
+
+/**
+ @file
+ @SetError
+ @internalComponent - Internal Symbian SetError code
+*/
+
+#include <ssm/clayerswp.hrh>
+#include <ssm/ssmuiproviderdll.h>
+#include <ssm/startupdomainpskeys.h>
+
+#include "tclayer_step_startersessionwithssm.h"
+
+const TUint KRFStatusPropertyKey = 0x2001D2A9;
+const TUid KRFStatusPropertyCategory = {0x2000D75B};
+
+_LIT(KPolicyFilename, "rfstatusswppolicy.dll");
+
+// Parameters
+_LIT(KRTCTimeValidity, "RTCTimeValidity");
+_LIT(KGlobalState, "GlobalState");
+_LIT(KGlobalStateName, "GlobalStateName");
+_LIT(KRfStatus, "RfStatus");
+#ifdef TEST_SSM_GRACEFUL_OFFLINE
+_LIT(KWaitToSubscribe, "waitToSubscribe");
+#endif
+
+// Commands
+_LIT(KDefineSwpCmd, "DefineSwpCmd");
+_LIT(KSetStateCmd, "SetStateCmd");
+_LIT(KRequestResetNetworkCmd, "RequestResetNetworkCmd");
+_LIT(KIsRTCTimeValidCmd, "IsRTCTimeValidCmd");
+_LIT(KRFSwpTransitionNotAllowCmd, "RFSwpTransitionNotAllowCmd");
+
+/**
+ * Constructs a complete CCLayerTestRFSwpStatus object
+ */
+CCLayerTestWrapperWithSsm::CCLayerTestWrapperWithSsm():iObject()
+ {
+
+ }
+
+CCLayerTestWrapperWithSsm::~CCLayerTestWrapperWithSsm()
+ {
+ iStarterSession.Close();
+ iSwp.Close();
+ }
+
+CCLayerTestWrapperWithSsm* CCLayerTestWrapperWithSsm::NewL()
+ {
+ CCLayerTestWrapperWithSsm* ret = new (ELeave) CCLayerTestWrapperWithSsm();
+ CleanupStack::PushL(ret);
+ ret->ConstructL();
+ CleanupStack::Pop(ret);
+ return ret;
+ }
+
+void CCLayerTestWrapperWithSsm::ConstructL()
+ {
+ User::LeaveIfError(iStarterSession.Connect());
+ }
+
+/**
+Purpose: Command fuction for a wrapper class
+
+*/
+TBool CCLayerTestWrapperWithSsm::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
+ {
+ __UHEAP_MARK;
+
+ TBool ret = ETrue;
+ // Print out the parameters for debugging
+ INFO_PRINTF2( _L("<font size=3 color=990000><b>aCommand = %S</b></font>"), &aCommand );
+ INFO_PRINTF3( _L("aSection = %S aAsyncErrorIndex = %D"), &aSection,aAsyncErrorIndex );
+ TRAPD(err, DoCommandProcessL(aCommand,aSection));
+ if(err != KErrNone)
+ {
+ SetError(err);
+ ret = EFalse;
+ }
+
+ __UHEAP_MARKEND;
+ return ret;
+ }
+
+/*
+ * Commands are called, implemented only to catch the error in case of Leave
+ */
+void CCLayerTestWrapperWithSsm::DoCommandProcessL(const TTEFFunction& aCommand, const TTEFSectionName& aSection)
+ {
+ if(KRFSwpTransitionNotAllowCmd() == aCommand)
+ {
+ doTestRFSwpTransitionNotAllowedCmdL(aSection);
+ }
+ else if(KDefineSwpCmd() == aCommand)
+ {
+ DefineAndRegisterPropertyL();
+ }
+ else if(KSetStateCmd() == aCommand)
+ {
+ doTestSetStateCmdL(aSection);
+ }
+ else if(KRequestResetNetworkCmd() == aCommand)
+ {
+ doTestRequestResetNetworkCmdL();
+ }
+ else if(KIsRTCTimeValidCmd() == aCommand)
+ {
+ doTestIsRTCTimeValidCmdL(aSection);
+ }
+ else
+ {
+ User::Leave(EFalse);
+ }
+ }
+
+/**
+ * SetError is set to KErrNotSupported and KErrArgument which is expected value of transition not allowed for RFStatusSwPPolicy
+ * RSsmStateManager session request for swp change to check transition allowed or not
+ */
+void CCLayerTestWrapperWithSsm::doTestRFSwpTransitionNotAllowedCmdL(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Entering CCLayerTestWrapperWithSsm::doTestRFSwpTransitionNotAllowedCmdL()"));
+
+ //Connect RSsmSystemWideProperty
+ User::LeaveIfError(iSwp.Connect(KRFStatusPropertyKey));
+
+ TInt value = 0;
+ User::LeaveIfError(GetIntFromConfig(aSection, KGlobalState(), value));
+ RStarterSession::TGlobalState state = static_cast<RStarterSession::TGlobalState>(value);
+ TPtrC name;
+ User::LeaveIfError(GetStringFromConfig(aSection, KGlobalStateName(), name));
+ INFO_PRINTF2(_L("SetState %S"),&name);
+ TInt err = iStarterSession.SetState(state);
+ SetError(err);
+ if(value == RStarterSession::EOffline)
+ {
+ //RF SwP policy returns KErrNotSupported when process does not have required capability
+ INFO_PRINTF3(_L("Completing SwpTransition with expected error %d, and actual error %d"),KErrNotSupported,err);
+ }
+ else if(value == RStarterSession::ENormal)
+ {
+ INFO_PRINTF3(_L("Completing SwpTransition with expected error %d, and actual error %d"),KErrArgument,err);
+ }
+ iSwp.Close();
+ INFO_PRINTF1(_L("Exiting CCLayerTestWrapperWithSsm::doTestRFSwpTransitionNotAllowedCmdL()"));
+ }
+
+/**
+ * SetError is set to KErrNone which is expected value to pass SetState functionality of RStarterSession class
+ * which is specific to RF SwP change
+ */
+void CCLayerTestWrapperWithSsm::doTestSetStateCmdL(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Entering CCLayerTestWrapperWithSsm::doTestSetStateCmdL()"));
+ //Connect RSsmSystemWideProperty
+ User::LeaveIfError(iSwp.Connect(KRFStatusPropertyKey));
+
+ TInt value = 0;
+ User::LeaveIfError(GetIntFromConfig(aSection, KGlobalState(), value));
+ RStarterSession::TGlobalState state = static_cast<RStarterSession::TGlobalState>(value);
+ TPtrC name;
+ User::LeaveIfError(GetStringFromConfig(aSection, KGlobalStateName(), name));
+ INFO_PRINTF2(_L("SetState %S"),&name);
+ User::LeaveIfError(GetIntFromConfig(aSection, KRfStatus(), value));
+ TInt currentSwpVal;
+ RProperty::Get(KRFStatusPropertyCategory,KRFStatusPropertyKey,currentSwpVal);
+ //iStarterSession.SetState only called when currentSwpVal and called setting state's SwP value are different
+ if(currentSwpVal != value)
+ {
+ TInt err = iStarterSession.SetState(state);
+ if(err != KErrNone)
+ {
+ SetError(err);
+ INFO_PRINTF4(_L("Completing SetState(%S) with expected value %d, and actual value %d"),&name,KErrArgument,err);
+ }
+#ifdef TEST_SSM_GRACEFUL_OFFLINE
+ //Wait until RequestStateTransition() completes and KPSGlobalSystemState is changed
+ else
+ {
+ TBool waitToSubscribe = EFalse;
+ GetBoolFromConfig(aSection, KWaitToSubscribe(), waitToSubscribe);
+ if (waitToSubscribe)
+ {
+ TRequestStatus status;
+ RProperty property;
+ if(property.Attach(KPSUidStartup, KPSGlobalSystemState, EOwnerThread ) == KErrNone)
+ {
+ property.Subscribe(status);
+ User::WaitForRequest(status);
+ if ((status.Int()!= KErrNone))
+ {
+ SetError(status.Int());
+ ERR_PRINTF2(_L("Subscribing for the status returned an error: %d"),status.Int());
+ }
+ property.Close();
+ }
+ else
+ {
+ SetBlockResult(EFail);
+ ERR_PRINTF1(_L("Coudnot attach the property to KPSUidStartup, KPSGlobalSystemState"));
+ }
+ }
+ }
+#else
+ //wait until RequestSwpChange() completes and rfsatus is changed.
+ else
+ {
+ TRequestStatus status;
+ TInt rfStatus = 0;
+ iSwp.Subscribe(status);
+ User::WaitForRequest(status);
+ TInt err = iSwp.GetValue(rfStatus);
+ //Test will fail if the new rfstatus value is not same as what it is set with
+ //or if status completed with error
+ //or when GetValue returned an error
+ if((rfStatus != value) ||
+ (status.Int() != KErrNone) ||
+ (err != KErrNone))
+ {
+ SetError(err);
+ }
+ INFO_PRINTF4(_L("Completing SetState(%S) with expected rfstatus value %d, and actual rfstatus value %d"),&name,value,rfStatus);
+ }
+#endif // TEST_SSM_GRACEFUL_OFFLINE
+ }
+ else
+ {
+ SetError(ETrue);
+ }
+ //closing swp
+ iSwp.Close();
+ INFO_PRINTF1(_L("Exiting CCLayerTestWrapperWithSsm::doTestSetStateCmdL()"));
+ }
+
+/**
+ * SetError is set to KErrNone which is expected value to pass ResetNetwork functionality of RStarterSession class
+ * It checks rf SwP changes untill it will be ESsmRfOn
+ */
+void CCLayerTestWrapperWithSsm::doTestRequestResetNetworkCmdL()
+ {
+ INFO_PRINTF1(_L("Entering CCLayerTestWrapperWithSsm::doTestRequestResetNetworkCmdL()"));
+ User::LeaveIfError(iSwp.Connect(KRFStatusPropertyKey));
+
+ User::LeaveIfError(iStarterSession.ResetNetwork());
+
+ TInt value = 1;
+ iSwp.GetValue(value);
+ if(value == ESsmRfOff)
+ {
+ TRequestStatus status;
+ iSwp.Subscribe(status);
+ User::WaitForRequest(status);
+ iSwp.GetValue(value);
+ }
+ if(value != ESsmRfOn)
+ {
+ SetError(ETrue);
+ }
+ iSwp.Close();
+ INFO_PRINTF1(_L("Exiting CCLayerTestWrapperWithSsm::doTestRequestResetNetworkCmdL()"));
+ }
+
+/**
+ * SetError is set to KErrNone which is expected value to pass IsRTCTimeValid functionality of RStarterSession class
+ * It define the property with True and False value and checks its validity
+ */
+void CCLayerTestWrapperWithSsm::doTestIsRTCTimeValidCmdL(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Entering CCLayerTestWrapperWithSsm::doTestIsRTCTimeValidCmdL()"));
+
+ TBool value = EFalse;
+ User::LeaveIfError(GetBoolFromConfig(aSection, KRTCTimeValidity(), value));
+ INFO_PRINTF2(_L("Define Property for IsRTCTimeValid with value %d"), value);
+ TInt ret = RProperty::Set(CSsmUiSpecific::ValidateRTCPropertyCategory(),
+ CSsmUiSpecific::ValidateRTCPropertyKey(), value);
+ TBool validity = EFalse;
+ if( KErrNone == ret )
+ {
+ validity = iStarterSession.IsRTCTimeValid();
+ INFO_PRINTF2(_L("IsRTCTimeValid returns with validity %d"),validity);
+ }
+ else
+ {
+ SetError(ret);
+ }
+
+ //to pass the test value and validity should always be same
+ if(value != validity)
+ {
+ SetError(ETrue);
+ }
+ INFO_PRINTF1(_L("Exiting CCLayerTestWrapperWithSsm::doTestIsRTCTimeValidCmdL()"));
+ }
+/*
+ * Define property and register
+ */
+void CCLayerTestWrapperWithSsm::DefineAndRegisterPropertyL()
+ {
+ //Define the property for rfstatusswppolicy
+ _LIT_SECURITY_POLICY_PASS(KAllowAllPolicy);
+ TInt result = RProperty::Define(KRFStatusPropertyCategory, KRFStatusPropertyKey, RProperty::EInt,
+ KAllowAllPolicy, KAllowAllPolicy);
+
+ _LIT(KPRINT,"Return code for RProperty::Define for RFstate property key - %d -");
+ RDebug::Print(KPRINT, result);
+
+ if( KErrNone != result && KErrAlreadyExists != result)
+ {
+ User::Leave(result);
+ }
+ //define property for ValidateRTC
+ result = RProperty::Define(CSsmUiSpecific::ValidateRTCPropertyCategory(),
+ CSsmUiSpecific::ValidateRTCPropertyKey(), RProperty::EInt,
+ KAllowAllPolicy, KAllowAllPolicy);
+
+ _LIT(KPRINT2,"Return code for RProperty::Define for ValidateRTCPropertyKey - %d -");
+ RDebug::Print(KPRINT2, result);
+
+ if(KErrNone != result && KErrAlreadyExists != result)
+ {
+ User::Leave(result);
+ }
+ RSsmStateManager ssmSession;
+ User::LeaveIfError(ssmSession.Connect());
+ CleanupClosePushL(ssmSession);
+ TInt err = ssmSession.RegisterSwpMapping(KRFStatusPropertyKey, KPolicyFilename);
+ if(err != KErrAlreadyExists && KErrNone != err )
+ {
+ User::Leave(err);
+ }
+ RProperty::Set(KRFStatusPropertyCategory,KRFStatusPropertyKey,0xABAC);
+ CleanupStack::PopAndDestroy();//RSsmStateManager ssmSession
+ }