pimappservices/calendar/tsrc/caltestoom.cpp
changeset 0 f979ecb2b13e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pimappservices/calendar/tsrc/caltestoom.cpp	Tue Feb 02 10:12:19 2010 +0200
@@ -0,0 +1,99 @@
+// Copyright (c) 2006-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 "caltestoom.h"
+#include "caltestlib.h"
+
+#include <calsession.h>
+#include <e32debug.h>
+#include <ecom/ecom.h>
+
+EXPORT_C void CalTestOom::OutOfMemoryTestL(MCalTestOomCallBack& aCallBack, MCalTestOomCallBack::TType aType, CCalSession& aCalSession)
+	{
+	TInt clientFailAt(0);
+	TInt serverFailAt(0);
+	
+	TAny* dummy = NULL;
+	
+	TBool cleanCache = EFalse;
+	
+	for (TInt i(0) ; i < 10000 ; ++i)
+		{
+		CleanupStack::PushL(dummy);
+		}
+		
+	CleanupStack::Pop(10000);
+	
+	if(aType == MCalTestOomCallBack::EClient)
+		{
+		FOREVER
+			{
+			aCalSession.__dbgClearTzClientCacheL(cleanCache);
+			__UHEAP_SETFAIL(RHeap::EDeterministic, ++clientFailAt);
+			__UHEAP_MARK;
+			
+			TRAPD(err, aCallBack.OomTestL(MCalTestOomCallBack::EClient, clientFailAt));
+			
+			__UHEAP_RESET;
+			
+			REComSession::FinalClose();
+			
+			aCalSession.__dbgClearTzClientCacheL(cleanCache);
+						
+			if (err == KErrNoMemory)
+				{
+				__UHEAP_MARKEND;
+				}
+			else if (err == KErrNone)
+			    {
+			    break;
+			    }
+			else
+				{
+				User::Leave(err);
+				}
+			}
+			cleanCache = ETrue;
+			aCalSession.__dbgClearTzClientCacheL(cleanCache);
+		}
+	else if(aType == MCalTestOomCallBack::EServer)
+		{
+		
+		// server side oom test
+		FOREVER
+			{
+			aCalSession._DebugSetHeapFailL(RAllocator::EDeterministic, ++serverFailAt);
+			
+			TRAPD(err, aCallBack.OomTestL(MCalTestOomCallBack::EServer, serverFailAt));
+			
+			REComSession::FinalClose();
+			
+			if (err == KErrNoMemory)
+				{
+				aCalSession._DebugSetHeapFailL(RAllocator::ENone, 0);
+				}
+			else if (err == KErrNone)
+				{
+				aCalSession._DebugSetHeapFailL(RAllocator::ENone, 0);
+				break;
+				}
+			else
+				{
+				aCalSession._DebugSetHeapFailL(RAllocator::ENone, 0);
+				User::Leave(err);
+				}
+			}
+		}
+	}