--- /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;
+ }
+