--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysstatemgmt/systemstateplugins/test/tunitgsapolicy/src/tgsa_step_fail.cpp Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,280 @@
+// 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 "gsastatepolicyfail.h"
+#include <ssm/ssmstatetransition.h>
+#include "ssmdebug.h"
+#include <e32uid.h>
+#include <ssm/ssmsubstates.hrh>
+#include <ssm/ssmcommandlist.h>
+#include <ssm/ssmcmd.hrh>
+#include <ssm/ssmcommand.h>
+
+#include "tgsa_step_fail.h"
+
+TSsmCommandType ArrFail[] = { ESsmCmdPublishSystemState, ESsmCmdPersistHalAttributes,
+ ESsmCmdFinaliseDrives, ESsmCmdPowerOff };
+
+CGsaFailTest::~CGsaFailTest()
+ {
+ }
+
+CGsaFailTest::CGsaFailTest() : CGsaTestBase(KTGsaFailStep)
+ {
+ }
+
+TVerdict CGsaFailTest::doTestStepL()
+ {
+ INFO_PRINTF1(_L("> CGsaFailTest::doTestStepL"));
+ TInt err = KErrNone;
+
+ __UHEAP_MARK;
+ TRAP(err, doTestNewL());
+ TEST(err == KErrNone);
+ __UHEAP_MARKEND;
+
+ __UHEAP_MARK;
+ TRAP(err, doTestInitializeL());
+ TEST(err == KErrNone);
+ __UHEAP_MARKEND;
+
+ __UHEAP_MARK;
+ TRAP(err, doTestPrepareCommandListL());
+ TEST(err == KErrNone);
+ __UHEAP_MARKEND;
+
+ __UHEAP_MARK;
+ TRAP(err, doTestCommandListL());
+ TEST(err == KErrNone);
+ __UHEAP_MARKEND;
+
+ __UHEAP_MARK;
+ TRAP(err, doTestGetNextStateL());
+ TEST(err == KErrNone);
+ __UHEAP_MARKEND;
+
+ return TestStepResult();
+ }
+
+/**
+Old Test CaseID AFSS-GSA-0025
+New Test CaseID DEVSRVS-SSPLUGINS-GSA-0025
+ */
+
+
+void CGsaFailTest::doTestNewL()
+ {
+ INFO_PRINTF1(_L("> CGsaFailTest::doTestNewL"));
+
+ TInt expectedErr = KErrNone;
+ MSsmStatePolicy* policy = NULL;
+ //test should pass
+ TRAPD(err, policy = CGsaStatePolicyFail::NewL());
+ INFO_PRINTF3(_L("Test completed with err : %d. expected err : %d"), err, expectedErr);
+ TEST(err == expectedErr);
+ TEST(policy != NULL);
+ policy->Release();
+ }
+
+/**
+Old Test CaseID AFSS-GSA-0026
+New Test CaseID DEVSRVS-SSPLUGINS-GSA-0025
+ */
+void CGsaFailTest::doTestInitializeL()
+ {
+ INFO_PRINTF1(_L("> CGsaFailTest::doTestInitializeL"));
+ CGsaStatePolicyFail* policy = CreateAndInitializeFailPolicyLC();
+ CleanupStack::PopAndDestroy(policy);
+ }
+
+/**
+Old Test CaseID AFSS-GSA-0027
+New Test CaseID DEVSRVS-SSPLUGINS-GSA-0025
+ */
+ void CGsaFailTest::doTestPrepareCommandListL()
+ {
+ INFO_PRINTF1(_L("> CGsaFailTest::doTestPrepareCommandListL"));
+ TestPrepareCommandListL(ESsmFail ,KSsmAnySubState, KErrNone);
+ TestPrepareCommandListL(ESsmFail ,KSsmAnySubState, KErrNone);
+ TestPrepareCommandListL(ESsmFail ,100, KErrNotFound);
+ }
+
+/**
+Old Test CaseID AFSS-GSA-0028
+New Test CaseID DEVSRVS-SSPLUGINS-GSA-0025
+ */
+void CGsaFailTest::doTestCommandListL()
+ {
+ INFO_PRINTF1(_L("> CGsaFailTest::doTestCommandListL"));
+
+ TestCommandListL(ESsmFail, KSsmAnySubState, (sizeof(ArrFail)/sizeof(ArrFail[0])));
+ }
+
+/**
+Old Test CaseID AFSS-GSA-0029
+New Test CaseID DEVSRVS-SSPLUGINS-GSA-0025
+ */
+
+void CGsaFailTest::doTestGetNextStateL()
+ {
+ CGsaStatePolicyFail* policy = CreateAndInitializeFailPolicyLC();
+
+ TSsmState state(ESsmFail, KSsmAnySubState);
+ TSsmState result(0, 0);
+ TestGetNextState(policy, state, KErrNone, result);
+
+ TSsmState firstState(ESsmFail, KSsmAnySubState);
+ TestGetNextState(policy, firstState, KErrNone, result);
+
+ TSsmState unknownState(ESsmFail, 100);
+ TestGetNextState(policy, unknownState, KErrNone, result);
+
+ CleanupStack::PopAndDestroy(policy);
+ }
+
+/**
+ Helper function to create and initialize fail state policy.
+*/
+CGsaStatePolicyFail* CGsaFailTest::CreateAndInitializeFailPolicyLC()
+ {
+ TRequestStatus trs;
+ TRequestStatus expectedTrs = KErrNone;
+ CGsaStatePolicyFail* self = static_cast<CGsaStatePolicyFail*>(CGsaStatePolicyFail::NewL());
+ CleanupStack::PushL(self);
+ self->Initialize(trs);
+ TEST(trs == KRequestPending);
+
+ // Test for cancelling the initialize request
+ self->InitializeCancel();
+ expectedTrs = KErrCancel;
+ TEST(trs.Int() == expectedTrs.Int());
+ INFO_PRINTF3(_L("Fail Policy Initialization cancelled with status : %d. expected status : %d"), trs.Int(), expectedTrs.Int());
+
+ // Call Initialize again to complete the intialization of the command list
+ trs = KErrNone;
+ self->Initialize(trs);
+ TEST(trs == KRequestPending);
+
+ StartScheduler();
+ User::WaitForRequest(trs);
+ expectedTrs = KErrNone;
+ INFO_PRINTF3(_L("Fail Policy Initialized with status : %d. expected status : %d"), trs.Int(), expectedTrs.Int());
+ TEST(trs.Int() == expectedTrs.Int());
+
+ return self;
+ }
+
+/**
+ Helper function to test preparation of command lists for fail state policy.
+*/
+void CGsaFailTest::TestPrepareCommandListL(TUint16 aMainState, TUint16 aSubState, TInt aExpectedResult)
+ {
+ // Initialize //
+ TRequestStatus trs;
+ CGsaStatePolicyFail* policy = static_cast<CGsaStatePolicyFail*>(CGsaStatePolicyFail::NewL());
+ CleanupStack::PushL(policy);
+ policy->Initialize(trs);
+ StartScheduler();
+ User::WaitForRequest(trs);
+ TEST( trs.Int() == KErrNone);
+
+ // PrepareCommandList //
+ trs = -1;
+ TSsmState state = TSsmState(aMainState, aSubState);
+ policy->PrepareCommandList(state, 0, trs);
+ TEST(trs == KRequestPending);
+
+ // Test for cancelling the prepare command list request
+ policy->PrepareCommandListCancel();
+ TEST(trs.Int() == KErrCancel);
+ INFO_PRINTF2(_L("Fail Policy PrepareCommandList cancelled with status : %d. expected status : -3"), trs.Int());
+
+ // Call PrepareCommandList again to complete the preparation of the command list
+ trs = KErrNone;
+ policy->PrepareCommandList(state, 0, trs);
+ TEST(trs == KRequestPending);
+ StartScheduler();
+ User::WaitForRequest(trs);
+ TSsmStateName name = state.Name();
+ INFO_PRINTF4(_L("PrepareCommandList() completed for State: %S with Status: %d. Expected Status: %d"), &name, trs.Int(), aExpectedResult);
+ TEST( trs.Int() == aExpectedResult);
+ CleanupStack::PopAndDestroy(policy);
+ }
+
+/**
+ Helper function to test the command type of each command present in command lists for fail state policy.
+*/
+void CGsaFailTest::TestCommandListL(TUint16 aMainState, TUint16 aSubState, TInt aNumSubStates)
+ {
+ // Initialize //
+ TRequestStatus trs;
+ CGsaStatePolicyFail* policy = static_cast<CGsaStatePolicyFail*>(CGsaStatePolicyFail::NewL());
+ CleanupStack::PushL(policy);
+ policy->Initialize(trs);
+ StartScheduler();
+ User::WaitForRequest(trs);
+ TEST( trs.Int() == KErrNone);
+
+ // PrepareCommandList //
+ trs = -1;
+ TSsmState state = TSsmState(aMainState, aSubState);
+ policy->PrepareCommandList(state, 0, trs);
+ StartScheduler();
+ User::WaitForRequest(trs);
+ TEST( trs.Int() == KErrNone);
+
+ // CommandList //
+ CSsmCommandList* cmdList = policy->CommandList();
+ TEST(cmdList != NULL);
+ const TInt count = cmdList->Count();
+ INFO_PRINTF2(_L("CommandList() has %d commands"), count);
+ TEST( count == aNumSubStates);
+
+ for (TInt i = 0; i < count ; i++)
+ {
+ const MSsmCommand* const command = (*cmdList)[i];
+ const TSsmCommandType cmdType = static_cast<TSsmCommandType>(command->Type());
+ INFO_PRINTF3(_L("Command num is : %d Command type is : %d"), i, cmdType);
+
+ TEST (ArrFail[i] == cmdType);
+ }
+ delete cmdList;
+ CleanupStack::PopAndDestroy(policy);
+ }
+
+/**
+ Helper function to test the GetNextState for each substate within fail state.
+*/
+void CGsaFailTest::TestGetNextState(CGsaStatePolicyFail* aPolicy, TSsmState aCurrentTransition, TInt aError, TSsmState aResult)
+ {
+ TRequestStatus trs;
+ TSsmState state(ESsmFail, KSsmAnySubState);
+ aPolicy->PrepareCommandList(state, KErrNone, trs);
+ StartScheduler();
+ User::WaitForRequest(trs);
+ TEST( trs.Int() == KErrNone);
+
+ TSsmState nextState;
+ aPolicy->GetNextState(aCurrentTransition, KErrNone, aError, ECmdCriticalSeverity, nextState);
+ INFO_PRINTF7(_L("Current State : 0x%x.0x%x Next State 0x%x.0x%x Expected Next State 0x%x.0x%x"), aCurrentTransition.MainState(), aCurrentTransition.SubState(), nextState.MainState(), nextState.SubState(), aResult.MainState(), aResult.SubState());
+
+ TEST(nextState == aResult);
+ }