installationservices/swi/test/tdataprovider/tdataproviderstep.cpp
changeset 0 ba25891c3a9e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/tdataprovider/tdataproviderstep.cpp	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,354 @@
+/*
+* Copyright (c) 2005-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: 
+* This file contains the various test-cases for testing  CCafSisDataProvider, CDesDataProvider and CFileSisDataProvider class.
+*
+*/
+
+
+/**
+ @file tdataproviderstep.cpp
+ @internalTechnology
+*/
+
+#include <e32std.h>
+#include <e32base.h>
+#include <f32file.h>
+#include "tdataproviderstep.h"
+#include <e32def.h> 
+#include <utf.h>
+#include "sisinstallerrors.h"
+
+
+using namespace Swi;
+
+
+CDataProviderStep::~CDataProviderStep()
+	{
+	}
+
+CDataProviderStep::CDataProviderStep()
+	{
+	}
+
+TVerdict CDataProviderStep::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("DataProviderStep Read Test Step Preamble"));
+	SetTestStepResult(EPass);
+
+	return TestStepResult();
+	}
+
+/**
+Description: Creates the dataprovider object at runtime and does the operations
+exported by the dataprovider classes.  
+@return:TVerdict - returns EFail if there is a failure else EPass
+@internalTechnology:
+@test:
+*/
+TVerdict CDataProviderStep::doTestStepL()
+	{
+
+	//Get the data provider type from the ini file
+	__UHEAP_MARK;
+	SetTestStepResult(EFail);
+
+	TInt providerType;
+	if(!GetIntFromConfig(ConfigSection(),_L("DataProviderType"),providerType))
+		{
+		ERR_PRINTF1(_L("DataProviderType not available in the ini file"));
+		return TestStepResult();
+		}
+
+	TPtrC data;
+	if(!GetStringFromConfig(ConfigSection(),_L("Data"),data))
+		{
+		ERR_PRINTF1(_L("DataProviderType not available in the ini file"));
+		return TestStepResult();
+		}
+	
+	TInt opType;	
+	if(!GetIntFromConfig(ConfigSection(),_L("Operation"),opType))
+		{
+		ERR_PRINTF1(_L("Operation Type not available in the ini file"));
+		return TestStepResult();
+		}
+		
+
+	MSisDataProvider *sisDataProvider = NULL ;
+	RFs fsSession;
+	User::LeaveIfError(fsSession.Connect());
+	CleanupClosePushL(fsSession); 
+	switch(providerType)
+		{	
+		case EDesSisDataProvider:
+			{
+			HBufC8 *inData  = HBufC8::NewLC(data.Length());
+			inData->Des().Copy(data);
+			//creates the DesSisdataprovider obj
+			sisDataProvider = CDesDataProvider::NewL(*inData);
+			DoReadL(sisDataProvider, opType ); 
+			CleanupStack::PopAndDestroy();
+			break;
+			}
+		case EFileSisDataProvider:
+			{
+			TInt inputDataType;
+			if(!GetIntFromConfig(ConfigSection(),_L("inputdatatype"),inputDataType))
+				{
+				ERR_PRINTF1(_L("Input Data type value not available in the ini file"));
+				return TestStepResult();
+				}
+			switch(inputDataType)
+				{
+				case EFilename:
+					{
+					//creates the FileSisDataProvider object
+					sisDataProvider = CFileSisDataProvider::NewL(fsSession,data);
+					DoReadL(sisDataProvider, opType ); 
+					break;
+					}
+				case EFileHandle:
+					{			
+					RFile file;
+	    				User::LeaveIfError(file.Open(fsSession,data, EFileRead | EFileStream | EFileShareReadersOnly));
+	    				CleanupClosePushL(file);
+	    				//creates the FileSisDataProvider object
+	    				sisDataProvider = CFileSisDataProvider::NewL(file);
+	    	    			DoReadL(sisDataProvider, opType ); 
+	    				CleanupStack::PopAndDestroy();		
+					break;
+					}				
+				default:
+					{
+						ERR_PRINTF1(_L("Unknown Step type"));
+						break;
+					}				
+				}				
+			break;
+			}
+		case ECafSisDataProvider:
+			{
+			TInt inputStepType;
+			if(!GetIntFromConfig(ConfigSection(),_L("inputsteptype"),inputStepType))
+				{
+				ERR_PRINTF1(_L("Input Step type value not available in the ini file"));
+				return TestStepResult();
+				}
+			switch(inputStepType)
+				{
+				case EReadStep:
+					{
+					HBufC8 *inData  = HBufC8::NewLC(data.Length());
+					inData->Des().Copy(data);
+					TPtr8 pData(inData->Des());
+					//creates the CafSisDataProvider object
+					sisDataProvider = CCafSisDataProvider::NewL(data);
+					sisDataProvider->Read(pData);
+					SetTestStepResult(EPass);
+					CleanupStack::PopAndDestroy();
+					break;
+					}
+				case EOpenStep:
+					{			
+					TInt err;
+					//creates the CafSisDataProvider object
+					sisDataProvider = CCafSisDataProvider::NewL(data);
+					sisDataProvider->OpenDrmContentL(ContentAccess::EUnknown);
+					TRAP(err,sisDataProvider->OpenDrmContentL(ContentAccess::EUnknown)); 
+					if(err == KErrNone)
+						{
+						SetTestStepResult(EPass);
+						}
+					break;
+					}
+				case ESeekStep:
+					{
+					//creates the CafSisDataProvider object
+					sisDataProvider = CCafSisDataProvider::NewL(data);
+					sisDataProvider->OpenDrmContentL(ContentAccess::EUnknown);
+					DoReadL(sisDataProvider,opType);
+					}
+				default:
+					{
+					ERR_PRINTF1(_L("Unknown Data type"));
+					break;
+					}
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF1(_L("Unknown Provider type"));
+			break;
+			}
+		}
+	if(sisDataProvider)
+		{
+		delete sisDataProvider ;
+		}
+	CleanupStack::PopAndDestroy();
+	__UHEAP_MARKEND;
+	return TestStepResult();
+	}
+
+
+/**
+Description: Generic testing function for all three dataprovider types,exported by the dataprovider classes.  
+@return:TVerdict - returns EFail if there is a failure else EPass
+@internalTechnology:
+@test:
+*/
+void CDataProviderStep::DoReadL(MSisDataProvider *aSisDataProvider,	const TInt& aOpType ) 
+	{
+	TInt seek;
+	TPtrC pPosition;
+	TInt64 position = 0;
+	
+	SetTestStepResult(EFail);
+	
+	if(aOpType == EReadAndSeek || aOpType == EReadSpecificLength)	
+		{
+		if(!GetIntFromConfig(ConfigSection(),_L("seek"),seek))
+			{
+			ERR_PRINTF1(_L("Seek value not available in the ini file"));
+			return;
+			}
+		if(!GetStringFromConfig(ConfigSection(),_L("position"),pPosition))
+			{
+			ERR_PRINTF1(_L("Position value not available in the ini file"));
+			return;
+			}
+		else
+			{
+			TLex16 lex(pPosition);
+			lex.Val(position);
+			}					
+		}
+		
+	TInt length = 0;
+	if(aOpType == EReadSpecificLength)	
+		{
+		if(!GetIntFromConfig(ConfigSection(),_L("length"),length))
+			{
+			ERR_PRINTF1(_L("Length value not available in the ini file"));
+			return;
+			}		
+		}
+				
+	TInt bufSize = 0;
+	if(!GetIntFromConfig(ConfigSection(),_L("bufsize"),bufSize))
+		{
+		ERR_PRINTF1(_L("buf size not available in the ini file"));
+		return;
+		}	
+			
+	TPtrC expectedSisData;
+	if(!GetStringFromConfig(ConfigSection(),_L("expecteddata"),expectedSisData))
+		{
+		ERR_PRINTF1(_L("expecteddata not available in the ini file"));
+		return;
+		}
+
+	HBufC8 *outData  = HBufC8::NewLC(bufSize);
+	TPtr8 pdata(outData->Des());
+	pdata.SetLength(bufSize);
+	TInt err = 0;
+	switch(aOpType)
+		{
+		case EReadAndSeek:
+			{
+			//this case will carry on into EReadOnly case
+			TInt64 pos = (TInt64)position; 
+			err = aSisDataProvider->Seek(static_cast<TSeek>(seek),pos);
+			if (err !=  KErrNone )
+				{
+				ERR_PRINTF2(_L("Seek returns Error=%d"),err);
+				_LIT8(KERR , "%d");
+				pdata.Format(KERR() , err);
+				VerifyResult(pdata ,expectedSisData);
+				break;
+				}
+			}
+		case EReadOnly:
+			{
+			err = aSisDataProvider->Read(pdata);
+			if(err == KErrSISFieldBufferTooShort)
+				{
+				ERR_PRINTF1(_L("Seek returns  KErrSISFieldBufferTooShort"));
+				_LIT8(KERR , "%d");
+				pdata.Format(KERR() , err);
+				VerifyResult(pdata ,expectedSisData);
+				break;	
+				}
+			VerifyResult(pdata ,expectedSisData);
+			break;	
+			}
+		case EReadSpecificLength:
+			{
+			TInt64 pos = (TInt64)position; 
+			err = aSisDataProvider->Seek(static_cast<TSeek>(seek),pos);
+			if (err !=  KErrNone )
+				{
+				ERR_PRINTF2(_L("Seek returns Error=%d"),err);
+				_LIT8(KERR , "%d");
+				pdata.Format(KERR() , err);
+				VerifyResult(pdata ,expectedSisData);
+				break;
+				}
+			err = aSisDataProvider->Read(pdata , length);
+			if(err == KErrSISFieldBufferTooShort)
+				{
+				ERR_PRINTF1(_L("Seek returns  KErrSISFieldBufferTooShort"));
+				_LIT8(KERR , "%d");
+				pdata.Format(KERR() , err);
+				VerifyResult(pdata ,expectedSisData);
+				break;
+				}
+			VerifyResult(pdata ,expectedSisData);
+			break;	
+			}
+		default:
+			{
+			ERR_PRINTF1(_L("Unknown Operation type in the ini "));
+			SetTestStepResult(EFail);	
+			break;
+			}
+		}	
+		CleanupStack::PopAndDestroy();		
+	}
+
+TVerdict CDataProviderStep::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("DataProviderStep Read Test Step Postamble"));	
+	return TestStepResult();
+	}
+	
+void  CDataProviderStep::VerifyResult (const TPtr8& aData , const TPtrC16& aExpectedSisData)
+	{
+	TBuf16<KMAXBUF> temp ;	
+	temp.Copy(aData);
+	if( aExpectedSisData.Compare(temp) == 0)
+		{
+		INFO_PRINTF1(_L("Verify Result Passed"));	
+		SetTestStepResult(EPass);	
+		}
+	else
+		{
+		INFO_PRINTF1(_L("Verify Result failed"));	
+		SetTestStepResult(EFail);
+		}
+	}
+	
+