diff -r 000000000000 -r 4e1aa6a622a0 sysstatemgmt/systemstatereferenceplugins/test/tclayer/src/tclayer_step_startersession.cpp --- /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 +#include +#include +#include + +// Include the header file for the class under test +#include +#include +#include + +#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(StartupAdaptation::ESWStateStartingUiServices) + - static_cast(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(-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()")); + } +