--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerprotocols/httpservice/test/httpservicetest/ctestclienthttpget.cpp Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,327 @@
+// 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 "ctestclienthttpget.h"
+#include <httpstringconstants.h>
+#include "mlocaltestserverobserver.h"
+#include "chttpclienttestparams.h"
+#include <tinternetdate.h>
+_LIT8(KAcceptHeader, "Accept");
+_LIT8(KAcceptValue, "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");
+_LIT(KTestHttpClientAPITestTitle, "HTTP client API Unit Test Harness");
+_LIT(KTransferProgress, "File size: %d kb , Downloaded so far: %d kb");
+
+CTestClientHttpSimpleGet* CTestClientHttpSimpleGet::NewL(CHttpClientTestParams& aParams, MLocalTestServerObserver& aObserver, CHttpService& aClient, const TDesC8& aUri, CHTTPTestUtils* aUtils)
+ {
+ CTestClientHttpSimpleGet* self = new(ELeave) CTestClientHttpSimpleGet(aParams, aObserver, aUtils);
+ CleanupStack::PushL(self);
+ self->ConstructL(aClient, aUri);
+ CleanupStack::Pop(); // self
+ return self;
+ }
+
+CTestClientHttpSimpleGet::~CTestClientHttpSimpleGet()
+ {
+ }
+
+CTestClientHttpSimpleGet::CTestClientHttpSimpleGet(CHttpClientTestParams& aParams, MLocalTestServerObserver& aObserver, CHTTPTestUtils* aUtils)
+: iObserver(aObserver),
+iParams(aParams),
+iTestUtils(*aUtils)
+ {
+
+ }
+
+void CTestClientHttpSimpleGet::ConstructL(CHttpService& aClient, const TDesC8& aUri)
+ {
+ TPtrC8 method;
+ aClient.String(HTTP::EGET, method);
+ CHttpClientTransaction::Create(aClient, method, aUri);
+ }
+
+// From CHTTPClientTransaction
+void CTestClientHttpSimpleGet::OnResponseHeaders()
+ {
+ // Check whether the status code matches
+ if(iParams.StatusCode() != StatusCode())
+ {
+ iObserver.EndTest(KErrCorrupt);
+ }
+
+ // IF we are receiving a file. just sink the content to the file.
+ // We will not check
+ if(iParams.IsFileSending())
+ {
+ CHttpClientTransaction::SetContentSink(iParams.SinkFile());
+ return;
+ }
+ else
+ {
+ CHttpClientTransaction::SetContentSink(*this);
+ }
+ TInt i = 0;
+ const RPointerArray<CHeaderInfo>& hdrInfos = iParams.HeaderInfos();
+
+ THttpHeaderIterator iter = ResponseHeaders();
+ while(!iter.AtEnd())
+ {
+ CHeaderInfo* info = iParams.FindHeaderInfo(iter.Name());
+ if(info == NULL)
+ {
+ iObserver.EndTest(KErrCorrupt);
+ return;
+ }
+
+ TInt j = 0;
+ THttpHeaderElementIterator elementIter = iter.Elements();
+ while(!elementIter.AtEnd())
+ {
+ CHeaderFieldInfo* fieldInfo = info->iFieldInfos[j];
+ THttpHeaderValueVariant value = elementIter.Value();
+ if(!iParams.CheckVariantValue(value, *fieldInfo->iFieldValue))
+ {
+ iObserver.EndTest(KErrCorrupt);
+ return;
+ }
+
+ // Check the params
+ THttpHeaderParamIterator paramIter = elementIter.Parameter();
+ TInt k = 0;
+ while(!paramIter.AtEnd())
+ {
+ CHeaderFieldParamInfo* paramInfo = fieldInfo->iFieldParamInfos[k];
+ // Check the param name and value
+ if(paramInfo->iParamName->CompareF(paramIter.Name()) != 0)
+ {
+ iObserver.EndTest(KErrCorrupt);
+ return;
+ }
+ THttpHeaderValueVariant value = paramIter.Value();
+ if(!iParams.CheckVariantValue(value, *paramInfo->iParamValue) != 0)
+ {
+ iObserver.EndTest(KErrCorrupt);
+ return;
+ }
+ ++k;
+ ++paramIter;
+ }
+ ++j;
+ ++elementIter;
+ }
+ TInt x = 0;
+ THttpHeaderParamIterator hdrParamIter = iter.Parameters();
+ while(!hdrParamIter.AtEnd())
+ {
+ CHeaderFieldParamInfo* paramInfo = info->iParamInfos[x];
+ if(paramInfo->iParamName->CompareF(hdrParamIter.Name()) != 0)
+ {
+ iObserver.EndTest(KErrCorrupt);
+ return;
+ }
+ THttpHeaderValueVariant value = hdrParamIter.Value();
+ if(!iParams.CheckVariantValue(value, *paramInfo->iParamValue) != 0)
+ {
+ iObserver.EndTest(KErrCorrupt);
+ return;
+ }
+ ++x;
+ ++hdrParamIter;
+ }
+ ++iter;
+ ++i;
+ }
+ }
+
+void CTestClientHttpSimpleGet::OnCompletion()
+ {
+ if(iParams.IsFileSending())
+ {
+ iParams.SinkFile().Close(); // Close the file
+ TBool ret = ETrue;
+ TRAPD(err, ret = iParams.MatchFileContent());
+ if(err == KErrNone && ret)
+ iObserver.EndTest(KErrNone);
+ else
+ iObserver.EndTest(KErrCorrupt);
+ }
+ else
+ {
+ iObserver.EndTest(KErrNone);
+ }
+ }
+
+void CTestClientHttpSimpleGet::OnError(TInt aError)
+ {
+ if(aError == iParams.ExpectedError())
+ iObserver.EndTest(KErrNone);
+ else
+ iObserver.EndTest(aError);
+ }
+
+void CTestClientHttpSimpleGet::OnTransferProgress(TInt aTotal, TInt aTransffered)
+ {
+ if(iParams.TransferProgress())
+ {
+ iTestUtils.LogIt(KTransferProgress(),aTotal,aTransffered);
+ }
+ }
+
+TBool CTestClientHttpSimpleGet::OnRedirection()
+ {
+ if(iParams.IsRedirecting())
+ return ETrue;
+ else
+ return EFalse;
+ }
+
+void CTestClientHttpSimpleGet::OnData(THttpContentSinkOp& aData)
+ {
+ if(iParams.ResponseDynamicAndStatic())
+ {
+ aData.Store();
+ }
+ else
+ {
+ TPtrC8 ptr;
+ aData.GetData(ptr);
+ if(ptr.CompareF(iParams.ResponseBody()) != 0)
+ {
+ iObserver.EndTest(KErrCorrupt);
+ return;
+ }
+ aData.Release();
+ }
+ }
+
+
+CTestClientHttpOnlineGet* CTestClientHttpOnlineGet::NewL(CHttpClientTestParams& aParams, MLocalTestServerObserver& aObserver, CHttpService& aClient, const TDesC8& aUri, CHTTPTestUtils* aUtils)
+ {
+ CTestClientHttpOnlineGet* self = new(ELeave) CTestClientHttpOnlineGet(aParams, aObserver, aUtils);
+ CleanupStack::PushL(self);
+ self->ConstructL(aClient, aUri);
+ CleanupStack::Pop(); // self
+ return self;
+ }
+
+CTestClientHttpOnlineGet::CTestClientHttpOnlineGet(CHttpClientTestParams& aParams, MLocalTestServerObserver& aObserver, CHTTPTestUtils* aUtils)
+: CTestClientHttpSimpleGet(aParams, aObserver, aUtils)
+ {
+
+ }
+
+void CTestClientHttpOnlineGet::ConstructL(CHttpService& aClient, const TDesC8& aUri)
+ {
+ CTestClientHttpSimpleGet::ConstructL(aClient, aUri);
+ _LIT8(KLocalHost, "127.0.0.1");
+ if(aUri.FindF(KLocalHost()) == KErrNotFound)
+ {
+ CHttpClientTransaction::AddCustomRequestHeader(KAcceptHeader(), KAcceptValue());
+ THttpHeaderValueVariant variant;
+ variant.SetInt(300);
+ CHttpClientTransaction::AddRequestHeader(HTTP::EKeepAlive, variant);
+ _LIT8(KEnUs, "en-us");
+ variant.SetStr(KEnUs);
+ CHttpClientTransaction::AddRequestHeader(HTTP::EAcceptLanguage, variant);
+ _LIT8(KEn, "en");
+ _LIT8(KQVal, "0.9");
+
+ //The following functions SetDateTime() and DateTime() have been used to avoid the code coverage issues.
+ TDateTime dateTime(2009, EDecember, 0, 0, 0, 0, 0);
+ variant.SetDateTime(dateTime);
+
+ TInternetDate internetDate(variant.DateTime());
+
+ TLex8 lex(KQVal);
+ TReal64 value = 0.;
+ lex.Val(value);
+ THTTPHdrVal::TQConv q(value);
+ TInt val2 = q;
+ THttpHeaderValueVariant variant2(val2);
+ variant.SetStr(KEn);
+ CHttpClientTransaction::AddRequestHeader(HTTP::EAcceptLanguage, variant, HTTP::EQ, variant2);
+
+ //The following two temporary objects have been created to avoid the code coverage issues.
+ THttpContentSinkOp httpContentSinkOp;
+ THttpContentSourceOp httpContentSourceOp;
+ // Disable the pipelining
+ DisablePipelining();
+ }
+ else
+ {
+ _LIT8(KAcceptAll, "*/*");
+ CHttpClientTransaction::AddCustomRequestHeader(KAcceptHeader(), KAcceptAll());
+ }
+ }
+
+CTestClientHttpOnlineGet::~CTestClientHttpOnlineGet()
+ {
+
+ }
+
+void CTestClientHttpOnlineGet::OnResponseHeaders()
+ {
+ // Check whether the status code matches
+ if(iParams.StatusCode() != StatusCode())
+ {
+ iObserver.EndTest(KErrCorrupt);
+ return;
+ }
+ _LIT8(KStatusText, "Ok");
+ const TDesC8& statusText = StatusText();
+
+ if(statusText.CompareF(KStatusText) != 0)
+ {
+ // we do not fail here. But comparison is failed. print that.
+ }
+
+ // Iterate the response headers
+ THttpHeaderIterator iter;
+ iter = ResponseHeaders();
+ while(!iter.AtEnd())
+ {
+ iter++;
+ }
+
+ THttpHeaderElementIterator it;
+ it = ResponseHeader(HTTP::ECacheControl);
+ while(!it.AtEnd())
+ {
+ it++;
+ }
+ _LIT8(KContentType, "Content-Type");
+ it = ResponseHeader(KContentType());
+ while(!it.AtEnd())
+ {
+ THttpHeaderParamIterator it2;
+ it2 = it.Parameter();
+ while(!it2.AtEnd())
+ {
+ it2++;
+ }
+ it++;
+ }
+ CHttpClientTransaction::SetContentSink(*this);
+ }
+
+void CTestClientHttpOnlineGet::OnCompletion()
+ {
+ iObserver.EndTest(KErrNone);
+ }
+
+void CTestClientHttpOnlineGet::OnData(THttpContentSinkOp& aData)
+ {
+ // Just release the data
+ aData.Release();
+ }