sysstatemgmt/systemstatemgr/test/tcmn/src/t_stateawaresession2.cpp
author hgs
Fri, 08 Oct 2010 14:33:25 +0300
changeset 76 cb32bcc88bad
permissions -rw-r--r--
201039
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
76
hgs
parents:
diff changeset
     1
// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     2
// All rights reserved.
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     7
//
hgs
parents:
diff changeset
     8
// Initial Contributors:
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    10
//
hgs
parents:
diff changeset
    11
//Contributors:
hgs
parents:
diff changeset
    12
//
hgs
parents:
diff changeset
    13
// Description: Test wrapper for CSsmStateAwareSession2
hgs
parents:
diff changeset
    14
hgs
parents:
diff changeset
    15
#include <e32std.h>
hgs
parents:
diff changeset
    16
#include <e32capability.h>
hgs
parents:
diff changeset
    17
#include <test/datawrapper.h>
hgs
parents:
diff changeset
    18
#include <ssm/ssmdomaindefs.h> 
hgs
parents:
diff changeset
    19
#include <ssm/ssmsubstates.hrh>
hgs
parents:
diff changeset
    20
#include "ssmsubstateext.hrh"
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
#include "t_stateawaresession2.h"
hgs
parents:
diff changeset
    23
hgs
parents:
diff changeset
    24
const TDmDomainId KTestDdmDomain = {KSM2AppServicesDomain3};
hgs
parents:
diff changeset
    25
hgs
parents:
diff changeset
    26
//
hgs
parents:
diff changeset
    27
_LIT(KError,                     "error");
hgs
parents:
diff changeset
    28
_LIT(KAsyncIndex,                "asyncIndex");
hgs
parents:
diff changeset
    29
_LIT(KAcknowledge,               "acknowledge");
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
//commands
hgs
parents:
diff changeset
    32
_LIT(KCmdNewL,                                      "NewL");
hgs
parents:
diff changeset
    33
_LIT(KCmdReadIniData,                               "ReadIniData");
hgs
parents:
diff changeset
    34
_LIT(KCmdRequestStateNotification,                  "RequestStateNotification");
hgs
parents:
diff changeset
    35
_LIT(KCmdAcknowledgeStateNotification,              "AcknowledgeStateNotification");
hgs
parents:
diff changeset
    36
_LIT(KCmdRequestStateNotificationCancel,            "RequestStateNotificationCancel");
hgs
parents:
diff changeset
    37
_LIT(KCmdDestructor,                                "~");
hgs
parents:
diff changeset
    38
hgs
parents:
diff changeset
    39
/**
hgs
parents:
diff changeset
    40
 * Constructor
hgs
parents:
diff changeset
    41
 */
hgs
parents:
diff changeset
    42
TIniData3::TIniData3()
hgs
parents:
diff changeset
    43
         : iAcknowledge(ETrue)
hgs
parents:
diff changeset
    44
         , iAsyncIndex(0)
hgs
parents:
diff changeset
    45
         {}
hgs
parents:
diff changeset
    46
/**
hgs
parents:
diff changeset
    47
* @return pointer to the object that the data wraps
hgs
parents:
diff changeset
    48
*/
hgs
parents:
diff changeset
    49
TAny*  CTestCStateAwareSession::GetObject()
hgs
parents:
diff changeset
    50
    {
hgs
parents:
diff changeset
    51
    return iSsmStateAwareSession;
hgs
parents:
diff changeset
    52
    }
hgs
parents:
diff changeset
    53
hgs
parents:
diff changeset
    54
/**
hgs
parents:
diff changeset
    55
 * SetObjectL
hgs
parents:
diff changeset
    56
 */
hgs
parents:
diff changeset
    57
void CTestCStateAwareSession::SetObjectL(TAny* aAny)
hgs
parents:
diff changeset
    58
    {
hgs
parents:
diff changeset
    59
    DoCleanup();
hgs
parents:
diff changeset
    60
    iSsmStateAwareSession=static_cast<CSsmStateAwareSession2*> (aAny);
hgs
parents:
diff changeset
    61
    }
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
/**
hgs
parents:
diff changeset
    64
 * DisownObjectL
hgs
parents:
diff changeset
    65
 */
hgs
parents:
diff changeset
    66
void CTestCStateAwareSession::DisownObjectL()
hgs
parents:
diff changeset
    67
    {
hgs
parents:
diff changeset
    68
    iSsmStateAwareSession=NULL;
hgs
parents:
diff changeset
    69
    }
hgs
parents:
diff changeset
    70
hgs
parents:
diff changeset
    71
/**
hgs
parents:
diff changeset
    72
 * Constructor.
hgs
parents:
diff changeset
    73
 */
hgs
parents:
diff changeset
    74
CTestCStateAwareSession::CTestCStateAwareSession():
hgs
parents:
diff changeset
    75
CDataWrapper()
hgs
parents:
diff changeset
    76
    {
hgs
parents:
diff changeset
    77
    }
hgs
parents:
diff changeset
    78
hgs
parents:
diff changeset
    79
/**
hgs
parents:
diff changeset
    80
 * Destructor.
hgs
parents:
diff changeset
    81
 */
hgs
parents:
diff changeset
    82
CTestCStateAwareSession::~CTestCStateAwareSession()
hgs
parents:
diff changeset
    83
    {
hgs
parents:
diff changeset
    84
    DoCleanup();
hgs
parents:
diff changeset
    85
    }
hgs
parents:
diff changeset
    86
hgs
parents:
diff changeset
    87
/**
hgs
parents:
diff changeset
    88
 * Process a command read from the ini file
hgs
parents:
diff changeset
    89
 *
hgs
parents:
diff changeset
    90
 * @param aCommand  the command to process
hgs
parents:
diff changeset
    91
 * @param aSection      the entry in the ini file requiring the command to be processed
hgs
parents:
diff changeset
    92
 *
hgs
parents:
diff changeset
    93
 * @return ETrue if the command is processed
hgs
parents:
diff changeset
    94
 */
hgs
parents:
diff changeset
    95
TBool CTestCStateAwareSession::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt /*aAsyncErrorIndex*/)
hgs
parents:
diff changeset
    96
    {
hgs
parents:
diff changeset
    97
    TBool retVal = ETrue;
hgs
parents:
diff changeset
    98
    if (aCommand == KCmdNewL)
hgs
parents:
diff changeset
    99
        {
hgs
parents:
diff changeset
   100
        DoCmdNew();
hgs
parents:
diff changeset
   101
        }
hgs
parents:
diff changeset
   102
    else if (aCommand == KCmdReadIniData)
hgs
parents:
diff changeset
   103
        {
hgs
parents:
diff changeset
   104
        DoCmdReadIniData(aSection);
hgs
parents:
diff changeset
   105
        }
hgs
parents:
diff changeset
   106
    else if (aCommand == KCmdAcknowledgeStateNotification)
hgs
parents:
diff changeset
   107
        {
hgs
parents:
diff changeset
   108
        DoCmdAcknowledgeStateNotification(aSection);
hgs
parents:
diff changeset
   109
        }
hgs
parents:
diff changeset
   110
    else if (aCommand == KCmdRequestStateNotification)
hgs
parents:
diff changeset
   111
        {
hgs
parents:
diff changeset
   112
        DoCmdRequestStateNotification();
hgs
parents:
diff changeset
   113
        }
hgs
parents:
diff changeset
   114
    else if (aCommand == KCmdRequestStateNotificationCancel)
hgs
parents:
diff changeset
   115
        {
hgs
parents:
diff changeset
   116
        DoCmdRequestStateNotificationCancel();
hgs
parents:
diff changeset
   117
        }
hgs
parents:
diff changeset
   118
    else if (aCommand == KCmdDestructor)
hgs
parents:
diff changeset
   119
        {
hgs
parents:
diff changeset
   120
        DoCmdDestructor();
hgs
parents:
diff changeset
   121
        }
hgs
parents:
diff changeset
   122
    else
hgs
parents:
diff changeset
   123
        {
hgs
parents:
diff changeset
   124
        retVal = EFalse;
hgs
parents:
diff changeset
   125
        }    
hgs
parents:
diff changeset
   126
   
hgs
parents:
diff changeset
   127
    return retVal;
hgs
parents:
diff changeset
   128
    }
hgs
parents:
diff changeset
   129
hgs
parents:
diff changeset
   130
/**
hgs
parents:
diff changeset
   131
 * Creates CSsmStateAwareSession2 class instance
hgs
parents:
diff changeset
   132
 */
hgs
parents:
diff changeset
   133
void CTestCStateAwareSession::DoCmdNew()
hgs
parents:
diff changeset
   134
    {
hgs
parents:
diff changeset
   135
    INFO_PRINTF1(_L("Create CSsmStateAwareSession2 class instance"));
hgs
parents:
diff changeset
   136
    DoCleanup();
hgs
parents:
diff changeset
   137
    
hgs
parents:
diff changeset
   138
    TRAPD(err, iSsmStateAwareSession = CSsmStateAwareSession2::NewL(KTestDdmDomain, *this));
hgs
parents:
diff changeset
   139
    
hgs
parents:
diff changeset
   140
    if (err != KErrNone)
hgs
parents:
diff changeset
   141
        {
hgs
parents:
diff changeset
   142
        ERR_PRINTF2(_L("CSsmStateAwareSession2::NewL() error %d"), err);
hgs
parents:
diff changeset
   143
        SetError(err);
hgs
parents:
diff changeset
   144
        }
hgs
parents:
diff changeset
   145
    }
hgs
parents:
diff changeset
   146
hgs
parents:
diff changeset
   147
/*
hgs
parents:
diff changeset
   148
 * Helper function to read ini file data
hgs
parents:
diff changeset
   149
 */
hgs
parents:
diff changeset
   150
void CTestCStateAwareSession::DoCmdReadIniData(const TDesC& aSection)
hgs
parents:
diff changeset
   151
    {
hgs
parents:
diff changeset
   152
    if( !GetIntFromConfig(aSection, KAsyncIndex(), iIniData.iAsyncIndex ) ||
hgs
parents:
diff changeset
   153
        !GetBoolFromConfig(aSection, KAcknowledge(), iIniData.iAcknowledge ) )
hgs
parents:
diff changeset
   154
        {
hgs
parents:
diff changeset
   155
        ERR_PRINTF1(_L("Error reading ini file data"));
hgs
parents:
diff changeset
   156
        SetError(KErrNotFound);
hgs
parents:
diff changeset
   157
        }
hgs
parents:
diff changeset
   158
    }
hgs
parents:
diff changeset
   159
hgs
parents:
diff changeset
   160
/**
hgs
parents:
diff changeset
   161
 * Contains cleanup implementation
hgs
parents:
diff changeset
   162
 */
hgs
parents:
diff changeset
   163
void CTestCStateAwareSession::DoCleanup()
hgs
parents:
diff changeset
   164
    {
hgs
parents:
diff changeset
   165
    if(iSsmStateAwareSession != NULL)
hgs
parents:
diff changeset
   166
        {
hgs
parents:
diff changeset
   167
        INFO_PRINTF1(_L("Deleting current CSsmStateAwareSession2"));
hgs
parents:
diff changeset
   168
        delete iSsmStateAwareSession;
hgs
parents:
diff changeset
   169
        iSsmStateAwareSession = NULL;
hgs
parents:
diff changeset
   170
        }
hgs
parents:
diff changeset
   171
    }
hgs
parents:
diff changeset
   172
hgs
parents:
diff changeset
   173
/**
hgs
parents:
diff changeset
   174
 * Destroy CSsmStateAwareSession2 object
hgs
parents:
diff changeset
   175
 */
hgs
parents:
diff changeset
   176
void CTestCStateAwareSession::DoCmdDestructor()
hgs
parents:
diff changeset
   177
    {
hgs
parents:
diff changeset
   178
    INFO_PRINTF1(_L("Destroying the CStateAwareSession2 object"));
hgs
parents:
diff changeset
   179
    DoCleanup();
hgs
parents:
diff changeset
   180
    }
hgs
parents:
diff changeset
   181
hgs
parents:
diff changeset
   182
/**
hgs
parents:
diff changeset
   183
 * DoCmdRequestStateNotification 
hgs
parents:
diff changeset
   184
 */
hgs
parents:
diff changeset
   185
void CTestCStateAwareSession::DoCmdRequestStateNotification()
hgs
parents:
diff changeset
   186
    {
hgs
parents:
diff changeset
   187
    INFO_PRINTF1(_L("CTestCStateAwareSession: RequestStateNotification"));
hgs
parents:
diff changeset
   188
    iSsmStateAwareSession->RequestStateNotification();
hgs
parents:
diff changeset
   189
    IncOutstanding();
hgs
parents:
diff changeset
   190
    }
hgs
parents:
diff changeset
   191
hgs
parents:
diff changeset
   192
/**
hgs
parents:
diff changeset
   193
 * DoCmdAcknowledgeStateNotification
hgs
parents:
diff changeset
   194
 */
hgs
parents:
diff changeset
   195
void CTestCStateAwareSession::DoCmdAcknowledgeStateNotification(const TDesC& aSection)
hgs
parents:
diff changeset
   196
    {
hgs
parents:
diff changeset
   197
    INFO_PRINTF1(_L("CTestCStateAwareSession: AcknowledgeStateNotification"));
hgs
parents:
diff changeset
   198
    TInt error;
hgs
parents:
diff changeset
   199
    if (!GetIntFromConfig(aSection, KError(), error ))
hgs
parents:
diff changeset
   200
        {
hgs
parents:
diff changeset
   201
        //set default error value if value is not provided in .ini file
hgs
parents:
diff changeset
   202
        error = KErrNone;
hgs
parents:
diff changeset
   203
        }
hgs
parents:
diff changeset
   204
   iSsmStateAwareSession->AcknowledgeStateNotification(error);    
hgs
parents:
diff changeset
   205
    }
hgs
parents:
diff changeset
   206
hgs
parents:
diff changeset
   207
/**
hgs
parents:
diff changeset
   208
 * DoCmdAcknowledgeAndRequestStateNotification
hgs
parents:
diff changeset
   209
 */
hgs
parents:
diff changeset
   210
void CTestCStateAwareSession::DoCmdAcknowledgeAndRequestStateNotification(const TDesC& aSection)
hgs
parents:
diff changeset
   211
    {
hgs
parents:
diff changeset
   212
    INFO_PRINTF1(_L("CTestCStateAwareSession: AcknowledgeAndRequestStateNotification"));
hgs
parents:
diff changeset
   213
    TInt error;
hgs
parents:
diff changeset
   214
    if (!GetIntFromConfig(aSection, KError(), error ))
hgs
parents:
diff changeset
   215
        {
hgs
parents:
diff changeset
   216
        //set default error value if value is not provided in .ini file
hgs
parents:
diff changeset
   217
        error = KErrNone;
hgs
parents:
diff changeset
   218
        }
hgs
parents:
diff changeset
   219
    iSsmStateAwareSession->AcknowledgeAndRequestStateNotification(error);
hgs
parents:
diff changeset
   220
    IncOutstanding();
hgs
parents:
diff changeset
   221
    }
hgs
parents:
diff changeset
   222
hgs
parents:
diff changeset
   223
/**
hgs
parents:
diff changeset
   224
 * DoCmdRequestStateNotificationCancel
hgs
parents:
diff changeset
   225
 */
hgs
parents:
diff changeset
   226
void CTestCStateAwareSession::DoCmdRequestStateNotificationCancel()
hgs
parents:
diff changeset
   227
    {
hgs
parents:
diff changeset
   228
    INFO_PRINTF1(_L("CTestCStateAwareSession: RequestStateNotificationCancel"));
hgs
parents:
diff changeset
   229
    iSsmStateAwareSession->RequestStateNotificationCancel();
hgs
parents:
diff changeset
   230
    }
hgs
parents:
diff changeset
   231
hgs
parents:
diff changeset
   232
/**
hgs
parents:
diff changeset
   233
 * HandleTransition
hgs
parents:
diff changeset
   234
 */
hgs
parents:
diff changeset
   235
void CTestCStateAwareSession::HandleTransition(TInt aError)
hgs
parents:
diff changeset
   236
    { 
hgs
parents:
diff changeset
   237
    INFO_PRINTF1(_L("CTestCStateAwareSession::HandleTransition"));
hgs
parents:
diff changeset
   238
    TSsmState currentState;
hgs
parents:
diff changeset
   239
    currentState = iSsmStateAwareSession->GetState();
hgs
parents:
diff changeset
   240
    TUint16 currentMainState = currentState.MainState();
hgs
parents:
diff changeset
   241
    TUint16 currentSubState = currentState.SubState();
hgs
parents:
diff changeset
   242
    if(currentMainState == ESsmShutdown && 
hgs
parents:
diff changeset
   243
       currentSubState == ESsmShutdownSubStateCritical && 
hgs
parents:
diff changeset
   244
       iIniData.iAcknowledge)
hgs
parents:
diff changeset
   245
        {    
hgs
parents:
diff changeset
   246
        iSsmStateAwareSession->AcknowledgeStateNotification(aError);
hgs
parents:
diff changeset
   247
        }
hgs
parents:
diff changeset
   248
    }
hgs
parents:
diff changeset
   249
hgs
parents:
diff changeset
   250
/**
hgs
parents:
diff changeset
   251
 * HandleDeferralError
hgs
parents:
diff changeset
   252
 */
hgs
parents:
diff changeset
   253
TInt CTestCStateAwareSession::HandleDeferralError(TInt aError)
hgs
parents:
diff changeset
   254
    {
hgs
parents:
diff changeset
   255
    INFO_PRINTF2(_L("CTestCStateAwareSession::HandleDeferralError error = %d"), aError);
hgs
parents:
diff changeset
   256
    RDebug::Printf("Entered CTestCStateAwareSession::HandleDeferralError() with error %d", aError);
hgs
parents:
diff changeset
   257
    TSsmState currentState;
hgs
parents:
diff changeset
   258
    currentState = iSsmStateAwareSession->GetState();
hgs
parents:
diff changeset
   259
    TUint16 currentMainState = currentState.MainState();
hgs
parents:
diff changeset
   260
    TUint16 currentSubState = currentState.SubState();
hgs
parents:
diff changeset
   261
    if(currentMainState == ESsmShutdown && 
hgs
parents:
diff changeset
   262
       currentSubState == ESsmNormalShutdown)
hgs
parents:
diff changeset
   263
        {
hgs
parents:
diff changeset
   264
        iSsmStateAwareSession->AcknowledgeAndRequestStateNotification(KErrNone);
hgs
parents:
diff changeset
   265
        IncOutstanding();
hgs
parents:
diff changeset
   266
        }
hgs
parents:
diff changeset
   267
    else
hgs
parents:
diff changeset
   268
        {
hgs
parents:
diff changeset
   269
        SetAsyncError(iIniData.iAsyncIndex, aError);
hgs
parents:
diff changeset
   270
        }
hgs
parents:
diff changeset
   271
    DecOutstanding();
hgs
parents:
diff changeset
   272
    return KErrNone;
hgs
parents:
diff changeset
   273
    }