sysstatemgmt/systemstateplugins/test/tunitgsapolicy/src/tgsa_step_fail.cpp
changeset 0 4e1aa6a622a0
child 21 ccb4f6b3db21
--- /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);
+	}