--- /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;
+ }