sl@0: /* sl@0: * Copyright (c) 2007-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 the License "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: * sl@0: */ sl@0: sl@0: sl@0: #include "tpolicyreader.h" sl@0: sl@0: #include sl@0: #include "policylist.h" sl@0: #include "cleanuputils.h" sl@0: #include "util.h" sl@0: sl@0: using namespace UserPromptService; sl@0: sl@0: void CTestPolicyReader::SetupL() sl@0: /** sl@0: Initialise policy reader and related resources. sl@0: */ sl@0: { sl@0: __UHEAP_MARK; sl@0: User::LeaveIfError(iFs.Connect()); sl@0: } sl@0: sl@0: void CTestPolicyReader::TearDownL() sl@0: /** sl@0: Free resources sl@0: */ sl@0: { sl@0: delete iPolicyReader; sl@0: iSidList.Close(); sl@0: iFs.Close(); sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: void CTestPolicyReader::TestPolicyReaderL() sl@0: /** sl@0: Reads and verifies every entry in a policy file. sl@0: */ sl@0: { sl@0: TBool passed(ETrue); sl@0: TBool res; sl@0: TInt err; sl@0: sl@0: TPtrC policyFile; sl@0: res = iConfig.GetString(_L("policies"), _L("policyfile"), policyFile); sl@0: ASSERT_TRUE(res); sl@0: sl@0: // Test policy list error handling sl@0: iExpectedError = KErrNone; sl@0: res = iConfig.GetInt(_L("policies"), _L("expectedpolicylisterror"), iExpectedError); sl@0: TRAP(err, TestPolicyListL(policyFile)); sl@0: ASSERT_TRUE(CheckExpectedError(Logger(), iExpectedError, err)); sl@0: // Skip rest of test if the CPolicyList is expected to fail. sl@0: if (iExpectedError != KErrNone) return; sl@0: sl@0: TRAP(err, CreatePolicyReaderL(policyFile)); sl@0: if (err != KErrNone) sl@0: { sl@0: ERR_PRINTF2(_L("Error %d creating policy reader"), err); sl@0: passed = EFalse; sl@0: } sl@0: else sl@0: { sl@0: TInt numPolicies(-1); sl@0: res = iConfig.GetInt(_L("policies"),_L("numpolicies"), numPolicies); sl@0: ASSERT_TRUE(res); sl@0: ASSERT_TRUE(numPolicies >= 0); sl@0: sl@0: for (TInt i = 0; i < numPolicies; ++i) sl@0: { sl@0: TBuf<16> section(_L("policy")); sl@0: section.AppendNum(i); sl@0: INFO_PRINTF2(_L("Reading policy %d"), i); sl@0: TRAP(err, passed &= CheckPolicyL(section)); sl@0: passed &= CheckExpectedError(Logger(), iExpectedError, err); sl@0: } sl@0: } sl@0: if (!passed) User::Leave(KErrTEFUnitFail); sl@0: } sl@0: sl@0: void CTestPolicyReader::TestPolicyListL(const TDesC& aPolicyFile) sl@0: { sl@0: INFO_PRINTF2(_L("Creating a CPolicyList from %S"), &aPolicyFile); sl@0: CPolicyReader* r = CPolicyReader::NewL(iFs, aPolicyFile); sl@0: CleanupStack::PushL(r); sl@0: CPolicyList::TId id; sl@0: CPolicyList* policyList = CPolicyList::NewL(id, *r); sl@0: delete policyList; sl@0: CleanupStack::PopAndDestroy(r); sl@0: } sl@0: sl@0: void CTestPolicyReader::CreatePolicyReaderL(const TDesC& aPolicyFile) sl@0: { sl@0: iPolicyReader = CPolicyReader::NewL(iFs, aPolicyFile); sl@0: } sl@0: sl@0: TBool CTestPolicyReader::CheckPolicyL(const TDesC& aSection) sl@0: { sl@0: TBool passed; sl@0: ReadExpectedValuesL(aSection); sl@0: CPolicy* p = iPolicyReader->NextPolicyL(); sl@0: if (! p) sl@0: { sl@0: ERR_PRINTF1(_L("Unexpected end of policy list")); sl@0: User::Leave(KErrEof); sl@0: } sl@0: sl@0: CleanupStack::PushL(p); sl@0: passed = CompareExpectedValues(*p); sl@0: CleanupStack::PopAndDestroy(p); sl@0: return passed; sl@0: } sl@0: sl@0: sl@0: CTestSuite* CTestPolicyReader::CreateSuiteL(const TDesC& aName) sl@0: /** sl@0: Creates the test suite for UPS policy reader sl@0: @param aName - Suite name sl@0: @return - Suite sl@0: */ sl@0: { sl@0: SUB_SUITE sl@0: AddTestCase(lTestSuite, _L("TestPolicyReader"), &CTestPolicyReader::TestPolicyReaderL); sl@0: END_SUITE sl@0: } sl@0: sl@0: void CTestPolicyReader::ReadExpectedValuesL(const TDesC& aSection) sl@0: /** sl@0: Reads the expected values of the policy from section in the .ini file. sl@0: @param aPolicySection The name of the section containing the expected policy files. sl@0: */ sl@0: { sl@0: TBool ret; sl@0: sl@0: iExpectedError = KErrNone; sl@0: ret = iConfig.GetInt(aSection, _L("expectederror"), iExpectedError); sl@0: if (ret) return; // If an error is expected then other config settings aren't required. sl@0: sl@0: ret = iConfig.GetHex(aSection, _L("sidclasses"), iSidClasses); sl@0: if (! ret) iSidClasses = 0x0000FFFF; sl@0: sl@0: iSidList.Reset(); sl@0: TInt numSids(0); sl@0: ret = iConfig.GetInt(aSection, _L("numsids"), numSids); sl@0: for (TInt i = 0; i < numSids; ++i) sl@0: { sl@0: TBuf<8> key; sl@0: key.AppendFormat(_L("sid%d"), i); sl@0: sl@0: TInt sid; sl@0: ret = iConfig.GetHex(aSection, key, sid); sl@0: ASSERT_TRUE(ret); sl@0: iSidList.AppendL(sid); sl@0: } sl@0: sl@0: ASSERT_TRUE(iConfig.GetString(aSection, _L("destination"), iDestination)); sl@0: ASSERT_TRUE(iConfig.GetHex(aSection, _L("options"), iOptions)); sl@0: ASSERT_TRUE(iConfig.GetHex(aSection, _L("systemserversecurity"), iSystemServerSecurity)); sl@0: sl@0: TInt policyEvaluator; sl@0: ASSERT_TRUE(iConfig.GetHex(aSection, _L("policyevaluator"), policyEvaluator)); sl@0: iPolicyEvaluator = TUid::Uid(policyEvaluator); sl@0: sl@0: TInt dialogCreator; sl@0: ASSERT_TRUE(iConfig.GetHex(aSection, _L("dialogcreator"), dialogCreator)); sl@0: iDialogCreator = TUid::Uid(dialogCreator); sl@0: ASSERT_TRUE(iConfig.GetHex(aSection, _L("flags"), iFlags)); sl@0: sl@0: ASSERT_TRUE(iConfig.GetInt(aSection, _L("majorversion"), iMajorVersion)); sl@0: ASSERT_TRUE(iConfig.GetInt(aSection, _L("minorversion"), iMinorVersion)); sl@0: ASSERT_TRUE(iConfig.GetBool(aSection, _L("default"), iDefault)); sl@0: } sl@0: sl@0: TBool CTestPolicyReader::CompareExpectedValues(const CPolicy& aPolicy) sl@0: /** sl@0: Compares the expected policy values from the ini file to the fields sl@0: in the policy object read from the resource file. sl@0: @param aPolicy The policy object to compare the ini value to. sl@0: @return ETrue, if the values match; otherwise, EFalse is returned. sl@0: */ sl@0: { sl@0: TBool ret(ETrue); sl@0: sl@0: if (static_cast(iSidClasses) != aPolicy.SidClasses().iSidClasses) sl@0: { sl@0: ERR_PRINTF3(_L("Expected SID classes 0x%04x, actual SID classes 0x%04x"), sl@0: iSidClasses, aPolicy.SidClasses().iSidClasses); sl@0: ret = EFalse; sl@0: } sl@0: sl@0: if (iSidList.Count() != aPolicy.SidList().Count()) sl@0: { sl@0: ERR_PRINTF3(_L("Expected number of SIDs = %d, actual number of SIDs = %d"), sl@0: iSidList.Count(), aPolicy.SidList().Count()); sl@0: ret = EFalse; sl@0: } sl@0: sl@0: if (iSystemServerSecurity != aPolicy.SystemServerSecurity()) sl@0: { sl@0: ERR_PRINTF3(_L("Expected systemserversecurity %d, actual systemserversecurity %d"), sl@0: iSystemServerSecurity, aPolicy.SystemServerSecurity()); sl@0: ret = EFalse; sl@0: } sl@0: sl@0: for (TInt i = 0; i < Min(iSidList.Count(), aPolicy.SidList().Count()); ++i) sl@0: { sl@0: if (iSidList[i].iId != aPolicy.SidList()[i].iId) sl@0: { sl@0: ERR_PRINTF4(_L("Expected SID%d = 0x%08x, actual SID 0x%08x"), sl@0: i, iSidList[i].iId, aPolicy.SidList()[i].iId); sl@0: ret = EFalse; sl@0: } sl@0: } sl@0: sl@0: if (iDestination != aPolicy.Destination()) sl@0: { sl@0: ERR_PRINTF3(_L("Expected destination %S, actual destination %S"), sl@0: &iDestination, &aPolicy.Destination()); sl@0: ret = EFalse; sl@0: } sl@0: sl@0: if (iOptions != aPolicy.Options()) sl@0: { sl@0: ERR_PRINTF3(_L("Expected options = 0x%08x, actual options = 0x%08x"), sl@0: &iOptions, aPolicy.Options()); sl@0: ret = EFalse; sl@0: } sl@0: sl@0: if (iPolicyEvaluator != aPolicy.PolicyEvaluator()) sl@0: { sl@0: ERR_PRINTF3(_L("Expected policy evaluator 0x%08x, actual policy evaluator 0x%08x"), sl@0: iPolicyEvaluator, aPolicy.PolicyEvaluator()); sl@0: ret = EFalse; sl@0: } sl@0: sl@0: if (iDialogCreator != aPolicy.DialogCreator()) sl@0: { sl@0: ERR_PRINTF3(_L("Expected dialog creator 0x%08x, actualy dialog creator 0x%08x"), sl@0: iDialogCreator, aPolicy.DialogCreator()); sl@0: ret = EFalse; sl@0: } sl@0: sl@0: if (iFlags != aPolicy.Flags()) sl@0: { sl@0: ERR_PRINTF3(_L("Expected flags = 0x%04x, actual flags = 0x%04x"), sl@0: iFlags, aPolicy.Flags()); sl@0: ret = EFalse; sl@0: } sl@0: sl@0: if (iMajorVersion != aPolicy.MajorVersion()) sl@0: { sl@0: ERR_PRINTF3(_L("Expected majorversion = %d, actual major version = %d"), sl@0: iMajorVersion, aPolicy.MajorVersion()); sl@0: ret = EFalse; sl@0: } sl@0: sl@0: if (iMinorVersion != aPolicy.MinorVersion()) sl@0: { sl@0: ERR_PRINTF3(_L("Expected majorversion = %d, actual major version = %d"), sl@0: iMinorVersion, aPolicy.MinorVersion()); sl@0: ret = EFalse; sl@0: } sl@0: sl@0: if (iDefault != aPolicy.Default()) sl@0: { sl@0: ERR_PRINTF3(_L("Expected default policy = %d, actual default policy= %d"), sl@0: iDefault, aPolicy.Default()); sl@0: ret = EFalse; sl@0: } sl@0: return ret; sl@0: }