applayerprotocols/httptransportfw/Test/T_HttpRegression/t_httpregression.cpp
changeset 0 b16258d2340f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerprotocols/httptransportfw/Test/T_HttpRegression/t_httpregression.cpp	Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,344 @@
+// Copyright (c) 2004-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:
+//
+
+// Framework includes
+#if !defined(__HTTPTESTUTILS_H__)
+#include "httptestutils.h"
+#endif
+
+#if !defined(__HTTPTESTCORE_H__)
+#include "HttpTestCore.h"
+#endif
+
+#if !defined(__TESTSCRIPTS_H__)
+#include "TestScripts.h"
+#endif
+
+
+#include "SingleTrans.h"
+
+// Individual test class includes
+#include "t_CLE-4Y5LC9.h"
+#include "t_KHN-4Z7DT7.h"
+#include "t_INC035621.h"
+#include "T_INC053172.h"
+
+
+
+// Constants used in this file
+enum TPanic
+	{
+	EFailedToCreateEngine,
+	EFailedToReadIniFile
+	};
+
+// Name of test harness
+_LIT(KHttpRegressionTestTitle,		"HTTP Regression Tests");
+
+// Location of INI file that defines the test cases to be run
+_LIT(KHttpRegressionTestCompName,	"regression");
+_LIT(KHttpregressionTestscriptName, "RegressionTests.ini");
+
+_LIT(KSettingsIniCompName,			"settings");
+_LIT(KSettingsIniName,				"settings.ini");
+
+// Labels for resources in the INI file
+_LIT(KRunTestItemName,				"RunTest");
+_LIT(KDefaultSection,				"Defaults");
+_LIT(KSilenceItemName,				"Silent");
+_LIT(KLeakTestCount,				"LeakTestCount");
+_LIT(KFirstLeakIteration,			"FirstLeakIteration");
+_LIT(KSectionSingleTrans,			"SINGLE_TRANS");
+_LIT(KZero,							"0");
+
+// Test names, used as section headings in the .ini file, and any resource 
+// names associated with the test
+_LIT(KTestKHN4Z7DT7,				"KHN-4Z7DT7");
+_LIT(KTestCLE4Y5LC9_1,				"CLE-4Y5LC9_1");
+_LIT(KTestCLE4Y5LC9_2,				"CLE-4Y5LC9_2");
+_LIT(KTestINC035621,				"INC035621");
+_LIT(KTestINC053172, "INC053172");
+
+const TInt KMaxHeapSize = 0x100000;
+const TInt KMaxIntDesLen = 10;				// Des length required for displaying max 32 bit int
+_LIT(KTestThreadName,						"TestThread");
+_LIT(KRtestFailureLabel, 					"RTEST: FAILED due to a %S %d Panic ");
+
+
+void DoTestsL()
+	{	
+	TBool runTestDefault = EFalse;
+
+	CTestScheduler* as = new(ELeave) CTestScheduler;
+	CleanupStack::PushL(as);
+	if (!as)
+		User::Panic(_L("Failed to create active scheduler"),KErrNoMemory);
+	CActiveScheduler::Install(as); // Install active scheduler
+	
+	// Initialise Comms, required in a minimal console environment
+	CHTTPTestUtils::InitCommsL();
+
+	// Force a connection to be held open keep NT RAS connected...
+	CHTTPTestUtils::HoldOpenConnectionL();
+	
+	// Create the test engine
+	CHttpTestEngine* engine=NULL;
+	TRAPD(err,engine = CHttpTestEngine::NewL(KHttpRegressionTestTitle(), EFalse));
+	if (err != KErrNone)
+		User::Panic(_L("T_HTTPREGRES"),EFailedToCreateEngine);
+	CleanupStack::PushL(engine);
+
+	engine->Utils().LogIt(_L("@SYMTestCaseID IWS-APPPROTOCOLS-HTTP-FRAMEWORK-T_HTTPREGRESSION-0001  "));
+	
+	// Open the INI file to initialise the tests we're going to run
+	CScriptFile* iniFile = NULL;
+	TRAP(err, iniFile = CScriptFile::NewL(engine->Utils(), KHttpRegressionTestCompName, KHttpregressionTestscriptName()));
+	if (err != KErrNone)
+		User::Panic(_L("T_HTTPREGRES"),EFailedToReadIniFile);
+	CleanupStack::PushL(iniFile);
+
+	// Open the settings.ini file which has the server IP/Name that would
+	// be used by the tests.
+	CScriptFile* iniSettingsFile = NULL;
+	TRAP(err, iniSettingsFile = CScriptFile::NewL(engine->Utils(), KSettingsIniCompName, KSettingsIniName()));
+	if (err != KErrNone)
+		{
+		User::Panic(KHttpRegressionTestCompName(),err);
+		}
+	CleanupStack::PushL(iniSettingsFile);
+
+	// Read the default silent setting for the tests
+	engine->Utils().SetSilent(iniFile->ItemValue(KDefaultSection, KSilenceItemName, EFalse));
+
+	// Create the tests we're going to run.  Ownership is transferred to the test engine
+	RPointerArray<CHttpTestBase> regressionTests;
+	CleanupClosePushL(regressionTests);
+
+
+// READ DEFAULTS
+	CArrayPtrFlat<CScriptSection>& sections=iniFile->Sections();
+	TInt sectionsCount = sections.Count();
+	CScriptSection* section = NULL;
+	
+	for (TInt ii=0;ii<sectionsCount;++ii)
+		{
+		section = sections[ii];
+	
+		// DEFAULTS
+		if (section->SectionName().CompareF(KDefaultSection) == 0)
+			{
+			if (iniFile->Section(ii).ItemL(KSilenceItemName).Value().CompareF(KZero) == 0)
+   				engine->SetSilent(EFalse);
+ 			else  	
+				engine->SetSilent(ETrue);
+ 			if (iniFile->Section(ii).ItemL(KRunTestItemName).Value().CompareF(KZero) != 0)
+				runTestDefault = ETrue;
+			}
+
+		// SCRIPTED SINGLE_TRANS TESTS - These are purely done by a single transaction
+	
+		if (section->SectionName().CompareF(KSectionSingleTrans) == 0)
+			{
+			TBool runTest = runTestDefault;
+
+   			TPtrC itemPtr(iniFile->Section(ii).Item(0).Item());
+ 			if (itemPtr.CompareF(KRunTestItemName)==0)
+ 				runTest = !(iniFile->Section(ii).Item(0).Value().CompareF(KZero) == 0);
+ 			if (runTest)
+   				{
+   				CHttpTestBase* singleTrans = CHttpTestSingleTrans::NewL(*iniFile,iniSettingsFile,ii);
+				CleanupStack::PushL(singleTrans);
+   				regressionTests.Append(singleTrans);
+   				}
+			}
+		}
+
+// NON SCRIPTED TESTS - These are done by separate classes
+
+
+	// Post body rewind tests
+	if (iniFile->ItemValue(KTestCLE4Y5LC9_1(), KRunTestItemName(), ETrue))
+		{
+		CTestFixCLE4Y5LC9_1* CLE4Y5LC9_1 = CTestFixCLE4Y5LC9_1::NewLC(iniSettingsFile);
+		regressionTests.Append(CLE4Y5LC9_1);
+		
+		TInt numLeakTests = iniFile->ItemValue(KTestCLE4Y5LC9_1(), KLeakTestCount(), 0);
+		TInt firstLeakIter = iniFile->ItemValue(KTestCLE4Y5LC9_1(), KFirstLeakIteration(), 0);
+		CLE4Y5LC9_1->SetLeakTests(numLeakTests, firstLeakIter);
+		}
+
+	if (iniFile->ItemValue(KTestCLE4Y5LC9_2(), KRunTestItemName(), ETrue))
+		{
+		CTestFixCLE4Y5LC9_2* CLE4Y5LC9_2 = CTestFixCLE4Y5LC9_2::NewLC(iniSettingsFile);
+		regressionTests.Append(CLE4Y5LC9_2);
+		
+		TInt numLeakTests = iniFile->ItemValue(KTestCLE4Y5LC9_2(), KLeakTestCount(), 0);
+		TInt firstLeakIter = iniFile->ItemValue(KTestCLE4Y5LC9_2(), KFirstLeakIteration(), 0);
+		CLE4Y5LC9_2->SetLeakTests(numLeakTests, firstLeakIter);
+		}
+
+	if (iniFile->ItemValue(KTestKHN4Z7DT7(), KRunTestItemName(), ETrue))
+		{
+		CTestFixKHN4Z7DT7* KHN4Z7DT7 = CTestFixKHN4Z7DT7::NewLC(iniSettingsFile);
+		regressionTests.Append(KHN4Z7DT7);
+		
+		TInt numLeakTests = iniFile->ItemValue(KTestKHN4Z7DT7(), KLeakTestCount(), 0);
+		TInt firstLeakIter = iniFile->ItemValue(KTestKHN4Z7DT7(), KFirstLeakIteration(), 0);
+		KHN4Z7DT7->SetLeakTests(numLeakTests, firstLeakIter);
+		}
+
+	if (iniFile->ItemValue(KTestINC035621(), KRunTestItemName(), ETrue))
+		{
+		CTestFixINC035621* INC035621 = CTestFixINC035621::NewLC(iniSettingsFile);
+		regressionTests.Append(INC035621);
+		
+		TInt numLeakTests = iniFile->ItemValue(KTestINC035621(), KLeakTestCount(), 0);
+		TInt firstLeakIter = iniFile->ItemValue(KTestINC035621(), KFirstLeakIteration(), 0);
+		INC035621->SetLeakTests(numLeakTests, firstLeakIter);
+		}
+
+	if (iniFile->ItemValue(KTestINC053172(), KRunTestItemName(), ETrue))
+		{
+		CTestFixINC053172* INC053172 = CTestFixINC053172::NewLC();
+		regressionTests.Append(INC053172);
+		
+		TInt numLeakTests = iniFile->ItemValue(KTestINC053172(), KLeakTestCount(), 0);
+		TInt firstLeakIter = iniFile->ItemValue(KTestINC053172(), KFirstLeakIteration(), 0);
+		INC053172->SetLeakTests(numLeakTests, firstLeakIter);
+		}
+
+	// Set the test set based on the menu choices
+	engine->ConfigureTestSet(regressionTests);
+
+	// Pop the tests which are now owned by the test engine
+	TInt numTestsToPop = regressionTests.Count();
+	CleanupStack::Pop(numTestsToPop); // multiCancelTest
+	CleanupStack::Pop(); // regressionTests, the array itself
+
+	// All the action happens within the main event loop.
+	CActiveScheduler::Start();
+
+	// Returned from start so shutdown. Turn off test engine silence to get a summary report.
+	engine->Utils().SetSilent(EFalse);
+	engine->Utils().LogIt(_L("\nEnd of tests"));
+	TInt pass, fail;
+	engine->TestSummary(pass, fail);
+	engine->Utils().LogIt(_L("\nTest Summary: %d passed, %d failed.\n"), pass, fail);
+	//engine->PressAnyKey();
+	
+	// Release the held open connection
+	CHTTPTestUtils::ReleaseConnectionL();	
+
+	CleanupStack::PopAndDestroy(4, as);// inifile, engine, iniSettingsFile
+	}
+
+TInt TestEntryPoint(TAny* /*aParam*/)
+    {
+__UHEAP_MARK;
+
+	// Install exception handler
+	CTrapCleanup* theCleanup = CTrapCleanup::New(); 
+	TRAP_IGNORE(DoTestsL());
+	delete theCleanup;
+
+__UHEAP_MARKEND;
+	User::Heap().Check();
+    return(KErrNone);
+	}
+	
+void LogOnPanicL(RThread& aTestThread)	
+	{
+	CActiveScheduler* as = new(ELeave) CActiveScheduler;
+	CleanupStack::PushL(as);
+	if (!as)
+		{
+		User::Panic(_L("Failed to create active scheduler"),KErrNoMemory);
+		}
+	CActiveScheduler::Install(as); // Install active scheduler
+		
+	// Initialise Comms, required in a minimal console environment
+	CHTTPTestUtils::InitCommsL();
+
+	// Force a connection to be held open keep NT RAS connected...
+	CHTTPTestUtils::HoldOpenConnectionL();
+	
+	// Create the test engine
+	CHttpTestEngine* engine=NULL;
+	TRAPD(err,engine = CHttpTestEngine::NewL(KHttpRegressionTestTitle(), EFalse));
+	if (err != KErrNone)
+		{
+		User::Panic(_L("T_PIPELINING"),err);
+		}
+	CleanupStack::PushL(engine);
+	
+	// Create log message
+	TExitCategoryName panicName = aTestThread.ExitCategory();
+	TInt panicNumber = aTestThread.ExitReason();
+	HBufC* logMessage = HBufC::NewLC(KRtestFailureLabel().Length() + 
+								   panicName.Length() +	
+								   KMaxIntDesLen);
+	TPtr logMessagePtr = logMessage->Des();
+	logMessagePtr.Format(KRtestFailureLabel, &panicName, panicNumber);
+			
+	engine->Utils().LogIt(logMessagePtr);
+	
+	// Panic here so that nothing else is written to the log file
+	User::Panic(panicName, panicNumber);
+	
+	// The code below provided for completenes, but should never be reached
+	
+	// Release the held open connection
+	CHTTPTestUtils::ReleaseConnectionL();	
+	
+	CleanupStack::PopAndDestroy(3, as); //as, engine, logMessage
+	}
+		
+// main loop
+//
+GLDEF_C TInt E32Main()
+    {  
+	__UHEAP_MARK;  
+	CTrapCleanup* theCleanup = CTrapCleanup::New(); // Install exception handler  
+	
+	// Create a new thread for running tests in
+	RThread testThread;
+	TInt err = testThread.Create(KTestThreadName, TestEntryPoint, KDefaultStackSize,  
+							 KMinHeapSize, KMaxHeapSize, NULL);
+	if(err == KErrNone)
+		{
+		testThread.Resume();	
+		}
+	else
+		{
+		return err;
+		}
+	
+	// Kick off test thread and wait for it to exit
+	TRequestStatus tStat;
+	testThread.Logon(tStat);
+	User::WaitForRequest(tStat);
+	
+	// Log if paniced
+	if(testThread.ExitType() == EExitPanic)
+		{
+		TRAP_IGNORE(LogOnPanicL(testThread));	
+		}
+	
+	testThread.Close();
+	delete theCleanup;		
+	__UHEAP_MARKEND;		
+	return KErrNone;
+	}
+