sysstatemgmt/systemstarter/test/tsysmon/src/tsysmon_stepmultiprocmon.cpp
changeset 0 4e1aa6a622a0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysstatemgmt/systemstarter/test/tsysmon/src/tsysmon_stepmultiprocmon.cpp	Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,108 @@
+// 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 <sysmonclisess.h>
+#include <startupproperties.h>
+#include "testapps.h"
+#include "tsysmon_stepmultiprocmon.h"
+
+
+CStepMultiProcMon::CStepMultiProcMon()
+	{
+	SetTestStepName(KCTestCaseMultiProcMon);
+	}
+
+/**
+Old Test CaseID 		APPFWK-SYSMON-0002
+New Test CaseID 		DEVSRVS-SYSSTART-SYSMON-0002
+ */
+
+TVerdict CStepMultiProcMon::doTestStepL()
+	{
+	INFO_PRINTF1(_L("TEST APPFWK-SYSMON-0002"));
+	
+	// Launch two instances of the same executable
+	
+	INFO_PRINTF1(_L("Going to set first process running"));
+	RProcess process1;
+	CleanupClosePushL(process1);
+	User::LeaveIfError(process1.Create(KTestProcGood, KNullDesC));
+	ResumeL(process1);
+
+	INFO_PRINTF1(_L("Starting a second instance of the same executable"));
+	RProcess process2;
+	CleanupClosePushL(process2);
+	User::LeaveIfError(process2.Create(KTestProcGood, KNullDesC));
+	ResumeL(process2);
+	
+	// Do the testing
+	DoTestMonitorL(process1, process2);
+	
+	// Tidy up
+	process1.Kill(KErrNone);
+	process2.Kill(KErrNone);
+	CleanupStack::PopAndDestroy(&process2);
+	CleanupStack::PopAndDestroy(&process1);
+	
+	
+	return TestStepResult();	
+	}
+
+/**
+ * Contains the actual testing. Verifying that it is possible to monitor more than one
+ * instance of the same executable.
+ */
+void CStepMultiProcMon::DoTestMonitorL(const RProcess& aProc1, const RProcess& aProc2)
+	{
+	RSysMonSession sess;
+	CleanupClosePushL(sess);	
+	sess.OpenL();	
+
+	
+	CStartupProperties *prop = CStartupProperties::NewLC(KTestProcGood, KNullDesC);
+	prop->SetMonitored(ETrue);
+	prop->SetNoOfRetries(0); // SysMon will not do any restart attempts
+			
+	INFO_PRINTF1(_L("Going to monitor first process"));
+	sess.MonitorL(*prop, aProc1);	
+	INFO_PRINTF1(_L("Successfully setup monitoring of first process."));
+	
+	INFO_PRINTF1(_L("Going to monitor second process"));
+	sess.MonitorL(*prop, aProc2);
+	INFO_PRINTF1(_L("Successfully setup monitoring of second process."));
+		
+	INFO_PRINTF1(_L("Try to register monitoring for second time"));
+	TRAPD(err, sess.MonitorL(*prop, aProc1));
+	TESTE(err == KErrAlreadyExists, err);
+	if(err == KErrAlreadyExists)
+		{
+		INFO_PRINTF1(_L("Second monitor request for first process returned KErrAlreadyExists as expected"));
+		}
+	TRAP(err, sess.MonitorL(*prop, aProc2));
+	TESTE(err == KErrAlreadyExists, err);
+	if(err == KErrAlreadyExists)
+		{
+		INFO_PRINTF1(_L("Second monitor request for second process returned KErrAlreadyExists as expected"));
+		}
+		
+	CleanupStack::PopAndDestroy(prop);
+	CleanupStack::PopAndDestroy(&sess);
+	}