datacommsserver/esockserver/test/TE_ESockSSA/src/TestStepESockSSA.h
changeset 0 dfb7c4ff071f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/esockserver/test/TE_ESockSSA/src/TestStepESockSSA.h	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,99 @@
+// Copyright (c) 2005-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:
+// Contains declaration of CTestStepESockSSA class that is
+// base class for all test step classes in this test.
+// 
+//
+
+#if !defined(SYMBIAN_NETWORKING_ESOCKTEST_TESTSTEPESOCKSSA_H_)
+#define SYMBIAN_NETWORKING_ESOCKTEST_TESTSTEPESOCKSSA_H_
+
+#include <test/testexecutestepbase.h>
+
+
+// Relies upon no competing use of the thread semaphore, ie no request completions/AOs
+class RMultipleWait : public RFastLock
+	{
+public:
+	RMultipleWait(TInt aInitialCount);
+	void Close();
+	void Signal(TInt aDelta);
+	void Wait();
+
+	typedef RFastLock inherited;
+private:
+	TInt iCount;
+	RThread iOwnerThread;
+	};
+
+
+class CTestStepESockSSA : public CTestStep
+	{
+public:
+	enum { KBlockedRequestIssueDelay = 1000000, KBlockedRequestCompletionDelay = 1000000 };
+
+	CTestStepESockSSA();
+	~CTestStepESockSSA();
+	
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepPostambleL();
+
+protected:
+	class TDataThreadControl
+		{
+	public:
+		TDataThreadControl(RMultipleWait& aBlockSemaphore, TInt aExpectedResult)
+		: iBlockSemaphore(aBlockSemaphore),
+		  iExpectedResult(aExpectedResult)
+			{
+			}
+	public:
+		enum TRequestType
+			{ 
+			ESocketOpen, 
+			EHostResolverOpen,
+			EHostResolverOpenMulti,
+			EServiceResolverOpen, 
+			ENetDBOpen, 
+			ENumProtocols, 
+			EGetProtocolInfo,
+			EFindProtocol
+			};
+		TRequestType iRequest;
+		RMultipleWait& iBlockSemaphore;
+		TBool iBlocked;
+		TInt iResult;
+		TInt iExpectedResult;
+		RThread iThread;
+		RSocketServ iSession;
+		};
+
+	typedef TInt (*TDataThreadEntryPt)(TDataThreadControl&);
+protected:
+	void SetDummyBlocking();
+	void ClearDummyBlocking();
+
+	TInt CreateDataThread(TDataThreadControl::TRequestType aRequest, TDataThreadControl& aControl);
+	TVerdict WaitForDataThreadsToBlock(TDataThreadControl* aThreads, TInt aNumThreads);
+	TVerdict WaitForDataThreadsToComplete(TDataThreadControl* aThreads, TInt aNumThreads);
+
+	static TInt DataThreadEntry(TDataThreadControl& aControl);
+private:
+	static void DoDataThreadL(TDataThreadControl& aControl);
+	void UnloadBlockerL();
+	void KillC32Start();
+	};
+	
+#endif /* SYMBIAN_NETWORKING_ESOCKTEST_TESTSTEPESOCKSSA_H_ */
+