--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysstatemgmt/systemstarter/test/tstartsafe/src/tstartsafe_procmonsysrestart.cpp Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,129 @@
+// Copyright (c) 2007-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:
+//
+
+/**
+ @file
+ @test
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <startupproperties.h>
+
+#include "startsafe.h"
+#include "testapps.h"
+#include "testprocgoodsession.h"
+#include "tstartsafe_procmonsysrestart.h"
+#include "tpowerdownclient.h"
+
+
+CAppFwkStartSafeTestStepProcMonSysRestart::CAppFwkStartSafeTestStepProcMonSysRestart()
+ {
+ SetTestStepName(KCTestCaseProcMonSysRestart);
+ }
+
+CAppFwkStartSafeTestStepProcMonSysRestart::~CAppFwkStartSafeTestStepProcMonSysRestart()
+ {
+ delete iNotifier;
+ }
+
+/**
+Old Test CaseID APPFWK-STARTSAFE-0014
+New Test CaseID DEVSRVS-SYSSTART-STARTSAFE-0014
+ */
+
+TVerdict CAppFwkStartSafeTestStepProcMonSysRestart::doTestStepL()
+ {
+
+#ifdef __WINSCW__
+ ASSERT(0);
+#endif
+
+ CActiveScheduler* sched = new(ELeave) CActiveScheduler;
+ CleanupStack::PushL(sched);
+ CActiveScheduler::Install(sched);
+
+ iNotifier = CSaveNotifier::NewL(*this);
+
+ CStartSafe* startSafe = CStartSafe::NewL();
+ CleanupStack::PushL( startSafe );
+
+ CStartupProperties* prop = CStartupProperties::NewLC();
+ prop->SetFileParamsL(KTestProcGood, KNullDesC);
+ prop->SetStartMethod(EWaitForStart);
+ prop->SetMonitored(ETrue);
+ prop->SetRecoveryParams(ERestartOS, 0);
+
+ TInt tried;
+ RProcess proc;
+ CleanupClosePushL(proc);
+ TRAPD(err, startSafe->StartAndMonitorL(*prop, proc, tried));
+ TEST(KErrNone == err);
+ CleanupStack::Pop(&proc);
+ CleanupStack::PopAndDestroy(prop);
+ CleanupStack::PopAndDestroy(startSafe);
+ INFO_PRINTF1(_L("Process monitoring setup with TRecoveryMethod=ERestartOS"));
+
+ proc.Kill(KErrNone);
+ proc.Close();
+
+ TTime init;
+ init.UniversalTime();
+ INFO_PRINTF4( _L("Process killed at time %d:%d.%d"), init.DateTime().Minute(), init.DateTime().Second(), init.DateTime().MicroSecond());
+ INFO_PRINTF1(_L("Starting scheduler (expecting an OS restart)"));
+ CActiveScheduler::Start(); //Wait for MSaveObserver callback
+
+ //resume here after callback has stopped the scheduler
+ TESTE(iCallbackReceived, iCallbackReceived);
+ if(iCallbackReceived)
+ {
+ const TTimeIntervalMicroSeconds elapsedTime = iShutdownPerformed.MicroSecondsFrom(init);
+ const TDateTime dt = iShutdownPerformed.DateTime();
+ const TInt64 value = elapsedTime.Int64();
+ INFO_PRINTF5(_L("Shutdown callback received at time %d:%d.%d (after %d microseconds)"), dt.Minute(), dt.Second(), dt.MicroSecond(), value);
+ TESTE((value >= 0) && (value < 1000000), value); // within 1 second
+ }
+ else
+ {
+ INFO_PRINTF1( _L("Restart didn't take place :-("));
+ TEST(EFalse);
+ }
+
+ // Now call CPowerdownClient::QueryServerPowerState() which will in turn call the method 'ServerPowerState()'
+ // to stop the shutdown. This function call will cause the shutdown server in syslibs/pwrcli to cancel power off.
+ INFO_PRINTF1(_L("Aborting shutdown."));
+ TBool powerOff = EFalse;
+ CPowerdownClient* powerdownclient = CPowerdownClient::NewL();
+ CleanupStack::PushL(powerdownclient);
+ TEST(KErrNone == powerdownclient->QueryServerPowerState(iNotifier,powerOff));
+ TEST(powerOff);
+ CleanupStack::PopAndDestroy(powerdownclient);
+
+ CleanupStack::PopAndDestroy(sched);
+ return TestStepResult();
+ }
+
+void CAppFwkStartSafeTestStepProcMonSysRestart::SaveL(TSaveType /*aSaveType*/)
+ {
+ INFO_PRINTF1(_L("Callback arrived"));
+
+ // Do assertions in the doTestStepL function, just save values for now
+ iCallbackReceived = ETrue;
+ iShutdownPerformed.UniversalTime();
+
+ iNotifier->DelayRequeue();
+
+ CActiveScheduler::Stop(); //resume doTestStepL
+ }
+