networksecurity/tls/ts_tls/TlsOomTestStep.cpp
changeset 0 af10295192d8
child 71 a800ea6cb454
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networksecurity/tls/ts_tls/TlsOomTestStep.cpp	Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,216 @@
+// Copyright (c) 2003-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:
+// This contains TLS out of memory test
+// 
+//
+
+// EPOC includes
+#include <e32base.h>
+
+#include <ssl.h>
+
+// from t_tls.cpp
+#include <e32cons.h>
+#include <c32comm.h>
+#include <f32file.h>
+#include <es_sock.h>
+
+#include <securesocketinterface.h>
+#include <securesocket.h>
+
+// Test system includes
+#include <networking/log.h>
+#include <networking/teststep.h>
+
+#include "T_TLS_test.h"
+#include "TestSuiteTls.h"
+#include "TlsOomTestStep.h"
+#include "T_TLS_cntrl.h"
+#include "t_oomClientTest.h"
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <securesocket_internal.h>
+#endif
+
+GLREF_C void CommInitL();
+TInt TLSOOMTest(TAny* oOMFailureThresholdAny);
+
+
+_LIT( KTxtTLS, "T_TLS" );
+_LIT( KTxtTLSThreshold, "OOM Threshold: %d" );
+_LIT( KTxtTLSStarting, "Starting OOM Test" );
+
+
+CTlsOomTest::CTlsOomTest()
+/** 
+ * Constructor.
+ * Stores the name of this test case.
+ */
+{
+	iTestStepName = _L("tls_oom");
+}
+
+CTlsOomTest::~CTlsOomTest()
+/**
+ * Destructor
+ */
+{
+}
+
+
+TVerdict CTlsOomTest::doTestStepL( )
+/** 
+ * This is the test code for out of memory test.
+ */
+{
+	COomTestData TestData;
+	TInt OOMaxThreshold;
+
+	// if the test has not left yet it must be a Pass 
+	iTestStepResult = EPass;
+
+	// get the Failure threshold from the test ini file
+	if (!GetIntFromConfig(KSectionName, KCfgFailureThreshold, TestData.iOOMThreshold ))
+			TestData.iOOMThreshold = KDefCfgFailureThreshold;
+
+	if (!GetIntFromConfig(KSectionName, KCfgMaxThreshold, OOMaxThreshold ))
+			OOMaxThreshold = KDefCfgMaxThreshold;
+
+	Log( _L("Test out of memory (__UHEAP_FAILNEXT) values between:%d and %d"), 
+			TestData.iOOMThreshold, OOMaxThreshold );
+
+	// get the ip address and port from ini file 
+	TPtrC aPtrResult;
+	TPtrC* res=&aPtrResult;
+	if ( GetStringFromConfig(KSectionName, KCfgIPAddress, aPtrResult))
+		TestData.iAddress.Copy( aPtrResult );
+	else
+		TestData.iAddress.Copy( KDefCfgIPAddress );
+
+	if (!GetIntFromConfig(KSectionName, KCfgIPPort, TestData.iPortNumber ))
+			TestData.iPortNumber = KDefCfgIPPort;
+
+	Log( _L("IPaddress: %S port:%d"), res, TestData.iPortNumber );
+
+	__UHEAP_MARK;
+
+	TRAPD(error,CommInitL()); // init needed comms libs
+	// create a global semaphore that the dialog server searches for to
+	// decide if "trust" dialogs should be displayed or not
+	RSemaphore	iSemaphore;
+	_LIT( KSemaphoreName, "T_AUTOSSL" );
+	if ( iSemaphore.CreateGlobal( KSemaphoreName, 0 ) != KErrNone )
+		{
+		Log( _L("Semaphore creation failed.") );
+		}
+	TRequestStatus stat;
+	TBuf<30> threadName;
+	_LIT(KthreadNameBase,"OOMTLS");
+	const TUint KDefaultHeapSize=0x10000;
+	const TUint KMaxHeapSize=0x80000;
+	do
+	{
+		//Spawn OOM test in its own thread
+		RThread t;
+		threadName.Copy(KthreadNameBase);
+		threadName.AppendNum( TestData.iOOMThreshold );//OMFailureThreshold);
+		
+		TInt res=t.Create(threadName, TLSOOMTest,KDefaultStackSize,KDefaultHeapSize,KMaxHeapSize,(void*)&TestData);
+
+		__ASSERT_ALWAYS(!res,User::Panic(KTxtTLS,error));
+		Log(KTxtTLSStarting);
+		Log(KTxtTLSThreshold,TestData.iOOMThreshold );//OMFailureThreshold);
+		t.Logon(stat);
+		t.Resume();
+		User::WaitForRequest(stat);
+		Log(_L("TLS OOM test thread terminated with code: %d state: %d"),stat.Int(), TestData.iRunStep);
+		switch (stat.Int())
+			{
+			case KErrCompletion:
+				Log(_L("Secure Socket did not connect"));
+				break;
+			case KErrNone:
+			case KErrEof:
+				Log(_L("Secure Socket DID connect\nTest Run complete "));
+				break;
+			default:
+				Log(_L("Secure Socket did not connect "));
+				break;
+			}
+
+		TestData.iOOMThreshold ++;
+
+		if ( OOMaxThreshold < TestData.iOOMThreshold )
+			{
+			// if this happens then either:
+			// OOMaxThreshold is not high enough (has worked at 846, so 860 sould be ok)
+			// or TLS cannot connect to the SSL server because of a test network or server problem.
+			// so record this as inconclusive
+			Log(_L("Max OOM threshold reached so Test cancelled"));
+			iTestStepResult = EInconclusive;
+			break;
+			}
+#ifdef __WINS__
+	User::After(3000000); //give openssl change to recover
+#endif
+	}while(stat!=KErrNone);
+
+	iSemaphore.Close();
+
+	__UHEAP_MARKEND;
+
+	return iTestStepResult;
+}
+
+TInt TLSOOMTest(TAny* oAny)
+	{
+
+	TInt ret=KErrNone;
+	CTrapCleanup* cleanup=CTrapCleanup::New(); // get clean-up stack
+	// Create an active scheduler
+	CActiveScheduler* myActiveScheduler;
+	myActiveScheduler = new(ELeave) CActiveScheduler();
+	CActiveScheduler::Install( myActiveScheduler );
+
+	//Fetches params
+	COomTestData * TestData = (COomTestData *)oAny;
+
+	__UHEAP_MARK;
+	ClientOOMTest* myTest=0;
+	TRAP(ret,myTest = ClientOOMTest::NewL(myActiveScheduler));
+
+	if(ret == KErrNone)
+		{
+		myTest->SetOOMThreshold(TestData->iOOMThreshold );
+		myTest->SetIpAddress( TestData->iAddress );
+		myTest->SetIpPort( TestData->iPortNumber );
+
+		myTest->Start();
+		// Start the scheduler
+		myActiveScheduler->Start();
+		// return last completion code
+      TestData->iRunStep = myTest->State();
+		ret = myTest->Error();
+		//Force cleaning up of Thread local storage in the loaded DLLs
+		//!!!Note only needed to satisfy the OOM testing
+		//In normal use Thread Local Storage gets cleared in the E32Dll(EThreadDetach)
+		delete myTest;
+		}
+	CSecureSocketLibraryLoader::Unload();
+	__UHEAP_MARKEND;
+
+	// Remove objects from the cleanup stack
+	delete myActiveScheduler;
+	delete cleanup;
+	return ret;
+	}