diff -r 000000000000 -r b16258d2340f applayerprotocols/httptransportfw/Test/t_httpmessage/ctestengine.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/applayerprotocols/httptransportfw/Test/t_httpmessage/ctestengine.cpp Tue Feb 02 01:09:52 2010 +0200 @@ -0,0 +1,1912 @@ +// Copyright (c) 2002-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: +// + +#include "ctestengine.h" + +#include + +#include "cmessageparserdriver.h" +#include "cmessagecomposerdriver.h" + +_LIT(KTestHttpMessageParserTitle, "HTTP Message Test Harness"); + +const TInt KLogBufSize = 128; + +CTestEngine* CTestEngine::NewL() + { + CTestEngine* self = new (ELeave) CTestEngine(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +CTestEngine::~CTestEngine() + { + delete iTestUtils; + } + +CTestEngine::CTestEngine() +: CBase() + { + } + +void CTestEngine::ConstructL() + { + iTestUtils = CHTTPTestUtils::NewL(KTestHttpMessageParserTitle()); + iTestUtils->InitCommsL(); + } + +void CTestEngine::DoOOMTest(TTestFunctionL aDoTestFunctionL) + { + Log(_L("Doing OOM testing - logging turned-off")); + iOOMTesting = ETrue; + + TInt err = 1; + TInt count = 0; + + while( err || iTestFailed ) + { + __UHEAP_MARK; + __UHEAP_SETFAIL(RHeap::EFailNext, count); // This is a Macro, not leaving function + TRAPD(error, (this->*aDoTestFunctionL)()); + err = error; + __UHEAP_MARKEND; + ++count; + } + __UHEAP_RESET; + iOOMTesting = EFalse; + Log(_L("End of OOM testing")); + } + +void CTestEngine::DoTestsL() + { + iTestUtils->SetSilent(EFalse); + TBuf buf; + buf.Format(_L("@SYMTestCaseID IWS-APPPROTOCOLS-HTTP-FRAMEWORK-T_HTTPMESSAGE-0001 ")); + iTestUtils->LogIt(buf); + iTestUtils->SetSilent(ETrue); + + // Run through tests... + + // Simple Message Test Case + iTestUtils->StartTestL(_L("Parse Simple Message Test Case HTTP-U-2201")); + DoParseSimpleMessageL(); + iTestUtils->EndTest(iTestFailed); + + // Do OOM testing + iTestUtils->StartTestL(_L("OOM Testing of Parse Simple Message Test Case HTTP-U-2202")); + if( !iTestFailed ) + { + DoOOMTest(&CTestEngine::DoParseSimpleMessageL); + } + iTestUtils->EndTest(iTestFailed); + + // No Entity Body Test Case + iTestUtils->StartTestL(_L("Parse No Entity Body Test Case HTTP-U-2203")); + DoParseNoEntityBodyL(); + iTestUtils->EndTest(iTestFailed); + + // Do OOM testing + iTestUtils->StartTestL(_L("OOM Testing of Parse No Entity Body Test Case HTTP-U-2204")); + if( !iTestFailed ) + { + DoOOMTest(&CTestEngine::DoParseNoEntityBodyL); + } + iTestUtils->EndTest(iTestFailed); + + + // Non-encoded Entity Body Test Case + iTestUtils->StartTestL(_L("Parse Non-encoded Entity Body Test Case HTTP-U-2205")); + DoParseNonEncodedBodyL(); + iTestUtils->EndTest(iTestFailed); + + // Do OOM testing + iTestUtils->StartTestL(_L("OOM Testing of Parse Non-encoded Entity Body Test Case HTTP-U-2206")); + if( !iTestFailed ) + { + DoOOMTest(&CTestEngine::DoParseNonEncodedBodyL); + } + iTestUtils->EndTest(iTestFailed); + + + // Chunk-Encoded Entity Body Test Case + iTestUtils->StartTestL(_L("Parse Chunk-Encoded Entity Body Test Case HTTP-U-2207")); + DoParseChunkEncodedBodyL(); + iTestUtils->EndTest(iTestFailed); + + // Do OOM testing + iTestUtils->StartTestL(_L("OOM Testing of Parse Chunk-Encoded Entity Body Test Case HTTP-U-2208")); + if( !iTestFailed ) + { + DoOOMTest(&CTestEngine::DoParseChunkEncodedBodyL); + } + iTestUtils->EndTest(iTestFailed); + + + // Chunk-Encoded Entity Body And Trailers Test Case + iTestUtils->StartTestL(_L("Parse Chunk-Encoded Entity Body And Trailers Test Case HTTP-U-2209")); + DoParseChunkEncodedBodyWithTrailersL(); + iTestUtils->EndTest(iTestFailed); + + // Do OOM testing + iTestUtils->StartTestL(_L("OOM Testing of Parse Chunk-Encoded Entity Body And Trailers Test Case HTTP-U-2210")); + if( !iTestFailed ) + { + DoOOMTest(&CTestEngine::DoParseChunkEncodedBodyWithTrailersL); + } + iTestUtils->EndTest(iTestFailed); + + + // Bad Header Line Test Case + iTestUtils->StartTestL(_L("Parse Bad Header Line Test Case HTTP-U-2211")); + DoParseBadLineL(); + iTestUtils->EndTest(iTestFailed); + + + // Bad Empty Line Test Case + iTestUtils->StartTestL(_L("Parse Bad Empty Line Test Case HTTP-U-2212")); + DoParseBadEmptyLineL(); + iTestUtils->EndTest(iTestFailed); + + + // Bad Header Continuation Value Test Case + iTestUtils->StartTestL(_L("Parse Bad Header Continuation Value Test Case HTTP-U-2213")); + DoParseBadHeaderContinuationL(); + iTestUtils->EndTest(iTestFailed); + + + // Bad Chunk-Extension Test Case + iTestUtils->StartTestL(_L("Parse Bad Chunk-Extension Test Case HTTP-U-2214")); + DoParseBadChunkExtensionL(); + iTestUtils->EndTest(iTestFailed); + + + // Bad Chunk-Data Test Case + iTestUtils->StartTestL(_L("Parse Bad Chunk-Data Test Case HTTP-U-2215")); + DoParseBadChunkDataL(); + iTestUtils->EndTest(iTestFailed); + + + // Bad Chunk-Size Test Case + iTestUtils->StartTestL(_L("Parse Bad Chunk-Size Test Case HTTP-U-2216")); + DoParseBadChunkSizeL(); + iTestUtils->EndTest(iTestFailed); + + + // Missing CRs Test Case + iTestUtils->StartTestL(_L("Parse Missing CRs Test Case HTTP-U-2217")); + DoParseMissingCRsL(); + iTestUtils->EndTest(iTestFailed); + + + // Spurious CRs Test Case + iTestUtils->StartTestL(_L("Parse Spurious CRs Test Case HTTP-U-2218")); + DoParseSpuriousCRsL(); + iTestUtils->EndTest(iTestFailed); + + + // Long Header Test Case + iTestUtils->StartTestL(_L("Parse Long Header Test Case HTTP-U-2219")); + DoParseLongHeaderL(); + iTestUtils->EndTest(iTestFailed); + + + // Leading Empty Line Test Case + iTestUtils->StartTestL(_L("Parse Leading Empty Line Test Case HTTP-U-2220")); + DoParseLeadingEmptyLineL(); + iTestUtils->EndTest(iTestFailed); + + + // Non Chunked Message Reset Test Case + iTestUtils->StartTestL(_L("Parse Non Chunked Message Reset Test Case HTTP-U-2221")); + DoParseNonChunkedResetL(); + iTestUtils->EndTest(iTestFailed); + + + // Chunked Message Reset Test Case + iTestUtils->StartTestL(_L("Parse Chunked Message Reset Test Case HTTP-U-2222")); + DoParseChunkedResetL(); + iTestUtils->EndTest(iTestFailed); + + // Chunked Messages Containing Only CRs Test Case + iTestUtils->StartTestL(_L("Parse Chunked Messages Containing Only CRs Test Case HTTP-U-2223")); + DoParseChunkDataContainingOnlyCRsL(); + iTestUtils->EndTest(iTestFailed); + +//--------------------- Composing Tests ------------------------- + + iTestUtils->StartTestL(_L("Compose Simple Message Test Case HTTP-U-2225")); + DoComposeSimpleMessageL(); + iTestUtils->EndTest(iTestFailed); + + // Do OOM testing + iTestUtils->StartTestL(_L("OOM Testing of Compose Simple Message Test Case HTTP-U-2226")); + if( !iTestFailed ) + { + DoOOMTest(&CTestEngine::DoComposeSimpleMessageL); + } + iTestUtils->EndTest(iTestFailed); + + + // No Entity Body Test Case + iTestUtils->StartTestL(_L("Compose No Entity Body Test Case HTTP-U-2227")); + DoComposeNoEntityBodyL(); + iTestUtils->EndTest(iTestFailed); + + // Do OOM testing + iTestUtils->StartTestL(_L("OOM Testing of Compose No Entity Body Test Case HTTP-U-2228")); + if( !iTestFailed ) + { + DoOOMTest(&CTestEngine::DoComposeNoEntityBodyL); + } + iTestUtils->EndTest(iTestFailed); + + // Non-encoded Entity Body Test Case + iTestUtils->StartTestL(_L("Compose Non-encoded Entity Body Test Case HTTP-U-2229")); + DoComposeNonEncodedBodyL(); + iTestUtils->EndTest(iTestFailed); + + // Do OOM testing + iTestUtils->StartTestL(_L("OOM Testing of Compose Non-encoded Entity Body Test Case HTTP-U-2230")); + if( !iTestFailed ) + { + DoOOMTest(&CTestEngine::DoComposeNonEncodedBodyL); + } + iTestUtils->EndTest(iTestFailed); + + + // Chunk-Encoded Entity Body Test Case + iTestUtils->StartTestL(_L("Compose Chunk-Encoded Entity Body Test Case HTTP-U-2231")); + DoComposeChunkEncodedBodyL(); + iTestUtils->EndTest(iTestFailed); + + // Do OOM testing + iTestUtils->StartTestL(_L("OOM Testing of Compose Chunk-Encoded Entity Body Test Case HTTP-U-2232")); + if( !iTestFailed ) + { + DoOOMTest(&CTestEngine::DoComposeChunkEncodedBodyL); + } + iTestUtils->EndTest(iTestFailed); + + + // Chunk-Encoded Entity Body And Trailers Test Case + iTestUtils->StartTestL(_L("Compose Chunk-Encoded Entity Body And Trailers Test Case HTTP-U-2233")); + DoComposeChunkEncodedBodyWithTrailersL(); + iTestUtils->EndTest(iTestFailed); + + // Do OOM testing + iTestUtils->StartTestL(_L("OOM Testing of Compose Chunk-Encoded Entity Body And Trailers Test Case HTTP-U-2234")); + if( !iTestFailed ) + { + DoOOMTest(&CTestEngine::DoComposeChunkEncodedBodyWithTrailersL); + } + iTestUtils->EndTest(iTestFailed); + + // Bad Entity Body - too much data + iTestUtils->StartTestL(_L("Compose Bad Entity Body With Too Much Data Test Case HTTP-U-2235")); + DoComposeTooMuchEntityBodyDataL(); + iTestUtils->EndTest(iTestFailed); + + // Bad Entity Body - too little data + iTestUtils->StartTestL(_L("Compose Bad Entity Body With Too Little Data Test Case HTTP-U-2236")); + DoComposeTooLittleEntityBodyDataL(); + iTestUtils->EndTest(iTestFailed); + + // Long Header - too little data + iTestUtils->StartTestL(_L("Compose Long Header Test Case HTTP-U-2237")); + DoComposeLongHeaderL(); + iTestUtils->EndTest(iTestFailed); + + + // Non-encoded Entity Body Reset Test Case + iTestUtils->StartTestL(_L("Compose Non-encoded Entity Body Reset Test Case HTTP-U-2238")); + DoComposeNonEncodedBodyResetL(); + iTestUtils->EndTest(iTestFailed); + + // Chunk-Encoded Entity Body And Trailers Reset Test Case + iTestUtils->StartTestL(_L("Compose Chunk-Encoded Entity Body And Trailers Reset Test Case HTTP-U-2239")); + DoComposeChunkEncodedBodyWithTrailersResetL(); + iTestUtils->EndTest(iTestFailed); + +//--------------------- Unknown Body Length Tests ------------------------- + // Run all the above parser tests again using a HTTP 1.0 style response of unknown body length + iUseUnknownBodyLength = ETrue; + + // Simple Message Test Case + iTestUtils->StartTestL(_L("Parse Simple Message Test Case HTTP-U-2201")); + DoParseSimpleMessageL(); + iTestUtils->EndTest(iTestFailed); + + // Do OOM testing + iTestUtils->StartTestL(_L("OOM Testing of Parse Simple Message Test Case HTTP-U-2202")); + if( !iTestFailed ) + { + DoOOMTest(&CTestEngine::DoParseSimpleMessageL); + } + iTestUtils->EndTest(iTestFailed); + + // No Entity Body Test Case + iTestUtils->StartTestL(_L("Parse No Entity Body Test Case HTTP-U-2203")); + DoParseNoEntityBodyL(); + iTestUtils->EndTest(iTestFailed); + + // Do OOM testing + iTestUtils->StartTestL(_L("OOM Testing of Parse No Entity Body Test Case HTTP-U-2204")); + if( !iTestFailed ) + { + DoOOMTest(&CTestEngine::DoParseNoEntityBodyL); + } + iTestUtils->EndTest(iTestFailed); + + + // Non-encoded Entity Body Test Case + iTestUtils->StartTestL(_L("Parse Non-encoded Entity Body Test Case HTTP-U-2205")); + DoParseNonEncodedBodyL(); + iTestUtils->EndTest(iTestFailed); + + // Do OOM testing + iTestUtils->StartTestL(_L("OOM Testing of Parse Non-encoded Entity Body Test Case HTTP-U-2206")); + if( !iTestFailed ) + { + DoOOMTest(&CTestEngine::DoParseNonEncodedBodyL); + } + iTestUtils->EndTest(iTestFailed); + + // Bad Header Line Test Case + iTestUtils->StartTestL(_L("Parse Bad Header Line Test Case HTTP-U-2211")); + DoParseBadLineL(); + iTestUtils->EndTest(iTestFailed); + + + // Bad Header Continuation Value Test Case + iTestUtils->StartTestL(_L("Parse Bad Header Continuation Value Test Case HTTP-U-2213")); + DoParseBadHeaderContinuationL(); + iTestUtils->EndTest(iTestFailed); + + + // Long Header Test Case + iTestUtils->StartTestL(_L("Parse Long Header Test Case HTTP-U-2219")); + DoParseLongHeaderL(); + iTestUtils->EndTest(iTestFailed); + + + // Leading Empty Line Test Case + iTestUtils->StartTestL(_L("Parse Leading Empty Line Test Case HTTP-U-2220")); + DoParseLeadingEmptyLineL(); + iTestUtils->EndTest(iTestFailed); + + iUseUnknownBodyLength = EFalse; + + + // Raw Bad Response - field containing ": + iTestUtils->StartTestL(_L("Parse Raw Bad Response Test Case HTTP-U-2240")); + DoParseRawBadResponseTest1L(); + iTestUtils->EndTest(iTestFailed); + + // Do OOM testing + iTestUtils->StartTestL(_L("OOM Testing of Parse Raw Bad Response Test Case HTTP-U-2241")); + if( !iTestFailed ) + { + DoOOMTest(&CTestEngine::DoParseRawBadResponseTest1L); + } + iTestUtils->EndTest(iTestFailed); + + // Raw Bad Response - field containing ":bytes" + iTestUtils->StartTestL(_L("Parse Raw Bad Response Test Case HTTP-U-2242")); + DoParseRawBadResponseTest2L(); + iTestUtils->EndTest(iTestFailed); + + // Do OOM testing + iTestUtils->StartTestL(_L("OOM Testing of Parse Raw Bad Response Test Case HTTP-U-2243")); + if( !iTestFailed ) + { + DoOOMTest(&CTestEngine::DoParseRawBadResponseTest2L); + } + iTestUtils->EndTest(iTestFailed); + + // Raw Bad Response - field containing "Accept-Ranges:" + iTestUtils->StartTestL(_L("Parse Raw Bad Response Test Case HTTP-U-2244")); + DoParseRawBadResponseTest3L(); + iTestUtils->EndTest(iTestFailed); + + // Do OOM testing + iTestUtils->StartTestL(_L("OOM Testing of Parse Raw Bad Response Test Case HTTP-U-2245")); + if( !iTestFailed ) + { + DoOOMTest(&CTestEngine::DoParseRawBadResponseTest3L); + } + iTestUtils->EndTest(iTestFailed); + + // Raw Bad Response - field containing ":bytes" + iTestUtils->StartTestL(_L("Parse Raw Bad Response Test Case HTTP-U-2246")); + DoParseRawBadResponseTest4L(); + iTestUtils->EndTest(iTestFailed); + + // Do OOM testing + iTestUtils->StartTestL(_L("OOM Testing of Parse Raw Bad Response Test Case HTTP-U-2247")); + if( !iTestFailed ) + { + DoOOMTest(&CTestEngine::DoParseRawBadResponseTest4L); + } + iTestUtils->EndTest(iTestFailed); + + // Raw Bad Response - field containing ":" + iTestUtils->StartTestL(_L("Parse Raw Bad Response Test Case HTTP-U-2248")); + DoParseRawBadResponseTest5L(); + iTestUtils->EndTest(iTestFailed); + + // Do OOM testing + iTestUtils->StartTestL(_L("OOM Testing of Parse Raw Bad Response Test Case HTTP-U-2249")); + if( !iTestFailed ) + { + DoOOMTest(&CTestEngine::DoParseRawBadResponseTest5L); + } + iTestUtils->EndTest(iTestFailed); + + // Raw Bad Response - field containing "Accept-Ranges:" + iTestUtils->StartTestL(_L("Parse Raw Bad Response Test Case HTTP-U-2250")); + DoParseRawBadResponseTest6L(); + iTestUtils->EndTest(iTestFailed); + + // Do OOM testing + iTestUtils->StartTestL(_L("OOM Testing of Parse Raw Bad Response Test Case HTTP-U-2251")); + if( !iTestFailed ) + { + DoOOMTest(&CTestEngine::DoParseRawBadResponseTest6L); + } + iTestUtils->EndTest(iTestFailed); + + // Raw Bad Response - field containing "::" + iTestUtils->StartTestL(_L("Parse Raw Bad Response Test Case HTTP-U-2252")); + DoParseRawBadResponseTest7L(); + iTestUtils->EndTest(iTestFailed); + + // Do OOM testing + iTestUtils->StartTestL(_L("OOM Testing of Parse Raw Bad Response Test Case HTTP-U-2253")); + if( !iTestFailed ) + { + DoOOMTest(&CTestEngine::DoParseRawBadResponseTest7L); + } + iTestUtils->EndTest(iTestFailed); + + // Raw Bad Response - field containing "::!!" + iTestUtils->StartTestL(_L("Parse Raw Bad Response Test Case HTTP-U-2254")); + DoParseRawBadResponseTest8L(); + iTestUtils->EndTest(iTestFailed); + + // Do OOM testing + iTestUtils->StartTestL(_L("OOM Testing of Parse Raw Bad Response Test Case HTTP-U-2255")); + if( !iTestFailed ) + { + DoOOMTest(&CTestEngine::DoParseRawBadResponseTest8L); + } + iTestUtils->EndTest(iTestFailed); + + // Raw Bad Response - field containing ": :!!" + iTestUtils->StartTestL(_L("Parse Raw Bad Response Test Case HTTP-U-2256")); + DoParseRawBadResponseTest9L(); + iTestUtils->EndTest(iTestFailed); + + // Do OOM testing + iTestUtils->StartTestL(_L("OOM Testing of Parse Raw Bad Response Test Case HTTP-U-2257")); + if( !iTestFailed ) + { + DoOOMTest(&CTestEngine::DoParseRawBadResponseTest9L); + } + iTestUtils->EndTest(iTestFailed); + + } +void CTestEngine::DoParseRawBadResponseTest1L() + { + // Simple message test case - field containing ":". + + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + // Create the http message parser driver + CMessageParserDriver* messageParser = CMessageParserDriver::NewL(*this); + CleanupStack::PushL(messageParser); + + _LIT8(KMessageData, "HTTP/1.1 200 OK\r\nContent-Length: 6\r\n : \r\n\r\nhello!"); + _LIT8(KStartLine, "HTTP/1.1 200 OK"); + _LIT8(KHeaderName1, "Content-Length"); _LIT8(KHeaderValue1,"6 :"); + _LIT8(KEntityBody, "hello!"); + TBool isChunked = EFalse; + + messageParser->SetMessageData(KMessageData()); + messageParser->SetStartLine(KStartLine()); + messageParser->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageParser->SetBodyData(KEntityBody(), isChunked, iUseUnknownBodyLength); + + messageParser->Start(KErrNone); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageParser); + + } +void CTestEngine::DoParseRawBadResponseTest2L() + { + // Simple message test case - field containing ":bytes". + + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + // Create the http message parser driver + CMessageParserDriver* messageParser = CMessageParserDriver::NewL(*this); + CleanupStack::PushL(messageParser); + + _LIT8(KMessageData, "HTTP/1.1 200 OK\r\nContent-Length: 6\r\n : bytes\r\n\r\nhello!"); + + _LIT8(KStartLine, "HTTP/1.1 200 OK"); + _LIT8(KHeaderName1, "Content-Length"); _LIT8(KHeaderValue1,"6 : bytes"); + _LIT8(KEntityBody, "hello!"); + TBool isChunked = EFalse; + + messageParser->SetMessageData(KMessageData()); + messageParser->SetStartLine(KStartLine()); + messageParser->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageParser->SetBodyData(KEntityBody(), isChunked, iUseUnknownBodyLength); + + messageParser->Start(KErrNone); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageParser); + } +void CTestEngine::DoParseRawBadResponseTest3L() + { + // Simple message test case - field containing "Accept-Ranges:". + + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + // Create the http message parser driver + CMessageParserDriver* messageParser = CMessageParserDriver::NewL(*this); + CleanupStack::PushL(messageParser); + + _LIT8(KMessageData, "HTTP/1.1 200 OK\r\nContent-Length: 6\r\nAccept-Ranges: \r\n\r\nhello!"); + + _LIT8(KStartLine, "HTTP/1.1 200 OK"); + _LIT8(KHeaderName1, "Content-Length"); _LIT8(KHeaderValue1,"6"); + _LIT8(KHeaderName2, "Accept-Ranges"); _LIT8(KHeaderValue2, ""); + _LIT8(KEntityBody, "hello!"); + TBool isChunked = EFalse; + + messageParser->SetMessageData(KMessageData()); + messageParser->SetStartLine(KStartLine()); + messageParser->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageParser->SetHeaderL(KHeaderName2(),KHeaderValue2()); + messageParser->SetBodyData(KEntityBody(), isChunked, iUseUnknownBodyLength); + + messageParser->Start(KErrNone); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageParser); + } +void CTestEngine::DoParseRawBadResponseTest4L() + { + // Simple message test case - field containing ":bytes". + + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + // Create the http message parser driver + CMessageParserDriver* messageParser = CMessageParserDriver::NewL(*this); + CleanupStack::PushL(messageParser); + + _LIT8(KMessageData, "HTTP/1.1 200 OK\r\nContent-Length: 6\r\n :bytes\r\n\r\nhello!"); + + _LIT8(KStartLine, "HTTP/1.1 200 OK"); + _LIT8(KHeaderName1, "Content-Length"); _LIT8(KHeaderValue1,"6 :bytes"); + _LIT8(KEntityBody, "hello!"); + TBool isChunked = EFalse; + + messageParser->SetMessageData(KMessageData()); + messageParser->SetStartLine(KStartLine()); + messageParser->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageParser->SetBodyData(KEntityBody(), isChunked, iUseUnknownBodyLength); + + messageParser->Start(KErrNone); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageParser); + } +void CTestEngine::DoParseRawBadResponseTest5L() + { + // Simple message test case - field containing ":". + + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + // Create the http message parser driver + CMessageParserDriver* messageParser = CMessageParserDriver::NewL(*this); + CleanupStack::PushL(messageParser); + + _LIT8(KMessageData, "HTTP/1.1 200 OK\r\nContent-Length: 6\r\n :\r\n\r\nhello!"); + + _LIT8(KStartLine, "HTTP/1.1 200 OK"); + _LIT8(KHeaderName1, "Content-Length"); _LIT8(KHeaderValue1,"6 :"); + _LIT8(KEntityBody, "hello!"); + TBool isChunked = EFalse; + + messageParser->SetMessageData(KMessageData()); + messageParser->SetStartLine(KStartLine()); + messageParser->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageParser->SetBodyData(KEntityBody(), isChunked, iUseUnknownBodyLength); + + messageParser->Start(KErrNone); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageParser); + } +void CTestEngine::DoParseRawBadResponseTest6L() + { + // Simple message test case - field containing "Accept-Ranges:". + + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + // Create the http message parser driver + CMessageParserDriver* messageParser = CMessageParserDriver::NewL(*this); + CleanupStack::PushL(messageParser); + + _LIT8(KMessageData, "HTTP/1.1 200 OK\r\nContent-Length: 6\r\nAccept-Ranges:\r\n\r\nhello!"); + + _LIT8(KStartLine, "HTTP/1.1 200 OK"); + _LIT8(KHeaderName1, "Content-Length"); _LIT8(KHeaderValue1,"6"); + _LIT8(KHeaderName2, "Accept-Ranges"); _LIT8(KHeaderValue2, ""); + _LIT8(KEntityBody, "hello!"); + TBool isChunked = EFalse; + + messageParser->SetMessageData(KMessageData()); + messageParser->SetStartLine(KStartLine()); + messageParser->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageParser->SetHeaderL(KHeaderName2(),KHeaderValue2()); + messageParser->SetBodyData(KEntityBody(), isChunked, iUseUnknownBodyLength); + + messageParser->Start(KErrNone); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageParser); + } +void CTestEngine::DoParseRawBadResponseTest7L() + { + // Simple message test case - field containing "::". + + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + // Create the http message parser driver + CMessageParserDriver* messageParser = CMessageParserDriver::NewL(*this); + CleanupStack::PushL(messageParser); + + _LIT8(KMessageData, "HTTP/1.1 200 OK\r\nContent-Length: 6\r\n ::\r\n\r\nhello!"); + + _LIT8(KStartLine, "HTTP/1.1 200 OK"); + _LIT8(KHeaderName1, "Content-Length"); _LIT8(KHeaderValue1,"6 ::"); + _LIT8(KEntityBody, "hello!"); + TBool isChunked = EFalse; + + messageParser->SetMessageData(KMessageData()); + messageParser->SetStartLine(KStartLine()); + messageParser->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageParser->SetBodyData(KEntityBody(), isChunked, iUseUnknownBodyLength); + + messageParser->Start(KErrNone); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageParser); + } +void CTestEngine::DoParseRawBadResponseTest8L() + { + // Simple message test case - field containing "::!!". + + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + // Create the http message parser driver + CMessageParserDriver* messageParser = CMessageParserDriver::NewL(*this); + CleanupStack::PushL(messageParser); + + _LIT8(KMessageData, "HTTP/1.1 200 OK\r\nContent-Length: 6\r\n ::!!\r\n\r\nhello!"); + + _LIT8(KStartLine, "HTTP/1.1 200 OK"); + _LIT8(KHeaderName1, "Content-Length"); _LIT8(KHeaderValue1,"6 ::!!"); + _LIT8(KEntityBody, "hello!"); + TBool isChunked = EFalse; + + messageParser->SetMessageData(KMessageData()); + messageParser->SetStartLine(KStartLine()); + messageParser->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageParser->SetBodyData(KEntityBody(), isChunked, iUseUnknownBodyLength); + + messageParser->Start(KErrNone); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageParser); + } + +void CTestEngine::DoParseRawBadResponseTest9L() + { + // Simple message test case - field containing ": :!!". + + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + // Create the http message parser driver + CMessageParserDriver* messageParser = CMessageParserDriver::NewL(*this); + CleanupStack::PushL(messageParser); + + _LIT8(KMessageData, "HTTP/1.1 200 OK\r\nContent-Length: 6\r\n : :!!\r\n\r\nhello!"); + + _LIT8(KStartLine, "HTTP/1.1 200 OK"); + _LIT8(KHeaderName1, "Content-Length"); _LIT8(KHeaderValue1,"6 : :!!"); + _LIT8(KEntityBody, "hello!"); + TBool isChunked = EFalse; + + messageParser->SetMessageData(KMessageData()); + messageParser->SetStartLine(KStartLine()); + messageParser->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageParser->SetBodyData(KEntityBody(), isChunked, iUseUnknownBodyLength); + + messageParser->Start(KErrNone); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageParser); + } + + +void CTestEngine::DoParseSimpleMessageL() + { + // Simple message test case - just a start-line. no headers or entity body. + + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + // Create the http message parser driver + CMessageParserDriver* messageParser = CMessageParserDriver::NewL(*this); + CleanupStack::PushL(messageParser); + + _LIT8(KMessageData, "HTTP/1.1 100 Continue\r\n\r\n"); + _LIT8(KStartLine, "HTTP/1.1 100 Continue"); + _LIT8(KEntityBody, ""); + TBool isChunked = EFalse; + + messageParser->SetMessageData(KMessageData()); + messageParser->SetStartLine(KStartLine()); + messageParser->SetBodyData(KEntityBody(), isChunked, iUseUnknownBodyLength); + messageParser->Start(KErrNone); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageParser); + } + +void CTestEngine::DoParseNoEntityBodyL() + { + // Message with no entity body - just headers. + + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + // Create the http message parser driver + CMessageParserDriver* messageParser = CMessageParserDriver::NewL(*this); + CleanupStack::PushL(messageParser); + + _LIT8(KMessageData, "HTTP/1.1 204 No Content\r\nX-Wap-Push-Status: 400 Accepted\r\n\r\n"); + _LIT8(KStartLine, "HTTP/1.1 204 No Content"); + _LIT8(KHeaderName1, "X-Wap-Push-Status"); _LIT8(KHeaderValue1, "400 Accepted"); + _LIT8(KEntityBody, ""); + TBool isChunked = EFalse; + + messageParser->SetMessageData(KMessageData()); + messageParser->SetStartLine(KStartLine()); + messageParser->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageParser->SetBodyData(KEntityBody(), isChunked, iUseUnknownBodyLength); + + messageParser->Start(KErrNone); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageParser); + } + +void CTestEngine::DoParseNonEncodedBodyL() + { + // Message with headers and non-encoded entity body. + + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + // Create the http message parser driver + CMessageParserDriver* messageParser = CMessageParserDriver::NewL(*this); + CleanupStack::PushL(messageParser); + + _LIT8(KMessageData, "HTTP/1.1 200 Ok\r\nContent-Type: text/plain\r\nContent-Length: 35\r\nServer: CERN/3.0\r\n libwww/2.17\r\n\r\nThis is the data that is being sent"); + _LIT8(KStartLine, "HTTP/1.1 200 Ok"); + _LIT8(KHeaderName1, "Content-Type"); _LIT8(KHeaderValue1, "text/plain"); + _LIT8(KHeaderName2, "Content-Length"); _LIT8(KHeaderValue2, "35"); + _LIT8(KHeaderName3, "Server"); _LIT8(KHeaderValue3, "CERN/3.0 libwww/2.17"); + _LIT8(KEntityBody, "This is the data that is being sent"); + TBool isChunked = EFalse; + + messageParser->SetMessageData(KMessageData()); + messageParser->SetStartLine(KStartLine()); + messageParser->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageParser->SetHeaderL(KHeaderName2(), KHeaderValue2()); + messageParser->SetHeaderL(KHeaderName3(), KHeaderValue3()); + messageParser->SetBodyData(KEntityBody(), isChunked, iUseUnknownBodyLength); + + messageParser->Start(KErrNone); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageParser); + } + +void CTestEngine::DoParseChunkEncodedBodyL() + { + // Message with headers and chunk-encoded entity body. + + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + // Create the http message parser driver + CMessageParserDriver* messageParser = CMessageParserDriver::NewL(*this); + CleanupStack::PushL(messageParser); + + _LIT8(KMessageData, "HTTP/1.1 200 Ok\r\nContent-Type: text/plain\r\nTransfer-Encoding: chunked\r\nServer: CERN/3.0\r\n\tlibwww/2.17\r\n\r\n4 \r\nThis\r\n0a\r\n is the da\r\n15 ; myextension = \"ten\"\r\nta that is being sent\r\n000\r\n\r\n"); + _LIT8(KStartLine, "HTTP/1.1 200 Ok"); + _LIT8(KHeaderName1, "Content-Type"); _LIT8(KHeaderValue1, "text/plain"); + _LIT8(KHeaderName2, "Transfer-Encoding"); _LIT8(KHeaderValue2, "chunked"); + _LIT8(KHeaderName3, "Server"); _LIT8(KHeaderValue3, "CERN/3.0\tlibwww/2.17"); + _LIT8(KEntityBody, "This is the data that is being sent"); + TBool isChunked = ETrue; + + messageParser->SetMessageData(KMessageData()); + messageParser->SetStartLine(KStartLine()); + messageParser->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageParser->SetHeaderL(KHeaderName2(), KHeaderValue2()); + messageParser->SetHeaderL(KHeaderName3(), KHeaderValue3()); + messageParser->SetBodyData(KEntityBody(), isChunked, iUseUnknownBodyLength); + + messageParser->Start(KErrNone); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageParser); + } + +void CTestEngine::DoParseChunkEncodedBodyWithTrailersL() + { + // Message with headers, chunk-encoded entity body and trailers. + + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + // Create the http message parser driver + CMessageParserDriver* messageParser = CMessageParserDriver::NewL(*this); + CleanupStack::PushL(messageParser); + + _LIT8(KMessageData, "HTTP/1.1 200 Ok\r\nContent-Type: text/plain\r\nTransfer-Encoding: chunked\r\nTrailer: Server, ETag\r\n\r\n4 \r\nThis\r\n0a\r\n is the da\r\n15 ; myextension = \"ten\"\r\nta that is being sent\r\n 0 \r\nServer: CERN/3.0\r\n libwww/2.17\r\nETag: \"dave\"\r\n\r\n"); + _LIT8(KStartLine, "HTTP/1.1 200 Ok"); + _LIT8(KHeaderName1, "Content-Type"); _LIT8(KHeaderValue1, "text/plain"); + _LIT8(KHeaderName2, "Transfer-Encoding"); _LIT8(KHeaderValue2, "chunked"); + _LIT8(KHeaderName3, "Trailer"); _LIT8(KHeaderValue3, "Server, ETag"); + _LIT8(KEntityBody, "This is the data that is being sent"); + TBool isChunked = ETrue; + _LIT8(KTrailerName1,"Server"); _LIT8(KTrailerValue1, "CERN/3.0 libwww/2.17"); + _LIT8(KTrailerName2,"ETag"); _LIT8(KTrailerValue2, "\"dave\""); + + messageParser->SetMessageData(KMessageData()); + messageParser->SetStartLine(KStartLine()); + messageParser->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageParser->SetHeaderL(KHeaderName2(), KHeaderValue2()); + messageParser->SetHeaderL(KHeaderName3(), KHeaderValue3()); + messageParser->SetBodyData(KEntityBody(), isChunked, iUseUnknownBodyLength); + messageParser->SetTrailerL(KTrailerName1(), KTrailerValue1()); + messageParser->SetTrailerL(KTrailerName2(), KTrailerValue2()); + + messageParser->Start(KErrNone); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageParser); + } + +void CTestEngine::DoParseBadLineL() + { + // Message with a bad header line - malformed CRLF; missing LF + + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + // Create the http message parser driver + CMessageParserDriver* messageParser = CMessageParserDriver::NewL(*this); + CleanupStack::PushL(messageParser); + + _LIT8(KMessageData, "HTTP/1.1 200 Ok\r\nContent-Type: text/plain\rContent-Length: 35\r\nServer: CERN/3.0\r\n libwww/2.17\r\n\r\nThis is the data that is being sent"); + _LIT8(KStartLine, "HTTP/1.1 200 Ok"); + _LIT8(KHeaderName1, "Content-Type"); _LIT8(KHeaderValue1, "text/plainContent-Length: 35"); + _LIT8(KHeaderName2, "Server"); _LIT8(KHeaderValue2, "CERN/3.0 libwww/2.17"); + _LIT8(KEntityBody, "This is the data that is being sent"); + TBool isChunked = EFalse; + + messageParser->SetMessageData(KMessageData()); + messageParser->SetStartLine(KStartLine()); + messageParser->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageParser->SetHeaderL(KHeaderName2(), KHeaderValue2()); + messageParser->SetBodyData(KEntityBody(), isChunked, iUseUnknownBodyLength); + + messageParser->Start(KErrNone); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageParser); + } + +void CTestEngine::DoParseBadEmptyLineL() + { + // Message with a bad empty line - malformed CRLF; missing LF + + // Create the http message parser driver + CMessageParserDriver* messageParser = CMessageParserDriver::NewL(*this); + CleanupStack::PushL(messageParser); + + _LIT8(KMessageData, "HTTP/1.1 200 Ok\r\nContent-Type: text/plain\r\nTransfer-Encoding: chunked\r\nServer: CERN/3.0\r\n\tlibwww/2.17\r\n\r4 \r\nThis\r\n0a\r\n is the da\r\n15 ; myextension = \"ten\"\r\nta that is being sent\r\n000\r\n\r\n"); + _LIT8(KStartLine, "HTTP/1.1 200 Ok"); + _LIT8(KHeaderName1, "Content-Type"); _LIT8(KHeaderValue1, "text/plain"); + _LIT8(KHeaderName2, "Transfer-Encoding"); _LIT8(KHeaderValue2, "chunked"); + _LIT8(KHeaderName3, "Server"); _LIT8(KHeaderValue3, "CERN/3.0\tlibwww/2.17"); + _LIT8(KEntityBody, ""); + TBool isChunked = ETrue; + + messageParser->SetMessageData(KMessageData()); + messageParser->SetStartLine(KStartLine()); + messageParser->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageParser->SetHeaderL(KHeaderName2(), KHeaderValue2()); + messageParser->SetHeaderL(KHeaderName3(), KHeaderValue3()); + messageParser->SetBodyData(KEntityBody(), isChunked, iUseUnknownBodyLength); + + messageParser->Start(KErrNone); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageParser); + } + +void CTestEngine::DoParseBadHeaderContinuationL() + { + // Message with bad header - malformed header continuation; missing space/tab. + + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + // Create the http message parser driver + CMessageParserDriver* messageParser = CMessageParserDriver::NewL(*this); + CleanupStack::PushL(messageParser); + + _LIT8(KMessageData, "HTTP/1.1 200 Ok\r\nContent-Type: text/plain\r\nContent-Length: 35\r\nServer: CERN/3.0\r\nlibwww/2.17\r\n\r\nThis is the data that is being sent"); + _LIT8(KStartLine, "HTTP/1.1 200 Ok"); + _LIT8(KHeaderName1, "Content-Type"); _LIT8(KHeaderValue1, "text/plain"); + _LIT8(KHeaderName2, "Content-Length"); _LIT8(KHeaderValue2, "35"); + _LIT8(KHeaderName3, "Server"); _LIT8(KHeaderValue3, "CERN/3.0"); + _LIT8(KEntityBody, "This is the data that is being sent"); + TBool isChunked = EFalse; + + messageParser->SetMessageData(KMessageData()); + messageParser->SetStartLine(KStartLine()); + messageParser->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageParser->SetHeaderL(KHeaderName2(), KHeaderValue2()); + messageParser->SetHeaderL(KHeaderName3(), KHeaderValue3()); + messageParser->SetBodyData(KEntityBody(), isChunked, iUseUnknownBodyLength); + + messageParser->Start(KErrNone); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageParser); + } + +void CTestEngine::DoParseBadChunkDataL() + { + // Chunked message with error in chunk-data - too much data. + + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + // Create the http message parser driver + CMessageParserDriver* messageParser = CMessageParserDriver::NewL(*this); + CleanupStack::PushL(messageParser); + + _LIT8(KMessageData, "HTTP/1.1 200 Ok\r\nContent-Type: text/plain\r\nTransfer-Encoding: chunked\r\nServer: CERN/3.0\r\n\tlibwww/2.17\r\n\r\n4 \r\nThis\r\n0a\r\n is the da\r\n12 ; myextension = \"ten\"\r\nta that is being sent\r\n000\r\n\r\n"); + _LIT8(KStartLine, "HTTP/1.1 200 Ok"); + _LIT8(KHeaderName1, "Content-Type"); _LIT8(KHeaderValue1, "text/plain"); + _LIT8(KHeaderName2, "Transfer-Encoding"); _LIT8(KHeaderValue2, "chunked"); + _LIT8(KHeaderName3, "Server"); _LIT8(KHeaderValue3, "CERN/3.0\tlibwww/2.17"); + //_LIT8(KEntityBody, "This is the data that is being sent"); + _LIT8(KEntityBody, "This is the data that is being s"); + TBool isChunked = ETrue; + + messageParser->SetMessageData(KMessageData()); + messageParser->SetStartLine(KStartLine()); + messageParser->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageParser->SetHeaderL(KHeaderName2(), KHeaderValue2()); + messageParser->SetHeaderL(KHeaderName3(), KHeaderValue3()); + messageParser->SetBodyData(KEntityBody(), isChunked, iUseUnknownBodyLength); + + messageParser->Start(KErrCorrupt); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageParser); + } + +void CTestEngine::DoParseBadChunkExtensionL() + { + // Chunked message with error in chunk-size - bad chunk-extension + + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + // Create the http message parser driver + CMessageParserDriver* messageParser = CMessageParserDriver::NewL(*this); + CleanupStack::PushL(messageParser); + + _LIT8(KMessageData, "HTTP/1.1 200 Ok\r\nContent-Type: text/plain\r\nTransfer-Encoding: chunked\r\nServer: CERN/3.0\r\n libwww/2.17\r\n\r\n4 \r\nThis\r\n0a\r\n is the da\r\n15 myextension = \"ten\"\r\nta that is being sent\r\n000\r\n\r\n"); + _LIT8(KStartLine, "HTTP/1.1 200 Ok"); + _LIT8(KHeaderName1, "Content-Type"); _LIT8(KHeaderValue1, "text/plain"); + _LIT8(KHeaderName2, "Transfer-Encoding"); _LIT8(KHeaderValue2, "chunked"); + _LIT8(KHeaderName3, "Server"); _LIT8(KHeaderValue3, "CERN/3.0 libwww/2.17"); + _LIT8(KEntityBody, "This is the data that is being sent"); + TBool isChunked = ETrue; + + messageParser->SetMessageData(KMessageData()); + messageParser->SetStartLine(KStartLine()); + messageParser->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageParser->SetHeaderL(KHeaderName2(), KHeaderValue2()); + messageParser->SetHeaderL(KHeaderName3(), KHeaderValue3()); + messageParser->SetBodyData(KEntityBody(), isChunked, iUseUnknownBodyLength); + + messageParser->Start(KErrNone); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageParser); + } + +void CTestEngine::DoParseBadChunkSizeL() + { + // Chunked message with errors in the chunk-size - an empty line where a + // chunk-size should be (ignored) followed by the chunk-data, treated as a + // chunk-size and ignoring the error (can't convert to numeric value) + + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + // Create the http message parser driver + CMessageParserDriver* messageParser = CMessageParserDriver::NewL(*this); + CleanupStack::PushL(messageParser); + + _LIT8(KMessageData, "HTTP/1.1 200 Ok\r\nContent-Type: text/plain\r\nTransfer-Encoding: chunked\r\nServer: CERN/3.0\r\n libwww/2.17\r\n\r\n4 \r\nThis\r\n\r\n is the da\r\n15 ;myextension = \"ten\"\r\nta that is being sent\r\n000\r\n\r\n"); + _LIT8(KStartLine, "HTTP/1.1 200 Ok"); + _LIT8(KHeaderName1, "Content-Type"); _LIT8(KHeaderValue1, "text/plain"); + _LIT8(KHeaderName2, "Transfer-Encoding"); _LIT8(KHeaderValue2, "chunked"); + _LIT8(KHeaderName3, "Server"); _LIT8(KHeaderValue3, "CERN/3.0 libwww/2.17"); + _LIT8(KEntityBody, "This"); + TBool isChunked = ETrue; + + messageParser->SetMessageData(KMessageData()); + messageParser->SetStartLine(KStartLine()); + messageParser->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageParser->SetHeaderL(KHeaderName2(), KHeaderValue2()); + messageParser->SetHeaderL(KHeaderName3(), KHeaderValue3()); + messageParser->SetBodyData(KEntityBody(), isChunked, iUseUnknownBodyLength); + + messageParser->Start(KErrNone); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageParser); + } + +void CTestEngine::DoParseMissingCRsL() + { + // Message with headers, chunk-encoded entity body and trailers. + // NOTE - CRs are missing from line terminators + + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + // Create the http message parser driver + CMessageParserDriver* messageParser = CMessageParserDriver::NewL(*this); + CleanupStack::PushL(messageParser); + + _LIT8(KMessageData, "HTTP/1.1 200 Ok\nContent-Type: text/plain\nTransfer-Encoding: chunked\nTrailer: Server, ETag\n\n4 \nThis\n0a\n is the da\n15 ; myextension = \"ten\"\nta that is being sent\n 0 \nServer: CERN/3.0\n libwww/2.17\nETag: \"dave\"\n\n"); + _LIT8(KStartLine, "HTTP/1.1 200 Ok"); + _LIT8(KHeaderName1, "Content-Type"); _LIT8(KHeaderValue1, "text/plain"); + _LIT8(KHeaderName2, "Transfer-Encoding"); _LIT8(KHeaderValue2, "chunked"); + _LIT8(KHeaderName3, "Trailer"); _LIT8(KHeaderValue3, "Server, ETag"); + _LIT8(KEntityBody, "This is the data that is being sent"); + TBool isChunked = ETrue; + _LIT8(KTrailerName1,"Server"); _LIT8(KTrailerValue1, "CERN/3.0 libwww/2.17"); + _LIT8(KTrailerName2,"ETag"); _LIT8(KTrailerValue2, "\"dave\""); + + messageParser->SetMessageData(KMessageData()); + messageParser->SetStartLine(KStartLine()); + messageParser->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageParser->SetHeaderL(KHeaderName2(), KHeaderValue2()); + messageParser->SetHeaderL(KHeaderName3(), KHeaderValue3()); + messageParser->SetBodyData(KEntityBody(), isChunked, iUseUnknownBodyLength); + messageParser->SetTrailerL(KTrailerName1(), KTrailerValue1()); + messageParser->SetTrailerL(KTrailerName2(), KTrailerValue2()); + + messageParser->Start(KErrNone); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageParser); + } + +void CTestEngine::DoParseSpuriousCRsL() + { + // Message with headers, chunk-encoded entity body and trailers. + // NOTE - there are spurious CRs throughout the message that should be ignored. + + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + // Create the http message parser driver + CMessageParserDriver* messageParser = CMessageParserDriver::NewL(*this); + CleanupStack::PushL(messageParser); + + _LIT8(KMessageData, "HTTP/1.1 200 Ok\r\r\r\r\r\nContent\r-Type:\rtext/plain\r\nTransfer-Encoding\r:\r \rchunked\r\r\r\n\rTrailer: Server,\rETag\r\n\r\r\r\r\n\r\r4\r\nThis\n0a\r\n is the da\r\n15 ; myextension = \"ten\"\r\nta that is being sent\r\n0\r\nServer: CERN/3.0\r\n\r libwww/2.17\r\nETag:\r \"d\rave\"\r\n\r\r\n"); + _LIT8(KStartLine, "HTTP/1.1 200 Ok"); + _LIT8(KHeaderName1, "Content-Type"); _LIT8(KHeaderValue1, "text/plain"); + _LIT8(KHeaderName2, "Transfer-Encoding"); _LIT8(KHeaderValue2, "chunked"); + _LIT8(KHeaderName3, "Trailer"); _LIT8(KHeaderValue3, "Server,ETag"); + _LIT8(KEntityBody, "This is the data that is being sent"); + TBool isChunked = ETrue; + _LIT8(KTrailerName1,"Server"); _LIT8(KTrailerValue1, "CERN/3.0 libwww/2.17"); + _LIT8(KTrailerName2,"ETag"); _LIT8(KTrailerValue2, "\"dave\""); + + messageParser->SetMessageData(KMessageData()); + messageParser->SetStartLine(KStartLine()); + messageParser->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageParser->SetHeaderL(KHeaderName2(), KHeaderValue2()); + messageParser->SetHeaderL(KHeaderName3(), KHeaderValue3()); + messageParser->SetBodyData(KEntityBody(), isChunked, iUseUnknownBodyLength); + messageParser->SetTrailerL(KTrailerName1(), KTrailerValue1()); + messageParser->SetTrailerL(KTrailerName2(), KTrailerValue2()); + + messageParser->Start(KErrNone); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageParser); + } + +void CTestEngine::DoParseLongHeaderL() + { + // Message with no entity body - just headers. + // Header is very long - should excercise the realloc functionality + + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + // Create the http message parser driver + CMessageParserDriver* messageParser = CMessageParserDriver::NewL(*this); + CleanupStack::PushL(messageParser); + + _LIT8(KMessageData, "HTTP/1.1 204 No Content\r\nLong-Header: AVeryLongHeaderIndeedFullOfRubbishAndNotReallyHavingAnyMeaningAtAllInFactItJustNeedToBeOver128BytesInLengthAndThatIsReallyItOkJustALIttlMoreAndThatIsAll\r\n\r\n"); + _LIT8(KStartLine, "HTTP/1.1 204 No Content"); + _LIT8(KHeaderName1, "Long-Header"); _LIT8(KHeaderValue1, "AVeryLongHeaderIndeedFullOfRubbishAndNotReallyHavingAnyMeaningAtAllInFactItJustNeedToBeOver128BytesInLengthAndThatIsReallyItOkJustALIttlMoreAndThatIsAll"); + _LIT8(KEntityBody, ""); + TBool isChunked = EFalse; + + messageParser->SetMessageData(KMessageData()); + messageParser->SetStartLine(KStartLine()); + messageParser->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageParser->SetBodyData(KEntityBody(), isChunked, iUseUnknownBodyLength); + + messageParser->Start(KErrNone); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageParser); + } + +void CTestEngine::DoParseLeadingEmptyLineL() + { + // Simple message test case - just a start-line. no headers or entity body. + // There is a leading empty lines that should just be ignored. + + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + // Create the http message parser driver + CMessageParserDriver* messageParser = CMessageParserDriver::NewL(*this); + CleanupStack::PushL(messageParser); + + _LIT8(KMessageData, "\r\n\r\nHTTP/1.1 100 Continue\r\n\r\n"); + _LIT8(KStartLine, "HTTP/1.1 100 Continue"); + _LIT8(KEntityBody, ""); + TBool isChunked = EFalse; + + messageParser->SetMessageData(KMessageData()); + messageParser->SetStartLine(KStartLine()); + messageParser->SetBodyData(KEntityBody(), isChunked, iUseUnknownBodyLength); + + messageParser->Start(KErrNone); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageParser); + } + +void CTestEngine::DoParseNonChunkedResetL() + { + // Message with headers and non-encoded entity body. + + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + // Create the http message parser driver + CMessageParserDriver* messageParser = CMessageParserDriver::NewL(*this); + CleanupStack::PushL(messageParser); + + _LIT8(KMessageData, "HTTP/1.1 200 Ok\r\nContent-Type: text/plain\r\nContent-Length: 35\r\nServer: CERN/3.0\r\n libwww/2.17\r\n\r\nThis is the data that is being sent"); + _LIT8(KStartLine, "HTTP/1.1 200 Ok"); + _LIT8(KHeaderName1, "Content-Type"); _LIT8(KHeaderValue1, "text/plain"); + _LIT8(KHeaderName2, "Content-Length"); _LIT8(KHeaderValue2, "35"); + _LIT8(KHeaderName3, "Server"); _LIT8(KHeaderValue3, "CERN/3.0 libwww/2.17"); + _LIT8(KEntityBody, "This is the data that is being sent"); + TBool isChunked = EFalse; + + messageParser->SetMessageData(KMessageData()); + messageParser->SetStartLine(KStartLine()); + messageParser->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageParser->SetHeaderL(KHeaderName2(), KHeaderValue2()); + messageParser->SetHeaderL(KHeaderName3(), KHeaderValue3()); + messageParser->SetBodyData(KEntityBody(), isChunked, iUseUnknownBodyLength); + + messageParser->Start(KErrNone, ETrue); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageParser); + } + +void CTestEngine::DoParseChunkedResetL() + { + // Message with headers, chunk-encoded entity body and trailers. + + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + // Create the http message parser driver + CMessageParserDriver* messageParser = CMessageParserDriver::NewL(*this); + CleanupStack::PushL(messageParser); + + _LIT8(KMessageData, "HTTP/1.1 200 Ok\r\nContent-Type: text/plain\r\nTransfer-Encoding: chunked\r\nTrailer: Server, ETag\r\n\r\n4 \r\nThis\r\n0a\r\n is the da\r\n15 ; myextension = \"ten\"\r\nta that is being sent\r\n 0 \r\nServer: CERN/3.0\r\n libwww/2.17\r\nETag: \"dave\"\r\n\r\n"); + _LIT8(KStartLine, "HTTP/1.1 200 Ok"); + _LIT8(KHeaderName1, "Content-Type"); _LIT8(KHeaderValue1, "text/plain"); + _LIT8(KHeaderName2, "Transfer-Encoding"); _LIT8(KHeaderValue2, "chunked"); + _LIT8(KHeaderName3, "Trailer"); _LIT8(KHeaderValue3, "Server, ETag"); + _LIT8(KEntityBody, "This is the data that is being sent"); + TBool isChunked = ETrue; + _LIT8(KTrailerName1,"Server"); _LIT8(KTrailerValue1, "CERN/3.0 libwww/2.17"); + _LIT8(KTrailerName2,"ETag"); _LIT8(KTrailerValue2, "\"dave\""); + + messageParser->SetMessageData(KMessageData()); + messageParser->SetStartLine(KStartLine()); + messageParser->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageParser->SetHeaderL(KHeaderName2(), KHeaderValue2()); + messageParser->SetHeaderL(KHeaderName3(), KHeaderValue3()); + messageParser->SetBodyData(KEntityBody(), isChunked, iUseUnknownBodyLength); + messageParser->SetTrailerL(KTrailerName1(), KTrailerValue1()); + messageParser->SetTrailerL(KTrailerName2(), KTrailerValue2()); + + messageParser->Start(KErrNone, ETrue); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageParser); + } + +void CTestEngine::DoParseChunkDataContainingOnlyCRsL() + { + // Message with headers and chunk-encoded entity body. + // Message body has chunks containing only CRs + + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + // Create the http message parser driver + CMessageParserDriver* messageParser = CMessageParserDriver::NewL(*this); + CleanupStack::PushL(messageParser); + + _LIT8(KMessageData, "HTTP/1.1 200 Ok\r\nContent-Type: text/plain\r\nTransfer-Encoding: chunked\r\nServer: CERN/3.0\r\n\tlibwww/2.17\r\n\r\n4 \r\nThis\r\n0a\r\n is the da\r\n0d ; myextension = \"ten\"\r\nta that is be\r\n1\r\n\r\r\n5\r\ning s\r\n2\r\n\r\r\r\n3\r\nent\r\n000\r\n\r\n"); + _LIT8(KStartLine, "HTTP/1.1 200 Ok"); + _LIT8(KHeaderName1, "Content-Type"); _LIT8(KHeaderValue1, "text/plain"); + _LIT8(KHeaderName2, "Transfer-Encoding"); _LIT8(KHeaderValue2, "chunked"); + _LIT8(KHeaderName3, "Server"); _LIT8(KHeaderValue3, "CERN/3.0\tlibwww/2.17"); + _LIT8(KEntityBody, "This is the data that is be\ring s\r\rent"); + TBool isChunked = ETrue; + + messageParser->SetMessageData(KMessageData()); + messageParser->SetStartLine(KStartLine()); + messageParser->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageParser->SetHeaderL(KHeaderName2(), KHeaderValue2()); + messageParser->SetHeaderL(KHeaderName3(), KHeaderValue3()); + messageParser->SetBodyData(KEntityBody(), isChunked, iUseUnknownBodyLength); + + messageParser->Start(KErrNone); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageParser); + } + +void CTestEngine::DoComposeSimpleMessageL() + { + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + _LIT8(KMessageData, "HTTP/1.1 100 Continue\r\n\r\n"); + _LIT8(KStartLine1, "HTTP/1.1"); + _LIT8(KStartLine2, "100"); + _LIT8(KStartLine3, "Continue"); + + // Create the http message parser driver + CMessageComposerDriver* messageComposer = CMessageComposerDriver::NewL(*this); + CleanupStack::PushL(messageComposer); + + // Set the message data... + messageComposer->SetMessageData(KMessageData()); + + // Set the start-line + messageComposer->SetStartLine(KStartLine1(), KStartLine2(), KStartLine3()); + + // Start the composer... + messageComposer->Start(KErrNone); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageComposer); + } + +void CTestEngine::DoComposeNoEntityBodyL() + { + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + _LIT8(KMessageData, "HTTP/1.1 204 No Content\r\nX-Wap-Push-Status: 400 Accepted\r\n\r\n"); + _LIT8(KStartLine1, "HTTP/1.1"); + _LIT8(KStartLine2, "204"); + _LIT8(KStartLine3, "No Content"); + _LIT8(KHeaderName1, "X-Wap-Push-Status"); _LIT8(KHeaderValue1, "400 Accepted"); + + // Create the http message parser driver + CMessageComposerDriver* messageComposer = CMessageComposerDriver::NewL(*this); + CleanupStack::PushL(messageComposer); + + // Set the message data... + messageComposer->SetMessageData(KMessageData()); + + // Set the start-line + messageComposer->SetStartLine(KStartLine1(), KStartLine2(), KStartLine3()); + + // Set the headers... + messageComposer->SetHeaderL(KHeaderName1(), KHeaderValue1()); + + // Start the composer... + messageComposer->Start(KErrNone); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageComposer); + } + +void CTestEngine::DoComposeNonEncodedBodyL() + { + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + _LIT8(KMessageData, "HTTP/1.1 200 Ok\r\nContent-Type: text/plain\r\nContent-Length: 35\r\nServer: CERN/3.0 libwww/2.17\r\n\r\nThis is the data that is being sent"); + _LIT8(KStartLine1, "HTTP/1.1"); + _LIT8(KStartLine2, "200"); + _LIT8(KStartLine3, "Ok"); + _LIT8(KHeaderName1, "Content-Type"); _LIT8(KHeaderValue1, "text/plain"); + _LIT8(KHeaderName2, "Content-Length"); _LIT8(KHeaderValue2, "35"); + _LIT8(KHeaderName3, "Server"); _LIT8(KHeaderValue3, "CERN/3.0 libwww/2.17"); + _LIT8(KBodyPart1, "This is the da"); + _LIT8(KBodyPart2, ""); + _LIT8(KBodyPart3, "ta that is being sent"); + + // Create the http message parser driver + CMessageComposerDriver* messageComposer = CMessageComposerDriver::NewL(*this); + CleanupStack::PushL(messageComposer); + + // Set the message data... + messageComposer->SetMessageData(KMessageData()); + + // Set the start-line + messageComposer->SetStartLine(KStartLine1(), KStartLine2(), KStartLine3()); + + // Set the headers... + messageComposer->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageComposer->SetHeaderL(KHeaderName2(), KHeaderValue2()); + messageComposer->SetHeaderL(KHeaderName3(), KHeaderValue3()); + + // Set body... + messageComposer->SetBodyDataL(KBodyPart1()); + messageComposer->SetBodyDataL(KBodyPart2()); + messageComposer->SetBodyDataL(KBodyPart3()); + messageComposer->SetBodySize(35); + + + // Start the composer... + messageComposer->Start(KErrNone); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageComposer); + } + +void CTestEngine::DoComposeChunkEncodedBodyL() + { + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + _LIT8(KMessageData, "HTTP/1.1 200 Ok\r\nContent-Type: text/plain\r\nTransfer-Encoding: chunked\r\nServer: CERN/3.0 libwww/2.17\r\n\r\n4\r\nThis\r\nA\r\n is the da\r\n15\r\nta that is being sent\r\n0\r\n\r\n"); + _LIT8(KStartLine1, "HTTP/1.1"); + _LIT8(KStartLine2, "200"); + _LIT8(KStartLine3, "Ok"); + _LIT8(KHeaderName1, "Content-Type"); _LIT8(KHeaderValue1, "text/plain"); + _LIT8(KHeaderName2, "Transfer-Encoding"); _LIT8(KHeaderValue2, "chunked"); + _LIT8(KHeaderName3, "Server"); _LIT8(KHeaderValue3, "CERN/3.0 libwww/2.17"); + _LIT8(KBodyPart1, "This"); + _LIT8(KBodyPart2, " is the da"); + _LIT8(KBodyPart3, ""); + _LIT8(KBodyPart4, "ta that is being sent"); + + // Create the http message parser driver + CMessageComposerDriver* messageComposer = CMessageComposerDriver::NewL(*this); + CleanupStack::PushL(messageComposer); + + // Set the message data... + messageComposer->SetMessageData(KMessageData()); + + // Set the start-line + messageComposer->SetStartLine(KStartLine1(), KStartLine2(), KStartLine3()); + + // Set the headers... + messageComposer->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageComposer->SetHeaderL(KHeaderName2(), KHeaderValue2()); + messageComposer->SetHeaderL(KHeaderName3(), KHeaderValue3()); + + // Set body... + messageComposer->SetBodyDataL(KBodyPart1()); + messageComposer->SetBodyDataL(KBodyPart2()); + messageComposer->SetBodyDataL(KBodyPart3()); + messageComposer->SetBodyDataL(KBodyPart4()); + messageComposer->SetBodySize(KErrNotFound); + + // Start the composer... + messageComposer->Start(KErrNone); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageComposer); + } + +void CTestEngine::DoComposeChunkEncodedBodyWithTrailersL() + { + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + _LIT8(KMessageData, "HTTP/1.1 200 Ok\r\nContent-Type: text/plain\r\nTransfer-Encoding: chunked\r\nTrailer: Server, ETag\r\n\r\n4\r\nThis\r\nA\r\n is the da\r\n15\r\nta that is being sent\r\n0\r\nServer: CERN/3.0 libwww/2.17\r\nETag: \"dave\"\r\n\r\n"); + _LIT8(KStartLine1, "HTTP/1.1"); + _LIT8(KStartLine2, "200"); + _LIT8(KStartLine3, "Ok"); + _LIT8(KHeaderName1, "Content-Type"); _LIT8(KHeaderValue1, "text/plain"); + _LIT8(KHeaderName2, "Transfer-Encoding"); _LIT8(KHeaderValue2, "chunked"); + _LIT8(KHeaderName3, "Trailer"); _LIT8(KHeaderValue3, "Server, ETag"); + _LIT8(KTrailerName1, "Server"); _LIT8(KTrailerValue1, "CERN/3.0 libwww/2.17"); + _LIT8(KTrailerName2, "ETag"); _LIT8(KTrailerValue2, "\"dave\""); + _LIT8(KBodyPart1, "This"); + _LIT8(KBodyPart2, " is the da"); + _LIT8(KBodyPart3, "ta that is being sent"); + _LIT8(KBodyPart4, ""); + + // Create the http message parser driver + CMessageComposerDriver* messageComposer = CMessageComposerDriver::NewL(*this); + CleanupStack::PushL(messageComposer); + + // Set the message data... + messageComposer->SetMessageData(KMessageData()); + + // Set the start-line + messageComposer->SetStartLine(KStartLine1(), KStartLine2(), KStartLine3()); + + // Set the headers... + messageComposer->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageComposer->SetHeaderL(KHeaderName2(), KHeaderValue2()); + messageComposer->SetHeaderL(KHeaderName3(), KHeaderValue3()); + + // Set body... + messageComposer->SetBodyDataL(KBodyPart1()); + messageComposer->SetBodyDataL(KBodyPart2()); + messageComposer->SetBodyDataL(KBodyPart3()); + messageComposer->SetBodyDataL(KBodyPart4()); + messageComposer->SetBodySize(KErrNotFound); + + // Set trailers... + messageComposer->SetTrailerL(KTrailerName1(), KTrailerValue1()); + messageComposer->SetTrailerL(KTrailerName2(), KTrailerValue2()); + + // Start the composer... + messageComposer->Start(KErrNone); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageComposer); + } + +void CTestEngine::DoComposeTooMuchEntityBodyDataL() + { + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + _LIT8(KMessageData, "HTTP/1.1 200 Ok\r\nContent-Type: text/plain\r\nContent-Length: 35\r\nServer: CERN/3.0 libwww/2.17\r\n\r\nThis is the data that is being sent"); + _LIT8(KStartLine1, "HTTP/1.1"); + _LIT8(KStartLine2, "200"); + _LIT8(KStartLine3, "Ok"); + _LIT8(KHeaderName1, "Content-Type"); _LIT8(KHeaderValue1, "text/plain"); + _LIT8(KHeaderName2, "Content-Length"); _LIT8(KHeaderValue2, "35"); + _LIT8(KHeaderName3, "Server"); _LIT8(KHeaderValue3, "CERN/3.0 libwww/2.17"); + _LIT8(KBodyPart1, "This is the da"); + _LIT8(KBodyPart2, "ta that is being sent"); + _LIT8(KBodyPart3, "extra data"); + + // Create the http message parser driver + CMessageComposerDriver* messageComposer = CMessageComposerDriver::NewL(*this); + CleanupStack::PushL(messageComposer); + + // Set the message data... + messageComposer->SetMessageData(KMessageData()); + + // Set the start-line + messageComposer->SetStartLine(KStartLine1(), KStartLine2(), KStartLine3()); + + // Set the headers... + messageComposer->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageComposer->SetHeaderL(KHeaderName2(), KHeaderValue2()); + messageComposer->SetHeaderL(KHeaderName3(), KHeaderValue3()); + + // Set body... + messageComposer->SetBodyDataL(KBodyPart1()); + messageComposer->SetBodyDataL(KBodyPart2()); + messageComposer->SetBodyDataL(KBodyPart3()); + messageComposer->SetBodySize(35); + + // Start the composer... + messageComposer->Start(KErrCorrupt); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageComposer); + } + +void CTestEngine::DoComposeTooLittleEntityBodyDataL() + { + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + _LIT8(KMessageData, "HTTP/1.1 200 Ok\r\nContent-Type: text/plain\r\nContent-Length: 35\r\nServer: CERN/3.0 libwww/2.17\r\n\r\nThis is the data that is being sent"); + _LIT8(KStartLine1, "HTTP/1.1"); + _LIT8(KStartLine2, "200"); + _LIT8(KStartLine3, "Ok"); + _LIT8(KHeaderName1, "Content-Type"); _LIT8(KHeaderValue1, "text/plain"); + _LIT8(KHeaderName2, "Content-Length"); _LIT8(KHeaderValue2, "35"); + _LIT8(KHeaderName3, "Server"); _LIT8(KHeaderValue3, "CERN/3.0 libwww/2.17"); + _LIT8(KBodyPart1, "This is the da"); + + // Create the http message parser driver + CMessageComposerDriver* messageComposer = CMessageComposerDriver::NewL(*this); + CleanupStack::PushL(messageComposer); + + // Set the message data... + messageComposer->SetMessageData(KMessageData()); + + // Set the start-line + messageComposer->SetStartLine(KStartLine1(), KStartLine2(), KStartLine3()); + + // Set the headers... + messageComposer->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageComposer->SetHeaderL(KHeaderName2(), KHeaderValue2()); + messageComposer->SetHeaderL(KHeaderName3(), KHeaderValue3()); + + // Set body... + messageComposer->SetBodyDataL(KBodyPart1()); + messageComposer->SetBodySize(35); + + // Start the composer... + messageComposer->Start(KErrCorrupt); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageComposer); + } + +void CTestEngine::DoComposeLongHeaderL() + { + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + _LIT8(KMessageData, "HTTP/1.1 204 No Content\r\nLong-Header: AVeryLongHeaderIndeedFullOfRubbishAndNotReallyHavingAnyMeaningAtAllInFactItJustNeedToBeOver128BytesInLengthAndThatIsReallyItOkJustALIttlMoreAndThatIsAll\r\n\r\n"); + _LIT8(KStartLine1, "HTTP/1.1"); + _LIT8(KStartLine2, "204"); + _LIT8(KStartLine3, "No Content"); + _LIT8(KHeaderName1, "Long-Header"); _LIT8(KHeaderValue1, "AVeryLongHeaderIndeedFullOfRubbishAndNotReallyHavingAnyMeaningAtAllInFactItJustNeedToBeOver128BytesInLengthAndThatIsReallyItOkJustALIttlMoreAndThatIsAll"); + + // Create the http message parser driver + CMessageComposerDriver* messageComposer = CMessageComposerDriver::NewL(*this); + CleanupStack::PushL(messageComposer); + + // Set the message data... + messageComposer->SetMessageData(KMessageData()); + + // Set the start-line + messageComposer->SetStartLine(KStartLine1(), KStartLine2(), KStartLine3()); + + // Set the headers... + messageComposer->SetHeaderL(KHeaderName1(), KHeaderValue1()); + + // Start the composer... + messageComposer->Start(KErrNone); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageComposer); + } + +void CTestEngine::DoComposeNonEncodedBodyResetL() + { + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + _LIT8(KMessageData, "HTTP/1.1 200 Ok\r\nContent-Type: text/plain\r\nContent-Length: 35\r\nServer: CERN/3.0 libwww/2.17\r\n\r\nThis is the data that is being sent"); + _LIT8(KStartLine1, "HTTP/1.1"); + _LIT8(KStartLine2, "200"); + _LIT8(KStartLine3, "Ok"); + _LIT8(KHeaderName1, "Content-Type"); _LIT8(KHeaderValue1, "text/plain"); + _LIT8(KHeaderName2, "Content-Length"); _LIT8(KHeaderValue2, "35"); + _LIT8(KHeaderName3, "Server"); _LIT8(KHeaderValue3, "CERN/3.0 libwww/2.17"); + _LIT8(KBodyPart1, "This is the da"); + _LIT8(KBodyPart2, ""); + _LIT8(KBodyPart3, "ta that is being sent"); + + // Create the http message parser driver + CMessageComposerDriver* messageComposer = CMessageComposerDriver::NewL(*this); + CleanupStack::PushL(messageComposer); + + // Set the message data... + messageComposer->SetMessageData(KMessageData()); + + // Set the start-line + messageComposer->SetStartLine(KStartLine1(), KStartLine2(), KStartLine3()); + + // Set the headers... + messageComposer->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageComposer->SetHeaderL(KHeaderName2(), KHeaderValue2()); + messageComposer->SetHeaderL(KHeaderName3(), KHeaderValue3()); + + // Set body... + messageComposer->SetBodyDataL(KBodyPart1()); + messageComposer->SetBodyDataL(KBodyPart2()); + messageComposer->SetBodyDataL(KBodyPart3()); + messageComposer->SetBodySize(35); + + + // Start the composer... + messageComposer->Start(KErrNone, ETrue); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageComposer); + } + +void CTestEngine::DoComposeChunkEncodedBodyWithTrailersResetL() + { + // Reset test flags. + iTestCount = 0; + iTestFailed = EFalse; + + _LIT8(KMessageData, "HTTP/1.1 200 Ok\r\nContent-Type: text/plain\r\nTransfer-Encoding: chunked\r\nTrailer: Server, ETag\r\n\r\n4\r\nThis\r\nA\r\n is the da\r\n15\r\nta that is being sent\r\n0\r\nServer: CERN/3.0 libwww/2.17\r\nETag: \"dave\"\r\n\r\n"); + _LIT8(KStartLine1, "HTTP/1.1"); + _LIT8(KStartLine2, "200"); + _LIT8(KStartLine3, "Ok"); + _LIT8(KHeaderName1, "Content-Type"); _LIT8(KHeaderValue1, "text/plain"); + _LIT8(KHeaderName2, "Transfer-Encoding"); _LIT8(KHeaderValue2, "chunked"); + _LIT8(KHeaderName3, "Trailer"); _LIT8(KHeaderValue3, "Server, ETag"); + _LIT8(KTrailerName1, "Server"); _LIT8(KTrailerValue1, "CERN/3.0 libwww/2.17"); + _LIT8(KTrailerName2, "ETag"); _LIT8(KTrailerValue2, "\"dave\""); + _LIT8(KBodyPart1, "This"); + _LIT8(KBodyPart2, " is the da"); + _LIT8(KBodyPart3, "ta that is being sent"); + _LIT8(KBodyPart4, ""); + + // Create the http message parser driver + CMessageComposerDriver* messageComposer = CMessageComposerDriver::NewL(*this); + CleanupStack::PushL(messageComposer); + + // Set the message data... + messageComposer->SetMessageData(KMessageData()); + + // Set the start-line + messageComposer->SetStartLine(KStartLine1(), KStartLine2(), KStartLine3()); + + // Set the headers... + messageComposer->SetHeaderL(KHeaderName1(), KHeaderValue1()); + messageComposer->SetHeaderL(KHeaderName2(), KHeaderValue2()); + messageComposer->SetHeaderL(KHeaderName3(), KHeaderValue3()); + + // Set body... + messageComposer->SetBodyDataL(KBodyPart1()); + messageComposer->SetBodyDataL(KBodyPart2()); + messageComposer->SetBodyDataL(KBodyPart3()); + messageComposer->SetBodyDataL(KBodyPart4()); + messageComposer->SetBodySize(KErrNotFound); + + // Set trailers... + messageComposer->SetTrailerL(KTrailerName1(), KTrailerValue1()); + messageComposer->SetTrailerL(KTrailerName2(), KTrailerValue2()); + + // Start the composer... + messageComposer->Start(KErrNone, ETrue); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(messageComposer); + } + +/* + * Methods from MDriverObserver + */ + +void CTestEngine::NotifyError(TInt aError) + { + if( !iTestFailed ) + { + // This is the first failure - stop the scheduler + iTestFailed = ETrue; + + // Log the failure - do not log this to summary file - go silent + iTestUtils->SetSilent(ETrue); + + // Log the comment... + TBuf comment; + comment.Format(_L("Test error %d"), aError); + iTestUtils->LogIt(comment); + + // Go back to non-silent + iTestUtils->SetSilent(EFalse); + + // Stop the scheduler + CActiveScheduler::Stop(); + } + } + +void CTestEngine::NotifyStart() + { + ++iTestCount; + } + +void CTestEngine::NotifyComplete() + { + --iTestCount; + if( iTestCount == 0 ) + { + // Log success - do not log this to summary file - go silent + iTestUtils->SetSilent(ETrue); + + // Log the comment... + iTestUtils->LogIt(_L("Test completed")); + + // Go back to non-silent + iTestUtils->SetSilent(EFalse); + + // All tests have completed - stop the scheduler + CActiveScheduler::Stop(); + } + } + +void CTestEngine::Log(const TDesC& aCmt) + { + // Only log if not doing OOM testing + if( !iOOMTesting ) + { + // Do not log this to summary file - go silent + iTestUtils->SetSilent(ETrue); + + // Log the comment... + iTestUtils->LogIt(aCmt); + + // Go back to non-silent + iTestUtils->SetSilent(EFalse); + } + } + +void CTestEngine::Dump(const TDesC8& aData) + { + // Only log if not doing OOM testing + if( !iOOMTesting ) + { + // Do not log this to summary file - go silent + iTestUtils->SetSilent(ETrue); + + // Do the data dump... + iTestUtils->DumpData(aData, ETrue); + + // Go back to non-silent + iTestUtils->SetSilent(EFalse); + } + }