keepalive/flextimer/test/testflextimer/src/testcflextimer.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
 * ============================================================================
hgs
parents:
diff changeset
     3
 *  Name        : testflexperiodic.cpp
hgs
parents:
diff changeset
     4
 *  Part of     : src / testflextimer
hgs
parents:
diff changeset
     5
 *  Description : STIF test cases for CFlexPeriodic timer.
hgs
parents:
diff changeset
     6
 *  Version     : %version: 1 %
hgs
parents:
diff changeset
     7
 *
hgs
parents:
diff changeset
     8
 *  Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     9
 *  All rights reserved.
hgs
parents:
diff changeset
    10
 *  This component and the accompanying materials are made available
hgs
parents:
diff changeset
    11
 *  under the terms of the License "Eclipse Public License v1.0"
hgs
parents:
diff changeset
    12
 *  which accompanies this distribution, and is available
hgs
parents:
diff changeset
    13
 *  at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
    14
 *
hgs
parents:
diff changeset
    15
 *  Initial Contributors:
hgs
parents:
diff changeset
    16
 *  Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    17
 *
hgs
parents:
diff changeset
    18
 *  Contributors:
hgs
parents:
diff changeset
    19
 *  Nokia Corporation
hgs
parents:
diff changeset
    20
 * ============================================================================
hgs
parents:
diff changeset
    21
 * Template version: 4.1
hgs
parents:
diff changeset
    22
 */
hgs
parents:
diff changeset
    23
hgs
parents:
diff changeset
    24
#include <e32debug.h>           // for RDebug
hgs
parents:
diff changeset
    25
#include <e32math.h>             // for Math::Rand()
hgs
parents:
diff changeset
    26
#include <StifTestInterference.h>
hgs
parents:
diff changeset
    27
#include "testflextimer.h"      // for global constants & CB
hgs
parents:
diff changeset
    28
#include "testcflextimer.h"
hgs
parents:
diff changeset
    29
#include "flextimerpanic.h"     // for panic constants
hgs
parents:
diff changeset
    30
#include "inheritedcflextimer.h"// CFlexTimer implementation (CB is always TExtendedTestResult*)
hgs
parents:
diff changeset
    31
#include "inheritedcflextimer2.h"// another CFlexTimer implementation (CB is always RArray<TTimerStruct> *list)
hgs
parents:
diff changeset
    32
// ======== LOCAL FUNCTIONS ========
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
// ======== MEMBER FUNCTIONS ========
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
const TInt64 KTickResolution( 1000000 / 64 );
hgs
parents:
diff changeset
    37
const TInt KExtraSlack = 500 * 1000;
hgs
parents:
diff changeset
    38
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    39
// Constructor
hgs
parents:
diff changeset
    40
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    41
//
hgs
parents:
diff changeset
    42
CTestCFlexTimer::CTestCFlexTimer()
hgs
parents:
diff changeset
    43
    {
hgs
parents:
diff changeset
    44
    }
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    47
// Destructor
hgs
parents:
diff changeset
    48
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    49
//
hgs
parents:
diff changeset
    50
CTestCFlexTimer::~CTestCFlexTimer()
hgs
parents:
diff changeset
    51
    {
hgs
parents:
diff changeset
    52
    }
hgs
parents:
diff changeset
    53
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
    54
// Start timer and delete it.
hgs
parents:
diff changeset
    55
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
    56
//
hgs
parents:
diff changeset
    57
TInt CTestCFlexTimer::CreateAndDestroyCFlexTimerL( TTestResult& aResult,
hgs
parents:
diff changeset
    58
        CTestFlexTimer */*cb*/)
hgs
parents:
diff changeset
    59
    {
hgs
parents:
diff changeset
    60
    TExtendedTestResult *eResult = new TExtendedTestResult(&aResult);
hgs
parents:
diff changeset
    61
    CInheritedCFlexTimer
hgs
parents:
diff changeset
    62
            * timer = CInheritedCFlexTimer::NewL(CActive::EPriorityStandard,
hgs
parents:
diff changeset
    63
                    TCallBack(
hgs
parents:
diff changeset
    64
                            InheritedFlexTimerCallbackStopSchedulerKErrNone,
hgs
parents:
diff changeset
    65
                            eResult));
hgs
parents:
diff changeset
    66
hgs
parents:
diff changeset
    67
    TTimeIntervalMicroSeconds32 expireTime(5 * 1000 * 1000); //5s
hgs
parents:
diff changeset
    68
    timer->After(expireTime);
hgs
parents:
diff changeset
    69
    CActiveScheduler::Start();
hgs
parents:
diff changeset
    70
hgs
parents:
diff changeset
    71
    delete timer;
hgs
parents:
diff changeset
    72
    timer = NULL;
hgs
parents:
diff changeset
    73
    _LIT( KDescription , "Test case passed");
hgs
parents:
diff changeset
    74
    aResult.SetResult(KErrNone, KDescription);
hgs
parents:
diff changeset
    75
    delete eResult;
hgs
parents:
diff changeset
    76
    return KErrNone;
hgs
parents:
diff changeset
    77
hgs
parents:
diff changeset
    78
    }
hgs
parents:
diff changeset
    79
hgs
parents:
diff changeset
    80
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
    81
// Start timer and see that it expires at max time
hgs
parents:
diff changeset
    82
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
    83
//
hgs
parents:
diff changeset
    84
TInt CTestCFlexTimer::CreateAndExpireCFlexTimerL( TTestResult& aResult,
hgs
parents:
diff changeset
    85
        CTestFlexTimer */*cb*/)
hgs
parents:
diff changeset
    86
    {
hgs
parents:
diff changeset
    87
    TExtendedTestResult *eResult = new TExtendedTestResult(&aResult);
hgs
parents:
diff changeset
    88
    CInheritedCFlexTimer
hgs
parents:
diff changeset
    89
            * timer = CInheritedCFlexTimer::NewL(CActive::EPriorityStandard,
hgs
parents:
diff changeset
    90
                    TCallBack(
hgs
parents:
diff changeset
    91
                            InheritedFlexTimerCallbackStopSchedulerKErrNone,
hgs
parents:
diff changeset
    92
                            eResult));
hgs
parents:
diff changeset
    93
hgs
parents:
diff changeset
    94
    // Expire in 5 seconds
hgs
parents:
diff changeset
    95
    TTimeIntervalMicroSeconds32 expireTime(5 * 1000 * 1000);
hgs
parents:
diff changeset
    96
hgs
parents:
diff changeset
    97
    // Save current time.
hgs
parents:
diff changeset
    98
    TTime utcNow(0);
hgs
parents:
diff changeset
    99
    utcNow.UniversalTime();
hgs
parents:
diff changeset
   100
hgs
parents:
diff changeset
   101
    timer->After(expireTime);
hgs
parents:
diff changeset
   102
hgs
parents:
diff changeset
   103
    // Start scheduler and wait for callback to stop it
hgs
parents:
diff changeset
   104
    CActiveScheduler::Start();
hgs
parents:
diff changeset
   105
    //See if CB has failed the case
hgs
parents:
diff changeset
   106
    if (eResult->iCaseAlreadyFailed)
hgs
parents:
diff changeset
   107
        {
hgs
parents:
diff changeset
   108
        delete timer;
hgs
parents:
diff changeset
   109
        delete eResult;
hgs
parents:
diff changeset
   110
        return KErrNone;
hgs
parents:
diff changeset
   111
        }
hgs
parents:
diff changeset
   112
    // Get new current time
hgs
parents:
diff changeset
   113
    TTime utcNow2(0);
hgs
parents:
diff changeset
   114
    utcNow2.UniversalTime();
hgs
parents:
diff changeset
   115
hgs
parents:
diff changeset
   116
    //Check if timer expiry happened within maxtime to maxtime+accuracy
hgs
parents:
diff changeset
   117
    if ((utcNow + expireTime) <= utcNow2 && (utcNow + expireTime
hgs
parents:
diff changeset
   118
            + TTimeIntervalMicroSeconds32(KTimerAccuracyMicroSeconds))
hgs
parents:
diff changeset
   119
            > utcNow2)
hgs
parents:
diff changeset
   120
        {
hgs
parents:
diff changeset
   121
        _LIT( KDescription , "Passed");
hgs
parents:
diff changeset
   122
        aResult.SetResult(KErrNone, KDescription);
hgs
parents:
diff changeset
   123
        }
hgs
parents:
diff changeset
   124
    else
hgs
parents:
diff changeset
   125
        {
hgs
parents:
diff changeset
   126
        _LIT( KDescription , "Timer was fired either too early or too late.\n");
hgs
parents:
diff changeset
   127
        aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
   128
        }
hgs
parents:
diff changeset
   129
    // Case was executed
hgs
parents:
diff changeset
   130
    delete timer;
hgs
parents:
diff changeset
   131
    delete eResult;
hgs
parents:
diff changeset
   132
    return KErrNone;
hgs
parents:
diff changeset
   133
hgs
parents:
diff changeset
   134
    }
hgs
parents:
diff changeset
   135
hgs
parents:
diff changeset
   136
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   137
// Start two timers and see that they expire at the same time.
hgs
parents:
diff changeset
   138
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   139
//
hgs
parents:
diff changeset
   140
TInt CTestCFlexTimer::CreateAndExpireTwoOverlappingAfterTimersL(
hgs
parents:
diff changeset
   141
        TTestResult& aResult, CTestFlexTimer */*cb*/)
hgs
parents:
diff changeset
   142
    {
hgs
parents:
diff changeset
   143
    TTestResult *res1 = new TTestResult();
hgs
parents:
diff changeset
   144
    TTestResult *res2 = new TTestResult();
hgs
parents:
diff changeset
   145
    TExtendedTestResult *eResult1 = new TExtendedTestResult(res1);
hgs
parents:
diff changeset
   146
    TExtendedTestResult *eResult2 = new TExtendedTestResult(res2);
hgs
parents:
diff changeset
   147
    eResult1->iTimerID = 1;
hgs
parents:
diff changeset
   148
    eResult2->iTimerID = 2;
hgs
parents:
diff changeset
   149
    CInheritedCFlexTimer* timer1 = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
   150
            CActive::EPriorityStandard,
hgs
parents:
diff changeset
   151
            TCallBack(InheritedFlexTimerCallbackKErrNoneMarkTimestamp,
hgs
parents:
diff changeset
   152
                    eResult1));
hgs
parents:
diff changeset
   153
    CInheritedCFlexTimer* timer2 = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
   154
            CActive::EPriorityStandard,
hgs
parents:
diff changeset
   155
            TCallBack(InheritedFlexTimerCallbackKErrNoneMarkTimestamp,
hgs
parents:
diff changeset
   156
                    eResult2));
hgs
parents:
diff changeset
   157
    // Expire in 10 seconds
hgs
parents:
diff changeset
   158
    TTimeIntervalMicroSeconds32 expireTime1(10 * 1000 * 1000);
hgs
parents:
diff changeset
   159
    //Expire within first timers default window
hgs
parents:
diff changeset
   160
    TTimeIntervalMicroSeconds32 expireTime2(static_cast<TInt64> ((10 * 1000
hgs
parents:
diff changeset
   161
            * 1000 - static_cast<float> (10 * 1000 * 1000)
hgs
parents:
diff changeset
   162
            * KDefaultWindowMultiplier)));
hgs
parents:
diff changeset
   163
hgs
parents:
diff changeset
   164
    // Save current time
hgs
parents:
diff changeset
   165
    TTime utcNow(0);
hgs
parents:
diff changeset
   166
    utcNow.UniversalTime();
hgs
parents:
diff changeset
   167
hgs
parents:
diff changeset
   168
    timer1->After(expireTime1);
hgs
parents:
diff changeset
   169
    timer2->After(expireTime2);
hgs
parents:
diff changeset
   170
hgs
parents:
diff changeset
   171
    //Timer to stop active scheduler after timers under test are completed.
hgs
parents:
diff changeset
   172
    CPeriodic *p = CPeriodic::NewL(EPriorityNormal);
hgs
parents:
diff changeset
   173
    p->Start(15 * 1000 * 1000, 1000, TCallBack(StopActiveScheduler));
hgs
parents:
diff changeset
   174
    // Start scheduler and wait for callback to stop it
hgs
parents:
diff changeset
   175
    CActiveScheduler::Start();
hgs
parents:
diff changeset
   176
    delete p;
hgs
parents:
diff changeset
   177
    //See if CB has failed the case
hgs
parents:
diff changeset
   178
    if (eResult1->iCaseAlreadyFailed || eResult2->iCaseAlreadyFailed)
hgs
parents:
diff changeset
   179
        {
hgs
parents:
diff changeset
   180
        if (eResult1->iCaseAlreadyFailed)
hgs
parents:
diff changeset
   181
            {
hgs
parents:
diff changeset
   182
            aResult.SetResult(eResult1->iTestResult->iResult,
hgs
parents:
diff changeset
   183
                    eResult1->iTestResult->iResultDes);
hgs
parents:
diff changeset
   184
            }
hgs
parents:
diff changeset
   185
        else
hgs
parents:
diff changeset
   186
            {
hgs
parents:
diff changeset
   187
            aResult.SetResult(eResult2->iTestResult->iResult,
hgs
parents:
diff changeset
   188
                    eResult2->iTestResult->iResultDes);
hgs
parents:
diff changeset
   189
            }
hgs
parents:
diff changeset
   190
        delete timer1;
hgs
parents:
diff changeset
   191
        delete timer2;
hgs
parents:
diff changeset
   192
        delete eResult1;
hgs
parents:
diff changeset
   193
        delete eResult2;
hgs
parents:
diff changeset
   194
        delete res1;
hgs
parents:
diff changeset
   195
        delete res2;
hgs
parents:
diff changeset
   196
        return KErrNone;
hgs
parents:
diff changeset
   197
        }
hgs
parents:
diff changeset
   198
hgs
parents:
diff changeset
   199
    //Check if timers expiry happened within timer2 maxtime to maxtime+accuracy
hgs
parents:
diff changeset
   200
    if ((utcNow + expireTime2) <= TTime(eResult2->iTimerStoppedTime+KTickResolution)
hgs
parents:
diff changeset
   201
            && (utcNow + expireTime2 + TTimeIntervalMicroSeconds32(
hgs
parents:
diff changeset
   202
                    KTimerAccuracyMicroSeconds)) > TTime(
hgs
parents:
diff changeset
   203
                    eResult2->iTimerStoppedTime) &&
hgs
parents:
diff changeset
   204
hgs
parents:
diff changeset
   205
    (utcNow + expireTime2) <= TTime(eResult1->iTimerStoppedTime+KTickResolution) && (utcNow
hgs
parents:
diff changeset
   206
            + expireTime2 + TTimeIntervalMicroSeconds32(
hgs
parents:
diff changeset
   207
            KTimerAccuracyMicroSeconds)) > TTime(eResult1->iTimerStoppedTime))
hgs
parents:
diff changeset
   208
        {
hgs
parents:
diff changeset
   209
        _LIT( KDescription , "Passed");
hgs
parents:
diff changeset
   210
        aResult.SetResult(KErrNone, KDescription);
hgs
parents:
diff changeset
   211
        }
hgs
parents:
diff changeset
   212
    else
hgs
parents:
diff changeset
   213
        {
hgs
parents:
diff changeset
   214
        _LIT( KDescription , "Some timer was fired either too early or too late.\n");
hgs
parents:
diff changeset
   215
        RDebug::Printf("utcNow = %lld\n", utcNow.Int64());
hgs
parents:
diff changeset
   216
        RDebug::Printf("eResult1->iTimerStoppedTime = %lld\n",
hgs
parents:
diff changeset
   217
                eResult1->iTimerStoppedTime);
hgs
parents:
diff changeset
   218
        RDebug::Printf("eResult2->iTimerStoppedTime = %lld\n",
hgs
parents:
diff changeset
   219
                eResult2->iTimerStoppedTime);
hgs
parents:
diff changeset
   220
        aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
   221
        }
hgs
parents:
diff changeset
   222
    // Case was executed
hgs
parents:
diff changeset
   223
    delete timer1;
hgs
parents:
diff changeset
   224
    delete timer2;
hgs
parents:
diff changeset
   225
    delete eResult1;
hgs
parents:
diff changeset
   226
    delete eResult2;
hgs
parents:
diff changeset
   227
    delete res1;
hgs
parents:
diff changeset
   228
    delete res2;
hgs
parents:
diff changeset
   229
    return KErrNone;
hgs
parents:
diff changeset
   230
hgs
parents:
diff changeset
   231
    }
hgs
parents:
diff changeset
   232
hgs
parents:
diff changeset
   233
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   234
// Start two timers and see that they expire at the same time. 64bit version
hgs
parents:
diff changeset
   235
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   236
//
hgs
parents:
diff changeset
   237
TInt CTestCFlexTimer::CreateAndExpireTwoOverlappingAfterTimers64L(
hgs
parents:
diff changeset
   238
        TTestResult& aResult, CTestFlexTimer */*cb*/)
hgs
parents:
diff changeset
   239
    {
hgs
parents:
diff changeset
   240
    TTestResult *res1 = new TTestResult();
hgs
parents:
diff changeset
   241
    TTestResult *res2 = new TTestResult();
hgs
parents:
diff changeset
   242
    TExtendedTestResult *eResult1 = new TExtendedTestResult(res1);
hgs
parents:
diff changeset
   243
    TExtendedTestResult *eResult2 = new TExtendedTestResult(res2);
hgs
parents:
diff changeset
   244
    eResult1->iTimerID = 1;
hgs
parents:
diff changeset
   245
    eResult2->iTimerID = 2;
hgs
parents:
diff changeset
   246
    CInheritedCFlexTimer* timer1 = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
   247
            CActive::EPriorityStandard,
hgs
parents:
diff changeset
   248
            TCallBack(InheritedFlexTimerCallbackKErrNoneMarkTimestamp,
hgs
parents:
diff changeset
   249
                    eResult1));
hgs
parents:
diff changeset
   250
    CInheritedCFlexTimer* timer2 = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
   251
            CActive::EPriorityStandard,
hgs
parents:
diff changeset
   252
            TCallBack(InheritedFlexTimerCallbackKErrNoneMarkTimestamp,
hgs
parents:
diff changeset
   253
                    eResult2));
hgs
parents:
diff changeset
   254
    // Expire in 10 seconds
hgs
parents:
diff changeset
   255
    TTimeIntervalMicroSeconds expireTime1(10 * 1000 * 1000);
hgs
parents:
diff changeset
   256
    //Expire within first timers default window
hgs
parents:
diff changeset
   257
    TTimeIntervalMicroSeconds expireTime2(static_cast<TInt64> ((10 * 1000
hgs
parents:
diff changeset
   258
            * 1000 - static_cast<float> (10 * 1000 * 1000)
hgs
parents:
diff changeset
   259
            * KDefaultWindowMultiplier)));
hgs
parents:
diff changeset
   260
hgs
parents:
diff changeset
   261
    // Save current time
hgs
parents:
diff changeset
   262
    TTime utcNow(0);
hgs
parents:
diff changeset
   263
    utcNow.UniversalTime();
hgs
parents:
diff changeset
   264
hgs
parents:
diff changeset
   265
    timer1->After(expireTime1);
hgs
parents:
diff changeset
   266
    timer2->After(expireTime2);
hgs
parents:
diff changeset
   267
hgs
parents:
diff changeset
   268
    //Timer to stop active scheduler after timers under test are completed.
hgs
parents:
diff changeset
   269
    CPeriodic *p = CPeriodic::NewL(EPriorityNormal);
hgs
parents:
diff changeset
   270
    p->Start(15 * 1000 * 1000, 1000, TCallBack(StopActiveScheduler));
hgs
parents:
diff changeset
   271
    // Start scheduler and wait for callback to stop it
hgs
parents:
diff changeset
   272
    CActiveScheduler::Start();
hgs
parents:
diff changeset
   273
    delete p;
hgs
parents:
diff changeset
   274
    //See if CB has failed the case
hgs
parents:
diff changeset
   275
    if (eResult1->iCaseAlreadyFailed || eResult2->iCaseAlreadyFailed)
hgs
parents:
diff changeset
   276
        {
hgs
parents:
diff changeset
   277
        if (eResult1->iCaseAlreadyFailed)
hgs
parents:
diff changeset
   278
            {
hgs
parents:
diff changeset
   279
            aResult.SetResult(eResult1->iTestResult->iResult,
hgs
parents:
diff changeset
   280
                    eResult1->iTestResult->iResultDes);
hgs
parents:
diff changeset
   281
            }
hgs
parents:
diff changeset
   282
        else
hgs
parents:
diff changeset
   283
            {
hgs
parents:
diff changeset
   284
            aResult.SetResult(eResult2->iTestResult->iResult,
hgs
parents:
diff changeset
   285
                    eResult2->iTestResult->iResultDes);
hgs
parents:
diff changeset
   286
            }
hgs
parents:
diff changeset
   287
        delete timer1;
hgs
parents:
diff changeset
   288
        delete timer2;
hgs
parents:
diff changeset
   289
        delete eResult1;
hgs
parents:
diff changeset
   290
        delete eResult2;
hgs
parents:
diff changeset
   291
        delete res1;
hgs
parents:
diff changeset
   292
        delete res2;
hgs
parents:
diff changeset
   293
        return KErrNone;
hgs
parents:
diff changeset
   294
        }
hgs
parents:
diff changeset
   295
    // Get new current time
hgs
parents:
diff changeset
   296
    TTime utcNow2(0);
hgs
parents:
diff changeset
   297
    utcNow2.UniversalTime();
hgs
parents:
diff changeset
   298
hgs
parents:
diff changeset
   299
    //Check if timers expiry happened within timer2 maxtime to maxtime+accuracy
hgs
parents:
diff changeset
   300
    if ((utcNow + expireTime2) <= TTime(eResult2->iTimerStoppedTime+KTickResolution)
hgs
parents:
diff changeset
   301
            && (utcNow + expireTime2 + TTimeIntervalMicroSeconds(
hgs
parents:
diff changeset
   302
                    KTimerAccuracyMicroSeconds)) > TTime(
hgs
parents:
diff changeset
   303
                    eResult2->iTimerStoppedTime) &&
hgs
parents:
diff changeset
   304
hgs
parents:
diff changeset
   305
    (utcNow + expireTime2) <= TTime(eResult1->iTimerStoppedTime+KTickResolution) && (utcNow
hgs
parents:
diff changeset
   306
            + expireTime2 + TTimeIntervalMicroSeconds(
hgs
parents:
diff changeset
   307
            KTimerAccuracyMicroSeconds)) > TTime(eResult1->iTimerStoppedTime))
hgs
parents:
diff changeset
   308
        {
hgs
parents:
diff changeset
   309
        _LIT( KDescription , "Passed");
hgs
parents:
diff changeset
   310
        aResult.SetResult(KErrNone, KDescription);
hgs
parents:
diff changeset
   311
        }
hgs
parents:
diff changeset
   312
    else
hgs
parents:
diff changeset
   313
        {
hgs
parents:
diff changeset
   314
        _LIT( KDescription , "Some timer was fired either too early or too late.\n");
hgs
parents:
diff changeset
   315
        aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
   316
        }
hgs
parents:
diff changeset
   317
    // Case was executed
hgs
parents:
diff changeset
   318
    delete timer1;
hgs
parents:
diff changeset
   319
    delete timer2;
hgs
parents:
diff changeset
   320
    delete eResult1;
hgs
parents:
diff changeset
   321
    delete eResult2;
hgs
parents:
diff changeset
   322
    delete res1;
hgs
parents:
diff changeset
   323
    delete res2;
hgs
parents:
diff changeset
   324
    return KErrNone;
hgs
parents:
diff changeset
   325
hgs
parents:
diff changeset
   326
    }
hgs
parents:
diff changeset
   327
hgs
parents:
diff changeset
   328
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   329
// Start two timers and see that they expire at their own max time.
hgs
parents:
diff changeset
   330
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   331
//
hgs
parents:
diff changeset
   332
TInt CTestCFlexTimer::CreateAndExpireTwoNonOverlappingAfterTimersL(
hgs
parents:
diff changeset
   333
        TTestResult& aResult, CTestFlexTimer */*cb*/)
hgs
parents:
diff changeset
   334
    {
hgs
parents:
diff changeset
   335
    TTestResult *res1 = new TTestResult();
hgs
parents:
diff changeset
   336
    TTestResult *res2 = new TTestResult();
hgs
parents:
diff changeset
   337
    TExtendedTestResult *eResult1 = new TExtendedTestResult(res1);
hgs
parents:
diff changeset
   338
    TExtendedTestResult *eResult2 = new TExtendedTestResult(res2);
hgs
parents:
diff changeset
   339
    eResult1->iTimerID = 1;
hgs
parents:
diff changeset
   340
    eResult2->iTimerID = 2;
hgs
parents:
diff changeset
   341
    CInheritedCFlexTimer* timer1 = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
   342
            CActive::EPriorityStandard,
hgs
parents:
diff changeset
   343
            TCallBack(InheritedFlexTimerCallbackKErrNoneMarkTimestamp,
hgs
parents:
diff changeset
   344
                    eResult1));
hgs
parents:
diff changeset
   345
    CInheritedCFlexTimer* timer2 = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
   346
            CActive::EPriorityStandard,
hgs
parents:
diff changeset
   347
            TCallBack(InheritedFlexTimerCallbackKErrNoneMarkTimestamp,
hgs
parents:
diff changeset
   348
                    eResult2));
hgs
parents:
diff changeset
   349
    // Expire in 10 seconds
hgs
parents:
diff changeset
   350
    TTimeIntervalMicroSeconds32 expireTime1(10 * 1000 * 1000);
hgs
parents:
diff changeset
   351
    //Expire one second before first timers window starts
hgs
parents:
diff changeset
   352
    TTimeIntervalMicroSeconds32 expireTime2(static_cast<TInt64> ((10 * 1000
hgs
parents:
diff changeset
   353
            * 1000 - static_cast<float> (10 * 1000 * 1000)
hgs
parents:
diff changeset
   354
            * KDefaultWindowMultiplier)) - 1 * 1000 * 1000);
hgs
parents:
diff changeset
   355
hgs
parents:
diff changeset
   356
    // Save current time
hgs
parents:
diff changeset
   357
    TTime utcNow(0);
hgs
parents:
diff changeset
   358
    utcNow.UniversalTime();
hgs
parents:
diff changeset
   359
hgs
parents:
diff changeset
   360
    timer1->After(expireTime1);
hgs
parents:
diff changeset
   361
    timer2->After(expireTime2);
hgs
parents:
diff changeset
   362
hgs
parents:
diff changeset
   363
    //Timer to stop active scheduler after timers under test are completed.
hgs
parents:
diff changeset
   364
    CPeriodic *p = CPeriodic::NewL(EPriorityNormal);
hgs
parents:
diff changeset
   365
    p->Start(15 * 1000 * 1000, 1000, TCallBack(StopActiveScheduler));
hgs
parents:
diff changeset
   366
    // Start scheduler and wait for callback to stop it
hgs
parents:
diff changeset
   367
    CActiveScheduler::Start();
hgs
parents:
diff changeset
   368
    delete p;
hgs
parents:
diff changeset
   369
    //See if CB has failed the case
hgs
parents:
diff changeset
   370
    if (eResult1->iCaseAlreadyFailed || eResult2->iCaseAlreadyFailed)
hgs
parents:
diff changeset
   371
        {
hgs
parents:
diff changeset
   372
        if (eResult1->iCaseAlreadyFailed)
hgs
parents:
diff changeset
   373
            {
hgs
parents:
diff changeset
   374
            aResult.SetResult(eResult1->iTestResult->iResult,
hgs
parents:
diff changeset
   375
                    eResult1->iTestResult->iResultDes);
hgs
parents:
diff changeset
   376
            }
hgs
parents:
diff changeset
   377
        else
hgs
parents:
diff changeset
   378
            {
hgs
parents:
diff changeset
   379
            aResult.SetResult(eResult2->iTestResult->iResult,
hgs
parents:
diff changeset
   380
                    eResult2->iTestResult->iResultDes);
hgs
parents:
diff changeset
   381
            }
hgs
parents:
diff changeset
   382
        delete timer1;
hgs
parents:
diff changeset
   383
        delete timer2;
hgs
parents:
diff changeset
   384
        delete eResult1;
hgs
parents:
diff changeset
   385
        delete eResult2;
hgs
parents:
diff changeset
   386
        delete res1;
hgs
parents:
diff changeset
   387
        delete res2;
hgs
parents:
diff changeset
   388
        return KErrNone;
hgs
parents:
diff changeset
   389
        }
hgs
parents:
diff changeset
   390
    // Get new current time
hgs
parents:
diff changeset
   391
    TTime utcNow2(0);
hgs
parents:
diff changeset
   392
    utcNow2.UniversalTime();
hgs
parents:
diff changeset
   393
hgs
parents:
diff changeset
   394
    //Check if timers expiry happened within at their own max time edge.
hgs
parents:
diff changeset
   395
    if ((utcNow + expireTime2) <= TTime(eResult2->iTimerStoppedTime+KTickResolution)
hgs
parents:
diff changeset
   396
            && (utcNow + expireTime2 + TTimeIntervalMicroSeconds32(
hgs
parents:
diff changeset
   397
                    KTimerAccuracyMicroSeconds)) > TTime(
hgs
parents:
diff changeset
   398
                    eResult2->iTimerStoppedTime) &&
hgs
parents:
diff changeset
   399
hgs
parents:
diff changeset
   400
    (utcNow + expireTime1) <= TTime(eResult1->iTimerStoppedTime+KTickResolution) && (utcNow
hgs
parents:
diff changeset
   401
            + expireTime1 + TTimeIntervalMicroSeconds32(
hgs
parents:
diff changeset
   402
            KTimerAccuracyMicroSeconds)) > TTime(eResult1->iTimerStoppedTime))
hgs
parents:
diff changeset
   403
        {
hgs
parents:
diff changeset
   404
        _LIT( KDescription , "Passed");
hgs
parents:
diff changeset
   405
        aResult.SetResult(KErrNone, KDescription);
hgs
parents:
diff changeset
   406
        }
hgs
parents:
diff changeset
   407
    else
hgs
parents:
diff changeset
   408
        {
hgs
parents:
diff changeset
   409
        _LIT( KDescription , "Some timer was fired either too early or too late.\n");
hgs
parents:
diff changeset
   410
        aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
   411
        }
hgs
parents:
diff changeset
   412
    // Case was executed
hgs
parents:
diff changeset
   413
    delete timer1;
hgs
parents:
diff changeset
   414
    delete timer2;
hgs
parents:
diff changeset
   415
    delete eResult1;
hgs
parents:
diff changeset
   416
    delete eResult2;
hgs
parents:
diff changeset
   417
    delete res1;
hgs
parents:
diff changeset
   418
    delete res2;
hgs
parents:
diff changeset
   419
    return KErrNone;
hgs
parents:
diff changeset
   420
hgs
parents:
diff changeset
   421
    }
hgs
parents:
diff changeset
   422
hgs
parents:
diff changeset
   423
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   424
// Start many timers and see that nothing goes wrong when they are expired at rapid sequence
hgs
parents:
diff changeset
   425
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   426
//
hgs
parents:
diff changeset
   427
TInt CTestCFlexTimer::HumongousAmountOfTimeridelidilidousL(
hgs
parents:
diff changeset
   428
        TTestResult& aResult, CTestFlexTimer */*cb*/)
hgs
parents:
diff changeset
   429
    {
hgs
parents:
diff changeset
   430
    RDebug::Printf("HugemongousAmountOfTimeridelidilidousL");
hgs
parents:
diff changeset
   431
    // This list will contain all the timer structs, expiry times etc.
hgs
parents:
diff changeset
   432
    // First cell will always tell which timer is currently active
hgs
parents:
diff changeset
   433
    // active info is transferred from e.g. InheritedCFlexTimer2::RunL to CB function
hgs
parents:
diff changeset
   434
    RArray<TTimerStruct> timers;
hgs
parents:
diff changeset
   435
    // This CB contains all the logic about timer addition
hgs
parents:
diff changeset
   436
    StartTimerAndAddToList( &timers, 2000 );
hgs
parents:
diff changeset
   437
    // CBs stop this after all timers are expired 
hgs
parents:
diff changeset
   438
    CActiveScheduler::Start();
hgs
parents:
diff changeset
   439
    // Delete CPeriodic that was used to launch new FlexTimers
hgs
parents:
diff changeset
   440
    delete timers[0].iStartTimer;
hgs
parents:
diff changeset
   441
    _LIT( KDescriptionP , "Passed");
hgs
parents:
diff changeset
   442
    aResult.SetResult(KErrNone, KDescriptionP);
hgs
parents:
diff changeset
   443
    // Loop throug list and see if timers fired within limits.
hgs
parents:
diff changeset
   444
    // also delete all stuff reserved earlier by StartTimerAndAddToList
hgs
parents:
diff changeset
   445
    while (timers.Count())
hgs
parents:
diff changeset
   446
        {
hgs
parents:
diff changeset
   447
        // Have fun with reading this. It is not as bad as it looks
hgs
parents:
diff changeset
   448
        // Just checks if CB already failed the case
hgs
parents:
diff changeset
   449
        // and if timer was launched within its window(default) and timer accuracy
hgs
parents:
diff changeset
   450
        if (!(!timers[0].iEResult->iCaseAlreadyFailed
hgs
parents:
diff changeset
   451
                && (timers[0].iEResult->iTimerStartedTime
hgs
parents:
diff changeset
   452
                        + timers[0].iEResult->iTimerExpiryTime
hgs
parents:
diff changeset
   453
                        - (static_cast<float> (timers[0].iEResult->iTimerExpiryTime)
hgs
parents:
diff changeset
   454
                                * KDefaultWindowMultiplier)
hgs
parents:
diff changeset
   455
                        <= timers[0].iEResult->iTimerStoppedTime+KTickResolution)
hgs
parents:
diff changeset
   456
                && (timers[0].iEResult->iTimerStartedTime
hgs
parents:
diff changeset
   457
                        + timers[0].iEResult->iTimerExpiryTime
hgs
parents:
diff changeset
   458
                        + KTimerAccuracyMicroSeconds)
hgs
parents:
diff changeset
   459
                        > timers[0].iEResult->iTimerStoppedTime))
hgs
parents:
diff changeset
   460
            {
hgs
parents:
diff changeset
   461
            _LIT( KDescription , "Some timer was not fired within its window.\n");
hgs
parents:
diff changeset
   462
            aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
   463
hgs
parents:
diff changeset
   464
            }
hgs
parents:
diff changeset
   465
        delete timers[0].iEResult->iTestResult;
hgs
parents:
diff changeset
   466
        delete timers[0].iEResult;
hgs
parents:
diff changeset
   467
        delete timers[0].iTimer;
hgs
parents:
diff changeset
   468
        timers.Remove(0);
hgs
parents:
diff changeset
   469
        }
hgs
parents:
diff changeset
   470
    // Case was executed
hgs
parents:
diff changeset
   471
    timers.Close();
hgs
parents:
diff changeset
   472
    return KErrNone;
hgs
parents:
diff changeset
   473
    }
hgs
parents:
diff changeset
   474
hgs
parents:
diff changeset
   475
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   476
// Start three timers At, AtUTC and After and see that they are treated equally.
hgs
parents:
diff changeset
   477
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   478
//
hgs
parents:
diff changeset
   479
TInt CTestCFlexTimer::CreateAndExpireThreeTimersL( TTestResult& aResult,
hgs
parents:
diff changeset
   480
        CTestFlexTimer */*cb*/)
hgs
parents:
diff changeset
   481
    {
hgs
parents:
diff changeset
   482
    TTestResult *res1 = new TTestResult();
hgs
parents:
diff changeset
   483
    TTestResult *res2 = new TTestResult();
hgs
parents:
diff changeset
   484
    TTestResult *res3 = new TTestResult();
hgs
parents:
diff changeset
   485
    TExtendedTestResult *eResult1 = new TExtendedTestResult(res1);
hgs
parents:
diff changeset
   486
    TExtendedTestResult *eResult2 = new TExtendedTestResult(res2);
hgs
parents:
diff changeset
   487
    TExtendedTestResult *eResult3 = new TExtendedTestResult(res3);
hgs
parents:
diff changeset
   488
    eResult1->iTimerID = 1;
hgs
parents:
diff changeset
   489
    eResult2->iTimerID = 2;
hgs
parents:
diff changeset
   490
    eResult2->iTimerID = 3;
hgs
parents:
diff changeset
   491
    CInheritedCFlexTimer* timer1 = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
   492
            CActive::EPriorityStandard,
hgs
parents:
diff changeset
   493
            TCallBack(InheritedFlexTimerCallbackKErrNoneMarkTimestamp,
hgs
parents:
diff changeset
   494
                    eResult1));
hgs
parents:
diff changeset
   495
    CInheritedCFlexTimer* timer2 = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
   496
            CActive::EPriorityStandard,
hgs
parents:
diff changeset
   497
            TCallBack(InheritedFlexTimerCallbackKErrNoneMarkTimestamp,
hgs
parents:
diff changeset
   498
                    eResult2));
hgs
parents:
diff changeset
   499
    CInheritedCFlexTimer* timer3 = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
   500
            CActive::EPriorityStandard,
hgs
parents:
diff changeset
   501
            TCallBack(InheritedFlexTimerCallbackKErrNoneMarkTimestamp,
hgs
parents:
diff changeset
   502
                    eResult3));
hgs
parents:
diff changeset
   503
    // Expire in 10 seconds
hgs
parents:
diff changeset
   504
    TTimeIntervalMicroSeconds expireTime1(10 * 1000 * 1000);
hgs
parents:
diff changeset
   505
    //Expire within first timers default window
hgs
parents:
diff changeset
   506
    TTimeIntervalMicroSeconds expireTime2(9 * 1000 * 1000);
hgs
parents:
diff changeset
   507
    TTimeIntervalMicroSeconds expireTime3(3 * 1000 * 1000); // Expire far enough from others
hgs
parents:
diff changeset
   508
hgs
parents:
diff changeset
   509
    // Save current time
hgs
parents:
diff changeset
   510
    TTime utcNow(0);
hgs
parents:
diff changeset
   511
    utcNow.UniversalTime();
hgs
parents:
diff changeset
   512
    TTime homeNow(0);
hgs
parents:
diff changeset
   513
    homeNow.HomeTime();
hgs
parents:
diff changeset
   514
hgs
parents:
diff changeset
   515
    timer1->After(expireTime1);
hgs
parents:
diff changeset
   516
    timer2->At(homeNow + expireTime2);
hgs
parents:
diff changeset
   517
    timer3->AtUTC(utcNow + expireTime3);
hgs
parents:
diff changeset
   518
hgs
parents:
diff changeset
   519
    //Timer to stop active scheduler after timers under test are completed.
hgs
parents:
diff changeset
   520
    CPeriodic *p = CPeriodic::NewL(EPriorityNormal);
hgs
parents:
diff changeset
   521
    p->Start(15 * 1000 * 1000, 1000, TCallBack(StopActiveScheduler));
hgs
parents:
diff changeset
   522
    // Start scheduler and wait for callback to stop it
hgs
parents:
diff changeset
   523
    CActiveScheduler::Start();
hgs
parents:
diff changeset
   524
    delete p;
hgs
parents:
diff changeset
   525
    //See if CB has failed the case
hgs
parents:
diff changeset
   526
    if (eResult1->iCaseAlreadyFailed)
hgs
parents:
diff changeset
   527
        {
hgs
parents:
diff changeset
   528
        aResult.SetResult(
hgs
parents:
diff changeset
   529
            eResult1->iTestResult->iResult,
hgs
parents:
diff changeset
   530
            eResult1->iTestResult->iResultDes );
hgs
parents:
diff changeset
   531
        }
hgs
parents:
diff changeset
   532
    else if (eResult2->iCaseAlreadyFailed)
hgs
parents:
diff changeset
   533
        {
hgs
parents:
diff changeset
   534
        aResult.SetResult(
hgs
parents:
diff changeset
   535
            eResult2->iTestResult->iResult,
hgs
parents:
diff changeset
   536
            eResult2->iTestResult->iResultDes );
hgs
parents:
diff changeset
   537
        }
hgs
parents:
diff changeset
   538
    else if (eResult3->iCaseAlreadyFailed)
hgs
parents:
diff changeset
   539
        {
hgs
parents:
diff changeset
   540
        aResult.SetResult(
hgs
parents:
diff changeset
   541
            eResult3->iTestResult->iResult,
hgs
parents:
diff changeset
   542
            eResult3->iTestResult->iResultDes );
hgs
parents:
diff changeset
   543
        }
hgs
parents:
diff changeset
   544
hgs
parents:
diff changeset
   545
    // Check if timers expiry happened within limits.
hgs
parents:
diff changeset
   546
    // First and second timer at seconds timers max time and third at its own max time.
hgs
parents:
diff changeset
   547
    //
hgs
parents:
diff changeset
   548
    // Compare results against utcNow due timer's stopped time is UTC.
hgs
parents:
diff changeset
   549
    else if ((utcNow + expireTime2) <= TTime(eResult2->iTimerStoppedTime+KTickResolution) && 
hgs
parents:
diff changeset
   550
        (utcNow + expireTime2 + TTimeIntervalMicroSeconds( KTimerAccuracyMicroSeconds)) > TTime( eResult2->iTimerStoppedTime) &&
hgs
parents:
diff changeset
   551
hgs
parents:
diff changeset
   552
        (utcNow + expireTime2) <= TTime(eResult1->iTimerStoppedTime+KTickResolution) && 
hgs
parents:
diff changeset
   553
        (utcNow + expireTime2 + TTimeIntervalMicroSeconds( KTimerAccuracyMicroSeconds)) > TTime(eResult1->iTimerStoppedTime) &&
hgs
parents:
diff changeset
   554
hgs
parents:
diff changeset
   555
        (utcNow + expireTime3) <= TTime(eResult3->iTimerStoppedTime+KTickResolution) && 
hgs
parents:
diff changeset
   556
        (utcNow + expireTime3 + TTimeIntervalMicroSeconds( KTimerAccuracyMicroSeconds)) > TTime( eResult3->iTimerStoppedTime))
hgs
parents:
diff changeset
   557
        {
hgs
parents:
diff changeset
   558
        _LIT( KDescription , "Passed");
hgs
parents:
diff changeset
   559
        aResult.SetResult(KErrNone, KDescription);
hgs
parents:
diff changeset
   560
        }
hgs
parents:
diff changeset
   561
    else
hgs
parents:
diff changeset
   562
        {
hgs
parents:
diff changeset
   563
        _LIT( KDescription , "Some timer was fired either too early or too late.\n");
hgs
parents:
diff changeset
   564
        aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
   565
        }
hgs
parents:
diff changeset
   566
    // Case was executed
hgs
parents:
diff changeset
   567
    delete timer1;
hgs
parents:
diff changeset
   568
    delete timer2;
hgs
parents:
diff changeset
   569
    delete timer3;
hgs
parents:
diff changeset
   570
    delete eResult1;
hgs
parents:
diff changeset
   571
    delete eResult2;
hgs
parents:
diff changeset
   572
    delete eResult3;
hgs
parents:
diff changeset
   573
    delete res1;
hgs
parents:
diff changeset
   574
    delete res2;
hgs
parents:
diff changeset
   575
    delete res3;
hgs
parents:
diff changeset
   576
    return KErrNone;
hgs
parents:
diff changeset
   577
    }
hgs
parents:
diff changeset
   578
hgs
parents:
diff changeset
   579
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   580
// Start three timers At, AtUTC and After and see that they can be cancelled.
hgs
parents:
diff changeset
   581
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   582
//
hgs
parents:
diff changeset
   583
TInt CTestCFlexTimer::NormalCancelL( TTestResult& aResult, CTestFlexTimer */*cb*/)
hgs
parents:
diff changeset
   584
    {
hgs
parents:
diff changeset
   585
    TTestResult *res1 = new TTestResult();
hgs
parents:
diff changeset
   586
    TTestResult *res2 = new TTestResult();
hgs
parents:
diff changeset
   587
    TTestResult *res3 = new TTestResult();
hgs
parents:
diff changeset
   588
    TExtendedTestResult *eResult1 = new TExtendedTestResult(res1);
hgs
parents:
diff changeset
   589
    TExtendedTestResult *eResult2 = new TExtendedTestResult(res2);
hgs
parents:
diff changeset
   590
    TExtendedTestResult *eResult3 = new TExtendedTestResult(res3);
hgs
parents:
diff changeset
   591
    eResult1->iTimerID = 0;
hgs
parents:
diff changeset
   592
    eResult2->iTimerID = 1;
hgs
parents:
diff changeset
   593
    eResult3->iTimerID = 2;
hgs
parents:
diff changeset
   594
    CInheritedCFlexTimer2* timer1 = CInheritedCFlexTimer2::NewL(
hgs
parents:
diff changeset
   595
            CActive::EPriorityStandard, TCallBack(NotCalledCB, eResult1), 0);
hgs
parents:
diff changeset
   596
    CInheritedCFlexTimer2* timer2 = CInheritedCFlexTimer2::NewL(
hgs
parents:
diff changeset
   597
            CActive::EPriorityStandard, TCallBack(NotCalledCB, eResult2), 1);
hgs
parents:
diff changeset
   598
    CInheritedCFlexTimer2* timer3 = CInheritedCFlexTimer2::NewL(
hgs
parents:
diff changeset
   599
            CActive::EPriorityStandard, TCallBack(NotCalledCB, eResult3), 2);
hgs
parents:
diff changeset
   600
    // Expire in 10 seconds
hgs
parents:
diff changeset
   601
    TTimeIntervalMicroSeconds expireTime1(10 * 1000 * 1000);
hgs
parents:
diff changeset
   602
    //just something
hgs
parents:
diff changeset
   603
    TTimeIntervalMicroSeconds expireTime2(static_cast<TInt64> ((10 * 1000
hgs
parents:
diff changeset
   604
            * 1000 - static_cast<float> (10 * 1000 * 1000)
hgs
parents:
diff changeset
   605
            * KDefaultWindowMultiplier)));
hgs
parents:
diff changeset
   606
    TTimeIntervalMicroSeconds expireTime3(7 * 1000 * 1000); // just something
hgs
parents:
diff changeset
   607
    RArray<TTimerStruct> timers;
hgs
parents:
diff changeset
   608
    TTimerStruct *s1 = new TTimerStruct();
hgs
parents:
diff changeset
   609
    s1->iEResult = eResult1;
hgs
parents:
diff changeset
   610
    s1->iTimer = timer1;
hgs
parents:
diff changeset
   611
    timers.Append(*s1);
hgs
parents:
diff changeset
   612
    TTimerStruct *s2 = new TTimerStruct();
hgs
parents:
diff changeset
   613
    s2->iEResult = eResult2;
hgs
parents:
diff changeset
   614
    s2->iTimer = timer2;
hgs
parents:
diff changeset
   615
    timers.Append(*s2);
hgs
parents:
diff changeset
   616
    TTimerStruct *s3 = new TTimerStruct();
hgs
parents:
diff changeset
   617
    s3->iEResult = eResult3;
hgs
parents:
diff changeset
   618
    s3->iTimer = timer3;
hgs
parents:
diff changeset
   619
    timers.Append(*s3);
hgs
parents:
diff changeset
   620
    // Save current time
hgs
parents:
diff changeset
   621
    TTime utcNow(0);
hgs
parents:
diff changeset
   622
    utcNow.UniversalTime();
hgs
parents:
diff changeset
   623
    TTime homeNow(0);
hgs
parents:
diff changeset
   624
    homeNow.HomeTime();
hgs
parents:
diff changeset
   625
hgs
parents:
diff changeset
   626
    timer1->After(expireTime1);
hgs
parents:
diff changeset
   627
    timer2->At(homeNow + expireTime2);
hgs
parents:
diff changeset
   628
    timer3->AtUTC(utcNow + expireTime3);
hgs
parents:
diff changeset
   629
hgs
parents:
diff changeset
   630
    timers[0].iCurrentlyActive = 0; //CB uses this to decide which timer to cancel;
hgs
parents:
diff changeset
   631
hgs
parents:
diff changeset
   632
    //Timer to cancel timers under test and cancel active scheduler
hgs
parents:
diff changeset
   633
    CPeriodic *p = CPeriodic::NewL(EPriorityNormal);
hgs
parents:
diff changeset
   634
    p->Start(15 * 1000 * 1000, 30 * 1000 * 1000, TCallBack(
hgs
parents:
diff changeset
   635
            StopActiveScheduler));
hgs
parents:
diff changeset
   636
    CPeriodic *pp = CPeriodic::NewL(EPriorityNormal);
hgs
parents:
diff changeset
   637
    s1->iStartTimer = pp;
hgs
parents:
diff changeset
   638
    pp->Start(3 * 1000 * 1000, 30 * 1000 * 1000, TCallBack(
hgs
parents:
diff changeset
   639
            CancelCFlexTimerArray, &timers));
hgs
parents:
diff changeset
   640
    CPeriodic *ppp = CPeriodic::NewL(EPriorityNormal);
hgs
parents:
diff changeset
   641
    s2->iStartTimer = ppp;
hgs
parents:
diff changeset
   642
    ppp->Start(4 * 1000 * 1000, 30 * 1000 * 1000, TCallBack(
hgs
parents:
diff changeset
   643
            CancelCFlexTimerArray, &timers));
hgs
parents:
diff changeset
   644
    CPeriodic *pppp = CPeriodic::NewL(EPriorityNormal);
hgs
parents:
diff changeset
   645
    s3->iStartTimer = pppp;
hgs
parents:
diff changeset
   646
    pppp->Start(5 * 1000 * 1000, 30 * 1000 * 1000, TCallBack(
hgs
parents:
diff changeset
   647
            CancelCFlexTimerArray, &timers));
hgs
parents:
diff changeset
   648
    // Start scheduler and wait for callback to stop it
hgs
parents:
diff changeset
   649
    CActiveScheduler::Start();
hgs
parents:
diff changeset
   650
    delete p;
hgs
parents:
diff changeset
   651
    delete pp;
hgs
parents:
diff changeset
   652
    delete ppp;
hgs
parents:
diff changeset
   653
    delete pppp;
hgs
parents:
diff changeset
   654
    delete s1;
hgs
parents:
diff changeset
   655
    delete s2;
hgs
parents:
diff changeset
   656
    delete s3;
hgs
parents:
diff changeset
   657
    _LIT( KDescription , "Passed");
hgs
parents:
diff changeset
   658
    aResult.SetResult(KErrNone, KDescription);
hgs
parents:
diff changeset
   659
    //See if CB has failed the case
hgs
parents:
diff changeset
   660
    if (eResult1->iCaseAlreadyFailed || eResult2->iCaseAlreadyFailed
hgs
parents:
diff changeset
   661
            || eResult3->iCaseAlreadyFailed)
hgs
parents:
diff changeset
   662
        {
hgs
parents:
diff changeset
   663
        if (eResult1->iCaseAlreadyFailed)
hgs
parents:
diff changeset
   664
            {
hgs
parents:
diff changeset
   665
            aResult.SetResult(eResult1->iTestResult->iResult,
hgs
parents:
diff changeset
   666
                    eResult1->iTestResult->iResultDes);
hgs
parents:
diff changeset
   667
            }
hgs
parents:
diff changeset
   668
        if (eResult2->iCaseAlreadyFailed)
hgs
parents:
diff changeset
   669
            {
hgs
parents:
diff changeset
   670
            aResult.SetResult(eResult2->iTestResult->iResult,
hgs
parents:
diff changeset
   671
                    eResult2->iTestResult->iResultDes);
hgs
parents:
diff changeset
   672
            }
hgs
parents:
diff changeset
   673
        else
hgs
parents:
diff changeset
   674
            {
hgs
parents:
diff changeset
   675
            aResult.SetResult(eResult3->iTestResult->iResult,
hgs
parents:
diff changeset
   676
                    eResult3->iTestResult->iResultDes);
hgs
parents:
diff changeset
   677
            }
hgs
parents:
diff changeset
   678
        }
hgs
parents:
diff changeset
   679
    delete timer1;
hgs
parents:
diff changeset
   680
    delete timer2;
hgs
parents:
diff changeset
   681
    delete timer3;
hgs
parents:
diff changeset
   682
    delete eResult1;
hgs
parents:
diff changeset
   683
    delete eResult2;
hgs
parents:
diff changeset
   684
    delete eResult3;
hgs
parents:
diff changeset
   685
    delete res1;
hgs
parents:
diff changeset
   686
    delete res2;
hgs
parents:
diff changeset
   687
    delete res3;
hgs
parents:
diff changeset
   688
    return KErrNone;
hgs
parents:
diff changeset
   689
    }
hgs
parents:
diff changeset
   690
hgs
parents:
diff changeset
   691
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   692
// Start two timers and see that they expire at the same time.
hgs
parents:
diff changeset
   693
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   694
//
hgs
parents:
diff changeset
   695
TInt CTestCFlexTimer::CancelTimerThatWouldHaveTriggeredAnotherTimerL(
hgs
parents:
diff changeset
   696
        TTestResult& aResult, CTestFlexTimer */*cb*/)
hgs
parents:
diff changeset
   697
    {
hgs
parents:
diff changeset
   698
    TTestResult *res1 = new TTestResult();
hgs
parents:
diff changeset
   699
    TTestResult *res2 = new TTestResult();
hgs
parents:
diff changeset
   700
    TExtendedTestResult *eResult1 = new TExtendedTestResult(res1);
hgs
parents:
diff changeset
   701
    TExtendedTestResult *eResult2 = new TExtendedTestResult(res2);
hgs
parents:
diff changeset
   702
    eResult1->iTimerID = 1;
hgs
parents:
diff changeset
   703
    eResult2->iTimerID = 2;
hgs
parents:
diff changeset
   704
    CInheritedCFlexTimer* timer1 = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
   705
            CActive::EPriorityStandard, TCallBack(NotCalledCB, eResult1));
hgs
parents:
diff changeset
   706
    CInheritedCFlexTimer
hgs
parents:
diff changeset
   707
            * timer2 =
hgs
parents:
diff changeset
   708
                    CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
   709
                            CActive::EPriorityStandard,
hgs
parents:
diff changeset
   710
                            TCallBack(
hgs
parents:
diff changeset
   711
                                    InheritedFlexTimerCallbackKErrNoneMarkTimestampStopScheduler,
hgs
parents:
diff changeset
   712
                                    eResult2));
hgs
parents:
diff changeset
   713
    // Expire in 10 seconds
hgs
parents:
diff changeset
   714
    TTimeIntervalMicroSeconds32 expireTime1(10 * 1000 * 1000);
hgs
parents:
diff changeset
   715
    //Expire within first timers default window
hgs
parents:
diff changeset
   716
    TTimeIntervalMicroSeconds32 expireTime2(static_cast<TInt64> ((10 * 1000
hgs
parents:
diff changeset
   717
            * 1000 - static_cast<float> (10 * 1000 * 1000)
hgs
parents:
diff changeset
   718
            * KDefaultWindowMultiplier)));
hgs
parents:
diff changeset
   719
hgs
parents:
diff changeset
   720
    // Save current time
hgs
parents:
diff changeset
   721
    TTime utcNow(0);
hgs
parents:
diff changeset
   722
    utcNow.UniversalTime();
hgs
parents:
diff changeset
   723
hgs
parents:
diff changeset
   724
    timer1->After(expireTime1);
hgs
parents:
diff changeset
   725
    timer2->After(expireTime2);
hgs
parents:
diff changeset
   726
hgs
parents:
diff changeset
   727
    //Timer to cancel Timer 1
hgs
parents:
diff changeset
   728
    CPeriodic *p = CPeriodic::NewL(EPriorityNormal);
hgs
parents:
diff changeset
   729
    p->Start(3 * 1000 * 1000, 1000, TCallBack(CancelCFlexTimer, timer1));
hgs
parents:
diff changeset
   730
    // Start scheduler and wait for callback to stop it
hgs
parents:
diff changeset
   731
    CActiveScheduler::Start();
hgs
parents:
diff changeset
   732
    delete p;
hgs
parents:
diff changeset
   733
    //See if CB has failed the case
hgs
parents:
diff changeset
   734
    if (eResult1->iCaseAlreadyFailed || eResult2->iCaseAlreadyFailed)
hgs
parents:
diff changeset
   735
        {
hgs
parents:
diff changeset
   736
        if (eResult1->iCaseAlreadyFailed)
hgs
parents:
diff changeset
   737
            {
hgs
parents:
diff changeset
   738
            aResult.SetResult(eResult1->iTestResult->iResult,
hgs
parents:
diff changeset
   739
                    eResult1->iTestResult->iResultDes);
hgs
parents:
diff changeset
   740
            }
hgs
parents:
diff changeset
   741
        else
hgs
parents:
diff changeset
   742
            {
hgs
parents:
diff changeset
   743
            aResult.SetResult(eResult2->iTestResult->iResult,
hgs
parents:
diff changeset
   744
                    eResult2->iTestResult->iResultDes);
hgs
parents:
diff changeset
   745
            }
hgs
parents:
diff changeset
   746
        delete timer1;
hgs
parents:
diff changeset
   747
        delete timer2;
hgs
parents:
diff changeset
   748
        delete eResult1;
hgs
parents:
diff changeset
   749
        delete eResult2;
hgs
parents:
diff changeset
   750
        delete res1;
hgs
parents:
diff changeset
   751
        delete res2;
hgs
parents:
diff changeset
   752
        return KErrNone;
hgs
parents:
diff changeset
   753
        }
hgs
parents:
diff changeset
   754
    // Get new current time
hgs
parents:
diff changeset
   755
    TTime utcNow2(0);
hgs
parents:
diff changeset
   756
    utcNow2.UniversalTime();
hgs
parents:
diff changeset
   757
hgs
parents:
diff changeset
   758
    //Check if timers expiry happened within timer2 maxtime to maxtime+accuracy
hgs
parents:
diff changeset
   759
    if ((utcNow + expireTime2) <= TTime(eResult2->iTimerStoppedTime+KTickResolution)
hgs
parents:
diff changeset
   760
            && (utcNow + expireTime2 + TTimeIntervalMicroSeconds32(
hgs
parents:
diff changeset
   761
                    KTimerAccuracyMicroSeconds)) > TTime(
hgs
parents:
diff changeset
   762
                    eResult2->iTimerStoppedTime))
hgs
parents:
diff changeset
   763
        {
hgs
parents:
diff changeset
   764
        _LIT( KDescription , "Passed");
hgs
parents:
diff changeset
   765
        aResult.SetResult(KErrNone, KDescription);
hgs
parents:
diff changeset
   766
        }
hgs
parents:
diff changeset
   767
    else
hgs
parents:
diff changeset
   768
        {
hgs
parents:
diff changeset
   769
        _LIT( KDescription , "Some timer was fired either too early or too late.\n");
hgs
parents:
diff changeset
   770
        aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
   771
        }
hgs
parents:
diff changeset
   772
    // Case was executed
hgs
parents:
diff changeset
   773
    delete timer1;
hgs
parents:
diff changeset
   774
    delete timer2;
hgs
parents:
diff changeset
   775
    delete eResult1;
hgs
parents:
diff changeset
   776
    delete eResult2;
hgs
parents:
diff changeset
   777
    delete res1;
hgs
parents:
diff changeset
   778
    delete res2;
hgs
parents:
diff changeset
   779
    return KErrNone;
hgs
parents:
diff changeset
   780
hgs
parents:
diff changeset
   781
    }
hgs
parents:
diff changeset
   782
hgs
parents:
diff changeset
   783
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   784
// Start two timers and see that they expire at the same time.
hgs
parents:
diff changeset
   785
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   786
//
hgs
parents:
diff changeset
   787
TInt CTestCFlexTimer::ConfigureCTimerOverlap1L( TTestResult& aResult,
hgs
parents:
diff changeset
   788
        CTestFlexTimer */*cb*/)
hgs
parents:
diff changeset
   789
    {
hgs
parents:
diff changeset
   790
    TTestResult *res1 = new TTestResult();
hgs
parents:
diff changeset
   791
    TTestResult *res2 = new TTestResult();
hgs
parents:
diff changeset
   792
    TExtendedTestResult *eResult1 = new TExtendedTestResult(res1);
hgs
parents:
diff changeset
   793
    TExtendedTestResult *eResult2 = new TExtendedTestResult(res2);
hgs
parents:
diff changeset
   794
    eResult1->iTimerID = 1;
hgs
parents:
diff changeset
   795
    eResult2->iTimerID = 2;
hgs
parents:
diff changeset
   796
    CInheritedCFlexTimer* timer1 = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
   797
            CActive::EPriorityStandard,
hgs
parents:
diff changeset
   798
            TCallBack(InheritedFlexTimerCallbackKErrNoneMarkTimestamp,
hgs
parents:
diff changeset
   799
                    eResult1));
hgs
parents:
diff changeset
   800
    CInheritedCFlexTimer* timer2 = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
   801
            CActive::EPriorityStandard,
hgs
parents:
diff changeset
   802
            TCallBack(InheritedFlexTimerCallbackKErrNoneMarkTimestamp,
hgs
parents:
diff changeset
   803
                    eResult2));
hgs
parents:
diff changeset
   804
    // Expire in 10 seconds
hgs
parents:
diff changeset
   805
    TTimeIntervalMicroSeconds32 expireTime1(16 * 1000 * 1000);
hgs
parents:
diff changeset
   806
    TTimeIntervalMicroSeconds32 window1(8 * 1000 * 1000);
hgs
parents:
diff changeset
   807
    timer1->Configure(window1);
hgs
parents:
diff changeset
   808
    //Expire within first timers default window
hgs
parents:
diff changeset
   809
    TTimeIntervalMicroSeconds32 expireTime2(9 * 1000 * 1000);
hgs
parents:
diff changeset
   810
    TTimeIntervalMicroSeconds32 window2(1 * 1000 * 1000);
hgs
parents:
diff changeset
   811
    timer2->Configure(window2);
hgs
parents:
diff changeset
   812
hgs
parents:
diff changeset
   813
    // Save current time
hgs
parents:
diff changeset
   814
    TTime utcNow(0);
hgs
parents:
diff changeset
   815
    utcNow.UniversalTime();
hgs
parents:
diff changeset
   816
hgs
parents:
diff changeset
   817
    timer1->After(expireTime1);
hgs
parents:
diff changeset
   818
    timer2->After(expireTime2);
hgs
parents:
diff changeset
   819
hgs
parents:
diff changeset
   820
    //Timer to stop active scheduler after timers under test are completed.
hgs
parents:
diff changeset
   821
    CPeriodic *p = CPeriodic::NewL(EPriorityNormal);
hgs
parents:
diff changeset
   822
    p->Start(17 * 1000 * 1000, 1000, TCallBack(StopActiveScheduler));
hgs
parents:
diff changeset
   823
    // Start scheduler and wait for callback to stop it
hgs
parents:
diff changeset
   824
    CActiveScheduler::Start();
hgs
parents:
diff changeset
   825
    delete p;
hgs
parents:
diff changeset
   826
    //See if CB has failed the case
hgs
parents:
diff changeset
   827
    if (eResult1->iCaseAlreadyFailed || eResult2->iCaseAlreadyFailed)
hgs
parents:
diff changeset
   828
        {
hgs
parents:
diff changeset
   829
        if (eResult1->iCaseAlreadyFailed)
hgs
parents:
diff changeset
   830
            {
hgs
parents:
diff changeset
   831
            aResult.SetResult(eResult1->iTestResult->iResult,
hgs
parents:
diff changeset
   832
                    eResult1->iTestResult->iResultDes);
hgs
parents:
diff changeset
   833
            }
hgs
parents:
diff changeset
   834
        else
hgs
parents:
diff changeset
   835
            {
hgs
parents:
diff changeset
   836
            aResult.SetResult(eResult2->iTestResult->iResult,
hgs
parents:
diff changeset
   837
                    eResult2->iTestResult->iResultDes);
hgs
parents:
diff changeset
   838
            }
hgs
parents:
diff changeset
   839
        delete timer1;
hgs
parents:
diff changeset
   840
        delete timer2;
hgs
parents:
diff changeset
   841
        delete eResult1;
hgs
parents:
diff changeset
   842
        delete eResult2;
hgs
parents:
diff changeset
   843
        delete res1;
hgs
parents:
diff changeset
   844
        delete res2;
hgs
parents:
diff changeset
   845
        return KErrNone;
hgs
parents:
diff changeset
   846
        }
hgs
parents:
diff changeset
   847
    // Get new current time
hgs
parents:
diff changeset
   848
    TTime utcNow2(0);
hgs
parents:
diff changeset
   849
    utcNow2.UniversalTime();
hgs
parents:
diff changeset
   850
hgs
parents:
diff changeset
   851
    //Check if timers expiry happened within timer2 maxtime to maxtime+accuracy
hgs
parents:
diff changeset
   852
    if ((utcNow + expireTime2) <= TTime(eResult2->iTimerStoppedTime+KTickResolution)
hgs
parents:
diff changeset
   853
            && (utcNow + expireTime2 + TTimeIntervalMicroSeconds32(
hgs
parents:
diff changeset
   854
                    KTimerAccuracyMicroSeconds)) > TTime(
hgs
parents:
diff changeset
   855
                    eResult2->iTimerStoppedTime) &&
hgs
parents:
diff changeset
   856
hgs
parents:
diff changeset
   857
    (utcNow + expireTime2) <= TTime(eResult1->iTimerStoppedTime+KTickResolution) && (utcNow
hgs
parents:
diff changeset
   858
            + expireTime2 + TTimeIntervalMicroSeconds32(
hgs
parents:
diff changeset
   859
            KTimerAccuracyMicroSeconds)) > TTime(eResult1->iTimerStoppedTime))
hgs
parents:
diff changeset
   860
        {
hgs
parents:
diff changeset
   861
        _LIT( KDescription , "Passed");
hgs
parents:
diff changeset
   862
        aResult.SetResult(KErrNone, KDescription);
hgs
parents:
diff changeset
   863
        }
hgs
parents:
diff changeset
   864
    else
hgs
parents:
diff changeset
   865
        {
hgs
parents:
diff changeset
   866
        _LIT( KDescription , "Some timer was fired either too early or too late.\n");
hgs
parents:
diff changeset
   867
        aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
   868
        }
hgs
parents:
diff changeset
   869
    // Case was executed
hgs
parents:
diff changeset
   870
    delete timer1;
hgs
parents:
diff changeset
   871
    delete timer2;
hgs
parents:
diff changeset
   872
    delete eResult1;
hgs
parents:
diff changeset
   873
    delete eResult2;
hgs
parents:
diff changeset
   874
    delete res1;
hgs
parents:
diff changeset
   875
    delete res2;
hgs
parents:
diff changeset
   876
    return KErrNone;
hgs
parents:
diff changeset
   877
    }
hgs
parents:
diff changeset
   878
hgs
parents:
diff changeset
   879
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   880
// Start two timers and see that they expire at the same time.
hgs
parents:
diff changeset
   881
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   882
//
hgs
parents:
diff changeset
   883
TInt CTestCFlexTimer::ConfigureCTimerOverlap2L( TTestResult& aResult,
hgs
parents:
diff changeset
   884
        CTestFlexTimer */*cb*/)
hgs
parents:
diff changeset
   885
    {
hgs
parents:
diff changeset
   886
    TTestResult *res1 = new TTestResult();
hgs
parents:
diff changeset
   887
    TTestResult *res2 = new TTestResult();
hgs
parents:
diff changeset
   888
    TExtendedTestResult *eResult1 = new TExtendedTestResult(res1);
hgs
parents:
diff changeset
   889
    TExtendedTestResult *eResult2 = new TExtendedTestResult(res2);
hgs
parents:
diff changeset
   890
    eResult1->iTimerID = 1;
hgs
parents:
diff changeset
   891
    eResult2->iTimerID = 2;
hgs
parents:
diff changeset
   892
    CInheritedCFlexTimer* timer1 = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
   893
            CActive::EPriorityStandard,
hgs
parents:
diff changeset
   894
            TCallBack(InheritedFlexTimerCallbackKErrNoneMarkTimestamp,
hgs
parents:
diff changeset
   895
                    eResult1));
hgs
parents:
diff changeset
   896
    CInheritedCFlexTimer* timer2 = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
   897
            CActive::EPriorityStandard,
hgs
parents:
diff changeset
   898
            TCallBack(InheritedFlexTimerCallbackKErrNoneMarkTimestamp,
hgs
parents:
diff changeset
   899
                    eResult2));
hgs
parents:
diff changeset
   900
    // Expire in 10 seconds
hgs
parents:
diff changeset
   901
    TTimeIntervalMicroSeconds expireTime1(16 * 1000 * 1000);
hgs
parents:
diff changeset
   902
    TTimeIntervalMicroSeconds window1(8 * 1000 * 1000);
hgs
parents:
diff changeset
   903
    timer1->Configure(window1);
hgs
parents:
diff changeset
   904
    //Expire within first timers default window
hgs
parents:
diff changeset
   905
    TTimeIntervalMicroSeconds expireTime2(17 * 1000 * 1000);
hgs
parents:
diff changeset
   906
    TTimeIntervalMicroSeconds window2(1 * 1000 * 1000);
hgs
parents:
diff changeset
   907
    timer2->Configure(window2);
hgs
parents:
diff changeset
   908
hgs
parents:
diff changeset
   909
    // Save current time
hgs
parents:
diff changeset
   910
    TTime utcNow(0);
hgs
parents:
diff changeset
   911
    utcNow.UniversalTime();
hgs
parents:
diff changeset
   912
hgs
parents:
diff changeset
   913
    timer1->After(expireTime1);
hgs
parents:
diff changeset
   914
    timer2->After(expireTime2);
hgs
parents:
diff changeset
   915
hgs
parents:
diff changeset
   916
    //Timer to stop active scheduler after timers under test are completed.
hgs
parents:
diff changeset
   917
    CPeriodic *p = CPeriodic::NewL(EPriorityNormal);
hgs
parents:
diff changeset
   918
    p->Start(18 * 1000 * 1000, 1000, TCallBack(StopActiveScheduler));
hgs
parents:
diff changeset
   919
    // Start scheduler and wait for callback to stop it
hgs
parents:
diff changeset
   920
    CActiveScheduler::Start();
hgs
parents:
diff changeset
   921
    delete p;
hgs
parents:
diff changeset
   922
    //See if CB has failed the case
hgs
parents:
diff changeset
   923
    if (eResult1->iCaseAlreadyFailed || eResult2->iCaseAlreadyFailed)
hgs
parents:
diff changeset
   924
        {
hgs
parents:
diff changeset
   925
        if (eResult1->iCaseAlreadyFailed)
hgs
parents:
diff changeset
   926
            {
hgs
parents:
diff changeset
   927
            aResult.SetResult(eResult1->iTestResult->iResult,
hgs
parents:
diff changeset
   928
                    eResult1->iTestResult->iResultDes);
hgs
parents:
diff changeset
   929
            }
hgs
parents:
diff changeset
   930
        else
hgs
parents:
diff changeset
   931
            {
hgs
parents:
diff changeset
   932
            aResult.SetResult(eResult2->iTestResult->iResult,
hgs
parents:
diff changeset
   933
                    eResult2->iTestResult->iResultDes);
hgs
parents:
diff changeset
   934
            }
hgs
parents:
diff changeset
   935
        delete timer1;
hgs
parents:
diff changeset
   936
        delete timer2;
hgs
parents:
diff changeset
   937
        delete eResult1;
hgs
parents:
diff changeset
   938
        delete eResult2;
hgs
parents:
diff changeset
   939
        delete res1;
hgs
parents:
diff changeset
   940
        delete res2;
hgs
parents:
diff changeset
   941
        return KErrNone;
hgs
parents:
diff changeset
   942
        }
hgs
parents:
diff changeset
   943
    // Get new current time
hgs
parents:
diff changeset
   944
    TTime utcNow2(0);
hgs
parents:
diff changeset
   945
    utcNow2.UniversalTime();
hgs
parents:
diff changeset
   946
hgs
parents:
diff changeset
   947
    //Check if timers expiry happened within timer1 maxtime to maxtime+accuracy
hgs
parents:
diff changeset
   948
    if ((utcNow + expireTime1) <= TTime(eResult2->iTimerStoppedTime+KTickResolution)
hgs
parents:
diff changeset
   949
            && (utcNow + expireTime1 + TTimeIntervalMicroSeconds(
hgs
parents:
diff changeset
   950
                    KTimerAccuracyMicroSeconds)) > TTime(
hgs
parents:
diff changeset
   951
                    eResult2->iTimerStoppedTime) &&
hgs
parents:
diff changeset
   952
hgs
parents:
diff changeset
   953
    (utcNow + expireTime1) <= TTime(eResult1->iTimerStoppedTime+KTickResolution) && (utcNow
hgs
parents:
diff changeset
   954
            + expireTime1 + TTimeIntervalMicroSeconds(
hgs
parents:
diff changeset
   955
            KTimerAccuracyMicroSeconds)) > TTime(eResult1->iTimerStoppedTime))
hgs
parents:
diff changeset
   956
        {
hgs
parents:
diff changeset
   957
        _LIT( KDescription , "Passed");
hgs
parents:
diff changeset
   958
        aResult.SetResult(KErrNone, KDescription);
hgs
parents:
diff changeset
   959
        }
hgs
parents:
diff changeset
   960
    else
hgs
parents:
diff changeset
   961
        {
hgs
parents:
diff changeset
   962
        _LIT( KDescription , "Some timer was fired either too early or too late.\n");
hgs
parents:
diff changeset
   963
        aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
   964
        }
hgs
parents:
diff changeset
   965
    // Case was executed
hgs
parents:
diff changeset
   966
    delete timer1;
hgs
parents:
diff changeset
   967
    delete timer2;
hgs
parents:
diff changeset
   968
    delete eResult1;
hgs
parents:
diff changeset
   969
    delete eResult2;
hgs
parents:
diff changeset
   970
    delete res1;
hgs
parents:
diff changeset
   971
    delete res2;
hgs
parents:
diff changeset
   972
    return KErrNone;
hgs
parents:
diff changeset
   973
    }
hgs
parents:
diff changeset
   974
hgs
parents:
diff changeset
   975
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   976
// Start two timers and see that they expire at the same time.
hgs
parents:
diff changeset
   977
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   978
//
hgs
parents:
diff changeset
   979
TInt CTestCFlexTimer::ConfigureCTimerOverlap3L( TTestResult& aResult,
hgs
parents:
diff changeset
   980
        CTestFlexTimer */*cb*/)
hgs
parents:
diff changeset
   981
    {
hgs
parents:
diff changeset
   982
    TTestResult *res1 = new TTestResult();
hgs
parents:
diff changeset
   983
    TTestResult *res2 = new TTestResult();
hgs
parents:
diff changeset
   984
    TExtendedTestResult *eResult1 = new TExtendedTestResult(res1);
hgs
parents:
diff changeset
   985
    TExtendedTestResult *eResult2 = new TExtendedTestResult(res2);
hgs
parents:
diff changeset
   986
    eResult1->iTimerID = 1;
hgs
parents:
diff changeset
   987
    eResult2->iTimerID = 2;
hgs
parents:
diff changeset
   988
    CInheritedCFlexTimer* timer1 = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
   989
            CActive::EPriorityStandard,
hgs
parents:
diff changeset
   990
            TCallBack(InheritedFlexTimerCallbackKErrNoneMarkTimestamp,
hgs
parents:
diff changeset
   991
                    eResult1));
hgs
parents:
diff changeset
   992
    CInheritedCFlexTimer* timer2 = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
   993
            CActive::EPriorityStandard,
hgs
parents:
diff changeset
   994
            TCallBack(InheritedFlexTimerCallbackKErrNoneMarkTimestamp,
hgs
parents:
diff changeset
   995
                    eResult2));
hgs
parents:
diff changeset
   996
    // Expire in 10 seconds
hgs
parents:
diff changeset
   997
    TTimeIntervalMicroSeconds expireTime1(16 * 1000 * 1000);
hgs
parents:
diff changeset
   998
    TTimeIntervalMicroSeconds window1(16 * 1000 * 1000);
hgs
parents:
diff changeset
   999
    TTimeIntervalMicroSeconds32 zeroWindow(0);
hgs
parents:
diff changeset
  1000
    timer1->Configure(zeroWindow);
hgs
parents:
diff changeset
  1001
    timer1->Configure(window1);
hgs
parents:
diff changeset
  1002
    //Expire within first timers default window
hgs
parents:
diff changeset
  1003
    TTimeIntervalMicroSeconds expireTime2(8 * 1000 * 1000);
hgs
parents:
diff changeset
  1004
    TTimeIntervalMicroSeconds window2(0);
hgs
parents:
diff changeset
  1005
    timer2->Configure(window2);
hgs
parents:
diff changeset
  1006
hgs
parents:
diff changeset
  1007
    // Save current time
hgs
parents:
diff changeset
  1008
    TTime utcNow(0);
hgs
parents:
diff changeset
  1009
    utcNow.UniversalTime();
hgs
parents:
diff changeset
  1010
hgs
parents:
diff changeset
  1011
    timer1->After(expireTime1);
hgs
parents:
diff changeset
  1012
    timer2->After(expireTime2);
hgs
parents:
diff changeset
  1013
hgs
parents:
diff changeset
  1014
    //Timer to stop active scheduler after timers under test are completed.
hgs
parents:
diff changeset
  1015
    CPeriodic *p = CPeriodic::NewL(EPriorityNormal);
hgs
parents:
diff changeset
  1016
    p->Start(18 * 1000 * 1000, 1000, TCallBack(StopActiveScheduler));
hgs
parents:
diff changeset
  1017
    // Start scheduler and wait for callback to stop it
hgs
parents:
diff changeset
  1018
    CActiveScheduler::Start();
hgs
parents:
diff changeset
  1019
    delete p;
hgs
parents:
diff changeset
  1020
    //See if CB has failed the case
hgs
parents:
diff changeset
  1021
    if (eResult1->iCaseAlreadyFailed || eResult2->iCaseAlreadyFailed)
hgs
parents:
diff changeset
  1022
        {
hgs
parents:
diff changeset
  1023
        if (eResult1->iCaseAlreadyFailed)
hgs
parents:
diff changeset
  1024
            {
hgs
parents:
diff changeset
  1025
            aResult.SetResult(eResult1->iTestResult->iResult,
hgs
parents:
diff changeset
  1026
                    eResult1->iTestResult->iResultDes);
hgs
parents:
diff changeset
  1027
            }
hgs
parents:
diff changeset
  1028
        else
hgs
parents:
diff changeset
  1029
            {
hgs
parents:
diff changeset
  1030
            aResult.SetResult(eResult2->iTestResult->iResult,
hgs
parents:
diff changeset
  1031
                    eResult2->iTestResult->iResultDes);
hgs
parents:
diff changeset
  1032
            }
hgs
parents:
diff changeset
  1033
        delete timer1;
hgs
parents:
diff changeset
  1034
        delete timer2;
hgs
parents:
diff changeset
  1035
        delete eResult1;
hgs
parents:
diff changeset
  1036
        delete eResult2;
hgs
parents:
diff changeset
  1037
        delete res1;
hgs
parents:
diff changeset
  1038
        delete res2;
hgs
parents:
diff changeset
  1039
        return KErrNone;
hgs
parents:
diff changeset
  1040
        }
hgs
parents:
diff changeset
  1041
    // Get new current time
hgs
parents:
diff changeset
  1042
    TTime utcNow2(0);
hgs
parents:
diff changeset
  1043
    utcNow2.UniversalTime();
hgs
parents:
diff changeset
  1044
hgs
parents:
diff changeset
  1045
    //Check if timers expiry happened within timer2 maxtime to maxtime+accuracy
hgs
parents:
diff changeset
  1046
    if ((utcNow + expireTime2) <= TTime(eResult2->iTimerStoppedTime+KTickResolution)
hgs
parents:
diff changeset
  1047
            && (utcNow + expireTime2 + TTimeIntervalMicroSeconds(
hgs
parents:
diff changeset
  1048
                    KTimerAccuracyMicroSeconds)) > TTime(
hgs
parents:
diff changeset
  1049
                    eResult2->iTimerStoppedTime) &&
hgs
parents:
diff changeset
  1050
hgs
parents:
diff changeset
  1051
    (utcNow + expireTime2) <= TTime(eResult1->iTimerStoppedTime+KTickResolution) && (utcNow
hgs
parents:
diff changeset
  1052
            + expireTime2 + TTimeIntervalMicroSeconds(
hgs
parents:
diff changeset
  1053
            KTimerAccuracyMicroSeconds)) > TTime(eResult1->iTimerStoppedTime))
hgs
parents:
diff changeset
  1054
        {
hgs
parents:
diff changeset
  1055
        _LIT( KDescription , "Passed");
hgs
parents:
diff changeset
  1056
        aResult.SetResult(KErrNone, KDescription);
hgs
parents:
diff changeset
  1057
        }
hgs
parents:
diff changeset
  1058
    else
hgs
parents:
diff changeset
  1059
        {
hgs
parents:
diff changeset
  1060
        _LIT( KDescription , "Some timer was fired either too early or too late.\n");
hgs
parents:
diff changeset
  1061
        aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
  1062
        }
hgs
parents:
diff changeset
  1063
    // Case was executed
hgs
parents:
diff changeset
  1064
    delete timer1;
hgs
parents:
diff changeset
  1065
    delete timer2;
hgs
parents:
diff changeset
  1066
    delete eResult1;
hgs
parents:
diff changeset
  1067
    delete eResult2;
hgs
parents:
diff changeset
  1068
    delete res1;
hgs
parents:
diff changeset
  1069
    delete res2;
hgs
parents:
diff changeset
  1070
    return KErrNone;
hgs
parents:
diff changeset
  1071
    }
hgs
parents:
diff changeset
  1072
hgs
parents:
diff changeset
  1073
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1074
// Start two timers and see that they expire at their own max time
hgs
parents:
diff changeset
  1075
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1076
//
hgs
parents:
diff changeset
  1077
TInt CTestCFlexTimer::ConfigureCTimerNonOverlap1L( TTestResult& aResult,
hgs
parents:
diff changeset
  1078
        CTestFlexTimer */*cb*/)
hgs
parents:
diff changeset
  1079
    {
hgs
parents:
diff changeset
  1080
    TTestResult *res1 = new TTestResult();
hgs
parents:
diff changeset
  1081
    TTestResult *res2 = new TTestResult();
hgs
parents:
diff changeset
  1082
    TExtendedTestResult *eResult1 = new TExtendedTestResult(res1);
hgs
parents:
diff changeset
  1083
    TExtendedTestResult *eResult2 = new TExtendedTestResult(res2);
hgs
parents:
diff changeset
  1084
    eResult1->iTimerID = 1;
hgs
parents:
diff changeset
  1085
    eResult2->iTimerID = 2;
hgs
parents:
diff changeset
  1086
    CInheritedCFlexTimer* timer1 = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
  1087
            CActive::EPriorityStandard,
hgs
parents:
diff changeset
  1088
            TCallBack(InheritedFlexTimerCallbackKErrNoneMarkTimestamp,
hgs
parents:
diff changeset
  1089
                    eResult1));
hgs
parents:
diff changeset
  1090
    CInheritedCFlexTimer* timer2 = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
  1091
            CActive::EPriorityStandard,
hgs
parents:
diff changeset
  1092
            TCallBack(InheritedFlexTimerCallbackKErrNoneMarkTimestamp,
hgs
parents:
diff changeset
  1093
                    eResult2));
hgs
parents:
diff changeset
  1094
    // Expire in 10 seconds
hgs
parents:
diff changeset
  1095
    TTimeIntervalMicroSeconds expireTime1(16 * 1000 * 1000);
hgs
parents:
diff changeset
  1096
    TTimeIntervalMicroSeconds window1(0);
hgs
parents:
diff changeset
  1097
    timer1->Configure(window1);
hgs
parents:
diff changeset
  1098
    //Expire within first timers default window
hgs
parents:
diff changeset
  1099
    TTimeIntervalMicroSeconds expireTime2(15 * 1000 * 1000);
hgs
parents:
diff changeset
  1100
    TTimeIntervalMicroSeconds window2(1 * 1000 * 1000);
hgs
parents:
diff changeset
  1101
    timer2->Configure(window2);
hgs
parents:
diff changeset
  1102
hgs
parents:
diff changeset
  1103
    // Save current time
hgs
parents:
diff changeset
  1104
    TTime utcNow(0);
hgs
parents:
diff changeset
  1105
    utcNow.UniversalTime();
hgs
parents:
diff changeset
  1106
hgs
parents:
diff changeset
  1107
    timer1->After(expireTime1);
hgs
parents:
diff changeset
  1108
    timer2->After(expireTime2);
hgs
parents:
diff changeset
  1109
hgs
parents:
diff changeset
  1110
    //Timer to stop active scheduler after timers under test are completed.
hgs
parents:
diff changeset
  1111
    CPeriodic *p = CPeriodic::NewL(EPriorityNormal);
hgs
parents:
diff changeset
  1112
    p->Start(18 * 1000 * 1000, 1000, TCallBack(StopActiveScheduler));
hgs
parents:
diff changeset
  1113
    // Start scheduler and wait for callback to stop it
hgs
parents:
diff changeset
  1114
    CActiveScheduler::Start();
hgs
parents:
diff changeset
  1115
    delete p;
hgs
parents:
diff changeset
  1116
    //See if CB has failed the case
hgs
parents:
diff changeset
  1117
    if (eResult1->iCaseAlreadyFailed || eResult2->iCaseAlreadyFailed)
hgs
parents:
diff changeset
  1118
        {
hgs
parents:
diff changeset
  1119
        if (eResult1->iCaseAlreadyFailed)
hgs
parents:
diff changeset
  1120
            {
hgs
parents:
diff changeset
  1121
            aResult.SetResult(eResult1->iTestResult->iResult,
hgs
parents:
diff changeset
  1122
                    eResult1->iTestResult->iResultDes);
hgs
parents:
diff changeset
  1123
            }
hgs
parents:
diff changeset
  1124
        else
hgs
parents:
diff changeset
  1125
            {
hgs
parents:
diff changeset
  1126
            aResult.SetResult(eResult2->iTestResult->iResult,
hgs
parents:
diff changeset
  1127
                    eResult2->iTestResult->iResultDes);
hgs
parents:
diff changeset
  1128
            }
hgs
parents:
diff changeset
  1129
        delete timer1;
hgs
parents:
diff changeset
  1130
        delete timer2;
hgs
parents:
diff changeset
  1131
        delete eResult1;
hgs
parents:
diff changeset
  1132
        delete eResult2;
hgs
parents:
diff changeset
  1133
        delete res1;
hgs
parents:
diff changeset
  1134
        delete res2;
hgs
parents:
diff changeset
  1135
        return KErrNone;
hgs
parents:
diff changeset
  1136
        }
hgs
parents:
diff changeset
  1137
    // Get new current time
hgs
parents:
diff changeset
  1138
    TTime utcNow2(0);
hgs
parents:
diff changeset
  1139
    utcNow2.UniversalTime();
hgs
parents:
diff changeset
  1140
hgs
parents:
diff changeset
  1141
    //Check if timer expired within their own  maxtime to maxtime+accuracy
hgs
parents:
diff changeset
  1142
    if ((utcNow + expireTime2) <= TTime(eResult2->iTimerStoppedTime+KTickResolution)
hgs
parents:
diff changeset
  1143
            && (utcNow + expireTime2 + TTimeIntervalMicroSeconds(
hgs
parents:
diff changeset
  1144
                    KTimerAccuracyMicroSeconds)) > TTime(
hgs
parents:
diff changeset
  1145
                    eResult2->iTimerStoppedTime) &&
hgs
parents:
diff changeset
  1146
hgs
parents:
diff changeset
  1147
    (utcNow + expireTime1) <= TTime(eResult1->iTimerStoppedTime+KTickResolution) && (utcNow
hgs
parents:
diff changeset
  1148
            + expireTime1 + TTimeIntervalMicroSeconds(
hgs
parents:
diff changeset
  1149
            KTimerAccuracyMicroSeconds)) > TTime(eResult1->iTimerStoppedTime))
hgs
parents:
diff changeset
  1150
        {
hgs
parents:
diff changeset
  1151
        _LIT( KDescription , "Passed");
hgs
parents:
diff changeset
  1152
        aResult.SetResult(KErrNone, KDescription);
hgs
parents:
diff changeset
  1153
        }
hgs
parents:
diff changeset
  1154
    else
hgs
parents:
diff changeset
  1155
        {
hgs
parents:
diff changeset
  1156
        _LIT( KDescription , "Some timer was fired either too early or too late.\n");
hgs
parents:
diff changeset
  1157
        aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
  1158
        }
hgs
parents:
diff changeset
  1159
    // Case was executed
hgs
parents:
diff changeset
  1160
    delete timer1;
hgs
parents:
diff changeset
  1161
    delete timer2;
hgs
parents:
diff changeset
  1162
    delete eResult1;
hgs
parents:
diff changeset
  1163
    delete eResult2;
hgs
parents:
diff changeset
  1164
    delete res1;
hgs
parents:
diff changeset
  1165
    delete res2;
hgs
parents:
diff changeset
  1166
    return KErrNone;
hgs
parents:
diff changeset
  1167
    }
hgs
parents:
diff changeset
  1168
hgs
parents:
diff changeset
  1169
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1170
// Start two timers and see that they expire at their own max time
hgs
parents:
diff changeset
  1171
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1172
//
hgs
parents:
diff changeset
  1173
TInt CTestCFlexTimer::ConfigureCTimerNonOverlap2L( TTestResult& aResult,
hgs
parents:
diff changeset
  1174
        CTestFlexTimer */*cb*/)
hgs
parents:
diff changeset
  1175
    {
hgs
parents:
diff changeset
  1176
    TTestResult *res1 = new TTestResult();
hgs
parents:
diff changeset
  1177
    TTestResult *res2 = new TTestResult();
hgs
parents:
diff changeset
  1178
    TExtendedTestResult *eResult1 = new TExtendedTestResult(res1);
hgs
parents:
diff changeset
  1179
    TExtendedTestResult *eResult2 = new TExtendedTestResult(res2);
hgs
parents:
diff changeset
  1180
    eResult1->iTimerID = 1;
hgs
parents:
diff changeset
  1181
    eResult2->iTimerID = 2;
hgs
parents:
diff changeset
  1182
    CInheritedCFlexTimer* timer1 = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
  1183
            CActive::EPriorityStandard,
hgs
parents:
diff changeset
  1184
            TCallBack(InheritedFlexTimerCallbackKErrNoneMarkTimestamp,
hgs
parents:
diff changeset
  1185
                    eResult1));
hgs
parents:
diff changeset
  1186
    CInheritedCFlexTimer* timer2 = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
  1187
            CActive::EPriorityStandard,
hgs
parents:
diff changeset
  1188
            TCallBack(InheritedFlexTimerCallbackKErrNoneMarkTimestamp,
hgs
parents:
diff changeset
  1189
                    eResult2));
hgs
parents:
diff changeset
  1190
    // Expire in 10 seconds
hgs
parents:
diff changeset
  1191
    TTimeIntervalMicroSeconds expireTime1(16 * 1000 * 1000);
hgs
parents:
diff changeset
  1192
    TTimeIntervalMicroSeconds window1(16 * 1000 * 1000);
hgs
parents:
diff changeset
  1193
    timer1->Configure(window1);
hgs
parents:
diff changeset
  1194
    window1 = 8 * 1000 * 1000;
hgs
parents:
diff changeset
  1195
    timer1->Configure(window1);
hgs
parents:
diff changeset
  1196
    //Expire within first timers default window
hgs
parents:
diff changeset
  1197
    TTimeIntervalMicroSeconds expireTime2(7 * 1000 * 1000);
hgs
parents:
diff changeset
  1198
    TTimeIntervalMicroSeconds window2(4 * 1000 * 1000);
hgs
parents:
diff changeset
  1199
    timer2->Configure(window2);
hgs
parents:
diff changeset
  1200
hgs
parents:
diff changeset
  1201
    // Save current time
hgs
parents:
diff changeset
  1202
    TTime utcNow(0);
hgs
parents:
diff changeset
  1203
    utcNow.UniversalTime();
hgs
parents:
diff changeset
  1204
hgs
parents:
diff changeset
  1205
    timer1->After(expireTime1);
hgs
parents:
diff changeset
  1206
    timer2->After(expireTime2);
hgs
parents:
diff changeset
  1207
hgs
parents:
diff changeset
  1208
    //Timer to stop active scheduler after timers under test are completed.
hgs
parents:
diff changeset
  1209
    CPeriodic *p = CPeriodic::NewL(EPriorityNormal);
hgs
parents:
diff changeset
  1210
    p->Start(18 * 1000 * 1000, 1000, TCallBack(StopActiveScheduler));
hgs
parents:
diff changeset
  1211
    // Start scheduler and wait for callback to stop it
hgs
parents:
diff changeset
  1212
    CActiveScheduler::Start();
hgs
parents:
diff changeset
  1213
    delete p;
hgs
parents:
diff changeset
  1214
    //See if CB has failed the case
hgs
parents:
diff changeset
  1215
    if (eResult1->iCaseAlreadyFailed || eResult2->iCaseAlreadyFailed)
hgs
parents:
diff changeset
  1216
        {
hgs
parents:
diff changeset
  1217
        if (eResult1->iCaseAlreadyFailed)
hgs
parents:
diff changeset
  1218
            {
hgs
parents:
diff changeset
  1219
            aResult.SetResult(eResult1->iTestResult->iResult,
hgs
parents:
diff changeset
  1220
                    eResult1->iTestResult->iResultDes);
hgs
parents:
diff changeset
  1221
            }
hgs
parents:
diff changeset
  1222
        else
hgs
parents:
diff changeset
  1223
            {
hgs
parents:
diff changeset
  1224
            aResult.SetResult(eResult2->iTestResult->iResult,
hgs
parents:
diff changeset
  1225
                    eResult2->iTestResult->iResultDes);
hgs
parents:
diff changeset
  1226
            }
hgs
parents:
diff changeset
  1227
        delete timer1;
hgs
parents:
diff changeset
  1228
        delete timer2;
hgs
parents:
diff changeset
  1229
        delete eResult1;
hgs
parents:
diff changeset
  1230
        delete eResult2;
hgs
parents:
diff changeset
  1231
        delete res1;
hgs
parents:
diff changeset
  1232
        delete res2;
hgs
parents:
diff changeset
  1233
        return KErrNone;
hgs
parents:
diff changeset
  1234
        }
hgs
parents:
diff changeset
  1235
    // Get new current time
hgs
parents:
diff changeset
  1236
    TTime utcNow2(0);
hgs
parents:
diff changeset
  1237
    utcNow2.UniversalTime();
hgs
parents:
diff changeset
  1238
hgs
parents:
diff changeset
  1239
    //Check if timer expired within their own  maxtime to maxtime+accuracy
hgs
parents:
diff changeset
  1240
    if ((utcNow + expireTime2) <= TTime(eResult2->iTimerStoppedTime+KTickResolution)
hgs
parents:
diff changeset
  1241
            && (utcNow + expireTime2 + TTimeIntervalMicroSeconds(
hgs
parents:
diff changeset
  1242
                    KTimerAccuracyMicroSeconds)) > TTime(
hgs
parents:
diff changeset
  1243
                    eResult2->iTimerStoppedTime) &&
hgs
parents:
diff changeset
  1244
hgs
parents:
diff changeset
  1245
    (utcNow + expireTime1) <= TTime(eResult1->iTimerStoppedTime+KTickResolution) && (utcNow
hgs
parents:
diff changeset
  1246
            + expireTime1 + TTimeIntervalMicroSeconds(
hgs
parents:
diff changeset
  1247
            KTimerAccuracyMicroSeconds)) > TTime(eResult1->iTimerStoppedTime))
hgs
parents:
diff changeset
  1248
        {
hgs
parents:
diff changeset
  1249
        _LIT( KDescription , "Passed");
hgs
parents:
diff changeset
  1250
        aResult.SetResult(KErrNone, KDescription);
hgs
parents:
diff changeset
  1251
        }
hgs
parents:
diff changeset
  1252
    else
hgs
parents:
diff changeset
  1253
        {
hgs
parents:
diff changeset
  1254
        _LIT( KDescription , "Some timer was fired either too early or too late.\n");
hgs
parents:
diff changeset
  1255
        aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
  1256
        }
hgs
parents:
diff changeset
  1257
    // Case was executed
hgs
parents:
diff changeset
  1258
    delete timer1;
hgs
parents:
diff changeset
  1259
    delete timer2;
hgs
parents:
diff changeset
  1260
    delete eResult1;
hgs
parents:
diff changeset
  1261
    delete eResult2;
hgs
parents:
diff changeset
  1262
    delete res1;
hgs
parents:
diff changeset
  1263
    delete res2;
hgs
parents:
diff changeset
  1264
    return KErrNone;
hgs
parents:
diff changeset
  1265
    }
hgs
parents:
diff changeset
  1266
hgs
parents:
diff changeset
  1267
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1268
// Start three timers and see that system time change aborts At & AtUtc timers
hgs
parents:
diff changeset
  1269
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1270
//
hgs
parents:
diff changeset
  1271
TInt CTestCFlexTimer::SystemTimeChangesL( TTestResult& aResult,
hgs
parents:
diff changeset
  1272
        CTestFlexTimer */*cb*/)
hgs
parents:
diff changeset
  1273
    {
hgs
parents:
diff changeset
  1274
    TTestResult *res1 = new TTestResult();
hgs
parents:
diff changeset
  1275
    TTestResult *res2 = new TTestResult();
hgs
parents:
diff changeset
  1276
    TTestResult *res3 = new TTestResult();
hgs
parents:
diff changeset
  1277
    TExtendedTestResult *eResult1 = new TExtendedTestResult(res1);
hgs
parents:
diff changeset
  1278
    TExtendedTestResult *eResult2 = new TExtendedTestResult(res2);
hgs
parents:
diff changeset
  1279
    TExtendedTestResult *eResult3 = new TExtendedTestResult(res3);
hgs
parents:
diff changeset
  1280
    eResult1->iTimerID = 1;
hgs
parents:
diff changeset
  1281
    eResult2->iTimerID = 2;
hgs
parents:
diff changeset
  1282
    eResult3->iTimerID = 3;
hgs
parents:
diff changeset
  1283
    CInheritedCFlexTimer* timer1 = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
  1284
            CActive::EPriorityStandard, TCallBack(
hgs
parents:
diff changeset
  1285
                    InheritedFlexTimerCallbackKErrAbort, eResult1));
hgs
parents:
diff changeset
  1286
    CInheritedCFlexTimer* timer2 = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
  1287
            CActive::EPriorityStandard, TCallBack(
hgs
parents:
diff changeset
  1288
                    InheritedFlexTimerCallbackKErrAbort, eResult2));
hgs
parents:
diff changeset
  1289
    CInheritedCFlexTimer* timer3 = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
  1290
            CActive::EPriorityStandard,
hgs
parents:
diff changeset
  1291
            TCallBack(InheritedFlexTimerCallbackStopSchedulerKErrNone,
hgs
parents:
diff changeset
  1292
                    eResult3));
hgs
parents:
diff changeset
  1293
    // Expire in 10, 11 and 12 seconds. One and two are to be aborted
hgs
parents:
diff changeset
  1294
    TTimeIntervalMicroSeconds32 expireTime1(10 * 1000 * 1000);
hgs
parents:
diff changeset
  1295
    TTimeIntervalMicroSeconds32 expireTime2(11 * 1000 * 1000);
hgs
parents:
diff changeset
  1296
    TTimeIntervalMicroSeconds32 expireTime3(12 * 1000 * 1000);
hgs
parents:
diff changeset
  1297
hgs
parents:
diff changeset
  1298
    
hgs
parents:
diff changeset
  1299
    // Save current time as ticks. This use case will change system time
hgs
parents:
diff changeset
  1300
    // and timestamps will not be exact -- ticks are.
hgs
parents:
diff changeset
  1301
    TUint startTicks( User::TickCount() );
hgs
parents:
diff changeset
  1302
    
hgs
parents:
diff changeset
  1303
    TTime now, nowUtc;
hgs
parents:
diff changeset
  1304
    now.HomeTime();
hgs
parents:
diff changeset
  1305
    nowUtc.UniversalTime();
hgs
parents:
diff changeset
  1306
hgs
parents:
diff changeset
  1307
    timer1->At(now + expireTime1);
hgs
parents:
diff changeset
  1308
    timer2->AtUTC(nowUtc + expireTime2);
hgs
parents:
diff changeset
  1309
    timer3->After(expireTime3);
hgs
parents:
diff changeset
  1310
hgs
parents:
diff changeset
  1311
    //Timer to change system time after timers have been running for a while
hgs
parents:
diff changeset
  1312
    CPeriodic *p = CPeriodic::NewL(EPriorityNormal);
hgs
parents:
diff changeset
  1313
    p->Start(5 * 1000 * 1000, 1000, TCallBack(ChangeSystemTime1sAndCancel, p));
hgs
parents:
diff changeset
  1314
    // Start scheduler and wait for callback to stop it
hgs
parents:
diff changeset
  1315
    CActiveScheduler::Start();
hgs
parents:
diff changeset
  1316
    delete p;
hgs
parents:
diff changeset
  1317
    //See if CB has failed the case
hgs
parents:
diff changeset
  1318
    if (eResult1->iCaseAlreadyFailed || eResult2->iCaseAlreadyFailed
hgs
parents:
diff changeset
  1319
            || eResult3->iCaseAlreadyFailed)
hgs
parents:
diff changeset
  1320
        {
hgs
parents:
diff changeset
  1321
        if (eResult1->iCaseAlreadyFailed)
hgs
parents:
diff changeset
  1322
            {
hgs
parents:
diff changeset
  1323
            aResult.SetResult(eResult1->iTestResult->iResult,
hgs
parents:
diff changeset
  1324
                    eResult1->iTestResult->iResultDes);
hgs
parents:
diff changeset
  1325
            }
hgs
parents:
diff changeset
  1326
        else if (eResult2->iCaseAlreadyFailed)
hgs
parents:
diff changeset
  1327
            {
hgs
parents:
diff changeset
  1328
            aResult.SetResult(eResult2->iTestResult->iResult,
hgs
parents:
diff changeset
  1329
                    eResult2->iTestResult->iResultDes);
hgs
parents:
diff changeset
  1330
            }
hgs
parents:
diff changeset
  1331
        else
hgs
parents:
diff changeset
  1332
            {
hgs
parents:
diff changeset
  1333
            aResult.SetResult(eResult3->iTestResult->iResult,
hgs
parents:
diff changeset
  1334
                    eResult3->iTestResult->iResultDes);
hgs
parents:
diff changeset
  1335
            }
hgs
parents:
diff changeset
  1336
        delete timer1;
hgs
parents:
diff changeset
  1337
        delete timer2;
hgs
parents:
diff changeset
  1338
        delete timer3;
hgs
parents:
diff changeset
  1339
        delete eResult1;
hgs
parents:
diff changeset
  1340
        delete eResult2;
hgs
parents:
diff changeset
  1341
        delete eResult3;
hgs
parents:
diff changeset
  1342
        delete res1;
hgs
parents:
diff changeset
  1343
        delete res2;
hgs
parents:
diff changeset
  1344
        delete res3;
hgs
parents:
diff changeset
  1345
        return KErrNone;
hgs
parents:
diff changeset
  1346
        }
hgs
parents:
diff changeset
  1347
    // Get new current time
hgs
parents:
diff changeset
  1348
    TUint endTicks( User::TickCount() );
hgs
parents:
diff changeset
  1349
    TInt delay( ( endTicks - startTicks ) * KTickInMicroSeconds );
hgs
parents:
diff changeset
  1350
    
hgs
parents:
diff changeset
  1351
    //Check if timers expiry happened within timer3 maxtime to maxtime+accuracy
hgs
parents:
diff changeset
  1352
    if ( delay+KTickResolution >= expireTime3.Int() && 
hgs
parents:
diff changeset
  1353
         delay < expireTime3.Int() + KTimerAccuracyMicroSeconds )
hgs
parents:
diff changeset
  1354
        {
hgs
parents:
diff changeset
  1355
        _LIT( KDescription , "Passed");
hgs
parents:
diff changeset
  1356
        aResult.SetResult(KErrNone, KDescription);
hgs
parents:
diff changeset
  1357
        }
hgs
parents:
diff changeset
  1358
    else
hgs
parents:
diff changeset
  1359
        {
hgs
parents:
diff changeset
  1360
        _LIT( KDescription , "Some timer was fired either too early or too late.\n");
hgs
parents:
diff changeset
  1361
        aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
  1362
        }
hgs
parents:
diff changeset
  1363
    // Case was executed
hgs
parents:
diff changeset
  1364
    delete timer1;
hgs
parents:
diff changeset
  1365
    delete timer2;
hgs
parents:
diff changeset
  1366
    delete timer3;
hgs
parents:
diff changeset
  1367
    delete eResult1;
hgs
parents:
diff changeset
  1368
    delete eResult2;
hgs
parents:
diff changeset
  1369
    delete eResult3;
hgs
parents:
diff changeset
  1370
    delete res1;
hgs
parents:
diff changeset
  1371
    delete res2;
hgs
parents:
diff changeset
  1372
    delete res3;
hgs
parents:
diff changeset
  1373
hgs
parents:
diff changeset
  1374
    return KErrNone;
hgs
parents:
diff changeset
  1375
    }
hgs
parents:
diff changeset
  1376
hgs
parents:
diff changeset
  1377
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1378
// Start three timers and see that time zone change aborts At & AtUtc timers
hgs
parents:
diff changeset
  1379
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1380
//
hgs
parents:
diff changeset
  1381
TInt CTestCFlexTimer::TimeZoneChangesL( TTestResult& aResult,
hgs
parents:
diff changeset
  1382
        CTestFlexTimer */*cb*/)
hgs
parents:
diff changeset
  1383
    {
hgs
parents:
diff changeset
  1384
    TTestResult *res1 = new TTestResult();
hgs
parents:
diff changeset
  1385
    TTestResult *res2 = new TTestResult();
hgs
parents:
diff changeset
  1386
    TTestResult *res3 = new TTestResult();
hgs
parents:
diff changeset
  1387
    TExtendedTestResult *eResult1 = new TExtendedTestResult(res1);
hgs
parents:
diff changeset
  1388
    TExtendedTestResult *eResult2 = new TExtendedTestResult(res2);
hgs
parents:
diff changeset
  1389
    TExtendedTestResult *eResult3 = new TExtendedTestResult(res3);
hgs
parents:
diff changeset
  1390
    eResult1->iTimerID = 1;
hgs
parents:
diff changeset
  1391
    eResult2->iTimerID = 2;
hgs
parents:
diff changeset
  1392
    eResult3->iTimerID = 3;
hgs
parents:
diff changeset
  1393
    CInheritedCFlexTimer* timer1 = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
  1394
            CActive::EPriorityStandard, TCallBack(
hgs
parents:
diff changeset
  1395
                    InheritedFlexTimerCallbackKErrAbort, eResult1));
hgs
parents:
diff changeset
  1396
    CInheritedCFlexTimer* timer2 = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
  1397
            CActive::EPriorityStandard, TCallBack(
hgs
parents:
diff changeset
  1398
                    InheritedFlexTimerCallbackKErrAbort, eResult2));
hgs
parents:
diff changeset
  1399
    CInheritedCFlexTimer* timer3 = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
  1400
            CActive::EPriorityStandard,
hgs
parents:
diff changeset
  1401
            TCallBack(InheritedFlexTimerCallbackStopSchedulerKErrNone,
hgs
parents:
diff changeset
  1402
                    eResult3));
hgs
parents:
diff changeset
  1403
    // Expire in 10, 11 and 12 seconds. One and two are to be aborted
hgs
parents:
diff changeset
  1404
    TTimeIntervalMicroSeconds32 expireTime1(10 * 1000 * 1000);
hgs
parents:
diff changeset
  1405
    TTimeIntervalMicroSeconds32 expireTime2(11 * 1000 * 1000);
hgs
parents:
diff changeset
  1406
    TTimeIntervalMicroSeconds32 expireTime3(12 * 1000 * 1000);
hgs
parents:
diff changeset
  1407
hgs
parents:
diff changeset
  1408
    // Save current time as ticks. This use case will change system time
hgs
parents:
diff changeset
  1409
    // and timestamps will not be exact -- ticks are.
hgs
parents:
diff changeset
  1410
    TUint startTicks( User::TickCount() );
hgs
parents:
diff changeset
  1411
    
hgs
parents:
diff changeset
  1412
    TTime now, nowUtc;
hgs
parents:
diff changeset
  1413
    now.HomeTime();
hgs
parents:
diff changeset
  1414
    nowUtc.UniversalTime();
hgs
parents:
diff changeset
  1415
    
hgs
parents:
diff changeset
  1416
    timer1->At(now + expireTime1);
hgs
parents:
diff changeset
  1417
    timer2->AtUTC(nowUtc + expireTime2);
hgs
parents:
diff changeset
  1418
    timer3->After(expireTime3);
hgs
parents:
diff changeset
  1419
hgs
parents:
diff changeset
  1420
    //Timer to change system time after timers have been running for a while
hgs
parents:
diff changeset
  1421
    CPeriodic *p = CPeriodic::NewL(EPriorityNormal);
hgs
parents:
diff changeset
  1422
    p->Start(5 * 1000 * 1000, 1000, TCallBack(ChangeTimeZoneAndCancel, p));
hgs
parents:
diff changeset
  1423
    // Start scheduler and wait for callback to stop it
hgs
parents:
diff changeset
  1424
    CActiveScheduler::Start();
hgs
parents:
diff changeset
  1425
    delete p;
hgs
parents:
diff changeset
  1426
    //See if CB has failed the case
hgs
parents:
diff changeset
  1427
    if (eResult1->iCaseAlreadyFailed || eResult2->iCaseAlreadyFailed
hgs
parents:
diff changeset
  1428
            || eResult3->iCaseAlreadyFailed)
hgs
parents:
diff changeset
  1429
        {
hgs
parents:
diff changeset
  1430
        if (eResult1->iCaseAlreadyFailed)
hgs
parents:
diff changeset
  1431
            {
hgs
parents:
diff changeset
  1432
            aResult.SetResult(eResult1->iTestResult->iResult,
hgs
parents:
diff changeset
  1433
                    eResult1->iTestResult->iResultDes);
hgs
parents:
diff changeset
  1434
            }
hgs
parents:
diff changeset
  1435
        else if (eResult2->iCaseAlreadyFailed)
hgs
parents:
diff changeset
  1436
            {
hgs
parents:
diff changeset
  1437
            aResult.SetResult(eResult2->iTestResult->iResult,
hgs
parents:
diff changeset
  1438
                    eResult2->iTestResult->iResultDes);
hgs
parents:
diff changeset
  1439
            }
hgs
parents:
diff changeset
  1440
        else
hgs
parents:
diff changeset
  1441
            {
hgs
parents:
diff changeset
  1442
            aResult.SetResult(eResult3->iTestResult->iResult,
hgs
parents:
diff changeset
  1443
                    eResult3->iTestResult->iResultDes);
hgs
parents:
diff changeset
  1444
            }
hgs
parents:
diff changeset
  1445
        delete timer1;
hgs
parents:
diff changeset
  1446
        delete timer2;
hgs
parents:
diff changeset
  1447
        delete timer3;
hgs
parents:
diff changeset
  1448
        delete eResult1;
hgs
parents:
diff changeset
  1449
        delete eResult2;
hgs
parents:
diff changeset
  1450
        delete eResult3;
hgs
parents:
diff changeset
  1451
        delete res1;
hgs
parents:
diff changeset
  1452
        delete res2;
hgs
parents:
diff changeset
  1453
        delete res3;
hgs
parents:
diff changeset
  1454
        return KErrNone;
hgs
parents:
diff changeset
  1455
        }
hgs
parents:
diff changeset
  1456
hgs
parents:
diff changeset
  1457
    // Get new current time
hgs
parents:
diff changeset
  1458
    TUint endTicks( User::TickCount() );
hgs
parents:
diff changeset
  1459
    TInt delay( ( endTicks - startTicks ) * KTickInMicroSeconds );
hgs
parents:
diff changeset
  1460
    
hgs
parents:
diff changeset
  1461
    //Check if timers expiry happened within timer3 maxtime to maxtime+accuracy
hgs
parents:
diff changeset
  1462
    if ( delay+KTickResolution >= expireTime3.Int() && 
hgs
parents:
diff changeset
  1463
         delay < expireTime3.Int() + KTimerAccuracyMicroSeconds )
hgs
parents:
diff changeset
  1464
        {
hgs
parents:
diff changeset
  1465
        _LIT( KDescription , "Passed");
hgs
parents:
diff changeset
  1466
        aResult.SetResult(KErrNone, KDescription);
hgs
parents:
diff changeset
  1467
        }
hgs
parents:
diff changeset
  1468
    else
hgs
parents:
diff changeset
  1469
        {
hgs
parents:
diff changeset
  1470
        _LIT( KDescription , "Some timer was fired either too early or too late.\n");
hgs
parents:
diff changeset
  1471
        aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
  1472
        }
hgs
parents:
diff changeset
  1473
    // Case was executed
hgs
parents:
diff changeset
  1474
    delete timer1;
hgs
parents:
diff changeset
  1475
    delete timer2;
hgs
parents:
diff changeset
  1476
    delete timer3;
hgs
parents:
diff changeset
  1477
    delete eResult1;
hgs
parents:
diff changeset
  1478
    delete eResult2;
hgs
parents:
diff changeset
  1479
    delete eResult3;
hgs
parents:
diff changeset
  1480
    delete res1;
hgs
parents:
diff changeset
  1481
    delete res2;
hgs
parents:
diff changeset
  1482
    delete res3;
hgs
parents:
diff changeset
  1483
hgs
parents:
diff changeset
  1484
    return KErrNone;
hgs
parents:
diff changeset
  1485
    }
hgs
parents:
diff changeset
  1486
hgs
parents:
diff changeset
  1487
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1488
// Start timers with dumbass parameters
hgs
parents:
diff changeset
  1489
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1490
//
hgs
parents:
diff changeset
  1491
TInt CTestCFlexTimer::DumbAssParametersForCTimerL( TTestResult& aResult,
hgs
parents:
diff changeset
  1492
        CTestFlexTimer */*cb*/)
hgs
parents:
diff changeset
  1493
    {
hgs
parents:
diff changeset
  1494
    TTestResult *res = new TTestResult();
hgs
parents:
diff changeset
  1495
    TExtendedTestResult *eResult = new TExtendedTestResult(res);
hgs
parents:
diff changeset
  1496
    eResult->iTimerID = 1;
hgs
parents:
diff changeset
  1497
    CInheritedCFlexTimer
hgs
parents:
diff changeset
  1498
            * timer = CInheritedCFlexTimer::NewL(CActive::EPriorityStandard,
hgs
parents:
diff changeset
  1499
                    TCallBack(
hgs
parents:
diff changeset
  1500
                            InheritedFlexTimerCallbackStopSchedulerKErrNone,
hgs
parents:
diff changeset
  1501
                            eResult));
hgs
parents:
diff changeset
  1502
hgs
parents:
diff changeset
  1503
    /*32 bit IF called with 1 parameter*/
hgs
parents:
diff changeset
  1504
    /***********************************/
hgs
parents:
diff changeset
  1505
    // Expire in 3 seconds. 
hgs
parents:
diff changeset
  1506
    TTimeIntervalMicroSeconds32 expireTime(1);
hgs
parents:
diff changeset
  1507
    // Save current time
hgs
parents:
diff changeset
  1508
    TTime now(0);
hgs
parents:
diff changeset
  1509
    now.HomeTime();
hgs
parents:
diff changeset
  1510
    timer->After(expireTime);
hgs
parents:
diff changeset
  1511
    // Start scheduler and wait for callback to stop it
hgs
parents:
diff changeset
  1512
    CActiveScheduler::Start();
hgs
parents:
diff changeset
  1513
    //See if CB has failed the case
hgs
parents:
diff changeset
  1514
    if (eResult->iCaseAlreadyFailed)
hgs
parents:
diff changeset
  1515
        {
hgs
parents:
diff changeset
  1516
        aResult.SetResult(eResult->iTestResult->iResult,
hgs
parents:
diff changeset
  1517
                eResult->iTestResult->iResultDes);
hgs
parents:
diff changeset
  1518
        delete timer;
hgs
parents:
diff changeset
  1519
        delete eResult;
hgs
parents:
diff changeset
  1520
        delete res;
hgs
parents:
diff changeset
  1521
        return KErrNone;
hgs
parents:
diff changeset
  1522
        }
hgs
parents:
diff changeset
  1523
    // Get new current time
hgs
parents:
diff changeset
  1524
    TTime now2(0);
hgs
parents:
diff changeset
  1525
    now2.HomeTime();
hgs
parents:
diff changeset
  1526
    //Check if timers expiry happened immediately.
hgs
parents:
diff changeset
  1527
    if (!((now + expireTime) <= now2 && (now + expireTime
hgs
parents:
diff changeset
  1528
            + TTimeIntervalMicroSeconds32(KTimerAccuracyMicroSeconds)) > now2))
hgs
parents:
diff changeset
  1529
        {
hgs
parents:
diff changeset
  1530
        _LIT( KDescription , "32 bit After(1) failed.\n");
hgs
parents:
diff changeset
  1531
        aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
  1532
        delete timer;
hgs
parents:
diff changeset
  1533
        delete eResult;
hgs
parents:
diff changeset
  1534
        delete res;
hgs
parents:
diff changeset
  1535
        return KErrNone;
hgs
parents:
diff changeset
  1536
        }
hgs
parents:
diff changeset
  1537
hgs
parents:
diff changeset
  1538
    /*32 bit IF called with max parameter*/
hgs
parents:
diff changeset
  1539
    /***********************************/
hgs
parents:
diff changeset
  1540
    expireTime = 0x7FFFFFFF;
hgs
parents:
diff changeset
  1541
    now.HomeTime();
hgs
parents:
diff changeset
  1542
    delete timer;
hgs
parents:
diff changeset
  1543
    timer = NULL;
hgs
parents:
diff changeset
  1544
    timer = CInheritedCFlexTimer::NewL(CActive::EPriorityStandard, TCallBack(
hgs
parents:
diff changeset
  1545
            NotCalledCB, eResult));
hgs
parents:
diff changeset
  1546
    timer->After(expireTime);
hgs
parents:
diff changeset
  1547
    //Timer to change system time after timers have been running for a while
hgs
parents:
diff changeset
  1548
    CPeriodic *p = CPeriodic::NewL(EPriorityNormal);
hgs
parents:
diff changeset
  1549
    p->Start(5 * 1000 * 1000, 1000, TCallBack(
hgs
parents:
diff changeset
  1550
            CancelCFlexTimerAndStopActiveScheduler, timer));
hgs
parents:
diff changeset
  1551
    // Start scheduler and wait for callback to stop it
hgs
parents:
diff changeset
  1552
    CActiveScheduler::Start();
hgs
parents:
diff changeset
  1553
    p->Cancel();
hgs
parents:
diff changeset
  1554
    delete p;
hgs
parents:
diff changeset
  1555
    //See if CB has failed the case
hgs
parents:
diff changeset
  1556
    if (eResult->iCaseAlreadyFailed)
hgs
parents:
diff changeset
  1557
        {
hgs
parents:
diff changeset
  1558
        aResult.SetResult(eResult->iTestResult->iResult,
hgs
parents:
diff changeset
  1559
                eResult->iTestResult->iResultDes);
hgs
parents:
diff changeset
  1560
        delete timer;
hgs
parents:
diff changeset
  1561
        delete eResult;
hgs
parents:
diff changeset
  1562
        delete res;
hgs
parents:
diff changeset
  1563
        return KErrNone;
hgs
parents:
diff changeset
  1564
        }
hgs
parents:
diff changeset
  1565
hgs
parents:
diff changeset
  1566
    /*64 bit IF called with 1 parameter*/
hgs
parents:
diff changeset
  1567
    /***********************************/
hgs
parents:
diff changeset
  1568
    // Expire in 3 seconds. 
hgs
parents:
diff changeset
  1569
    TTimeIntervalMicroSeconds expireTime64(1);
hgs
parents:
diff changeset
  1570
    // Save current time
hgs
parents:
diff changeset
  1571
    now.HomeTime();
hgs
parents:
diff changeset
  1572
    delete timer;
hgs
parents:
diff changeset
  1573
    timer = NULL;
hgs
parents:
diff changeset
  1574
    timer = CInheritedCFlexTimer::NewL(CActive::EPriorityStandard, TCallBack(
hgs
parents:
diff changeset
  1575
            InheritedFlexTimerCallbackStopSchedulerKErrNone, eResult));
hgs
parents:
diff changeset
  1576
    timer->After(expireTime64);
hgs
parents:
diff changeset
  1577
    // Start scheduler and wait for callback to stop it
hgs
parents:
diff changeset
  1578
    CActiveScheduler::Start();
hgs
parents:
diff changeset
  1579
    //See if CB has failed the case
hgs
parents:
diff changeset
  1580
    if (eResult->iCaseAlreadyFailed)
hgs
parents:
diff changeset
  1581
        {
hgs
parents:
diff changeset
  1582
        aResult.SetResult(eResult->iTestResult->iResult,
hgs
parents:
diff changeset
  1583
                eResult->iTestResult->iResultDes);
hgs
parents:
diff changeset
  1584
        delete timer;
hgs
parents:
diff changeset
  1585
        delete eResult;
hgs
parents:
diff changeset
  1586
        delete res;
hgs
parents:
diff changeset
  1587
        return KErrNone;
hgs
parents:
diff changeset
  1588
        }
hgs
parents:
diff changeset
  1589
    // Get new current time
hgs
parents:
diff changeset
  1590
    now2.HomeTime();
hgs
parents:
diff changeset
  1591
    //Check if timers expiry happened immediately
hgs
parents:
diff changeset
  1592
    if (!((now + expireTime64) <= now2 && (now + expireTime64
hgs
parents:
diff changeset
  1593
            + TTimeIntervalMicroSeconds(KTimerAccuracyMicroSeconds)) > now2))
hgs
parents:
diff changeset
  1594
        {
hgs
parents:
diff changeset
  1595
        _LIT( KDescription , "64 bit After(1) failed.\n");
hgs
parents:
diff changeset
  1596
        aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
  1597
        delete timer;
hgs
parents:
diff changeset
  1598
        delete eResult;
hgs
parents:
diff changeset
  1599
        delete res;
hgs
parents:
diff changeset
  1600
        return KErrNone;
hgs
parents:
diff changeset
  1601
        }
hgs
parents:
diff changeset
  1602
    // Finally if we are here set whole case to passed.
hgs
parents:
diff changeset
  1603
    _LIT( KDescription , "Passed");
hgs
parents:
diff changeset
  1604
    aResult.SetResult(KErrNone, KDescription);
hgs
parents:
diff changeset
  1605
    delete timer;
hgs
parents:
diff changeset
  1606
    delete eResult;
hgs
parents:
diff changeset
  1607
    delete res;
hgs
parents:
diff changeset
  1608
    return KErrNone;
hgs
parents:
diff changeset
  1609
    }
hgs
parents:
diff changeset
  1610
hgs
parents:
diff changeset
  1611
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1612
// Start timers with dumbass parameters
hgs
parents:
diff changeset
  1613
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1614
//
hgs
parents:
diff changeset
  1615
TInt CTestCFlexTimer::DumbAssParametersForCTimerZero32bitL( TTestResult& aResult,
hgs
parents:
diff changeset
  1616
        CTestFlexTimer* /* cb */ )
hgs
parents:
diff changeset
  1617
    {
hgs
parents:
diff changeset
  1618
    TTestResult *res = new TTestResult();
hgs
parents:
diff changeset
  1619
    TExtendedTestResult *eResult = new TExtendedTestResult(res);
hgs
parents:
diff changeset
  1620
    eResult->iTimerID = 1;
hgs
parents:
diff changeset
  1621
hgs
parents:
diff changeset
  1622
    /*32 bit IF called with 0 parameter*/
hgs
parents:
diff changeset
  1623
    /***********************************/
hgs
parents:
diff changeset
  1624
    const TTimeIntervalMicroSeconds32 kExpireTime32(0);
hgs
parents:
diff changeset
  1625
hgs
parents:
diff changeset
  1626
    // Save current time
hgs
parents:
diff changeset
  1627
    TTime startTime;
hgs
parents:
diff changeset
  1628
    startTime.HomeTime();
hgs
parents:
diff changeset
  1629
hgs
parents:
diff changeset
  1630
    CInheritedCFlexTimer *timer = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
  1631
        CActive::EPriorityStandard, 
hgs
parents:
diff changeset
  1632
        TCallBack( InheritedFlexTimerCallbackStopSchedulerKErrNone, eResult ) );
hgs
parents:
diff changeset
  1633
hgs
parents:
diff changeset
  1634
    timer->After( kExpireTime32 );
hgs
parents:
diff changeset
  1635
hgs
parents:
diff changeset
  1636
    CActiveScheduler::Start();  // WAIT timer to expire
hgs
parents:
diff changeset
  1637
hgs
parents:
diff changeset
  1638
    TTime endTime;
hgs
parents:
diff changeset
  1639
    endTime.HomeTime();
hgs
parents:
diff changeset
  1640
    
hgs
parents:
diff changeset
  1641
    TTimeIntervalMicroSeconds delay = endTime.MicroSecondsFrom( startTime );
hgs
parents:
diff changeset
  1642
    
hgs
parents:
diff changeset
  1643
    if ( delay.Int64() < kExpireTime32.Int() || 
hgs
parents:
diff changeset
  1644
         delay.Int64() > kExpireTime32.Int() + KTimerAccuracyMicroSeconds )
hgs
parents:
diff changeset
  1645
        {
hgs
parents:
diff changeset
  1646
        aResult.SetResult( KErrGeneral, _L("Wrong expiration") );
hgs
parents:
diff changeset
  1647
        }
hgs
parents:
diff changeset
  1648
    else
hgs
parents:
diff changeset
  1649
        {
hgs
parents:
diff changeset
  1650
        aResult.SetResult( KErrNone, _L("Test case passed") );
hgs
parents:
diff changeset
  1651
        }
hgs
parents:
diff changeset
  1652
    
hgs
parents:
diff changeset
  1653
    delete timer;
hgs
parents:
diff changeset
  1654
    delete eResult;
hgs
parents:
diff changeset
  1655
    delete res;
hgs
parents:
diff changeset
  1656
    return KErrNone;
hgs
parents:
diff changeset
  1657
    }
hgs
parents:
diff changeset
  1658
hgs
parents:
diff changeset
  1659
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1660
// Start timers with dumbass parameters
hgs
parents:
diff changeset
  1661
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1662
//
hgs
parents:
diff changeset
  1663
TInt CTestCFlexTimer::DumbAssParametersForCTimerZero64bitL( TTestResult& aResult,
hgs
parents:
diff changeset
  1664
        CTestFlexTimer* /* cb */ )
hgs
parents:
diff changeset
  1665
    {
hgs
parents:
diff changeset
  1666
    TTestResult *res = new TTestResult();
hgs
parents:
diff changeset
  1667
    TExtendedTestResult *eResult = new TExtendedTestResult(res);
hgs
parents:
diff changeset
  1668
    eResult->iTimerID = 1;
hgs
parents:
diff changeset
  1669
hgs
parents:
diff changeset
  1670
    /*64 bit IF called with 0 parameter*/
hgs
parents:
diff changeset
  1671
    /***********************************/
hgs
parents:
diff changeset
  1672
    const TTimeIntervalMicroSeconds kExpireTime64(0);
hgs
parents:
diff changeset
  1673
hgs
parents:
diff changeset
  1674
    // Save current time
hgs
parents:
diff changeset
  1675
    TTime startTime;
hgs
parents:
diff changeset
  1676
    startTime.HomeTime();
hgs
parents:
diff changeset
  1677
hgs
parents:
diff changeset
  1678
    CInheritedCFlexTimer *timer = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
  1679
            CActive::EPriorityStandard, TCallBack(InheritedFlexTimerCallbackStopSchedulerKErrNone, eResult));
hgs
parents:
diff changeset
  1680
hgs
parents:
diff changeset
  1681
    timer->After(kExpireTime64);
hgs
parents:
diff changeset
  1682
    CActiveScheduler::Start();  // WAIT timer to expire
hgs
parents:
diff changeset
  1683
hgs
parents:
diff changeset
  1684
    TTime endTime;
hgs
parents:
diff changeset
  1685
    endTime.HomeTime();
hgs
parents:
diff changeset
  1686
    
hgs
parents:
diff changeset
  1687
    TTimeIntervalMicroSeconds delay = endTime.MicroSecondsFrom( startTime );
hgs
parents:
diff changeset
  1688
    
hgs
parents:
diff changeset
  1689
    if ( delay.Int64()+KTickResolution < kExpireTime64.Int64() || 
hgs
parents:
diff changeset
  1690
         delay.Int64() > kExpireTime64.Int64() + KTimerAccuracyMicroSeconds )
hgs
parents:
diff changeset
  1691
        {
hgs
parents:
diff changeset
  1692
        aResult.SetResult( KErrGeneral, _L("Wrong expiration") );
hgs
parents:
diff changeset
  1693
        }
hgs
parents:
diff changeset
  1694
    else
hgs
parents:
diff changeset
  1695
        {
hgs
parents:
diff changeset
  1696
        aResult.SetResult( KErrNone, _L("Test case passed") );
hgs
parents:
diff changeset
  1697
        }
hgs
parents:
diff changeset
  1698
    
hgs
parents:
diff changeset
  1699
    delete timer;
hgs
parents:
diff changeset
  1700
    delete eResult;
hgs
parents:
diff changeset
  1701
    delete res;
hgs
parents:
diff changeset
  1702
    return KErrNone;
hgs
parents:
diff changeset
  1703
    }
hgs
parents:
diff changeset
  1704
hgs
parents:
diff changeset
  1705
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1706
// Start timers with dumbass parameters
hgs
parents:
diff changeset
  1707
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1708
//
hgs
parents:
diff changeset
  1709
TInt CTestCFlexTimer::DumbAssParametersForCTimer64MaxL( TTestResult& aResult,
hgs
parents:
diff changeset
  1710
        CTestFlexTimer *cb )
hgs
parents:
diff changeset
  1711
    {
hgs
parents:
diff changeset
  1712
    TTestResult *res = new TTestResult();
hgs
parents:
diff changeset
  1713
    TExtendedTestResult *eResult = new TExtendedTestResult(res);
hgs
parents:
diff changeset
  1714
    eResult->iTimerID = 1;
hgs
parents:
diff changeset
  1715
hgs
parents:
diff changeset
  1716
    /*64 bit IF called with 0x7FFFFFFFFFFFFFFF parameter*/
hgs
parents:
diff changeset
  1717
    /***********************************/
hgs
parents:
diff changeset
  1718
    // This will cause panic 
hgs
parents:
diff changeset
  1719
    TTimeIntervalMicroSeconds expireTime64(0x7FFFFFFFFFFFFFFF);
hgs
parents:
diff changeset
  1720
    // Save current time
hgs
parents:
diff changeset
  1721
    TTime now(0);
hgs
parents:
diff changeset
  1722
    now.HomeTime();
hgs
parents:
diff changeset
  1723
    CInheritedCFlexTimer *timer = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
  1724
            CActive::EPriorityStandard, TCallBack(NotCalledCB, eResult));
hgs
parents:
diff changeset
  1725
    //Accept panic as passed case
hgs
parents:
diff changeset
  1726
    cb->TestModuleIf().SetExitReason(CTestModuleIf::EPanic,
hgs
parents:
diff changeset
  1727
            EFlexTimerServerIllegalTimerValue);
hgs
parents:
diff changeset
  1728
    timer->After(expireTime64);
hgs
parents:
diff changeset
  1729
    // Start timer that stops active scheduler just in case.
hgs
parents:
diff changeset
  1730
    CPeriodic *p = CPeriodic::NewL(EPriorityNormal);
hgs
parents:
diff changeset
  1731
    p->Start(3 * 1000 * 1000, 30 * 1000 * 1000, TCallBack(
hgs
parents:
diff changeset
  1732
            StopActiveScheduler));
hgs
parents:
diff changeset
  1733
    CActiveScheduler::Start();
hgs
parents:
diff changeset
  1734
    delete p;
hgs
parents:
diff changeset
  1735
    cb->TestModuleIf().SetExitReason(CTestModuleIf::ENormal, KErrNone);
hgs
parents:
diff changeset
  1736
    _LIT( KDescription , "64 bit After(0x7FFFFFFFFFFFFFFF) failed to panic.\n");
hgs
parents:
diff changeset
  1737
    aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
  1738
    delete timer;
hgs
parents:
diff changeset
  1739
    delete eResult;
hgs
parents:
diff changeset
  1740
    delete res;
hgs
parents:
diff changeset
  1741
    return KErrNone;
hgs
parents:
diff changeset
  1742
    }
hgs
parents:
diff changeset
  1743
hgs
parents:
diff changeset
  1744
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1745
// Start timers with dumbass parameters
hgs
parents:
diff changeset
  1746
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1747
//
hgs
parents:
diff changeset
  1748
TInt CTestCFlexTimer::DumbAssParametersForCTimer64ThreeYearsL( TTestResult& aResult,
hgs
parents:
diff changeset
  1749
        CTestFlexTimer *cb )
hgs
parents:
diff changeset
  1750
    {
hgs
parents:
diff changeset
  1751
    TTestResult *res = new TTestResult();
hgs
parents:
diff changeset
  1752
    TExtendedTestResult *eResult = new TExtendedTestResult(res);
hgs
parents:
diff changeset
  1753
    eResult->iTimerID = 1;
hgs
parents:
diff changeset
  1754
hgs
parents:
diff changeset
  1755
    /*64 bit IF called with 93312000000000 (about three years) parameter*/
hgs
parents:
diff changeset
  1756
    /***********************************/
hgs
parents:
diff changeset
  1757
    // This will cause panic since only two years ahead timers are supported 
hgs
parents:
diff changeset
  1758
    TTimeIntervalMicroSeconds expireTime64(93312000000000);
hgs
parents:
diff changeset
  1759
    // Save current time
hgs
parents:
diff changeset
  1760
    TTime now(0);
hgs
parents:
diff changeset
  1761
    now.HomeTime();
hgs
parents:
diff changeset
  1762
    CInheritedCFlexTimer *timer = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
  1763
            CActive::EPriorityStandard, TCallBack(NotCalledCB, eResult));
hgs
parents:
diff changeset
  1764
    //Accept panic as passed case
hgs
parents:
diff changeset
  1765
    cb->TestModuleIf().SetExitReason(CTestModuleIf::EPanic,
hgs
parents:
diff changeset
  1766
            EFlexTimerServerIllegalTimerValue);
hgs
parents:
diff changeset
  1767
    timer->After(expireTime64);
hgs
parents:
diff changeset
  1768
    // Start timer that stops active scheduler just in case.
hgs
parents:
diff changeset
  1769
    CPeriodic *p = CPeriodic::NewL(EPriorityNormal);
hgs
parents:
diff changeset
  1770
    p->Start(3 * 1000 * 1000, 30 * 1000 * 1000, TCallBack(
hgs
parents:
diff changeset
  1771
            StopActiveScheduler));
hgs
parents:
diff changeset
  1772
    CActiveScheduler::Start();
hgs
parents:
diff changeset
  1773
    delete p;
hgs
parents:
diff changeset
  1774
    cb->TestModuleIf().SetExitReason(CTestModuleIf::ENormal, KErrNone);
hgs
parents:
diff changeset
  1775
    _LIT( KDescription , "64 bit After(93312000000000) failed to panic.\n");
hgs
parents:
diff changeset
  1776
    aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
  1777
    delete timer;
hgs
parents:
diff changeset
  1778
    delete eResult;
hgs
parents:
diff changeset
  1779
    delete res;
hgs
parents:
diff changeset
  1780
    return KErrNone;
hgs
parents:
diff changeset
  1781
    }
hgs
parents:
diff changeset
  1782
hgs
parents:
diff changeset
  1783
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1784
// Start one year timer and cancel it.
hgs
parents:
diff changeset
  1785
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1786
//
hgs
parents:
diff changeset
  1787
TInt CTestCFlexTimer::DumbAssParametersForCTimer64OneYearL( TTestResult& aResult,
hgs
parents:
diff changeset
  1788
        CTestFlexTimer */*cb*/)
hgs
parents:
diff changeset
  1789
    {
hgs
parents:
diff changeset
  1790
    RDebug::Printf("DumbAssParametersForCTimer64OneYearL");
hgs
parents:
diff changeset
  1791
    TTestResult *res1 = new TTestResult();
hgs
parents:
diff changeset
  1792
    TExtendedTestResult *eResult1 = new TExtendedTestResult(res1);
hgs
parents:
diff changeset
  1793
    eResult1->iTimerID = 0;
hgs
parents:
diff changeset
  1794
    // Expire in 10 seconds
hgs
parents:
diff changeset
  1795
    TTimeIntervalMicroSeconds expireTime1( 33312000000000 ); // About on year
hgs
parents:
diff changeset
  1796
    //just something
hgs
parents:
diff changeset
  1797
    RArray<TTimerStruct> timers;
hgs
parents:
diff changeset
  1798
    CInheritedCFlexTimer2* timer1 = CInheritedCFlexTimer2::NewL(
hgs
parents:
diff changeset
  1799
            CActive::EPriorityStandard, TCallBack(NotCalledCB,
hgs
parents:
diff changeset
  1800
                    &timers), 0);
hgs
parents:
diff changeset
  1801
    TTimerStruct *s1 = new TTimerStruct();
hgs
parents:
diff changeset
  1802
    s1->iEResult = eResult1;
hgs
parents:
diff changeset
  1803
    s1->iTimer = timer1;
hgs
parents:
diff changeset
  1804
    timers.Append(*s1);
hgs
parents:
diff changeset
  1805
hgs
parents:
diff changeset
  1806
    timer1->After(expireTime1);
hgs
parents:
diff changeset
  1807
hgs
parents:
diff changeset
  1808
    timers[0].iCurrentlyActive = 0;
hgs
parents:
diff changeset
  1809
hgs
parents:
diff changeset
  1810
    //Timers to cancel timer and stop scheduler.
hgs
parents:
diff changeset
  1811
    CPeriodic *p = CPeriodic::NewL(EPriorityNormal);
hgs
parents:
diff changeset
  1812
    p->Start(7 * 1000 * 1000, 30 * 1000 * 1000, TCallBack(
hgs
parents:
diff changeset
  1813
            StopActiveScheduler));
hgs
parents:
diff changeset
  1814
    CPeriodic *pp = CPeriodic::NewL(EPriorityNormal);
hgs
parents:
diff changeset
  1815
    s1->iStartTimer = pp;
hgs
parents:
diff changeset
  1816
    pp->Start(5 * 1000 * 1000, 30 * 1000 * 1000, TCallBack(
hgs
parents:
diff changeset
  1817
            CancelCFlexTimerArray, &timers));
hgs
parents:
diff changeset
  1818
hgs
parents:
diff changeset
  1819
    // Start scheduler and wait for callback to stop it
hgs
parents:
diff changeset
  1820
    CActiveScheduler::Start();
hgs
parents:
diff changeset
  1821
    delete p; delete pp;
hgs
parents:
diff changeset
  1822
    delete s1;
hgs
parents:
diff changeset
  1823
    _LIT( KDescription , "Passed");
hgs
parents:
diff changeset
  1824
    aResult.SetResult(KErrNone, KDescription);
hgs
parents:
diff changeset
  1825
    //See if CB has failed the case
hgs
parents:
diff changeset
  1826
    if (eResult1->iCaseAlreadyFailed)
hgs
parents:
diff changeset
  1827
        {
hgs
parents:
diff changeset
  1828
        aResult.SetResult(eResult1->iTestResult->iResult,
hgs
parents:
diff changeset
  1829
                eResult1->iTestResult->iResultDes);
hgs
parents:
diff changeset
  1830
        }
hgs
parents:
diff changeset
  1831
    
hgs
parents:
diff changeset
  1832
    delete timer1;
hgs
parents:
diff changeset
  1833
    delete eResult1;
hgs
parents:
diff changeset
  1834
    delete res1;
hgs
parents:
diff changeset
  1835
    return KErrNone;
hgs
parents:
diff changeset
  1836
    }
hgs
parents:
diff changeset
  1837
hgs
parents:
diff changeset
  1838
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1839
// Start timers with negative value
hgs
parents:
diff changeset
  1840
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1841
//
hgs
parents:
diff changeset
  1842
TInt CTestCFlexTimer::AfterWithNegativeValueL( TTestResult& aResult,
hgs
parents:
diff changeset
  1843
        CTestFlexTimer *cb )
hgs
parents:
diff changeset
  1844
    {
hgs
parents:
diff changeset
  1845
    TTestResult *res = new TTestResult();
hgs
parents:
diff changeset
  1846
    TExtendedTestResult *eResult = new TExtendedTestResult(res);
hgs
parents:
diff changeset
  1847
    eResult->iTimerID = 1;
hgs
parents:
diff changeset
  1848
hgs
parents:
diff changeset
  1849
    // This will cause panic
hgs
parents:
diff changeset
  1850
    TTimeIntervalMicroSeconds32 expireTime(-1);
hgs
parents:
diff changeset
  1851
    CInheritedCFlexTimer *timer = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
  1852
            CActive::EPriorityStandard, TCallBack(NotCalledCB, eResult));
hgs
parents:
diff changeset
  1853
    //Accept panic as passed case
hgs
parents:
diff changeset
  1854
    cb->TestModuleIf().SetExitReason(CTestModuleIf::EPanic,
hgs
parents:
diff changeset
  1855
            EFlexTimerAfterIntervalLessThanZero);
hgs
parents:
diff changeset
  1856
    timer->After(expireTime);
hgs
parents:
diff changeset
  1857
    CActiveScheduler::Start();
hgs
parents:
diff changeset
  1858
    cb->TestModuleIf().SetExitReason(CTestModuleIf::ENormal, KErrNone);
hgs
parents:
diff changeset
  1859
    _LIT( KDescription , "32 bit After(-1) failed to panic.\n");
hgs
parents:
diff changeset
  1860
    aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
  1861
    delete timer;
hgs
parents:
diff changeset
  1862
    delete eResult;
hgs
parents:
diff changeset
  1863
    delete res;
hgs
parents:
diff changeset
  1864
    return KErrNone;
hgs
parents:
diff changeset
  1865
    }
hgs
parents:
diff changeset
  1866
hgs
parents:
diff changeset
  1867
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1868
// Start timers with negative value
hgs
parents:
diff changeset
  1869
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1870
//
hgs
parents:
diff changeset
  1871
TInt CTestCFlexTimer::AfterWithNegativeValue64L( TTestResult& aResult,
hgs
parents:
diff changeset
  1872
        CTestFlexTimer *cb )
hgs
parents:
diff changeset
  1873
    {
hgs
parents:
diff changeset
  1874
    TTestResult *res = new TTestResult();
hgs
parents:
diff changeset
  1875
    TExtendedTestResult *eResult = new TExtendedTestResult(res);
hgs
parents:
diff changeset
  1876
    eResult->iTimerID = 1;
hgs
parents:
diff changeset
  1877
hgs
parents:
diff changeset
  1878
    // This will cause panic
hgs
parents:
diff changeset
  1879
    TTimeIntervalMicroSeconds expireTime(-1);
hgs
parents:
diff changeset
  1880
    CInheritedCFlexTimer *timer = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
  1881
            CActive::EPriorityStandard, TCallBack(NotCalledCB, eResult));
hgs
parents:
diff changeset
  1882
    //Accept panic as passed case
hgs
parents:
diff changeset
  1883
    cb->TestModuleIf().SetExitReason(CTestModuleIf::EPanic,
hgs
parents:
diff changeset
  1884
            EFlexTimerAfterIntervalLessThanZero);
hgs
parents:
diff changeset
  1885
    timer->After(expireTime);
hgs
parents:
diff changeset
  1886
    CActiveScheduler::Start();
hgs
parents:
diff changeset
  1887
    cb->TestModuleIf().SetExitReason(CTestModuleIf::ENormal, KErrNone);
hgs
parents:
diff changeset
  1888
    _LIT( KDescription , "64 bit After(-1) failed to panic.\n");
hgs
parents:
diff changeset
  1889
    aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
  1890
    delete timer;
hgs
parents:
diff changeset
  1891
    delete eResult;
hgs
parents:
diff changeset
  1892
    delete res;
hgs
parents:
diff changeset
  1893
    return KErrNone;
hgs
parents:
diff changeset
  1894
    }
hgs
parents:
diff changeset
  1895
hgs
parents:
diff changeset
  1896
hgs
parents:
diff changeset
  1897
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1898
// Start timers with dumbass parameters
hgs
parents:
diff changeset
  1899
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1900
//
hgs
parents:
diff changeset
  1901
TInt CTestCFlexTimer::AtWithCurrentTimeL( TTestResult& aResult,
hgs
parents:
diff changeset
  1902
        CTestFlexTimer* /* cb */ )
hgs
parents:
diff changeset
  1903
    {
hgs
parents:
diff changeset
  1904
    TTestResult *res = new TTestResult();
hgs
parents:
diff changeset
  1905
    TExtendedTestResult *eResult = new TExtendedTestResult(res);
hgs
parents:
diff changeset
  1906
    eResult->iTimerID = 1;
hgs
parents:
diff changeset
  1907
hgs
parents:
diff changeset
  1908
    TTimeIntervalMicroSeconds expireTime64(0);
hgs
parents:
diff changeset
  1909
    CInheritedCFlexTimer *timer = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
  1910
        CActive::EPriorityStandard, 
hgs
parents:
diff changeset
  1911
        TCallBack(InheritedFlexTimerCallbackStopSchedulerKErrNone, eResult));
hgs
parents:
diff changeset
  1912
hgs
parents:
diff changeset
  1913
    // Save current time
hgs
parents:
diff changeset
  1914
    TTime now(0);
hgs
parents:
diff changeset
  1915
    now.HomeTime();
hgs
parents:
diff changeset
  1916
    timer->At(now + expireTime64);
hgs
parents:
diff changeset
  1917
    CActiveScheduler::Start(); // WAIT timer to expire
hgs
parents:
diff changeset
  1918
hgs
parents:
diff changeset
  1919
    // Analyze results
hgs
parents:
diff changeset
  1920
    TTime endTime;
hgs
parents:
diff changeset
  1921
    endTime.HomeTime();
hgs
parents:
diff changeset
  1922
    
hgs
parents:
diff changeset
  1923
    TTimeIntervalMicroSeconds delay = endTime.MicroSecondsFrom( now );
hgs
parents:
diff changeset
  1924
hgs
parents:
diff changeset
  1925
    if ( delay.Int64()+KTickResolution < expireTime64.Int64() || 
hgs
parents:
diff changeset
  1926
         delay.Int64() > expireTime64.Int64() + KTimerAccuracyMicroSeconds )
hgs
parents:
diff changeset
  1927
        {
hgs
parents:
diff changeset
  1928
        aResult.SetResult(KErrGeneral, _L("Wrong expiration"));
hgs
parents:
diff changeset
  1929
        }
hgs
parents:
diff changeset
  1930
    else
hgs
parents:
diff changeset
  1931
        {
hgs
parents:
diff changeset
  1932
        aResult.SetResult( KErrNone, _L("Test case passed") );
hgs
parents:
diff changeset
  1933
        }
hgs
parents:
diff changeset
  1934
hgs
parents:
diff changeset
  1935
    // Clean up
hgs
parents:
diff changeset
  1936
    delete timer;
hgs
parents:
diff changeset
  1937
    delete eResult;
hgs
parents:
diff changeset
  1938
    delete res;
hgs
parents:
diff changeset
  1939
    return KErrNone;
hgs
parents:
diff changeset
  1940
    }
hgs
parents:
diff changeset
  1941
hgs
parents:
diff changeset
  1942
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1943
// Start timers with dumbass parameters
hgs
parents:
diff changeset
  1944
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1945
//
hgs
parents:
diff changeset
  1946
TInt CTestCFlexTimer::AtUTCWithCurrentTimeL( TTestResult& aResult,
hgs
parents:
diff changeset
  1947
        CTestFlexTimer* /* cb */ )
hgs
parents:
diff changeset
  1948
    {
hgs
parents:
diff changeset
  1949
    TTestResult *res = new TTestResult();
hgs
parents:
diff changeset
  1950
    TExtendedTestResult *eResult = new TExtendedTestResult(res);
hgs
parents:
diff changeset
  1951
    eResult->iTimerID = 1;
hgs
parents:
diff changeset
  1952
hgs
parents:
diff changeset
  1953
    TTimeIntervalMicroSeconds expireTime64(0);
hgs
parents:
diff changeset
  1954
    CInheritedCFlexTimer *timer = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
  1955
        CActive::EPriorityStandard, 
hgs
parents:
diff changeset
  1956
        TCallBack(InheritedFlexTimerCallbackStopSchedulerKErrNone, eResult));
hgs
parents:
diff changeset
  1957
hgs
parents:
diff changeset
  1958
    // Save current time
hgs
parents:
diff changeset
  1959
    TTime now(0);
hgs
parents:
diff changeset
  1960
    now.UniversalTime();
hgs
parents:
diff changeset
  1961
    timer->AtUTC(now + expireTime64);
hgs
parents:
diff changeset
  1962
    CActiveScheduler::Start(); // WAIT timer to expire
hgs
parents:
diff changeset
  1963
hgs
parents:
diff changeset
  1964
    // Analyze results
hgs
parents:
diff changeset
  1965
    TTime endTime;
hgs
parents:
diff changeset
  1966
    endTime.UniversalTime();
hgs
parents:
diff changeset
  1967
    
hgs
parents:
diff changeset
  1968
    TTimeIntervalMicroSeconds delay = endTime.MicroSecondsFrom( now );
hgs
parents:
diff changeset
  1969
hgs
parents:
diff changeset
  1970
    if ( delay.Int64()+KTickResolution < expireTime64.Int64() || 
hgs
parents:
diff changeset
  1971
         delay.Int64() > expireTime64.Int64() + KTimerAccuracyMicroSeconds )
hgs
parents:
diff changeset
  1972
        {
hgs
parents:
diff changeset
  1973
        aResult.SetResult(KErrGeneral, _L("Wrong expiration"));
hgs
parents:
diff changeset
  1974
        }
hgs
parents:
diff changeset
  1975
    else
hgs
parents:
diff changeset
  1976
        {
hgs
parents:
diff changeset
  1977
        aResult.SetResult( KErrNone, _L("Test case passed") );
hgs
parents:
diff changeset
  1978
        }
hgs
parents:
diff changeset
  1979
hgs
parents:
diff changeset
  1980
    // Clean up
hgs
parents:
diff changeset
  1981
    delete timer;
hgs
parents:
diff changeset
  1982
    delete eResult;
hgs
parents:
diff changeset
  1983
    delete res;
hgs
parents:
diff changeset
  1984
    return KErrNone;
hgs
parents:
diff changeset
  1985
    }
hgs
parents:
diff changeset
  1986
hgs
parents:
diff changeset
  1987
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1988
// Start timers with dumbass parameters
hgs
parents:
diff changeset
  1989
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1990
//
hgs
parents:
diff changeset
  1991
TInt CTestCFlexTimer::AtWithThreeYearsL( TTestResult& aResult,
hgs
parents:
diff changeset
  1992
        CTestFlexTimer *cb )
hgs
parents:
diff changeset
  1993
    {
hgs
parents:
diff changeset
  1994
    TTestResult *res = new TTestResult();
hgs
parents:
diff changeset
  1995
    TExtendedTestResult *eResult = new TExtendedTestResult(res);
hgs
parents:
diff changeset
  1996
    eResult->iTimerID = 1;
hgs
parents:
diff changeset
  1997
hgs
parents:
diff changeset
  1998
    // This will cause panic 
hgs
parents:
diff changeset
  1999
    TTimeIntervalMicroSeconds expireTime64(93312000000000);
hgs
parents:
diff changeset
  2000
    CInheritedCFlexTimer *timer = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
  2001
            CActive::EPriorityStandard, TCallBack(NotCalledCB, eResult));
hgs
parents:
diff changeset
  2002
    //Accept panic as passed case
hgs
parents:
diff changeset
  2003
    cb->TestModuleIf().SetExitReason(CTestModuleIf::EPanic,
hgs
parents:
diff changeset
  2004
            EFlexTimerServerIllegalTimerValue);
hgs
parents:
diff changeset
  2005
    // Save current time
hgs
parents:
diff changeset
  2006
    TTime now(0);
hgs
parents:
diff changeset
  2007
    now.HomeTime();
hgs
parents:
diff changeset
  2008
    timer->At(now + expireTime64);
hgs
parents:
diff changeset
  2009
    // Start timer that stops active scheduler just in case.
hgs
parents:
diff changeset
  2010
    CPeriodic *p = CPeriodic::NewL(EPriorityNormal);
hgs
parents:
diff changeset
  2011
    p->Start(3 * 1000 * 1000, 30 * 1000 * 1000, TCallBack(
hgs
parents:
diff changeset
  2012
            StopActiveScheduler));
hgs
parents:
diff changeset
  2013
    CActiveScheduler::Start();
hgs
parents:
diff changeset
  2014
    delete p;
hgs
parents:
diff changeset
  2015
    cb->TestModuleIf().SetExitReason(CTestModuleIf::ENormal, KErrNone);
hgs
parents:
diff changeset
  2016
    _LIT( KDescription , "At(93312000000000) failed to panic.\n");
hgs
parents:
diff changeset
  2017
    aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
  2018
    delete timer;
hgs
parents:
diff changeset
  2019
    delete eResult;
hgs
parents:
diff changeset
  2020
    delete res;
hgs
parents:
diff changeset
  2021
    return KErrNone;
hgs
parents:
diff changeset
  2022
    }
hgs
parents:
diff changeset
  2023
hgs
parents:
diff changeset
  2024
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2025
// Start one year timer and cancel it.
hgs
parents:
diff changeset
  2026
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2027
//
hgs
parents:
diff changeset
  2028
TInt CTestCFlexTimer::AtWithOneYearL( TTestResult& aResult,
hgs
parents:
diff changeset
  2029
        CTestFlexTimer */*cb*/)
hgs
parents:
diff changeset
  2030
    {
hgs
parents:
diff changeset
  2031
    RDebug::Printf("AtWithOneYearL");
hgs
parents:
diff changeset
  2032
    TTestResult *res1 = new TTestResult();
hgs
parents:
diff changeset
  2033
    TExtendedTestResult *eResult1 = new TExtendedTestResult(res1);
hgs
parents:
diff changeset
  2034
    eResult1->iTimerID = 0;
hgs
parents:
diff changeset
  2035
    // Expire in 10 seconds
hgs
parents:
diff changeset
  2036
    TTimeIntervalMicroSeconds expireTime1( 33312000000000 ); // About on year
hgs
parents:
diff changeset
  2037
    //just something
hgs
parents:
diff changeset
  2038
    RArray<TTimerStruct> timers;
hgs
parents:
diff changeset
  2039
    CInheritedCFlexTimer2* timer1 = CInheritedCFlexTimer2::NewL(
hgs
parents:
diff changeset
  2040
            CActive::EPriorityStandard, TCallBack(NotCalledCB,
hgs
parents:
diff changeset
  2041
                    &timers), 0);
hgs
parents:
diff changeset
  2042
    TTimerStruct *s1 = new TTimerStruct();
hgs
parents:
diff changeset
  2043
    s1->iEResult = eResult1;
hgs
parents:
diff changeset
  2044
    s1->iTimer = timer1;
hgs
parents:
diff changeset
  2045
    timers.Append(*s1);
hgs
parents:
diff changeset
  2046
    TTime now(0);
hgs
parents:
diff changeset
  2047
    now.HomeTime();
hgs
parents:
diff changeset
  2048
    timer1->At(now + expireTime1);
hgs
parents:
diff changeset
  2049
hgs
parents:
diff changeset
  2050
    timers[0].iCurrentlyActive = 0;
hgs
parents:
diff changeset
  2051
hgs
parents:
diff changeset
  2052
    //Timers to cancel timer and stop scheduler.
hgs
parents:
diff changeset
  2053
    CPeriodic *p = CPeriodic::NewL(EPriorityNormal);
hgs
parents:
diff changeset
  2054
    p->Start(7 * 1000 * 1000, 30 * 1000 * 1000, TCallBack(
hgs
parents:
diff changeset
  2055
            StopActiveScheduler));
hgs
parents:
diff changeset
  2056
    CPeriodic *pp = CPeriodic::NewL(EPriorityNormal);
hgs
parents:
diff changeset
  2057
    s1->iStartTimer = pp;
hgs
parents:
diff changeset
  2058
    pp->Start(5 * 1000 * 1000, 30 * 1000 * 1000, TCallBack(
hgs
parents:
diff changeset
  2059
            CancelCFlexTimerArray, &timers));
hgs
parents:
diff changeset
  2060
hgs
parents:
diff changeset
  2061
    // Start scheduler and wait for callback to stop it
hgs
parents:
diff changeset
  2062
    CActiveScheduler::Start();
hgs
parents:
diff changeset
  2063
    delete p; delete pp;
hgs
parents:
diff changeset
  2064
    delete s1;
hgs
parents:
diff changeset
  2065
    _LIT( KDescription , "Passed");
hgs
parents:
diff changeset
  2066
    aResult.SetResult(KErrNone, KDescription);
hgs
parents:
diff changeset
  2067
    //See if CB has failed the case
hgs
parents:
diff changeset
  2068
    if (eResult1->iCaseAlreadyFailed)
hgs
parents:
diff changeset
  2069
        {
hgs
parents:
diff changeset
  2070
        aResult.SetResult(eResult1->iTestResult->iResult,
hgs
parents:
diff changeset
  2071
                eResult1->iTestResult->iResultDes);
hgs
parents:
diff changeset
  2072
        }
hgs
parents:
diff changeset
  2073
    delete timer1;
hgs
parents:
diff changeset
  2074
    delete eResult1;
hgs
parents:
diff changeset
  2075
    delete res1;
hgs
parents:
diff changeset
  2076
    return KErrNone;
hgs
parents:
diff changeset
  2077
    }
hgs
parents:
diff changeset
  2078
hgs
parents:
diff changeset
  2079
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2080
// Call At and AtUTC with time in the past
hgs
parents:
diff changeset
  2081
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2082
//
hgs
parents:
diff changeset
  2083
TInt CTestCFlexTimer::AtWithTimeInThePastL( TTestResult& aResult,
hgs
parents:
diff changeset
  2084
        CTestFlexTimer *cb )
hgs
parents:
diff changeset
  2085
    {
hgs
parents:
diff changeset
  2086
    RDebug::Printf("AtWithTimeInThePastL");
hgs
parents:
diff changeset
  2087
    TTestResult *res = new TTestResult();
hgs
parents:
diff changeset
  2088
    TExtendedTestResult *eResult = new TExtendedTestResult(res);
hgs
parents:
diff changeset
  2089
hgs
parents:
diff changeset
  2090
    // Expire in the past
hgs
parents:
diff changeset
  2091
    TTimeIntervalMicroSeconds expireTime(-1);
hgs
parents:
diff changeset
  2092
    CInheritedCFlexTimer* timer = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
  2093
            CActive::EPriorityStandard, TCallBack(NotCalledCB, eResult));
hgs
parents:
diff changeset
  2094
    // Save current time
hgs
parents:
diff changeset
  2095
    TTime homeNow(0);
hgs
parents:
diff changeset
  2096
    homeNow.HomeTime();
hgs
parents:
diff changeset
  2097
    TTime homeExpireTime(homeNow + expireTime);
hgs
parents:
diff changeset
  2098
    //Accept panic as passed case
hgs
parents:
diff changeset
  2099
    cb->TestModuleIf().SetExitReason(CTestModuleIf::EPanic,
hgs
parents:
diff changeset
  2100
            EFlexTimerAtIntervalLessThanZero);
hgs
parents:
diff changeset
  2101
    timer->At(homeExpireTime);
hgs
parents:
diff changeset
  2102
    CActiveScheduler::Start();
hgs
parents:
diff changeset
  2103
    cb->TestModuleIf().SetExitReason(CTestModuleIf::ENormal, KErrNone);
hgs
parents:
diff changeset
  2104
    _LIT( KDescription , "At in the past failed to panic.\n");
hgs
parents:
diff changeset
  2105
    aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
  2106
    delete timer;
hgs
parents:
diff changeset
  2107
    delete eResult;
hgs
parents:
diff changeset
  2108
    delete res;
hgs
parents:
diff changeset
  2109
    return KErrNone;
hgs
parents:
diff changeset
  2110
    }
hgs
parents:
diff changeset
  2111
hgs
parents:
diff changeset
  2112
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2113
// Start timer, expire, cancel, start again and expire
hgs
parents:
diff changeset
  2114
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2115
//
hgs
parents:
diff changeset
  2116
TInt CTestCFlexTimer::CancelExpiredTimerL( TTestResult& aResult,
hgs
parents:
diff changeset
  2117
        CTestFlexTimer */*cb*/)
hgs
parents:
diff changeset
  2118
    {
hgs
parents:
diff changeset
  2119
    TExtendedTestResult *eResult = new TExtendedTestResult(&aResult);
hgs
parents:
diff changeset
  2120
    CInheritedCFlexTimer
hgs
parents:
diff changeset
  2121
            * timer = CInheritedCFlexTimer::NewL(CActive::EPriorityStandard,
hgs
parents:
diff changeset
  2122
                    TCallBack(
hgs
parents:
diff changeset
  2123
                            InheritedFlexTimerCallbackStopSchedulerKErrNone,
hgs
parents:
diff changeset
  2124
                            eResult));
hgs
parents:
diff changeset
  2125
hgs
parents:
diff changeset
  2126
    // Expire in 5 seconds
hgs
parents:
diff changeset
  2127
    TTimeIntervalMicroSeconds32 expireTime(5 * 1000 * 1000);
hgs
parents:
diff changeset
  2128
hgs
parents:
diff changeset
  2129
    // Save current time.
hgs
parents:
diff changeset
  2130
    TTime utcNow(0);
hgs
parents:
diff changeset
  2131
    utcNow.UniversalTime();
hgs
parents:
diff changeset
  2132
hgs
parents:
diff changeset
  2133
    timer->After(expireTime);
hgs
parents:
diff changeset
  2134
hgs
parents:
diff changeset
  2135
    // Start scheduler and wait for callback to stop it
hgs
parents:
diff changeset
  2136
    CActiveScheduler::Start();
hgs
parents:
diff changeset
  2137
    // Ignore time and cb stuff
hgs
parents:
diff changeset
  2138
    // Cancel timer that just expired
hgs
parents:
diff changeset
  2139
    timer->Cancel();
hgs
parents:
diff changeset
  2140
hgs
parents:
diff changeset
  2141
    // Start timer again
hgs
parents:
diff changeset
  2142
    // Save current time.
hgs
parents:
diff changeset
  2143
    utcNow.UniversalTime();
hgs
parents:
diff changeset
  2144
hgs
parents:
diff changeset
  2145
    timer->After(expireTime);
hgs
parents:
diff changeset
  2146
hgs
parents:
diff changeset
  2147
    // Start scheduler and wait for callback to stop it
hgs
parents:
diff changeset
  2148
    CActiveScheduler::Start();
hgs
parents:
diff changeset
  2149
    //See if CB has failed the case
hgs
parents:
diff changeset
  2150
    if (eResult->iCaseAlreadyFailed)
hgs
parents:
diff changeset
  2151
        {
hgs
parents:
diff changeset
  2152
        delete timer;
hgs
parents:
diff changeset
  2153
        delete eResult;
hgs
parents:
diff changeset
  2154
        return KErrNone;
hgs
parents:
diff changeset
  2155
        }
hgs
parents:
diff changeset
  2156
    // Get new current time
hgs
parents:
diff changeset
  2157
    TTime utcNow2(0);
hgs
parents:
diff changeset
  2158
    utcNow2.UniversalTime();
hgs
parents:
diff changeset
  2159
hgs
parents:
diff changeset
  2160
    //Check if timer expiry happened within maxtime to maxtime+accuracy
hgs
parents:
diff changeset
  2161
    if ((utcNow + expireTime) <= utcNow2+TTimeIntervalMicroSeconds32(KTickResolution) && (utcNow + expireTime
hgs
parents:
diff changeset
  2162
            + TTimeIntervalMicroSeconds32(KTimerAccuracyMicroSeconds))
hgs
parents:
diff changeset
  2163
            > utcNow2)
hgs
parents:
diff changeset
  2164
        {
hgs
parents:
diff changeset
  2165
        _LIT( KDescription , "Passed");
hgs
parents:
diff changeset
  2166
        aResult.SetResult(KErrNone, KDescription);
hgs
parents:
diff changeset
  2167
        }
hgs
parents:
diff changeset
  2168
    else
hgs
parents:
diff changeset
  2169
        {
hgs
parents:
diff changeset
  2170
        _LIT( KDescription , "Timer was fired either too early or too late.\n");
hgs
parents:
diff changeset
  2171
        aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
  2172
        }
hgs
parents:
diff changeset
  2173
    // Case was executed
hgs
parents:
diff changeset
  2174
    delete timer;
hgs
parents:
diff changeset
  2175
    delete eResult;
hgs
parents:
diff changeset
  2176
    return KErrNone;
hgs
parents:
diff changeset
  2177
    }
hgs
parents:
diff changeset
  2178
hgs
parents:
diff changeset
  2179
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2180
// Start timer that has left side of the window in the past.
hgs
parents:
diff changeset
  2181
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2182
//
hgs
parents:
diff changeset
  2183
TInt CTestCFlexTimer::ConfigureLeftSideInThePastL( TTestResult& aResult,
hgs
parents:
diff changeset
  2184
        CTestFlexTimer */*cb*/)
hgs
parents:
diff changeset
  2185
    {
hgs
parents:
diff changeset
  2186
    TExtendedTestResult *eResult = new TExtendedTestResult(&aResult);
hgs
parents:
diff changeset
  2187
    CInheritedCFlexTimer
hgs
parents:
diff changeset
  2188
            * timer = CInheritedCFlexTimer::NewL(CActive::EPriorityStandard,
hgs
parents:
diff changeset
  2189
                    TCallBack(
hgs
parents:
diff changeset
  2190
                            InheritedFlexTimerCallbackStopSchedulerKErrNone,
hgs
parents:
diff changeset
  2191
                            eResult));
hgs
parents:
diff changeset
  2192
hgs
parents:
diff changeset
  2193
    // Expire in 5 seconds
hgs
parents:
diff changeset
  2194
    TTimeIntervalMicroSeconds32 winTime(10 * 1000 * 1000);
hgs
parents:
diff changeset
  2195
    TTimeIntervalMicroSeconds32 expireTime(5 * 1000 * 1000);
hgs
parents:
diff changeset
  2196
hgs
parents:
diff changeset
  2197
    // Save current time.
hgs
parents:
diff changeset
  2198
    TTime utcNow(0);
hgs
parents:
diff changeset
  2199
    utcNow.UniversalTime();
hgs
parents:
diff changeset
  2200
    timer->Configure(winTime);
hgs
parents:
diff changeset
  2201
    timer->After(expireTime);
hgs
parents:
diff changeset
  2202
hgs
parents:
diff changeset
  2203
    // Start scheduler and wait for callback to stop it
hgs
parents:
diff changeset
  2204
    CActiveScheduler::Start();
hgs
parents:
diff changeset
  2205
    //See if CB has failed the case
hgs
parents:
diff changeset
  2206
    if (eResult->iCaseAlreadyFailed)
hgs
parents:
diff changeset
  2207
        {
hgs
parents:
diff changeset
  2208
        delete timer;
hgs
parents:
diff changeset
  2209
        delete eResult;
hgs
parents:
diff changeset
  2210
        return KErrNone;
hgs
parents:
diff changeset
  2211
        }
hgs
parents:
diff changeset
  2212
    // Get new current time
hgs
parents:
diff changeset
  2213
    TTime utcNow2(0);
hgs
parents:
diff changeset
  2214
    utcNow2.UniversalTime();
hgs
parents:
diff changeset
  2215
hgs
parents:
diff changeset
  2216
    //Check if timer expiry happened within maxtime to maxtime+accuracy
hgs
parents:
diff changeset
  2217
    if ((utcNow + expireTime) <= utcNow2+TTimeIntervalMicroSeconds32(KTickResolution) && (utcNow + expireTime
hgs
parents:
diff changeset
  2218
            + TTimeIntervalMicroSeconds32(KTimerAccuracyMicroSeconds))
hgs
parents:
diff changeset
  2219
            > utcNow2)
hgs
parents:
diff changeset
  2220
        {
hgs
parents:
diff changeset
  2221
        _LIT( KDescription , "Passed");
hgs
parents:
diff changeset
  2222
        aResult.SetResult(KErrNone, KDescription);
hgs
parents:
diff changeset
  2223
        }
hgs
parents:
diff changeset
  2224
    else
hgs
parents:
diff changeset
  2225
        {
hgs
parents:
diff changeset
  2226
        _LIT( KDescription , "Timer was fired either too early or too late.\n");
hgs
parents:
diff changeset
  2227
        aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
  2228
        }
hgs
parents:
diff changeset
  2229
    // Case was executed
hgs
parents:
diff changeset
  2230
    delete timer;
hgs
parents:
diff changeset
  2231
    delete eResult;
hgs
parents:
diff changeset
  2232
    return KErrNone;
hgs
parents:
diff changeset
  2233
    }
hgs
parents:
diff changeset
  2234
hgs
parents:
diff changeset
  2235
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2236
// Start two timers and see that window works if another is started with left 
hgs
parents:
diff changeset
  2237
// side of the window in the past.
hgs
parents:
diff changeset
  2238
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2239
//
hgs
parents:
diff changeset
  2240
TInt CTestCFlexTimer::ConfigureLeftSideInThePastWindowCheckL(
hgs
parents:
diff changeset
  2241
        TTestResult& aResult, CTestFlexTimer */*cb*/)
hgs
parents:
diff changeset
  2242
    {
hgs
parents:
diff changeset
  2243
    TTestResult *res1 = new TTestResult();
hgs
parents:
diff changeset
  2244
    TTestResult *res2 = new TTestResult();
hgs
parents:
diff changeset
  2245
    TExtendedTestResult *eResult1 = new TExtendedTestResult(res1);
hgs
parents:
diff changeset
  2246
    TExtendedTestResult *eResult2 = new TExtendedTestResult(res2);
hgs
parents:
diff changeset
  2247
    eResult1->iTimerID = 1;
hgs
parents:
diff changeset
  2248
    eResult2->iTimerID = 2;
hgs
parents:
diff changeset
  2249
    CInheritedCFlexTimer* timer1 = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
  2250
            CActive::EPriorityStandard,
hgs
parents:
diff changeset
  2251
            TCallBack(InheritedFlexTimerCallbackKErrNoneMarkTimestamp,
hgs
parents:
diff changeset
  2252
                    eResult1));
hgs
parents:
diff changeset
  2253
    CInheritedCFlexTimer* timer2 = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
  2254
            CActive::EPriorityStandard,
hgs
parents:
diff changeset
  2255
            TCallBack(InheritedFlexTimerCallbackKErrNoneMarkTimestamp,
hgs
parents:
diff changeset
  2256
                    eResult2));
hgs
parents:
diff changeset
  2257
    // Expire in 10 seconds
hgs
parents:
diff changeset
  2258
    TTimeIntervalMicroSeconds32 expireTime1(10 * 1000 * 1000);
hgs
parents:
diff changeset
  2259
    //Expire within first timers default window
hgs
parents:
diff changeset
  2260
    TTimeIntervalMicroSeconds32 expireTime2(9 * 1000 * 1000);
hgs
parents:
diff changeset
  2261
hgs
parents:
diff changeset
  2262
    // Save current time
hgs
parents:
diff changeset
  2263
    TTime utcNow(0);
hgs
parents:
diff changeset
  2264
    utcNow.UniversalTime();
hgs
parents:
diff changeset
  2265
hgs
parents:
diff changeset
  2266
    timer1->Configure(TTimeIntervalMicroSeconds(15 * 1000 * 1000));
hgs
parents:
diff changeset
  2267
    timer1->After(expireTime1);
hgs
parents:
diff changeset
  2268
    timer2->After(expireTime2);
hgs
parents:
diff changeset
  2269
hgs
parents:
diff changeset
  2270
    //Timer to stop active scheduler after timers under test are completed.
hgs
parents:
diff changeset
  2271
    CPeriodic *p = CPeriodic::NewL(EPriorityNormal);
hgs
parents:
diff changeset
  2272
    p->Start(17 * 1000 * 1000, 1000, TCallBack(StopActiveScheduler));
hgs
parents:
diff changeset
  2273
    // Start scheduler and wait for callback to stop it
hgs
parents:
diff changeset
  2274
    CActiveScheduler::Start();
hgs
parents:
diff changeset
  2275
    delete p;
hgs
parents:
diff changeset
  2276
    //See if CB has failed the case
hgs
parents:
diff changeset
  2277
    if (eResult1->iCaseAlreadyFailed || eResult2->iCaseAlreadyFailed)
hgs
parents:
diff changeset
  2278
        {
hgs
parents:
diff changeset
  2279
        if (eResult1->iCaseAlreadyFailed)
hgs
parents:
diff changeset
  2280
            {
hgs
parents:
diff changeset
  2281
            aResult.SetResult(eResult1->iTestResult->iResult,
hgs
parents:
diff changeset
  2282
                    eResult1->iTestResult->iResultDes);
hgs
parents:
diff changeset
  2283
            }
hgs
parents:
diff changeset
  2284
        else
hgs
parents:
diff changeset
  2285
            {
hgs
parents:
diff changeset
  2286
            aResult.SetResult(eResult2->iTestResult->iResult,
hgs
parents:
diff changeset
  2287
                    eResult2->iTestResult->iResultDes);
hgs
parents:
diff changeset
  2288
            }
hgs
parents:
diff changeset
  2289
        delete timer1;
hgs
parents:
diff changeset
  2290
        delete timer2;
hgs
parents:
diff changeset
  2291
        delete eResult1;
hgs
parents:
diff changeset
  2292
        delete eResult2;
hgs
parents:
diff changeset
  2293
        delete res1;
hgs
parents:
diff changeset
  2294
        delete res2;
hgs
parents:
diff changeset
  2295
        return KErrNone;
hgs
parents:
diff changeset
  2296
        }
hgs
parents:
diff changeset
  2297
    // Get new current time
hgs
parents:
diff changeset
  2298
    TTime utcNow2(0);
hgs
parents:
diff changeset
  2299
    utcNow2.UniversalTime();
hgs
parents:
diff changeset
  2300
hgs
parents:
diff changeset
  2301
    //Check if timers expiry happened within timer2 maxtime to maxtime+accuracy
hgs
parents:
diff changeset
  2302
    if ((utcNow + expireTime2) <= TTime(eResult2->iTimerStoppedTime+KTickResolution)
hgs
parents:
diff changeset
  2303
            && (utcNow + expireTime2 + TTimeIntervalMicroSeconds32(
hgs
parents:
diff changeset
  2304
                    KTimerAccuracyMicroSeconds)) > TTime(
hgs
parents:
diff changeset
  2305
                    eResult2->iTimerStoppedTime) &&
hgs
parents:
diff changeset
  2306
hgs
parents:
diff changeset
  2307
    (utcNow + expireTime2) <= TTime(eResult1->iTimerStoppedTime+KTickResolution) && (utcNow
hgs
parents:
diff changeset
  2308
            + expireTime2 + TTimeIntervalMicroSeconds32(
hgs
parents:
diff changeset
  2309
            KTimerAccuracyMicroSeconds)) > TTime(eResult1->iTimerStoppedTime))
hgs
parents:
diff changeset
  2310
        {
hgs
parents:
diff changeset
  2311
        _LIT( KDescription , "Passed");
hgs
parents:
diff changeset
  2312
        aResult.SetResult(KErrNone, KDescription);
hgs
parents:
diff changeset
  2313
        }
hgs
parents:
diff changeset
  2314
    else
hgs
parents:
diff changeset
  2315
        {
hgs
parents:
diff changeset
  2316
        _LIT( KDescription , "Some timer was fired either too early or too late.\n");
hgs
parents:
diff changeset
  2317
        aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
  2318
        }
hgs
parents:
diff changeset
  2319
    // Case was executed
hgs
parents:
diff changeset
  2320
    delete timer1;
hgs
parents:
diff changeset
  2321
    delete timer2;
hgs
parents:
diff changeset
  2322
    delete eResult1;
hgs
parents:
diff changeset
  2323
    delete eResult2;
hgs
parents:
diff changeset
  2324
    delete res1;
hgs
parents:
diff changeset
  2325
    delete res2;
hgs
parents:
diff changeset
  2326
    return KErrNone;
hgs
parents:
diff changeset
  2327
hgs
parents:
diff changeset
  2328
    }
hgs
parents:
diff changeset
  2329
hgs
parents:
diff changeset
  2330
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2331
// Call Configure 32 bit with Negative window size
hgs
parents:
diff changeset
  2332
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2333
//
hgs
parents:
diff changeset
  2334
TInt CTestCFlexTimer::ConfigureWithNegativeWindowSize32L(
hgs
parents:
diff changeset
  2335
        TTestResult& aResult, CTestFlexTimer *cb )
hgs
parents:
diff changeset
  2336
    {
hgs
parents:
diff changeset
  2337
    RDebug::Printf("ConfigureWithNegativeWindowSize32L");
hgs
parents:
diff changeset
  2338
    TTestResult *res = new TTestResult();
hgs
parents:
diff changeset
  2339
    TExtendedTestResult *eResult = new TExtendedTestResult(res);
hgs
parents:
diff changeset
  2340
hgs
parents:
diff changeset
  2341
    // negative time
hgs
parents:
diff changeset
  2342
    TTimeIntervalMicroSeconds32 confTime(-1);
hgs
parents:
diff changeset
  2343
    CInheritedCFlexTimer* timer = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
  2344
            CActive::EPriorityStandard, TCallBack(NotCalledCB, eResult));
hgs
parents:
diff changeset
  2345
    //Accept panic as passed case
hgs
parents:
diff changeset
  2346
    cb->TestModuleIf().SetExitReason(CTestModuleIf::EPanic,
hgs
parents:
diff changeset
  2347
            EFlexTimerWindowLessThanZero);
hgs
parents:
diff changeset
  2348
    timer->Configure(confTime);
hgs
parents:
diff changeset
  2349
    //CActiveScheduler::Start();
hgs
parents:
diff changeset
  2350
    cb->TestModuleIf().SetExitReason(CTestModuleIf::ENormal, KErrNone);
hgs
parents:
diff changeset
  2351
    _LIT( KDescription , "Configure(32) with negative interval failed to panic\n");
hgs
parents:
diff changeset
  2352
    aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
  2353
    delete timer;
hgs
parents:
diff changeset
  2354
    delete eResult;
hgs
parents:
diff changeset
  2355
    delete res;
hgs
parents:
diff changeset
  2356
    return KErrNone;
hgs
parents:
diff changeset
  2357
    }
hgs
parents:
diff changeset
  2358
hgs
parents:
diff changeset
  2359
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2360
// Call Configure 64 bit with Negative window size
hgs
parents:
diff changeset
  2361
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2362
//
hgs
parents:
diff changeset
  2363
TInt CTestCFlexTimer::ConfigureWithNegativeWindowSize64L(
hgs
parents:
diff changeset
  2364
        TTestResult& aResult, CTestFlexTimer *cb )
hgs
parents:
diff changeset
  2365
    {
hgs
parents:
diff changeset
  2366
    RDebug::Printf("ConfigureWithNegativeWindowSize64L");
hgs
parents:
diff changeset
  2367
    TTestResult *res = new TTestResult();
hgs
parents:
diff changeset
  2368
    TExtendedTestResult *eResult = new TExtendedTestResult(res);
hgs
parents:
diff changeset
  2369
hgs
parents:
diff changeset
  2370
    // negative time
hgs
parents:
diff changeset
  2371
    TTimeIntervalMicroSeconds confTime(-1);
hgs
parents:
diff changeset
  2372
    CInheritedCFlexTimer* timer = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
  2373
            CActive::EPriorityStandard, TCallBack(NotCalledCB, eResult));
hgs
parents:
diff changeset
  2374
    //Accept panic as passed case
hgs
parents:
diff changeset
  2375
    cb->TestModuleIf().SetExitReason(CTestModuleIf::EPanic,
hgs
parents:
diff changeset
  2376
            EFlexTimerWindowLessThanZero);
hgs
parents:
diff changeset
  2377
    timer->Configure(confTime);
hgs
parents:
diff changeset
  2378
    //CActiveScheduler::Start();
hgs
parents:
diff changeset
  2379
    cb->TestModuleIf().SetExitReason(CTestModuleIf::ENormal, KErrNone);
hgs
parents:
diff changeset
  2380
    _LIT( KDescription , "Configure(64) with negative interval failed to panic\n");
hgs
parents:
diff changeset
  2381
    aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
  2382
    delete timer;
hgs
parents:
diff changeset
  2383
    delete eResult;
hgs
parents:
diff changeset
  2384
    delete res;
hgs
parents:
diff changeset
  2385
    return KErrNone;
hgs
parents:
diff changeset
  2386
    }
hgs
parents:
diff changeset
  2387
hgs
parents:
diff changeset
  2388
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2389
// -
hgs
parents:
diff changeset
  2390
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2391
//
hgs
parents:
diff changeset
  2392
TInt CTestCFlexTimer::ConfigureWithMaxWindow32L(
hgs
parents:
diff changeset
  2393
        TTestResult& aResult, CTestFlexTimer* /* cb */ )
hgs
parents:
diff changeset
  2394
    {
hgs
parents:
diff changeset
  2395
    RDebug::Printf("ConfigureWithMaxWindow32L");
hgs
parents:
diff changeset
  2396
    TTestResult *res1 = new TTestResult();
hgs
parents:
diff changeset
  2397
    TExtendedTestResult *eResult1 = new TExtendedTestResult(res1);
hgs
parents:
diff changeset
  2398
    eResult1->iTimerID = 0;
hgs
parents:
diff changeset
  2399
    TTimeIntervalMicroSeconds32 expireTime1( 0x7FFFFFFF );
hgs
parents:
diff changeset
  2400
    //just something
hgs
parents:
diff changeset
  2401
    RArray<TTimerStruct> timers;
hgs
parents:
diff changeset
  2402
    CInheritedCFlexTimer2* timer1 = CInheritedCFlexTimer2::NewL(
hgs
parents:
diff changeset
  2403
            CActive::EPriorityStandard, TCallBack(NotCalledCB,
hgs
parents:
diff changeset
  2404
                    &timers), 0);
hgs
parents:
diff changeset
  2405
    TTimerStruct *s1 = new TTimerStruct();
hgs
parents:
diff changeset
  2406
    s1->iEResult = eResult1;
hgs
parents:
diff changeset
  2407
    s1->iTimer = timer1;
hgs
parents:
diff changeset
  2408
    timers.Append(*s1);
hgs
parents:
diff changeset
  2409
    timer1->Configure(expireTime1);
hgs
parents:
diff changeset
  2410
    timer1->After(expireTime1);
hgs
parents:
diff changeset
  2411
hgs
parents:
diff changeset
  2412
    timers[0].iCurrentlyActive = 0;
hgs
parents:
diff changeset
  2413
hgs
parents:
diff changeset
  2414
    //Timers to cancel timer and stop scheduler.
hgs
parents:
diff changeset
  2415
    CPeriodic *p = CPeriodic::NewL(EPriorityNormal);
hgs
parents:
diff changeset
  2416
    p->Start(7 * 1000 * 1000, 30 * 1000 * 1000, TCallBack(
hgs
parents:
diff changeset
  2417
            StopActiveScheduler));
hgs
parents:
diff changeset
  2418
    CPeriodic *pp = CPeriodic::NewL(EPriorityNormal);
hgs
parents:
diff changeset
  2419
    s1->iStartTimer = pp;
hgs
parents:
diff changeset
  2420
    pp->Start(5 * 1000 * 1000, 30 * 1000 * 1000, TCallBack(
hgs
parents:
diff changeset
  2421
            CancelCFlexTimerArray, &timers));
hgs
parents:
diff changeset
  2422
hgs
parents:
diff changeset
  2423
    // Start scheduler and wait for callback to stop it
hgs
parents:
diff changeset
  2424
    CActiveScheduler::Start();
hgs
parents:
diff changeset
  2425
    delete p; delete pp;
hgs
parents:
diff changeset
  2426
    delete s1;
hgs
parents:
diff changeset
  2427
    _LIT( KDescription , "Passed");
hgs
parents:
diff changeset
  2428
    aResult.SetResult(KErrNone, KDescription);
hgs
parents:
diff changeset
  2429
    //See if CB has failed the case
hgs
parents:
diff changeset
  2430
    if (eResult1->iCaseAlreadyFailed)
hgs
parents:
diff changeset
  2431
        {
hgs
parents:
diff changeset
  2432
        aResult.SetResult(eResult1->iTestResult->iResult,
hgs
parents:
diff changeset
  2433
                eResult1->iTestResult->iResultDes);
hgs
parents:
diff changeset
  2434
        }
hgs
parents:
diff changeset
  2435
    delete timer1;
hgs
parents:
diff changeset
  2436
    delete eResult1;
hgs
parents:
diff changeset
  2437
    delete res1;
hgs
parents:
diff changeset
  2438
    return KErrNone;
hgs
parents:
diff changeset
  2439
    }
hgs
parents:
diff changeset
  2440
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2441
// -
hgs
parents:
diff changeset
  2442
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2443
//
hgs
parents:
diff changeset
  2444
TInt CTestCFlexTimer::ConfigureWithThreeYearWindow64L(
hgs
parents:
diff changeset
  2445
        TTestResult& aResult, CTestFlexTimer *cb )
hgs
parents:
diff changeset
  2446
    {
hgs
parents:
diff changeset
  2447
    RDebug::Printf("ConfigureWithThreeYearWindow64L");
hgs
parents:
diff changeset
  2448
    TTestResult *res = new TTestResult();
hgs
parents:
diff changeset
  2449
    TExtendedTestResult *eResult = new TExtendedTestResult(res);
hgs
parents:
diff changeset
  2450
hgs
parents:
diff changeset
  2451
    // negative time
hgs
parents:
diff changeset
  2452
    TTimeIntervalMicroSeconds confTime(93312000000000);
hgs
parents:
diff changeset
  2453
    CInheritedCFlexTimer* timer = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
  2454
            CActive::EPriorityStandard, TCallBack(NotCalledCB, eResult));
hgs
parents:
diff changeset
  2455
    //Accept panic as passed case
hgs
parents:
diff changeset
  2456
    cb->TestModuleIf().SetExitReason(CTestModuleIf::EPanic,
hgs
parents:
diff changeset
  2457
            EFlexTimerServerIllegalTimerValue);
hgs
parents:
diff changeset
  2458
    timer->Configure(confTime);
hgs
parents:
diff changeset
  2459
    //CActiveScheduler::Start();
hgs
parents:
diff changeset
  2460
    cb->TestModuleIf().SetExitReason(CTestModuleIf::ENormal, KErrNone);
hgs
parents:
diff changeset
  2461
    _LIT( KDescription , "Configure(93312000000000 failed to panic\n");
hgs
parents:
diff changeset
  2462
    aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
  2463
    delete timer;
hgs
parents:
diff changeset
  2464
    delete eResult;
hgs
parents:
diff changeset
  2465
    delete res;
hgs
parents:
diff changeset
  2466
    return KErrNone;
hgs
parents:
diff changeset
  2467
    }
hgs
parents:
diff changeset
  2468
hgs
parents:
diff changeset
  2469
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2470
// -
hgs
parents:
diff changeset
  2471
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2472
//
hgs
parents:
diff changeset
  2473
TInt CTestCFlexTimer::ConfigureWithMaxWindow64L(
hgs
parents:
diff changeset
  2474
        TTestResult& aResult, CTestFlexTimer *cb )
hgs
parents:
diff changeset
  2475
    {
hgs
parents:
diff changeset
  2476
    RDebug::Printf("ConfigureWithMaxWindow64L");
hgs
parents:
diff changeset
  2477
    TTestResult *res = new TTestResult();
hgs
parents:
diff changeset
  2478
    TExtendedTestResult *eResult = new TExtendedTestResult(res);
hgs
parents:
diff changeset
  2479
hgs
parents:
diff changeset
  2480
    // negative time
hgs
parents:
diff changeset
  2481
    TTimeIntervalMicroSeconds confTime(0x7FFFFFFFFFFFFFFF);
hgs
parents:
diff changeset
  2482
    CInheritedCFlexTimer* timer = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
  2483
            CActive::EPriorityStandard, TCallBack(NotCalledCB, eResult));
hgs
parents:
diff changeset
  2484
    //Accept panic as passed case
hgs
parents:
diff changeset
  2485
    cb->TestModuleIf().SetExitReason(CTestModuleIf::EPanic,
hgs
parents:
diff changeset
  2486
            EFlexTimerServerIllegalTimerValue);
hgs
parents:
diff changeset
  2487
    timer->Configure(confTime);
hgs
parents:
diff changeset
  2488
    //CActiveScheduler::Start();
hgs
parents:
diff changeset
  2489
    cb->TestModuleIf().SetExitReason(CTestModuleIf::ENormal, KErrNone);
hgs
parents:
diff changeset
  2490
    _LIT( KDescription , "Configure(0x7FFFFFFFFFFFFFFF) failed to panic\n");
hgs
parents:
diff changeset
  2491
    aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
  2492
    delete timer;
hgs
parents:
diff changeset
  2493
    delete eResult;
hgs
parents:
diff changeset
  2494
    delete res;
hgs
parents:
diff changeset
  2495
    return KErrNone;
hgs
parents:
diff changeset
  2496
    }
hgs
parents:
diff changeset
  2497
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2498
// Start timer and call configure while it is running
hgs
parents:
diff changeset
  2499
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2500
//
hgs
parents:
diff changeset
  2501
TInt CTestCFlexTimer::ConfigureWhileTimerIsInUseL( TTestResult& aResult,
hgs
parents:
diff changeset
  2502
        CTestFlexTimer */*cb*/)
hgs
parents:
diff changeset
  2503
    {
hgs
parents:
diff changeset
  2504
    RDebug::Printf("ConfigureWhileTimerIsInUseL");
hgs
parents:
diff changeset
  2505
    TTestResult *res1 = new TTestResult();
hgs
parents:
diff changeset
  2506
    TExtendedTestResult *eResult1 = new TExtendedTestResult(res1);
hgs
parents:
diff changeset
  2507
    eResult1->iTimerID = 0;
hgs
parents:
diff changeset
  2508
    // Expire in 10 seconds
hgs
parents:
diff changeset
  2509
    TTimeIntervalMicroSeconds expireTime1(10 * 1000 * 1000);
hgs
parents:
diff changeset
  2510
    //just something
hgs
parents:
diff changeset
  2511
    RArray<TTimerStruct> timers;
hgs
parents:
diff changeset
  2512
    CInheritedCFlexTimer2* timer1 = CInheritedCFlexTimer2::NewL(
hgs
parents:
diff changeset
  2513
            CActive::EPriorityStandard, TCallBack(StopSchedulerKErrNoneArray,
hgs
parents:
diff changeset
  2514
                    &timers), 0);
hgs
parents:
diff changeset
  2515
    TTimerStruct *s1 = new TTimerStruct();
hgs
parents:
diff changeset
  2516
    s1->iEResult = eResult1;
hgs
parents:
diff changeset
  2517
    s1->iTimer = timer1;
hgs
parents:
diff changeset
  2518
    timers.Append(*s1);
hgs
parents:
diff changeset
  2519
hgs
parents:
diff changeset
  2520
    TTime homeNow(0);
hgs
parents:
diff changeset
  2521
    homeNow.HomeTime();
hgs
parents:
diff changeset
  2522
hgs
parents:
diff changeset
  2523
    timer1->After(expireTime1);
hgs
parents:
diff changeset
  2524
hgs
parents:
diff changeset
  2525
    timers[0].iCurrentlyActive = 0;
hgs
parents:
diff changeset
  2526
hgs
parents:
diff changeset
  2527
    //Timer to call configure while timer is running
hgs
parents:
diff changeset
  2528
    CPeriodic *p = CPeriodic::NewL(EPriorityNormal);
hgs
parents:
diff changeset
  2529
    p->Start(5 * 1000 * 1000, 30 * 1000 * 1000, TCallBack(
hgs
parents:
diff changeset
  2530
            ConfigureKErrInUseArray, &timers));
hgs
parents:
diff changeset
  2531
hgs
parents:
diff changeset
  2532
    // Start scheduler and wait for callback to stop it
hgs
parents:
diff changeset
  2533
    CActiveScheduler::Start();
hgs
parents:
diff changeset
  2534
    delete p;
hgs
parents:
diff changeset
  2535
    delete s1;
hgs
parents:
diff changeset
  2536
    _LIT( KDescription , "Passed");
hgs
parents:
diff changeset
  2537
    aResult.SetResult(KErrNone, KDescription);
hgs
parents:
diff changeset
  2538
    //See if CB has failed the case
hgs
parents:
diff changeset
  2539
    if (eResult1->iCaseAlreadyFailed)
hgs
parents:
diff changeset
  2540
        {
hgs
parents:
diff changeset
  2541
        aResult.SetResult(eResult1->iTestResult->iResult,
hgs
parents:
diff changeset
  2542
                eResult1->iTestResult->iResultDes);
hgs
parents:
diff changeset
  2543
        delete timer1;
hgs
parents:
diff changeset
  2544
        delete eResult1;
hgs
parents:
diff changeset
  2545
        delete res1;
hgs
parents:
diff changeset
  2546
        return KErrNone;
hgs
parents:
diff changeset
  2547
        }
hgs
parents:
diff changeset
  2548
    TTime homeNow2(0);
hgs
parents:
diff changeset
  2549
    homeNow2.HomeTime();
hgs
parents:
diff changeset
  2550
    //Check if timers expiry happened within timer2 maxtime to maxtime+accuracy
hgs
parents:
diff changeset
  2551
    if (!((homeNow + expireTime1) <= homeNow2+TTimeIntervalMicroSeconds32(KTickResolution) && (homeNow + expireTime1
hgs
parents:
diff changeset
  2552
            + TTimeIntervalMicroSeconds32(KTimerAccuracyMicroSeconds))
hgs
parents:
diff changeset
  2553
            > homeNow2))
hgs
parents:
diff changeset
  2554
        {
hgs
parents:
diff changeset
  2555
        _LIT( KEDescription , "Timer was not fired within limits");
hgs
parents:
diff changeset
  2556
        aResult.SetResult(KErrGeneral, KEDescription);
hgs
parents:
diff changeset
  2557
        }
hgs
parents:
diff changeset
  2558
    delete timer1;
hgs
parents:
diff changeset
  2559
    delete eResult1;
hgs
parents:
diff changeset
  2560
    delete res1;
hgs
parents:
diff changeset
  2561
    return KErrNone;
hgs
parents:
diff changeset
  2562
    }
hgs
parents:
diff changeset
  2563
hgs
parents:
diff changeset
  2564
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2565
// timer is started twice
hgs
parents:
diff changeset
  2566
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2567
//
hgs
parents:
diff changeset
  2568
TInt CTestCFlexTimer::TimerIsStartedTwiceL( TTestResult& aResult,
hgs
parents:
diff changeset
  2569
        CTestFlexTimer *cb )
hgs
parents:
diff changeset
  2570
    {
hgs
parents:
diff changeset
  2571
    TTestResult *res1 = new TTestResult();
hgs
parents:
diff changeset
  2572
    TExtendedTestResult *eResult1 = new TExtendedTestResult(res1);
hgs
parents:
diff changeset
  2573
    eResult1->iTimerID = 0;
hgs
parents:
diff changeset
  2574
    CInheritedCFlexTimer2* timer1 = CInheritedCFlexTimer2::NewL(
hgs
parents:
diff changeset
  2575
            CActive::EPriorityStandard, TCallBack(NotCalledCB, eResult1), 0);
hgs
parents:
diff changeset
  2576
    // Expire in 10 seconds
hgs
parents:
diff changeset
  2577
    TTimeIntervalMicroSeconds expireTime1(10 * 1000 * 1000);
hgs
parents:
diff changeset
  2578
    RArray<TTimerStruct> timers;
hgs
parents:
diff changeset
  2579
    TTimerStruct *s1 = new TTimerStruct();
hgs
parents:
diff changeset
  2580
    s1->iEResult = eResult1;
hgs
parents:
diff changeset
  2581
    s1->iTimer = timer1;
hgs
parents:
diff changeset
  2582
    timers.Append(*s1);
hgs
parents:
diff changeset
  2583
hgs
parents:
diff changeset
  2584
    timer1->After(expireTime1);
hgs
parents:
diff changeset
  2585
    timers[0].iCurrentlyActive = 0; //CB uses this to decide which timer to start again;
hgs
parents:
diff changeset
  2586
hgs
parents:
diff changeset
  2587
    //Timer to start timer again
hgs
parents:
diff changeset
  2588
    CPeriodic *p = CPeriodic::NewL(EPriorityNormal);
hgs
parents:
diff changeset
  2589
    p->Start(5 * 1000 * 1000, 30 * 1000 * 1000, TCallBack(
hgs
parents:
diff changeset
  2590
            StartTimerAgainArray, &timers));
hgs
parents:
diff changeset
  2591
    // Panic category: "E32USER-CBase"
hgs
parents:
diff changeset
  2592
    // Panic reason:   42 (attempt to active CActive when a request is still 
hgs
parents:
diff changeset
  2593
    // outstanding.
hgs
parents:
diff changeset
  2594
    cb->TestModuleIf().SetExitReason(CTestModuleIf::EPanic, 42);
hgs
parents:
diff changeset
  2595
    // Start scheduler and wait for callback to panic it
hgs
parents:
diff changeset
  2596
    CActiveScheduler::Start();
hgs
parents:
diff changeset
  2597
    // We should never get here -> fail the case
hgs
parents:
diff changeset
  2598
    cb->TestModuleIf().SetExitReason(CTestModuleIf::ENormal, KErrNone);
hgs
parents:
diff changeset
  2599
    delete p;
hgs
parents:
diff changeset
  2600
    delete s1;
hgs
parents:
diff changeset
  2601
    _LIT( KDescription , "double start failed to panic.");
hgs
parents:
diff changeset
  2602
    aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
  2603
hgs
parents:
diff changeset
  2604
    delete timer1;
hgs
parents:
diff changeset
  2605
    delete eResult1;
hgs
parents:
diff changeset
  2606
    delete res1;
hgs
parents:
diff changeset
  2607
    return KErrNone;
hgs
parents:
diff changeset
  2608
    }
hgs
parents:
diff changeset
  2609
hgs
parents:
diff changeset
  2610
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2611
// See that timer is stoppped with valid reason and stop scheduler
hgs
parents:
diff changeset
  2612
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2613
//
hgs
parents:
diff changeset
  2614
TInt CTestCFlexTimer::InheritedFlexTimerCallbackStopSchedulerKErrNone(
hgs
parents:
diff changeset
  2615
        TAny* aArgument )
hgs
parents:
diff changeset
  2616
    {
hgs
parents:
diff changeset
  2617
    RDebug::Printf("InheritedFlexTimerCallbackStopSchedulerKErrNone");
hgs
parents:
diff changeset
  2618
    TExtendedTestResult *eRes =
hgs
parents:
diff changeset
  2619
            reinterpret_cast<TExtendedTestResult*> (aArgument);
hgs
parents:
diff changeset
  2620
    if (eRes->iStatusCode != KErrNone)
hgs
parents:
diff changeset
  2621
        {
hgs
parents:
diff changeset
  2622
        eRes->iCaseAlreadyFailed = ETrue;
hgs
parents:
diff changeset
  2623
        _LIT(KError,"Error: Wrong timer expiry reason\n");
hgs
parents:
diff changeset
  2624
        eRes->iTestResult->SetResult(KErrGeneral, KError);
hgs
parents:
diff changeset
  2625
        }
hgs
parents:
diff changeset
  2626
    CActiveScheduler::Stop();
hgs
parents:
diff changeset
  2627
    return 1; // nada
hgs
parents:
diff changeset
  2628
    }
hgs
parents:
diff changeset
  2629
hgs
parents:
diff changeset
  2630
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2631
// See that timer is stoppped with valid reason and stop scheduler
hgs
parents:
diff changeset
  2632
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2633
//
hgs
parents:
diff changeset
  2634
TInt CTestCFlexTimer::InheritedFlexTimerCallbackStopSchedulerKErrAbort(
hgs
parents:
diff changeset
  2635
        TAny* aArgument )
hgs
parents:
diff changeset
  2636
    {
hgs
parents:
diff changeset
  2637
    RDebug::Printf("InheritedFlexTimerCallbackStopSchedulerKErrAbort");
hgs
parents:
diff changeset
  2638
    TExtendedTestResult *eRes =
hgs
parents:
diff changeset
  2639
            reinterpret_cast<TExtendedTestResult*> (aArgument);
hgs
parents:
diff changeset
  2640
    if (eRes->iStatusCode != KErrAbort)
hgs
parents:
diff changeset
  2641
        {
hgs
parents:
diff changeset
  2642
        eRes->iCaseAlreadyFailed = ETrue;
hgs
parents:
diff changeset
  2643
        _LIT(KError,"Error: Wrong timer expiry reason");
hgs
parents:
diff changeset
  2644
        eRes->iTestResult->SetResult(KErrGeneral, KError);
hgs
parents:
diff changeset
  2645
        }
hgs
parents:
diff changeset
  2646
    CActiveScheduler::Stop();
hgs
parents:
diff changeset
  2647
    return 1; // nada
hgs
parents:
diff changeset
  2648
    }
hgs
parents:
diff changeset
  2649
hgs
parents:
diff changeset
  2650
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2651
// See that timer is stoppped with valid reason and stop scheduler
hgs
parents:
diff changeset
  2652
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2653
//
hgs
parents:
diff changeset
  2654
TInt CTestCFlexTimer::InheritedFlexTimerCallbackStopSchedulerKErrCancel(
hgs
parents:
diff changeset
  2655
        TAny* aArgument )
hgs
parents:
diff changeset
  2656
    {
hgs
parents:
diff changeset
  2657
    RDebug::Printf("InheritedFlexTimerCallbackStopSchedulerKErrCancel");
hgs
parents:
diff changeset
  2658
    TExtendedTestResult *eRes =
hgs
parents:
diff changeset
  2659
            reinterpret_cast<TExtendedTestResult*> (aArgument);
hgs
parents:
diff changeset
  2660
    if (eRes->iStatusCode != KErrCancel)
hgs
parents:
diff changeset
  2661
        {
hgs
parents:
diff changeset
  2662
        eRes->iCaseAlreadyFailed = ETrue;
hgs
parents:
diff changeset
  2663
        _LIT(KError,"Error: Wrong timer expiry reason");
hgs
parents:
diff changeset
  2664
        eRes->iTestResult->SetResult(KErrGeneral, KError);
hgs
parents:
diff changeset
  2665
        }
hgs
parents:
diff changeset
  2666
    CActiveScheduler::Stop();
hgs
parents:
diff changeset
  2667
    return 1; // nada
hgs
parents:
diff changeset
  2668
    }
hgs
parents:
diff changeset
  2669
hgs
parents:
diff changeset
  2670
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2671
// See that timer is stoppped with valid reason
hgs
parents:
diff changeset
  2672
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2673
//
hgs
parents:
diff changeset
  2674
TInt CTestCFlexTimer::InheritedFlexTimerCallbackKErrNone( TAny* aArgument )
hgs
parents:
diff changeset
  2675
    {
hgs
parents:
diff changeset
  2676
    TExtendedTestResult *eRes =
hgs
parents:
diff changeset
  2677
            reinterpret_cast<TExtendedTestResult*> (aArgument);
hgs
parents:
diff changeset
  2678
    if (eRes->iStatusCode != KErrNone)
hgs
parents:
diff changeset
  2679
        {
hgs
parents:
diff changeset
  2680
        eRes->iCaseAlreadyFailed = ETrue;
hgs
parents:
diff changeset
  2681
        _LIT(KError,"Error: Wrong timer expiry reason");
hgs
parents:
diff changeset
  2682
        eRes->iTestResult->SetResult(KErrGeneral, KError);
hgs
parents:
diff changeset
  2683
        }
hgs
parents:
diff changeset
  2684
    return 1; // nada
hgs
parents:
diff changeset
  2685
    }
hgs
parents:
diff changeset
  2686
hgs
parents:
diff changeset
  2687
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2688
// See that timer is stoppped with valid reason
hgs
parents:
diff changeset
  2689
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2690
//
hgs
parents:
diff changeset
  2691
TInt CTestCFlexTimer::InheritedFlexTimerCallbackKErrAbort( TAny* aArgument )
hgs
parents:
diff changeset
  2692
    {
hgs
parents:
diff changeset
  2693
    TExtendedTestResult *eRes =
hgs
parents:
diff changeset
  2694
            reinterpret_cast<TExtendedTestResult*> (aArgument);
hgs
parents:
diff changeset
  2695
    if (eRes->iStatusCode != KErrAbort)
hgs
parents:
diff changeset
  2696
        {
hgs
parents:
diff changeset
  2697
        eRes->iCaseAlreadyFailed = ETrue;
hgs
parents:
diff changeset
  2698
        _LIT(KError,"Error: Wrong timer expiry reason");
hgs
parents:
diff changeset
  2699
        eRes->iTestResult->SetResult(KErrGeneral, KError);
hgs
parents:
diff changeset
  2700
        }
hgs
parents:
diff changeset
  2701
    return 1; // nada
hgs
parents:
diff changeset
  2702
    }
hgs
parents:
diff changeset
  2703
hgs
parents:
diff changeset
  2704
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2705
// See that both timers are stoppped with valid reason and save expiry time
hgs
parents:
diff changeset
  2706
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2707
//
hgs
parents:
diff changeset
  2708
TInt CTestCFlexTimer::InheritedFlexTimerCallbackKErrNoneMarkTimestamp(
hgs
parents:
diff changeset
  2709
        TAny* aArgument )
hgs
parents:
diff changeset
  2710
    {
hgs
parents:
diff changeset
  2711
    TExtendedTestResult *eRes =
hgs
parents:
diff changeset
  2712
            reinterpret_cast<TExtendedTestResult*> (aArgument);
hgs
parents:
diff changeset
  2713
    if (eRes->iStatusCode != KErrNone)
hgs
parents:
diff changeset
  2714
        {
hgs
parents:
diff changeset
  2715
        eRes->iCaseAlreadyFailed = ETrue;
hgs
parents:
diff changeset
  2716
        _LIT(KError,"Error: Wrong timer expiry reason");
hgs
parents:
diff changeset
  2717
        eRes->iTestResult->SetResult(KErrGeneral, KError);
hgs
parents:
diff changeset
  2718
        }
hgs
parents:
diff changeset
  2719
    TTime utcNow(0);
hgs
parents:
diff changeset
  2720
    utcNow.UniversalTime();
hgs
parents:
diff changeset
  2721
    eRes->iTimerStoppedTime = utcNow.Int64();
hgs
parents:
diff changeset
  2722
    return 1; // nada
hgs
parents:
diff changeset
  2723
    }
hgs
parents:
diff changeset
  2724
hgs
parents:
diff changeset
  2725
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2726
// See that both timers are stoppped with valid reason and save expiry time
hgs
parents:
diff changeset
  2727
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2728
//
hgs
parents:
diff changeset
  2729
TInt CTestCFlexTimer::InheritedFlexTimerCallbackKErrNoneMarkTimestampStopScheduler(
hgs
parents:
diff changeset
  2730
        TAny* aArgument )
hgs
parents:
diff changeset
  2731
    {
hgs
parents:
diff changeset
  2732
    TExtendedTestResult *eRes =
hgs
parents:
diff changeset
  2733
            reinterpret_cast<TExtendedTestResult*> (aArgument);
hgs
parents:
diff changeset
  2734
    if (eRes->iStatusCode != KErrNone)
hgs
parents:
diff changeset
  2735
        {
hgs
parents:
diff changeset
  2736
        eRes->iCaseAlreadyFailed = ETrue;
hgs
parents:
diff changeset
  2737
        _LIT(KError,"Error: Wrong timer expiry reason");
hgs
parents:
diff changeset
  2738
        eRes->iTestResult->SetResult(KErrGeneral, KError);
hgs
parents:
diff changeset
  2739
        }
hgs
parents:
diff changeset
  2740
    TTime utcNow(0);
hgs
parents:
diff changeset
  2741
    utcNow.UniversalTime();
hgs
parents:
diff changeset
  2742
    eRes->iTimerStoppedTime = utcNow.Int64();
hgs
parents:
diff changeset
  2743
    CActiveScheduler::Stop();
hgs
parents:
diff changeset
  2744
    return 1; // nada
hgs
parents:
diff changeset
  2745
    }
hgs
parents:
diff changeset
  2746
hgs
parents:
diff changeset
  2747
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2748
// Stop active scheduler
hgs
parents:
diff changeset
  2749
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2750
//
hgs
parents:
diff changeset
  2751
TInt CTestCFlexTimer::StopActiveScheduler( TAny*/*aArgument*/)
hgs
parents:
diff changeset
  2752
    {
hgs
parents:
diff changeset
  2753
    CActiveScheduler::Stop();
hgs
parents:
diff changeset
  2754
    return 1; // nada
hgs
parents:
diff changeset
  2755
    }
hgs
parents:
diff changeset
  2756
hgs
parents:
diff changeset
  2757
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2758
// Change system time + 1s and cancel Periodic timer given as parameter
hgs
parents:
diff changeset
  2759
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2760
//
hgs
parents:
diff changeset
  2761
TInt CTestCFlexTimer::ChangeSystemTime1sAndCancel( TAny* aArgument )
hgs
parents:
diff changeset
  2762
    {
hgs
parents:
diff changeset
  2763
    RDebug::Printf("ChangeSystemTime1sAndCancel");
hgs
parents:
diff changeset
  2764
    TTime now(0);
hgs
parents:
diff changeset
  2765
    now.HomeTime();
hgs
parents:
diff changeset
  2766
    User::SetHomeTime(now + TTimeIntervalMicroSeconds32(1000 * 1000));
hgs
parents:
diff changeset
  2767
    CPeriodic *p = reinterpret_cast<CPeriodic*> (aArgument);
hgs
parents:
diff changeset
  2768
    p->Cancel();
hgs
parents:
diff changeset
  2769
    return 1; // nada
hgs
parents:
diff changeset
  2770
    }
hgs
parents:
diff changeset
  2771
hgs
parents:
diff changeset
  2772
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2773
// Change time zone and cancel Periodic timer given as parameter
hgs
parents:
diff changeset
  2774
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2775
//
hgs
parents:
diff changeset
  2776
TInt CTestCFlexTimer::ChangeTimeZoneAndCancel( TAny* aArgument )
hgs
parents:
diff changeset
  2777
    {
hgs
parents:
diff changeset
  2778
    RDebug::Printf("ChangeTimeZoneAndCancel");
hgs
parents:
diff changeset
  2779
    TTimeIntervalSeconds currentUtcOffset( User::UTCOffset() );
hgs
parents:
diff changeset
  2780
    User::SetUTCOffset( currentUtcOffset.Int() + 3000 );
hgs
parents:
diff changeset
  2781
    CPeriodic *p = reinterpret_cast<CPeriodic*> (aArgument);
hgs
parents:
diff changeset
  2782
    p->Cancel();
hgs
parents:
diff changeset
  2783
    return 1; // nada
hgs
parents:
diff changeset
  2784
    }
hgs
parents:
diff changeset
  2785
hgs
parents:
diff changeset
  2786
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2787
// Change secure time + 1s and cancel Periodic timer given as parameter
hgs
parents:
diff changeset
  2788
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2789
//
hgs
parents:
diff changeset
  2790
TInt CTestCFlexTimer::ChangeSecureTimeAndCancel( TAny* aArgument )
hgs
parents:
diff changeset
  2791
    {
hgs
parents:
diff changeset
  2792
    RDebug::Printf("ChangeSecureTimeAndCancel");
hgs
parents:
diff changeset
  2793
    TTime now(0);
hgs
parents:
diff changeset
  2794
    now.UniversalTime();
hgs
parents:
diff changeset
  2795
    User::SetUTCTimeSecure(now + TTimeIntervalMicroSeconds32(1000 * 1000));
hgs
parents:
diff changeset
  2796
    CPeriodic *p = reinterpret_cast<CPeriodic*> (aArgument);
hgs
parents:
diff changeset
  2797
    p->Cancel();
hgs
parents:
diff changeset
  2798
    return 1; // nada
hgs
parents:
diff changeset
  2799
    }
hgs
parents:
diff changeset
  2800
hgs
parents:
diff changeset
  2801
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2802
// Fail result if this is called
hgs
parents:
diff changeset
  2803
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2804
//
hgs
parents:
diff changeset
  2805
TInt CTestCFlexTimer::NotCalledCB( TAny* aArgument )
hgs
parents:
diff changeset
  2806
    {
hgs
parents:
diff changeset
  2807
    TExtendedTestResult *eRes =
hgs
parents:
diff changeset
  2808
            reinterpret_cast<TExtendedTestResult*> (aArgument);
hgs
parents:
diff changeset
  2809
    eRes->iCaseAlreadyFailed = ETrue;
hgs
parents:
diff changeset
  2810
    _LIT(KError,"Error: invalid CB called");
hgs
parents:
diff changeset
  2811
    eRes->iTestResult->SetResult(KErrGeneral, KError);
hgs
parents:
diff changeset
  2812
    return 1; //nada
hgs
parents:
diff changeset
  2813
    }
hgs
parents:
diff changeset
  2814
hgs
parents:
diff changeset
  2815
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2816
// Stop active schduler and cancel Periodic timer given as paramter
hgs
parents:
diff changeset
  2817
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2818
//
hgs
parents:
diff changeset
  2819
TInt CTestCFlexTimer::StopSchedulerAndCancel( TAny* aArgument )
hgs
parents:
diff changeset
  2820
    {
hgs
parents:
diff changeset
  2821
    CPeriodic *p = reinterpret_cast<CPeriodic*> (aArgument);
hgs
parents:
diff changeset
  2822
    p->Cancel();
hgs
parents:
diff changeset
  2823
    CActiveScheduler::Stop();
hgs
parents:
diff changeset
  2824
    return 1; // nada
hgs
parents:
diff changeset
  2825
    }
hgs
parents:
diff changeset
  2826
hgs
parents:
diff changeset
  2827
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2828
// Cancels CFlexTimer given a parameter
hgs
parents:
diff changeset
  2829
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2830
//
hgs
parents:
diff changeset
  2831
TInt CTestCFlexTimer::CancelCFlexTimer( TAny* aArgument )
hgs
parents:
diff changeset
  2832
    {
hgs
parents:
diff changeset
  2833
    CFlexTimer *p = reinterpret_cast<CFlexTimer*> (aArgument);
hgs
parents:
diff changeset
  2834
    p->Cancel();
hgs
parents:
diff changeset
  2835
    return 1; // nada
hgs
parents:
diff changeset
  2836
    }
hgs
parents:
diff changeset
  2837
hgs
parents:
diff changeset
  2838
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2839
// Cancels CFlexTimer
hgs
parents:
diff changeset
  2840
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2841
//
hgs
parents:
diff changeset
  2842
TInt CTestCFlexTimer::CancelCFlexTimerArray( TAny* aArgument )
hgs
parents:
diff changeset
  2843
    {
hgs
parents:
diff changeset
  2844
    RDebug::Printf("CancelCFlexTimerCancelPeriodic");
hgs
parents:
diff changeset
  2845
    RArray<TTimerStruct> *list =
hgs
parents:
diff changeset
  2846
            reinterpret_cast<RArray<TTimerStruct>*> (aArgument);
hgs
parents:
diff changeset
  2847
    (*list)[(*list)[0].iCurrentlyActive].iTimer->Cancel();
hgs
parents:
diff changeset
  2848
    (*list)[0].iCurrentlyActive += 1;
hgs
parents:
diff changeset
  2849
    return 1; // nada
hgs
parents:
diff changeset
  2850
    }
hgs
parents:
diff changeset
  2851
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2852
// Cancels CFlexTimer and CPeriodic given a parameter
hgs
parents:
diff changeset
  2853
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2854
//
hgs
parents:
diff changeset
  2855
TInt CTestCFlexTimer::CancelCFlexTimerCancelPeriodic( TAny* aArgument )
hgs
parents:
diff changeset
  2856
    {
hgs
parents:
diff changeset
  2857
    RDebug::Printf("CancelCFlexTimerCancelPeriodic");
hgs
parents:
diff changeset
  2858
    RArray<TTimerStruct> *list =
hgs
parents:
diff changeset
  2859
            reinterpret_cast<RArray<TTimerStruct>*> (aArgument);
hgs
parents:
diff changeset
  2860
    (*list)[(*list)[0].iCurrentlyActive].iTimer->Cancel();
hgs
parents:
diff changeset
  2861
    (*list)[0].iCurrentlyActive += 1;
hgs
parents:
diff changeset
  2862
    (*list)[0].iStartTimer->Cancel();
hgs
parents:
diff changeset
  2863
    return 1; // nada
hgs
parents:
diff changeset
  2864
    }
hgs
parents:
diff changeset
  2865
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2866
// See that timer is stoppped with valid reason and stop scheduler
hgs
parents:
diff changeset
  2867
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2868
//
hgs
parents:
diff changeset
  2869
TInt CTestCFlexTimer::StopSchedulerKErrNoneArray( TAny* aArgument )
hgs
parents:
diff changeset
  2870
    {
hgs
parents:
diff changeset
  2871
    RDebug::Printf("StopSchedulerKErrNoneArray");
hgs
parents:
diff changeset
  2872
    RArray<TTimerStruct> *list =
hgs
parents:
diff changeset
  2873
            reinterpret_cast<RArray<TTimerStruct>*> (aArgument);
hgs
parents:
diff changeset
  2874
    if ((*list)[(*list)[0].iCurrentlyActive].iEResult->iStatusCode
hgs
parents:
diff changeset
  2875
            != KErrNone)
hgs
parents:
diff changeset
  2876
        {
hgs
parents:
diff changeset
  2877
        (*list)[(*list)[0].iCurrentlyActive].iEResult->iCaseAlreadyFailed
hgs
parents:
diff changeset
  2878
                = ETrue;
hgs
parents:
diff changeset
  2879
        _LIT(KErrorDes,"Error: Wrong timer expiry reason");
hgs
parents:
diff changeset
  2880
        (*list)[(*list)[0].iCurrentlyActive].iEResult->iTestResult->SetResult(
hgs
parents:
diff changeset
  2881
                KErrGeneral, KErrorDes);
hgs
parents:
diff changeset
  2882
        }
hgs
parents:
diff changeset
  2883
    CActiveScheduler::Stop();
hgs
parents:
diff changeset
  2884
    return 1; // nada
hgs
parents:
diff changeset
  2885
    }
hgs
parents:
diff changeset
  2886
hgs
parents:
diff changeset
  2887
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2888
// Cancels CFlexTimer given a parameter and stops active scheduler
hgs
parents:
diff changeset
  2889
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2890
//
hgs
parents:
diff changeset
  2891
TInt CTestCFlexTimer::CancelCFlexTimerAndStopActiveScheduler( TAny* aArgument )
hgs
parents:
diff changeset
  2892
    {
hgs
parents:
diff changeset
  2893
    CFlexTimer *p = reinterpret_cast<CFlexTimer*> (aArgument);
hgs
parents:
diff changeset
  2894
    p->Cancel();
hgs
parents:
diff changeset
  2895
    CActiveScheduler::Stop();
hgs
parents:
diff changeset
  2896
    return 1; // nada
hgs
parents:
diff changeset
  2897
    }
hgs
parents:
diff changeset
  2898
    
hgs
parents:
diff changeset
  2899
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2900
// Callback for StartTimerAndAddToList method. This is hack to enable aTimers
hgs
parents:
diff changeset
  2901
// parameter in StartTimerAndAddToList method.
hgs
parents:
diff changeset
  2902
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2903
//
hgs
parents:
diff changeset
  2904
TInt CTestCFlexTimer::StartTimerAndAddToListCB( TAny* aArgument )
hgs
parents:
diff changeset
  2905
    {
hgs
parents:
diff changeset
  2906
    return StartTimerAndAddToList(
hgs
parents:
diff changeset
  2907
        reinterpret_cast<RArray<TTimerStruct>*> (aArgument), -1 );
hgs
parents:
diff changeset
  2908
    }
hgs
parents:
diff changeset
  2909
hgs
parents:
diff changeset
  2910
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2911
// Starts timer and adds it to list given as param
hgs
parents:
diff changeset
  2912
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2913
//
hgs
parents:
diff changeset
  2914
TInt CTestCFlexTimer::StartTimerAndAddToList(
hgs
parents:
diff changeset
  2915
    RArray<TTimerStruct>* aList, TInt aTimers )
hgs
parents:
diff changeset
  2916
    {
hgs
parents:
diff changeset
  2917
    const TInt KTimerStartInterval = 5 * 1000; //Start new timer every 5ms
hgs
parents:
diff changeset
  2918
    const TInt KTimerMaxDelay = 15 * 1000 * 1000; //Timer delay is between 0 and 15 seconds
hgs
parents:
diff changeset
  2919
    static TInt numberOfTimers = 0; // How many timers to start
hgs
parents:
diff changeset
  2920
    
hgs
parents:
diff changeset
  2921
    if (aTimers > 0)
hgs
parents:
diff changeset
  2922
        {
hgs
parents:
diff changeset
  2923
        numberOfTimers = aTimers;
hgs
parents:
diff changeset
  2924
        }
hgs
parents:
diff changeset
  2925
hgs
parents:
diff changeset
  2926
    TTestResult *res = new TTestResult();
hgs
parents:
diff changeset
  2927
    TExtendedTestResult *eResult = new TExtendedTestResult(res);
hgs
parents:
diff changeset
  2928
    eResult->iTimerID = aList->Count();
hgs
parents:
diff changeset
  2929
    CInheritedCFlexTimer2* timer = CInheritedCFlexTimer2::NewL(
hgs
parents:
diff changeset
  2930
            CActive::EPriorityStandard,
hgs
parents:
diff changeset
  2931
            TCallBack(StopTimer, reinterpret_cast<TAny*> (aList)),
hgs
parents:
diff changeset
  2932
            eResult->iTimerID);
hgs
parents:
diff changeset
  2933
hgs
parents:
diff changeset
  2934
    // Expire in 0-15s seconds
hgs
parents:
diff changeset
  2935
    TInt random = Math::Random() % (KTimerMaxDelay);
hgs
parents:
diff changeset
  2936
    TTimeIntervalMicroSeconds expireTime(random);
hgs
parents:
diff changeset
  2937
    TTimerStruct *s = new TTimerStruct();
hgs
parents:
diff changeset
  2938
    s->iEResult = eResult;
hgs
parents:
diff changeset
  2939
    s->iTimer = timer;
hgs
parents:
diff changeset
  2940
    // Save current time
hgs
parents:
diff changeset
  2941
    TTime utcNow(0);
hgs
parents:
diff changeset
  2942
    utcNow.UniversalTime();
hgs
parents:
diff changeset
  2943
    s->iEResult->iTimerStartedTime = utcNow.Int64();
hgs
parents:
diff changeset
  2944
    s->iEResult->iTimerExpiryTime = expireTime.Int64();
hgs
parents:
diff changeset
  2945
    TInt listerr = aList->Append(*s);
hgs
parents:
diff changeset
  2946
    if (KErrNone != listerr)
hgs
parents:
diff changeset
  2947
        {
hgs
parents:
diff changeset
  2948
        RDebug::Printf("Error: Adding to list failed %d", listerr);
hgs
parents:
diff changeset
  2949
        }
hgs
parents:
diff changeset
  2950
    (*aList)[0].iTimersRunning += 1;
hgs
parents:
diff changeset
  2951
    timer->After(expireTime);
hgs
parents:
diff changeset
  2952
    //First time here. Lets start timer to make many timers.
hgs
parents:
diff changeset
  2953
    if (aList->Count() == 1)
hgs
parents:
diff changeset
  2954
        {
hgs
parents:
diff changeset
  2955
        CPeriodic *p = CPeriodic::NewL(EPriorityNormal);
hgs
parents:
diff changeset
  2956
        p->Start(KTimerStartInterval, KTimerStartInterval, TCallBack(
hgs
parents:
diff changeset
  2957
                StartTimerAndAddToListCB, reinterpret_cast<TAny*> (aList) ));
hgs
parents:
diff changeset
  2958
        (*aList)[0].iStartTimer = p;
hgs
parents:
diff changeset
  2959
        }
hgs
parents:
diff changeset
  2960
    RDebug::Printf("StartTimerAndAddToList: timers running %d",
hgs
parents:
diff changeset
  2961
            (*aList)[0].iTimersRunning);
hgs
parents:
diff changeset
  2962
    RDebug::Printf("StartTimerAndAddToList: list->Count() %d", aList->Count());
hgs
parents:
diff changeset
  2963
    if (aList->Count() == numberOfTimers)
hgs
parents:
diff changeset
  2964
        {
hgs
parents:
diff changeset
  2965
        ((*aList)[0].iStartTimer->Cancel());
hgs
parents:
diff changeset
  2966
        }
hgs
parents:
diff changeset
  2967
    return 1; // nada
hgs
parents:
diff changeset
  2968
    }
hgs
parents:
diff changeset
  2969
hgs
parents:
diff changeset
  2970
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2971
// Starts timer and adds it to list given as param
hgs
parents:
diff changeset
  2972
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2973
//
hgs
parents:
diff changeset
  2974
TInt CTestCFlexTimer::StopTimer( TAny* aArgument )
hgs
parents:
diff changeset
  2975
    {
hgs
parents:
diff changeset
  2976
    RArray<TTimerStruct> *list =
hgs
parents:
diff changeset
  2977
            reinterpret_cast<RArray<TTimerStruct>*> (aArgument);
hgs
parents:
diff changeset
  2978
    RDebug::Printf("StopTimer: timers running %d", (*list)[0].iTimersRunning);
hgs
parents:
diff changeset
  2979
    // Save current time
hgs
parents:
diff changeset
  2980
    TTime utcNow(0);
hgs
parents:
diff changeset
  2981
    utcNow.UniversalTime();
hgs
parents:
diff changeset
  2982
    (*list)[0].iTimersRunning -= 1;
hgs
parents:
diff changeset
  2983
    (*list)[(*list)[0].iCurrentlyActive].iEResult->iTimerStoppedTime
hgs
parents:
diff changeset
  2984
            = utcNow.Int64();
hgs
parents:
diff changeset
  2985
    if ((*list)[0].iTimersRunning == 0)
hgs
parents:
diff changeset
  2986
        {
hgs
parents:
diff changeset
  2987
        (*list)[0].iStartTimer->Cancel();
hgs
parents:
diff changeset
  2988
        CActiveScheduler::Stop();
hgs
parents:
diff changeset
  2989
        }
hgs
parents:
diff changeset
  2990
    return 1; // nada
hgs
parents:
diff changeset
  2991
    }
hgs
parents:
diff changeset
  2992
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2993
// Try to configure timer ans see that correct error code is returned
hgs
parents:
diff changeset
  2994
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  2995
//
hgs
parents:
diff changeset
  2996
TInt CTestCFlexTimer::ConfigureKErrInUseArray( TAny* aArgument )
hgs
parents:
diff changeset
  2997
    {
hgs
parents:
diff changeset
  2998
    RDebug::Printf("ConfigureKErrInUseArray");
hgs
parents:
diff changeset
  2999
    RArray<TTimerStruct> *list =
hgs
parents:
diff changeset
  3000
            reinterpret_cast<RArray<TTimerStruct>*> (aArgument);
hgs
parents:
diff changeset
  3001
    TInt error = (*list)[(*list)[0].iCurrentlyActive].iTimer->Configure(
hgs
parents:
diff changeset
  3002
            TTimeIntervalMicroSeconds(12 * 1000 * 1000));
hgs
parents:
diff changeset
  3003
    if (KErrInUse != error)
hgs
parents:
diff changeset
  3004
        {
hgs
parents:
diff changeset
  3005
        (*list)[(*list)[0].iCurrentlyActive].iEResult->iCaseAlreadyFailed
hgs
parents:
diff changeset
  3006
                = ETrue;
hgs
parents:
diff changeset
  3007
        _LIT(KError,"Error: Wrong return code 64bit if\n");
hgs
parents:
diff changeset
  3008
        (*list)[(*list)[0].iCurrentlyActive].iEResult->iTestResult->SetResult(
hgs
parents:
diff changeset
  3009
                KErrGeneral, KError);
hgs
parents:
diff changeset
  3010
        return 1;
hgs
parents:
diff changeset
  3011
        }
hgs
parents:
diff changeset
  3012
    //Try same with 32 bit if
hgs
parents:
diff changeset
  3013
    error = (*list)[(*list)[0].iCurrentlyActive].iTimer->Configure(
hgs
parents:
diff changeset
  3014
            TTimeIntervalMicroSeconds32(12 * 1000 * 1000));
hgs
parents:
diff changeset
  3015
    if (KErrInUse != error)
hgs
parents:
diff changeset
  3016
        {
hgs
parents:
diff changeset
  3017
        (*list)[(*list)[0].iCurrentlyActive].iEResult->iCaseAlreadyFailed
hgs
parents:
diff changeset
  3018
                = ETrue;
hgs
parents:
diff changeset
  3019
        _LIT(KError,"Error: Wrong return code 32bit if\n");
hgs
parents:
diff changeset
  3020
        (*list)[(*list)[0].iCurrentlyActive].iEResult->iTestResult->SetResult(
hgs
parents:
diff changeset
  3021
                KErrGeneral, KError);
hgs
parents:
diff changeset
  3022
        }
hgs
parents:
diff changeset
  3023
    return 1; // nada
hgs
parents:
diff changeset
  3024
    }
hgs
parents:
diff changeset
  3025
hgs
parents:
diff changeset
  3026
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  3027
// start timer again
hgs
parents:
diff changeset
  3028
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  3029
//
hgs
parents:
diff changeset
  3030
TInt CTestCFlexTimer::StartTimerAgainArray( TAny* aArgument )
hgs
parents:
diff changeset
  3031
    {
hgs
parents:
diff changeset
  3032
    RDebug::Printf("StartTimerAgainArray");
hgs
parents:
diff changeset
  3033
    RArray<TTimerStruct> *list =
hgs
parents:
diff changeset
  3034
            reinterpret_cast<RArray<TTimerStruct>*> (aArgument);
hgs
parents:
diff changeset
  3035
    (*list)[(*list)[0].iCurrentlyActive].iTimer->After(
hgs
parents:
diff changeset
  3036
            TTimeIntervalMicroSeconds(12 * 1000 * 1000));
hgs
parents:
diff changeset
  3037
    return 1; // nada
hgs
parents:
diff changeset
  3038
    }
hgs
parents:
diff changeset
  3039
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  3040
// Start two timers and see that they expire at the same time.
hgs
parents:
diff changeset
  3041
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  3042
//
hgs
parents:
diff changeset
  3043
TInt CTestCFlexTimer::CpuLoadCreateAndExpireTwoOverlappingAfterTimersL(
hgs
parents:
diff changeset
  3044
        TTestResult& aResult, CTestFlexTimer *cb )
hgs
parents:
diff changeset
  3045
    {
hgs
parents:
diff changeset
  3046
    TTestResult *res1 = new TTestResult();
hgs
parents:
diff changeset
  3047
    TTestResult *res2 = new TTestResult();
hgs
parents:
diff changeset
  3048
    TExtendedTestResult *eResult1 = new TExtendedTestResult(res1);
hgs
parents:
diff changeset
  3049
    TExtendedTestResult *eResult2 = new TExtendedTestResult(res2);
hgs
parents:
diff changeset
  3050
    
hgs
parents:
diff changeset
  3051
hgs
parents:
diff changeset
  3052
    eResult1->iTimerID = 1;
hgs
parents:
diff changeset
  3053
    eResult2->iTimerID = 2;
hgs
parents:
diff changeset
  3054
    
hgs
parents:
diff changeset
  3055
    CInheritedCFlexTimer* timer1 = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
  3056
            CActive::EPriorityStandard,
hgs
parents:
diff changeset
  3057
            TCallBack(InheritedFlexTimerCallbackKErrNoneMarkTimestamp,
hgs
parents:
diff changeset
  3058
                    eResult1));
hgs
parents:
diff changeset
  3059
    CInheritedCFlexTimer* timer2 = CInheritedCFlexTimer::NewL(
hgs
parents:
diff changeset
  3060
            CActive::EPriorityStandard,
hgs
parents:
diff changeset
  3061
            TCallBack(InheritedFlexTimerCallbackKErrNoneMarkTimestamp,
hgs
parents:
diff changeset
  3062
                    eResult2));
hgs
parents:
diff changeset
  3063
    
hgs
parents:
diff changeset
  3064
    // Expire in 10 seconds
hgs
parents:
diff changeset
  3065
    TTimeIntervalMicroSeconds32 expireTime1(10 * 1000 * 1000);
hgs
parents:
diff changeset
  3066
    //Expire within first timers default window
hgs
parents:
diff changeset
  3067
    TTimeIntervalMicroSeconds32 expireTime2(static_cast<TInt64> ((10 * 1000
hgs
parents:
diff changeset
  3068
            * 1000 - static_cast<float> (10 * 1000 * 1000)
hgs
parents:
diff changeset
  3069
            * KDefaultWindowMultiplier)));
hgs
parents:
diff changeset
  3070
    
hgs
parents:
diff changeset
  3071
    // Save current time
hgs
parents:
diff changeset
  3072
    TTime utcNow(0);
hgs
parents:
diff changeset
  3073
    utcNow.UniversalTime();
hgs
parents:
diff changeset
  3074
    
hgs
parents:
diff changeset
  3075
    timer1->After(expireTime1);
hgs
parents:
diff changeset
  3076
    timer2->After(expireTime2);
hgs
parents:
diff changeset
  3077
    
hgs
parents:
diff changeset
  3078
    //Timer to stop active scheduler after timers under test are completed.
hgs
parents:
diff changeset
  3079
    CPeriodic *p = CPeriodic::NewL(EPriorityNormal);
hgs
parents:
diff changeset
  3080
hgs
parents:
diff changeset
  3081
    p->Start(15 * 1000 * 1000, 1000, TCallBack(StopActiveScheduler));
hgs
parents:
diff changeset
  3082
hgs
parents:
diff changeset
  3083
    MSTIFTestInterference* interference =  MSTIFTestInterference::NewL(
hgs
parents:
diff changeset
  3084
        cb, MSTIFTestInterference::EThread );
hgs
parents:
diff changeset
  3085
hgs
parents:
diff changeset
  3086
    // Start interference to generate 99% CPU load (100 ms load, 1% idle)
hgs
parents:
diff changeset
  3087
    interference->StartL( MSTIFTestInterference::ECpuLoad, 1, 100 );
hgs
parents:
diff changeset
  3088
    // Start scheduler and wait for callback to stop it
hgs
parents:
diff changeset
  3089
    CActiveScheduler::Start();
hgs
parents:
diff changeset
  3090
    interference->Stop();
hgs
parents:
diff changeset
  3091
    delete interference;
hgs
parents:
diff changeset
  3092
    
hgs
parents:
diff changeset
  3093
    delete p;
hgs
parents:
diff changeset
  3094
hgs
parents:
diff changeset
  3095
    // Check results
hgs
parents:
diff changeset
  3096
    TInt64 timer1RightWin =
hgs
parents:
diff changeset
  3097
        utcNow.Int64() + static_cast<TInt64>(expireTime1.Int());
hgs
parents:
diff changeset
  3098
    TInt64 timer2RightWin =
hgs
parents:
diff changeset
  3099
        utcNow.Int64() + static_cast<TInt64>(expireTime2.Int());
hgs
parents:
diff changeset
  3100
    TInt64 timer1LeftWin = timer2RightWin - static_cast<TInt64>(
hgs
parents:
diff changeset
  3101
        (static_cast<TReal64>(expireTime1.Int()) * KDefaultWindowMultiplier));
hgs
parents:
diff changeset
  3102
    TInt64 timer2LeftWin = timer2RightWin - static_cast<TInt64>(
hgs
parents:
diff changeset
  3103
        (static_cast<TReal64>(expireTime2.Int()) * KDefaultWindowMultiplier));
hgs
parents:
diff changeset
  3104
    TInt64 timer1StopedTime = eResult1->iTimerStoppedTime;
hgs
parents:
diff changeset
  3105
    TInt64 timer2StopedTime = eResult2->iTimerStoppedTime;
hgs
parents:
diff changeset
  3106
    
hgs
parents:
diff changeset
  3107
    //See if Timer 1 Callback has failed the case
hgs
parents:
diff changeset
  3108
    if (eResult1->iCaseAlreadyFailed)
hgs
parents:
diff changeset
  3109
        {
hgs
parents:
diff changeset
  3110
        _LIT( KDescription ,"Timer 1 has failed" );
hgs
parents:
diff changeset
  3111
        aResult.SetResult( KErrGeneral, KDescription );
hgs
parents:
diff changeset
  3112
        }
hgs
parents:
diff changeset
  3113
    //See if Timer 2 Callback has failed the case
hgs
parents:
diff changeset
  3114
    else if (eResult2->iCaseAlreadyFailed)
hgs
parents:
diff changeset
  3115
        {
hgs
parents:
diff changeset
  3116
        _LIT( KDescription,"Timer 2 has failed" );
hgs
parents:
diff changeset
  3117
        aResult.SetResult( KErrGeneral, KDescription );
hgs
parents:
diff changeset
  3118
        }
hgs
parents:
diff changeset
  3119
    // Check if timer 1 has timed out too early
hgs
parents:
diff changeset
  3120
    else if ((timer1StopedTime + KTickResolution) < timer1LeftWin)
hgs
parents:
diff changeset
  3121
        {
hgs
parents:
diff changeset
  3122
        _LIT( KDescription, "Timer 1 timed out too early" );
hgs
parents:
diff changeset
  3123
        aResult.SetResult( KErrGeneral, KDescription );
hgs
parents:
diff changeset
  3124
        }
hgs
parents:
diff changeset
  3125
    // Check if timer 1 has timed out too Late
hgs
parents:
diff changeset
  3126
    else if ((timer1StopedTime - KTimerAccuracyMicroSeconds) > timer1RightWin)
hgs
parents:
diff changeset
  3127
        {
hgs
parents:
diff changeset
  3128
        _LIT( KDescription, "Timer 1 timed out too late" );
hgs
parents:
diff changeset
  3129
        aResult.SetResult( KErrGeneral, KDescription );
hgs
parents:
diff changeset
  3130
        }
hgs
parents:
diff changeset
  3131
    // Check if timer 2 has timed out too early
hgs
parents:
diff changeset
  3132
    else if ((timer2StopedTime + KTickResolution) < timer2LeftWin)
hgs
parents:
diff changeset
  3133
        {
hgs
parents:
diff changeset
  3134
        _LIT( KDescription, "Timer 2 timed out too early" );
hgs
parents:
diff changeset
  3135
        aResult.SetResult( KErrGeneral, KDescription );
hgs
parents:
diff changeset
  3136
        }
hgs
parents:
diff changeset
  3137
    // Check if timer 2 has timed out too Late
hgs
parents:
diff changeset
  3138
    else if ((timer2StopedTime - KTimerAccuracyMicroSeconds - KExtraSlack) > timer2RightWin)
hgs
parents:
diff changeset
  3139
        {
hgs
parents:
diff changeset
  3140
        _LIT( KDescription, "Timer 2 timed out too late" );
hgs
parents:
diff changeset
  3141
        aResult.SetResult( KErrGeneral, KDescription );
hgs
parents:
diff changeset
  3142
        }
hgs
parents:
diff changeset
  3143
    // Check that the timers 1 and 2 timed out at the same time
hgs
parents:
diff changeset
  3144
    else if (((timer1StopedTime + KTimerAccuracyMicroSeconds) < timer2StopedTime) ||
hgs
parents:
diff changeset
  3145
        ((timer1StopedTime - KTimerAccuracyMicroSeconds) > timer2StopedTime))
hgs
parents:
diff changeset
  3146
        {
hgs
parents:
diff changeset
  3147
        _LIT( KDescription, "Timers 1 and 2 did not timeout at the same time" );
hgs
parents:
diff changeset
  3148
        aResult.SetResult( KErrGeneral, KDescription );
hgs
parents:
diff changeset
  3149
        }
hgs
parents:
diff changeset
  3150
    // Everything was successful
hgs
parents:
diff changeset
  3151
    else
hgs
parents:
diff changeset
  3152
        {
hgs
parents:
diff changeset
  3153
        _LIT( KDescription, "Passed" );
hgs
parents:
diff changeset
  3154
        aResult.SetResult( KErrNone, KDescription );
hgs
parents:
diff changeset
  3155
        }
hgs
parents:
diff changeset
  3156
    
hgs
parents:
diff changeset
  3157
    // Case was executed
hgs
parents:
diff changeset
  3158
    delete timer1;
hgs
parents:
diff changeset
  3159
    delete timer2;
hgs
parents:
diff changeset
  3160
    delete eResult1;
hgs
parents:
diff changeset
  3161
    delete eResult2;
hgs
parents:
diff changeset
  3162
    delete res1;
hgs
parents:
diff changeset
  3163
    delete res2;
hgs
parents:
diff changeset
  3164
    
hgs
parents:
diff changeset
  3165
    return KErrNone;
hgs
parents:
diff changeset
  3166
    }
hgs
parents:
diff changeset
  3167
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  3168
// Start many timers and see that nothing goes wrong when they are expired at rapid sequence
hgs
parents:
diff changeset
  3169
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  3170
//
hgs
parents:
diff changeset
  3171
TInt CTestCFlexTimer::CpuLoadManyTimersL(
hgs
parents:
diff changeset
  3172
        TTestResult& aResult, CTestFlexTimer *cb )
hgs
parents:
diff changeset
  3173
    {
hgs
parents:
diff changeset
  3174
    RDebug::Printf("CpuLoadManyTimersL");
hgs
parents:
diff changeset
  3175
    // This list will contain all the timer structs, expiry times etc.
hgs
parents:
diff changeset
  3176
    // First cell will always tell which timer is currently active
hgs
parents:
diff changeset
  3177
    // active info is transferred from e.g. InheritedCFlexTimer2::RunL to CB function
hgs
parents:
diff changeset
  3178
    RArray<TTimerStruct> timers;
hgs
parents:
diff changeset
  3179
    // This CB contains all the logic about timer addition
hgs
parents:
diff changeset
  3180
    StartTimerAndAddToList( &timers, 100 );
hgs
parents:
diff changeset
  3181
    
hgs
parents:
diff changeset
  3182
    MSTIFTestInterference* interference =  MSTIFTestInterference::NewL(
hgs
parents:
diff changeset
  3183
        cb, MSTIFTestInterference::EThread );
hgs
parents:
diff changeset
  3184
    // Start interference to generate 99% CPU load (100 ms load, 1% idle)
hgs
parents:
diff changeset
  3185
    interference->StartL( MSTIFTestInterference::ECpuLoad, 1, 50 );
hgs
parents:
diff changeset
  3186
    // Start scheduler and wait for callback to stop it
hgs
parents:
diff changeset
  3187
    CActiveScheduler::Start();
hgs
parents:
diff changeset
  3188
    interference->Stop();
hgs
parents:
diff changeset
  3189
    delete interference;
hgs
parents:
diff changeset
  3190
    
hgs
parents:
diff changeset
  3191
    // Delete CPeriodic that was used to launch new FlexTimers
hgs
parents:
diff changeset
  3192
    delete timers[0].iStartTimer;
hgs
parents:
diff changeset
  3193
    _LIT( KDescriptionP , "Passed");
hgs
parents:
diff changeset
  3194
    aResult.SetResult(KErrNone, KDescriptionP);
hgs
parents:
diff changeset
  3195
    // Loop throug list and see if timers fired within limits.
hgs
parents:
diff changeset
  3196
    // also delete all stuff reserved earlier by StartTimerAndAddToList
hgs
parents:
diff changeset
  3197
    while (timers.Count())
hgs
parents:
diff changeset
  3198
        {
hgs
parents:
diff changeset
  3199
        TInt64 rightWin = timers[0].iEResult->iTimerStartedTime +
hgs
parents:
diff changeset
  3200
            timers[0].iEResult->iTimerExpiryTime;
hgs
parents:
diff changeset
  3201
        TInt64 leftWin = rightWin -
hgs
parents:
diff changeset
  3202
            (static_cast<float> (timers[0].iEResult->iTimerExpiryTime) *
hgs
parents:
diff changeset
  3203
                KDefaultWindowMultiplier);
hgs
parents:
diff changeset
  3204
        TInt64 stopTime = timers[0].iEResult->iTimerStoppedTime;
hgs
parents:
diff changeset
  3205
        
hgs
parents:
diff changeset
  3206
        // Have fun with reading this. It is not as bad as it looks
hgs
parents:
diff changeset
  3207
        // Just checks if CB already failed the case
hgs
parents:
diff changeset
  3208
        // and if timer was launched within its window(default) and timer accuracy
hgs
parents:
diff changeset
  3209
        if (timers[0].iEResult->iCaseAlreadyFailed)
hgs
parents:
diff changeset
  3210
            {
hgs
parents:
diff changeset
  3211
            _LIT( KDescription , "Case was failed earlier for unknown reason.");
hgs
parents:
diff changeset
  3212
            aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
  3213
            }
hgs
parents:
diff changeset
  3214
        // Check if timer has expired before the window has started.
hgs
parents:
diff changeset
  3215
        else if((stopTime + KTickResolution)  < leftWin)
hgs
parents:
diff changeset
  3216
            {
hgs
parents:
diff changeset
  3217
            _LIT( KDescription , "Some timer has expired too soon");
hgs
parents:
diff changeset
  3218
            aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
  3219
            }
hgs
parents:
diff changeset
  3220
        // Check if timeout has happened too long time after window end.
hgs
parents:
diff changeset
  3221
        else if (stopTime > (rightWin + KTimerAccuracyMicroSeconds + KExtraSlack))
hgs
parents:
diff changeset
  3222
            {
hgs
parents:
diff changeset
  3223
            _LIT( KDescription , "Some timer has expired too late");
hgs
parents:
diff changeset
  3224
            aResult.SetResult(KErrGeneral, KDescription);
hgs
parents:
diff changeset
  3225
            }
hgs
parents:
diff changeset
  3226
        delete timers[0].iEResult->iTestResult;
hgs
parents:
diff changeset
  3227
        delete timers[0].iEResult;
hgs
parents:
diff changeset
  3228
        delete timers[0].iTimer;
hgs
parents:
diff changeset
  3229
        timers.Remove(0);
hgs
parents:
diff changeset
  3230
        }
hgs
parents:
diff changeset
  3231
    // Case was executed
hgs
parents:
diff changeset
  3232
    timers.Close();
hgs
parents:
diff changeset
  3233
    return KErrNone;
hgs
parents:
diff changeset
  3234
    }
hgs
parents:
diff changeset
  3235
hgs
parents:
diff changeset
  3236
// ======== GLOBAL FUNCTIONS ========