commonappservices/alarmserver/Test/TQueueRestoration.cpp
changeset 0 2e3d3ce01487
--- /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;
+    }