lowlevellibsandfws/pluginfw/TestExecute/EComSWITests/src/checkPlugin.cpp
author hgs
Tue, 20 Jul 2010 16:35:53 +0530
changeset 44 97b0fb8a2cc2
parent 0 e4d67989cc36
permissions -rw-r--r--
201025

// Copyright (c) 2006-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:
// This File Provides implementations of CCheckListImplementation, which Checks the plugin for availble implementation
// and CCheckCreateImplementation, which uses the method provided the ECom Plugin.
// 
//

/**
 @file
*/

#include <ecom/resolver.h>
#include "checkPlugin.h"


CCheckListImplementation::~CCheckListImplementation()
	{
	}


CCheckListImplementation::CCheckListImplementation(TOperationType aOperationType)
	: iOperationType(aOperationType)
	{
    SetTestStepName(KListImplUidStep);
	}
	
	
	
TVerdict CCheckListImplementation::doTestStepPreambleL()
    {
    SetTestStepResult(EPass);
    // get step parameters
	
    TInt tempInterfaceuid=0;
 
    if (!GetHexFromConfig(ConfigSection(), KInterfaceUID, tempInterfaceuid))
		{
		INFO_PRINTF1(HTML_RED);
        ERR_PRINTF1(_L("FAIL: Missing Interface UID"));
        INFO_PRINTF1(HTML_RED_OFF);
        SetTestStepResult(EFail);
        return TestStepResult();
		}    
		
	 iInterfaceUid.iUid = tempInterfaceuid;
	  
    return TestStepResult();
	}
    
    
    
TVerdict CCheckListImplementation::doTestStepL()
    {
 	__UHEAP_MARK; 
  	
  	//First find out if the Check Plugin step is supposed to be successful.
  	TInt testStepOutcome=KErrNone;
  	TInt err = GetIntFromConfig(ConfigSection(), KExpectedErrorCheckPlugin, testStepOutcome);
  	if(err !=1) testStepOutcome=KErrNone;

	
	// and leaking thread handles
	TInt startProcessHandleCount;
	TInt startThreadHandleCount;
	TInt endProcessHandleCount;
	TInt endThreadHandleCount;
	
	RThread thisThread;
	thisThread.HandleCount(startProcessHandleCount, startThreadHandleCount);

   
    switch (iOperationType)
        {
        case EUseListImplUid:
          	{
          	        	
	        REComSession::ListImplementationsL(iInterfaceUid, iImplyArrayPtr);
          	
          	TInt eImplCount(0);   
    		iImplCount = iImplyArrayPtr.Count();

	    	if(!GetIntFromConfig(ConfigSection(), KExpectedCount, eImplCount))
          		{
          		INFO_PRINTF1(HTML_RED);
		        ERR_PRINTF1(_L("FAIL: Missing Implementation Count in the INI File"));
		        INFO_PRINTF1(HTML_RED_OFF);
		        SetTestStepResult(EFail);
		        return TestStepResult();
               	}

          	if(eImplCount != iImplCount)
          		{
          		INFO_PRINTF1(HTML_RED);
		       	ERR_PRINTF3( _L("The number Implemenation(s) in this ECom plugin do not match, expected %d implementation(s), got %d implementation(s)."), eImplCount, iImplCount );
        		INFO_PRINTF1(HTML_RED_OFF);
		        SetTestStepResult(EFail);
		        return TestStepResult();
          		}

          	//Ensuring that the ECom Plugin does have Implementations
	   		if( iImplCount > 0 && testStepOutcome == KErrNone)
	          	{
	          	TInt arrayIndex(0);
	          	//Checking Implementation UID
         		TUid eImplUid = KNullUid;
		        TInt tempImplUid(0);
		        
		        if (!GetHexFromConfig(ConfigSection(), KImplUID, tempImplUid))
					{
					INFO_PRINTF1(HTML_RED);
		        	ERR_PRINTF1(_L("FAIL: Missing Implementtaion UID"));
		        	INFO_PRINTF1(HTML_RED_OFF);
		        	SetTestStepResult(EFail);
		        	return TestStepResult();
					}
						
				eImplUid.iUid = tempImplUid;
				
	          	TBool foundImplementationUid(EFalse);
		          			          	
		        for(TInt i = 0; (i < iImplCount)  && !(foundImplementationUid); i++)
		        	{
		          	iImplUid = iImplyArrayPtr[i]->ImplementationUid();
		          		
		          	if(eImplUid == iImplUid)
		          		{
		          		foundImplementationUid = ETrue;
		          		arrayIndex = i;
		          		}
	       			}
		          	
	          	if(eImplUid != iImplUid)
	          		{
	          		INFO_PRINTF1(HTML_RED);
			       	ERR_PRINTF3( _L("The Implemenation UID  in this ECom plugin do not match, expected  %d Implementation UID  , got %d iImplementation UID."), eImplUid, iImplUid );
	        		INFO_PRINTF1(HTML_RED_OFF);
			        SetTestStepResult(EFail);
			        return TestStepResult();
	          		}
		  		
		  		//Checking Implementation's Version Numbers
	          	TInt eVersion(0);
	          		          	
		        if (!GetIntFromConfig(ConfigSection(), KExpectedVersion, eVersion))
		           	{
		         	INFO_PRINTF1(HTML_RED);
				    ERR_PRINTF1(_L("FAIL: Missing Version Number in the INI File"));
				    INFO_PRINTF1(HTML_RED_OFF);
				    SetTestStepResult(EFail);
				    return TestStepResult();
		            }
		            
				iVersion = iImplyArrayPtr[arrayIndex]->Version();
		            
		     	if(eVersion != iVersion)
		         	{
		          	INFO_PRINTF1(HTML_RED);
				   	ERR_PRINTF3( _L("The ECom plugin's implementation versions  do not match, expected %d version, got %d version."), eVersion, iVersion );
		        	INFO_PRINTF1(HTML_RED_OFF);
				    SetTestStepResult(EFail);
				    return TestStepResult();
		          	}
		          	
		          	
		        //Checking Implementation's Drive Letter
		        TDriveUnit eDrive;
		        TPtrC tempDrive;
		        
	        	iDrive = iImplyArrayPtr[arrayIndex]->Drive();
		         
		    	if (!GetStringFromConfig(ConfigSection(), KExpectedDrive, tempDrive))
		           	{
		         	INFO_PRINTF1(HTML_RED);
				    ERR_PRINTF1(_L("FAIL: Missing Plugin Drive Letter in the INI File"));
				    INFO_PRINTF1(HTML_RED_OFF);
				    SetTestStepResult(EFail);
				    return TestStepResult();
		        	}
		          	
		        eDrive = tempDrive;
		        		        
		     	if(eDrive!= iDrive)
		        	{
		        	TPtrC eDrv(eDrive.Name());
			        TPtrC iDrv(iDrive.Name());
		        	INFO_PRINTF1(HTML_RED);
				   	ERR_PRINTF3( _L("The ECom plugin's drive letters do not match, expected %S drive, got %S drive."), &eDrv, &iDrv);
				   	INFO_PRINTF1(HTML_RED_OFF);
				    SetTestStepResult(EFail);
				    return TestStepResult();
		        	}
		          	
		        //Checking Implementation's Vendor ID
		        TInt tempVendorID(0);
		        TUid eVendorID = KNullUid; 
								
		        iVendorID = iImplyArrayPtr[arrayIndex]->VendorId();
				  	    		
	    		if (!GetHexFromConfig(ConfigSection(), KExpectedVendorID, tempVendorID))
	    			{
					INFO_PRINTF1(HTML_RED);
			        ERR_PRINTF1(_L("FAIL: Missing vendor UID In the INI File"));
			        INFO_PRINTF1(HTML_RED_OFF);
			        SetTestStepResult(EFail);
			        return TestStepResult();
					}    
		    		
		    	eVendorID.iUid = tempVendorID;
		    		
		    		if(eVendorID != iVendorID)
		          		{
		          		INFO_PRINTF1(HTML_RED);
				       	ERR_PRINTF3( _L("The ECom Vendor IDs do not match, expected %d VID, got %d VID."), eVendorID, iVendorID );
		        		INFO_PRINTF1(HTML_RED_OFF);
				        SetTestStepResult(EFail);
				        return TestStepResult();
		          		}
		          
	          	}
	          		
	          else
	          	{
	          	INFO_PRINTF1(HTML_RED);
	          	INFO_PRINTF2(_L("This is a Negative test whose expected outcome is %d "), testStepOutcome);
	          	INFO_PRINTF1(HTML_RED_OFF);         	
	          	}
          	
           	}
     
        }
    
   	//Reseting The ECOM Array
   	iImplyArrayPtr.ResetAndDestroy();     
   	
   	//Closing session with ECom Server
    REComSession::FinalClose();
    
   	thisThread.HandleCount(endProcessHandleCount, endThreadHandleCount);
 
 	if(startThreadHandleCount != endThreadHandleCount)
 		{
 		INFO_PRINTF1(HTML_RED);
		ERR_PRINTF1( _L("There is a memory leak as the number of thread handles open at the start do not equal the number of handles opened at the end."));
        ERR_PRINTF3(_L("At the start there %d handles open and the end there are %d"), startThreadHandleCount, endThreadHandleCount);
        INFO_PRINTF1(HTML_RED_OFF);
		SetTestStepResult(EFail);
		return TestStepResult();
 		}
 
    thisThread.Close();
    __UHEAP_MARKEND;    
	
	return TestStepResult();
	}
    




TVerdict CCheckListImplementation::doTestStepPostambleL()
	{
	 return TestStepResult();
	}




CCheckCreateImplementation::CCheckCreateImplementation(TOperationType aOperationType)
	: iOperationType(aOperationType)
	{
    SetTestStepName(KCreateImpl_ImpId_DtorId_Step);
	}

TVerdict CCheckCreateImplementation::doTestStepPreambleL()
    {
    SetTestStepResult(EPass);
   
   TInt tempImplUid=0;
   
    if (!GetHexFromConfig(ConfigSection(), KImplUID, tempImplUid))
		{
		INFO_PRINTF1(HTML_RED);
        ERR_PRINTF1(_L("FAIL: Missing Implementation UID"));
        INFO_PRINTF1(HTML_RED_OFF);
        SetTestStepResult(EFail);
        return TestStepResult();
		}    
		
	iImplUid.iUid = tempImplUid;

    return TestStepResult();
	}


TVerdict CCheckCreateImplementation::doTestStepL()
 	{
 	__UHEAP_MARK; 
	
	
	// Check for Memory leaks and also leaking thread handles
	TInt startProcessHandleCount;
	TInt startThreadHandleCount;
	TInt endProcessHandleCount;
	TInt endThreadHandleCount;
	
	RThread thisThread;
	thisThread.HandleCount(startProcessHandleCount, startThreadHandleCount);

		
	TInt eInt(0);
	
	CEComSwiPluginInterfaceDefiniton* iPluginPtr = CEComSwiPluginInterfaceDefiniton::NewL(iImplUid);
	
	iPluginPtr->ReturnInt(iInt);
	
	
	 if (!GetIntFromConfig(ConfigSection(), KExpectedPluginInt, eInt))
       	{
     	INFO_PRINTF1(HTML_RED);
	    ERR_PRINTF1(_L("FAIL: Missing ReturnInt value Number in the INI File"));
	    INFO_PRINTF1(HTML_RED_OFF);
	    SetTestStepResult(EFail);
	    return TestStepResult();
        }
        
        
      if(eInt != iInt)
  		{
  		INFO_PRINTF1(HTML_RED);
       	ERR_PRINTF3(_L("The values returned from the Plugins ReturnInt() do not match, expected Int Value %d, got %d."), eInt, iInt);
		INFO_PRINTF1(HTML_RED_OFF);
        SetTestStepResult(EFail);
        return TestStepResult();
  		}

  	delete iPluginPtr;		

    REComSession::FinalClose();   

	thisThread.HandleCount(endProcessHandleCount, endThreadHandleCount);
 
 	if(startThreadHandleCount != endThreadHandleCount)
 		{
 		INFO_PRINTF1(HTML_RED);
		ERR_PRINTF1( _L("There is a memory leak as the number of thread handles open at the start do not equal the number of handles opened at the end."));
        ERR_PRINTF3(_L("At the start there %d handles open and the end there are %d"), startThreadHandleCount, endThreadHandleCount);
        INFO_PRINTF1(HTML_RED_OFF);
		SetTestStepResult(EFail);
		return TestStepResult();
 		}
 
    thisThread.Close();

    __UHEAP_MARKEND;    
	
	return TestStepResult();
	}



TVerdict CCheckCreateImplementation::doTestStepPostambleL()
	{
	 return TestStepResult();
	}

CCheckCreateImplementation::~CCheckCreateImplementation()
	{
	}

/** Test step to issue a custom resolver list request so that
the resolver is cached. */

// constructor
CUseCustomResolver::CUseCustomResolver()
	{
    SetTestStepName(KUseCustomResolverStep);
	}

// destructor
CUseCustomResolver::~CUseCustomResolver()
	{
	}

// doTestStepL
TVerdict CUseCustomResolver::doTestStepL()
	{
	TUid resolverUid = KNullUid;
	TInt tempImplUid(0);
	TESTL(GetHexFromConfig(ConfigSection(), KImplUID, tempImplUid));

	resolverUid.iUid = tempImplUid;
	TEComResolverParams resolverparams;
	_LIT8(KDummyData,"dummy");
	resolverparams.SetDataType(KDummyData);
	RImplInfoPtrArray ifArray;
	TRAPD(err, REComSession::ListImplementationsL(KCustomResolverInterfaceUid,
		resolverparams, resolverUid, ifArray) );
	if (err != KErrNone)
		{
		// In particular looking for KEComErrMismatchedTags
        INFO_PRINTF1(HTML_RED);
		ERR_PRINTF2( _L("Custom Resolver list request failed with %d"), err);
        INFO_PRINTF1(HTML_RED_OFF);
		SetTestStepResult(EFail);
		return EFail;
		}

	_LIT(KExpectedVersion, "expectedversion");
	TInt expectedVersion;
  	if (GetIntFromConfig(ConfigSection(), KExpectedVersion, expectedVersion))
		{
		for (TInt i = 0; i < ifArray.Count(); i++)
			{
			const CImplementationInformation& impl = *ifArray[i];
			if (impl.ImplementationUid() == resolverUid)
				{
				if (impl.Version() !=  expectedVersion)
					{
					INFO_PRINTF1(HTML_RED);
					ERR_PRINTF3( _L("Expecting ver %d, got %d"), expectedVersion, impl.Version());
					INFO_PRINTF1(HTML_RED_OFF);
					SetTestStepResult(EFail);
					}
				break;
				}
			}
		}
	ifArray.ResetAndDestroy();
    REComSession::FinalClose();
	return TestStepResult();
	}