diff -r 5cc91383ab1e -r 7333d7932ef7 installationservices/swcomponentregistry/test/tscr/source/subsessionsteps.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/installationservices/swcomponentregistry/test/tscr/source/subsessionsteps.cpp Tue Aug 31 15:21:33 2010 +0300 @@ -0,0 +1,505 @@ +/* +* Copyright (c) 2008-2010 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: +* Implements test steps for the subsessions interfaces in the SCR +* +*/ + + +#include "subsessionsteps.h" +#include +#include "tscrdefs.h" + +using namespace Usif; + +TBool IsEqual(const CComponentEntry& aLhsEntry, const CComponentEntry& aRhsEntry) + { + return (aLhsEntry == aRhsEntry); + } + +TBool operator ==(const Usif::TAppRegInfo& aLhsEntry, const Usif::TAppRegInfo& aRhsEntry) + { + return (aLhsEntry.Uid() == aRhsEntry.Uid() && + aLhsEntry.FullName() == aRhsEntry.FullName() && + aLhsEntry.Caption() == aRhsEntry.Caption() && + aLhsEntry.ShortCaption() == aRhsEntry.ShortCaption()); + } +TBool operator !=(const TAppRegInfo& aLhsEntry, const TAppRegInfo& aRhsEntry) + { + return !operator ==(aLhsEntry, aRhsEntry); + } + +TBool IsEqual(const TAppRegInfo& aLhsEntry, const TAppRegInfo& aRhsEntry) + { + return (aLhsEntry == aRhsEntry); + } + + +TBool IsEqual(const HBufC& aLhs, const HBufC& aRhs) + { + return const_cast(aLhs).Des() == const_cast(aRhs).Des(); + } + +template TBool VerifyMatchingL(const T* aObj, RPointerArray& aExpectedArray) + { + TInt pos = aExpectedArray.Find(aObj, IsEqual); + if (pos != KErrNotFound) + { + T* foundObj = aExpectedArray[pos]; + delete foundObj; + aExpectedArray.Remove(pos); + return ETrue; + } + return EFalse; + } + + +// -----------CScrGetComponentStep----------------- + +CScrComponentRegistrySubsessionStep::CScrComponentRegistrySubsessionStep(CScrTestServer& aParent) : CScrTestStep(aParent) + { + } + +void CScrComponentRegistrySubsessionStep::ImplTestStepPreambleL() + { + CScrTestStep::ImplTestStepPreambleL(); + } + +void CScrComponentRegistrySubsessionStep::GetComponentEntriesFromConfigL(RPointerArray& aEntries) + { + TInt componentsCount(0); + if (!GetIntFromConfig(ConfigSection(), KComponentsCountName, componentsCount)) + { + CComponentEntry *componentEntry = GetComponentEntryFromConfigLC(); + aEntries.AppendL(componentEntry); + CleanupStack::Pop(componentEntry); + } + + for (TInt i = 0; i < componentsCount; ++i) + { + CComponentEntry *componentEntry = GetComponentEntryFromConfigLC(EFalse,i); + aEntries.AppendL(componentEntry); + CleanupStack::Pop(componentEntry); + } + } + +void CScrComponentRegistrySubsessionStep::VerifyNonReturnedEntriesL(const RPointerArray& aExpectedEntries) + { + // Check if we need to verify the returned components + // Performance tests don't need verification. + TBool noVerification = EFalse; + GetBoolFromConfig(ConfigSection(), _L("NoVerification"), noVerification); + if(noVerification) return; + + if (aExpectedEntries.Count() > 0) + { + TComponentId componentId = aExpectedEntries[0]->ComponentId(); + const TDesC& componentName = aExpectedEntries[0]->Name(); + ERR_PRINTF3(_L("At least one expected entry was not returned by the API - id %d, name %S"), componentId, &componentName); + SetTestStepResult(EFail); + } + } + +void CScrComponentRegistrySubsessionStep::TestSingleModeL(const RSoftwareComponentRegistryView& aSubSession, RPointerArray& aExpectedEntries) + { + // Check if we need to verify the returned components + // Performance tests don't need verification. Because the impact verification on performance results. + // In addition, we cannot simply verify some test cases such as retrieving all components or removable components. + // Because, the perforamce test databases are populated with random data, and in the future we cannot guarantee + // the values will stay same if the databases are recreated. + + TBool noVerification = EFalse; + GetBoolFromConfig(ConfigSection(), _L("NoVerification"), noVerification); + + // Read continuously entries from the sub-session + while (1) + { + CComponentEntry* componentEntry = aSubSession.NextComponentL(); + if (componentEntry == NULL) + break; // No more entries were found + CleanupStack::PushL(componentEntry); + + if(noVerification) + { + CleanupStack::PopAndDestroy(componentEntry); + continue; + } + // For each entry, check whether it was found in the expected array. + // If found, delete it from the expected array. If not, fail the test step + if (!VerifyMatchingL(componentEntry, aExpectedEntries)) + { + ERR_PRINTF2(_L("The API returned an unexpected entry with id %d"), componentEntry->ComponentId()); + SetTestStepResult(EFail); + CleanupStack::PopAndDestroy(componentEntry); + return; + } + + CleanupStack::PopAndDestroy(componentEntry); + } + + // At the end, check whether there were expected entries which were not found + VerifyNonReturnedEntriesL(aExpectedEntries); + } + +void CScrComponentRegistrySubsessionStep::TestSetModeL(const RSoftwareComponentRegistryView& aSubSession, TInt aSetSize, RPointerArray& aExpectedEntries) + { + // Check if we need to verify the returned components + // Performance tests don't need verification. See TestSingleModeL for more information. + TBool noVerification = EFalse; + GetBoolFromConfig(ConfigSection(), _L("NoVerification"), noVerification); + + while (1) + { + RPointerArray componentSet; + CleanupResetAndDestroyPushL(componentSet); + + aSubSession.NextComponentSetL(aSetSize, componentSet); + TInt returnedComponentsCount = componentSet.Count(); + if (returnedComponentsCount <= 0) + { + CleanupStack::PopAndDestroy(&componentSet); + break; + } + + if(noVerification) + { + CleanupStack::PopAndDestroy(&componentSet); + continue; + } + + for (TInt i = 0; i < returnedComponentsCount; ++i) + { + if (!VerifyMatchingL(componentSet[i], aExpectedEntries)) + { + ERR_PRINTF2(_L("The API returned an unexpected entry with id %d"), componentSet[i]->ComponentId()); + SetTestStepResult(EFail); + CleanupStack::PopAndDestroy(&componentSet); + return; + } + } + + CleanupStack::PopAndDestroy(&componentSet); + } + + VerifyNonReturnedEntriesL(aExpectedEntries); + } + +void CScrComponentRegistrySubsessionStep::ImplTestStepL() + { + CComponentFilter* componentFilter = ReadComponentFilterFromConfigLC(); + INFO_PRINTF1(_L("Read component filter from configuration")); + + INFO_PRINTF1(_L("Opened subsession to SCR")); + + //Get testing mode from configuration (sets or single iteration) + //Delegate the actual invocation and comparison according to the testing mode + TInt setSize = GetSetSizeFromConfigL(); + INFO_PRINTF2(_L("Test set size %d"), setSize); + + // Read expected results from config + RPointerArray expectedComponentEntries; + CleanupResetAndDestroyPushL(expectedComponentEntries); + GetComponentEntriesFromConfigL(expectedComponentEntries); + StartTimer(); + // Open the subsession + RSoftwareComponentRegistryView subSession; + CleanupClosePushL(subSession); + subSession.OpenViewL(iScrSession, componentFilter); + + if (setSize == 1) + TestSingleModeL(subSession, expectedComponentEntries); + else + TestSetModeL(subSession, setSize, expectedComponentEntries); + + CleanupStack::PopAndDestroy(3, componentFilter); // expectedComponentEntries, subSession, componentFilter + } + +void CScrComponentRegistrySubsessionStep::ImplTestStepPostambleL() + { + CScrTestStep::ImplTestStepPostambleL(); + } + +// -----------CScrFileListSubsessionStep----------------- + +CScrFileListSubsessionStep::CScrFileListSubsessionStep(CScrTestServer& aParent) : CScrTestStep(aParent) + { + } + +void CScrFileListSubsessionStep::ImplTestStepPreambleL() + { + CScrTestStep::ImplTestStepPreambleL(); + } + +void CScrFileListSubsessionStep::VerifyNonReturnedFilesL(const RPointerArray& aExpectedFiles) + { + if (aExpectedFiles.Count() > 0) + { + HBufC* fileName = aExpectedFiles[0]; + ERR_PRINTF2(_L("At least one expected files was not returned by the API - name %S"), fileName); + SetTestStepResult(EFail); + } + } + +void CScrFileListSubsessionStep::ReportUnexpectedFileL(const TDesC& aUnexpectedFileName) + { + ERR_PRINTF2(_L("The API returned an unexpected file entry with name %S"), &aUnexpectedFileName); + SetTestStepResult(EFail); + } + +void CScrFileListSubsessionStep::TestSingleModeL(const RSoftwareComponentRegistryFilesList& aSubSession, + RPointerArray &aExpectedFiles) + { + FOREVER + { + HBufC *nextFile = aSubSession.NextFileL(); + if (!nextFile) + break; + CleanupStack::PushL(nextFile); + + if (!VerifyMatchingL(nextFile, aExpectedFiles)) + { + ReportUnexpectedFileL(*nextFile); + CleanupStack::PopAndDestroy(nextFile); + return; + } + + CleanupStack::PopAndDestroy(nextFile); + } + + VerifyNonReturnedFilesL(aExpectedFiles); + } + +void CScrFileListSubsessionStep::TestSetModeL(const RSoftwareComponentRegistryFilesList& aSubSession, TInt aSetSize, + RPointerArray& aExpectedFiles) + { + FOREVER + { + RPointerArray foundFiles; + CleanupResetAndDestroyPushL(foundFiles); + + aSubSession.NextFileSetL(aSetSize, foundFiles); + TInt returnedFilesCount = foundFiles.Count(); + if (returnedFilesCount <= 0) + { + CleanupStack::PopAndDestroy(&foundFiles); + break; + } + for (TInt i = 0; i < returnedFilesCount; ++i) + { + if (!VerifyMatchingL(foundFiles[i], aExpectedFiles)) + { + ReportUnexpectedFileL(*foundFiles[i]); + CleanupStack::PopAndDestroy(&foundFiles); + return; + } + } + + CleanupStack::PopAndDestroy(&foundFiles); + } + VerifyNonReturnedFilesL(aExpectedFiles); + } + + +void CScrFileListSubsessionStep::ImplTestStepL() + { + TInt componentId = GetComponentIdL(); + RSoftwareComponentRegistryFilesList subSession; + CleanupClosePushL(subSession); + + subSession.OpenListL(iScrSession, componentId); + + RPointerArray expectedFiles; + CleanupResetAndDestroyPushL(expectedFiles); + + GetFileNameListFromConfigL(expectedFiles); + TInt setSize = GetSetSizeFromConfigL(); + + if (setSize > 1) + TestSingleModeL(subSession, expectedFiles); + else + TestSetModeL(subSession, setSize, expectedFiles); + + CleanupStack::PopAndDestroy(2, &subSession); //expectedEntries + } + +void CScrFileListSubsessionStep::ImplTestStepPostambleL() + { + CScrTestStep::ImplTestStepPostambleL(); + } + +// -----------CAppInfoView----------------- + +CAppInfoView::CAppInfoView(CScrTestServer& aParent) : CScrTestStep(aParent) + { + } + +void CAppInfoView::ImplTestStepPreambleL() + { + CScrTestStep::ImplTestStepPreambleL(); + } + +void CAppInfoView::GetAppEntryFromConfigL(RPointerArray& aEntries) + { + TInt appEntriesCount(0); + TAppRegInfo *appRegInfo=NULL; + if (!GetIntFromConfig(ConfigSection(), KAppEntriesCountName, appEntriesCount)) + { + appRegInfo = GetAppInfoFromConfigL(ETrue); + aEntries.AppendL(appRegInfo); + } + + for (TInt i = 0; i < appEntriesCount; ++i) + { + appRegInfo = GetAppInfoFromConfigL(EFalse,i); + aEntries.AppendL(appRegInfo); + } + } + +void CAppInfoView::VerifyNonReturnedEntriesL(const RPointerArray& aExpectedEntries) + { + // Check if we need to verify the returned components + // Performance tests don't need verification. + TBool noVerification = EFalse; + GetBoolFromConfig(ConfigSection(), _L("NoVerification"), noVerification); + if(noVerification) return; + + if (aExpectedEntries.Count() > 0) + { + TUid appUid = aExpectedEntries[0]->Uid(); + const TDesC& appName = aExpectedEntries[0]->FullName(); + ERR_PRINTF3(_L("At least one expected entry was not returned by the API - id %d, name %S"), appUid, &appName); + SetTestStepResult(EFail); + } + } + +void CAppInfoView::TestSessionL(TInt aNoOfEntries, const RApplicationInfoView& aSubSession, RPointerArray& aExpectedEntries) + { + // Check if we need to verify the returned components + // Performance tests don't need verification. + TBool isVerification = EFalse; + TInt noOfEntriesMatched = 0; + TInt totalExpectedEntriesCount = aExpectedEntries.Count(); + GetBoolFromConfig(ConfigSection(), _L("IsVerification"), isVerification); + while (1) + { + RPointerArray appRegInfoSet; + aSubSession.GetNextAppInfoL(aNoOfEntries, appRegInfoSet); + TInt returnedAppRegInfoCount = appRegInfoSet.Count(); + if (returnedAppRegInfoCount <= 0) + { + INFO_PRINTF2(_L("May be negative case... no entries found ...Entries count read is %d "),returnedAppRegInfoCount); + appRegInfoSet.Close(); + break; + } + + if(!isVerification) + { + //INFO_PRINTF2(_L("Read Appuid is %S"),appRegInfoSet[0]->iFullName ); + INFO_PRINTF3(_L("No of entries read is %d and first appuid is %d "),returnedAppRegInfoCount, appRegInfoSet[0]->Uid()); + + TAppRegInfo* tp=NULL; + for (TInt i = 0; i expectedAppRegEntries; + CleanupResetAndDestroyPushL(expectedAppRegEntries); + TInt noOfEntries(1); + GetIntFromConfig(ConfigSection(), _L("NoOfEntries"), noOfEntries); + + TBool isVerification = EFalse; + GetBoolFromConfig(ConfigSection(), _L("IsVerification"), isVerification); + if(isVerification) + { + GetAppEntryFromConfigL(expectedAppRegEntries); + INFO_PRINTF1(_L("Read expected entries for verification ")); + } + + INFO_PRINTF1(_L("Opened subsession to SCR")); + TBool callGetNextAppWithLocale=EFalse; + TInt appLocale; + if (GetIntFromConfig(ConfigSection(), _L("LocaleValue"), appLocale)) + callGetNextAppWithLocale=ETrue; + RApplicationInfoView subSession; + CleanupClosePushL(subSession); + + if(callGetNextAppWithLocale) + { + subSession.OpenViewL(iScrSession,appinfoFilter, (TLanguage)appLocale); + } + else + { + subSession.OpenViewL(iScrSession,appinfoFilter); + } + + if(appinfoFilter) + delete appinfoFilter; + + TRAPD(err1,TestSessionL(noOfEntries, subSession, expectedAppRegEntries)); + + TInt count = expectedAppRegEntries.Count(); + TAppRegInfo* tp=NULL; + for (TInt i = 0; i