diff -r 000000000000 -r b16258d2340f applayerprotocols/httpservice/test/httpservicetest/ctesthttpclientstep.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/applayerprotocols/httpservice/test/httpservicetest/ctesthttpclientstep.cpp Tue Feb 02 01:09:52 2010 +0200 @@ -0,0 +1,186 @@ +// 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: +// + +#include "ctesthttpclientstep.h" +#include "chttpservice.h" +#include "ctestclienthttpget.h" +#include "ctestclienthttppost.h" +#include +#include +#include "httptestutils.h" +#include "clocaltestserver.h" +#include "chttpclienttestparams.h" + +_LIT(KTestCaseName, "TestCaseName"); +_LIT8(KUserAgent, "HTTP Client API Test"); +_LIT(KTestHttpClientAPITestTitle, "HTTP client API Unit Test Harness"); +const TInt KMaxNoOfConnections = 6; +const TInt KMaxTransToPipeline = 5; + +CTestHttpClientStep::CTestHttpClientStep() + { + + } + +CTestHttpClientStep::~CTestHttpClientStep() + { + iTestServer->StopServer(); + delete iHttpTrans; + delete iHttpClient; + delete iTestServer; + delete iTestUtils; + delete iTestParamArray; + delete iActiveScheduler; + } + +// TEF virtuals +TVerdict CTestHttpClientStep::doTestStepPreambleL() + { + iActiveScheduler = new (ELeave) CActiveScheduler(); + CActiveScheduler::Install(iActiveScheduler); + iTestParamArray = new(ELeave) CHttpClientTestParamArray; + iTestUtils = CHTTPTestUtils::NewL(KTestHttpClientAPITestTitle()); + iTestUtils->InitCommsL(); + + iTestServer = CLocalTestServer::NewL(*iTestUtils, *this, *iTestParamArray); + iHttpClient = CHttpService::NewL(); + THttpHeaderValueVariant variant(KUserAgent()); + if(iHttpClient->AddRequestHeader(HTTP::EUserAgent, variant)) + { + SetTestStepResult(EFail); + return TestStepResult(); + } + if(iHttpClient->MaxConnections() != KMaxNoOfConnections) + { + SetTestStepResult(EFail); + return TestStepResult(); + } + if(iHttpClient->MaxTransactionsToPipeline() != KMaxTransToPipeline) + { + SetTestStepResult(EFail); + return TestStepResult(); + } + + iTestServer->StartServerL(); + return TestStepResult(); + } + +// TEF pure virtual +TVerdict CTestHttpClientStep::doTestStepL() + { + TPtrC testStepName; + if(!GetStringFromConfig(ConfigSection(), KTestCaseName(), testStepName)) + { + User::Leave(KErrCorrupt); + } + SetTestStepName(testStepName); + _LIT8(KGetMethod, "GET"); + CHttpClientTestParams* param = CHttpClientTestParams::NewL(*this); + iTestParamArray->AddTestParams(param); + const TDesC8& proxyAddress = param->ProxyAddress(); + if(proxyAddress.Length() > 0) + { + User::LeaveIfError(iHttpClient->SetProxy(proxyAddress)); + if(iHttpClient->ProxyAddress().CompareF(proxyAddress) != 0) + { + User::Leave(KErrCorrupt); + } + } + + if(param->Method().CompareF(KGetMethod) == 0) + { + if(param->OnlineTest()) + { + iHttpTrans = CTestClientHttpOnlineGet::NewL(*param, *this, *iHttpClient, param->Uri(), iTestUtils); + } + else + { + iHttpTrans = CTestClientHttpSimpleGet::NewL(*param, *this, *iHttpClient, param->Uri(), iTestUtils); + } + + } + else + { + iHttpTrans = CTestClientHttpSimplePost::NewL(*param, *this, *iHttpClient, param->Uri(), *iTestUtils); + TInt len = param->RequestBody().Length(); + if(len > 0) + { + THttpHeaderValueVariant variant(len); + iHttpTrans->AddRequestHeader(HTTP::EContentLength, variant); + } + } + + if(param->NoRetryOnDisconnect()) + { + iHttpTrans->SetNoRetry(); + } + + if(param->ResponseTimeoutEnable()) + { + iHttpTrans->SetResponseTimeout(10); + } + + const RPointerArray& info = param->RequestHeaderInfos(); + for(TInt i = 0; i < info.Count(); ++i) + { + CHeaderInfo* headerInfo = info[i]; + const TDesC8& headerName = *headerInfo->iFieldName; + + for(TInt j = 0; j < headerInfo->iFieldInfos.Count(); ++j) + { + CHeaderFieldInfo* headerFieldInfo = headerInfo->iFieldInfos[j]; + const TDesC8& headerFieldValue = *headerFieldInfo->iFieldValue; + THttpHeaderValueVariant variant(headerFieldValue); + if(headerFieldInfo->iFieldParamInfos.Count() == 0) + { + // Set the header + iHttpTrans->AddRequestHeader(headerName, variant); + } + else + { + for(TInt k = 0; k < headerFieldInfo->iFieldParamInfos.Count(); ++k) + { + CHeaderFieldParamInfo* paramInfo = headerFieldInfo->iFieldParamInfos[k]; + const TDesC8& paramName = *paramInfo->iParamName; + const TDesC8& paramValue = *paramInfo->iParamValue; + TLex8 lex(paramValue); + TReal64 value = 0.; + lex.Val(value); + THTTPHdrVal::TQConv q(value); + TInt val2 = q; + THttpHeaderValueVariant variant2(val2); + // Set the header with the param + iHttpTrans->AddRequestHeader(headerName, variant, paramName, variant2); + } + } + } + } + + iHttpTrans->SendRequest(); + + CActiveScheduler::Start(); + return TestStepResult(); + } + +void CTestHttpClientStep::EndTest(TInt aError) + { + if(aError != KErrNone) + { + SetTestStepResult(EFail); + } + // Failed with error. + iHttpTrans->CancelRequest(); + CActiveScheduler::Stop(); + }