--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysstatemgmt/systemstarter/test/tsysmon/src/tsysmon_stepbase.cpp Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,139 @@
+// 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 <apacmdln.h>
+#include <apgcli.h>
+#include <sysmonclisess.h>
+#include <startupproperties.h>
+#include "testprocgoodsession.h"
+#include "tsysmon_stepbase.h"
+
+/**
+Waits for the process to rendevouz, then resumes it.
+*/
+void CTestStepBase::ResumeL(RProcess& aProcess)
+ {
+ TRequestStatus status;
+ aProcess.Rendezvous(status);
+ if (status == KRequestPending)
+ {
+ aProcess.Resume();
+ }
+ else
+ {
+ aProcess.Kill(KErrGeneral);
+ TESTEL(EFalse, status.Int());
+ }
+
+ User::WaitForRequest(status);
+ INFO_PRINTF1(_L("Process started"));
+ }
+
+/**
+Connects to sysmon and request monitoring of aProcess using aProp.
+*/
+void CTestStepBase::MonitorL(const RProcess& aProcess, const CStartupProperties& aProp)
+ {
+ RSysMonSession sess;
+ sess.OpenL();
+ CleanupClosePushL(sess);
+ TRAPD(err, sess.MonitorL(aProp, aProcess));
+ TESTL(err == KErrNone);
+ CleanupStack::PopAndDestroy(&sess);
+ INFO_PRINTF1(_L("Monitoring initiated"));
+ }
+
+/**
+Creates and resumes aProcess with file=KTestProcGood args=KLaunchServerCommandLineOption,
+then sets up monitoring with aStartMethod and 1 retry.
+*/
+void CTestStepBase::StartAndMonitorL(RProcess& aProcess, TStartMethod aStartMethod)
+ {
+ //Start a process that launch a CServer2
+ INFO_PRINTF1(_L("Going start a process"));
+ User::LeaveIfError(aProcess.Create(KTestProcGood, KLaunchServerCommandLineOption));
+ ResumeL(aProcess);
+
+ //Setup monitoring
+ INFO_PRINTF1(_L("Going to request process monitoring"));
+ CStartupProperties* prop = CStartupProperties::NewLC(KTestProcGood, KLaunchServerCommandLineOption);
+ prop->SetMonitored(ETrue);
+ prop->SetStartupType(EStartProcess);
+ prop->SetStartMethod(aStartMethod);
+ prop->SetNoOfRetries(1);
+ MonitorL(aProcess, *prop);
+ CleanupStack::PopAndDestroy(prop);
+
+ //Assert that the server is running
+ RTestProcGoodSession server;
+ TInt err = server.Connect();
+ TEST(KErrNone == err);
+ if(KErrNone == err)
+ {
+ INFO_PRINTF1(_L("Asserted that server is running"));
+ }
+ server.Close();
+ }
+
+/**
+Launch native application aAppName using an unconnected RApaLsSession
+*/
+void CTestStepBase::StartViewlessBgApplicationL(const TDesC& aAppName, TThreadId& aTreadId, TRequestStatus& aRequestStatus)
+ {
+ RApaLsSession apa;
+ TThreadId threadId;
+ CApaCommandLine* const cmdLine = CApaCommandLine::NewLC();
+ cmdLine->SetExecutableNameL(aAppName);
+ cmdLine->SetCommandL(EApaCommandBackgroundAndWithoutViews);
+ User::LeaveIfError(apa.StartApp(*cmdLine, aTreadId, &aRequestStatus));
+ CleanupStack::PopAndDestroy(cmdLine);
+ }
+
+/**
+Asserts that at least one process starting with the name aProcessName is running.
+*/
+TBool CTestStepBase::Exists(const TDesC& aProcessName)
+ {
+ TPtrC ptr(aProcessName);
+ ptr.Set( ptr.Ptr(), ptr.Find(_L(".")) );
+ TFullName procSerchTerm( ptr );
+ procSerchTerm += _L("*");
+
+ TFindProcess find(procSerchTerm);
+ TFullName name;
+ TBool found = EFalse;
+ while(find.Next(name)==KErrNone)
+ {
+ RProcess process;
+ const TInt err = process.Open(find);
+ if (err == KErrNone)
+ {
+ if (process.ExitType() == EExitPending)
+ {
+ found = ETrue;
+ process.Close();
+ break;
+ }
+ process.Close();
+ }
+ }
+ return found;
+ }