keepalive/flextimer/test/testflextimer/src/testflextimer.cpp
author hgs
Mon, 24 May 2010 20:51:35 +0300
changeset 32 5c4486441ae6
permissions -rw-r--r--
201021
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
32
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
* 
hgs
parents:
diff changeset
    14
* Description:
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
// INCLUDE FILES
hgs
parents:
diff changeset
    19
#include <StifTestInterface.h>
hgs
parents:
diff changeset
    20
#include "TestFlexTimer.h"
hgs
parents:
diff changeset
    21
#include "SettingServerClient.h"
hgs
parents:
diff changeset
    22
#include "testflexperiodic.h"
hgs
parents:
diff changeset
    23
#include "testcflextimer.h"
hgs
parents:
diff changeset
    24
#include "testrflextimer.h"
hgs
parents:
diff changeset
    25
#include "rflextimerservermonitor.h"
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
// EXTERNAL DATA STRUCTURES
hgs
parents:
diff changeset
    28
//extern  ?external_data;
hgs
parents:
diff changeset
    29
hgs
parents:
diff changeset
    30
// EXTERNAL FUNCTION PROTOTYPES  
hgs
parents:
diff changeset
    31
//extern ?external_function( ?arg_type,?arg_type );
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
// CONSTANTS
hgs
parents:
diff changeset
    34
//const ?type ?constant_var = ?constant;
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
// MACROS
hgs
parents:
diff changeset
    37
//#define ?macro ?macro_def
hgs
parents:
diff changeset
    38
hgs
parents:
diff changeset
    39
// LOCAL CONSTANTS AND MACROS
hgs
parents:
diff changeset
    40
//const ?type ?constant_var = ?constant;
hgs
parents:
diff changeset
    41
//#define ?macro_name ?macro_def
hgs
parents:
diff changeset
    42
hgs
parents:
diff changeset
    43
// MODULE DATA STRUCTURES
hgs
parents:
diff changeset
    44
//enum ?declaration
hgs
parents:
diff changeset
    45
//typedef ?declaration
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
// LOCAL FUNCTION PROTOTYPES
hgs
parents:
diff changeset
    48
//?type ?function_name( ?arg_type, ?arg_type );
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
// FORWARD DECLARATIONS
hgs
parents:
diff changeset
    51
//class ?FORWARD_CLASSNAME;
hgs
parents:
diff changeset
    52
hgs
parents:
diff changeset
    53
// ============================= LOCAL FUNCTIONS ===============================
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    56
// ?function_name ?description.
hgs
parents:
diff changeset
    57
// ?description
hgs
parents:
diff changeset
    58
// Returns: ?value_1: ?description
hgs
parents:
diff changeset
    59
//          ?value_n: ?description_line1
hgs
parents:
diff changeset
    60
//                    ?description_line2
hgs
parents:
diff changeset
    61
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    62
//
hgs
parents:
diff changeset
    63
/*
hgs
parents:
diff changeset
    64
?type ?function_name(
hgs
parents:
diff changeset
    65
    ?arg_type arg,  // ?description
hgs
parents:
diff changeset
    66
    ?arg_type arg)  // ?description
hgs
parents:
diff changeset
    67
    {
hgs
parents:
diff changeset
    68
hgs
parents:
diff changeset
    69
    ?code  // ?comment
hgs
parents:
diff changeset
    70
hgs
parents:
diff changeset
    71
    // ?comment
hgs
parents:
diff changeset
    72
    ?code
hgs
parents:
diff changeset
    73
    }
hgs
parents:
diff changeset
    74
*/
hgs
parents:
diff changeset
    75
hgs
parents:
diff changeset
    76
// ============================ MEMBER FUNCTIONS ===============================
hgs
parents:
diff changeset
    77
hgs
parents:
diff changeset
    78
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    79
// CTestFlexTimer::CTestFlexTimer
hgs
parents:
diff changeset
    80
// C++ default constructor can NOT contain any code, that
hgs
parents:
diff changeset
    81
// might leave.
hgs
parents:
diff changeset
    82
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    83
//
hgs
parents:
diff changeset
    84
CTestFlexTimer::CTestFlexTimer()
hgs
parents:
diff changeset
    85
    {
hgs
parents:
diff changeset
    86
hgs
parents:
diff changeset
    87
    }
hgs
parents:
diff changeset
    88
hgs
parents:
diff changeset
    89
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    90
// CTestFlexTimer::ConstructL
hgs
parents:
diff changeset
    91
// Symbian 2nd phase constructor can leave.
hgs
parents:
diff changeset
    92
// Note: If OOM test case uses STIF Logger, then STIF Logger must be created
hgs
parents:
diff changeset
    93
// with static buffer size parameter (aStaticBufferSize). Otherwise Logger 
hgs
parents:
diff changeset
    94
// allocates memory from heap and therefore causes error situations with OOM 
hgs
parents:
diff changeset
    95
// testing. For more information about STIF Logger construction, see STIF Users 
hgs
parents:
diff changeset
    96
// Guide.
hgs
parents:
diff changeset
    97
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    98
//
hgs
parents:
diff changeset
    99
void CTestFlexTimer::ConstructL()
hgs
parents:
diff changeset
   100
    {
hgs
parents:
diff changeset
   101
    //Read logger settings to check whether test case name is to be
hgs
parents:
diff changeset
   102
    //appended to log file name.
hgs
parents:
diff changeset
   103
    RSettingServer settingServer;
hgs
parents:
diff changeset
   104
    TInt ret = settingServer.Connect();
hgs
parents:
diff changeset
   105
    if(ret != KErrNone)
hgs
parents:
diff changeset
   106
        {
hgs
parents:
diff changeset
   107
        User::Leave(ret);
hgs
parents:
diff changeset
   108
        }
hgs
parents:
diff changeset
   109
    // Struct to StifLogger settigs.
hgs
parents:
diff changeset
   110
    TLoggerSettings loggerSettings; 
hgs
parents:
diff changeset
   111
    // Parse StifLogger defaults from STIF initialization file.
hgs
parents:
diff changeset
   112
    ret = settingServer.GetLoggerSettings(loggerSettings);
hgs
parents:
diff changeset
   113
    if(ret != KErrNone)
hgs
parents:
diff changeset
   114
        {
hgs
parents:
diff changeset
   115
        User::Leave(ret);
hgs
parents:
diff changeset
   116
        } 
hgs
parents:
diff changeset
   117
    // Close Setting server session
hgs
parents:
diff changeset
   118
    settingServer.Close();
hgs
parents:
diff changeset
   119
    iAddTestCaseTitleToLogName = loggerSettings.iAddTestCaseTitle;
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
    iStdLog = CStifLogger::NewL( KTestFlexTimerLogPath, 
hgs
parents:
diff changeset
   122
                                 KTestFlexTimerLogFile);
hgs
parents:
diff changeset
   123
    iLog = iStdLog;
hgs
parents:
diff changeset
   124
    
hgs
parents:
diff changeset
   125
    iVersionLogged = EFalse;
hgs
parents:
diff changeset
   126
    }
hgs
parents:
diff changeset
   127
hgs
parents:
diff changeset
   128
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   129
// CTestFlexTimer::NewL
hgs
parents:
diff changeset
   130
// Two-phased constructor.
hgs
parents:
diff changeset
   131
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   132
//
hgs
parents:
diff changeset
   133
CTestFlexTimer* CTestFlexTimer::NewL()
hgs
parents:
diff changeset
   134
    {
hgs
parents:
diff changeset
   135
    CTestFlexTimer* self = new (ELeave) CTestFlexTimer;
hgs
parents:
diff changeset
   136
hgs
parents:
diff changeset
   137
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
   138
    self->ConstructL();
hgs
parents:
diff changeset
   139
    CleanupStack::Pop();
hgs
parents:
diff changeset
   140
hgs
parents:
diff changeset
   141
    return self;
hgs
parents:
diff changeset
   142
hgs
parents:
diff changeset
   143
    }
hgs
parents:
diff changeset
   144
hgs
parents:
diff changeset
   145
// Destructor
hgs
parents:
diff changeset
   146
CTestFlexTimer::~CTestFlexTimer()
hgs
parents:
diff changeset
   147
    { 
hgs
parents:
diff changeset
   148
    iLog = NULL;
hgs
parents:
diff changeset
   149
    delete iStdLog;
hgs
parents:
diff changeset
   150
    iStdLog = NULL;
hgs
parents:
diff changeset
   151
    delete iTCLog;
hgs
parents:
diff changeset
   152
    iTCLog = NULL;
hgs
parents:
diff changeset
   153
    }
hgs
parents:
diff changeset
   154
hgs
parents:
diff changeset
   155
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   156
// CTestFlexTimer::InitL
hgs
parents:
diff changeset
   157
// InitL is used to initialize the Test Module.
hgs
parents:
diff changeset
   158
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   159
//
hgs
parents:
diff changeset
   160
TInt CTestFlexTimer::InitL( 
hgs
parents:
diff changeset
   161
    TFileName& /*aIniFile*/, 
hgs
parents:
diff changeset
   162
    TBool /*aFirstTime*/ )
hgs
parents:
diff changeset
   163
    {
hgs
parents:
diff changeset
   164
    return KErrNone;
hgs
parents:
diff changeset
   165
hgs
parents:
diff changeset
   166
    }
hgs
parents:
diff changeset
   167
hgs
parents:
diff changeset
   168
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   169
// CTestFlexTimer::CreateTitleLoggerL
hgs
parents:
diff changeset
   170
// Check for settings and create logger with test case title in file name.
hgs
parents:
diff changeset
   171
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   172
//
hgs
parents:
diff changeset
   173
void CTestFlexTimer::CreateTitleLoggerL(void)
hgs
parents:
diff changeset
   174
    {
hgs
parents:
diff changeset
   175
    //Open new log file with test case title in file name
hgs
parents:
diff changeset
   176
    if(iAddTestCaseTitleToLogName)
hgs
parents:
diff changeset
   177
        {
hgs
parents:
diff changeset
   178
        // Check if there is no test case logger already created.
hgs
parents:
diff changeset
   179
        if(iTCLog) 
hgs
parents:
diff changeset
   180
            { 
hgs
parents:
diff changeset
   181
            delete iTCLog; 
hgs
parents:
diff changeset
   182
            iTCLog = NULL; 
hgs
parents:
diff changeset
   183
            } 
hgs
parents:
diff changeset
   184
            
hgs
parents:
diff changeset
   185
        TFileName logFileName;
hgs
parents:
diff changeset
   186
        TName title;
hgs
parents:
diff changeset
   187
        TestModuleIf().GetTestCaseTitleL(title);
hgs
parents:
diff changeset
   188
        
hgs
parents:
diff changeset
   189
        logFileName.Format(KTestFlexTimerLogFileWithTitle, &title);
hgs
parents:
diff changeset
   190
hgs
parents:
diff changeset
   191
        iTCLog = CStifLogger::NewL(KTestFlexTimerLogPath, 
hgs
parents:
diff changeset
   192
                                 logFileName);
hgs
parents:
diff changeset
   193
        iLog = iTCLog; 
hgs
parents:
diff changeset
   194
        }
hgs
parents:
diff changeset
   195
    }
hgs
parents:
diff changeset
   196
hgs
parents:
diff changeset
   197
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   198
// CTestFlexTimer::CreateStdLoggerL
hgs
parents:
diff changeset
   199
// Check for logger settings and create standard logger.
hgs
parents:
diff changeset
   200
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   201
//
hgs
parents:
diff changeset
   202
void CTestFlexTimer::DeleteTitleLogger(void)
hgs
parents:
diff changeset
   203
    {
hgs
parents:
diff changeset
   204
    //Delete title logger
hgs
parents:
diff changeset
   205
    if(iAddTestCaseTitleToLogName)
hgs
parents:
diff changeset
   206
        {
hgs
parents:
diff changeset
   207
        iLog = iStdLog;
hgs
parents:
diff changeset
   208
        delete iTCLog;
hgs
parents:
diff changeset
   209
        iTCLog = NULL;
hgs
parents:
diff changeset
   210
        }
hgs
parents:
diff changeset
   211
    }
hgs
parents:
diff changeset
   212
hgs
parents:
diff changeset
   213
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   214
// CTestFlexTimer::GetTestCasesL
hgs
parents:
diff changeset
   215
// GetTestCases is used to inquire test cases from the Test Module. Test
hgs
parents:
diff changeset
   216
// cases are stored to array of test cases. The Test Framework will be 
hgs
parents:
diff changeset
   217
// the owner of the data in the RPointerArray after GetTestCases return
hgs
parents:
diff changeset
   218
// and it does the memory deallocation. 
hgs
parents:
diff changeset
   219
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   220
//
hgs
parents:
diff changeset
   221
TInt CTestFlexTimer::GetTestCasesL( 
hgs
parents:
diff changeset
   222
    const TFileName& /*aConfig*/, 
hgs
parents:
diff changeset
   223
    RPointerArray<TTestCaseInfo>& aTestCases )
hgs
parents:
diff changeset
   224
    {
hgs
parents:
diff changeset
   225
    // Loop through all test cases and create new
hgs
parents:
diff changeset
   226
    // TTestCaseInfo items and append items to aTestCase array    
hgs
parents:
diff changeset
   227
    for( TInt i = 0; Case(i).iMethod != NULL; i++ )
hgs
parents:
diff changeset
   228
        {
hgs
parents:
diff changeset
   229
        // Allocate new TTestCaseInfo from heap for a testcase definition.
hgs
parents:
diff changeset
   230
        TTestCaseInfo* newCase = new( ELeave ) TTestCaseInfo();
hgs
parents:
diff changeset
   231
    
hgs
parents:
diff changeset
   232
        // PushL TTestCaseInfo to CleanupStack.    
hgs
parents:
diff changeset
   233
        CleanupStack::PushL( newCase );
hgs
parents:
diff changeset
   234
hgs
parents:
diff changeset
   235
        // Set number for the testcase.
hgs
parents:
diff changeset
   236
        // When the testcase is run, this comes as a parameter to RunTestCaseL.
hgs
parents:
diff changeset
   237
        newCase->iCaseNumber = i;
hgs
parents:
diff changeset
   238
hgs
parents:
diff changeset
   239
        // Set title for the test case. This is shown in UI to user.
hgs
parents:
diff changeset
   240
        newCase->iTitle.Copy( Case(i).iCaseName );
hgs
parents:
diff changeset
   241
hgs
parents:
diff changeset
   242
        // Append TTestCaseInfo to the testcase array. After appended 
hgs
parents:
diff changeset
   243
        // successfully the TTestCaseInfo object is owned (and freed) 
hgs
parents:
diff changeset
   244
        // by the TestServer. 
hgs
parents:
diff changeset
   245
        User::LeaveIfError(aTestCases.Append ( newCase ) );
hgs
parents:
diff changeset
   246
        
hgs
parents:
diff changeset
   247
        // Pop TTestCaseInfo from the CleanupStack.
hgs
parents:
diff changeset
   248
        CleanupStack::Pop( newCase );
hgs
parents:
diff changeset
   249
        }
hgs
parents:
diff changeset
   250
hgs
parents:
diff changeset
   251
    return KErrNone;
hgs
parents:
diff changeset
   252
    }
hgs
parents:
diff changeset
   253
hgs
parents:
diff changeset
   254
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   255
// CTestFlexTimer::RunTestCaseL
hgs
parents:
diff changeset
   256
// RunTestCaseL is used to run an individual test case specified 
hgs
parents:
diff changeset
   257
// by aTestCase. Test cases that can be run may be requested from 
hgs
parents:
diff changeset
   258
// Test Module by GetTestCases method before calling RunTestCase.
hgs
parents:
diff changeset
   259
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   260
//
hgs
parents:
diff changeset
   261
TInt CTestFlexTimer::RunTestCaseL(
hgs
parents:
diff changeset
   262
    const TInt aCaseNumber,
hgs
parents:
diff changeset
   263
    const TFileName& /*aConfig*/,
hgs
parents:
diff changeset
   264
    TTestResult& aResult )
hgs
parents:
diff changeset
   265
    {
hgs
parents:
diff changeset
   266
    SendTestModuleVersion();
hgs
parents:
diff changeset
   267
hgs
parents:
diff changeset
   268
    TInt execStatus = KErrNone;
hgs
parents:
diff changeset
   269
hgs
parents:
diff changeset
   270
    // Get the pointer to test case function
hgs
parents:
diff changeset
   271
    TCaseInfo tmp = Case( aCaseNumber );
hgs
parents:
diff changeset
   272
hgs
parents:
diff changeset
   273
    _LIT( KLogInfo, "Starting testcase [%S]" );
hgs
parents:
diff changeset
   274
    iLog->Log( KLogInfo, &tmp.iCaseName);
hgs
parents:
diff changeset
   275
hgs
parents:
diff changeset
   276
    // Check that case number was valid
hgs
parents:
diff changeset
   277
    if ( tmp.iMethod != NULL )
hgs
parents:
diff changeset
   278
        {
hgs
parents:
diff changeset
   279
        //Open new log file with test case title in file name
hgs
parents:
diff changeset
   280
        CreateTitleLoggerL();
hgs
parents:
diff changeset
   281
    
hgs
parents:
diff changeset
   282
        // Valid case was found, call it via function pointer
hgs
parents:
diff changeset
   283
        iMethod = tmp.iMethod;        
hgs
parents:
diff changeset
   284
hgs
parents:
diff changeset
   285
        // Create and install an active scheduler for timers
hgs
parents:
diff changeset
   286
        CActiveScheduler* scheduler = new (ELeave) CActiveScheduler;
hgs
parents:
diff changeset
   287
        CleanupStack::PushL( scheduler );
hgs
parents:
diff changeset
   288
        CActiveScheduler::Install( scheduler );
hgs
parents:
diff changeset
   289
        //execStatus  = ( this->*iMethod )( aResult );
hgs
parents:
diff changeset
   290
        TRAPD(err, execStatus  = ( *iMethod )( aResult, this ));
hgs
parents:
diff changeset
   291
hgs
parents:
diff changeset
   292
        CleanupStack::PopAndDestroy( scheduler );
hgs
parents:
diff changeset
   293
hgs
parents:
diff changeset
   294
        // Test case was executed
hgs
parents:
diff changeset
   295
        DeleteTitleLogger();
hgs
parents:
diff changeset
   296
hgs
parents:
diff changeset
   297
        User::LeaveIfError(err);
hgs
parents:
diff changeset
   298
        }
hgs
parents:
diff changeset
   299
    else
hgs
parents:
diff changeset
   300
        {
hgs
parents:
diff changeset
   301
        // Valid case was not found, return error.
hgs
parents:
diff changeset
   302
        execStatus = KErrNotFound;
hgs
parents:
diff changeset
   303
        }
hgs
parents:
diff changeset
   304
hgs
parents:
diff changeset
   305
    // Return case execution status (not the result of the case execution)
hgs
parents:
diff changeset
   306
    return execStatus;
hgs
parents:
diff changeset
   307
    }
hgs
parents:
diff changeset
   308
hgs
parents:
diff changeset
   309
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   310
// CTestFlexTimer::OOMTestQueryL
hgs
parents:
diff changeset
   311
// Used to check if a particular test case should be run in OOM conditions and 
hgs
parents:
diff changeset
   312
// which memory allocations should fail.    
hgs
parents:
diff changeset
   313
//
hgs
parents:
diff changeset
   314
// NOTE: This method is virtual and must be implemented only if test case
hgs
parents:
diff changeset
   315
// should be executed using OOM conditions.  
hgs
parents:
diff changeset
   316
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   317
//
hgs
parents:
diff changeset
   318
TBool CTestFlexTimer::OOMTestQueryL( 
hgs
parents:
diff changeset
   319
                                const TFileName& /* aTestCaseFile */, 
hgs
parents:
diff changeset
   320
                                const TInt /* aCaseNumber */, 
hgs
parents:
diff changeset
   321
                                TOOMFailureType& /* aFailureType */, 
hgs
parents:
diff changeset
   322
                                TInt& /* aFirstMemFailure */, 
hgs
parents:
diff changeset
   323
                                TInt& /* aLastMemFailure */ ) 
hgs
parents:
diff changeset
   324
    {
hgs
parents:
diff changeset
   325
    _LIT( KOOMTestQueryL, "CTestFlexTimer::OOMTestQueryL" );
hgs
parents:
diff changeset
   326
    iLog->Log( KOOMTestQueryL ); 
hgs
parents:
diff changeset
   327
hgs
parents:
diff changeset
   328
    return EFalse;
hgs
parents:
diff changeset
   329
    }
hgs
parents:
diff changeset
   330
hgs
parents:
diff changeset
   331
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   332
// CTestFlexTimer::OOMTestInitializeL
hgs
parents:
diff changeset
   333
// Used to perform the test environment setup for a particular OOM test case. 
hgs
parents:
diff changeset
   334
// Test Modules may use the initialization file to read parameters for Test 
hgs
parents:
diff changeset
   335
// Module initialization but they can also have their own configure file or 
hgs
parents:
diff changeset
   336
// some other routine to initialize themselves.  
hgs
parents:
diff changeset
   337
//
hgs
parents:
diff changeset
   338
// NOTE: This method is virtual and must be implemented only if test case
hgs
parents:
diff changeset
   339
// should be executed using OOM conditions.  
hgs
parents:
diff changeset
   340
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   341
//
hgs
parents:
diff changeset
   342
void CTestFlexTimer::OOMTestInitializeL( 
hgs
parents:
diff changeset
   343
                                const TFileName& /* aTestCaseFile */, 
hgs
parents:
diff changeset
   344
                                const TInt /* aCaseNumber */ )
hgs
parents:
diff changeset
   345
    {
hgs
parents:
diff changeset
   346
    }
hgs
parents:
diff changeset
   347
hgs
parents:
diff changeset
   348
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   349
// CTestFlexTimer::OOMHandleWarningL
hgs
parents:
diff changeset
   350
// In some cases the heap memory allocation should be skipped, either due to
hgs
parents:
diff changeset
   351
// problems in the OS code or components used by the code being tested, or even 
hgs
parents:
diff changeset
   352
// inside the tested components which are implemented this way on purpose (by 
hgs
parents:
diff changeset
   353
// design), so it is important to give the tester a way to bypass allocation 
hgs
parents:
diff changeset
   354
// failures.
hgs
parents:
diff changeset
   355
//
hgs
parents:
diff changeset
   356
// NOTE: This method is virtual and must be implemented only if test case
hgs
parents:
diff changeset
   357
// should be executed using OOM conditions.  
hgs
parents:
diff changeset
   358
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   359
//
hgs
parents:
diff changeset
   360
void CTestFlexTimer::OOMHandleWarningL( 
hgs
parents:
diff changeset
   361
                                const TFileName& /* aTestCaseFile */,
hgs
parents:
diff changeset
   362
                                const TInt /* aCaseNumber */, 
hgs
parents:
diff changeset
   363
                                TInt& /* aFailNextValue */ )
hgs
parents:
diff changeset
   364
    {
hgs
parents:
diff changeset
   365
    }
hgs
parents:
diff changeset
   366
hgs
parents:
diff changeset
   367
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   368
// CTestFlexTimer::OOMTestFinalizeL
hgs
parents:
diff changeset
   369
// Used to perform the test environment cleanup for a particular OOM test case.
hgs
parents:
diff changeset
   370
//
hgs
parents:
diff changeset
   371
// NOTE: This method is virtual and must be implemented only if test case
hgs
parents:
diff changeset
   372
// should be executed using OOM conditions.  
hgs
parents:
diff changeset
   373
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   374
//                  
hgs
parents:
diff changeset
   375
void CTestFlexTimer::OOMTestFinalizeL( 
hgs
parents:
diff changeset
   376
                                const TFileName& /* aTestCaseFile */, 
hgs
parents:
diff changeset
   377
                                const TInt /* aCaseNumber */ )
hgs
parents:
diff changeset
   378
    {
hgs
parents:
diff changeset
   379
    }
hgs
parents:
diff changeset
   380
hgs
parents:
diff changeset
   381
//-----------------------------------------------------------------------------
hgs
parents:
diff changeset
   382
// CTemplateScriptTestFlexTimer::SendTestModuleVersion
hgs
parents:
diff changeset
   383
// Method used to send version of test module
hgs
parents:
diff changeset
   384
//-----------------------------------------------------------------------------
hgs
parents:
diff changeset
   385
//
hgs
parents:
diff changeset
   386
void CTestFlexTimer::SendTestModuleVersion()
hgs
parents:
diff changeset
   387
	{
hgs
parents:
diff changeset
   388
	if(iVersionLogged)
hgs
parents:
diff changeset
   389
		{
hgs
parents:
diff changeset
   390
		return;
hgs
parents:
diff changeset
   391
		}
hgs
parents:
diff changeset
   392
	
hgs
parents:
diff changeset
   393
	TVersion moduleVersion;
hgs
parents:
diff changeset
   394
	moduleVersion.iMajor = TEST_MODULE_VERSION_MAJOR;
hgs
parents:
diff changeset
   395
	moduleVersion.iMinor = TEST_MODULE_VERSION_MINOR;
hgs
parents:
diff changeset
   396
	moduleVersion.iBuild = TEST_MODULE_VERSION_BUILD;
hgs
parents:
diff changeset
   397
	
hgs
parents:
diff changeset
   398
	TFileName moduleName;
hgs
parents:
diff changeset
   399
	moduleName = _L("TestFlexTimer.dll");
hgs
parents:
diff changeset
   400
hgs
parents:
diff changeset
   401
	TBool newVersionOfMethod = ETrue;
hgs
parents:
diff changeset
   402
	TestModuleIf().SendTestModuleVersion(moduleVersion, moduleName, newVersionOfMethod);
hgs
parents:
diff changeset
   403
	iVersionLogged = ETrue;
hgs
parents:
diff changeset
   404
	}
hgs
parents:
diff changeset
   405
hgs
parents:
diff changeset
   406
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   407
// This function contains an array of all available test cases 
hgs
parents:
diff changeset
   408
// i.e pair of case name and test function. If case specified by parameter
hgs
parents:
diff changeset
   409
// aCaseNumber is found from array, then that item is returned.
hgs
parents:
diff changeset
   410
//
hgs
parents:
diff changeset
   411
// The reason for this rather complicated function is to specify all the
hgs
parents:
diff changeset
   412
// test cases only in one place. It is not necessary to understand how
hgs
parents:
diff changeset
   413
// function pointers to class member functions works when adding new test
hgs
parents:
diff changeset
   414
// cases. See function body for instructions how to add new test case.
hgs
parents:
diff changeset
   415
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   416
//
hgs
parents:
diff changeset
   417
const TCaseInfo CTestFlexTimer::Case( const TInt aCaseNumber ) const 
hgs
parents:
diff changeset
   418
    {
hgs
parents:
diff changeset
   419
    static TCaseInfoInternal const KCases[] =
hgs
parents:
diff changeset
   420
        {
hgs
parents:
diff changeset
   421
        // To add new test cases, add new items to this array
hgs
parents:
diff changeset
   422
        
hgs
parents:
diff changeset
   423
        // NOTE: When compiled to GCCE, there must be Classname::
hgs
parents:
diff changeset
   424
        // declaration in front of the method name, e.g. 
hgs
parents:
diff changeset
   425
        // CDemoModule::PrintTest. Otherwise the compiler
hgs
parents:
diff changeset
   426
        // gives errors.
hgs
parents:
diff changeset
   427
hgs
parents:
diff changeset
   428
        // Start FlexTimer server monitoring
hgs
parents:
diff changeset
   429
        ENTRY( "FlexTimerServer: Start crash monitoring", CTestFlexTimer::StartServerMonitoringL ),
hgs
parents:
diff changeset
   430
	    ENTRY( "FlexTimerClient: Change Priority: MuchMore", CTestFlexTimer::SetThreadPriorityMuchMore ),
hgs
parents:
diff changeset
   431
        ENTRY( "FlexTimerClient: Change Priority: Normal", CTestFlexTimer::SetThreadPriorityNormal ),
hgs
parents:
diff changeset
   432
hgs
parents:
diff changeset
   433
        // CFlexPeriodic tests
hgs
parents:
diff changeset
   434
        ENTRY( "CFlexPeriodic: Start one timer", CTestFlexPeriodic::StartOneTimerL ),
hgs
parents:
diff changeset
   435
        ENTRY( "CFlexPeriodic: Start one timer with error CB", CTestFlexPeriodic::StartOneTimerWithErrorCbL ),
hgs
parents:
diff changeset
   436
        ENTRY( "CFlexPeriodic: Restart timer in callback", CTestFlexPeriodic::CallbackRestartL ),
hgs
parents:
diff changeset
   437
        ENTRY( "CFlexPeriodic: 32bit configure", CTestFlexPeriodic::ConfigureWindow32L ),
hgs
parents:
diff changeset
   438
        ENTRY( "CFlexPeriodic: 64bit configure", CTestFlexPeriodic::ConfigureWindow64L ),
hgs
parents:
diff changeset
   439
        ENTRY( "CFlexPeriodic: Mixed bit configure", CTestFlexPeriodic::ConfigureWindowMixL ),
hgs
parents:
diff changeset
   440
        ENTRY( "CFlexPeriodic: Configure after start", CTestFlexPeriodic::ConfigureAfterStartL ),
hgs
parents:
diff changeset
   441
        ENTRY( "CFlexPeriodic: Start timer twice", CTestFlexPeriodic::StartAfterStartL ),
hgs
parents:
diff changeset
   442
        ENTRY( "CFlexPeriodic: Start timer in callback", CTestFlexPeriodic::StartInCallbackL ),
hgs
parents:
diff changeset
   443
        ENTRY( "CFlexPeriodic: Start timer with negative delay (32 bit)", CTestFlexPeriodic::StartWithNegativeDelay32L ),
hgs
parents:
diff changeset
   444
        ENTRY( "CFlexPeriodic: Start timer with zero interval (32 bit)", CTestFlexPeriodic::StartWithZeroInterval32L ),
hgs
parents:
diff changeset
   445
        ENTRY( "CFlexPeriodic: Start timer with negative interval (32 bit)", CTestFlexPeriodic::StartWithNegativeInterval32L ),
hgs
parents:
diff changeset
   446
        ENTRY( "CFlexPeriodic: Start timer with negative delay (64 bit)", CTestFlexPeriodic::StartWithNegativeDelay64L ),
hgs
parents:
diff changeset
   447
        ENTRY( "CFlexPeriodic: Start timer with zero interval (64 bit)", CTestFlexPeriodic::StartWithZeroInterval64L ),
hgs
parents:
diff changeset
   448
        ENTRY( "CFlexPeriodic: Start timer with negative interval (64 bit)", CTestFlexPeriodic::StartWithNegativeInterval64L ),
hgs
parents:
diff changeset
   449
        ENTRY( "CFlexPeriodic: Configure timer with negative delay window (32 bit)", CTestFlexPeriodic::ConfigureWithNegativeDelayWindow32L ),
hgs
parents:
diff changeset
   450
        ENTRY( "CFlexPeriodic: Configure timer with negative interval window (32 bit)", CTestFlexPeriodic::ConfigureWithNegativeIntervalWindow32L ),
hgs
parents:
diff changeset
   451
        ENTRY( "CFlexPeriodic: Configure timer with negative delay window (64 bit)", CTestFlexPeriodic::ConfigureWithNegativeDelayWindow64L ),
hgs
parents:
diff changeset
   452
        ENTRY( "CFlexPeriodic: Configure timer with negative interval window (64 bit)", CTestFlexPeriodic::ConfigureWithNegativeIntervalWindow64L ),
hgs
parents:
diff changeset
   453
        ENTRY( "CFlexPeriodic: Start timer with min and max values", CTestFlexPeriodic::StartWithMinAndMaxL ),
hgs
parents:
diff changeset
   454
        ENTRY( "CFlexPeriodic: Start timer with maximum delay (64 bit)", CTestFlexPeriodic::StartWithMaximumDelay64L ),
hgs
parents:
diff changeset
   455
        ENTRY( "CFlexPeriodic: Start timer with maximum interval (64 bit)", CTestFlexPeriodic::StartWithMaximumInterval64L ),
hgs
parents:
diff changeset
   456
        ENTRY( "CFlexPeriodic: Start timer NULL callback function (32 bit)", CTestFlexPeriodic::StartWithNullCallBack32L ),
hgs
parents:
diff changeset
   457
        ENTRY( "CFlexPeriodic: Start timer NULL callback function (64 bit)", CTestFlexPeriodic::StartWithNullCallBack64L ),
hgs
parents:
diff changeset
   458
        ENTRY( "CFlexPeriodic: Client crash", CTestFlexPeriodic::ClientCrashL ),
hgs
parents:
diff changeset
   459
        //CFlexTimer tests
hgs
parents:
diff changeset
   460
        ENTRY( "CFlexTimer: Create and destroy a timer - After", CTestCFlexTimer::CreateAndDestroyCFlexTimerL ),
hgs
parents:
diff changeset
   461
        ENTRY( "CFlexTimer: Create and expire a timer - After", CTestCFlexTimer::CreateAndExpireCFlexTimerL ),
hgs
parents:
diff changeset
   462
        ENTRY( "CFlexTimer: Create two timers and expire those - overlapping - After 32bit", CTestCFlexTimer::CreateAndExpireTwoOverlappingAfterTimersL ),
hgs
parents:
diff changeset
   463
        ENTRY( "CFlexTimer: Create two timers and expire those - overlapping - After 64bit", CTestCFlexTimer::CreateAndExpireTwoOverlappingAfterTimers64L ),
hgs
parents:
diff changeset
   464
        ENTRY( "CFlexTimer: Create two timers and expire those - non overlapping - After", CTestCFlexTimer::CreateAndExpireTwoNonOverlappingAfterTimersL ),
hgs
parents:
diff changeset
   465
        ENTRY( "CFlexTimer: Create zillion timers and expire them at rapid sequence", CTestCFlexTimer::HumongousAmountOfTimeridelidilidousL ),
hgs
parents:
diff changeset
   466
        ENTRY( "CFlexTimer: Create overlapping After and At timers and non-overlapping AtUTC", CTestCFlexTimer::CreateAndExpireThreeTimersL ),
hgs
parents:
diff changeset
   467
        ENTRY( "CFlexTimer: Start and cancel timers", CTestCFlexTimer::NormalCancelL ),
hgs
parents:
diff changeset
   468
        ENTRY( "CFlexTimer: Cancel timer that would have triggered another timer", CTestCFlexTimer::CancelTimerThatWouldHaveTriggeredAnotherTimerL ),
hgs
parents:
diff changeset
   469
        ENTRY( "CFlexTimer: Configure 50 pct and 10 pct windows - overlap - 1", CTestCFlexTimer::ConfigureCTimerOverlap1L ),
hgs
parents:
diff changeset
   470
        ENTRY( "CFlexTimer: Configure 50 pct and 10 pct windows - overlap - 2", CTestCFlexTimer::ConfigureCTimerOverlap2L ),
hgs
parents:
diff changeset
   471
        ENTRY( "CFlexTimer: Configure 0 pct and 100 pct windows - overlap - 3", CTestCFlexTimer::ConfigureCTimerOverlap3L ),
hgs
parents:
diff changeset
   472
        ENTRY( "CFlexTimer: Configure 0 pct and 10 pct windows - non-overlap - 1", CTestCFlexTimer::ConfigureCTimerNonOverlap1L ),
hgs
parents:
diff changeset
   473
        ENTRY( "CFlexTimer: Configure 50 pct and 50 pct windows - non-overlap - 2", CTestCFlexTimer::ConfigureCTimerNonOverlap2L ),     
hgs
parents:
diff changeset
   474
        ENTRY( "CFlexTimer: System Time Changes", CTestCFlexTimer::SystemTimeChangesL ),
hgs
parents:
diff changeset
   475
        ENTRY( "CFlexTimer: Time zone changes", CTestCFlexTimer::TimeZoneChangesL ),
hgs
parents:
diff changeset
   476
        ENTRY( "CFlexTimer: Dumbass parameters for CFlexTimer", CTestCFlexTimer::DumbAssParametersForCTimerL ),
hgs
parents:
diff changeset
   477
        ENTRY( "CFlexTimer: 32bit After called with zero interval", CTestCFlexTimer::DumbAssParametersForCTimerZero32bitL ),
hgs
parents:
diff changeset
   478
        ENTRY( "CFlexTimer: 64bit After called with zero interval", CTestCFlexTimer::DumbAssParametersForCTimerZero64bitL ),
hgs
parents:
diff changeset
   479
        ENTRY( "CFlexTimer: 64bit After called with max interval", CTestCFlexTimer::DumbAssParametersForCTimer64MaxL ),
hgs
parents:
diff changeset
   480
        ENTRY( "CFlexTimer: 64bit After called with three year interval", CTestCFlexTimer::DumbAssParametersForCTimer64ThreeYearsL ),
hgs
parents:
diff changeset
   481
        ENTRY( "CFlexTimer: 64bit After called with one year interval", CTestCFlexTimer::DumbAssParametersForCTimer64OneYearL ),
hgs
parents:
diff changeset
   482
        ENTRY( "CFlexTimer: After (32bit) called with negative value", CTestCFlexTimer::AfterWithNegativeValueL ),
hgs
parents:
diff changeset
   483
        ENTRY( "CFlexTimer: At with current time", CTestCFlexTimer::AtWithCurrentTimeL ),
hgs
parents:
diff changeset
   484
        ENTRY( "CFlexTimer: AtUTC with current time", CTestCFlexTimer::AtUTCWithCurrentTimeL ),
hgs
parents:
diff changeset
   485
        ENTRY( "CFlexTimer: At with three year timer", CTestCFlexTimer::AtWithThreeYearsL ),
hgs
parents:
diff changeset
   486
        ENTRY( "CFlexTimer: At with one year timer", CTestCFlexTimer::AtWithOneYearL ),
hgs
parents:
diff changeset
   487
        ENTRY( "CFlexTimer: At() with time in the past", CTestCFlexTimer::AtWithTimeInThePastL ),
hgs
parents:
diff changeset
   488
        ENTRY( "CFlexTimer: Cancel timer that is already expired", CTestCFlexTimer::CancelExpiredTimerL ),
hgs
parents:
diff changeset
   489
        ENTRY( "CFlexTimer: Left side of the window is in the past", CTestCFlexTimer::ConfigureLeftSideInThePastL ),
hgs
parents:
diff changeset
   490
        ENTRY( "CFlexTimer: Left side of the window is in the past", CTestCFlexTimer::ConfigureLeftSideInThePastWindowCheckL ),
hgs
parents:
diff changeset
   491
        ENTRY( "CFlexTimer: Configure(32bit) called with negative window size", CTestCFlexTimer::ConfigureWithNegativeWindowSize32L ),
hgs
parents:
diff changeset
   492
        ENTRY( "CFlexTimer: Configure(64bit) called with negative window size", CTestCFlexTimer::ConfigureWithNegativeWindowSize64L ),
hgs
parents:
diff changeset
   493
        ENTRY( "CFlexTimer: Configure(32bit) called with max positive value", CTestCFlexTimer::ConfigureWithMaxWindow32L ),
hgs
parents:
diff changeset
   494
        ENTRY( "CFlexTimer: Configure(64bit) called with three year value", CTestCFlexTimer::ConfigureWithThreeYearWindow64L ),
hgs
parents:
diff changeset
   495
        ENTRY( "CFlexTimer: Configure(64bit) called with max positive value", CTestCFlexTimer::ConfigureWithMaxWindow64L ),
hgs
parents:
diff changeset
   496
        ENTRY( "CFlexTimer: Configure called while timer is already in use", CTestCFlexTimer::ConfigureWhileTimerIsInUseL ),
hgs
parents:
diff changeset
   497
        ENTRY( "CFlexTimer: Timer is started twise", CTestCFlexTimer::TimerIsStartedTwiceL ),
hgs
parents:
diff changeset
   498
        ENTRY( "CFlexTimer: Two timers, while high CPU load.", CTestCFlexTimer::CpuLoadCreateAndExpireTwoOverlappingAfterTimersL ),
hgs
parents:
diff changeset
   499
        ENTRY( "CFlexTimer: Many timers, while high CPU load.", CTestCFlexTimer::CpuLoadManyTimersL ),
hgs
parents:
diff changeset
   500
        // RFlexTimer tests
hgs
parents:
diff changeset
   501
        ENTRY( "RFlexTimer: Start timer with After (32 bit)", CTestRFlexTimer::ExpireAfter32L ),
hgs
parents:
diff changeset
   502
        ENTRY( "RFlexTimer: Start timer with After (64 bit)", CTestRFlexTimer::ExpireAfter64L ),
hgs
parents:
diff changeset
   503
        ENTRY( "RFlexTimer: Start timer with AfterTicks", CTestRFlexTimer::ExpireAfterTicksL ),
hgs
parents:
diff changeset
   504
        ENTRY( "RFlexTimer: Start timer with At", CTestRFlexTimer::ExpireAtL ),
hgs
parents:
diff changeset
   505
        ENTRY( "RFlexTimer: Start timer with AtUTC", CTestRFlexTimer::ExpireAtUtcL ),
hgs
parents:
diff changeset
   506
        ENTRY( "RFlexTimer: Call After (32 bit) before Connect", CTestRFlexTimer::After32WithoutConnect ),
hgs
parents:
diff changeset
   507
        ENTRY( "RFlexTimer: Call After (64 bit) before Connect", CTestRFlexTimer::After64WithoutConnect ),
hgs
parents:
diff changeset
   508
        ENTRY( "RFlexTimer: Call AfterTicks before Connect", CTestRFlexTimer::AfterTicksWithoutConnect ),
hgs
parents:
diff changeset
   509
        ENTRY( "RFlexTimer: Call At before Connect", CTestRFlexTimer::AtWithoutConnect ),
hgs
parents:
diff changeset
   510
        ENTRY( "RFlexTimer: Call AtUTC before Connect", CTestRFlexTimer::AtUtcWithoutConnect ),
hgs
parents:
diff changeset
   511
        ENTRY( "RFlexTimer: Call Configure (32 bit) before Connect", CTestRFlexTimer::Configure32WithoutConnect ),
hgs
parents:
diff changeset
   512
        ENTRY( "RFlexTimer: Call Configure (64 bit) before Connect", CTestRFlexTimer::Configure64WithoutConnect ),
hgs
parents:
diff changeset
   513
        ENTRY( "RFlexTimer: Call Cancel before Connect", CTestRFlexTimer::CancelWithoutConnect ),
hgs
parents:
diff changeset
   514
        ENTRY( "RFlexTimer: Call After twice", CTestRFlexTimer::CallAfterTwiceL ),
hgs
parents:
diff changeset
   515
        ENTRY( "RFlexTimer: Call AfterTicks twice", CTestRFlexTimer::CallAfterTicksTwiceL ),
hgs
parents:
diff changeset
   516
        ENTRY( "RFlexTimer: Call At twice", CTestRFlexTimer::CallAtTwiceL ),
hgs
parents:
diff changeset
   517
        ENTRY( "RFlexTimer: Call AtUTC twice", CTestRFlexTimer::CallAtUtcTwiceL ),
hgs
parents:
diff changeset
   518
        ENTRY( "RFlexTimer: Call Connect twice", CTestRFlexTimer::CallConnectTwiceL ),
hgs
parents:
diff changeset
   519
        ENTRY( "RFlexTimer: Reconnect to the server", CTestRFlexTimer::ReconnectL ),
hgs
parents:
diff changeset
   520
        ENTRY( "RFlexTimer: Cancel before start", CTestRFlexTimer::CancelWithoutStart ),
hgs
parents:
diff changeset
   521
        ENTRY( "RFlexTimer: Call AfterTicks with negative ticks", CTestRFlexTimer::NegativeTicksInAfterTicksL ),
hgs
parents:
diff changeset
   522
        ENTRY( "RFlexTimer: Call AfterTicks with zero ticks", CTestRFlexTimer::ZeroTicksInAfterTicksL ),
hgs
parents:
diff changeset
   523
        ENTRY( "RFlexTimer: Change time while AfterTicks running", CTestRFlexTimer::ChangeTimeWhileAfterTicksL ),
hgs
parents:
diff changeset
   524
        ENTRY( "RFlexTimer: Test AfterTicks windows", CTestRFlexTimer::TestAfterTicksWindowL ),
hgs
parents:
diff changeset
   525
        // High priority client tests
hgs
parents:
diff changeset
   526
        ENTRY( "FlexTimerClient: Change Priority: MuchMore", CTestFlexTimer::SetThreadPriorityMuchMore ),
hgs
parents:
diff changeset
   527
        ENTRY( "CFlexTimer: Two timers, while high CPU load.", CTestCFlexTimer::CpuLoadCreateAndExpireTwoOverlappingAfterTimersL ),
hgs
parents:
diff changeset
   528
        ENTRY( "CFlexTimer: Many timers, while high CPU load.", CTestCFlexTimer::CpuLoadManyTimersL ),
hgs
parents:
diff changeset
   529
        ENTRY( "FlexTimerClient: Change Priority: Normal", CTestFlexTimer::SetThreadPriorityNormal ),
hgs
parents:
diff changeset
   530
        // FlexTimerServer tests
hgs
parents:
diff changeset
   531
        ENTRY( "FlexTimerServer: Stop crash monitoring", CTestFlexTimer::StopServerMonitoringL ),
hgs
parents:
diff changeset
   532
hgs
parents:
diff changeset
   533
        ENTRY( "FlexTimerServer: Start second server", CTestFlexTimer::StartSecondServerL ),
hgs
parents:
diff changeset
   534
        };
hgs
parents:
diff changeset
   535
    
hgs
parents:
diff changeset
   536
    // Verify that case number is valid
hgs
parents:
diff changeset
   537
    if( (TUint) aCaseNumber >= sizeof( KCases ) / 
hgs
parents:
diff changeset
   538
                               sizeof( TCaseInfoInternal ) )
hgs
parents:
diff changeset
   539
        {
hgs
parents:
diff changeset
   540
hgs
parents:
diff changeset
   541
        // Invalid case, construct empty object
hgs
parents:
diff changeset
   542
        TCaseInfo null( (const TText*) L"" );
hgs
parents:
diff changeset
   543
        null.iMethod = NULL;
hgs
parents:
diff changeset
   544
        null.iIsOOMTest = EFalse;
hgs
parents:
diff changeset
   545
        null.iFirstMemoryAllocation = 0;
hgs
parents:
diff changeset
   546
        null.iLastMemoryAllocation = 0;
hgs
parents:
diff changeset
   547
        return null;
hgs
parents:
diff changeset
   548
hgs
parents:
diff changeset
   549
        } 
hgs
parents:
diff changeset
   550
hgs
parents:
diff changeset
   551
    // Construct TCaseInfo object and return it
hgs
parents:
diff changeset
   552
    TCaseInfo tmp ( KCases[ aCaseNumber ].iCaseName );
hgs
parents:
diff changeset
   553
    tmp.iMethod = KCases[ aCaseNumber ].iMethod;
hgs
parents:
diff changeset
   554
    tmp.iIsOOMTest = KCases[ aCaseNumber ].iIsOOMTest;
hgs
parents:
diff changeset
   555
    tmp.iFirstMemoryAllocation = KCases[ aCaseNumber ].iFirstMemoryAllocation;
hgs
parents:
diff changeset
   556
    tmp.iLastMemoryAllocation = KCases[ aCaseNumber ].iLastMemoryAllocation;
hgs
parents:
diff changeset
   557
    return tmp;
hgs
parents:
diff changeset
   558
    }
hgs
parents:
diff changeset
   559
hgs
parents:
diff changeset
   560
// ========== Server level test cases ==========
hgs
parents:
diff changeset
   561
hgs
parents:
diff changeset
   562
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   563
// TEST CASE: Start monitoring the FlexTimer server
hgs
parents:
diff changeset
   564
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   565
TInt CTestFlexTimer::StartServerMonitoringL(
hgs
parents:
diff changeset
   566
    TTestResult& aResult, 
hgs
parents:
diff changeset
   567
    CTestFlexTimer* /* aCallback */ )
hgs
parents:
diff changeset
   568
    {
hgs
parents:
diff changeset
   569
    aResult.SetResult( KErrGeneral, _L("Test case leaved") );
hgs
parents:
diff changeset
   570
hgs
parents:
diff changeset
   571
    RFlexTimerServerMonitor monitor;
hgs
parents:
diff changeset
   572
    User::LeaveIfError( monitor.Connect() );
hgs
parents:
diff changeset
   573
    User::LeaveIfError( monitor.StartMonitoring() );
hgs
parents:
diff changeset
   574
    monitor.Close();
hgs
parents:
diff changeset
   575
hgs
parents:
diff changeset
   576
    aResult.SetResult( KErrNone, _L("Test case passed") );
hgs
parents:
diff changeset
   577
    
hgs
parents:
diff changeset
   578
    return KErrNone;
hgs
parents:
diff changeset
   579
    }
hgs
parents:
diff changeset
   580
hgs
parents:
diff changeset
   581
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   582
// TEST CASE: Stop monitoring the FlexTimer server and check has the server
hgs
parents:
diff changeset
   583
// crashded.
hgs
parents:
diff changeset
   584
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   585
TInt CTestFlexTimer::StopServerMonitoringL(
hgs
parents:
diff changeset
   586
    TTestResult& aResult, 
hgs
parents:
diff changeset
   587
    CTestFlexTimer* /* aCallback */ )
hgs
parents:
diff changeset
   588
    {
hgs
parents:
diff changeset
   589
    aResult.SetResult( KErrGeneral, _L("Test case leaved") );
hgs
parents:
diff changeset
   590
    
hgs
parents:
diff changeset
   591
    RFlexTimerServerMonitor monitor;
hgs
parents:
diff changeset
   592
    User::LeaveIfError( monitor.Connect() );
hgs
parents:
diff changeset
   593
    
hgs
parents:
diff changeset
   594
    TBool hasServerCrashed; 
hgs
parents:
diff changeset
   595
    User::LeaveIfError( monitor.GetStatus( hasServerCrashed ) );
hgs
parents:
diff changeset
   596
    
hgs
parents:
diff changeset
   597
    User::LeaveIfError( monitor.StopMonitoring() );
hgs
parents:
diff changeset
   598
    monitor.Close();
hgs
parents:
diff changeset
   599
hgs
parents:
diff changeset
   600
    // By default everything has gone ok 
hgs
parents:
diff changeset
   601
    aResult.SetResult( KErrNone, _L("Test case passed") );
hgs
parents:
diff changeset
   602
    if ( hasServerCrashed )
hgs
parents:
diff changeset
   603
        {
hgs
parents:
diff changeset
   604
        aResult.SetResult( 
hgs
parents:
diff changeset
   605
            KErrGeneral,
hgs
parents:
diff changeset
   606
            _L("Test case failed. FlexTimerServer has crashed.") );
hgs
parents:
diff changeset
   607
        }
hgs
parents:
diff changeset
   608
    
hgs
parents:
diff changeset
   609
    return KErrNone;        
hgs
parents:
diff changeset
   610
    }
hgs
parents:
diff changeset
   611
hgs
parents:
diff changeset
   612
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   613
// TEST CASE: Start second FlexTimerServer. Main purpose of this test case is 
hgs
parents:
diff changeset
   614
// to increase test coverage.
hgs
parents:
diff changeset
   615
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   616
TInt CTestFlexTimer::StartSecondServerL(
hgs
parents:
diff changeset
   617
    TTestResult& aResult, 
hgs
parents:
diff changeset
   618
    CTestFlexTimer* /* aCallback */ )
hgs
parents:
diff changeset
   619
    {
hgs
parents:
diff changeset
   620
    __UHEAP_MARK;
hgs
parents:
diff changeset
   621
hgs
parents:
diff changeset
   622
    // Default result if anything leaves i.e. no analyze done.
hgs
parents:
diff changeset
   623
    aResult.SetResult( KErrGeneral, _L("Test case leaved") );
hgs
parents:
diff changeset
   624
hgs
parents:
diff changeset
   625
    // Make sure that the server is up'n'running
hgs
parents:
diff changeset
   626
    RFlexTimer timer;
hgs
parents:
diff changeset
   627
    timer.Connect();
hgs
parents:
diff changeset
   628
    timer.Close();
hgs
parents:
diff changeset
   629
    
hgs
parents:
diff changeset
   630
    // Open handle to the server process
hgs
parents:
diff changeset
   631
    RProcess flexTimerServer;
hgs
parents:
diff changeset
   632
    User::LeaveIfError( flexTimerServer.Create( 
hgs
parents:
diff changeset
   633
            _L("FlexTimerServer.exe"), 
hgs
parents:
diff changeset
   634
            _L(""), 
hgs
parents:
diff changeset
   635
            EOwnerThread ) );
hgs
parents:
diff changeset
   636
hgs
parents:
diff changeset
   637
    // Kick the server runnin'
hgs
parents:
diff changeset
   638
    flexTimerServer.Resume();
hgs
parents:
diff changeset
   639
hgs
parents:
diff changeset
   640
    // Wait until the server process has been started.
hgs
parents:
diff changeset
   641
    TRequestStatus status;
hgs
parents:
diff changeset
   642
    flexTimerServer.Rendezvous( status );
hgs
parents:
diff changeset
   643
    User::WaitForRequest( status );
hgs
parents:
diff changeset
   644
hgs
parents:
diff changeset
   645
    // Kill the server - if it has been able to been created
hgs
parents:
diff changeset
   646
    flexTimerServer.Kill( 0 );
hgs
parents:
diff changeset
   647
    
hgs
parents:
diff changeset
   648
    // Clean up
hgs
parents:
diff changeset
   649
    flexTimerServer.Close();
hgs
parents:
diff changeset
   650
hgs
parents:
diff changeset
   651
    aResult.SetResult( KErrNone, _L("Test case passed") );
hgs
parents:
diff changeset
   652
    
hgs
parents:
diff changeset
   653
    __UHEAP_MARKEND;
hgs
parents:
diff changeset
   654
hgs
parents:
diff changeset
   655
    return KErrNone;
hgs
parents:
diff changeset
   656
    }
hgs
parents:
diff changeset
   657
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   658
// TEST CASE: This test case can be used to change client priority to 
hgs
parents:
diff changeset
   659
// EPriorityMuchMore.
hgs
parents:
diff changeset
   660
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   661
TInt CTestFlexTimer::SetThreadPriorityMuchMore(
hgs
parents:
diff changeset
   662
    TTestResult& aResult, 
hgs
parents:
diff changeset
   663
    CTestFlexTimer* /* aCallback */ )
hgs
parents:
diff changeset
   664
    {
hgs
parents:
diff changeset
   665
    RThread thisThread;
hgs
parents:
diff changeset
   666
    
hgs
parents:
diff changeset
   667
    thisThread.SetPriority( EPriorityMuchMore );
hgs
parents:
diff changeset
   668
hgs
parents:
diff changeset
   669
    aResult.SetResult( KErrNone, _L("Test case passed") );
hgs
parents:
diff changeset
   670
    return KErrNone;
hgs
parents:
diff changeset
   671
    }
hgs
parents:
diff changeset
   672
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   673
// TEST CASE: This test case can be used to change client priority to 
hgs
parents:
diff changeset
   674
// EPriorityMuchMore.
hgs
parents:
diff changeset
   675
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   676
TInt CTestFlexTimer::SetThreadPriorityNormal(
hgs
parents:
diff changeset
   677
    TTestResult& aResult, 
hgs
parents:
diff changeset
   678
    CTestFlexTimer* /* aCallback */ )
hgs
parents:
diff changeset
   679
    {
hgs
parents:
diff changeset
   680
    RThread thisThread;
hgs
parents:
diff changeset
   681
    
hgs
parents:
diff changeset
   682
    thisThread.SetPriority( EPriorityNormal );
hgs
parents:
diff changeset
   683
hgs
parents:
diff changeset
   684
    aResult.SetResult( KErrNone, _L("Test case passed") );
hgs
parents:
diff changeset
   685
    return KErrNone;
hgs
parents:
diff changeset
   686
    }
hgs
parents:
diff changeset
   687
// ========================== OTHER EXPORTED FUNCTIONS =========================
hgs
parents:
diff changeset
   688
hgs
parents:
diff changeset
   689
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   690
// LibEntryL is a polymorphic Dll entry point
hgs
parents:
diff changeset
   691
// Returns: CTestModuleBase*: Pointer to Test Module object
hgs
parents:
diff changeset
   692
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   693
//
hgs
parents:
diff changeset
   694
EXPORT_C CTestModuleBase* LibEntryL()
hgs
parents:
diff changeset
   695
    {
hgs
parents:
diff changeset
   696
    return CTestFlexTimer::NewL();
hgs
parents:
diff changeset
   697
    }
hgs
parents:
diff changeset
   698
hgs
parents:
diff changeset
   699
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   700
// SetRequirements handles test module parameters(implements evolution
hgs
parents:
diff changeset
   701
// version 1 for test module's heap and stack sizes configuring).
hgs
parents:
diff changeset
   702
// Returns: TInt: Symbian error code.
hgs
parents:
diff changeset
   703
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   704
//
hgs
parents:
diff changeset
   705
EXPORT_C TInt SetRequirements( CTestModuleParam*& /*aTestModuleParam*/, 
hgs
parents:
diff changeset
   706
                                TUint32& /*aParameterValid*/ )
hgs
parents:
diff changeset
   707
    {
hgs
parents:
diff changeset
   708
hgs
parents:
diff changeset
   709
    /* --------------------------------- NOTE ---------------------------------
hgs
parents:
diff changeset
   710
    USER PANICS occurs in test thread creation when:
hgs
parents:
diff changeset
   711
    1) "The panic occurs when the value of the stack size is negative."
hgs
parents:
diff changeset
   712
    2) "The panic occurs if the minimum heap size specified is less
hgs
parents:
diff changeset
   713
       than KMinHeapSize".
hgs
parents:
diff changeset
   714
       KMinHeapSize: "Functions that require a new heap to be allocated will
hgs
parents:
diff changeset
   715
       either panic, or will reset the required heap size to this value if
hgs
parents:
diff changeset
   716
       a smaller heap size is specified".
hgs
parents:
diff changeset
   717
    3) "The panic occurs if the minimum heap size specified is greater than
hgs
parents:
diff changeset
   718
       the maximum size to which the heap can grow".
hgs
parents:
diff changeset
   719
    Other:
hgs
parents:
diff changeset
   720
    1) Make sure that your hardware or Symbian OS is supporting given sizes.
hgs
parents:
diff changeset
   721
       e.g. Hardware might support only sizes that are divisible by four.
hgs
parents:
diff changeset
   722
    ------------------------------- NOTE end ------------------------------- */
hgs
parents:
diff changeset
   723
hgs
parents:
diff changeset
   724
    // Normally STIF uses default heap and stack sizes for test thread, see:
hgs
parents:
diff changeset
   725
    // KTestThreadMinHeap, KTestThreadMinHeap and KStackSize.
hgs
parents:
diff changeset
   726
    // If needed heap and stack sizes can be configured here by user. Remove
hgs
parents:
diff changeset
   727
    // comments and define sizes.
hgs
parents:
diff changeset
   728
hgs
parents:
diff changeset
   729
/*
hgs
parents:
diff changeset
   730
    aParameterValid = KStifTestModuleParameterChanged;
hgs
parents:
diff changeset
   731
hgs
parents:
diff changeset
   732
    CTestModuleParamVer01* param = CTestModuleParamVer01::NewL();
hgs
parents:
diff changeset
   733
    // Stack size
hgs
parents:
diff changeset
   734
    param->iTestThreadStackSize= 16384; // 16K stack
hgs
parents:
diff changeset
   735
    // Heap sizes
hgs
parents:
diff changeset
   736
    param->iTestThreadMinHeap = 4096;   // 4K heap min
hgs
parents:
diff changeset
   737
    param->iTestThreadMaxHeap = 1048576;// 1M heap max
hgs
parents:
diff changeset
   738
hgs
parents:
diff changeset
   739
    aTestModuleParam = param;
hgs
parents:
diff changeset
   740
*/
hgs
parents:
diff changeset
   741
    return KErrNone;
hgs
parents:
diff changeset
   742
hgs
parents:
diff changeset
   743
    }
hgs
parents:
diff changeset
   744
hgs
parents:
diff changeset
   745
//  End of File