telephonyserverplugins/common_tsy/test/integration/inc/cctsyintegrationtestsuitebase.h
changeset 0 3553901f7fa8
child 24 6638e7f4bd8f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/common_tsy/test/integration/inc/cctsyintegrationtestsuitebase.h	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,435 @@
+// Copyright (c) 2007-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:
+// The declaration of the CTSY integration test suite base class.
+// 
+//
+
+/**
+ @internalTechnology
+*/
+
+#ifndef __CCTSYINTEGRATIONTESTSUITEBASE_H__
+#define __CCTSYINTEGRATIONTESTSUITEBASE_H__
+
+#include <test/testexecutestepbase.h>
+
+#include <etelmm.h>
+#include <etelpckt.h>
+
+#include "tetelrequeststatus.h"
+#include "rpsownnumbers.h"
+#include "townnumbersmanager.h"
+#include "rpsasciirqstdefs.h"
+
+class CEtelSessionMgr;
+
+/**
+Test result allocation:
+
+EInconclusive: (INCONCLUSIVE)
+-	The test can't be run because the HW, LTSY, SIM or Network 
+	doesn't support a require functionality or capability. 
+	Example: Call waiting indicator test and the SIM doesn't 
+	support call waiting.
+-	The test setup can't be completed due to an expected error. 
+	Example: the test setup requires to have a active call but 
+	this call can't be connected because the network is too busy.
+No actions require, the test is correct and may pass on others 
+condition/configuration.
+
+ETestSuiteError: (UNKNOWN)
+-	The test setup can't be completed due to an unexpected error
+	or leave. Example: the test setup requires to have a line 
+	status change notification active but the call to activate 
+	this notification returned an error.
+There is a problem with the test setup that must be investigated.
+
+EIgnore: (UNEXECUTED)
+-	The test fails for a known reason, but it cannot be fixed in 
+	the near future. Example: there is a known problem with the 
+	baseband that makes the test fail.
+
+EAbort: (ABORT)
+-	Generated by TEF when a test timeout
+*/
+
+/*************************************************************************************
+INSTRUCTIONS on good use of MACROS!
+
+1) Only use CHECK_XXX macros between SET UP and SET UP END sections of doTestStepL.
+2) Only use ASSERT_XXXX macros in procedure section of doTestStepL I.e. Between TEST START and TEST END.
+3) Use ASSERT_EQUALS_XX where possible as this will automatically log out actual and expected values on failure.
+4) Do not use ASSERT_TRUE for testing equality of simple types.  This is because on failure it will not data. Prefer ASSERT_EQUALS_XX instead.
+5) Comparison of complex types (e.g. TMobileCallInfoV1) can either be compared on each field (so would use ASSERT_EQUALS_XX) or a comparator obect can be created
+   and ASSERT_TRUE used.  E.g  ASSERT_TRUE(cmpObj.IsEqual(ELogError), _L("Failed kkk"));
+6) If comparator object is used the IsEquals() should be passed ELogError to ensure data is logged on failure.
+*************************************************************************************/
+
+
+
+/**
+description: ASSERT_EQUALS may be used to test equality of two values.  <result> argument may also be an expression returning a simple type.
+usage: For testing equality of simple types, e.g. TInt, TBool, TReal, caps, enums.
+exceptions: Not for use for testing equality of complex types e.g TMobileCallInfoV1.  Use ASSERT_TRUE with a TCmpBase derived comparator class
+exceptions: Not for use for testing equality of descriptors.  See ASSERT_EQUALS_DES8 and ASSERT_EQUALS_DES16.
+logging: when comparison fails macro will log out the actual and expected values that have been compared. 
+		 E.g. "FAILURE: Got 0, Expected 3 : my error22."
+example: ASSERT_EQUALS(RMobileCall::EMulticallNotSupported, RMobileCall::EMulticallNotSupported, _L("my error4."));
+example: ASSERT_EQUALS(DoSomething(), 3, _L("my error22."));
+example: ASSERT_EQUALS(-5, KErrNotSupported, _L("my error4."));
+
+@param result. simple value to compare
+@param expected. expected value to test against
+@param msg. string to print out if comaprison fails.
+*/
+#define ASSERT_EQUALS(result, expected, msg)														\
+    {																								\
+    if(!assert_equals(Logger(),((TText8*)__FILE__), __LINE__, ESevrErr, result, expected, msg)) 	\
+	    { 																							\
+	    SetAssertResult();				 															\
+        } 																							\
+    }
+
+
+/**
+description: ASSERT_EQUALS_DES8 may be used to test equality of two 8-bit descriptors.  <result> argument may also be an expression returning a 8-bit descriptor.
+usage: For testing equality of 8-bit descriptors e.g. TDes8, TDesC8, TBuf8. 
+exception: Not for use for testing equality of complex types e.g TMobileCallInfoV1.  Use ASSERT_TRUE with a TCmpBase derived comparator class
+exception: Not for use for testing equality simple types.  See ASSERT_EQUALS.
+exception: Not for use for testing equality of 16-bit descriptors.  See ASSERT_EQUALS_DES16.
+logging: when comparison fails macro will log out the actual and expected values that have been compared. 
+		 E.g. "FAILURE: Got bbbbbbbbbbbbbbbbbbbb, Expected cccccccccccccccccccc : my error44."
+		 Logging will truncate logged strings to length KMaxLogCharLength.
+example: ASSERT_EQUALS_DES8(buf1, buf2, _L("my error4."));
+
+@param result. TDes8 value to compare
+@param expected. expected value to test against
+@param msg. string to print out if comaprison fails.
+*/    		
+#define ASSERT_EQUALS_DES8(result, expected, msg)																\
+    {																											\
+    if(!assert_equals_des8(Logger(),((TText8*)__FILE__), __LINE__, ESevrErr, result, expected, msg)) 	\
+	    { 																										\
+	    SetAssertResult();				 																		\
+        }																										\
+    }
+
+    
+/**
+description: ASSERT_EQUALS_DES16 may be used to test equality of two 16-bit descriptors.  <result> argument may also be an expression returning a 16-bit descriptor.
+usage: For testing equality of 16-bit descriptors e.g. TDes16, TDesC16, TBuf16. 
+exception: Not for use for testing equality of complex types e.g TMobileCallInfoV1.  Use ASSERT_TRUE with a TCmpBase derived comparator class
+exception: Not for use for testing equality simple types.  See ASSERT_EQUALS.
+exception: Not for use for testing equality of 8-bit descriptors.  See ASSERT_EQUALS_DES8.
+logging: when comparison fails macro will log out the actual and expected values that have been compared. 
+		 E.g. "FAILURE: Got bbbbbbbbbbbbbbbbbbbb, Expected cccccccccccccccccccc : my error44."
+		 Logging will truncate logged strings to length KMaxLogCharLength.
+example: ASSERT_EQUALS_DES16(buf1, buf2, _L("my error4."));
+
+@param result. TDes16 value to compare
+@param expected. expected value to test against
+@param msg. string to print out if comaprison fails.
+*/ 
+#define ASSERT_EQUALS_DES16(result, expected, msg)															\
+    {																										\
+    if(!assert_equals_des16(Logger(),((TText8*)__FILE__), __LINE__, ESevrErr, result, expected, msg)) 		\
+	    { 																									\
+	    SetAssertResult();																					\
+	    }																									\
+	}
+
+/**
+description: ASSERT_TRUE may be used to test for true statements.  <value> argument may also be an expression returning a bool.
+			 This macro should be used for testing inequality statements holding true e.g. >,<,>=, <=
+usage: For testing boolean true.  This macro should be used when checking for equality in TCmpBase and TCapsCmpBase derived classes for complex types.
+exception: Not for use for testing equality of simple types or descriptor types. Use one of ASSERT_EQUALS_XXX macros.
+logging: Does not log input values.  Will only log message below concatonated with <msg>
+		 E.g. "FAILURE: Expected true : <msg>."
+example: ASSERT_TRUE(5>3, _L("my error4."));
+example: ASSERT_TRUE(cmpObj.IsEqual(ELogError), _L("Failed kkk"));
+
+@param value. to check for boolean true.
+@param msg. string to print out if check fails.
+*/
+_LIT(KAssertTrueText, "FAILURE: Expected true : %S");
+
+#define ASSERT_TRUE(value, msg)														\
+	{																				\
+	TBool result = value;															\
+	if (!result)																	\
+	    {																			\
+	    TPtrC m = (msg);															\
+	    ERR_PRINTF2(KAssertTrueText, &m);											\
+	    SetAssertResult();															\
+	    }																			\
+	}						
+
+
+/**
+description: ASSERT_BITS_SET may be used to test correct capbilities set in a bitmask.  
+usage: For comparison of actual bitmask with expected bitmask. Comparison is based on matching wanted and unwanted bits.  All other bits are ignored.
+logging: when check fails macro will logs out actual bit mask and wanted and unwanted bitmasks.
+		 E.g. "FAILURE: Wrong bits set : Got 0x19 , required 0x10, unwanted 0x2 : <msg>"
+example: ASSERT_BITS_SET(dynCaps, expectedCaps, unwantedCaps, _L("Wrong dynamic caps"))
+
+@param value. bitmaks to check.
+@param wantedBits. wanted bits in value mask
+@param unwantedBits. Unwanted bits in value mask.
+@param msg. string to print out if check fails.
+*/
+
+/**
+ * Use this in the ASSERT_BITS_SET macro setting wantedBits to this value if
+ * there are no wanted bits.
+ */
+const TUint KNoWantedBits = 0;
+/**
+ * Use this in the ASSERT_BITS_SET macro setting wantedBits to this value if
+ * there are no unwanted bits.
+ */
+const TUint KNoUnwantedBits = 0;
+
+_LIT(KAssertBitsSet, "FAILURE: Wrong bits set : Got 0x%x , required 0x%x, unwanted 0x%x : %S");
+
+#define ASSERT_BITS_SET(value, wantedBits, unwantedBits, msg)						\
+    {																				\
+	if( (((value) & (wantedBits))  != (wantedBits)) ||								\
+		(((value) & (unwantedBits)) != 0) )											\
+		{																			\
+		TPtrC m = (msg);															\
+		ERR_PRINTF5(KAssertBitsSet, value, wantedBits, unwantedBits, &m);			\
+		SetAssertResult();															\
+		}																			\
+    }
+
+/**
+ * Causes the test to leave if it has failed at this point.
+ * When the test leaves, message msg is logged to the log file.
+ * 
+ * This macro should be used at a point in the test to cause
+ * it to leave if there is no point in proceeding with the
+ * test if it has already failed. Use sparingly!
+ * 
+ * Example: TEST_CHECK_POINT_L(_L("Could not dial a call."));
+ */
+_LIT(KTestCheckPointText, "TEST CHECK POINT FAILURE: %S");
+#define TEST_CHECK_POINT_L(msg)					\
+	{											\
+	if (TestStepResult() != EPass)				\
+		{										\
+		TPtrC m = (msg);						\
+		ERR_PRINTF2(KTestCheckPointText, &m);	\
+		User::Leave(KErrGeneral);				\
+		}										\
+	};
+
+
+// NOTE: These CHECK_XXX macros for test setup only, 
+// to check a test pre-condidion. 
+// To be used between SET UP and SET UP END in test step.
+
+_LIT(KCheckText, "SET UP FAILURE: %S");
+
+#define CHECK_TRUE_L(cond, msg)														\
+    if(!(cond)) 																	\
+	    { 																			\
+		TPtrC m = (msg);															\
+	    WARN_PRINTF2(KCheckText, &m); 												\
+	    SetCheckResultL();															\
+        } 		
+
+
+#define CHECK_EQUALS_L(result, expected, msg)														\
+    {																								\
+    if(!assert_equals(Logger(),((TText8*)__FILE__), __LINE__, ESevrErr, result, expected, msg)) 		\
+	    { 																							\
+	    SetCheckResultL();				 															\
+        } 																							\
+    }
+
+
+_LIT(KCheckBitsSetText, "SET UP FAILURE: Got 0x%x , required 0x%x, unwanted 0x%x : %S");
+
+#define CHECK_BITS_SET_L(value, wantedBits, unwantedBits, msg)						\
+    {																				\
+	if ((((value) & wantedBits) != wantedBits) ||									\
+		(((value) & unwantedBits) != 0))											\
+		{																			\
+		TPtrC m = (msg);															\
+		WARN_PRINTF5(KCheckBitsSetText, value, wantedBits, unwantedBits, &m);		\
+		SetCheckResultL();															\
+		}																			\
+    }	
+
+
+/*
+ * Debug logging macros.
+ * 
+ * These macros wrap around the regular INFO_PRINTFX macros defined in TestExecute
+ * but allow logging to be turned on or off depending on whether
+ * the ENABLE_DEBUG_LOGGING macro is defined in the mmp file. 
+ */
+#ifdef ENABLE_DEBUG_LOGGING
+
+	#ifndef ENABLE_COMMS_DEBUG_UTIL_LOGGING // Route logging to TEF script
+		#define DEBUG_PRINTF1(p1)				INFO_PRINTF1(p1)
+		#define DEBUG_PRINTF2(p1, p2)			INFO_PRINTF2(p1, p2)
+		#define DEBUG_PRINTF3(p1, p2, p3)		INFO_PRINTF3(p1, p2, p3)
+		#define DEBUG_PRINTF4(p1, p2, p3, p4)	INFO_PRINTF4(p1, p2, p3, p4)
+	#else // Route logging to CommsDebugUtil and to TEF log file
+
+		#include <comms-infras/commsdebugutility.h>
+
+		_LIT8(KTSYSubSystem, "tsy");
+		_LIT8(KTSYCompnt, "ctsytest");
+
+		#define DEBUG_PRINTF1(AAA)             { __FLOG_STATIC0(KTSYSubSystem, KTSYCompnt, (AAA)); INFO_PRINTF1(AAA); }
+		#define DEBUG_PRINTF2(AAA,BBB)         { __FLOG_STATIC1(KTSYSubSystem, KTSYCompnt, (AAA), (BBB)); INFO_PRINTF2(AAA, BBB); }
+		#define DEBUG_PRINTF3(AAA,BBB,CCC)     { __FLOG_STATIC2(KTSYSubSystem, KTSYCompnt, (AAA), (BBB), (CCC)); INFO_PRINTF3(AAA, BBB, CCC); }
+		#define DEBUG_PRINTF4(AAA,BBB,CCC,DDD) { __FLOG_STATIC3(KTSYSubSystem, KTSYCompnt, (AAA), (BBB), (CCC), (DDD)); INFO_PRINTF4(AAA, BBB, CCC, DDD); }
+		
+		#define DEBUG_HEX_PRINTF2(AAA)	   {RFileLogger::HexDump(KTSYSubSystem, KTSYCompnt, (AAA)); }	
+
+	#endif // ENABLE_COMMS_DEBUG_UTIL_LOGGING
+
+#else
+	#define DEBUG_PRINTF1(p1)		
+	#define DEBUG_PRINTF2(p1, p2)	
+	#define DEBUG_PRINTF3(p1, p2, p3)
+	#define DEBUG_PRINTF4(p1, p2, p3, p4)
+#endif // ENABLE_DEBUG_LOGGING
+
+
+/**
+test helper functions
+*/
+
+_LIT(KAssertErrorEqualsText,"FAILURE: Got %d, Expected %d : %S"); 
+_LIT(KAssertErrorEqualsTextDes,"FAILURE: Got %S, Expected %S : %S");
+const TInt KMaxLogCharLength = 20;
+
+template<class T>
+inline TBool assert_equals(CTestExecuteLogger& aLogger, const TText8* aFile, TInt aLine, TInt aSeverity, T aRes, T aExp, TPtrC aMsg)
+	{
+	if(aRes != aExp)
+		{
+		aLogger.LogExtra(aFile, aLine, aSeverity, KAssertErrorEqualsText, aRes, aExp, &aMsg);
+		return EFalse;
+		}
+	return ETrue;
+	}
+	
+
+TBool assert_equals_des16(CTestExecuteLogger& aLogger, const TText8* aFile, TInt aLine, 
+	TInt aSeverity, const TDesC& aRes, const TDesC& aExp, const TDesC& aMsg);
+
+TBool assert_equals_des8(CTestExecuteLogger& aLogger, const TText8* aFile, 
+	TInt aLine, TInt aSeverity, const TDesC8& aRes, const TDesC8& aExp, const TDesC& aMsg);
+
+
+// Time constants
+const TInt KOneSecond = 1000000;
+
+/**
+ * Timeouts
+ */
+enum TTimeDuration
+	{
+	ETimeShort = 5*KOneSecond, 		// Simple LTSY transaction
+	ETimeMedium = 20*KOneSecond,	// Simple SIM access
+	ETimeLong = 60*KOneSecond,		// When sending something to the network
+	ETimeVeryLong = 120*KOneSecond	// Multiple network transactions or SIM access
+	};
+
+const TInt KTwentySeconds = 20*1000000;//deliberately not using KOneSecond in case it gets reduced to speed up tests.  Do not want to reduce time for user interaction.
+class CRPSMaster;
+class MRpsFunctorBase;
+class CCTSYIntegrationTestSuiteStepBase : public CTestStep
+/**
+ * Base test step class from which all test steps inherit.
+ */
+	{
+public:
+
+	virtual ~CCTSYIntegrationTestSuiteStepBase();
+	CCTSYIntegrationTestSuiteStepBase(CEtelSessionMgr& aEtelSessionMgr);
+
+	virtual TVerdict doTestStepPreambleL(); 
+	virtual TVerdict doTestStepPostambleL();
+
+	void SetAssertResult();
+	void SetCheckResultL();
+	TInt WaitForRequestWithTimeOut(TEtelRequestBase& aRequestStatus,  TTimeDuration aTimeOut);
+	
+	void ConsolePrintL(const TDesC& aText );
+	
+	void DisplayUserInteractionPromptL(const TDesC& aText, TTimeDuration aTimeOut = ETimeMedium);
+	
+	inline void SetRpsHandle(CRPSMaster* aRPS) 
+		{
+		iRPS = aRPS;
+		};
+		
+	inline void SetOwnNumbersManager(TOwnNumbersManager* aOwnNumbers)
+		{
+		iOwnNumbersCache.SetOwnNumbersManager(aOwnNumbers);
+		};
+		
+	inline TBool UsingRps() const
+		{
+		// if the pointer to RPS is null, return false, else return true
+		return ((iRPS==NULL)?EFalse:ETrue);
+		}
+	void GetRPSNumber(TEtelLine aLine, TPtrC& aNumber);
+		
+	//RPS dispatch requests
+	TInt RPSDialNumberL(const TDesC& aNumToDial, TEtelLine aLine);
+	TInt RPSRequestIncomingCallL(TEtelLine aLine);
+	TInt RPSRequestIncomingCancelBeforeConnectL(TEtelLine aLine, TInt aDelay);
+	TInt RPSRequestIncomingHangupAfterConnectL(TEtelLine aLine, TInt aDelay);
+	TInt RPSAnswerNextCallThenHangupL(TEtelLine aLine, TInt aDelay);
+	TInt RPSAnswerNextCallL(TEtelLine aLine);
+	TInt RPSAnswerNextCallThenHoldL(TEtelLine aLine, TInt aDelay);
+	TInt RPSIgnoreNextCallL(TEtelLine aLine);	
+	TInt RPSHoldL(TEtelLine aLine, TInt aDelay);
+	TInt RPSResumeL(TEtelLine aLine, TInt aDelay);
+	TInt RPSHangupL(TEtelLine aLine, TInt aDelay);
+	TInt RPSHangUpNextCallBeforeConnectL(TEtelLine aLine);
+	TInt RPSEchoDataL(const TDesC& aDataToSend);
+	TInt RPSRejectNextCallL(TEtelLine aLine);
+	
+	void AsyncExec(CThreadExec::MFunctor* aFunction);
+	void SyncExec(CThreadExec::MFunctor* aFunction);
+protected:
+	void StartSetup();
+	void StartTest();
+	void StartCleanup();
+	void RPSCleanupL();
+	TInt ExecuteRemoteRequestL(MRpsFunctorBase& aRpsFunctor, const TDesC& aRpsCallMsg);
+	TInt DoPauseL(const TDesC& aText, TTimeDuration aTimeout = ETimeMedium );
+	TPtrC Number(TEtelLine aLine);
+
+protected:
+	CEtelSessionMgr& iEtelSessionMgr;
+
+	TVerdict		iAssertResult;
+	TVerdict		iCheckResult;
+	CRPSMaster* iRPS;
+	
+	// Own Number Info
+	TOwnNumbersCache iOwnNumbersCache;
+
+	}; // class CCTSYIntegrationTestSuiteStepBase
+
+#endif // __CCTSYINTEGRATIONTESTSUITEBASE_H__