--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/tcaf/source/SupplierStep.cpp Mon Oct 12 10:17:04 2009 +0300
@@ -0,0 +1,719 @@
+/*
+* 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 the License "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 <test/testexecutelog.h>
+#include <s32mem.h>
+#include "cafserver.h"
+#include "SupplierStep.h"
+#include "supplier.h"
+#include "cafmimeheader.h"
+#include "caferr.h"
+#include "metadataarray.h"
+#include "supplieroutputfile.h"
+#include "attribute.h"
+#include "bitset.h"
+
+#include <uri8.h>
+#ifndef SYMBIAN_DISABLE_UPWARD_DEPENDENCY
+#include <http.h>
+#include <http/rhttpsession.h>
+#include <http/rhttptransaction.h>
+#include <http/rhttpheaders.h>
+#endif
+
+using namespace ContentAccess;
+
+
+/*
+ * This step imports a DCF file into CAF
+ *
+ */
+CCafSupplierStep::~CCafSupplierStep()
+ {
+ }
+
+CCafSupplierStep::CCafSupplierStep(CCAFServer& aParent) : iParent(aParent)
+ {
+ SetTestStepName(KCAFSupplierStep);
+ }
+
+
+TVerdict CCafSupplierStep::doTestStepL()
+ {
+ SetTestStepResult(EInconclusive);
+
+ RFs fs;
+ RFile file;
+ TBuf8 <128> readBuffer;
+
+ INFO_PRINTF1(_L("Supplier Test - Agent provides output files"));
+
+ TPtrC outputDirectory, sourceFileName, suggestedFileName, mimeType;
+ TInt expectedLeave;
+
+ // Get parameters from INI file
+ GetStringFromConfig(ConfigSection(),_L("OutputPath"),outputDirectory);
+ GetStringFromConfig(ConfigSection(),_L("SourceFileName"),sourceFileName);
+ GetStringFromConfig(ConfigSection(),_L("SuggestedFileName"),suggestedFileName);
+ GetStringFromConfig(ConfigSection(),_L("MimeType"),mimeType);
+ GetIntFromConfig(ConfigSection(),_L("LeaveResult"),expectedLeave);
+
+ StartApparcServerL();
+
+ __UHEAP_MARK;
+
+ HBufC8 *mime = ConvertDes16toHBufC8LC(mimeType);
+
+ CCafMimeHeader *header = CCafMimeHeader::NewL(mime->Des());
+ CleanupStack::PushL(header);
+
+ CSupplier *mySupplier = CSupplier::NewLC();
+ mySupplier->SetOutputDirectoryL(outputDirectory);
+
+ // ignore return value, just exercises code for CCover
+ mySupplier->IsImportSupported(header->StandardMimeData(EContentType));
+
+ CImportFile *import = NULL;
+ TRAPD(leaveResult, import = mySupplier->ImportFileL(*header, suggestedFileName));
+ if(leaveResult != expectedLeave)
+ {
+ SetTestStepResult(EFail);
+ }
+ if(leaveResult == KErrNone)
+ {
+ CleanupStack::PushL(import);
+
+ // read the input file and pass it to the CAF
+ fs.Connect();
+ CleanupClosePushL(fs);
+
+ TInt result = file.Open(fs, sourceFileName, EFileRead | EFileStream | EFileShareAny);
+ CleanupClosePushL(file);
+ while(result == KErrNone)
+ {
+ result = file.Read(readBuffer);
+ if(readBuffer.Length() == 0)
+ break;
+ User::LeaveIfError(import->WriteData(readBuffer));
+ }
+ CleanupStack::PopAndDestroy(&file);
+ User::LeaveIfError(import->WriteDataComplete());
+
+ TInt n = import->OutputFileCountL();
+ for(TInt i = 0; i < n; i++)
+ {
+ // get output file name
+ TPtrC OutputFileName = import->OutputFileL(i).FileName();
+ INFO_PRINTF2(_L("Output File Created: %S"),&OutputFileName);
+
+ // get output file type (content or receipt)
+ TOutputType outputType = import->OutputFileL(i).OutputType();
+
+ if(outputType == EReceipt)
+ {
+ INFO_PRINTF1(_L("Output File is a receipt"));
+ }
+ else
+ {
+ INFO_PRINTF1(_L("Output File is content"));
+ }
+
+ // get output file mime type
+ TPtrC8 OutputMimeType = import->OutputFileL(i).MimeTypeL();
+ HBufC *mime = ConvertDes8toHBufC16LC(OutputMimeType );
+ INFO_PRINTF2(_L("Output File Mime Type: %S"),mime);
+ CleanupStack::PopAndDestroy(mime);
+ }
+ CleanupStack::PopAndDestroy(&fs);
+ CleanupStack::PopAndDestroy(import);
+ }
+ CleanupStack::PopAndDestroy(mySupplier);
+ CleanupStack::PopAndDestroy(header);
+ CleanupStack::PopAndDestroy(mime);
+ __UHEAP_MARKEND;
+
+ if (TestStepResult() != EFail)
+ {
+ SetTestStepResult(EPass);
+ }
+
+ return TestStepResult();
+ }
+
+
+
+/*
+ * This step imports a DCF file into CAF
+ *
+ */
+CCafSupplierAsyncStep::~CCafSupplierAsyncStep()
+ {
+ }
+
+CCafSupplierAsyncStep::CCafSupplierAsyncStep(CCAFServer& aParent) : iParent(aParent)
+ {
+ SetTestStepName(KCAFSupplierAsyncStep);
+ }
+
+
+TVerdict CCafSupplierAsyncStep::doTestStepL()
+ {
+ SetTestStepResult(EInconclusive);
+
+ RFs fs;
+ RFile file;
+ TBuf8 <128> readBuffer;
+ TRequestStatus status;
+
+ INFO_PRINTF1(_L("Asynchronous Supplier Test - Agent provides output files"));
+
+ TPtrC outputDirectory, sourceFileName, suggestedFileName, mimeType;
+ TInt expectedLeave;
+
+ // Get parameters from INI file
+ GetStringFromConfig(ConfigSection(),_L("OutputPath"),outputDirectory);
+ GetStringFromConfig(ConfigSection(),_L("SourceFileName"),sourceFileName);
+ GetStringFromConfig(ConfigSection(),_L("SuggestedFileName"),suggestedFileName);
+ GetStringFromConfig(ConfigSection(),_L("MimeType"),mimeType);
+ GetIntFromConfig(ConfigSection(),_L("LeaveResult"),expectedLeave);
+
+ StartApparcServerL();
+
+
+ __UHEAP_MARK;
+
+ HBufC8 *mime = ConvertDes16toHBufC8LC(mimeType);
+
+ CCafMimeHeader *header = CCafMimeHeader::NewL(mime->Des());
+ CleanupStack::PushL(header);
+
+ CSupplier *mySupplier = CSupplier::NewLC();
+ mySupplier->SetOutputDirectoryL(outputDirectory);
+
+ // ignore return value, just exercises code for CCover
+ mySupplier->IsImportSupported(header->StandardMimeData(EContentType));
+
+ CImportFile *import = NULL;
+ TRAPD(leaveResult, import = mySupplier->ImportFileL(*header, suggestedFileName));
+ if(leaveResult != expectedLeave)
+ {
+ SetTestStepResult(EFail);
+ }
+ if(leaveResult == KErrNone)
+ {
+ CleanupStack::PushL(import);
+
+ // read the input file and pass it to the CAF
+ fs.Connect();
+ CleanupClosePushL(fs);
+
+ TInt result = file.Open(fs, sourceFileName, EFileRead | EFileStream | EFileShareAny);
+ CleanupClosePushL(file);
+ while(result == KErrNone)
+ {
+ result = file.Read(readBuffer);
+ if(readBuffer.Length() == 0)
+ break;
+ status = KRequestPending;
+ import->WriteData(readBuffer,status);
+ User::WaitForRequest(status);
+ }
+ CleanupStack::PopAndDestroy(&file);
+ status = KRequestPending;
+ import->WriteDataComplete(status);
+ User::WaitForRequest(status);
+
+ TInt n = import->OutputFileCountL();
+ for(TInt i = 0; i < n; i++)
+ {
+ // get output file name
+ TPtrC OutputFileName = import->OutputFileL(i).FileName();
+ INFO_PRINTF2(_L("Output File Created: %S"),&OutputFileName);
+
+ // get output file type (content or receipt)
+ TOutputType outputType = import->OutputFileL(i).OutputType();
+
+ if(outputType == EReceipt)
+ {
+ INFO_PRINTF1(_L("Output File is a receipt"));
+ }
+ else
+ {
+ INFO_PRINTF1(_L("Output File is content"));
+ }
+
+ // get output file mime type
+ TPtrC8 OutputMimeType = import->OutputFileL(i).MimeTypeL();
+ HBufC *mime = ConvertDes8toHBufC16LC(OutputMimeType );
+ INFO_PRINTF2(_L("Output File Mime Type: %S"),mime);
+ CleanupStack::PopAndDestroy(mime);
+ }
+
+ CleanupStack::PopAndDestroy(&fs);
+ CleanupStack::PopAndDestroy(import);
+ }
+ CleanupStack::PopAndDestroy(mySupplier);
+ CleanupStack::PopAndDestroy(header);
+ CleanupStack::PopAndDestroy(mime);
+ __UHEAP_MARKEND;
+
+ if (TestStepResult() != EFail)
+ {
+ SetTestStepResult(EPass);
+ }
+
+ return TestStepResult();
+ }
+
+
+
+/*
+ * This step imports a DCF file into CAF
+ *
+ */
+CCafClientOutputSupplierStep::~CCafClientOutputSupplierStep()
+ {
+ }
+
+CCafClientOutputSupplierStep::CCafClientOutputSupplierStep(CCAFServer& aParent) : iParent(aParent)
+ {
+ SetTestStepName(KCAFClientOutputSupplierStep);
+ }
+
+void CCafClientOutputSupplierStep::CheckContentMimeL(CImportFile* aImport, TDes8& aContentMime, TDesC8& aExpectedContentMime)
+ {
+ if(!aImport->ContentMimeTypeL(aContentMime))
+ {
+ //Agent can't determine the content MIME type with available data at the moment
+
+ INFO_PRINTF1(_L("Content MIME Type can't be determined"));
+ SetTestStepResult(EFail);
+ return;
+ }
+
+
+ //If we reach here, we are expecting a correct Content MIME type
+ HBufC *mime = ConvertDes8toHBufC16LC(aContentMime);
+ INFO_PRINTF2(_L("Content MIME Type: %S"), mime);
+ CleanupStack::PopAndDestroy(mime);
+
+ if(aContentMime.CompareF(aExpectedContentMime) == 0)
+ {
+ SetTestStepResult(EPass);
+ }
+ else
+ {
+ ERR_PRINTF1(_L("Content MIME Type doesn't match expected"));
+ SetTestStepResult(EFail);
+ }
+
+ }
+
+
+TVerdict CCafClientOutputSupplierStep::doTestStepL()
+ {
+ SetTestStepResult(EInconclusive);
+
+ RFs fs;
+ RFile file;
+ TBuf8 <128> readBuffer;
+ TBuf8 <255> mimetype8;
+ TFileName outputFileName;
+ RFile outputFile;
+ CImportFile *import = NULL;
+
+ // first output file will be a.txt
+ _LIT(KOutputFileName, "C:\\something.drm");
+ outputFileName.Copy(KOutputFileName);
+
+ INFO_PRINTF1(_L("Supplier Test - Client provides output files"));
+
+ TPtrC outputDirectory, sourceFileName, suggestedFileName, mimeType, expectedContentMime;
+ TInt expectedLeave;
+ TBool checkContentMime = EFalse;
+ TBuf8<KMaxDataTypeLength> contentMimeType;
+
+ // Get parameters from INI file
+ GetStringFromConfig(ConfigSection(),_L("OutputPath"),outputDirectory);
+ GetStringFromConfig(ConfigSection(),_L("SourceFileName"),sourceFileName);
+ GetStringFromConfig(ConfigSection(),_L("SuggestedFileName"),suggestedFileName);
+ GetStringFromConfig(ConfigSection(),_L("MimeType"),mimeType);
+ GetIntFromConfig(ConfigSection(),_L("LeaveResult"),expectedLeave);
+ GetStringFromConfig(ConfigSection(),_L("ExpectedContentMime"),expectedContentMime);
+ GetBoolFromConfig(ConfigSection(),_L("CheckContentMime"),checkContentMime);
+
+
+ StartApparcServerL();
+
+ __UHEAP_MARK;
+
+ mimetype8.Copy(mimeType);
+
+ // fill in meta data - just the mime type really
+ CMetaDataArray *array = CMetaDataArray::NewL();
+ CleanupStack::PushL(array);
+ _LIT8(KContentType,"content-type");
+ array->AddL(KContentType(), mimetype8);
+
+ // create a supplier session
+ CSupplier *mySupplier = CSupplier::NewL();
+ CleanupStack::PushL(mySupplier);
+
+ // check import is supported, ignore return value, just exercises code for CCover
+ mySupplier->IsImportSupported(array->SearchL(KContentType()));
+
+ // create import session
+ TRAPD(leaveResult, import = mySupplier->ImportFileL(mimetype8, *array));
+ if(leaveResult != expectedLeave)
+ {
+ SetTestStepResult(EFail);
+ }
+ if(leaveResult == KErrNone)
+ {
+ CleanupStack::PushL(import);
+
+ // read the input file and pass it to the CAF
+ fs.Connect();
+ CleanupClosePushL(fs);
+ TInt result = file.Open(fs, sourceFileName, EFileRead | EFileStream | EFileShareAny);
+ CleanupClosePushL(file);
+
+ TParsePtrC parse(suggestedFileName);
+ TPtrC desiredOutFileName( parse.Name() );
+
+ while(result == KErrNone)
+ {
+ result = file.Read(readBuffer);
+ if(readBuffer.Length() == 0)
+ break;
+ result = import->WriteData(readBuffer);
+ while(result == KErrCANewFileHandleRequired)
+ {
+
+ if(checkContentMime)
+ {
+
+ //If CheckContentMimeL failed, Client code should assume content MIME type wouldn't
+ //be available until after the supply session has finished. The imported data could be
+ //output to default location
+ //In this test step, data are always output to default location regardless of content MIME
+ //type
+ TBuf8<KMaxDataTypeLength> expectedContentMime8bit;
+ expectedContentMime8bit.Copy(expectedContentMime);
+ CheckContentMimeL(import, contentMimeType, expectedContentMime8bit);
+ //no more check needed in following iterations
+ checkContentMime = EFalse;
+
+ //At this point client should decide where to save the file based on content mime
+
+ }
+
+ const TInt KMaxExtLen = 28;
+ TBuf<KMaxExtLen> suggestedExt;
+ User::LeaveIfError(import->GetSuggestedOutputFileExtension(suggestedExt));
+ outputFileName.Copy(outputDirectory);
+ outputFileName.Append(desiredOutFileName);
+ outputFileName.Append(suggestedExt);
+ // create a new outputfile
+ fs.Delete(outputFileName);
+ User::LeaveIfError(outputFile.Create(fs,outputFileName, EFileShareAny | EFileStream | EFileWrite));
+ result = import->ContinueWithNewOutputFile(outputFile,outputFileName);
+ outputFile.Close();
+ }
+ User::LeaveIfError(result);
+ }
+ CleanupStack::PopAndDestroy(&file);
+ result = import->WriteDataComplete();
+ while(result == KErrCANewFileHandleRequired)
+ {
+ TFileName suggestedName;
+ User::LeaveIfError(import->GetSuggestedOutputFileName(suggestedName));
+ outputFileName.Copy(outputDirectory);
+ outputFileName.Append(suggestedName);
+
+ // create a new outputfile
+ fs.Delete(outputFileName);
+ User::LeaveIfError(outputFile.Create(fs,outputFileName, EFileShareAny | EFileStream | EFileWrite));
+ result = import->ContinueWithNewOutputFile(outputFile,outputFileName);
+ outputFile.Close();
+ }
+
+
+ TInt n = import->OutputFileCountL();
+ for(TInt i = 0; i < n; i++)
+ {
+ // get output file name
+ TPtrC OutputFileName = import->OutputFileL(i).FileName();
+ INFO_PRINTF2(_L("Output File Created: %S"),&OutputFileName);
+
+ // get output file type (content or receipt)
+ TOutputType outputType = import->OutputFileL(i).OutputType();
+
+ if(outputType == EReceipt)
+ {
+ INFO_PRINTF1(_L("Output File is a receipt"));
+ }
+ else
+ {
+ INFO_PRINTF1(_L("Output File is content"));
+ }
+
+ // get output file mime type
+ TPtrC8 OutputMimeType = import->OutputFileL(i).MimeTypeL();
+ HBufC *mime = ConvertDes8toHBufC16LC(OutputMimeType );
+ INFO_PRINTF2(_L("Output File Mime Type: %S"),mime);
+ CleanupStack::PopAndDestroy(mime);
+ }
+ CleanupStack::PopAndDestroy(&fs);
+ CleanupStack::PopAndDestroy(import);
+ }
+ CleanupStack::PopAndDestroy(mySupplier);
+ CleanupStack::PopAndDestroy(array);
+ __UHEAP_MARKEND;
+
+ if (TestStepResult() != EFail)
+ {
+ SetTestStepResult(EPass);
+ }
+
+ return TestStepResult();
+ }
+
+
+/*
+ * This step tests the ExternalizeL() and InternalizeL() functions for
+ * CCafMimeHeader
+ */
+CCAFSupplierSerializeStep::~CCAFSupplierSerializeStep()
+ {
+ }
+
+CCAFSupplierSerializeStep::CCAFSupplierSerializeStep(CCAFServer& aParent) : iParent(aParent)
+ {
+ SetTestStepName(KCAFSupplierSerializeStep);
+ }
+
+
+TVerdict CCAFSupplierSerializeStep::doTestStepL()
+ {
+ _LIT8(KDrmMime,"application/testagent.drm");
+ _LIT8(KBinaryEncoding,"Binary");
+ _LIT8(KOmaRightsPending, "X-Oma-Drm-Separate-Delivery");
+ _LIT8(KOmaRightsPendingValue, "12");
+
+ SetTestStepResult(EInconclusive); // Default result to EInconclusive
+
+ __UHEAP_MARK;
+
+ // create a CafMimeHeader with "content type:" application/testagent.drm
+ CCafMimeHeader *header = CCafMimeHeader::NewL(KDrmMime());
+ CleanupStack::PushL(header);
+
+ // Add some information to the header
+ header->SetStandardMimeDataL(EContentTransferEncoding, KBinaryEncoding());
+ header->AddNonStandardMimeL(KOmaRightsPending(), KOmaRightsPendingValue());
+
+ // Create a buffer stream
+ CBufFlat* buf = CBufFlat::NewL(50);
+ CleanupStack::PushL(buf);
+ RBufWriteStream stream(*buf);
+ CleanupClosePushL(stream);
+
+ // call the stream function
+ stream << *header;
+ CleanupStack::PopAndDestroy(&stream);
+
+ // Now, create an HBufC8 from the stream buf's length, and copy
+ // the stream buffer into this descriptor
+ HBufC8* des = HBufC8::NewL(buf->Size());
+ TPtr8 ptr(des->Des());
+ buf->Read(0, ptr, buf->Size());
+
+ // destroy the buffer
+ CleanupStack::PopAndDestroy(buf);
+ CleanupStack::PushL(des);
+
+ // Now, stream a new CCafMimeHeader from the descriptor
+ CCafMimeHeader* newHeader = CCafMimeHeader::NewL(KNullDesC8());
+ CleanupStack::PushL(newHeader);
+ RDesReadStream readstream(*des);
+ CleanupClosePushL(readstream);
+ readstream >> *newHeader;
+ CleanupStack::PopAndDestroy(&readstream);
+
+ // Now check that the new bitset equals the old one
+ TInt result = newHeader->StandardMimeData(EContentType).Compare(KDrmMime());
+ if (result != 0)
+ {
+ INFO_PRINTF1(_L("Content type was not copied properly during seriaization"));
+ SetTestStepResult(EFail);
+ }
+ result = newHeader->StandardMimeData(EContentTransferEncoding).Compare(KBinaryEncoding());
+ if (result != 0)
+ {
+ INFO_PRINTF1(_L("Content Length was not copied properly during seriaization"));
+ SetTestStepResult(EFail);
+ }
+
+ if (newHeader->NonStandardMimeCount() != 1)
+ {
+ INFO_PRINTF1(_L("Non standard field array not copied properly during seriaization"));
+ SetTestStepResult(EFail);
+ }
+
+ result = newHeader->NonStandardMimeField(0).Compare(KOmaRightsPending());
+ if (result != 0)
+ {
+ INFO_PRINTF1(_L("Non standard field not copied properly during seriaization"));
+ SetTestStepResult(EFail);
+ }
+
+ result = newHeader->NonStandardMimeData(0).Compare(KOmaRightsPendingValue());
+ if (result != 0)
+ {
+ INFO_PRINTF1(_L("Non standard field data was not copied properly during seriaization"));
+ SetTestStepResult(EFail);
+ }
+
+ CleanupStack::PopAndDestroy(3, header);
+
+ __UHEAP_MARKEND;
+
+ if (TestStepResult() != EFail)
+ {
+ SetTestStepResult(EPass);
+ }
+
+ return TestStepResult();
+ }
+
+#ifndef SYMBIAN_DISABLE_UPWARD_DEPENDENCY
+
+/*
+ * Check that applications can retrieve the HTTP request headers
+ */
+CCAFHTTPRequestHeadersStep::~CCAFHTTPRequestHeadersStep()
+ {
+ }
+
+CCAFHTTPRequestHeadersStep::CCAFHTTPRequestHeadersStep(CCAFServer& aParent) : iParent(aParent)
+ {
+ SetTestStepName(KCAFHTTPRequestHeadersStep);
+ }
+
+
+void CCAFHTTPRequestHeadersStep::MHFRunL(RHTTPTransaction, const THTTPEvent&)
+ {
+
+ }
+
+TInt CCAFHTTPRequestHeadersStep::MHFRunError(TInt, RHTTPTransaction, const THTTPEvent&)
+ {
+ return 0;
+ }
+
+
+TVerdict CCAFHTTPRequestHeadersStep::doTestStepL()
+ {
+ _LIT8(Kuri, "http://www.symbian.com/");
+ TPtrC8 acceptHeader;
+ TInt i = 0;
+ TInt result = 0;
+
+ SetTestStepResult(EInconclusive); // Default result to EInconclusive
+ THTTPHdrVal aValue;
+
+ __UHEAP_MARK;
+
+ CSupplier* supplier = CSupplier::NewLC();
+
+ // Create an HTTP session
+ RHTTPSession session;
+ session.OpenL();
+ RStringPool pool = session.StringPool();
+
+
+ // Convert the URI string into a TUri8
+ TUriParser8 parser;
+ parser.Parse(Kuri());
+
+ // create an HTTP transaction
+ RHTTPTransaction transaction = session.OpenTransactionL(parser, *this, pool.StringF(HTTP::EGET,RHTTPSession::GetTable()));
+ RHTTPHeaders hdr = transaction.Request().GetHeaderCollection();
+
+ // Get the request headers from the agent
+ supplier->PrepareHTTPRequestHeaders(pool, hdr);
+
+ TInt fieldParts = hdr.FieldPartsL(pool.StringF(HTTP::EAccept, RHTTPSession::GetTable()));
+ if(fieldParts == 3)
+ {
+ for(i = 0; i < fieldParts; i++)
+ {
+ // loop over all accept headers make sure we find the three we expect
+ User::LeaveIfError(hdr.GetField(pool.StringF(HTTP::EAccept, RHTTPSession::GetTable()), i, aValue));
+
+ RStringF header = (RStringF) aValue;
+ acceptHeader.Set(header.DesC());
+
+ // Reference Test Agent - content MIME type
+ if(acceptHeader.Compare(_L8("application/x-rta.drm.content")) == 0)
+ {
+ result |= 1;
+ }
+ // Reference Test Agent - content + rights MIME type
+ else if(acceptHeader.Compare(_L8("application/x-rta.drm.contentrights")) == 0)
+ {
+ result |= 2;
+ }
+ // Test Agent - MIME type
+ else if(acceptHeader.Compare(_L8("APPLICATION/TESTAGENT.DRM")) == 0)
+ {
+ result |= 4;
+ }
+ }
+ if(result != 7)
+ {
+ // not all three headers were found
+ INFO_PRINTF1(_L("Not all expected HTTP Accept headers were present"));
+ SetTestStepResult(EFail);
+ }
+ }
+ else
+ {
+ // We were expecting three accept headers to be set
+ // two from the Reference Test Agent and one from Test Agent
+ INFO_PRINTF2(_L("ERROR: Only %d HTTP Accept headers were returned, expected 3"), fieldParts);
+ SetTestStepResult(EFail);
+ }
+
+ transaction.Close();
+ session.Close();
+ CleanupStack::PopAndDestroy(supplier);
+ __UHEAP_MARKEND;
+
+ if (TestStepResult() != EFail)
+ {
+ SetTestStepResult(EPass);
+ }
+
+ return TestStepResult();
+ }
+
+#endif
+
+