lowlevellibsandfws/pluginfw/TestExecute/EComSWITests/src/checkPlugin.cpp
changeset 0 e4d67989cc36
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lowlevellibsandfws/pluginfw/TestExecute/EComSWITests/src/checkPlugin.cpp	Tue Feb 02 02:01:42 2010 +0200
@@ -0,0 +1,442 @@
+// 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();
+	}