diff -r 000000000000 -r 2e3d3ce01487 commonappservices/alarmserver/Test/TAlarmData.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commonappservices/alarmserver/Test/TAlarmData.cpp Tue Feb 02 10:12:00 2010 +0200 @@ -0,0 +1,551 @@ +// 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" + +// System includes +#include + +// Constants +const TInt KWaitInterval = 10; // time delay after which alarms complete in seconds. +// Literal constants +_LIT8(KSomeAlarmData, "This is some 8-bit data"); + + +static void testDataInvalidAlarmL() +// +// +// + { + TheAlarmTest.Test().Next(_L("Testing data methods with invalid alarm ids")); + // + TInt r; + // + r = TheAlarmTest.Session().AlarmDataSize(KNullAlarmId); + TheAlarmTest(r == KErrNotFound, __LINE__); + // + + // AlarmDataDetatch has been deprecated (since it's spelt wrong). + // We still call it here though, since removing it would break SC. + r = TheAlarmTest.Session().AlarmDataDetatch(KNullAlarmId); + TheAlarmTest(r == KErrNotFound, __LINE__); + // + r = TheAlarmTest.Session().AlarmDataAttachL(KNullAlarmId, KSomeAlarmData); + TheAlarmTest(r == KErrNotFound, __LINE__); + // + HBufC8* buf = HBufC8::NewLC(KSomeAlarmData().Size()); + TPtr8 pBuf(buf->Des()); + r = TheAlarmTest.Session().GetAlarmData(KNullAlarmId, pBuf); + TheAlarmTest(r == KErrNotFound, __LINE__); + TheAlarmTest(*buf == KNullDesC8, __LINE__); + CleanupStack::PopAndDestroy(buf); + + HBufC8* buf2 = NULL; + r = TheAlarmTest.Session().GetAlarmData(KNullAlarmId, buf2); + TheAlarmTest(r == KErrNotFound, __LINE__); + TheAlarmTest(buf2 == NULL, __LINE__); + } + + +static void testDataValidAlarmL() +// +// +// + { + + TheAlarmTest.Test().Next(_L("Data API test")); + + TInt r; + TAlarmId alarmId; + TASShdAlarm alarm; + static TRequestStatus status; + // + alarm.Message() = _L("Alarm with data"); + alarm.NextDueTime().HomeTime(); + alarm.NextDueTime() += TTimeIntervalSeconds(KWaitInterval); + // + r = TheAlarmTest.Session().AlarmAdd(alarm); + TheAlarmTest(r==KErrNone, __LINE__); + // + r = TheAlarmTest.Session().AlarmDataSize(alarm.Id()); + TheAlarmTest(r == KErrNotFound, __LINE__); + // + r = TheAlarmTest.Session().AlarmDataDetach(alarm.Id()); + TheAlarmTest(r == KErrNotFound, __LINE__); + // + TheAlarmTest.WaitForNotificationBufferToBeEmptied(status, alarmId); + r = TheAlarmTest.Session().AlarmDataAttachL(alarm.Id(), KSomeAlarmData); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(status == EAlarmChangeEventAlarmData, __LINE__); + TheAlarmTest(alarmId = alarm.Id(), __LINE__); + User::WaitForRequest(status); + // + TheAlarmTest.WaitForNotificationBufferToBeEmptied(status, alarmId); + r = TheAlarmTest.Session().AlarmDataAttachL(alarm.Id(), KSomeAlarmData); + TheAlarmTest(r == KErrInUse, __LINE__); + TheAlarmTest(status == KRequestPending, __LINE__); + // + r = TheAlarmTest.Session().AlarmDataSize(alarm.Id()); + TheAlarmTest(r == KSomeAlarmData().Size()); + // + TheAlarmTest.WaitForNotificationBufferToBeEmptied(status, alarmId); + r = TheAlarmTest.Session().AlarmDelete(alarm.Id()); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest.TestEventBuffer(EAlarmChangeEventAlarmData, status, alarmId); + // + r = TheAlarmTest.Session().AlarmDataSize(alarm.Id()); + TheAlarmTest(r == KErrNotFound, __LINE__); + // + r = TheAlarmTest.Session().AlarmDataDetach(alarm.Id()); + TheAlarmTest(r == KErrNotFound, __LINE__); + // + alarm.NextDueTime().HomeTime(); + alarm.NextDueTime() += TTimeIntervalSeconds(KWaitInterval); + r = TheAlarmTest.Session().AlarmAdd(alarm); + TheAlarmTest(r==KErrNone, __LINE__); + // + TheAlarmTest.WaitForNotificationBufferToBeEmptied(status, alarmId); + r = TheAlarmTest.Session().AlarmDataAttachL(alarm.Id(), KSomeAlarmData); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(status == EAlarmChangeEventAlarmData, __LINE__); + TheAlarmTest(alarmId = alarm.Id(), __LINE__); + User::WaitForRequest(status); + // + TheAlarmTest.WaitForNotificationBufferToBeEmptied(status, alarmId); + r = TheAlarmTest.Session().AlarmDataDetach(alarm.Id()); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest.TestEventBuffer(EAlarmChangeEventAlarmData, status, alarmId); + // + r = TheAlarmTest.Session().AlarmDataDetach(alarm.Id()); + TheAlarmTest(r == KErrNotFound, __LINE__); + // + r = TheAlarmTest.Session().AlarmDataSize(alarm.Id()); + TheAlarmTest(r == KErrNotFound, __LINE__); + // + TheAlarmTest.WaitForNotificationBufferToBeEmptied(status, alarmId); + r = TheAlarmTest.Session().AlarmDataAttachL(alarm.Id(), KSomeAlarmData); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(status == EAlarmChangeEventAlarmData, __LINE__); + TheAlarmTest(alarmId = alarm.Id(), __LINE__); + User::WaitForRequest(status); + // + HBufC8* buf = HBufC8::NewLC(KSomeAlarmData().Size()); + TPtr8 pBuf(buf->Des()); + r = TheAlarmTest.Session().GetAlarmData(alarm.Id(), pBuf); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(*buf == KSomeAlarmData, __LINE__); + // + HBufC8* buf2 = NULL; + r = TheAlarmTest.Session().GetAlarmData(alarm.Id(), buf2); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(*buf2 == KSomeAlarmData, __LINE__); + delete buf2; + // + + + + TheAlarmTest.Test().Next(_L("Waiting for alarm to expire")); + TheAlarmTest.WaitForEvent(EAlarmChangeEventTimerExpired, status, alarmId); + TheAlarmTest(alarmId == alarm.Id(), __LINE__); + // + r = TheAlarmTest.Session().AlarmDataAttachL(alarm.Id(), KSomeAlarmData); + TheAlarmTest(r == KErrInUse, __LINE__); + // + r = TheAlarmTest.Session().AlarmDataSize(alarm.Id()); + TheAlarmTest(r == KSomeAlarmData().Size(), __LINE__); + // + r = TheAlarmTest.Session().AlarmDelete(alarm.Id()); + TheAlarmTest(r == KErrNone, __LINE__); + // + + TheAlarmTest.Session().AlarmAddWithNotification(status, alarm, KSomeAlarmData); + TheAlarmTest(alarmId = alarm.Id(), __LINE__); + HBufC8* alarmdata = HBufC8::NewLC(KSomeAlarmData().Size()); + TPtr8 pAlarmdata(alarmdata->Des()); + r = TheAlarmTest.Session().GetAlarmData(alarm.Id(), pAlarmdata); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(*alarmdata == KSomeAlarmData, __LINE__); + CleanupStack::PopAndDestroy(alarmdata); + // + r = TheAlarmTest.Session().GetAlarmData(alarm.Id(), buf2); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(*buf2 == KSomeAlarmData, __LINE__); + delete buf2; + // + alarm.Reset(); + alarm.Message() = _L("Alarm with data"); + alarm.NextDueTime().HomeTime(); + alarm.NextDueTime() += TTimeIntervalSeconds(KWaitInterval); + // + r = TheAlarmTest.Session().AlarmAdd(alarm, KSomeAlarmData); + TheAlarmTest(alarmId = alarm.Id(), __LINE__); + HBufC8* alarmdata1 = HBufC8::NewLC(KSomeAlarmData().Size()); + TPtr8 pAlarmdata1(alarmdata1->Des()); + r = TheAlarmTest.Session().GetAlarmData(alarm.Id(), pAlarmdata1); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(*alarmdata1 == KSomeAlarmData, __LINE__); + CleanupStack::PopAndDestroy(alarmdata1); + // + r = TheAlarmTest.Session().GetAlarmData(alarm.Id(), buf2); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(*buf2 == KSomeAlarmData, __LINE__); + delete buf2; + // + +#ifdef _DEBUG +#ifdef __WINS__ + + + TheAlarmTest.Test().Next(_L("Debug only - shutting down server")); + TheAlarmTest.Session().__DbgShutDownServer(); + User::After(3 * 1000000); + // + + + TheAlarmTest.Test().Next(_L("Debug only - starting up server")); + TheAlarmTest(TheAlarmTest.Session().Connect() == KErrNone, __LINE__); + // + + + TheAlarmTest.Test().Next(_L("Debug only - testing data restoration")); + // + r = TheAlarmTest.Session().AlarmDataAttachL(alarm.Id(), KSomeAlarmData); + TheAlarmTest(r == KErrInUse, __LINE__); + // + r = TheAlarmTest.Session().AlarmDataSize(alarm.Id()); + TheAlarmTest(r == KSomeAlarmData().Size(), __LINE__); + // + r = TheAlarmTest.Session().AlarmDelete(alarm.Id()); + TheAlarmTest(r == KErrNone, __LINE__); + // + r = TheAlarmTest.Session().AlarmDataSize(alarm.Id()); + TheAlarmTest(r == KErrNotFound, __LINE__); + // + r = TheAlarmTest.Session().AlarmDataDetach(alarm.Id()); + TheAlarmTest(r == KErrNotFound, __LINE__); + // + r = TheAlarmTest.Session().AlarmAdd(alarm); + TheAlarmTest(r==KErrNone, __LINE__); + // + r = TheAlarmTest.Session().AlarmDataAttachL(alarm.Id(), KSomeAlarmData); + TheAlarmTest(r == KErrNone, __LINE__); + // + r = TheAlarmTest.Session().AlarmDataDetach(alarm.Id()); + TheAlarmTest(r == KErrNone, __LINE__); + // + r = TheAlarmTest.Session().AlarmDataSize(alarm.Id()); + TheAlarmTest(r == KErrNotFound, __LINE__); + +#endif +#endif + CleanupStack::PopAndDestroy(buf); + } + + +static void testDataInvalidUtcAlarmL() + { + TheAlarmTest.Test().Next(_L("Testing data methods with invalid alarm ids")); + // + TInt r; + // + r = TheAlarmTest.Session().AlarmDataSize(KNullAlarmId); + TheAlarmTest(r == KErrNotFound, __LINE__); + // + + // AlarmDataDetatch has been deprecated (since it's spelt wrong). + // We still call it here though, since removing it would break SC. + r = TheAlarmTest.Session().AlarmDataDetatch(KNullAlarmId); + TheAlarmTest(r == KErrNotFound, __LINE__); + // + r = TheAlarmTest.Session().AlarmDataAttachL(KNullAlarmId, KSomeAlarmData); + TheAlarmTest(r == KErrNotFound, __LINE__); + // + HBufC8* buf = HBufC8::NewLC(KSomeAlarmData().Size()); + TPtr8 pBuf(buf->Des()); + r = TheAlarmTest.Session().GetAlarmData(KNullAlarmId, pBuf); + TheAlarmTest(r == KErrNotFound, __LINE__); + TheAlarmTest(*buf == KNullDesC8, __LINE__); + CleanupStack::PopAndDestroy(buf); + // + // + HBufC8* buf2 = NULL; + r = TheAlarmTest.Session().GetAlarmData(KNullAlarmId, buf2); + TheAlarmTest(r == KErrNotFound, __LINE__); + TheAlarmTest(buf2 == NULL, __LINE__); + // + } + +static void testDataValidUtcAlarmL() + { + + TheAlarmTest.Test().Next(_L("Data API test")); + + TInt r; + TAlarmId alarmId; + TASShdAlarm alarm; + static TRequestStatus status; + TTime time; + // + alarm.Message()=(_L("Alarm with data")); + time.UniversalTime(); + time += TTimeIntervalSeconds(KWaitInterval); + alarm.SetUtcNextDueTime(time); + // + r = TheAlarmTest.Session().AlarmAdd(alarm); + TheAlarmTest(r==KErrNone, __LINE__); + // + r = TheAlarmTest.Session().AlarmDataSize(alarm.Id()); + TheAlarmTest(r == KErrNotFound, __LINE__); + // + r = TheAlarmTest.Session().AlarmDataDetach(alarm.Id()); + TheAlarmTest(r == KErrNotFound, __LINE__); + // + TheAlarmTest.WaitForNotificationBufferToBeEmptied(status, alarmId); + r = TheAlarmTest.Session().AlarmDataAttachL(alarm.Id(), KSomeAlarmData); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(status == EAlarmChangeEventAlarmData, __LINE__); + TheAlarmTest(alarmId = alarm.Id(), __LINE__); + User::WaitForRequest(status); + // + TheAlarmTest.WaitForNotificationBufferToBeEmptied(status, alarmId); + r = TheAlarmTest.Session().AlarmDataAttachL(alarm.Id(), KSomeAlarmData); + TheAlarmTest(r == KErrInUse, __LINE__); + TheAlarmTest(status == KRequestPending, __LINE__); + // + r = TheAlarmTest.Session().AlarmDataSize(alarm.Id()); + TheAlarmTest(r == KSomeAlarmData().Size()); + // + TheAlarmTest.WaitForNotificationBufferToBeEmptied(status, alarmId); + r = TheAlarmTest.Session().AlarmDelete(alarm.Id()); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest.TestEventBuffer(EAlarmChangeEventAlarmData, status, alarmId); + // + r = TheAlarmTest.Session().AlarmDataSize(alarm.Id()); + TheAlarmTest(r == KErrNotFound, __LINE__); + // + r = TheAlarmTest.Session().AlarmDataDetach(alarm.Id()); + TheAlarmTest(r == KErrNotFound, __LINE__); + // + time.UniversalTime(); + time += TTimeIntervalSeconds(KWaitInterval); + alarm.SetUtcNextDueTime(time); + r = TheAlarmTest.Session().AlarmAdd(alarm); + TheAlarmTest(r==KErrNone, __LINE__); + // + TheAlarmTest.WaitForNotificationBufferToBeEmptied(status, alarmId); + r = TheAlarmTest.Session().AlarmDataAttachL(alarm.Id(), KSomeAlarmData); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(status == EAlarmChangeEventAlarmData, __LINE__); + TheAlarmTest(alarmId = alarm.Id(), __LINE__); + User::WaitForRequest(status); + // + TheAlarmTest.WaitForNotificationBufferToBeEmptied(status, alarmId); + r = TheAlarmTest.Session().AlarmDataDetach(alarm.Id()); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest.TestEventBuffer(EAlarmChangeEventAlarmData, status, alarmId); + // + r = TheAlarmTest.Session().AlarmDataDetach(alarm.Id()); + TheAlarmTest(r == KErrNotFound, __LINE__); + // + r = TheAlarmTest.Session().AlarmDataSize(alarm.Id()); + TheAlarmTest(r == KErrNotFound, __LINE__); + // + TheAlarmTest.WaitForNotificationBufferToBeEmptied(status, alarmId); + r = TheAlarmTest.Session().AlarmDataAttachL(alarm.Id(), KSomeAlarmData); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(status == EAlarmChangeEventAlarmData, __LINE__); + TheAlarmTest(alarmId = alarm.Id(), __LINE__); + User::WaitForRequest(status); + // + HBufC8* buf = HBufC8::NewLC(KSomeAlarmData().Size()); + TPtr8 pBuf(buf->Des()); + r = TheAlarmTest.Session().GetAlarmData(alarm.Id(), pBuf); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(*buf == KSomeAlarmData, __LINE__); + // + HBufC8* buf2 = NULL; + r = TheAlarmTest.Session().GetAlarmData(alarm.Id(), buf2); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(*buf2 == KSomeAlarmData, __LINE__); + delete buf2; + // + + + TheAlarmTest.Test().Next(_L("Waiting for alarm to expire")); + TheAlarmTest.WaitForEvent(EAlarmChangeEventTimerExpired, status, alarmId); + TheAlarmTest(alarmId == alarm.Id(), __LINE__); + // + r = TheAlarmTest.Session().AlarmDataAttachL(alarm.Id(), KSomeAlarmData); + TheAlarmTest(r == KErrInUse, __LINE__); + // + r = TheAlarmTest.Session().AlarmDataSize(alarm.Id()); + TheAlarmTest(r == KSomeAlarmData().Size(), __LINE__); + // + r = TheAlarmTest.Session().AlarmDelete(alarm.Id()); + TheAlarmTest(r == KErrNone, __LINE__); + // + + TheAlarmTest.Session().AlarmAddWithNotification(status, alarm, KSomeAlarmData); + TheAlarmTest(alarmId = alarm.Id(), __LINE__); + HBufC8* alarmdata = HBufC8::NewLC(KSomeAlarmData().Size()); + TPtr8 pAlarmdata(alarmdata->Des()); + r = TheAlarmTest.Session().GetAlarmData(alarm.Id(), pAlarmdata); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(*alarmdata == KSomeAlarmData, __LINE__); + CleanupStack::PopAndDestroy(alarmdata); + // + r = TheAlarmTest.Session().GetAlarmData(alarm.Id(), buf2); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(*buf2 == KSomeAlarmData, __LINE__); + delete buf2; + // + alarm.Reset(); + alarm.Message()=(_L("Alarm with data")); + time.UniversalTime(); + time += TTimeIntervalSeconds(KWaitInterval); + alarm.SetUtcNextDueTime(time); + // + r = TheAlarmTest.Session().AlarmAdd(alarm, KSomeAlarmData); + TheAlarmTest(alarmId = alarm.Id(), __LINE__); + HBufC8* alarmdata1 = HBufC8::NewLC(KSomeAlarmData().Size()); + TPtr8 pAlarmdata1(alarmdata1->Des()); + r = TheAlarmTest.Session().GetAlarmData(alarm.Id(), pAlarmdata1); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(*alarmdata1 == KSomeAlarmData, __LINE__); + CleanupStack::PopAndDestroy(alarmdata1); + // + r = TheAlarmTest.Session().GetAlarmData(alarm.Id(), buf2); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest(*buf2 == KSomeAlarmData, __LINE__); + delete buf2; + // + +#ifdef _DEBUG +#ifdef __WINS__ + + + TheAlarmTest.Test().Next(_L("Debug only - shutting down server")); + TheAlarmTest.Session().__DbgShutDownServer(); + User::After(3 * 1000000); + // + + + TheAlarmTest.Test().Next(_L("Debug only - starting up server")); + TheAlarmTest(TheAlarmTest.Session().Connect() == KErrNone, __LINE__); + // + + + TheAlarmTest.Test().Next(_L("Debug only - testing data restoration")); + // + r = TheAlarmTest.Session().AlarmDataAttachL(alarm.Id(), KSomeAlarmData); + TheAlarmTest(r == KErrInUse, __LINE__); + // + r = TheAlarmTest.Session().AlarmDataSize(alarm.Id()); + TheAlarmTest(r == KSomeAlarmData().Size(), __LINE__); + // + r = TheAlarmTest.Session().AlarmDelete(alarm.Id()); + TheAlarmTest(r == KErrNone, __LINE__); + // + r = TheAlarmTest.Session().AlarmDataSize(alarm.Id()); + TheAlarmTest(r == KErrNotFound, __LINE__); + // + r = TheAlarmTest.Session().AlarmDataDetach(alarm.Id()); + TheAlarmTest(r == KErrNotFound, __LINE__); + // + r = TheAlarmTest.Session().AlarmAdd(alarm); + TheAlarmTest(r==KErrNone, __LINE__); + // + r = TheAlarmTest.Session().AlarmDataAttachL(alarm.Id(), KSomeAlarmData); + TheAlarmTest(r == KErrNone, __LINE__); + // + r = TheAlarmTest.Session().AlarmDataDetach(alarm.Id()); + TheAlarmTest(r == KErrNone, __LINE__); + // + r = TheAlarmTest.Session().AlarmDataSize(alarm.Id()); + TheAlarmTest(r == KErrNotFound, __LINE__); + +#endif +#endif + CleanupStack::PopAndDestroy(buf); + } + +/** +@SYMTestCaseID PIM-TALARMDATA-0001 +*/ +static void doTestsL() + { + CActiveScheduler* scheduler = new (ELeave) CActiveScheduler; + CleanupStack::PushL(scheduler); + CActiveScheduler::Install(scheduler); + + const TInt KGmtOffset = 3600; + _LIT(KTime, "20040730:050000.000000"); //In summer time + TInt err = User::SetUTCTimeAndOffset(TTime(KTime), KGmtOffset); + + TheAlarmTest.Start(_L("@SYMTestCaseID PIM-TALARMDATA-0001 Connecting to server")); + TInt r = TheAlarmTest.Session().Connect(); + TheAlarmTest(r == KErrNone, __LINE__); + TheAlarmTest.TestClearStoreL(); + + TheAlarmTest.Session().__DbgPreventUserNotify(ETrue); + + // Test valid alarm set with local wall-clock time. + TheAlarmTest.Test().Printf(_L("Alarms set with local wall-clock time.\n")); + testDataValidAlarmL(); + TheAlarmTest.TestClearStoreL(); + TheAlarmTest.Test().Printf(_L("Alarms set with UTC time.\n")); + + // Test valid alarm set with UTC time. + testDataValidUtcAlarmL(); + + // Test invalid alarm set with local wall-clock time. + TheAlarmTest.Test().Printf(_L("Alarms set with ocal wall-clock time.\n")); + testDataInvalidAlarmL(); + + // Tests invalid alarm set with UTC time. + TheAlarmTest.Test().Printf(_L("Alarms set with UTC time.\n")); + testDataInvalidUtcAlarmL(); + + TheAlarmTest.TestClearStoreL(); + TheAlarmTest.Session().Close(); + + CleanupStack::PopAndDestroy(scheduler); + } + +GLDEF_C TInt E32Main() +// +// Test the alarm server. +// + { + __UHEAP_MARK; + TInt ret = KErrNone; + CTrapCleanup* cleanup = CTrapCleanup::New(); + if (!cleanup) + return KErrNoMemory; + + TheAlarmTest.Title(); + TheAlarmTest.TestStartServers(); + // + TRAPD(error, doTestsL()); + TheAlarmTest(error == KErrNone, __LINE__); + // + TRAP(ret,TheAlarmTest.EndL()); + TheAlarmTest.Test().Close(); + ASTstAlarmTest::Close(); + + delete cleanup; + __UHEAP_MARKEND; + return ret; + }