diff -r 000000000000 -r 2e3d3ce01487 commonappservices/alarmserver/Test/TQueueRestoration.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commonappservices/alarmserver/Test/TQueueRestoration.cpp Tue Feb 02 10:12:00 2010 +0200 @@ -0,0 +1,568 @@ +// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#include "ASTstAlarmTest.h" +#include "testserver.h" + +// Globals +static TRequestStatus TheStatus; +static TTime TheTimeBefore; +static TTime TheTimeAfter; +static TAlarmId TheClockAlarmIds[10]; + + +void TestInitAlarmsL() +// +// Set up alarms for before test +// 1. clock 0 between shutdown time and restart time +// 2. clock 1 daily alarm +// 3. clock 2 workday alarm +// 4. clock 3 after restart time +// 5. orphaned alarm +// 6. session alarm +// 7. clock 4 in 24 hours +// 8. clock 5 in past (for review alarm) +// + { + TheAlarmTest.Test().Next(_L("Setting up alarms before shut down")); + // + TInt r; + TInt count; + TASShdAlarm alarm; + TheTimeBefore.HomeTime(); + // + count = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue(); + TheAlarmTest(count == 0, __LINE__); + + // 8. Clock 0 in past (for review alarm) + TheTimeBefore -= TTimeIntervalHours(1); + alarm.NextDueTime() = TheTimeBefore; + alarm.Message() = _L("past"); + alarm.RepeatDefinition() = EAlarmRepeatDefintionRepeatOnce; + r = TheAlarmTest.Session().AlarmAdd(alarm); + TheAlarmTest(r == KErrNone, __LINE__); + TheClockAlarmIds[0] = alarm.Id(); + // + User::After(KTimeToWait); + r = TheAlarmTest.Session().GetAlarmDetails(alarm.Id(), alarm); + TheAlarmTest(alarm.State() == EAlarmStateNotified, __LINE__); + // + count = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue(); + TheAlarmTest(count == 0, __LINE__); + + // 1. Clock 1 between shutdown time and restart time + TheTimeBefore += TTimeIntervalDays(1); + alarm.NextDueTime() = TheTimeBefore; + alarm.Message() = _L("once"); + alarm.RepeatDefinition() = EAlarmRepeatDefintionRepeatOnce; + r = TheAlarmTest.Session().AlarmAdd(alarm); + TheAlarmTest(r == KErrNone, __LINE__); + TheClockAlarmIds[1] = alarm.Id(); + // + r = TheAlarmTest.Session().GetAlarmDetails(alarm.Id(), alarm); + TheAlarmTest(alarm.State() == EAlarmStateQueued, __LINE__); + + // 2. Clock 2 daily alarm + alarm.NextDueTime() = TheTimeBefore; + alarm.Message() = _L("daily"); + alarm.RepeatDefinition() = EAlarmRepeatDefintionRepeatDaily; + r = TheAlarmTest.Session().AlarmAdd(alarm); + TheAlarmTest(r == KErrNone, __LINE__); + TheClockAlarmIds[2] = alarm.Id(); + // + count = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue(); + TheAlarmTest(count == 2, __LINE__); + + // 3. Clock 3 workday alarm + alarm.NextDueTime() = TheTimeBefore; + alarm.Message() = _L("workday"); + alarm.RepeatDefinition() = EAlarmRepeatDefintionRepeatWorkday; + r = TheAlarmTest.Session().AlarmAdd(alarm); + TheAlarmTest(r == KErrNone, __LINE__); + TheClockAlarmIds[3] = alarm.Id(); + + // 4. Clock 4 after restart time + TheTimeAfter = TheTimeBefore + TTimeIntervalDays(2); + alarm.NextDueTime() = TheTimeAfter; + alarm.Message() = _L("after"); + alarm.RepeatDefinition() = EAlarmRepeatDefintionRepeatWorkday; + r = TheAlarmTest.Session().AlarmAdd(alarm); + TheAlarmTest(r == KErrNone, __LINE__); + TheClockAlarmIds[4] = alarm.Id(); + // + count = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue(); + TheAlarmTest(count == 4, __LINE__); + + // 5. Orphaned alarm + alarm.NextDueTime() = TheTimeAfter; + alarm.Message() = _L("orphaned"); + alarm.RepeatDefinition() = EAlarmRepeatDefintionRepeatOnce; + TheAlarmTest.Session().AlarmAddWithNotification(TheStatus, alarm); + TheAlarmTest(alarm.Id() != KNullAlarmId, __LINE__); + TheAlarmTest(TheStatus == KRequestPending, __LINE__); + r = TheAlarmTest.Session().SetAlarmCharacteristics(alarm.Id(), 0); + TheAlarmTest(r == KErrNone, __LINE__); + User::WaitForRequest(TheStatus); + TheClockAlarmIds[5] = alarm.Id(); + // + count = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue(); + TheAlarmTest(count == 5, __LINE__); + + // 7. Clock 5 in 24 hours + alarm.Characteristics() = 0; + alarm.NextDueTime() = TheTimeAfter; + alarm.Message() = _L("next24"); + alarm.RepeatDefinition() = EAlarmRepeatDefintionRepeatNext24Hours; + r = TheAlarmTest.Session().AlarmAdd(alarm); + TheAlarmTest(r == KErrNone, __LINE__); + TheClockAlarmIds[6] = alarm.Id(); + // + count = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue(); + TheAlarmTest(count == 6, __LINE__); + + // 6. Session alarm + alarm.NextDueTime() = TheTimeAfter; + alarm.Message() =_L("different"); + alarm.RepeatDefinition() = EAlarmRepeatDefintionRepeatOnce; + TheAlarmTest.Session().AlarmAddWithNotification(TheStatus, alarm); + TheAlarmTest(alarm.Id() != KNullAlarmId, __LINE__); + TheAlarmTest(TheStatus == KRequestPending, __LINE__); + TheClockAlarmIds[7] = alarm.Id(); + + // Verification + count = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue(); + TheAlarmTest(count == 7, __LINE__); + // + count = TheAlarmTest.CountOrphanedAlarmsL(); + TheAlarmTest(count == 1, __LINE__); + } + + +void TestPostShutDownL() +// +// Check persisted correct information +// 1. Clock 0 alarm deleted - its added to the queue when the backup store +// is internalized, but as soon as the server starts the scheduler, the +// change notifier runs and the date/time change is reported. At this point +// the alarm is more than 2 days in the past, and as such, any "Once only" +// alarm (regardless of State()) which is set in the past is deleted from +// the queue. +// 2. Clock 1 set between shutdown and restart time. Again this is deleted +// because when the change notifier runs, its more than a day old and +// so its automatically dequeued. +// 3. Clock 2 (daily repeat). This is just reset for the next valid repeat. +// 4. Clock 3 (workday repeat). This is just reset for the next valid repeat. +// 5. Clock 4 (workday repeat). This still uses the original "after the restart" +// expiry time. +// 6. Alarm 5 (orphaned alarm). This is still orphaned and is still valid. +// Effectively, this is a change in behaviour from the old EALWL, where +// old orphaned alarms were deleted when internalized. +// 7. Clock 5 (was next 24 hours repeat, is now RepeatOnce and orphaned). +// 8. Session alarm (which was pending when the server shut down). This is +// cleaned up and dequeued as part of the server shut-down process. When +// the session disconnects, any session alarms for that session are +// dequeued (by matching against the session id). +// + { + TheAlarmTest.Test().Next(_L("Comparing persisted alarms")); + // + TInt c; + c = TheAlarmTest.CountOrphanedAlarmsL(); + TheAlarmTest(c == 1, __LINE__); + // + c = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue(); + TheAlarmTest(c == 4, __LINE__); + // + TInt r; + TASShdAlarm alarm; + // + r = TheAlarmTest.Session().GetAlarmDetails(TheClockAlarmIds[0], alarm); + TheAlarmTest(r == KErrNone, __LINE__); + // + r = TheAlarmTest.Session().GetAlarmDetails(TheClockAlarmIds[1], alarm); + TheAlarmTest(r == KErrNotFound, __LINE__); + // + r = TheAlarmTest.Session().GetAlarmDetails(TheClockAlarmIds[2], alarm); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(alarm.Status() == EAlarmStatusEnabled, __LINE__); + TheAlarmTest(alarm.Message() == _L("daily"), __LINE__); + TheAlarmTest(alarm.RepeatDefinition() == EAlarmRepeatDefintionRepeatDaily, __LINE__); + // + r = TheAlarmTest.Session().GetAlarmDetails(TheClockAlarmIds[3], alarm); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(alarm.Status() == EAlarmStatusEnabled, __LINE__); + TheAlarmTest(alarm.Message() == _L("workday"), __LINE__); + TheAlarmTest(alarm.RepeatDefinition() == EAlarmRepeatDefintionRepeatWorkday, __LINE__); + // + r = TheAlarmTest.Session().GetAlarmDetails(TheClockAlarmIds[4], alarm); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(alarm.Status() == EAlarmStatusEnabled, __LINE__); + TheAlarmTest(alarm.Message() == _L("after"), __LINE__); + TheAlarmTest(alarm.RepeatDefinition() == EAlarmRepeatDefintionRepeatWorkday, __LINE__); + // + r = TheAlarmTest.Session().GetAlarmDetails(TheClockAlarmIds[5], alarm); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(alarm.Status() == EAlarmStatusEnabled, __LINE__); + TheAlarmTest(alarm.Message() == _L("orphaned"), __LINE__); + TheAlarmTest(alarm.HasBecomeOrphaned(), __LINE__); + TheAlarmTest(alarm.RepeatDefinition() == EAlarmRepeatDefintionRepeatOnce, __LINE__); + // + r = TheAlarmTest.Session().GetAlarmDetails(TheClockAlarmIds[6], alarm); + TheAlarmTest(r == KErrNotFound, __LINE__); + TheAlarmTest(alarm.Status() == EAlarmStatusEnabled, __LINE__); + TheAlarmTest(alarm.Message() == _L("orphaned"), __LINE__); + TheAlarmTest(alarm.RepeatDefinition() == EAlarmRepeatDefintionRepeatOnce, __LINE__); + } + + +void TestInitUtcAlarmsL() +// +// Set up alarms for before test +// 1. clock 0 between shutdown time and restart time +// 2. clock 1 daily alarm +// 3. clock 2 workday alarm +// 4. clock 3 after restart time +// 5. orphaned alarm +// 6. session alarm +// 7. clock 4 in 24 hours +// 8. clock 5 in past (for review alarm) +// + { + TheAlarmTest.Test().Next(_L("Setting up UTC alarms before shut down")); + // + TInt r; + TInt count; + TASShdAlarm alarm; + TheTimeBefore.UniversalTime(); + // + count = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue(); + TheAlarmTest(count == 0, __LINE__); + + // 8. Clock 0 in past (for review alarm) + TheTimeBefore -= TTimeIntervalHours(1); + alarm.SetUtcNextDueTime(TheTimeBefore); + alarm.Message()=(_L("past")); + alarm.RepeatDefinition()=EAlarmRepeatDefintionRepeatOnce; + r = TheAlarmTest.Session().AlarmAdd(alarm); + TheAlarmTest(r == KErrNone, __LINE__); + TheClockAlarmIds[0] = alarm.Id(); + // + User::After(KTimeToWait); + r = TheAlarmTest.Session().GetAlarmDetails(alarm.Id(), alarm); + TheAlarmTest(alarm.State() == EAlarmStateNotified, __LINE__); + // + count = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue(); + TheAlarmTest(count == 0, __LINE__); + + // 1. Clock 1 between shutdown time and restart time + TheTimeBefore += TTimeIntervalDays(1); + alarm.SetUtcNextDueTime(TheTimeBefore); + alarm.Message()=(_L("once")); + alarm.RepeatDefinition()=(EAlarmRepeatDefintionRepeatOnce); + r = TheAlarmTest.Session().AlarmAdd(alarm); + TheAlarmTest(r == KErrNone, __LINE__); + TheClockAlarmIds[1] = alarm.Id(); + // + r = TheAlarmTest.Session().GetAlarmDetails(alarm.Id(), alarm); + TheAlarmTest(alarm.State() == EAlarmStateQueued, __LINE__); + + // 2. Clock 2 daily alarm + alarm.SetUtcNextDueTime(TheTimeBefore); + alarm.Message()=(_L("daily")); + alarm.RepeatDefinition()=EAlarmRepeatDefintionRepeatDaily; + r = TheAlarmTest.Session().AlarmAdd(alarm); + TheAlarmTest(r == KErrNone, __LINE__); + TheClockAlarmIds[2] = alarm.Id(); + // + count = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue(); + TheAlarmTest(count == 2, __LINE__); + + // 3. Clock 3 workday alarm + alarm.SetUtcNextDueTime(TheTimeBefore); + alarm.Message()=(_L("workday")); + alarm.RepeatDefinition()=EAlarmRepeatDefintionRepeatWorkday; + r = TheAlarmTest.Session().AlarmAdd(alarm); + TheAlarmTest(r == KErrNone, __LINE__); + TheClockAlarmIds[3] = alarm.Id(); + + // 4. Clock 4 after restart time + TheTimeAfter = TheTimeBefore + TTimeIntervalDays(2); + alarm.SetUtcNextDueTime(TheTimeAfter); + alarm.Message()=(_L("after")); + alarm.RepeatDefinition()=EAlarmRepeatDefintionRepeatWorkday; + r = TheAlarmTest.Session().AlarmAdd(alarm); + TheAlarmTest(r == KErrNone, __LINE__); + TheClockAlarmIds[4] = alarm.Id(); + // + count = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue(); + TheAlarmTest(count == 4, __LINE__); + + // 5. Orphaned alarm + alarm.SetUtcNextDueTime(TheTimeAfter); + alarm.Message()=(_L("orphaned")); + alarm.RepeatDefinition()=EAlarmRepeatDefintionRepeatOnce; + TheAlarmTest.Session().AlarmAddWithNotification(TheStatus, alarm); + TheAlarmTest(alarm.Id() != KNullAlarmId, __LINE__); + TheAlarmTest(TheStatus == KRequestPending, __LINE__); + r = TheAlarmTest.Session().SetAlarmCharacteristics(alarm.Id(), 0); + TheAlarmTest(r == KErrNone, __LINE__); + User::WaitForRequest(TheStatus); + TheClockAlarmIds[5] = alarm.Id(); + // + count = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue(); + TheAlarmTest(count == 5, __LINE__); + + // 7. Clock 5 in 24 hours + alarm.Reset(); + alarm.Characteristics().ClearAll(); + alarm.SetUtcNextDueTime(TheTimeAfter); + alarm.Message()=(_L("next24")); + alarm.RepeatDefinition()=EAlarmRepeatDefintionRepeatNext24Hours; + r = TheAlarmTest.Session().AlarmAdd(alarm); + TheAlarmTest(r == KErrNone, __LINE__); + TheClockAlarmIds[6] = alarm.Id(); + // + count = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue(); + TheAlarmTest(count == 6, __LINE__); + + // 6. Session alarm + alarm.SetUtcNextDueTime(TheTimeAfter); + alarm.Message()=(_L("different")); + alarm.RepeatDefinition()=EAlarmRepeatDefintionRepeatOnce; + TheAlarmTest.Session().AlarmAddWithNotification(TheStatus, alarm); + TheAlarmTest(alarm.Id() != KNullAlarmId, __LINE__); + TheAlarmTest(TheStatus == KRequestPending, __LINE__); + TheClockAlarmIds[7] = alarm.Id(); + + // Verification + count = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue(); + TheAlarmTest(count == 7, __LINE__); + // + count = TheAlarmTest.CountOrphanedAlarmsL(); + TheAlarmTest(count == 1, __LINE__); + } + + +void TestPostShutDownUtcL() +// +// Check persisted correct information +// 1. Clock 0 alarm deleted - its added to the queue when the backup store +// is internalized, but as soon as the server starts the scheduler, the +// change notifier runs and the date/time change is reported. At this point +// the alarm is more than 2 days in the past, and as such, any "Once only" +// alarm (regardless of State()) which is set in the past is deleted from +// the queue. +// 2. Clock 1 set between shutdown and restart time. Again this is deleted +// because when the change notifier runs, its more than a day old and +// so its automatically dequeued. +// 3. Clock 2 (daily repeat). This is just reset for the next valid repeat. +// 4. Clock 3 (workday repeat). This is just reset for the next valid repeat. +// 5. Clock 4 (workday repeat). This still uses the original "after the restart" +// expiry time. +// 6. Alarm 5 (orphaned alarm). This is still orphaned and is still valid. +// Effectively, this is a change in behaviour from the old EALWL, where +// old orphaned alarms were deleted when internalized. +// 7. Clock 5 (was next 24 hours repeat, is now RepeatOnce and orphaned). +// 8. Session alarm (which was pending when the server shut down). This is +// cleaned up and dequeued as part of the server shut-down process. When +// the session disconnects, any session alarms for that session are +// dequeued (by matching against the session id). +// + { + TheAlarmTest.Test().Next(_L("Comparing persisted UTC alarms")); + // + TInt c; + c = TheAlarmTest.CountOrphanedAlarmsL(); + TheAlarmTest(c == 1, __LINE__); + // + c = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue(); + TheAlarmTest(c == 4, __LINE__); + // + TInt r; + TASShdAlarm alarm; + // + r = TheAlarmTest.Session().GetAlarmDetails(TheClockAlarmIds[0], alarm); + TheAlarmTest(r == KErrNone, __LINE__); + // + r = TheAlarmTest.Session().GetAlarmDetails(TheClockAlarmIds[1], alarm); + TheAlarmTest(r == KErrNotFound, __LINE__); + // + r = TheAlarmTest.Session().GetAlarmDetails(TheClockAlarmIds[2], alarm); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(alarm.Status() == EAlarmStatusEnabled, __LINE__); + TheAlarmTest(alarm.Message() == _L("daily"), __LINE__); + TheAlarmTest(alarm.RepeatDefinition() == EAlarmRepeatDefintionRepeatDaily, __LINE__); + // + r = TheAlarmTest.Session().GetAlarmDetails(TheClockAlarmIds[3], alarm); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(alarm.Status() == EAlarmStatusEnabled, __LINE__); + TheAlarmTest(alarm.Message() == _L("workday"), __LINE__); + TheAlarmTest(alarm.RepeatDefinition() == EAlarmRepeatDefintionRepeatWorkday, __LINE__); + // + r = TheAlarmTest.Session().GetAlarmDetails(TheClockAlarmIds[4], alarm); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(alarm.Status() == EAlarmStatusEnabled, __LINE__); + TheAlarmTest(alarm.Message() == _L("after"), __LINE__); + TheAlarmTest(alarm.RepeatDefinition() == EAlarmRepeatDefintionRepeatWorkday, __LINE__); + // + r = TheAlarmTest.Session().GetAlarmDetails(TheClockAlarmIds[5], alarm); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(alarm.Status() == EAlarmStatusEnabled, __LINE__); + TheAlarmTest(alarm.Message() == _L("orphaned"), __LINE__); + TheAlarmTest(alarm.HasBecomeOrphaned(), __LINE__); + TheAlarmTest(alarm.RepeatDefinition() == EAlarmRepeatDefintionRepeatOnce, __LINE__); + // + r = TheAlarmTest.Session().GetAlarmDetails(TheClockAlarmIds[6], alarm); + TheAlarmTest(r == KErrNotFound, __LINE__); + TheAlarmTest(alarm.Status() == EAlarmStatusEnabled, __LINE__); + TheAlarmTest(alarm.Message() == _L("orphaned"), __LINE__); + TheAlarmTest(alarm.RepeatDefinition() == EAlarmRepeatDefintionRepeatOnce, __LINE__); + } + +static void DoTestsL() + { + CActiveScheduler* scheduler = new(ELeave) CActiveScheduler; + CleanupStack::PushL(scheduler); + CActiveScheduler::Install(scheduler); + +#if defined(__WINS__) && defined(_DEBUG) + RPIMTestServer pimServ; + User::LeaveIfError(pimServ.Connect()); +#endif + +#ifdef __WINS__ + // This instance of TASShdAlarm is needed to avoid a link error under wins/urel + // It's not actually used for anything + TASShdAlarm dummy; +#endif // __WINS__ + + + TheAlarmTest.Next(_L("Connecting to server")); + TInt r = TheAlarmTest.Session().Connect(); + TheAlarmTest(r == KErrNone, __LINE__); + // + TheAlarmTest.TestClearStoreL(); + TInt count = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue(); + TheAlarmTest(count == 0, __LINE__); + // +#if !defined(_DEBUG) + TheAlarmTest.Test().Printf(_L("THIS TEST IS A DEBUG TEST ONLY\n")); +#else // _DEBUG +#ifdef __WINS__ + TheAlarmTest.Session().__DbgPreventUserNotify(ETrue); + TestInitAlarmsL(); + + + TheAlarmTest.Test().Next(_L("Closing Alarm Server")); + TheAlarmTest.Session().__DbgShutDownServer(); + TheAlarmTest.Session().Close(); + // + TTime newTime; + newTime.HomeTime(); + newTime += TTimeIntervalDays(2); + User::LeaveIfError(pimServ.SetHomeTime(newTime)); + + User::After(KTimeToWait); + // + + + TheAlarmTest.Next(_L("Restarting Alarm Server")); + TheAlarmTest.TestStartServers(); + r=TheAlarmTest.Session().Connect(); + TheAlarmTest(r==KErrNone, __LINE__); + // + TestPostShutDownL(); +#endif // __WINS__ +#endif // _DEBUG + + + TheAlarmTest.Next(_L("Connecting to server")); + r = TheAlarmTest.Session().Connect(); + TheAlarmTest(r == KErrNone, __LINE__); + // + TheAlarmTest.TestClearStoreL(); + count = TheAlarmTest.Session().NumberOfAlarmsActiveInQueue(); + TheAlarmTest(count == 0, __LINE__); + + // +#if !defined(_DEBUG) + TheAlarmTest.Test().Printf(_L("THIS TEST IS A DEBUG TEST ONLY\n")); +#else // _DEBUG +#ifdef __WINS__ + TheAlarmTest.Session().__DbgPreventUserNotify(ETrue); + TestInitUtcAlarmsL(); + + TheAlarmTest.Test().Next(_L("Closing Alarm Server")); + TheAlarmTest.Session().__DbgShutDownServer(); + TheAlarmTest.Session().Close(); + // + newTime.HomeTime(); + newTime += TTimeIntervalDays(2); + + pimServ.SetHomeTime(newTime); + + User::After(KTimeToWait); + // + + TheAlarmTest.Next(_L("Restarting Alarm Server")); + TheAlarmTest.TestStartServers(); + r=TheAlarmTest.Session().Connect(); + TheAlarmTest(r==KErrNone, __LINE__); + // + TestPostShutDownUtcL(); +#endif // __WINS__ +#endif // _DEBUG + + TheAlarmTest.TestClearStoreL(); + TheAlarmTest.Session().Close(); + +#if defined(__WINS__) && defined(_DEBUG) + pimServ.Close(); +#endif + + CleanupStack::PopAndDestroy(scheduler); + } + +/** +@SYMTestCaseID PIM-TQUEUERESTORATION-0001 +*/ +GLDEF_C TInt E32Main() +// +// Test the alarm server. +// + { + __UHEAP_MARK; + TInt ret = KErrNone; + CTrapCleanup* cleanup = CTrapCleanup::New(); + if (!cleanup) + { + return KErrNoMemory; + } + + TheAlarmTest.Title(); + TheAlarmTest.Start(_L("@SYMTestCaseID PIM-TQUEUERESTORATION-0001 TQueueRestoration")); + TheAlarmTest.TestStartServers(); + // + TRAPD(error, DoTestsL()); + TheAlarmTest(error == KErrNone, __LINE__); + // + TRAP(ret,TheAlarmTest.EndL()); + TheAlarmTest.Test().Close(); + ASTstAlarmTest::Close(); + + delete cleanup; + __UHEAP_MARKEND; + return ret; + }