sl@0: // Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // This File Provides implementations of CCheckListImplementation, which Checks the plugin for availble implementation sl@0: // and CCheckCreateImplementation, which uses the method provided the ECom Plugin. sl@0: // sl@0: // sl@0: sl@0: /** sl@0: @file sl@0: */ sl@0: sl@0: #include sl@0: #include "checkPlugin.h" sl@0: sl@0: sl@0: CCheckListImplementation::~CCheckListImplementation() sl@0: { sl@0: } sl@0: sl@0: sl@0: CCheckListImplementation::CCheckListImplementation(TOperationType aOperationType) sl@0: : iOperationType(aOperationType) sl@0: { sl@0: SetTestStepName(KListImplUidStep); sl@0: } sl@0: sl@0: sl@0: sl@0: TVerdict CCheckListImplementation::doTestStepPreambleL() sl@0: { sl@0: SetTestStepResult(EPass); sl@0: // get step parameters sl@0: sl@0: TInt tempInterfaceuid=0; sl@0: sl@0: if (!GetHexFromConfig(ConfigSection(), KInterfaceUID, tempInterfaceuid)) sl@0: { sl@0: INFO_PRINTF1(HTML_RED); sl@0: ERR_PRINTF1(_L("FAIL: Missing Interface UID")); sl@0: INFO_PRINTF1(HTML_RED_OFF); sl@0: SetTestStepResult(EFail); sl@0: return TestStepResult(); sl@0: } sl@0: sl@0: iInterfaceUid.iUid = tempInterfaceuid; sl@0: sl@0: return TestStepResult(); sl@0: } sl@0: sl@0: sl@0: sl@0: TVerdict CCheckListImplementation::doTestStepL() sl@0: { sl@0: __UHEAP_MARK; sl@0: sl@0: //First find out if the Check Plugin step is supposed to be successful. sl@0: TInt testStepOutcome=KErrNone; sl@0: TInt err = GetIntFromConfig(ConfigSection(), KExpectedErrorCheckPlugin, testStepOutcome); sl@0: if(err !=1) testStepOutcome=KErrNone; sl@0: sl@0: sl@0: // and leaking thread handles sl@0: TInt startProcessHandleCount; sl@0: TInt startThreadHandleCount; sl@0: TInt endProcessHandleCount; sl@0: TInt endThreadHandleCount; sl@0: sl@0: RThread thisThread; sl@0: thisThread.HandleCount(startProcessHandleCount, startThreadHandleCount); sl@0: sl@0: sl@0: switch (iOperationType) sl@0: { sl@0: case EUseListImplUid: sl@0: { sl@0: sl@0: REComSession::ListImplementationsL(iInterfaceUid, iImplyArrayPtr); sl@0: sl@0: TInt eImplCount(0); sl@0: iImplCount = iImplyArrayPtr.Count(); sl@0: sl@0: if(!GetIntFromConfig(ConfigSection(), KExpectedCount, eImplCount)) sl@0: { sl@0: INFO_PRINTF1(HTML_RED); sl@0: ERR_PRINTF1(_L("FAIL: Missing Implementation Count in the INI File")); sl@0: INFO_PRINTF1(HTML_RED_OFF); sl@0: SetTestStepResult(EFail); sl@0: return TestStepResult(); sl@0: } sl@0: sl@0: if(eImplCount != iImplCount) sl@0: { sl@0: INFO_PRINTF1(HTML_RED); sl@0: ERR_PRINTF3( _L("The number Implemenation(s) in this ECom plugin do not match, expected %d implementation(s), got %d implementation(s)."), eImplCount, iImplCount ); sl@0: INFO_PRINTF1(HTML_RED_OFF); sl@0: SetTestStepResult(EFail); sl@0: return TestStepResult(); sl@0: } sl@0: sl@0: //Ensuring that the ECom Plugin does have Implementations sl@0: if( iImplCount > 0 && testStepOutcome == KErrNone) sl@0: { sl@0: TInt arrayIndex(0); sl@0: //Checking Implementation UID sl@0: TUid eImplUid = KNullUid; sl@0: TInt tempImplUid(0); sl@0: sl@0: if (!GetHexFromConfig(ConfigSection(), KImplUID, tempImplUid)) sl@0: { sl@0: INFO_PRINTF1(HTML_RED); sl@0: ERR_PRINTF1(_L("FAIL: Missing Implementtaion UID")); sl@0: INFO_PRINTF1(HTML_RED_OFF); sl@0: SetTestStepResult(EFail); sl@0: return TestStepResult(); sl@0: } sl@0: sl@0: eImplUid.iUid = tempImplUid; sl@0: sl@0: TBool foundImplementationUid(EFalse); sl@0: sl@0: for(TInt i = 0; (i < iImplCount) && !(foundImplementationUid); i++) sl@0: { sl@0: iImplUid = iImplyArrayPtr[i]->ImplementationUid(); sl@0: sl@0: if(eImplUid == iImplUid) sl@0: { sl@0: foundImplementationUid = ETrue; sl@0: arrayIndex = i; sl@0: } sl@0: } sl@0: sl@0: if(eImplUid != iImplUid) sl@0: { sl@0: INFO_PRINTF1(HTML_RED); sl@0: ERR_PRINTF3( _L("The Implemenation UID in this ECom plugin do not match, expected %d Implementation UID , got %d iImplementation UID."), eImplUid, iImplUid ); sl@0: INFO_PRINTF1(HTML_RED_OFF); sl@0: SetTestStepResult(EFail); sl@0: return TestStepResult(); sl@0: } sl@0: sl@0: //Checking Implementation's Version Numbers sl@0: TInt eVersion(0); sl@0: sl@0: if (!GetIntFromConfig(ConfigSection(), KExpectedVersion, eVersion)) sl@0: { sl@0: INFO_PRINTF1(HTML_RED); sl@0: ERR_PRINTF1(_L("FAIL: Missing Version Number in the INI File")); sl@0: INFO_PRINTF1(HTML_RED_OFF); sl@0: SetTestStepResult(EFail); sl@0: return TestStepResult(); sl@0: } sl@0: sl@0: iVersion = iImplyArrayPtr[arrayIndex]->Version(); sl@0: sl@0: if(eVersion != iVersion) sl@0: { sl@0: INFO_PRINTF1(HTML_RED); sl@0: ERR_PRINTF3( _L("The ECom plugin's implementation versions do not match, expected %d version, got %d version."), eVersion, iVersion ); sl@0: INFO_PRINTF1(HTML_RED_OFF); sl@0: SetTestStepResult(EFail); sl@0: return TestStepResult(); sl@0: } sl@0: sl@0: sl@0: //Checking Implementation's Drive Letter sl@0: TDriveUnit eDrive; sl@0: TPtrC tempDrive; sl@0: sl@0: iDrive = iImplyArrayPtr[arrayIndex]->Drive(); sl@0: sl@0: if (!GetStringFromConfig(ConfigSection(), KExpectedDrive, tempDrive)) sl@0: { sl@0: INFO_PRINTF1(HTML_RED); sl@0: ERR_PRINTF1(_L("FAIL: Missing Plugin Drive Letter in the INI File")); sl@0: INFO_PRINTF1(HTML_RED_OFF); sl@0: SetTestStepResult(EFail); sl@0: return TestStepResult(); sl@0: } sl@0: sl@0: eDrive = tempDrive; sl@0: sl@0: if(eDrive!= iDrive) sl@0: { sl@0: TPtrC eDrv(eDrive.Name()); sl@0: TPtrC iDrv(iDrive.Name()); sl@0: INFO_PRINTF1(HTML_RED); sl@0: ERR_PRINTF3( _L("The ECom plugin's drive letters do not match, expected %S drive, got %S drive."), &eDrv, &iDrv); sl@0: INFO_PRINTF1(HTML_RED_OFF); sl@0: SetTestStepResult(EFail); sl@0: return TestStepResult(); sl@0: } sl@0: sl@0: //Checking Implementation's Vendor ID sl@0: TInt tempVendorID(0); sl@0: TUid eVendorID = KNullUid; sl@0: sl@0: iVendorID = iImplyArrayPtr[arrayIndex]->VendorId(); sl@0: sl@0: if (!GetHexFromConfig(ConfigSection(), KExpectedVendorID, tempVendorID)) sl@0: { sl@0: INFO_PRINTF1(HTML_RED); sl@0: ERR_PRINTF1(_L("FAIL: Missing vendor UID In the INI File")); sl@0: INFO_PRINTF1(HTML_RED_OFF); sl@0: SetTestStepResult(EFail); sl@0: return TestStepResult(); sl@0: } sl@0: sl@0: eVendorID.iUid = tempVendorID; sl@0: sl@0: if(eVendorID != iVendorID) sl@0: { sl@0: INFO_PRINTF1(HTML_RED); sl@0: ERR_PRINTF3( _L("The ECom Vendor IDs do not match, expected %d VID, got %d VID."), eVendorID, iVendorID ); sl@0: INFO_PRINTF1(HTML_RED_OFF); sl@0: SetTestStepResult(EFail); sl@0: return TestStepResult(); sl@0: } sl@0: sl@0: } sl@0: sl@0: else sl@0: { sl@0: INFO_PRINTF1(HTML_RED); sl@0: INFO_PRINTF2(_L("This is a Negative test whose expected outcome is %d "), testStepOutcome); sl@0: INFO_PRINTF1(HTML_RED_OFF); sl@0: } sl@0: sl@0: } sl@0: sl@0: } sl@0: sl@0: //Reseting The ECOM Array sl@0: iImplyArrayPtr.ResetAndDestroy(); sl@0: sl@0: //Closing session with ECom Server sl@0: REComSession::FinalClose(); sl@0: sl@0: thisThread.HandleCount(endProcessHandleCount, endThreadHandleCount); sl@0: sl@0: if(startThreadHandleCount != endThreadHandleCount) sl@0: { sl@0: INFO_PRINTF1(HTML_RED); sl@0: 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.")); sl@0: ERR_PRINTF3(_L("At the start there %d handles open and the end there are %d"), startThreadHandleCount, endThreadHandleCount); sl@0: INFO_PRINTF1(HTML_RED_OFF); sl@0: SetTestStepResult(EFail); sl@0: return TestStepResult(); sl@0: } sl@0: sl@0: thisThread.Close(); sl@0: __UHEAP_MARKEND; sl@0: sl@0: return TestStepResult(); sl@0: } sl@0: sl@0: sl@0: sl@0: sl@0: sl@0: TVerdict CCheckListImplementation::doTestStepPostambleL() sl@0: { sl@0: return TestStepResult(); sl@0: } sl@0: sl@0: sl@0: sl@0: sl@0: CCheckCreateImplementation::CCheckCreateImplementation(TOperationType aOperationType) sl@0: : iOperationType(aOperationType) sl@0: { sl@0: SetTestStepName(KCreateImpl_ImpId_DtorId_Step); sl@0: } sl@0: sl@0: TVerdict CCheckCreateImplementation::doTestStepPreambleL() sl@0: { sl@0: SetTestStepResult(EPass); sl@0: sl@0: TInt tempImplUid=0; sl@0: sl@0: if (!GetHexFromConfig(ConfigSection(), KImplUID, tempImplUid)) sl@0: { sl@0: INFO_PRINTF1(HTML_RED); sl@0: ERR_PRINTF1(_L("FAIL: Missing Implementation UID")); sl@0: INFO_PRINTF1(HTML_RED_OFF); sl@0: SetTestStepResult(EFail); sl@0: return TestStepResult(); sl@0: } sl@0: sl@0: iImplUid.iUid = tempImplUid; sl@0: sl@0: return TestStepResult(); sl@0: } sl@0: sl@0: sl@0: TVerdict CCheckCreateImplementation::doTestStepL() sl@0: { sl@0: __UHEAP_MARK; sl@0: sl@0: sl@0: // Check for Memory leaks and also leaking thread handles sl@0: TInt startProcessHandleCount; sl@0: TInt startThreadHandleCount; sl@0: TInt endProcessHandleCount; sl@0: TInt endThreadHandleCount; sl@0: sl@0: RThread thisThread; sl@0: thisThread.HandleCount(startProcessHandleCount, startThreadHandleCount); sl@0: sl@0: sl@0: TInt eInt(0); sl@0: sl@0: CEComSwiPluginInterfaceDefiniton* iPluginPtr = CEComSwiPluginInterfaceDefiniton::NewL(iImplUid); sl@0: sl@0: iPluginPtr->ReturnInt(iInt); sl@0: sl@0: sl@0: if (!GetIntFromConfig(ConfigSection(), KExpectedPluginInt, eInt)) sl@0: { sl@0: INFO_PRINTF1(HTML_RED); sl@0: ERR_PRINTF1(_L("FAIL: Missing ReturnInt value Number in the INI File")); sl@0: INFO_PRINTF1(HTML_RED_OFF); sl@0: SetTestStepResult(EFail); sl@0: return TestStepResult(); sl@0: } sl@0: sl@0: sl@0: if(eInt != iInt) sl@0: { sl@0: INFO_PRINTF1(HTML_RED); sl@0: ERR_PRINTF3(_L("The values returned from the Plugins ReturnInt() do not match, expected Int Value %d, got %d."), eInt, iInt); sl@0: INFO_PRINTF1(HTML_RED_OFF); sl@0: SetTestStepResult(EFail); sl@0: return TestStepResult(); sl@0: } sl@0: sl@0: delete iPluginPtr; sl@0: sl@0: REComSession::FinalClose(); sl@0: sl@0: thisThread.HandleCount(endProcessHandleCount, endThreadHandleCount); sl@0: sl@0: if(startThreadHandleCount != endThreadHandleCount) sl@0: { sl@0: INFO_PRINTF1(HTML_RED); sl@0: 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.")); sl@0: ERR_PRINTF3(_L("At the start there %d handles open and the end there are %d"), startThreadHandleCount, endThreadHandleCount); sl@0: INFO_PRINTF1(HTML_RED_OFF); sl@0: SetTestStepResult(EFail); sl@0: return TestStepResult(); sl@0: } sl@0: sl@0: thisThread.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: sl@0: return TestStepResult(); sl@0: } sl@0: sl@0: sl@0: sl@0: TVerdict CCheckCreateImplementation::doTestStepPostambleL() sl@0: { sl@0: return TestStepResult(); sl@0: } sl@0: sl@0: CCheckCreateImplementation::~CCheckCreateImplementation() sl@0: { sl@0: } sl@0: sl@0: /** Test step to issue a custom resolver list request so that sl@0: the resolver is cached. */ sl@0: sl@0: // constructor sl@0: CUseCustomResolver::CUseCustomResolver() sl@0: { sl@0: SetTestStepName(KUseCustomResolverStep); sl@0: } sl@0: sl@0: // destructor sl@0: CUseCustomResolver::~CUseCustomResolver() sl@0: { sl@0: } sl@0: sl@0: // doTestStepL sl@0: TVerdict CUseCustomResolver::doTestStepL() sl@0: { sl@0: TUid resolverUid = KNullUid; sl@0: TInt tempImplUid(0); sl@0: TESTL(GetHexFromConfig(ConfigSection(), KImplUID, tempImplUid)); sl@0: sl@0: resolverUid.iUid = tempImplUid; sl@0: TEComResolverParams resolverparams; sl@0: _LIT8(KDummyData,"dummy"); sl@0: resolverparams.SetDataType(KDummyData); sl@0: RImplInfoPtrArray ifArray; sl@0: TRAPD(err, REComSession::ListImplementationsL(KCustomResolverInterfaceUid, sl@0: resolverparams, resolverUid, ifArray) ); sl@0: if (err != KErrNone) sl@0: { sl@0: // In particular looking for KEComErrMismatchedTags sl@0: INFO_PRINTF1(HTML_RED); sl@0: ERR_PRINTF2( _L("Custom Resolver list request failed with %d"), err); sl@0: INFO_PRINTF1(HTML_RED_OFF); sl@0: SetTestStepResult(EFail); sl@0: return EFail; sl@0: } sl@0: sl@0: _LIT(KExpectedVersion, "expectedversion"); sl@0: TInt expectedVersion; sl@0: if (GetIntFromConfig(ConfigSection(), KExpectedVersion, expectedVersion)) sl@0: { sl@0: for (TInt i = 0; i < ifArray.Count(); i++) sl@0: { sl@0: const CImplementationInformation& impl = *ifArray[i]; sl@0: if (impl.ImplementationUid() == resolverUid) sl@0: { sl@0: if (impl.Version() != expectedVersion) sl@0: { sl@0: INFO_PRINTF1(HTML_RED); sl@0: ERR_PRINTF3( _L("Expecting ver %d, got %d"), expectedVersion, impl.Version()); sl@0: INFO_PRINTF1(HTML_RED_OFF); sl@0: SetTestStepResult(EFail); sl@0: } sl@0: break; sl@0: } sl@0: } sl@0: } sl@0: ifArray.ResetAndDestroy(); sl@0: REComSession::FinalClose(); sl@0: return TestStepResult(); sl@0: }