diff -r 000000000000 -r 4e1aa6a622a0 sysstatemgmt/systemstarter/test/tsysmon/src/tsysmon_stepprocmoninit.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sysstatemgmt/systemstarter/test/tsysmon/src/tsysmon_stepprocmoninit.cpp Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,187 @@ +// 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 +#include +#include "testapps.h" +#include "tsysmon_stepprocmoninit.h" + + +CStepProcMonInit::CStepProcMonInit() + { + SetTestStepName(KCTestCaseProcMonInit); + } + +TVerdict CStepProcMonInit::doTestStepL() + { + DoTestProcL(); + DoTestAppL(); + DoTestErrArgumentL(); + return TestStepResult(); + } + +/** +Old Test CaseID APPFWK-SYSMON-0001 +New Test CaseID DEVSRVS-SYSSTART-SYSMON-0001 + */ + + +void CStepProcMonInit::DoTestProcL() + { + INFO_PRINTF1(_L("TEST APPFWK-SYSMON-0001A")); + INFO_PRINTF1(_L("Going to set a process running")); + + RProcess process; + CleanupClosePushL(process); + User::LeaveIfError(process.Create(KTestProcGood, KNullDesC)); + ResumeL(process); + + DoTestMonitorL(process, KTestProcGood); // The test + + process.Kill(KErrNone); + CleanupStack::PopAndDestroy(&process); + } + +/** +Bonus-test APPFWK-SYSMON-0001b using an application instead of a process +*/ +void CStepProcMonInit::DoTestAppL() + { + INFO_PRINTF1(_L("TEST APPFWK-SYSMON-0001B")); + + // Launch native application using an unconnected RApaLsSession + INFO_PRINTF1(_L("Going to set a native application running")); + TThreadId threadId; + TRequestStatus requestStatus; + StartViewlessBgApplicationL(KTestAppGood, threadId, requestStatus); + + // Test that the application was created, then wait for it to resume + RThread thread; + RProcess process; + CleanupClosePushL(thread); + CleanupClosePushL(process); + TEST(KErrNone == thread.Open(threadId)); + TEST(KErrNone == thread.Process(process)); + User::WaitForRequest(requestStatus); + + // Do the actual testing + DoTestMonitorL(process, KTestAppGood); + + // Cleanup + process.Kill(KErrNone); + CleanupStack::PopAndDestroy(&process); + CleanupStack::PopAndDestroy(&thread); + } + +/** + * Calls RSysMonSession::MonitorL twice. the first call is expected to succeed and the second + * to fail with KErrAlreadyExists. + */ +void CStepProcMonInit::DoTestMonitorL(const RProcess& aProcess, const TDesC& aFilename) + { + RSysMonSession sess; + sess.OpenL(); + CleanupClosePushL(sess); + CStartupProperties* prop = CStartupProperties::NewLC(aFilename, KNullDesC); + + // Testing consistency assertion of aStartupProperties in RSysMonSession::MonitorL + TRAPD(err, sess.MonitorL(*prop, aProcess)); + TESTE(err == KErrArgument, err); + if(err == KErrArgument) + { + INFO_PRINTF1(_L("Monitor request with invalid args was refused properly by RSysMonSession::MonitorL")); + } + + prop->SetMonitored(ETrue); + prop->SetNoOfRetries(0); // SysMon will not do any restart attempts + + INFO_PRINTF1(_L("Going to start monitoring")); + + // monitoring first time should succeed + TRAP(err, sess.MonitorL(*prop, aProcess)); + TESTEL(err == KErrNone, err); + INFO_PRINTF1(_L("First monitor request succeeded")); + + // a second request should fail + TRAP(err, sess.MonitorL(*prop, aProcess)); + TESTE(err == KErrAlreadyExists, err); + if(err == KErrAlreadyExists) + { + INFO_PRINTF1(_L("Second monitor request returned KErrAlreadyExists as expected")); + } + + CleanupStack::PopAndDestroy(prop); + CleanupStack::PopAndDestroy(&sess); + } + + +/* +Bonus-test APPFWK-SYSMON-0001C +Testing consistency of assertions in RSysMonSession::MonitorL +*/ +void CStepProcMonInit::DoTestErrArgumentL() + { + INFO_PRINTF1(_L("TEST APPFWK-SYSMON-0001C - validade that sysmon refuse invalid requests")); + + RProcess process; + CleanupClosePushL(process); + User::LeaveIfError(process.Create(KTestProcGood, KNullDesC)); + ResumeL(process); + + RSysMonSession sess; + sess.OpenL(); + CleanupClosePushL(sess); + CStartupProperties* prop = CStartupProperties::NewLC(KTestProcGood, KNullDesC); + + INFO_PRINTF1(_L("Going to check if RSysMonSession::MonitorL correctly refuse monitor with CStartupProperties::Monitor()==EFalse")); + TRAPD(err, sess.MonitorL(*prop, process)); + TESTE(err == KErrArgument, err); + + INFO_PRINTF1(_L("Going to check if RSysMonSession::MonitorL correctly refuse monitor with CStartupProperties::Monitor()==True, StartMethod==EFireAndForget and NoOfRetries>0")); + prop->SetStartMethod(EFireAndForget); + prop->SetMonitored(ETrue); + prop->SetNoOfRetries(1); + TRAP(err, sess.MonitorL(*prop, process)); + TESTE(err == KErrArgument, err); + + INFO_PRINTF1(_L("Going to check if RSysMonSession::MonitorL correctly refuse monitor with CStartupProperties::StartMethod==EDeferredWaitForStart")); + prop->SetStartMethod(EDeferredWaitForStart); + prop->SetNoOfRetries(0); + TRAP(err, sess.MonitorL(*prop, process)); + TESTE(err == KErrArgument, err); + + INFO_PRINTF1(_L("Going to check if RSysMonSession::MonitorL correctly refuse to restart another exe image than the one it monitors.")); + prop->SetStartMethod(EWaitForStart); + prop->SetNoOfRetries(1); + prop->SetFileParamsL(_L("sdkjfhsdk"), KNullDesC); + TRAP(err, sess.MonitorL(*prop, process)); + TESTE(err == KErrArgument, err); + + INFO_PRINTF1(_L("Going to check if RSysMonSession::MonitorL correctly refuse to monitor a dead process.")); + prop->SetFileParamsL(KTestProcGood, KNullDesC); + process.Kill(KErrNone); + TRAP(err, sess.MonitorL(*prop, process)); + TESTE(err == KErrDied, err); + + CleanupStack::PopAndDestroy(prop); + CleanupStack::PopAndDestroy(&sess); + CleanupStack::PopAndDestroy(&process); + }