sysstatemgmt/systemstatemgr/test/tcmn/src/t_stateawaresession2.cpp
changeset 76 cb32bcc88bad
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysstatemgmt/systemstatemgr/test/tcmn/src/t_stateawaresession2.cpp	Fri Oct 08 14:33:25 2010 +0300
@@ -0,0 +1,273 @@
+// Copyright (c) 2010 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: Test wrapper for CSsmStateAwareSession2
+
+#include <e32std.h>
+#include <e32capability.h>
+#include <test/datawrapper.h>
+#include <ssm/ssmdomaindefs.h> 
+#include <ssm/ssmsubstates.hrh>
+#include "ssmsubstateext.hrh"
+
+#include "t_stateawaresession2.h"
+
+const TDmDomainId KTestDdmDomain = {KSM2AppServicesDomain3};
+
+//
+_LIT(KError,                     "error");
+_LIT(KAsyncIndex,                "asyncIndex");
+_LIT(KAcknowledge,               "acknowledge");
+
+//commands
+_LIT(KCmdNewL,                                      "NewL");
+_LIT(KCmdReadIniData,                               "ReadIniData");
+_LIT(KCmdRequestStateNotification,                  "RequestStateNotification");
+_LIT(KCmdAcknowledgeStateNotification,              "AcknowledgeStateNotification");
+_LIT(KCmdRequestStateNotificationCancel,            "RequestStateNotificationCancel");
+_LIT(KCmdDestructor,                                "~");
+
+/**
+ * Constructor
+ */
+TIniData3::TIniData3()
+         : iAcknowledge(ETrue)
+         , iAsyncIndex(0)
+         {}
+/**
+* @return pointer to the object that the data wraps
+*/
+TAny*  CTestCStateAwareSession::GetObject()
+    {
+    return iSsmStateAwareSession;
+    }
+
+/**
+ * SetObjectL
+ */
+void CTestCStateAwareSession::SetObjectL(TAny* aAny)
+    {
+    DoCleanup();
+    iSsmStateAwareSession=static_cast<CSsmStateAwareSession2*> (aAny);
+    }
+
+/**
+ * DisownObjectL
+ */
+void CTestCStateAwareSession::DisownObjectL()
+    {
+    iSsmStateAwareSession=NULL;
+    }
+
+/**
+ * Constructor.
+ */
+CTestCStateAwareSession::CTestCStateAwareSession():
+CDataWrapper()
+    {
+    }
+
+/**
+ * Destructor.
+ */
+CTestCStateAwareSession::~CTestCStateAwareSession()
+    {
+    DoCleanup();
+    }
+
+/**
+ * Process a command read from the ini file
+ *
+ * @param aCommand  the command to process
+ * @param aSection      the entry in the ini file requiring the command to be processed
+ *
+ * @return ETrue if the command is processed
+ */
+TBool CTestCStateAwareSession::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt /*aAsyncErrorIndex*/)
+    {
+    TBool retVal = ETrue;
+    if (aCommand == KCmdNewL)
+        {
+        DoCmdNew();
+        }
+    else if (aCommand == KCmdReadIniData)
+        {
+        DoCmdReadIniData(aSection);
+        }
+    else if (aCommand == KCmdAcknowledgeStateNotification)
+        {
+        DoCmdAcknowledgeStateNotification(aSection);
+        }
+    else if (aCommand == KCmdRequestStateNotification)
+        {
+        DoCmdRequestStateNotification();
+        }
+    else if (aCommand == KCmdRequestStateNotificationCancel)
+        {
+        DoCmdRequestStateNotificationCancel();
+        }
+    else if (aCommand == KCmdDestructor)
+        {
+        DoCmdDestructor();
+        }
+    else
+        {
+        retVal = EFalse;
+        }    
+   
+    return retVal;
+    }
+
+/**
+ * Creates CSsmStateAwareSession2 class instance
+ */
+void CTestCStateAwareSession::DoCmdNew()
+    {
+    INFO_PRINTF1(_L("Create CSsmStateAwareSession2 class instance"));
+    DoCleanup();
+    
+    TRAPD(err, iSsmStateAwareSession = CSsmStateAwareSession2::NewL(KTestDdmDomain, *this));
+    
+    if (err != KErrNone)
+        {
+        ERR_PRINTF2(_L("CSsmStateAwareSession2::NewL() error %d"), err);
+        SetError(err);
+        }
+    }
+
+/*
+ * Helper function to read ini file data
+ */
+void CTestCStateAwareSession::DoCmdReadIniData(const TDesC& aSection)
+    {
+    if( !GetIntFromConfig(aSection, KAsyncIndex(), iIniData.iAsyncIndex ) ||
+        !GetBoolFromConfig(aSection, KAcknowledge(), iIniData.iAcknowledge ) )
+        {
+        ERR_PRINTF1(_L("Error reading ini file data"));
+        SetError(KErrNotFound);
+        }
+    }
+
+/**
+ * Contains cleanup implementation
+ */
+void CTestCStateAwareSession::DoCleanup()
+    {
+    if(iSsmStateAwareSession != NULL)
+        {
+        INFO_PRINTF1(_L("Deleting current CSsmStateAwareSession2"));
+        delete iSsmStateAwareSession;
+        iSsmStateAwareSession = NULL;
+        }
+    }
+
+/**
+ * Destroy CSsmStateAwareSession2 object
+ */
+void CTestCStateAwareSession::DoCmdDestructor()
+    {
+    INFO_PRINTF1(_L("Destroying the CStateAwareSession2 object"));
+    DoCleanup();
+    }
+
+/**
+ * DoCmdRequestStateNotification 
+ */
+void CTestCStateAwareSession::DoCmdRequestStateNotification()
+    {
+    INFO_PRINTF1(_L("CTestCStateAwareSession: RequestStateNotification"));
+    iSsmStateAwareSession->RequestStateNotification();
+    IncOutstanding();
+    }
+
+/**
+ * DoCmdAcknowledgeStateNotification
+ */
+void CTestCStateAwareSession::DoCmdAcknowledgeStateNotification(const TDesC& aSection)
+    {
+    INFO_PRINTF1(_L("CTestCStateAwareSession: AcknowledgeStateNotification"));
+    TInt error;
+    if (!GetIntFromConfig(aSection, KError(), error ))
+        {
+        //set default error value if value is not provided in .ini file
+        error = KErrNone;
+        }
+   iSsmStateAwareSession->AcknowledgeStateNotification(error);    
+    }
+
+/**
+ * DoCmdAcknowledgeAndRequestStateNotification
+ */
+void CTestCStateAwareSession::DoCmdAcknowledgeAndRequestStateNotification(const TDesC& aSection)
+    {
+    INFO_PRINTF1(_L("CTestCStateAwareSession: AcknowledgeAndRequestStateNotification"));
+    TInt error;
+    if (!GetIntFromConfig(aSection, KError(), error ))
+        {
+        //set default error value if value is not provided in .ini file
+        error = KErrNone;
+        }
+    iSsmStateAwareSession->AcknowledgeAndRequestStateNotification(error);
+    IncOutstanding();
+    }
+
+/**
+ * DoCmdRequestStateNotificationCancel
+ */
+void CTestCStateAwareSession::DoCmdRequestStateNotificationCancel()
+    {
+    INFO_PRINTF1(_L("CTestCStateAwareSession: RequestStateNotificationCancel"));
+    iSsmStateAwareSession->RequestStateNotificationCancel();
+    }
+
+/**
+ * HandleTransition
+ */
+void CTestCStateAwareSession::HandleTransition(TInt aError)
+    { 
+    INFO_PRINTF1(_L("CTestCStateAwareSession::HandleTransition"));
+    TSsmState currentState;
+    currentState = iSsmStateAwareSession->GetState();
+    TUint16 currentMainState = currentState.MainState();
+    TUint16 currentSubState = currentState.SubState();
+    if(currentMainState == ESsmShutdown && 
+       currentSubState == ESsmShutdownSubStateCritical && 
+       iIniData.iAcknowledge)
+        {    
+        iSsmStateAwareSession->AcknowledgeStateNotification(aError);
+        }
+    }
+
+/**
+ * HandleDeferralError
+ */
+TInt CTestCStateAwareSession::HandleDeferralError(TInt aError)
+    {
+    INFO_PRINTF2(_L("CTestCStateAwareSession::HandleDeferralError error = %d"), aError);
+    RDebug::Printf("Entered CTestCStateAwareSession::HandleDeferralError() with error %d", aError);
+    TSsmState currentState;
+    currentState = iSsmStateAwareSession->GetState();
+    TUint16 currentMainState = currentState.MainState();
+    TUint16 currentSubState = currentState.SubState();
+    if(currentMainState == ESsmShutdown && 
+       currentSubState == ESsmNormalShutdown)
+        {
+        iSsmStateAwareSession->AcknowledgeAndRequestStateNotification(KErrNone);
+        IncOutstanding();
+        }
+    else
+        {
+        SetAsyncError(iIniData.iAsyncIndex, aError);
+        }
+    DecOutstanding();
+    return KErrNone;
+    }