sysstatemgmt/systemstatereferenceplugins/test/tclayer/src/tclayer_step_startersession.cpp
changeset 0 4e1aa6a622a0
child 21 ccb4f6b3db21
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysstatemgmt/systemstatereferenceplugins/test/tclayer/src/tclayer_step_startersession.cpp	Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,367 @@
+// Copyright (c) 2007-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:
+//
+
+/**
+ @file
+ @test
+ @internalComponent - Internal Symbian test code  
+*/
+
+#include <ssm/ssmcommandlistresourcereader.h>
+#include <ssm/ssmstates.hrh>
+#include <ssm/ssmsubstates.hrh>
+#include <ssm/ssmstatemanager.h>
+
+// Include the header file for the class under test
+#include <ssm/starterclient.h>
+#include <ssm/startupdomainpskeys.h>
+#include <e32property.h>
+
+#include "ssmclayer.h"
+#include "startupadaptationcommands.h"
+
+#include "ssmdebug.h"
+
+#include "tclayer_step_startersession.h"
+
+//Include the test wrappers
+#include "adaptationcliwrapper.h"
+#include "ssmcmnwrapper.h"
+#include "featurediscoverywrapper.h"
+
+/**
+ * Constructs a complete CClayerTestStarterSession object
+ * @internalComponent
+ */
+CCLayerTestStarterSession::CCLayerTestStarterSession()
+	{
+	
+	}
+
+/**
+ * Releases any resources associated with this test
+ * @internalComponent
+ */
+CCLayerTestStarterSession::~CCLayerTestStarterSession()
+	{
+	
+	}
+
+/**
+ * Test step preamble
+ * @internalComponent
+ */
+TVerdict CCLayerTestStarterSession::doTestStepPreambleL()
+	{
+	return CTestStep::doTestStepPreambleL();
+	}
+
+/**
+ * Test step - a single test step performs a series of tests.
+ * 
+ * See the individual doTest... methods on this class for details of the tests.
+ * 
+ * All these tests use a variety of wrapper classes which provide equivalent methods 
+ * for all the APIs that RStarterSession uses. These wrapper classes can be requested
+ * (via static methods in the appropriate wrapper class) to modify their behaviour,
+ * such as return errors. This allows the internals and error handling to be easily tested. 
+ * 
+ * @internalComponent
+ */
+TVerdict CCLayerTestStarterSession::doTestStepL()
+	{
+	INFO_PRINTF1(_L("Entering test for compatibility layer starter session"));
+	__UHEAP_MARK;
+	doTestConnectAndClose();
+	doTestSetState();
+	doTestRequestReset();
+	doTestRequestShutdown();
+	doTestRfForEmergencyCall();
+	doTestEndSplashScreen();
+	
+	__UHEAP_MARKEND;
+	INFO_PRINTF1(_L("Leaving test for compatibility layer starter session"));
+	return TestStepResult();
+	}
+
+/**
+ * Test step postamble
+ * @internalComponent
+ */
+TVerdict CCLayerTestStarterSession::doTestStepPostambleL()
+	{
+	return CTestStep::doTestStepPostambleL();
+	}
+
+/**
+Old Test CaseID 		AFSS-CLAYER-0001
+New Test CaseID 		DEVSRVS-SSREFPLUGINS-CLAYER-0001
+ */		
+
+void CCLayerTestStarterSession::doTestConnectAndClose()
+	{
+	INFO_PRINTF1(_L("Entering CCLayerTestStarterSession::doTestConnectAndClose()"));
+	INFO_PRINTF1(_L("Close on undisconnected RStartSession"));
+	RStarterSession starterSession;
+	starterSession.Close();
+	
+	// Set the next error returned from RSsmStateManager wrapper
+	// This is to test that RStarterSession handles the return value from RSsmStateManager correctly
+	SsmCmnWrapper::SetSsmStateManagerNextConnectReturn(KErrNotFound);
+	
+	INFO_PRINTF1(_L("Connect on RStarterSession with RSsmStateManger::Connect() failing"));
+	TInt ret = starterSession.Connect();
+	TEST(ret == KErrNotFound);
+	
+	// Set the next error returned from RSsmStateManger
+	SsmCmnWrapper::SetSsmStateManagerNextConnectReturn(KErrNone);
+	
+	INFO_PRINTF1(_L("Connect on RStarterSession with RSsmStateManger::Connect() successful"));
+	ret = starterSession.Connect();
+	TEST(ret == KErrNone);
+	// Check that the session connected correctly and copied across the handle
+	TEST(starterSession.Handle() != KNullHandle);
+	TEST(starterSession.Handle() == SsmCmnWrapper::SsmStateManagerHandle());
+
+	
+	INFO_PRINTF1(_L("Close on connected RStartSession"));
+	starterSession.Close();
+	TEST(starterSession.Handle() == KNullHandle);
+	
+	INFO_PRINTF1(_L("Double close on connected RStartSession"));
+	starterSession.Close();
+	TEST(starterSession.Handle() == KNullHandle);
+	
+	INFO_PRINTF1(_L("Exiting CCLayerTestStarterSession::doTestConnectAndClose()"));
+	}
+
+/**
+ * This adjustment specifies how to convert start-up sub-states
+ * to the states defined in StartupAdaptation::TGlobalState
+ * 
+ * It is calculated using the same method specified in CSaaStateAdaptation::MapToStartupAdaptationState(),
+ * see that method for further details.
+ * 
+ * @internalComponent
+ */
+const TInt KStartupSubStateAdjustment = static_cast<TInt>(StartupAdaptation::ESWStateStartingUiServices) 
+									- static_cast<TInt>(ESsmStartupSubStateNonCritical);
+
+/**
+Old Test CaseID 		AFSS-CLAYER-0002
+New Test CaseID 		DEVSRVS-SSREFPLUGINS-CLAYER-0001
+ */		
+
+void CCLayerTestStarterSession::doTestSetState()
+	{
+	INFO_PRINTF1(_L("Entering CCLayerTestStarterSession::doTestSetState()"));
+	
+	INFO_PRINTF1(_L("Connecting RStarterSession"));
+	RStarterSession starterSession;
+	TInt ret = starterSession.Connect();
+	TEST(ret == KErrNone);
+	TEST(starterSession.Handle() != KNullHandle);
+	TEST(starterSession.Handle() == SsmCmnWrapper::SsmStateManagerHandle());
+	
+	INFO_PRINTF1(_L("Calling SetState(EAlarm)"));
+	ret = starterSession.SetState(RStarterSession::EAlarm);
+	TEST(ret == KErrNone);
+	TEST(SsmCmnWrapper::GetLastMainStateRequest() == ESsmStartup);
+	TEST(SsmCmnWrapper::GetLastSubStateRequest() == StartupAdaptation::ESWStateChargingToAlarm - KStartupSubStateAdjustment);
+	    
+	INFO_PRINTF1(_L("Calling SetState(ECharging)"));
+	ret = starterSession.SetState(RStarterSession::ECharging);
+	TEST(ret == KErrNone);
+	TEST(SsmCmnWrapper::GetLastMainStateRequest() == ESsmStartup);
+	TEST(SsmCmnWrapper::GetLastSubStateRequest() == StartupAdaptation::ESWStateAlarmToCharging - KStartupSubStateAdjustment);
+		  
+	INFO_PRINTF1(_L("Calling SetState(-1)"));
+	ret = starterSession.SetState(static_cast<RStarterSession::TGlobalState>(-1));
+	TEST(ret == KErrArgument);
+	
+	INFO_PRINTF1(_L("Close on connected RStartSession"));
+	starterSession.Close();
+	TEST(starterSession.Handle() == KNullHandle);
+	
+	INFO_PRINTF1(_L("Exiting CCLayerTestStarterSession::doTestSetState()"));
+	}
+
+/**
+Old Test CaseID 		AFSS-CLAYER-0003
+New Test CaseID 		DEVSRVS-SSREFPLUGINS-CLAYER-0001
+ */		
+
+void CCLayerTestStarterSession::doTestRequestReset()
+	{
+	INFO_PRINTF1(_L("Entering CCLayerTestStarterSession::doTestRequestReset()"));
+	
+	INFO_PRINTF1(_L("Connecting RStarterSession"));
+	RStarterSession starterSession;
+	TInt ret = starterSession.Connect();
+	TEST(ret == KErrNone);
+	TEST(starterSession.Handle() != KNullHandle);
+	TEST(starterSession.Handle() == SsmCmnWrapper::SsmStateManagerHandle());
+	
+	
+	INFO_PRINTF1(_L("Calling Reset(ELanguageSwitchReset)"));
+	starterSession.Reset(RStarterSession::ELanguageSwitchReset);
+	TEST(SsmCmnWrapper::GetLastMainStateRequest() == ESsmShutdown);
+	TEST(SsmCmnWrapper::GetLastSubStateRequest() == KSsmAnySubState);
+	TEST(SsmCmnWrapper::GetLastReasonRequest() == RStarterSession::ELanguageSwitchReset);
+	
+	INFO_PRINTF1(_L("Calling Reset(EOperatorSettingReset)"));
+	starterSession.Reset(RStarterSession::EOperatorSettingReset);
+	TEST(SsmCmnWrapper::GetLastMainStateRequest() == ESsmShutdown);
+	TEST(SsmCmnWrapper::GetLastSubStateRequest() == KSsmAnySubState);
+	TEST(SsmCmnWrapper::GetLastReasonRequest() == RStarterSession::EOperatorSettingReset);
+	
+	INFO_PRINTF1(_L("Calling Reset(EFirmwareUpdate)"));
+	starterSession.Reset(RStarterSession::EFirmwareUpdate);
+	TEST(SsmCmnWrapper::GetLastMainStateRequest() == ESsmShutdown);
+	TEST(SsmCmnWrapper::GetLastSubStateRequest() == KSsmAnySubState);
+	TEST(SsmCmnWrapper::GetLastReasonRequest() == RStarterSession::EFirmwareUpdate);
+	
+	INFO_PRINTF1(_L("Close on connected RStartSession"));
+	starterSession.Close();
+	TEST(starterSession.Handle() == KNullHandle);
+	
+	INFO_PRINTF1(_L("Exiting CCLayerTestStarterSession::doTestRequestReset()"));
+	}
+
+
+/**
+Old Test CaseID 		AFSS-CLAYER-0004
+New Test CaseID 		DEVSRVS-SSREFPLUGINS-CLAYER-0001
+ */		
+
+void CCLayerTestStarterSession::doTestRequestShutdown()
+	{
+	INFO_PRINTF1(_L("Entering CCLayerTestStarterSession::doTestRequestShutdown()"));
+
+	INFO_PRINTF1(_L("Connecting RStarterSession"));
+	RStarterSession starterSession;
+	TInt ret = starterSession.Connect();
+	TEST(ret == KErrNone);
+	TEST(starterSession.Handle() != KNullHandle);
+	TEST(starterSession.Handle() == SsmCmnWrapper::SsmStateManagerHandle());
+	
+	INFO_PRINTF1(_L("Calling Shutdown()"));
+	starterSession.Shutdown();
+	TEST(SsmCmnWrapper::GetLastMainStateRequest() == ESsmShutdown);
+	TEST(SsmCmnWrapper::GetLastSubStateRequest() == KSsmAnySubState);
+	TEST(SsmCmnWrapper::GetLastReasonRequest() == KSsmCLayerPowerOffReason);
+	
+	INFO_PRINTF1(_L("Close on connected RStartSession"));
+	starterSession.Close();
+	TEST(starterSession.Handle() == KNullHandle);
+	
+	INFO_PRINTF1(_L("Exiting CCLayerTestStarterSession::doTestRequestShutdown()"));
+	}
+
+/**
+Old Test CaseID 		AFSS-CLAYER-0007
+New Test CaseID 		DEVSRVS-SSREFPLUGINS-CLAYER-0001
+ */		
+
+void CCLayerTestStarterSession::doTestRfForEmergencyCall()
+	{
+	INFO_PRINTF1(_L("Entering CCLayerTestStarterSession::doTestRfForEmergencyCall()"));
+
+	INFO_PRINTF1(_L("Connecting RStarterSession"));
+	RStarterSession starterSession;
+	TInt ret = starterSession.Connect();
+	TEST(ret == KErrNone);
+	TEST(starterSession.Handle() != KNullHandle);
+	TEST(starterSession.Handle() == SsmCmnWrapper::SsmStateManagerHandle());
+	
+	INFO_PRINTF1(_L("Failure to connect to RSsmEmergencyCallRfAdaptation"));
+	// Set up connection to fail
+	AdaptationCliWrapper::SetRSsmAdaptationBaseNextConnectReturn(KErrPermissionDenied);
+	ret = starterSession.ActivateRfForEmergencyCall();
+	TEST(ret == KErrPermissionDenied);
+	// Allow connection to succeed on the next tests
+	AdaptationCliWrapper::SetRSsmAdaptationBaseNextConnectReturn(KErrNone);
+	
+	INFO_PRINTF1(_L("Activation and deactivation of RF for emergency calls"));
+	ret = starterSession.ActivateRfForEmergencyCall();
+	TEST(ret == KErrNone);
+	ret = starterSession.DeactivateRfAfterEmergencyCall();
+	TEST(ret == KErrNone);
+	
+	INFO_PRINTF1(_L("Activation and deactivation of RF for emergency calls not supported"));
+	AdaptationCliWrapper::SetRSsmEmergencyCallReturnValue(KErrNotSupported);
+	ret = starterSession.ActivateRfForEmergencyCall();
+	TEST(ret == KErrNotSupported);
+	ret = starterSession.DeactivateRfAfterEmergencyCall();
+	TEST(ret == KErrNotSupported);
+	// Allow future calls to succeed
+	AdaptationCliWrapper::SetRSsmEmergencyCallReturnValue(KErrNone);	
+	
+	INFO_PRINTF1(_L("Close on connected RStartSession"));
+	starterSession.Close();
+	TEST(starterSession.Handle() == KNullHandle);
+	
+	INFO_PRINTF1(_L("Exiting CCLayerTestStarterSession::doTestRfForEmergencyCall()"));
+	}
+
+/**
+Old Test CaseID 		AFSS-CLAYER-0008
+New Test CaseID 		DEVSRVS-SSREFPLUGINS-CLAYER-0001
+ */		
+
+void CCLayerTestStarterSession::doTestEndSplashScreen()
+	{
+	INFO_PRINTF1(_L("Entering CCLayerTestStarterSession::doTestEndSplashScreen()"));
+
+	INFO_PRINTF1(_L("Connecting RStarterSession"));
+	RStarterSession starterSession;
+	TInt ret = starterSession.Connect();
+	TEST(ret == KErrNone);
+	TEST(starterSession.Handle() != KNullHandle);
+	TEST(starterSession.Handle() == SsmCmnWrapper::SsmStateManagerHandle());
+	
+	INFO_PRINTF1(_L("Deleting splash screen property"));
+	ret = RProperty::Delete(KPSUidStartup, KPSSplashShutdown);
+	TEST(ret == KErrNone || ret == KErrNotFound);
+		
+	
+	INFO_PRINTF1(_L("Ending splashscreen without defining property"));
+	ret = starterSession.EndSplashScreen();
+	TEST(ret == KErrNotFound);
+	
+	INFO_PRINTF1(_L("Defining splash screen property"));
+	// In a test enviroment we don't need to worry about protecting the property
+	// so allow anything to change it
+	_LIT_SECURITY_POLICY_PASS(KAllPass); //lint !e648 Suppress overflow in computing constant for operation
+	ret = RProperty::Define(KPSUidStartup, KPSSplashShutdown, RProperty::EInt, KAllPass, KAllPass);
+	TEST(ret == KErrNone);
+	
+	INFO_PRINTF1(_L("Ending splashscreen with property defined"));
+	ret = starterSession.EndSplashScreen();
+	TEST(ret == KErrNone);
+	
+	INFO_PRINTF1(_L("Reading splash screen property"));
+	TInt value;
+	ret = RProperty::Get(KPSUidStartup, KPSSplashShutdown, value);
+	TEST(ret == KErrNone);
+	TEST(value == ESplashShutdown);
+	
+	INFO_PRINTF1(_L("Close on connected RStartSession"));
+	starterSession.Close();
+	TEST(starterSession.Handle() == KNullHandle);
+	
+	INFO_PRINTF1(_L("Exiting CCLayerTestStarterSession::doTestEndSplashScreen()"));
+	}
+