messagingfw/wappushfw/pushutils/test/t_failure.cpp
changeset 62 db3f5fa34ec7
parent 0 8e480a14352b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/wappushfw/pushutils/test/t_failure.cpp	Wed Nov 03 22:41:46 2010 +0530
@@ -0,0 +1,281 @@
+// Copyright (c) 2000-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:
+//
+
+#include <e32std.h>
+#include <e32test.h>
+#include <push/pushmessage.h>
+#include <push/cpushhandlerbase.h>
+#include <push/pushlog.h>
+#include "testlog.h"
+#include "t_failure.h"
+
+_LIT(KTestTitle,"T_Failure");
+_LIT8(KHeader,"This is a dummy header");
+_LIT8(KBody,"This is a dummy message body");
+_LIT(KAppIdBufFormat, "0x%08x");
+
+// Setting up parameters for CPushHandlerBase::NewL()
+const TInt KAppId = 2;
+const TInt KAppIdLength = 10;
+
+// Global variables
+RTest gTest(_L("t_Failure Test Harness"));
+
+CPushMessageTester* CPushMessageTester::NewL()
+	{
+	CPushMessageTester* self = new (ELeave) CPushMessageTester();
+	return self;
+	}
+
+CPushMessageTester::CPushMessageTester()
+	{
+	}
+
+CPushMessageTester::~CPushMessageTester()
+	{
+	delete iHeader;
+	delete iBody;
+	delete iMessage;
+	}
+
+void CPushMessageTester::PluginFailureTestL()
+	{
+	TBuf<KAppIdLength> AppIdBuf;
+	AppIdBuf.Format(KAppIdBufFormat, KAppId);
+	CPushHandlerBase* pushHandler = NULL; 
+	pushHandler = CPushHandlerBase::NewL(AppIdBuf, KUidPushHandlerBase);
+	delete pushHandler;
+	}
+
+void CPushMessageTester::FailureTestL()
+	{
+	// constructing CPushMessage with the arguments as member variables
+	iHeader	= KHeader().AllocL();
+	iBody	= KBody().AllocL();
+
+	iMessage = CPushMessage::NewL(iHeader, iBody);
+	iHeader = NULL;
+	iBody = NULL;
+	}
+
+CFailureTester* CFailureTester::NewL(CWapPushLog& aLog)
+	{
+	CFailureTester* self = new (ELeave) CFailureTester(aLog);
+	return self;
+	}
+
+CFailureTester::CFailureTester(CWapPushLog& aLog)
+:iLog(aLog)
+	{
+	}
+
+CFailureTester::~CFailureTester()
+	{
+	delete iScheduler;
+	}
+
+void CFailureTester::LogFormatInt(const TDesC& aFormat, TInt aInt)
+	{
+	iFormatBuffer.Format(aFormat, aInt);
+	iLog.WPLPrintf(iFormatBuffer);
+	}
+
+void CFailureTester::LogFormatInt(const TDesC& aFormat, TInt aInt1, TInt aInt2)
+	{
+	iFormatBuffer.Format(aFormat, aInt1, aInt2);
+	iLog.WPLPrintf(iFormatBuffer);
+	}
+
+void CFailureTester::LogFormatStr(const TDesC& aFormat, const TDesC& aDes)
+	{
+	iFormatBuffer.Format(aFormat, &aDes);
+	iLog.WPLPrintf(iFormatBuffer);
+	}
+
+void CFailureTester::LogStr(const TDesC& aDes)
+	{
+	iLog.WPLPrintf(aDes);
+	}
+
+void CFailureTester::HeapFailureTest()
+	{
+	__LOG_ALWAYS("Test Results");
+	__LOG_ALWAYS(" ");
+
+	__LOG_ALWAYS("***** HEAP FAILURE TEST FOR PUSH MESSAGE *****");
+
+	TInt error;
+	TBool finished = EFalse;
+	TInt failCount = 0;
+	CPushMessageTester* push = NULL;
+	while(!finished)
+		{
+		__UHEAP_FAILNEXT(failCount++);
+		__UHEAP_MARK;
+		TRAP(error, push = DoPushMessageTestL());
+		if (error == KErrNone)
+			{
+			delete push;
+			__UHEAP_RESET;
+			LogFormatInt(_L("Made %d attempts at calling DoPushMessageTestL()"), failCount);
+			finished = ETrue;
+			}
+		else  // Handle error
+			{
+			// Check if error is out of memory
+			gTest(error == KErrNoMemory);
+			__UHEAP_RESET;
+			}
+		__UHEAP_MARKEND;
+		}
+
+	__LOG_ALWAYS("RTEST: SUCCESS ***** PUSH MESSAGE TEST SUCCESSFUL ******");
+	__LOG_ALWAYS(" ");
+	}
+
+void CFailureTester::PluginHeapFailureTest()
+	{
+	__LOG_ALWAYS("***** HEAP FAILURE TEST FOR PLUGIN *****");
+
+	TInt error;
+	TBool finished = EFalse;
+	TInt failCount = 0;
+	CPushMessageTester* push = NULL;
+	while(!finished)
+		{
+		__UHEAP_FAILNEXT(failCount++);
+		__UHEAP_MARK;
+		TRAP(error, push = CreatePushHandlerBaseL());
+		if (error == KErrNone)
+			{
+			delete push;
+			__UHEAP_RESET;
+			LogFormatInt(_L("Made %d attempts at calling CreatePushHandlerBaseL()"), failCount);
+			finished = ETrue;
+			}
+		else  // Handle error
+			{
+			// Check if error is out of memory
+			gTest(error == KErrNoMemory);
+			__UHEAP_RESET;
+			}
+		REComSession::FinalClose();
+		__UHEAP_MARKEND;
+		}
+
+	__LOG_ALWAYS("RTEST: SUCCESS ***** PLUGIN TEST SUCCESSFUL ******");
+	__LOG_ALWAYS(" ");
+	__LOG_ALWAYS("Tests Completed");
+	}
+
+
+CPushMessageTester* CFailureTester::DoPushMessageTestL()
+	{
+	// First case
+	CPushMessageTester* tester = CPushMessageTester::NewL();	
+	CleanupStack::PushL(tester);
+	tester->FailureTestL();
+	
+	// Second case
+	CPushMessage* message = DoPushMessageTest2L();
+	delete message;
+
+	CleanupStack::Pop(tester);
+	return tester;	
+	}
+
+
+CPushMessageTester*  CFailureTester::CreatePushHandlerBaseL()
+	{
+	CPushMessageTester* tester = CPushMessageTester::NewL();	
+	CleanupStack::PushL(tester);
+	tester->PluginFailureTestL();
+	CleanupStack::Pop(tester);
+	return tester;	
+	}
+
+
+CPushMessage* CFailureTester::DoPushMessageTest2L()
+	{
+	// constructing CPushMessage with the arguments put on the cleanupstack
+
+	HBufC8*	header	= KHeader().AllocLC();
+	HBufC8* body	= KBody().AllocLC();
+
+	CPushMessage* push = CPushMessage::NewL(header, body);	
+	
+	CleanupStack::Pop(2);  //Header, Body
+	return push;	
+	}
+
+void CFailureTester::InitSchedulerL()
+	{
+	iScheduler = new (ELeave) CActiveScheduler();
+	CActiveScheduler::Install( iScheduler );
+	}
+
+
+/**
+ * setup test environment, create CFailureTester object and run tests.
+ * 
+ * This is an OOM test. 
+ * It tests 3 cases: 
+ * (i) constructing CPushMessage with the arguments as member variables.
+ * (ii) constructing CPushMessage with the arguments put on the cleanupstack.
+ * (iii) constructing CPushHandlerBase 
+ * Running Instructions:
+ * 1. Build this test harness:	cd \wappush\pushutils\group
+ *								bldmake bldfiles
+ *								abld test build wins udeb t_failure
+ * 2. Create log directories in	c:\logs\push 
+ * 3. Run TFailure.exe:			cd \epoc32\release\wins\udeb
+ *								tfailure -dtextshell -- 
+ */
+LOCAL_C void doMainL()
+	{
+	gTest.Start(KTestTitle);
+			
+	gTest.Printf(_L("@SYMTestCaseID IWS-WAPBROWSER-PUSHUTILS-T_FAILURE-0001 "));	
+	
+	CWapPushLog* log = CWapPushLog::NewL(*gTest.Console());
+	log->SetLogFileName(_L("TFailure.txt"));
+	CleanupStack::PushL(log);
+
+	CFailureTester* myTester = CFailureTester::NewL(*log);
+	CleanupStack::PushL(myTester);
+	myTester->HeapFailureTest();
+	myTester->InitSchedulerL();
+	myTester->PluginHeapFailureTest();
+
+	
+	CleanupStack::PopAndDestroy(2, log); //log, myTester
+	gTest.End();
+	gTest.Close();
+	}
+
+
+/** entry point for test executable */
+GLDEF_C TInt E32Main()
+	{	
+	__UHEAP_MARK;
+
+	CTrapCleanup* theCleanup = CTrapCleanup::New();
+	TRAPD(ret,doMainL());		
+	gTest(ret==KErrNone);
+	delete theCleanup;	
+
+	__UHEAP_MARKEND;
+	return(KErrNone);
+	}