diff -r 000000000000 -r af10295192d8 networksecurity/tls/ts_tls/TlsOomTestStep.cpp --- /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 + +#include + +// from t_tls.cpp +#include +#include +#include +#include + +#include +#include + +// Test system includes +#include +#include + +#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 +#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; + }