--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyprotocols/csdagt/TS_CsdAgt/CsdAgtTestOOM.cpp Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,121 @@
+// Copyright (c) 2001-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:
+// CsdAgtTestClosure.cpp
+// This contains CsdAgt TestCase Test 4.1
+//
+//
+
+// EPOC includes
+#include <e32base.h>
+#include <in_sock.h>
+
+// Test system includes
+#include "log.h"
+#include "teststep.h"
+#include "TestStepCsdAgt.h"
+#include "TestSuiteCsdAgt.h"
+
+// COMMDB Database Undo
+#include "DbUndo.h"
+
+// EConnectionOpen
+#include <csdprog.h>
+
+// Class definitions
+#include "CsdAgtTestOOM.h"
+
+#define MaxAllocationFailures 1500
+#define MaxConsecutiveSuccess 5 //maximum number of consecutive successful operations
+ //indicating that from now on the __HEAP_FAILNEXT()
+ //cannot cause a failure anymore
+
+/**
+ * Test case 4.1
+ *
+ */
+enum TVerdict CCsdAgtTest4_1::doCsdAgtTestStepL( void )
+ {
+ TInt failCount=500;
+ TInt successCount=0;
+ TInt ret=-1;
+
+ TRealAgtNotify AgtNotify;
+
+ AgtNotify.SetTestCase(10401);
+ SetGSMModeL(AgtNotify);
+
+ while(failCount < MaxAllocationFailures && successCount < MaxConsecutiveSuccess)
+ {
+ // Mark heap and set allocation to fail
+ __UHEAP_MARK;
+ __UHEAP_FAILNEXT(failCount);
+
+ Log(_L("Incrementing __HEAP_FAILNEXT(%d) of %d"), failCount, MaxAllocationFailures);
+
+ // Connect, most likely fail at some point
+ TRAP(ret,NormalConnectL());
+
+ User::After(200000); // Allow async libraries to unload
+
+ // Check all heap is free'd
+ __UHEAP_MARKEND;
+
+ if(ret == KErrNone)
+ {
+ // Allocation failure has been moved all the way through the test
+ // Succeeded after failCount allocations
+ //return iTestStepResult;
+
+ // Clear __UHEAP_FAILNEXT
+ __UHEAP_RESET;
+
+ //Operation may succeed even in OOM test due to interuption
+ //in propagating the exception, so let it to continue to the
+ //maximum number of iterations. (the next iteration might fail)
+ Log(_L("Operation completed @ iteration %d"), failCount);
+
+ //Mark the success
+ //At this stage we don't know if it's a real success
+ successCount++;
+ }
+ else if(ret == KErrNoMemory)
+ {
+ // Reset test result to pass since the allocation failure most
+ // likely caused it to fail
+ iTestStepResult = EPass;
+
+ //Start counting the consecutive successful operations again
+ successCount=0;
+ }
+ else
+ {
+ // Failure other than Memory failure this would be the result of a bug
+ iTestStepResult = EFail;
+ return iTestStepResult;
+ }
+ Log(_L("Run completed with %d after failcount of %d and successcount of %d"), ret, failCount, successCount);
+
+ // Try failing a little further into the process
+ failCount++;
+ }
+
+ if (failCount == MaxAllocationFailures)
+ {
+ // We have reached our maximum number of allocation failures
+ // There must be some other problem within the NormalConnect() function
+ iTestStepResult=EFail;
+ }
+
+ return iTestStepResult;
+ }