diff -r 000000000000 -r a41df078684a kerneltest/e32test/power/t_domain_slave.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/e32test/power/t_domain_slave.cpp Mon Oct 19 15:55:17 2009 +0100 @@ -0,0 +1,140 @@ +// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "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: +// e32test\power\t_domain_slave.cpp +// +// + +#include +#include +#include +#include +#include +#include + +LOCAL_D RTest test(_L(" T_DOMAIN_SLAVE ")); + +// This will be run in its own thread as part of test #1. It should get killed when trying to connect +// to the manager without appropriate caps set +TInt IncorrectClient(TAny*) +{ + RDmDomain domain; + TInt r = domain.Connect(KDmIdRoot); + + RDmDomainManager manager; + r = manager.Connect(); + + return(r); +} + +GLDEF_C TInt E32Main() + { + test.Title(); + test.Start(_L("Testing")); + +// test.Next(_L("test security")); + + // Get arguments from the command line + TInt len = User::CommandLineLength(); + test (len); + TInt size = len * sizeof(TUint16); + test (size == sizeof(TInt)); + TInt arg; + TPtr cmd((TUint16*) &arg, len); + User::CommandLine(cmd); + + TInt expected_result = PlatSec::IsCapabilityEnforced(ECapabilityPowerMgmt) ? KErrPermissionDenied : KErrNone; + + switch(arg) + { + case 0: + { + // This is the original t_domain_slave test, minus the panicking parts which now get + // tested as case 1. + + test.Next(_L("test security -- 0")); + + RDmDomain domain; + TInt r = domain.Connect(KDmIdRoot); + test (r == expected_result); + + break; + } + case 1: + { + + test.Next(_L("test security -- 1")); + + TBool jit = User::JustInTime(); + + User::SetJustInTime(EFalse); + + _LIT(KPanicThread, "PanicThread"); + + RThread testThread; + + TInt tt=testThread.Create(KPanicThread, IncorrectClient, KDefaultStackSize, + NULL, NULL); + + test (KErrNone == tt); + + TRequestStatus tStatus; + // testThread.Logon(tStatus); + + RUndertaker deathChecker; + TInt dcOK = deathChecker.Create(); + + test (KErrNone == dcOK); + + TInt nextDeadThread; + + deathChecker.Logon(tStatus, nextDeadThread); + + // threads are created in a suspended state. calling resume here starts the thread. + testThread.Resume(); + User::WaitForRequest(tStatus); + + // If thread suicided for the correct reason --> successful test + // NB. KErrPermissionDenied means that the server refused the + // connection because of incorrect capabilities + + RThread corpse; + corpse.SetHandle(nextDeadThread); + + RDebug::Printf("Subthread exit type: %d", corpse.ExitType() ); + + RDebug::Printf("Subthread exit reason: %d",corpse.ExitReason() ); + + test (corpse.ExitType() == EExitKill); + + test (corpse.ExitReason() == KErrPermissionDenied); + + corpse.Close(); + + // close the RUndertaker and test thread + deathChecker.Close(); + CLOSE_AND_WAIT(testThread); + + User::SetJustInTime(jit); + + break; + } + default: + User::Panic(_L("USER"), EInvariantFalse); + break; + } + + test.End(); + + return KErrNone; + }