--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/esockserver/test/TE_Socket/SocketTestSection5.cpp Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,303 @@
+// 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 5
+//
+//
+
+// EPOC includes
+#include <e32base.h>
+#include <es_sock.h>
+#include <ss_std.h>
+#include <test/es_dummy.h>
+
+// Test system includes
+#include "SocketTestSection5.h"
+
+
+// Test step 5.1
+const TDesC& CSocketTest5_1::GetTestName()
+ {
+ _LIT(ret,"Test5.1");
+ return ret;
+ }
+
+enum TVerdict CSocketTest5_1::InternalDoTestStepL( void )
+ {
+ TVerdict verdict = EPass;
+
+ Logger().WriteFormat(_L("Test Purpose: Memory Leak opening bad socket"));
+
+#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);
+
+ // open a bad socket
+ Logger().WriteFormat(_L("Attempting to create bad socket type with heap checking"));
+ // ss.__DbgMarkHeap(); // in ESOCKMT leak checking is best done by shutting down the server
+ RSocket sock;
+ ret = sock.Open(ss, 0, 0, 0);
+ // ss.__DbgMarkEnd(0);
+ Logger().WriteFormat(_L("Open returned %S"), &EpocErrorToText(ret));
+ TESTL(KErrBadName == ret);
+
+ CleanupStack::Pop(&ss);
+ ss.Close();
+#else
+ Logger().WriteFormat(_L("TestDisabled on release build."));
+ verdict = EInconclusive;
+#endif
+
+ SetTestStepResult(verdict);
+ return verdict;
+ }
+
+
+// Test step 5.2
+const TDesC& CSocketTest5_2::GetTestName()
+ {
+ _LIT(ret,"Test5.2");
+ return ret;
+ }
+
+enum TVerdict CSocketTest5_2::InternalDoTestStepL( void )
+ {
+ TVerdict verdict = EPass;
+
+ Logger().WriteFormat(_L("Test Purpose: Memory Leak connecting to server and disconnecting from server"));
+
+#if defined(_DEBUG_SOCKET_FUNCTIONS)
+ // connect to esock
+ Logger().WriteFormat(_L("Main thread : Attempting to connect to socket server"));
+ RSocketServ ss;
+ TInt ret = OptimalConnect(ss);
+ CleanupClosePushL(ss);
+ Logger().WriteFormat(_L("Main Thread : Connect returned %S"), &EpocErrorToText(ret));
+ TESTL(KErrNone == ret);
+
+ Logger().WriteFormat(_L("Main thread : Creating semaphore for threads"));
+ RSemaphore s;
+ s.CreateLocal(0);
+ RThread t;
+
+ TSocketThreadArg tArg;
+ tArg.iHandle = this;
+ tArg.iSem = &s;
+ tArg.iNumSockets = 0;
+
+ // try connect and close in separate thread
+ Logger().WriteFormat(_L("Main thread : Creating sub thread to connect"));
+ // ss.__DbgMarkHeap(); // in ESOCKMT leak checking is best done by shutting down the server
+ t.Create(_L("socketThread2"), ConnectThread, KDefaultStackSize, KDefaultHeapSize, KDefaultHeapSize, &tArg);
+ t.Resume();
+ s.Wait();
+ t.Close();
+ // ss.__DbgMarkEnd(0);
+ Logger().WriteFormat(_L("Main thread : Connect thread completed"));
+
+ CleanupStack::Pop(&ss);
+ ss.Close();
+#else
+ Logger().WriteFormat(_L("TestDisabled on release build."));
+ verdict = EInconclusive;
+#endif
+
+ SetTestStepResult(verdict);
+ return verdict;
+ }
+
+// Test step 5.3
+const TDesC& CSocketTest5_3::GetTestName()
+ {
+ _LIT(ret,"Test5.3");
+ return ret;
+ }
+
+enum TVerdict CSocketTest5_3::InternalDoTestStepL( void )
+ {
+ TVerdict verdict = EPass;
+
+ Logger().WriteFormat(_L("Test Purpose: Memory Leak killing thread with open resources"));
+
+#if defined(_DEBUG_SOCKET_FUNCTIONS)
+ // connect to esock
+ Logger().WriteFormat(_L("Main thread : Attempting to connect to socket server"));
+ RSocketServ ss;
+ TInt ret = OptimalConnect(ss);
+ CleanupClosePushL(ss);
+ Logger().WriteFormat(_L("Main Thread : Connect returned %S"), &EpocErrorToText(ret));
+ TESTL(KErrNone == ret);
+
+ Logger().WriteFormat(_L("Main thread : Creating semaphore for threads"));
+ RSemaphore s;
+ s.CreateLocal(0);
+
+ // try create in separate thread and kill it
+ Logger().WriteFormat(_L("Main Thread : Creating sub thread to create sockets and resolvers"));
+ // ss.__DbgMarkHeap(); // in ESOCKMT leak checking is best done by shutting down the server
+ TSocketThreadArg a;
+ a.iHandle = this;
+ a.iSem = &s;
+ a.iNumSockets = 1;
+ RThread t2;
+ t2.Create(_L("socketThread3"), SocketThread, KDefaultStackSize, KDefaultHeapSize, KDefaultHeapSize, &a);
+ t2.Resume();
+ s.Wait();
+ Logger().WriteFormat(_L("Main Thread : Killing Create sub thread"));
+ t2.Kill(KErrNone);
+ t2.Close();
+
+ Logger().WriteFormat(_L("Main Thread : Waiting 100ms for thread to clear up"));
+ User::After(100000);
+ // ss.__DbgMarkEnd(0);
+ Logger().WriteFormat(_L("Main Thread : Create thread completed"));
+
+ CleanupStack::Pop(&ss);
+ ss.Close();
+#else
+ Logger().WriteFormat(_L("TestDisabled on release build."));
+ verdict = EInconclusive;
+#endif
+
+ SetTestStepResult(verdict);
+ return verdict;
+ }
+
+// Test step 5.4
+const TDesC& CSocketTest5_4::GetTestName()
+ {
+ _LIT(ret,"Test5.4");
+ return ret;
+ }
+
+enum TVerdict CSocketTest5_4::InternalDoTestStepL( void )
+ {
+ TVerdict verdict = EPass;
+
+ Logger().WriteFormat(_L("Test Purpose: Memory Leak Getting Protocol Info and Opening Socket"));
+
+#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);
+
+ // NumProtocols and GetProtocolInfo
+ Logger().WriteFormat(_L("Try NumProtocols"));
+ // ss.__DbgMarkHeap(); // in ESOCKMT leak checking is best done by shutting down the server
+ TUint numProtocols;
+ ret = ss.NumProtocols(numProtocols);
+ Logger().WriteFormat(_L("NumProtocols returned %S, number %d"),
+ &EpocErrorToText(ret), numProtocols);
+ TESTL(KErrNone == ret);
+ // ss.__DbgMarkEnd(0);
+
+ Logger().WriteFormat(_L("Trying GetProtocolInfo until Dummy Protocol 1 is found"));
+ // ss.__DbgMarkHeap(); // in ESOCKMT leak checking is best done by shutting down the server
+ TProtocolDesc protoInfo;
+ TUint aIndex;
+ TBool aFound = false;
+ for (aIndex=1;aIndex<=numProtocols;aIndex++) {
+ ret = ss.GetProtocolInfo(aIndex, protoInfo);
+ TESTL(KErrNone == ret || KErrCannotFindProtocol == ret);
+ if (protoInfo.iName ==_L("Dummy Protocol 1")){
+ aFound = true;
+ break;
+ }
+ }
+ // ss.__DbgMarkEnd(0);
+ if (!aFound) {
+ Logger().WriteFormat(_L("Could not find Dummy Protocol 1"));
+ return EFail;
+ }
+
+ Logger().WriteFormat(_L("Trying socket Open to load protocol"));
+ RSocket sock;
+ ret = sock.Open(ss, protoInfo.iAddrFamily, protoInfo.iSockType, protoInfo.iProtocol);
+ Logger().WriteFormat(_L("Open returned %S"), &EpocErrorToText(ret));
+ TESTL(KErrNone == ret);
+ sock.Close();
+
+ Logger().WriteFormat(_L("Trying socket Open with Heap checking"));
+ // ss.__DbgMarkHeap(); // in ESOCKMT leak checking is best done by shutting down the server
+ RSocket sock1;
+ ret = sock1.Open(ss, protoInfo.iAddrFamily, protoInfo.iSockType, protoInfo.iProtocol);
+ Logger().WriteFormat(_L("Open returned %S"), &EpocErrorToText(ret));
+ TESTL(KErrNone == ret);
+ sock1.Close();
+ // ss.__DbgMarkEnd(0);
+
+ CleanupStack::Pop(&ss);
+ ss.Close();
+#else
+ Logger().WriteFormat(_L("TestDisabled on release build."));
+ verdict = EInconclusive;
+#endif
+
+ SetTestStepResult(verdict);
+ return verdict;
+ }
+
+
+// Test step 5.5
+const TDesC& CSocketTest5_5::GetTestName()
+ {
+ _LIT(ret,"Test5.5");
+ return ret;
+ }
+
+enum TVerdict CSocketTest5_5::InternalDoTestStepL( void )
+ {
+ TVerdict verdict = EPass;
+
+ Logger().WriteFormat(_L("Test Purpose: Validating leak detection upon shutdown"));
+
+#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("Open a socket on Dummy Protocol 1"));
+ RSocket sock;
+ ret = sock.Open(ss,_L("Dummy Protocol 1"));
+ Logger().WriteFormat(_L("Open returned %S"), &EpocErrorToText(ret));
+ TESTL(KErrNone == ret);
+
+ sock.SetOpt(KDummyOptionLeakMemory, 4);
+ sock.Close();
+
+ CleanupStack::PopAndDestroy(&ss);
+#else
+ Logger().WriteFormat(_L("TestDisabled on release build."));
+ verdict = EInconclusive;
+#endif
+
+ SetTestStepResult(verdict);
+ return verdict;
+ }
+
+
+