diff -r 000000000000 -r dfb7c4ff071f datacommsserver/esockserver/test/TE_Socket/SocketTestSection6.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/datacommsserver/esockserver/test/TE_Socket/SocketTestSection6.cpp Thu Dec 17 09:22:25 2009 +0200 @@ -0,0 +1,368 @@ +// 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 6 +// +// + +// EPOC includes +#include +#include +#include + +// Test system includes +#include "SocketTestSection6.h" + + +// Test step 6.1 +const TDesC& CSocketTest6_1::GetTestName() + { + _LIT(ret,"Test6.1"); + return ret; + } + +enum TVerdict CSocketTest6_1::InternalDoTestStepL( void ) + { + TVerdict verdict = EPass; + + Logger().WriteFormat(_L("Test Purpose: Out of Memory During Connect")); + +#if defined (_DEBUG_SOCKET_FUNCTIONS) + + // connect to esock + Logger().WriteFormat(_L("Attempting to connect to socket server")); + RSocketServ ss; + TInt ret = OptimalConnect(ss); + CleanupClosePushL(ss); + Logger().WriteFormat(_L("Connect returned %S"), &EpocErrorToText(ret)); + TESTL(KErrNone == ret); + + Logger().WriteFormat(_L("Starting OOM Connect loop")); + TInt failure = 0; + RSocketServ ss2; + ret = -1; + // ss.__DbgMarkHeap(); // in ESOCKMT leak checking is best done by shutting down the server + + while (ret != KErrNone) + { + Logger().WriteFormat(_L("Failing after %d allocs"), failure); + ss.__DbgFailNext(failure); + ret = OptimalConnect(ss2); + // if (ret != KErrNone) + // ss.__DbgCheckHeap(0); + failure++; + } + Logger().WriteFormat(_L("Connected OK")); + + ss2.Close(); + + // ss.__DbgMarkEnd(0); + ss.__DbgFailNext(-1); + CleanupStack::Pop(&ss); + ss.Close(); +#else + Logger().WriteFormat(_L("TestDisabled on release build.")); + verdict = EInconclusive; +#endif + + SetTestStepResult(verdict); + return verdict; + } + +// Test step 6.2 +const TDesC& CSocketTest6_2::GetTestName() + { + _LIT(ret,"Test6.2"); + return ret; + } + +enum TVerdict CSocketTest6_2::InternalDoTestStepL( void ) + { + TVerdict verdict = EPass; + + Logger().WriteFormat(_L("Test Purpose: Out of Memory Conditions for Socket Open")); + +#if defined (_DEBUG_SOCKET_FUNCTIONS) + + // connect to esock + Logger().WriteFormat(_L("Attempting to connect to socket server")); + RSocketServ ss; + TInt ret = OptimalConnect(ss); + CleanupClosePushL(ss); + Logger().WriteFormat(_L("Connect returned %S"), &EpocErrorToText(ret)); + TESTL(KErrNone == ret); + + Logger().WriteFormat(_L("Trying FindProtocol")); + TProtocolDesc protoInfo; + ret = ss.FindProtocol(_L("Dummy Protocol 1"), protoInfo); + Logger().WriteFormat(_L("FindProtocol returned %S"), &EpocErrorToText(ret)); + TESTL(KErrNone == ret); + + // Flush any FailNext there might be hanging around. + ss.__DbgFailNext(-1); + + // test OOM during socket open + // ss.__DbgMarkHeap(); // in ESOCKMT leak checking is best done by shutting down the server + TInt failure = 0; + RSocket sock; + ret = -1; + Logger().WriteFormat(_L("Starting OOM Socket Open Loop")); + while (ret != KErrNone) + { + Logger().WriteFormat(_L("Failing after %d allocs"), failure); + ss.__DbgFailNext(failure); + ret = sock.Open(ss, protoInfo.iAddrFamily, protoInfo.iSockType, protoInfo.iProtocol); + failure++; + } + Logger().WriteFormat(_L("Opened socket OK")); + sock.Close(); + // ss.__DbgMarkEnd(0); + + // Flush any FailNext there might be hanging around. + ss.__DbgFailNext(-1); + CleanupStack::Pop(&ss); + ss.Close(); + +#else + Logger().WriteFormat(_L("TestDisabled on release build.")); + verdict = EInconclusive; +#endif + + SetTestStepResult(verdict); + return verdict; + } + +// Test step 6.3 +const TDesC& CSocketTest6_3::GetTestName() + { + _LIT(ret,"Test6.3"); + return ret; + } + +enum TVerdict CSocketTest6_3::InternalDoTestStepL( void ) + { + TVerdict verdict = EPass; + + Logger().WriteFormat(_L("Test Purpose: Out of Memory Conditions for Host Resolver")); + +#if defined (_DEBUG_SOCKET_FUNCTIONS) + + // connect to esock + Logger().WriteFormat(_L("Attempting to connect to socket server")); + RSocketServ ss; + TInt ret = OptimalConnect(ss); + CleanupClosePushL(ss); + Logger().WriteFormat(_L("Connect returned %S"), &EpocErrorToText(ret)); + TESTL(KErrNone == ret); + + Logger().WriteFormat(_L("Trying FindProtocol")); + TProtocolDesc protoInfo; + ret = ss.FindProtocol(_L("Dummy Protocol 1"), protoInfo); + Logger().WriteFormat(_L("FindProtocol returned %S"), &EpocErrorToText(ret)); + TESTL(KErrNone == ret); + + // Host resolvers + // ss.__DbgMarkHeap(); // in ESOCKMT leak checking is best done by shutting down the server + TInt failure = 0; + RHostResolver hResolv; + ret = -1; + Logger().WriteFormat(_L("Starting OOM Host Resolver Open Loop")); + while (ret != KErrNone) + { + Logger().WriteFormat(_L("Failing after %d allocs"), failure); + ss.__DbgFailNext(failure); + ret = hResolv.Open(ss, protoInfo.iAddrFamily, protoInfo.iProtocol); + failure++; + } + Logger().WriteFormat(_L("Opened host resolver OK")); + hResolv.Close(); + // ss.__DbgMarkEnd(0); + + // Flush any FailNext there might be hanging around. + ss.__DbgFailNext(-1); + + // Test OOM on Query() + Logger().WriteFormat(_L("Testing OOM handling of RHostResolver::Query()")); + + ret = hResolv.Open(ss, protoInfo.iAddrFamily, protoInfo.iProtocol); + TESTL(KErrNone == ret); + + TDnsQueryBuf dnsQryBuf; + TDnsRespABuf dnsRespABuf; + dnsQryBuf().SetType(KDnsRRTypeA); + dnsQryBuf().SetData(_L8("http://www.sample.net/")); + + // create a timer to catch esock hanging + RTimer timer; + timer.CreateLocal(); + CleanupClosePushL(timer); + const TUint oneSec(1000000); + TRequestStatus timerStatus; + TRequestStatus status(KErrNoMemory); + TUint failCount(0); + + // slowly increase the fail count until success + while(KErrNoMemory == status.Int() && failCount < 20) + { + Logger().WriteFormat(_L("Checking Query with %d allocs before failure"), failCount); + ss.__DbgFailNext(failCount++); + hResolv.Query(dnsQryBuf, dnsRespABuf, status); + timer.After(timerStatus, oneSec); + User::WaitForRequest(status, timerStatus); + timer.Cancel(); + User::WaitForAnyRequest(); + } + + // check query eventually finished ok + ss.__DbgFailNext(-1); + TESTL(KErrNone == status.Int()); + + CleanupStack::PopAndDestroy(&timer); + + CleanupStack::Pop(&ss); + ss.Close(); +#else + Logger().WriteFormat(_L("TestDisabled on release build.")); + verdict = EInconclusive; +#endif + + SetTestStepResult(verdict); + return verdict; + } + +// Test step 6.4 +const TDesC& CSocketTest6_4::GetTestName() + { + _LIT(ret,"Test6.4"); + return ret; + } + +enum TVerdict CSocketTest6_4::InternalDoTestStepL( void ) + { + TVerdict verdict = EPass; + + Logger().WriteFormat(_L("Test Purpose: Out of Memory Conditions for Service Resolver")); + +#if defined (_DEBUG_SOCKET_FUNCTIONS) + + // connect to esock + Logger().WriteFormat(_L("Attempting to connect to socket server")); + RSocketServ ss; + TInt ret = OptimalConnect(ss); + CleanupClosePushL(ss); + Logger().WriteFormat(_L("Connect returned %S"), &EpocErrorToText(ret)); + TESTL(KErrNone == ret); + + Logger().WriteFormat(_L("Trying FindProtocol")); + TProtocolDesc protoInfo; + ret = ss.FindProtocol(_L("Dummy Protocol 1"), protoInfo); + Logger().WriteFormat(_L("FindProtocol returned %S"), &EpocErrorToText(ret)); + TESTL(KErrNone == ret); + + // Flush any FailNext there might be hanging around. + ss.__DbgFailNext(-1); + + // service resolvers + // ss.__DbgMarkHeap(); // in ESOCKMT leak checking is best done by shutting down the server + TInt failure = 0; + RServiceResolver sResolv; + ret = -1; + Logger().WriteFormat(_L("Starting OOM Service Resolver Open Loop")); + while (ret != KErrNone) + { + Logger().WriteFormat(_L("Failing after %d allocs"), failure); + ss.__DbgFailNext(failure); + ret = sResolv.Open(ss, protoInfo.iAddrFamily, protoInfo.iSockType, protoInfo.iProtocol); + failure++; + } + Logger().WriteFormat(_L("Created service resolver OK")); + sResolv.Close(); + // ss.__DbgMarkEnd(0); + + // Flush any FailNext there might be hanging around. + ss.__DbgFailNext(-1); + + CleanupStack::Pop(&ss); + ss.Close(); +#else + Logger().WriteFormat(_L("TestDisabled on release build.")); + verdict = EInconclusive; +#endif + + SetTestStepResult(verdict); + return verdict; + } + +// Test step 6.5 +const TDesC& CSocketTest6_5::GetTestName() + { + _LIT(ret,"Test6.5"); + return ret; + } + +enum TVerdict CSocketTest6_5::InternalDoTestStepL( void ) + { + TVerdict verdict = EPass; + + Logger().WriteFormat(_L("Test Purpose: Out of Memory Conditions for Net Database")); + +#if defined (_DEBUG_SOCKET_FUNCTIONS) + + // connect to esock + Logger().WriteFormat(_L("Attempting to connect to socket server")); + RSocketServ ss; + TInt ret = OptimalConnect(ss); + CleanupClosePushL(ss); + Logger().WriteFormat(_L("Connect returned %S"), &EpocErrorToText(ret)); + TESTL(KErrNone == ret); + + Logger().WriteFormat(_L("Trying FindProtocol")); + TProtocolDesc protoInfo; + ret = ss.FindProtocol(_L("Dummy Protocol 1"), protoInfo); + Logger().WriteFormat(_L("FindProtocol returned %S"), &EpocErrorToText(ret)); + TESTL(KErrNone == ret); + + // Flush any FailNext there might be hanging around. + ss.__DbgFailNext(-1); + + // net database + // ss.__DbgMarkHeap(); // in ESOCKMT leak checking is best done by shutting down the server + TInt failure = 0; + RNetDatabase netDb; + ret = -1; + Logger().WriteFormat(_L("Starting OOM Net Database Open Loop")); + while (ret != KErrNone) + { + Logger().WriteFormat(_L("Failing after %d allocs"), failure); + ss.__DbgFailNext(failure); + ret = netDb.Open(ss, protoInfo.iAddrFamily, protoInfo.iProtocol); + failure++; + } + Logger().WriteFormat(_L("Created net database OK")); + netDb.Close(); + // ss.__DbgMarkEnd(0); + + // Flush any FailNext there might be hanging around. + ss.__DbgFailNext(-1); + + CleanupStack::Pop(&ss); + ss.Close(); +#else + Logger().WriteFormat(_L("TestDisabled on release build.")); + verdict = EInconclusive; +#endif + + SetTestStepResult(verdict); + return verdict; + } +