applayerprotocols/httpservice/test/httpservicetest/ctesthttpclientstep.cpp
changeset 0 b16258d2340f
child 5 337070b4fa18
--- /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 <escapeutils.h>
+#include <thttphdrval.h>
+#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<CHeaderInfo>& 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();
+    }