diff -r 000000000000 -r dfb7c4ff071f datacommsserver/esockserver/test/TE_Socket/SocketTestSection12.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/datacommsserver/esockserver/test/TE_Socket/SocketTestSection12.cpp Thu Dec 17 09:22:25 2009 +0200 @@ -0,0 +1,137 @@ +// Copyright (c) 2004-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: +// This contains ESock Test cases from section 12 +// +// + +// EPOC includes +#include +#include +#include +#include + +// Test system includes + +#include "SocketTestSection12.h" + +// vc doesn't like taking address of t.ExitCategory() for logging +#pragma warning (disable:4238) + +// Test step 12.1 +const TDesC& CSocketTest12_1::GetTestName() + { + _LIT(ret,"Test12.1"); + return ret; + } + +enum TVerdict CSocketTest12_1::InternalDoTestStepL( void ) + { + TVerdict verdict = EPass; + + Logger().WriteFormat(_L("Test Purpose: Panic Client using a Bad Handle")); + + // stop debugger crashing + TBool oldJit = User::JustInTime(); + User::SetJustInTime(EFalse); + + Logger().WriteFormat(_L("Creating thread which uses a bad handle")); + RThread t; + + TSocketThreadArg tArg; + tArg.iHandle = this; + tArg.iSem = NULL; + tArg.iNumSockets = 0; + + //Need to share logger across different threads + Logger().ShareAuto(); + TInt ret = t.Create(_L("BadHandle"), BadHandleThread, KDefaultStackSize, + KDefaultHeapSize, KDefaultHeapSize, &tArg); + CleanupClosePushL(t); + Logger().WriteFormat(_L("Create returned %S"), &EpocErrorToText(ret)); + TESTL(KErrNone == ret); + + Logger().WriteFormat(_L("Logging on and resuming thread")); + TRequestStatus stat; + t.Logon(stat); + t.Resume(); + User::WaitForRequest(stat); + TPtrC catName = t.ExitCategory(); + Logger().WriteFormat(_L("Thread Exit Category '%S', Reason %d, Type %d"), + &catName, t.ExitReason(), t.ExitType()); + TESTL(t.ExitCategory() == KESockClientPanic); + TESTL(EBadHandle == t.ExitReason()); + TESTL(EExitPanic == t.ExitType()); + + CleanupStack::PopAndDestroy(&t); + + // reset JIT state + User::SetJustInTime(oldJit); + + SetTestStepResult(verdict); + return verdict; + } + +// Test step 12.2 +const TDesC& CSocketTest12_2::GetTestName() + { + _LIT(ret,"Test12.2"); + return ret; + } + +enum TVerdict CSocketTest12_2::InternalDoTestStepL( void ) + { + TVerdict verdict = EPass; + + Logger().WriteFormat(_L("Test Purpose: Panic for Reading Twice")); + + // stop debugger crashing + TBool oldJit = User::JustInTime(); + User::SetJustInTime(EFalse); + + Logger().WriteFormat(_L("Creating thread which reads twice")); + RThread t; + TSocketThreadArg tArg; + tArg.iHandle = this; + tArg.iSem = NULL; + tArg.iNumSockets = 0; + //Need to share logger across different threads + Logger().ShareAuto(); + TInt ret = t.Create(_L("ReadTwice"), ReadTwiceThread, KDefaultStackSize, + KDefaultHeapSize, KDefaultHeapSize, &tArg); + CleanupClosePushL(t); + Logger().WriteFormat(_L("Create returned %S"), &EpocErrorToText(ret)); + TESTL(KErrNone == ret); + + Logger().WriteFormat(_L("Logging on and resuming thread")); + TRequestStatus stat; + t.Logon(stat); + t.Resume(); + User::WaitForRequest(stat); + TPtrC catName = t.ExitCategory(); + Logger().WriteFormat(_L("Thread Exit Category '%S', Reason %d, Type %d"), + &catName, t.ExitReason(), t.ExitType()); + TESTL(t.ExitCategory() == KESockClientPanic ); + TESTL(EReadingAlready == t.ExitReason()); + TESTL(EExitPanic == t.ExitType()); + + CleanupStack::PopAndDestroy(&t); + + // reset JIT state + User::SetJustInTime(oldJit); + + SetTestStepResult(verdict); + return verdict; + } + +