authenticationservices/authenticationserver/test/tAuthSvr/src/step_IdentifyMultiple.cpp
changeset 29 ece3df019add
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/step_IdentifyMultiple.cpp	Tue Nov 24 09:06:03 2009 +0200
@@ -0,0 +1,277 @@
+/*
+* 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: 
+* CTestStep derived implementation
+*
+*/
+
+ 
+#include "tAuthSvrStep.h"
+
+
+using namespace AuthServer;
+
+
+CTIdentifyMultiple::CTIdentifyMultiple()
+/**
+ * Constructor
+ */
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KTIdentifyMultiple);
+	}
+
+CTIdentifyMultiple::~CTIdentifyMultiple()
+/**
+ * Destructor
+ */
+	{
+	 TInt i = iPluginIds.Count();
+	  while (i)
+		{
+		 REComSession::DestroyedImplementation(iPluginIds[--i]);
+		}
+	}
+	
+TVerdict CTIdentifyMultiple::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+	{
+	SetTestStepResult(EPass);
+	
+	//Put in an initial value for the userResult (PIN) that will be used as input during the Identify() function
+	TPtrC userResultValue;
+	if(GetStringFromConfig(ConfigSection(),_L("userResult"), userResultValue) != EFalse) // the tag 'userResult ' was present
+		{
+		TDriveUnit sysDrive (RFs::GetSystemDrive());
+		TBuf<128> authSvrPolicyFile (sysDrive.Name());
+		authSvrPolicyFile.Append(KAuthSvrPolicyFile);
+		
+		CIniData* policyFile=NULL;
+		policyFile=CIniData::NewL(authSvrPolicyFile);
+		CleanupStack::PushL(policyFile);
+		//Update AuthSvrPolicy.ini, section: SectionOne, value:EnteredPinValue
+		writeToNamedConfig(policyFile, _L("SectionOne"), _L("EnteredPinValue"), userResultValue);
+		policyFile->WriteToFileL();
+
+		CleanupStack::PopAndDestroy(policyFile);
+
+		}
+	return TestStepResult();
+	}
+	
+ 
+TVerdict CTIdentifyMultiple::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ * 
+ */
+	{	
+	//INFO_PRINTF1(_L("In IdentifyMultiple Step"));
+	SetTestStepResult(EPass);
+	
+	//If any test step leaves or panics, the test step thread exits and no further calls are made. 
+	if (TestStepResult() != EPass)
+		{
+		return TestStepResult();
+		}
+
+__UHEAP_MARK;		// Check for memory leaks
+
+	//-----------------------------------------------------------------------------------------------------
+	//Connect to the AuthServer
+	
+	
+	AuthServer::RAuthClient authClient1;
+	TInt connectVal = authClient1.Connect();
+	if (KErrNotFound == connectVal)
+		{
+		//Retry after a delay
+		TTimeIntervalMicroSeconds32 timeInterval = 2000;	//2 Milliseconds
+		User::After(timeInterval);
+		connectVal = authClient1.Connect();
+		}
+	if (KErrNone != connectVal)
+		{
+		ERR_PRINTF2(_L("Unable to start a session or other connection error. Err = %d"), connectVal);
+		User::LeaveIfError(connectVal);		
+		}	
+	CleanupClosePushL(authClient1);
+
+
+/*
+	//Call the Enumerate Identities API
+	TInt ret = KErrNone;
+	AuthServer::RIdentityIdArray idArray;	//Initialisation
+	TRAP(ret, authClient1.IdentitiesL(idArray));		// This will need to be updated if the function returns errors like KErrServerTerminated, etc 
+			
+	//Retrieve the expected information from the ini file
+	TInt expNumIdentities = 0;	
+	if(GetIntFromConfig(ConfigSection(),_L("NumIdentities"), expNumIdentities) != EFalse) // the tag 'NumIdentities' was present
+		{//Do the compare
+		if (idArray.Count() != expNumIdentities)
+			{
+			ERR_PRINTF2(_L("expNumIdentities differs from expected, Number of Identities = %d"), idArray.Count());			
+			SetTestStepResult(EFail);
+			}
+		}
+*/
+///*
+	//Run through the list of plugins and call the Identify function on each
+	//Get all implementations using  CAuthPluginInterface::ListImplementationsL()	
+	RImplInfoPtrArray infoArray;
+	// Note that a special cleanup function is required to reset and destroy
+	// all items in the array, and then close it.
+	TCleanupItem cleanup(CleanupEComArray, &infoArray);
+	CleanupStack::PushL(cleanup);
+	REComSession::ListImplementationsL(KCAuthPluginInterfaceUid, infoArray);
+	
+	TInt numPlugins = infoArray.Count();
+	INFO_PRINTF2(_L("Number of plugins: %d"), numPlugins);	
+	for (TInt i = 0;  i < numPlugins; i++)
+		{
+		//Retrieves default data for each
+		//TPtrC8 dataType = infoArray[i] ->DataType();
+		//TDesC displayName = infoArray[i] ->DisplayName();
+		
+		TInt data = HexString2Num(infoArray[i]->DataType());
+		INFO_PRINTF2(_L("Implementation Id: 0x%x"),infoArray[i]->ImplementationUid().iUid);
+		INFO_PRINTF2(_L("Display Name: %S"),&infoArray[i]->DisplayName());
+		INFO_PRINTF2(_L("Default Data: %x"),data);
+	    //INFO_PRINTF2(_L("Rom Only: %d"),impl[i]->RomOnly());
+		//INFO_PRINTF2(_L("Rom Based: %d"),impl[i]->RomBased());
+		   
+		//....
+		}	
+	// Clean up
+	CleanupStack::PopAndDestroy(&infoArray); //infoArray, results in a call to CleanupEComArray
+//*/
+
+	
+	//Read a cue from the ini file. A specific one in each section; the expected data is the same as the cue, so this minimizes
+	// the number of times the file is read
+	TInt fileCuePluginIdValue = 0;
+	TPluginId cuePluginIdValue = 0;
+	
+	//User::SetJustInTime(ETrue);
+		
+	if(GetHexFromConfig(ConfigSection(),_L("pluginId"), fileCuePluginIdValue) != EFalse) // the tag 'pluginId' was present
+		{
+		cuePluginIdValue = fileCuePluginIdValue;
+			
+		CAuthPluginInterface* plugin = 0;
+		TEComResolverParams resolverParams;
+		TBufC8<16> pluginIdTxt;
+			  
+		pluginIdTxt.Des().Format(_L8("%x"), cuePluginIdValue);
+			  
+		resolverParams.SetDataType(pluginIdTxt);
+			  
+		TAny* tempPlugin = 0; 
+		TUid Dtor_ID_Key = TUid::Null();
+		tempPlugin = 
+		REComSession::CreateImplementationL(KCAuthPluginInterfaceUid,
+		    							  	Dtor_ID_Key,
+											resolverParams,
+											KRomOnlyResolverUid);	
+		
+		plugin = reinterpret_cast<CAuthPluginInterface*>(tempPlugin);
+		CleanupStack::PushL(plugin);
+		iPluginIds.Append(Dtor_ID_Key);
+		//Call the identify function for this plugin
+		HBufC8* result1 = 0;
+
+		TRequestStatus reqStatus1 = KErrNone;
+		TIdentityId userId = 0;
+		
+		plugin->Identify(userId, KNullDesC(), result1, reqStatus1);
+		CleanupStack::PushL(result1);
+		
+		//if (reqStatus1.Int() == CAuthPluginInterface::KIdSuccess)
+		if (reqStatus1.Int() == KErrNone)
+			{
+			//Check that this is what was expected		
+			TBuf8<32> cueValue;		
+			_LIT8(KFormatValue2, "%x");
+			cueValue.Format(KFormatValue2, cuePluginIdValue);		
+			
+			TInt userIdValue = 0;
+			//Check to see if there was a value in the testExecute 'ini' file to compare with						
+			if(GetHexFromConfig(ConfigSection(),_L("userId"), userIdValue) != EFalse) // the tag 'userId' was present
+				{	
+				if(userId != userIdValue)
+					{
+					ERR_PRINTF3(_L("Id value returned differs from expected, Returned userId value= %d, Expected Id value = %d"), userId, userIdValue);
+					SetTestStepResult(EFail);				
+					}
+				}
+
+			TInt userResultValue = 0;				
+			if(GetIntFromConfig(ConfigSection(),_L("userResult"), userResultValue) != EFalse) // the tag 'userId' was present
+			
+				{
+				//Convert result1 to an integer
+				TPtr8 ptr = result1->Des();		// Convert the HBufC8 to a TPtr8				
+				TUint32 result2;
+				TLex8 input (ptr);
+				TRadix aRadix = EDecimal;
+				input.Val(result2, aRadix);
+				RDebug::Print(_L("Integer representation of result1 = %d, result1 itself = %S"), result2, result1);
+								
+				if(result2 != userResultValue)
+					{
+					_LIT(KErrMsg1, "result value returned differs from expected, Returned userId value= %d, \n Returned data value = %d. Expected data value = %d");						
+					ERR_PRINTF4(KErrMsg1, userId, result2, userResultValue);					
+					SetTestStepResult(EFail);				
+					}
+				}	
+			//In this case, we're expecting the 'data' returned to be the same as the pluginId value (cueValue)
+			else if (result1->Compare(cueValue) != 0)
+				{
+				TPtr8 ptr = result1->Des();		// Convert the HBufC8 to a TPtr8				
+				TUint32 result2;
+				TLex8 input (ptr);
+				TRadix aRadix = EDecimal;
+				input.Val(result2, aRadix);
+				
+				ERR_PRINTF3(_L("result value returned differs from expected, Returned userId value= %d, Returned data value = %d"), userId, result2);
+				SetTestStepResult(EFail);		
+				}
+			else
+				{
+				//No errors returned. The process was successful
+				SetTestStepResult(EPass);
+				}				
+			}		
+		else
+			{
+			ERR_PRINTF2(_L("An error occurred in the Identity function. RequestStatus = %d"), reqStatus1.Int());
+			SetTestStepResult(EFail);		
+			}
+		
+		CleanupStack::PopAndDestroy(result1);
+		CleanupStack::PopAndDestroy(plugin);
+		}			
+	
+	CleanupStack::PopAndDestroy(&authClient1);	// authClient1	
+	
+	REComSession::FinalClose(); 	//garbage collect the last previously destroyed implementation and close the REComSession if no longer in use
+	
+ 	__UHEAP_MARKEND;
+	return TestStepResult();	
+	}
+