--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/egl/egltest/endpointtestsuite/automated/inc/remotetestbase.h Tue Aug 31 16:31:06 2010 +0300
@@ -0,0 +1,210 @@
+// Copyright (c) 2009-2010 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:
+
+
+/**
+ @file
+ @test
+ @internalComponent - Internal Symbian test code
+*/
+
+
+#ifndef __REMOTETESTBASE_H__
+#define __REMOTETESTBASE_H__
+
+
+#include <e32base.h>
+#include <e32msgqueue.h>
+#include <test/tefexportconst.h>
+#include "eglendpointwrap.h"
+#include "egltest_commscommon.h"
+
+
+class CRemoteTestStepBase;
+class CRemoteTestEnv;
+
+
+//Active object used to generate a timeout if worker thread takes too long.
+class CTimeoutTimer : public CTimer
+ {
+public:
+ static CTimeoutTimer* NewL(CRemoteTestEnv& aEnv, TInt aPriority);
+ ~CTimeoutTimer();
+
+private:
+ CTimeoutTimer(CRemoteTestEnv& aEnv, TInt aPriority);
+ void ConstructL();
+ void RunL();
+
+private:
+ CRemoteTestEnv& iEnv;
+ };
+
+
+//Active object used to listen to the worker thread to see if it panics.
+class CWorkerListener : public CActive
+ {
+public:
+ static CWorkerListener* NewL(CRemoteTestEnv& aEnv, TInt aPriority);
+ ~CWorkerListener();
+ void Listen(RThread& aThread);
+
+private:
+ CWorkerListener(CRemoteTestEnv& aEnv, TInt aPriority);
+ void ConstructL();
+ void RunL();
+ void DoCancel();
+
+private:
+ CRemoteTestEnv& iEnv;
+ RThread* iThread;
+ };
+
+
+//Active object used to listen for test case completion from the worker thread.
+class CTestCaseListener : public CActive
+ {
+public:
+ static CTestCaseListener* NewL(CRemoteTestEnv& aEnv, TInt aPriority);
+ ~CTestCaseListener();
+ void Listen();
+
+private:
+ CTestCaseListener(CRemoteTestEnv& aEnv, TInt aPriority);
+ void ConstructL();
+ void RunL();
+ void DoCancel();
+
+private:
+ CRemoteTestEnv& iEnv;
+ };
+
+
+//This class provides the remote test environment. CreateRemoteTestStepL()
+//Should be edited to return an instance of a derived CRemoteTestStepBase
+//class that corresponds with the passed in aTestUid.
+class CRemoteTestEnv : public CActive
+ {
+public:
+ static CRemoteTestEnv* NewL();
+ virtual ~CRemoteTestEnv();
+
+ void StartReceivingCmds();
+ CRemoteTestStepBase* CreateRemoteTestStepL(TTestUid aTestUid);
+
+ void SendResult(TRemoteTestVerdict aVerdict);
+ void SendLog(const TDesC8& aFile, TInt aLine, TInt aSeverity, const TDesC& aMessage);
+
+ void TestCaseCompleted();
+ void TestCaseTimedOut();
+ void WorkerExitted();
+
+protected:
+ CRemoteTestEnv();
+ void ConstructL();
+
+private:
+ void RunL();
+ void DoCancel();
+
+ void ReceiveCmd();
+ TBool SetupTestStep();
+
+ //These functions run in the context of the worker thread.
+ void RunCurrentTestStepL();
+ static TInt TestThreadEntryPoint(TAny* aSelf);
+
+ void DoEglHeapMark();
+ void DoEglHeapCheck();
+
+private:
+ RMsgQueue<TRemoteTestResult> iResultOutQueue;
+ RMsgQueue<TRemoteTestParamsPacket> iParamsInQueue;
+
+ CRemoteTestStepBase* iCurTestStep;
+ TRemoteTestParamsPacket iCurTestCaseParamsPacket;
+ TRemoteTestVerdict iCurTestCaseVerdict;
+ RThread iCurWorker;
+
+ TThreadId iSupervisorId;
+ TRequestStatus iNotifyRunTestCase;
+
+ CTimeoutTimer* iTimeoutTimer;
+ CWorkerListener* iWorkerListener;
+ CTestCaseListener* iTestCaseListener;
+ };
+
+
+//This is the base class for all remote test steps. Derived classes should implement
+//DoRemoteTestStepL(), and return the result of the test as a TVerdict.
+class CRemoteTestStepBase : public CBase, public MLog
+ {
+public:
+ virtual ~CRemoteTestStepBase();
+
+ virtual TRemoteTestVerdict DoStartRemoteTestStepL(const TRemoteTestParams& aMessageIn);
+ virtual TRemoteTestVerdict DoRunRemoteTestCaseL(TInt aTestCase, const TRemoteTestParams& aMessageIn) = 0;
+ virtual TRemoteTestVerdict DoEndRemoteTestStepL(const TRemoteTestParams& aMessageIn);
+
+ virtual TInt Timeout() const;
+
+ void Log(const TText8* aFile, TInt aLine, TInt aSeverity, TRefByValue<const TDesC> aFmt, ...);
+ const TEglEndpointWrap& EglEndpoint() const;
+
+ void EglStartL();
+ void EglEndL();
+
+protected:
+ CRemoteTestStepBase(TTestUid aUid);
+
+private:
+ friend class CRemoteTestEnv;
+ //Function called by CRemoteTestEnv.
+ //It should NOT be called by a derived class during construction.
+ void ConstructL(CRemoteTestEnv& aTestEnv);
+
+private:
+ const TTestUid iUid;
+ TInt iCurrentTestCase;
+ CRemoteTestEnv* iTestEnv;
+ TEglEndpointWrap iEndpoint;
+ };
+
+
+// Logger Macros - based on TEF but for use with CRemoteTestStepBase.
+//The severity enumeration is from TEF.
+#define REMOTE_INFO_PRINTF1(p1) Log(((TText8*)__FILE__), __LINE__, ESevrInfo, (p1))
+#define REMOTE_INFO_PRINTF2(p1, p2) Log(((TText8*)__FILE__), __LINE__, ESevrInfo, (p1), (p2))
+#define REMOTE_INFO_PRINTF3(p1, p2, p3) Log(((TText8*)__FILE__), __LINE__, ESevrInfo, (p1), (p2), (p3))
+#define REMOTE_INFO_PRINTF4(p1, p2, p3, p4) Log(((TText8*)__FILE__), __LINE__, ESevrInfo, (p1), (p2), (p3), (p4))
+#define REMOTE_INFO_PRINTF5(p1, p2, p3, p4, p5) Log(((TText8*)__FILE__), __LINE__, ESevrInfo, (p1), (p2), (p3), (p4), (p5))
+#define REMOTE_INFO_PRINTF6(p1, p2, p3, p4, p5, p6) Log(((TText8*)__FILE__), __LINE__, ESevrInfo, (p1), (p2), (p3), (p4), (p5), (p6))
+#define REMOTE_INFO_PRINTF7(p1, p2, p3, p4, p5, p6, p7) Log(((TText8*)__FILE__), __LINE__, ESevrInfo, (p1), (p2), (p3), (p4), (p5), (p6), (p7))
+
+#define REMOTE_WARN_PRINTF1(p1) Log(((TText8*)__FILE__), __LINE__, ESevrWarn, (p1))
+#define REMOTE_WARN_PRINTF2(p1, p2) Log(((TText8*)__FILE__), __LINE__, ESevrWarn, (p1), (p2))
+#define REMOTE_WARN_PRINTF3(p1, p2, p3) Log(((TText8*)__FILE__), __LINE__, ESevrWarn, (p1), (p2), (p3))
+#define REMOTE_WARN_PRINTF4(p1, p2, p3, p4) Log(((TText8*)__FILE__), __LINE__, ESevrWarn, (p1), (p2), (p3), (p4))
+#define REMOTE_WARN_PRINTF5(p1, p2, p3, p4, p5) Log(((TText8*)__FILE__), __LINE__, ESevrWarn, (p1), (p2), (p3), (p4), (p5))
+#define REMOTE_WARN_PRINTF6(p1, p2, p3, p4, p5, p6) Log(((TText8*)__FILE__), __LINE__, ESevrWarn, (p1), (p2), (p3), (p4), (p5), (p6))
+#define REMOTE_WARN_PRINTF7(p1, p2, p3, p4, p5, p6, p7) Log(((TText8*)__FILE__), __LINE__, ESevrWarn, (p1), (p2), (p3), (p4), (p5), (p6), (p7))
+
+#define REMOTE_ERR_PRINTF1(p1) Log(((TText8*)__FILE__), __LINE__, ESevrErr, (p1))
+#define REMOTE_ERR_PRINTF2(p1, p2) Log(((TText8*)__FILE__), __LINE__, ESevrErr, (p1), (p2))
+#define REMOTE_ERR_PRINTF3(p1, p2, p3) Log(((TText8*)__FILE__), __LINE__, ESevrErr, (p1), (p2), (p3))
+#define REMOTE_ERR_PRINTF4(p1, p2, p3, p4) Log(((TText8*)__FILE__), __LINE__, ESevrErr, (p1), (p2), (p3), (p4))
+#define REMOTE_ERR_PRINTF5(p1, p2, p3, p4, p5) Log(((TText8*)__FILE__), __LINE__, ESevrErr, (p1), (p2), (p3), (p4), (p5))
+#define REMOTE_ERR_PRINTF6(p1, p2, p3, p4, p5, p6) Log(((TText8*)__FILE__), __LINE__, ESevrErr, (p1), (p2), (p3), (p4), (p5), (p6))
+#define REMOTE_ERR_PRINTF7(p1, p2, p3, p4, p5, p6, p7) Log(((TText8*)__FILE__), __LINE__, ESevrErr, (p1), (p2), (p3), (p4), (p5), (p6), (p7))
+
+
+#endif