enum TVerdict CSocketTest7_1::InternalDoTestStepL( void ) { TVerdict verdict = EPass; Logger().WriteFormat(_L("Test Purpose: Alloc Heaven during 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); // get a protocol Logger().WriteFormat(_L("Attempting to FindProtocol dummy protocol 1")); TProtocolDesc protoInfo; ret = ss.FindProtocol(_L("Dummy Protocol 1"), protoInfo); Logger().WriteFormat(_L("FindProtocol returned %S"), &EpocErrorToText(ret)); TESTL(KErrNone == ret); // Stretch socket arrays in the server. RSocket *sockets = new (ELeave) RSocket[KNumStretchOpens]; CleanupArrayDeletePushL(sockets); TInt i; Logger().WriteFormat(_L("Attempting to Open %d sockets"), KNumStretchOpens); for (i=0; i<KNumStretchOpens; i++) { ret = sockets[i].Open(ss, protoInfo.iAddrFamily, protoInfo.iSockType, protoInfo.iProtocol); if (KErrNone != ret) { Logger().WriteFormat(_L("Open returned %S for socket %d"), &EpocErrorToText(ret), i); TESTL(EFalse); } } Logger().WriteFormat(_L("Closing the first %d sockets"), KNumStretchOpens-1); for (i=0; i<KNumStretchOpens-1; i++) { sockets[i].Close(); } RSocket sock; TInt failure = 0; ret = -1; Logger().WriteFormat(_L("Starting OOM Socket Open Loop")); // 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 = sock.Open(ss, protoInfo.iAddrFamily, protoInfo.iSockType, protoInfo.iProtocol); // if (ret != KErrNone) // { // ss.__DbgCheckHeap(0); // } failure++; } Logger().WriteFormat(_L("Created socket OK")); sockets[KNumStretchOpens-1].Close(); CleanupStack::PopAndDestroy(sockets); 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; }
enum TVerdict CEsockTest11_4::easyTestStepL() { // // Out Of Memory Test on open() RSocket // // TVerdict verdict = EPass; Logger().WriteFormat(_L("TE_ESock: test 11.4")); Logger().WriteFormat(_L("RSocket Open")); #if defined (_DEBUG_SOCKET_FUNCTIONS) RSocketServ socketHelper; CleanupClosePushL(socketHelper); TInt ret = socketHelper.Connect(); TESTEL(KErrNone == ret, ret); // Create a socket on the helper to get the DND up & running RSocket sockHelper; CleanupClosePushL(sockHelper); ret = sockHelper.Open(socketHelper, KAfInet, KSockStream, KProtocolInetTcp); TESTEL(KErrNone == ret, ret); // Short wait for DND settle down User::After(5000000); socketHelper.__DbgMarkHeap(); RSocketServ socketServer; CleanupClosePushL(socketServer); ret = socketServer.Connect(); TESTEL(KErrNone == ret, ret); // See if we can crash the server: RSocket sock; CleanupClosePushL(sock); TInt failure = 0; verdict = EInconclusive; TInt prevResult = KErrNoMemory; TInt prevOccurs = 0; while (EInconclusive == verdict) { socketServer.__DbgFailNext(failure++); ret = sock.Open(socketServer, KAfInet, KSockStream, KProtocolInetTcp); if ((prevResult != ret) || (++prevOccurs >= 1000)) { Logger().WriteFormat(_L("%d loop(s), open socket returned %d"), prevOccurs, prevResult); if (KErrNone == ret) { verdict = EPass; } else if (KErrServerTerminated == ret) { verdict = EFail; } else if (prevResult != ret) { prevResult = ret; prevOccurs = 1; } else { prevOccurs = 0; } } }; socketServer.__DbgFailNext(-1); // wait for protocol families to unload - it's via an async callback and dependent upon the IP stack, which // may also be killing off DND. So a big delay is needed. If it proves unreliable in future then the really // strong approach would be shutting down ESOCK - it'll panic if it has allocations outstanding User::After(5000000); socketHelper.__DbgMarkEnd(0); CleanupStack::PopAndDestroy(4, &socketHelper); #else Logger().WriteFormat(_L("Test disabled on release build.")); #endif return verdict; }