--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/e32test/hcr/t_hcr.cpp Thu Dec 17 09:24:54 2009 +0200
@@ -0,0 +1,2192 @@
+// Copyright (c) 2008-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:
+// Hardware Configuration Respoitory Test Application
+//
+
+#define __E32TEST_EXTENSION__
+#include <e32test.h>
+#include <e32rom.h>
+#include <e32svr.h>
+#include <e32hashtab.h>
+#include <e32base.h>
+#include "d_hcrsim.h"
+#include "d_hcrsim_testdata.h"
+#include "hcr_uids.h"
+
+_LIT8(KTestFileRepos, "filerepos.dat");
+_LIT8(KTestNandRepos, "nandrepos.dat");
+_LIT8(KTestCorrupt1, "corrupt1.dat");
+_LIT8(KTestCorrupt2, "corrupt2.dat");
+_LIT8(KTestEmpty, "empty.dat");
+_LIT8(KTestMegaLarge1, "megalarge1.dat");
+_LIT8(KTestMegaLarge2, "megalarge2.dat");
+_LIT8(KTestClearRepos, "");
+
+
+
+RTest test(_L("T_HCR"));
+RHcrSimTestChannel HcrSimTest;
+
+//Helper function to compare two SSettingId parameters. It's used in
+//GetMultipleWord settings array
+TInt CompareEntries (const SSettingC& a1, const SSettingC& a2)
+ {
+ if (a1.iName.iId.iCat > a2.iName.iId.iCat)
+ return (1);
+
+ if (a1.iName.iId.iCat < a2.iName.iId.iCat)
+ return (-1);
+
+ // Categories are the same at this point, check keys.
+ if (a1.iName.iId.iKey > a2.iName.iId.iKey)
+ return (1);
+
+ if (a1.iName.iId.iKey < a2.iName.iId.iKey)
+ return (-1);
+
+ // Both Categories and jeys are the same here.
+ return (0);
+ }
+
+
+
+void HcrSimGetSettings(SSettingC* aRepository, TUint aNumberOfSettings)
+ {
+ test.Next(_L("GetSettings"));
+ TInt r;
+ SSettingC* setting;
+ for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
+ {
+ TSettingId id(setting->iName.iId.iCat, setting->iName.iId.iKey);
+ test.Printf(_L("(0x%08x, 0x%08x)\n"), id.iCat, id.iKey);
+ switch (setting->iName.iType)
+ {
+ case ETypeInt32:
+ {
+ TInt32 val;
+ r = HcrSimTest.GetInt(id, val);
+ test_KErrNone(r);
+ test_Equal(setting->iValue.iLit.iInt32, val);
+ break;
+ }
+ case ETypeInt16:
+ {
+ TInt16 val;
+ r = HcrSimTest.GetInt(id, val);
+ test_KErrNone(r);
+ test_Equal(setting->iValue.iLit.iInt16, val);
+ break;
+ }
+ case ETypeInt8:
+ {
+ TInt8 val;
+ r = HcrSimTest.GetInt(id, val);
+ test_KErrNone(r);
+ test_Equal(setting->iValue.iLit.iInt8, val);
+ break;
+ }
+ case ETypeBool:
+ {
+ TBool val;
+ r = HcrSimTest.GetBool(id, val);
+ test_KErrNone(r);
+ test_Equal(setting->iValue.iLit.iBool, val);
+ break;
+ }
+ case ETypeUInt32:
+ {
+ TUint32 val;
+ r = HcrSimTest.GetUInt(id, val);
+ test_KErrNone(r);
+ test_Equal(setting->iValue.iLit.iUInt32, val);
+ break;
+ }
+ case ETypeUInt16:
+ {
+ TUint16 val;
+ r = HcrSimTest.GetUInt(id, val);
+ test_KErrNone(r);
+ test_Equal(setting->iValue.iLit.iUInt16, val);
+ break;
+ }
+ case ETypeUInt8:
+ {
+ TUint8 val;
+ r = HcrSimTest.GetUInt(id, val);
+ test_KErrNone(r);
+ test_Equal(setting->iValue.iLit.iUInt8, val);
+ break;
+ }
+ case ETypeLinAddr:
+ {
+ TLinAddr val;
+ r = HcrSimTest.GetLinAddr(id, val);
+ test_KErrNone(r);
+ test_Equal(setting->iValue.iLit.iAddress, val);
+ break;
+ }
+ case ETypeBinData:
+ {
+ TBuf8<KMaxSettingLength> dval;
+ TUint8* pval;
+ pval = (TUint8*) User::Alloc(setting->iName.iLen);
+ test_NotNull(pval);
+ //
+ r = HcrSimTest.GetData(id, dval);
+ test_KErrNone(r);
+ //
+ TUint16 actuallength;
+ r = HcrSimTest.GetData(id, setting->iName.iLen, pval, actuallength);
+ test_KErrNone(r);
+ //
+ test_Equal(0, Mem::Compare(
+ setting->iValue.iPtr.iData, setting->iName.iLen,
+ pval, actuallength));
+ test_Equal(0, Mem::Compare(
+ setting->iValue.iPtr.iData, setting->iName.iLen,
+ dval.Ptr(), dval.Length()));
+ User::Free(pval);
+ break;
+ }
+ case ETypeText8:
+ {
+ TBuf8<KMaxSettingLength> dval;
+ TText8* pval;
+ pval = (TText8*) User::Alloc(setting->iName.iLen);
+ test_NotNull(pval);
+ //
+ r = HcrSimTest.GetString(id, dval);
+ test_KErrNone(r);
+ //
+ TUint16 actuallength;
+ r = HcrSimTest.GetString(id, setting->iName.iLen, pval, actuallength);
+ test_KErrNone(r);
+ //
+ test_Equal(0, Mem::Compare(
+ setting->iValue.iPtr.iString8, setting->iName.iLen,
+ pval, actuallength));
+ test_Equal(0, Mem::Compare(
+ setting->iValue.iPtr.iString8, setting->iName.iLen,
+ dval.Ptr(), dval.Length()));
+ User::Free(pval);
+ break;
+ }
+ case ETypeArrayInt32:
+ {
+ TInt32* pval;
+ pval = (TInt32*) User::Alloc(setting->iName.iLen);
+ test_NotNull(pval);
+ //
+ TUint16 actuallength;
+ r = HcrSimTest.GetArray(id, setting->iName.iLen, pval, actuallength);
+ test_KErrNone(r);
+ //
+ test_Equal(setting->iName.iLen, actuallength);
+ TInt32* pexpected = setting->iValue.iPtr.iArrayInt32;
+ TUint i;
+ for (i = 0; i < setting->iName.iLen / sizeof(TInt32); i++)
+ {
+ test_Equal(*(pexpected + i), *(pval + i));
+ }
+ User::Free(pval);
+ break;
+ }
+ case ETypeArrayUInt32:
+ {
+ TUint32* pval;
+ pval = (TUint32*) User::Alloc(setting->iName.iLen);
+ test_NotNull(pval);
+ //
+ TUint16 actuallength;
+ r = HcrSimTest.GetArray(id, setting->iName.iLen, pval, actuallength);
+ test_KErrNone(r);
+ //
+ test_Equal(setting->iName.iLen, actuallength);
+ TUint32* pexpected = setting->iValue.iPtr.iArrayUInt32;
+ TUint i;
+ for (i = 0; i < setting->iName.iLen / sizeof(TUint32); i++)
+ {
+ test_Equal(*(pexpected + i), *(pval + i));
+ }
+ User::Free(pval);
+ break;
+ }
+ case ETypeInt64:
+ {
+ TInt64 val;
+ r = HcrSimTest.GetInt(id, val);
+ test_KErrNone(r);
+ test_Equal(*setting->iValue.iPtr.iInt64, val);
+ break;
+ }
+ case ETypeUInt64:
+ {
+ TUint64 val;
+ r = HcrSimTest.GetUInt(id, val);
+ test_KErrNone(r);
+ test_Equal(*setting->iValue.iPtr.iUInt64, val);
+ break;
+ }
+ default:
+ test(EFalse);
+ }
+ }
+ }
+
+void HcrSimGetSettingsNegative(SSettingC* aRepository, TUint aNumberOfSettings)
+ {
+ test.Next(_L("GetSettingsNegative"));
+ TInt r;
+ SSettingC* setting;
+ for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
+ {
+ TSettingId id(setting->iName.iId.iCat, setting->iName.iId.iKey);
+ test.Printf(_L("(0x%08x, 0x%08x)\n"), id.iCat, id.iKey);
+ if (setting->iName.iType != ETypeInt32)
+ {
+ TInt32 val;
+ r = HcrSimTest.GetInt(id, val);
+ test_Equal(KErrArgument, r);
+ }
+ if (setting->iName.iType != ETypeInt16)
+ {
+ TInt16 val;
+ r = HcrSimTest.GetInt(id, val);
+ test_Equal(KErrArgument, r);
+ }
+ if (setting->iName.iType != ETypeInt8)
+ {
+ TInt8 val;
+ r = HcrSimTest.GetInt(id, val);
+ test_Equal(KErrArgument, r);
+ }
+ if (setting->iName.iType != ETypeBool)
+ {
+ TBool val;
+ r = HcrSimTest.GetBool(id, val);
+ test_Equal(KErrArgument, r);
+ }
+ if (setting->iName.iType != ETypeUInt32)
+ {
+ TUint32 val;
+ r = HcrSimTest.GetUInt(id, val);
+ test_Equal(KErrArgument, r);
+ }
+ if (setting->iName.iType != ETypeUInt16)
+ {
+ TUint16 val;
+ r = HcrSimTest.GetUInt(id, val);
+ test_Equal(KErrArgument, r);
+ }
+ if (setting->iName.iType != ETypeUInt8)
+ {
+ TUint8 val;
+ r = HcrSimTest.GetUInt(id, val);
+ test_Equal(KErrArgument, r);
+ }
+ if (setting->iName.iType != ETypeLinAddr)
+ {
+ TLinAddr val;
+ r = HcrSimTest.GetLinAddr(id, val);
+ test_Equal(KErrArgument, r);
+ }
+ if (setting->iName.iType != ETypeBinData)
+ {
+ TBuf8<KMaxSettingLength> dval;
+ TUint8* pval;
+ pval = (TUint8*) User::Alloc(setting->iName.iLen);
+ test_NotNull(pval);
+ //
+ r = HcrSimTest.GetData(id, dval);
+ test_Equal(KErrArgument, r);
+ //
+ TUint16 actuallength;
+ r = HcrSimTest.GetData(id, setting->iName.iLen, pval, actuallength);
+ test_Equal(KErrArgument, r);
+ //
+ User::Free(pval);
+ }
+ else if (setting->iName.iLen > 1)
+ {
+ RBuf8 dval;
+ r = dval.Create(setting->iName.iLen - 1);
+ test_KErrNone(r);
+ r = HcrSimTest.GetData(id, dval);
+ test_Equal(KErrTooBig, r);
+ dval.Close();
+ }
+ if (setting->iName.iType != ETypeText8)
+ {
+ TBuf8<KMaxSettingLength> dval;
+ TText8* pval;
+ pval = (TText8*) User::Alloc(setting->iName.iLen);
+ test_NotNull(pval);
+ //
+ r = HcrSimTest.GetString(id, dval);
+ test_Equal(KErrArgument, r);
+ //
+ TUint16 actuallength;
+ r = HcrSimTest.GetString(id, setting->iName.iLen, pval, actuallength);
+ test_Equal(KErrArgument, r);
+ //
+ User::Free(pval);
+ }
+ else if (setting->iName.iLen > 1)
+ {
+ RBuf8 dval;
+ r = dval.Create(setting->iName.iLen - 1);
+ test_KErrNone(r);
+ r = HcrSimTest.GetString(id, dval);
+ test_Equal(KErrTooBig, r);
+ dval.Close();
+ }
+ if (setting->iName.iType != ETypeArrayInt32)
+ {
+ TInt32* pval;
+ pval = (TInt32*) User::Alloc(setting->iName.iLen);
+ test_NotNull(pval);
+ //
+ TUint16 actuallength;
+ r = HcrSimTest.GetArray(id, setting->iName.iLen, pval, actuallength);
+ test_Equal(KErrArgument, r);
+ //
+ User::Free(pval);
+ }
+ else
+ {
+ TInt32* pval;
+ pval = (TInt32*) User::Alloc(setting->iName.iLen);
+ test_NotNull(pval);
+ //
+ TUint16 actuallength;
+ r = HcrSimTest.GetArray(id, (TUint16) (setting->iName.iLen / 2), pval, actuallength);
+ test_Equal(KErrTooBig, r);
+ //
+ User::Free(pval);
+ }
+ if (setting->iName.iType != ETypeArrayUInt32)
+ {
+ TUint32* pval;
+ pval = (TUint32*) User::Alloc(setting->iName.iLen);
+ test_NotNull(pval);
+ //
+ TUint16 actuallength;
+ r = HcrSimTest.GetArray(id, setting->iName.iLen, pval, actuallength);
+ test_Equal(KErrArgument, r);
+ //
+ User::Free(pval);
+ }
+ if (setting->iName.iType != ETypeInt64)
+ {
+ TInt64 val;
+ r = HcrSimTest.GetInt(id, val);
+ test_Equal(KErrArgument, r);
+ }
+ if (setting->iName.iType != ETypeUInt64)
+ {
+ TUint64 val;
+ r = HcrSimTest.GetUInt(id, val);
+ test_Equal(KErrArgument, r);
+ }
+ }
+ }
+
+void HcrSimSettingProperties(SSettingC* aRepository, TUint aNumberOfSettings)
+ {
+ test.Next(_L("SettingProperties"));
+ TInt r;
+ SSettingC* setting;
+ for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
+ {
+ TSettingId id(setting->iName.iId.iCat, setting->iName.iId.iKey);
+ test.Printf(_L("(0x%08x, 0x%08x)\n"), id.iCat, id.iKey);
+ TSettingType type = ETypeUndefined;
+ TUint16 size = KMaxSettingLength + 1;
+ r = HcrSimTest.GetTypeAndSize(id, type, size);
+ test_KErrNone(r);
+ switch (setting->iName.iType)
+ {
+ case ETypeInt32:
+ case ETypeInt16:
+ case ETypeInt8:
+ case ETypeBool:
+ case ETypeUInt32:
+ case ETypeUInt16:
+ case ETypeUInt8:
+ case ETypeLinAddr:
+ test_Equal(setting->iName.iType, type);
+ test_Equal(0, size);
+ break;
+ // Fall-through
+ case ETypeBinData:
+ case ETypeText8:
+ case ETypeArrayInt32:
+ case ETypeArrayUInt32:
+ case ETypeInt64:
+ case ETypeUInt64:
+ test_Equal(setting->iName.iType, type);
+ test_Equal(setting->iName.iLen, size);
+ break;
+ default:
+ test(EFalse);
+ }
+ test.Printf(_L("."));
+ }
+ test.Printf(_L("\n"));
+ }
+
+void HcrSimMultipleGet(SSettingC* aRepository, TUint aNumberOfSettings)
+ {
+ test.Next(_L("MultipleGet"));
+ TInt r;
+ SSettingId largesetting;
+ largesetting.iCat = 0;
+ largesetting.iKey = 0;
+
+ SSettingC* setting;
+ SSettingId id;
+ id.iCat = 0;
+ id.iKey = 0;
+
+
+
+ test.Start(_L("Multiple Get on individual settings"));
+
+ for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
+ {
+ if (setting->iName.iType < 0x00010000)
+ {
+ test.Printf(_L("(0x%08x, 0x%08x)\n"), id.iCat, id.iKey);
+ TInt i;
+
+ TInt32 val;
+ TSettingType type;
+ TInt err;
+
+
+ test.Next(_L("Multiple Get, with non-existing category or element id"));
+
+ // Try all permutations of optional values
+ // i == 0 || i == 1 Just a single setting from the repostitory
+ // i == 2 || i == 3 Valid category and invalid element id
+ // i == 4 || i == 5 Invalid category and valid element id
+ // i == 6 || i == 7 Invalid category and element id
+ for (i = 0; i < 8; i++)
+ {
+ //Just a single setting from the repository
+ if(i == 0 || i == 1)
+ {
+ //test.Printf(_L("Single setting, valid element && valid category\n"));
+ id.iCat = setting->iName.iId.iCat;
+ id.iKey = setting->iName.iId.iKey;
+
+ //test.Printf(_L("-Permutation %02x\n"), i);
+ r = HcrSimTest.GetWordSettings(1, &id, &val,
+ (i & 0x1 ? &type : NULL), &err);
+ //HCR should return 1
+ test_Equal(1, r);
+ test_Equal(setting->iValue.iLit.iInt32, val);
+ if (i & 0x1)
+ {
+ test_Equal(setting->iName.iType, type);
+ }
+
+ test_KErrNone(err);
+ }
+
+ //Valid category and invalid element id
+ if(i == 2 || i == 3)
+ {
+ //test.Printf(_L("Single setting, invalid element && valid category\n"));
+ id.iCat = setting->iName.iId.iCat;
+ id.iKey = KTestInvalidSettingId;
+
+
+ r = HcrSimTest.GetWordSettings(1, &id, &val,
+ (i & 0x1 ? &type : NULL), &err);
+
+ //HCR should return 0
+ test_Equal(0, r);
+ test_Equal(0, val);
+ if (i & 0x1)
+ {
+ //HCR returns ETypeUndefined
+ test_Equal(0, type);
+ }
+
+ test_Equal(KErrNotFound,err);
+ }
+
+ //Invalid category and valid element id
+ if(i == 4 || i == 5)
+ {
+ id.iCat = KTestInvalidCategory;
+ id.iKey = setting->iName.iId.iKey;
+
+ //test.Printf(_L("Single setting, invalid element && valid category\n"));
+ r = HcrSimTest.GetWordSettings(1, &id, &val,
+ (i & 0x1 ? &type : NULL), &err);
+ //HCR should return 1
+ test_Equal(0, r);
+ test_Equal(0, val);
+ if (i & 0x1)
+ {
+ //HCR returns ETypeUndefined
+ test_Equal(0, type);
+ }
+
+ test_Equal(KErrNotFound, err);
+ }
+
+ //Invalid category and element id
+ if(i == 6 || i == 7)
+ {
+ id.iCat = KTestInvalidCategory;
+ id.iKey = KTestInvalidSettingId;
+
+ //test.Printf(_L("Single setting, invalid element && valid category\n"));
+ r = HcrSimTest.GetWordSettings(1, &id, &val,
+ (i & 0x1 ? &type : NULL), &err);
+ //HCR should return 1
+ test_Equal(0, r);
+ test_Equal(0, val);
+ if (i & 0x1)
+ {
+ //HCR returns ETypeUndefined
+ test_Equal(0, type);
+ }
+ test_Equal(KErrNotFound, err);
+ }
+ }
+ }
+ else if (largesetting.iKey == 0)
+ {
+ // save for later
+ largesetting.iCat = setting->iName.iId.iCat;
+ largesetting.iKey = setting->iName.iId.iKey;
+ }
+ }
+
+
+
+ test.Next(_L("Multiple Get, some user input parameters are wrong"));
+
+
+ TInt nosettings = 0;
+ for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
+ {
+ if (setting->iName.iType < 0x00010000)
+ {
+ nosettings++;
+ }
+ test_Compare(0, <, nosettings);
+ }
+
+
+ SSettingId* ids;
+ TInt32* vals;
+ TSettingType* types;
+ TInt* errs;
+
+
+ ids = (SSettingId*) User::Alloc(sizeof(SSettingId) * nosettings);
+ test_NotNull(ids);
+ vals = (TInt32*) User::Alloc(sizeof(TInt32) * nosettings);
+ test_NotNull(vals);
+ types = (TSettingType*) User::Alloc(sizeof(TSettingType) * nosettings);
+ test_NotNull(types);
+ errs = (TInt*) User::Alloc(sizeof(TInt) * nosettings);
+ test_NotNull(errs);
+
+ TUint n = 0;
+
+ for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
+ {
+ if (setting->iName.iType < 0x00010000)
+ {
+ ids[n].iCat = setting->iName.iId.iCat;
+ ids[n].iKey = setting->iName.iId.iKey;
+ n++;
+ }
+ }
+ test_Equal(nosettings, n);
+
+
+
+ test.Next(_L("Number of settings is negative \n"));
+ r = HcrSimTest.GetWordSettings(-1 * nosettings, ids, vals, types, errs);
+
+ //HCR returns KErrArgument
+ test_Equal(KErrArgument, r);
+
+
+ test.Printf(_L("Pointer to errors array is NULL \n"));
+ r = HcrSimTest.GetWordSettings(nosettings, ids, vals, types, NULL);
+
+ //HCR returns KErrArgument
+ test_Equal(KErrArgument, r);
+
+
+ test.Printf(_L("Pointer to ids is NULL \n"));
+ r = HcrSimTest.GetWordSettings(nosettings, NULL, vals, types, errs);
+
+ //HCR returns KErrArgument
+ test_Equal(KErrArgument, r);
+
+ User::Free(ids);
+ User::Free(vals);
+ User::Free(types);
+ User::Free(errs);
+
+
+
+ test.Next(_L("Multiple Get on all settings"));
+ nosettings = 0;
+ for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
+ {
+ if (setting->iName.iType < 0x00010000)
+ {
+ nosettings++;
+ }
+ test_Compare(0, <, nosettings);
+ }
+
+ ids = (SSettingId*) User::Alloc(sizeof(SSettingId) * nosettings);
+ test_NotNull(ids);
+ vals = (TInt32*) User::Alloc(sizeof(TInt32) * nosettings);
+ test_NotNull(vals);
+ types = (TSettingType*) User::Alloc(sizeof(TSettingType) * nosettings);
+ test_NotNull(types);
+ errs = (TInt*) User::Alloc(sizeof(TInt) * nosettings);
+ test_NotNull(errs);
+
+ n = 0;
+
+ for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
+ {
+ if (setting->iName.iType < 0x00010000)
+ {
+ ids[n].iCat = setting->iName.iId.iCat;
+ ids[n].iKey = setting->iName.iId.iKey;
+ n++;
+ }
+ }
+ test_Equal(nosettings, n);
+
+
+ // Try all permutations of optional values
+ TInt i;
+ for (i = 0; i < 2; i++)
+ {
+ r = HcrSimTest.GetWordSettings(nosettings, ids, vals,
+ (i & 0x1 ? types : NULL), errs);
+ //HCR returns number of found elements
+ test_Equal(nosettings, r);
+
+ // Check values
+ n = 0;
+ for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
+ {
+ if (setting->iName.iType < 0x00010000)
+ {
+ test_Equal(setting->iValue.iLit.iInt32, vals[n]);
+ if (i & 0x1)
+ {
+ test_Equal(setting->iName.iType,types[n]);
+ }
+ test_KErrNone(errs[n]);
+ n++;
+ }
+ }
+ test_Equal(nosettings, n);
+ }
+ User::Free(ids);
+ User::Free(vals);
+ User::Free(types);
+ User::Free(errs);
+
+ test.Next(_L("Multiple Get on all settings + inexistent"));
+ nosettings = 1;
+ for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
+ {
+ if (setting->iName.iType < 0x00010000)
+ {
+ nosettings++;
+ }
+ test_Compare(0, <, nosettings);
+ }
+ ids = (SSettingId*) User::Alloc(sizeof(SSettingId) * nosettings);
+ test_NotNull(ids);
+ vals = (TInt32*) User::Alloc(sizeof(TInt32) * nosettings);
+ test_NotNull(vals);
+ types = (TSettingType*) User::Alloc(sizeof(TSettingType) * nosettings);
+ test_NotNull(types);
+ errs = (TInt*) User::Alloc(sizeof(TInt) * nosettings);
+ test_NotNull(errs);
+ ids[0].iCat = KTestInvalidCategory;
+ ids[0].iKey = KTestInvalidSettingId;
+
+
+ n = 1;
+ for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
+ {
+ if (setting->iName.iType < 0x00010000)
+ {
+ ids[n].iCat = setting->iName.iId.iCat;
+ ids[n].iKey = setting->iName.iId.iKey;
+ n++;
+ }
+ }
+
+ test_Equal(nosettings, n);
+
+ // Try all permutations of optional values
+ for (i = 0; i < 2; i++)
+ {
+ r = HcrSimTest.GetWordSettings(nosettings, ids, vals,
+ (i & 0x1 ? types : NULL), errs);
+ test_Equal(nosettings - 1, r);
+
+ // Check values
+ if (i & 0x1)
+ {
+ test_Equal(ETypeUndefined, types[0]);
+ }
+ test_Equal(KErrNotFound, errs[0]);
+
+ n = 1;
+ for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
+ {
+ if (setting->iName.iType < 0x00010000)
+ {
+ test_Equal(setting->iValue.iLit.iInt32, vals[n]);
+ if (i & 0x1)
+ {
+ test_Equal(setting->iName.iType, types[n]);
+ }
+
+ test_KErrNone(errs[n]);
+
+ n++;
+ }
+ }
+ test_Equal(nosettings, n);
+ }
+ User::Free(ids);
+ User::Free(vals);
+ User::Free(types);
+ User::Free(errs);
+
+ test.Next(_L("Multiple Get on a large setting"));
+ if (largesetting.iKey)
+ {
+ TInt32 value;
+ TSettingType type;
+ TInt theerror = 1;
+ r = HcrSimTest.GetWordSettings(1, &largesetting, &value, &type, &theerror);
+ test_Equal(0, r);
+ test_Equal(KErrArgument, theerror);
+ }
+ else
+ {
+ test.Printf(_L("No large setting found in repositories!\n"));
+ }
+ test.End();
+ }
+
+void HcrSimNumSettingsInCategory(SSettingC* aRepository, TUint aNumberOfSettings)
+ {
+ test.Next(_L("NumSettingsInCategory"));
+ TInt r;
+ // Build a hash table with number of settings for each category
+ RHashMap<TUint32, TInt> numsettings;
+ SSettingC* setting;
+ TInt* pV = NULL;
+ TInt value = 0;
+ for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
+ {
+ pV = numsettings.Find(setting->iName.iId.iCat);
+ if(pV)
+ value = *pV;
+ if (!pV)
+ {
+ r = numsettings.Insert(setting->iName.iId.iCat, 1);
+ test_KErrNone(r);
+ }
+ else
+ {
+ r = numsettings.Remove(setting->iName.iId.iCat);
+ test_KErrNone(r);
+ r = numsettings.Insert(setting->iName.iId.iCat, value + 1);
+ test_KErrNone(r);
+ }
+ }
+
+ // Now compare hash table with values returned by FindNumSettingsInCategory
+ RHashMap<TUint32, TInt>::TIter catiter(numsettings);
+ for (;;)
+ {
+ const TUint32* nextcat = catiter.NextKey();
+ if (!nextcat)
+ {
+ break;
+ }
+ test.Printf(_L("Category %08x\n"), *nextcat);
+ const TInt* v = numsettings.Find(*nextcat);
+ test_NotNull(v);
+ r = HcrSimTest.FindNumSettingsInCategory(*nextcat);
+ test_Equal(*v, r);
+ }
+ numsettings.Close();
+ }
+
+void HcrSimFindSettingsCategory(SSettingC* aRepository, TUint aNumberOfSettings)
+ {
+ test.Next(_L("FindSettingsCategory"));
+ TInt r;
+ // Build a hash table with number of settings for each category
+ RHashMap<TUint32, TInt> numsettings;
+ SSettingC* setting;
+ TInt* pV = NULL;
+ TInt value = 0;
+ for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
+ {
+ pV = numsettings.Find(setting->iName.iId.iCat);
+ if(pV)
+ value = *pV;
+ if (!pV)
+ {
+ r = numsettings.Insert(setting->iName.iId.iCat, 1);
+ test_KErrNone(r);
+ }
+ else
+ {
+ r = numsettings.Remove(setting->iName.iId.iCat);
+ test_KErrNone(r);
+ r = numsettings.Insert(setting->iName.iId.iCat, value + 1);
+ test_KErrNone(r);
+ }
+ }
+
+ //
+ RHashMap<TUint32, TInt>::TIter catiter(numsettings);
+ for (;;)
+ {
+ const TUint32* nextcat = catiter.NextKey();
+ if (!nextcat)
+ {
+ break;
+ }
+ test.Printf(_L("Category %08x"), *nextcat);
+ const TInt* v = numsettings.Find(*nextcat);
+ test_NotNull(v);
+
+ // Allocate memory for holding array of settings
+ TElementId* elids;
+ TSettingType* types;
+ TUint16* lens;
+ elids = (TElementId*) User::Alloc(*v * sizeof(TElementId));
+ test_NotNull(elids);
+ types = (TSettingType*) User::Alloc(*v * sizeof(TSettingType));
+ test_NotNull(types);
+ lens = (TUint16*) User::Alloc(*v * sizeof(TUint16));
+ test_NotNull(lens);
+
+ // Try all permutations of optional values
+ TInt i;
+ for (i = 0; i < 3; i++)
+ {
+ test.Printf(_L("."));
+ Mem::Fill(elids, *v * sizeof(TElementId), 0xcc);
+ Mem::Fill(types, *v * sizeof(TSettingType), 0xcc);
+ Mem::Fill(lens, *v * sizeof(TUint16), 0xcc);
+ TUint32 numfound;
+ r = HcrSimTest.FindSettings(*nextcat,
+ *v, numfound,
+ elids,
+ i & 0x1 ? types : NULL,
+ i & 0x2 ? lens : NULL);
+ numfound = r;
+ test_Compare(0, <=, r);
+ test_Equal(*v, r);
+
+
+ // Check returned list of element ids
+ TUint j;
+ for (j = 0; j < numfound; j++)
+ {
+ // Find current element in the test array
+ for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
+ {
+ if ((setting->iName.iId.iCat == *nextcat) && (setting->iName.iId.iKey == elids[j]))
+ {
+ break;
+ }
+ }
+ test_Compare(setting,<,aRepository+aNumberOfSettings); // Fail if element not found
+ switch (setting->iName.iType)
+ {
+ case ETypeInt32:
+ case ETypeInt16:
+ case ETypeInt8:
+ case ETypeBool:
+ case ETypeUInt32:
+ case ETypeUInt16:
+ case ETypeUInt8:
+ case ETypeLinAddr:
+ if (i & 0x1)
+ {
+ test_Equal(setting->iName.iType, types[j]);
+ }
+ if (i & 0x2)
+ {
+ test_Equal(0, lens[j]);
+ }
+ break;
+ // Fall-through
+ case ETypeBinData:
+ case ETypeText8:
+ case ETypeArrayInt32:
+ case ETypeArrayUInt32:
+ case ETypeInt64:
+ case ETypeUInt64:
+ if (i & 0x1)
+ {
+ test_Equal(setting->iName.iType, types[j]);
+ }
+ if (i & 0x2)
+ {
+ test_Equal(setting->iName.iLen, lens[j]);
+ }
+ break;
+ default:
+ test(EFalse);
+ }
+ }
+ // Check all expected elements are in the returned list of element ids
+ for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
+ {
+ if ((setting->iName.iId.iCat == *nextcat))
+ {
+ for (j = 0; j < numfound; j++)
+ {
+ if (elids[j] == setting->iName.iId.iKey)
+ {
+ break;
+ }
+ }
+ test_Compare(j, <=, numfound);
+ }
+ }
+ }
+ User::Free(elids);
+ User::Free(types);
+ User::Free(lens);
+ test.Printf(_L("\n"));
+ }
+ numsettings.Close();
+ }
+
+struct TTestFindSettingsPatternArgs
+ {
+ TUint32 iMask;
+ TUint32 iPattern;
+ };
+
+const TTestFindSettingsPatternArgs KTestFindSettingsPatternArgs[] = {
+// iMask iPattern
+ {0x00000000, 0x00000000},
+/* {0xfffffff0, 0x00000000},
+ {0xffffffff, 0x00000001},*/
+};
+
+void HcrSimFindSettingsPattern(SSettingC* aRepository, TUint aNumberOfSettings)
+ {
+ test.Next(_L("FindSettingsPattern"));
+ TInt r;
+ TUint i;
+
+ // Allocate memory for holding array of settings
+ TElementId* elids;
+ TSettingType* types;
+ TUint16* lens;
+ elids = (TElementId*) User::Alloc(aNumberOfSettings * sizeof(TElementId));
+ test_NotNull(elids);
+ types = (TSettingType*) User::Alloc(aNumberOfSettings * sizeof(TSettingType));
+ test_NotNull(types);
+ lens = (TUint16*) User::Alloc(aNumberOfSettings * sizeof(TUint16));
+ test_NotNull(lens);
+
+ for (i = 0; i < sizeof(KTestFindSettingsPatternArgs) / sizeof(TTestFindSettingsPatternArgs); i++)
+ {
+ test.Printf(_L("iMask=0x%08x iPattern=0x%08x\n"),
+ KTestFindSettingsPatternArgs[i].iMask,
+ KTestFindSettingsPatternArgs[i].iPattern);
+
+ // Test each category
+ TUint j;
+ for (j = 0; j < sizeof(KTestCategories) / sizeof(TCategoryUid); j++)
+ {
+ test.Printf(_L("Category 0x%08x: "), KTestCategories[j]);
+
+ // Test all possible permutations of optional arguments
+ TUint k;
+ for (k = 0; k < 3; k++)
+ {
+ TUint32 numfound;
+ // Actual API call
+ r = HcrSimTest.FindSettings(
+ KTestCategories[j],
+ aNumberOfSettings,
+ KTestFindSettingsPatternArgs[i].iMask,
+ KTestFindSettingsPatternArgs[i].iPattern,
+ numfound,
+ elids,
+ (k & 0x1 ? types : NULL),
+ (k & 0x2 ? lens : NULL));
+ test_Compare(0, <=, r);
+
+ numfound = r;
+
+ test.Printf(_L("%d match(es)\n"), r);
+
+ // Check that all returned element ids satisfy the conditions
+ TUint l;
+ for (l = 0; l < numfound; l++)
+ {
+ test_Assert(
+ (KTestFindSettingsPatternArgs[i].iMask & KTestFindSettingsPatternArgs[i].iPattern) ==
+ (KTestFindSettingsPatternArgs[i].iMask & elids[l]), test.Printf(_L("!!%08x!!\n"), elids[l])
+ );
+ //Somehow the macro test_Compare consider TInt32 instead TUint32
+ //as a result comparasion is done by this way:
+ //RTEST: (0x0 (0) < 0x80000000 (-2147483648)) == EFalse at line 1038
+ //althought 0x80000000 > 0, with the signed form this number will be
+ //-2147483648.
+ //test_Compare(KTestFindSettingsPatternArgs[i].iAtId, <=, elids[l]);
+ }
+
+ // Check that all elements that satisfy the conditions have been returned
+ SSettingC* setting;
+ TUint32 numsettings = 0;
+ for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
+ {
+ if ((setting->iName.iId.iCat == KTestCategories[j])
+ && ((KTestFindSettingsPatternArgs[i].iMask & KTestFindSettingsPatternArgs[i].iPattern) ==
+ (KTestFindSettingsPatternArgs[i].iMask & setting->iName.iId.iKey)))
+ {
+ for (l = 0; l < numfound; l++)
+ {
+ if (setting->iName.iId.iKey == elids[l])
+ {
+ break;
+ }
+ }
+ test_Assert(l < numfound, test.Printf(_L("!!%08x!!\n"), elids[l]));
+
+ // Check type and size returned
+ switch (setting->iName.iType)
+ {
+ case ETypeInt32:
+ case ETypeInt16:
+ case ETypeInt8:
+ case ETypeBool:
+ case ETypeUInt32:
+ case ETypeUInt16:
+ case ETypeUInt8:
+ case ETypeLinAddr:
+ if (k & 0x1)
+ {
+ test_Equal(setting->iName.iType, types[l]);
+ }
+ if (k & 0x2)
+ {
+ test_Equal(0, lens[l]);
+ }
+ break;
+ // Fall-through
+ case ETypeBinData:
+ case ETypeText8:
+ case ETypeArrayInt32:
+ case ETypeArrayUInt32:
+ case ETypeInt64:
+ case ETypeUInt64:
+ if (k & 0x1)
+ {
+ test_Equal(setting->iName.iType, types[l]);
+ }
+ if (k & 0x2)
+ {
+ test_Equal(setting->iName.iLen, lens[l]);
+ }
+ break;
+ default:
+ test(EFalse);
+ }
+ numsettings++;
+ }
+ }
+ test_Equal(numsettings, numfound);
+ }
+ }
+ }
+
+ // Free memory
+ User::Free(elids);
+ User::Free(types);
+ User::Free(lens);
+ }
+
+void HcrSimApiNegative(const TInt aExpectedErrorCode, const TUint32 aCategory, const TUint32 aSettingId)
+ {
+ test.Next(_L("ApiNegative"));
+ test.Printf(_L("Expected error: %d\nSetting (%08x, %08x)\n"), aExpectedErrorCode, aCategory, aSettingId);
+ TSettingId id(aCategory, aSettingId);
+ TInt r;
+ {
+ TInt32 val;
+ r = HcrSimTest.GetInt(id, val);
+ test_Equal(aExpectedErrorCode, r);
+ }
+ {
+ TInt16 val;
+ r = HcrSimTest.GetInt(id, val);
+ test_Equal(aExpectedErrorCode, r);
+ }
+ {
+ TInt8 val;
+ r = HcrSimTest.GetInt(id, val);
+ test_Equal(aExpectedErrorCode, r);
+ }
+ {
+ TBool val;
+ r = HcrSimTest.GetBool(id, val);
+ test_Equal(aExpectedErrorCode, r);
+ }
+ {
+ TUint32 val;
+ r = HcrSimTest.GetUInt(id, val);
+ test_Equal(aExpectedErrorCode, r);
+ }
+ {
+ TUint16 val;
+ r = HcrSimTest.GetUInt(id, val);
+ test_Equal(aExpectedErrorCode, r);
+ }
+ {
+ TUint8 val;
+ r = HcrSimTest.GetUInt(id, val);
+ test_Equal(aExpectedErrorCode, r);
+ }
+ {
+ TLinAddr val;
+ r = HcrSimTest.GetLinAddr(id, val);
+ test_Equal(aExpectedErrorCode, r);
+ }
+ {
+ TBuf8<KMaxSettingLength> dval;
+ TUint8* pval;
+ pval = (TUint8*) User::Alloc(KMaxSettingLength);
+ test_NotNull(pval);
+ //
+ r = HcrSimTest.GetData(id, dval);
+ test_Equal(aExpectedErrorCode, r);
+ //
+ TUint16 actuallength;
+ r = HcrSimTest.GetData(id, KMaxSettingLength, pval, actuallength);
+ test_Equal(aExpectedErrorCode, r);
+ //
+ User::Free(pval);
+ }
+ {
+ TBuf8<KMaxSettingLength> dval;
+ TText8* pval;
+ pval = (TText8*) User::Alloc(KMaxSettingLength);
+ test_NotNull(pval);
+ //
+ r = HcrSimTest.GetString(id, dval);
+ test_Equal(aExpectedErrorCode, r);
+ //
+ TUint16 actuallength;
+ r = HcrSimTest.GetString(id, KMaxSettingLength, pval, actuallength);
+ test_Equal(aExpectedErrorCode, r);
+ //
+ User::Free(pval);
+ }
+ {
+ TInt32* pval;
+ pval = (TInt32*) User::Alloc(KMaxSettingLength);
+ test_NotNull(pval);
+ //
+ TUint16 actuallength;
+ r = HcrSimTest.GetArray(id, KMaxSettingLength, pval, actuallength);
+ test_Equal(aExpectedErrorCode, r);
+ //
+ User::Free(pval);
+ }
+ {
+ TUint32* pval;
+ pval = (TUint32*) User::Alloc(KMaxSettingLength);
+ test_NotNull(pval);
+ //
+ TUint16 actuallength;
+ r = HcrSimTest.GetArray(id, KMaxSettingLength, pval, actuallength);
+ test_Equal(aExpectedErrorCode, r);
+ //
+ User::Free(pval);
+ }
+ {
+ TInt64 val;
+ r = HcrSimTest.GetInt(id, val);
+ test_Equal(aExpectedErrorCode, r);
+ }
+ {
+ TUint64 val;
+ r = HcrSimTest.GetUInt(id, val);
+ test_Equal(aExpectedErrorCode, r);
+ }
+
+ {
+ TSettingType type = ETypeUndefined;
+ TUint16 len = 0;
+ TUint32 numfound = 0;
+ TElementId elid = 0;
+
+
+ //
+ r = HcrSimTest.GetTypeAndSize(id, type, len);
+ test_Equal(aExpectedErrorCode, r);
+
+ //
+ r = HcrSimTest.FindNumSettingsInCategory(id.iCat);
+ if (aExpectedErrorCode == KErrNotFound)
+ {
+ test_Equal(0, r);
+ }
+
+ //
+ r = HcrSimTest.FindSettings(id.iCat, 1, numfound, &elid, &type, &len);
+ if (aExpectedErrorCode == KErrNotFound)
+ {
+ test_Equal(0, r);
+ }
+
+ //
+ r = HcrSimTest.FindSettings(id.iCat, 1, 0, 0, numfound, &elid, &type, &len);
+ if (aExpectedErrorCode == KErrNotFound)
+ {
+ test_Equal(0, r);
+ }
+
+ }
+ {
+ SSettingId settingid;
+ settingid.iCat = id.iCat;
+ settingid.iKey = id.iKey;
+
+ TInt32 val;
+ TInt err;
+ TSettingType type;
+ TInt i;
+
+ for(i = 0; i < 4; ++i)
+ {
+ // test parameter combinations where aIds[], aValues[], aErrors[] are NULL
+ r = HcrSimTest.GetWordSettings(i, (i==1)?NULL:&settingid, (i==2)?NULL:&val, &type, (i==3)?NULL:&err);
+ if(r != KErrArgument)
+ {
+ test_Equal(aExpectedErrorCode, r);
+ }
+ }
+ }
+
+ }
+
+void HcrSimTestApiTests(SSettingC* aRepository, TUint aNumberOfSettings)
+ {
+ if (aRepository && aNumberOfSettings > 0)
+ {
+ HcrSimGetSettings(aRepository, aNumberOfSettings);
+ HcrSimGetSettingsNegative(aRepository, aNumberOfSettings);
+ HcrSimSettingProperties(aRepository, aNumberOfSettings);
+ HcrSimMultipleGet(aRepository, aNumberOfSettings);
+ HcrSimNumSettingsInCategory(aRepository, aNumberOfSettings);
+ HcrSimFindSettingsCategory(aRepository, aNumberOfSettings);
+ HcrSimFindSettingsPattern(aRepository, aNumberOfSettings);
+ }
+
+ HcrSimApiNegative(KErrNotFound, KTestInvalidCategory, KTestInvalidSettingId);
+ HcrSimApiNegative(KErrNotFound, KTestInvalidCategory, 1);
+ }
+
+void HcrPslTests(const TDesC& aDriver)
+ {
+ test.Next(_L("PSL tests"));
+ test.Start(_L("Load Device Driver"));
+ test.Printf(_L("%S\n"), &aDriver);
+ TInt r;
+ r = User::LoadLogicalDevice(aDriver);
+ if (r == KErrAlreadyExists)
+ {
+ test.Printf(_L("Unload Device Driver and load it again\n"));
+ r = User::FreeLogicalDevice(aDriver);
+ test_KErrNone(r);
+ r = User::LoadLogicalDevice(aDriver);
+ test_KErrNone(r);
+ }
+ else
+ {
+ test_KErrNone(r);
+ }
+
+ test.Next(_L("Open test channel"));
+ r = HcrSimTest.Open(aDriver);
+ test_KErrNone(r);
+
+ test.Next(_L("Fail PSL object creation"));
+ r = HcrSimTest.InitExtension(ETestVariantObjectCreateFail);
+ test_Equal(KErrNoMemory, r);
+ HcrSimApiNegative(KErrNotReady, 1, 1);
+
+ test.Next(_L("Fail PSL initialisation"));
+ r = HcrSimTest.InitExtension(ETestInitialisationFail);
+ test_Equal(KErrBadPower, r); // the random error code used in the test PSL
+ HcrSimApiNegative(KErrNotReady, 1, 1);
+
+ test.Next(_L("PSL's GetCompiledRepositoryAddress negative tests"));
+ r = HcrSimTest.InitExtension(ETestNullRepositoryKErrNone); // *** Null Repository but returns KErrNone
+ test_Equal(KErrArgument, r);
+
+ test.Next(_L("PSL's GetCompiledRepositoryAddress return wrong error code"));
+ r = HcrSimTest.InitExtension(ETestBadErrorCode); // *** Null Repository but returns KErrNone
+ test_Equal(KErrCommsParity, r);
+
+ test.Next(_L("Close test channel and unload device driver"));
+ HcrSimTest.Close();
+ r = User::FreeLogicalDevice(aDriver);
+ test_KErrNone(r);
+ test.End();
+ }
+
+void HcrSimTests(const TDesC& aDriver)
+ {
+ test.Next(_L("HCR Simulator tests"));
+ test.Start(_L("Load Device Driver"));
+ test.Printf(_L("%S\n"), &aDriver);
+ TInt r;
+ r = User::LoadLogicalDevice(aDriver);
+ if (r == KErrAlreadyExists)
+ {
+ test.Printf(_L("Unload Device Driver and load it again\n"));
+ r = User::FreeLogicalDevice(aDriver);
+ test_KErrNone(r);
+ r = User::LoadLogicalDevice(aDriver);
+ test_KErrNone(r);
+ }
+ else
+ {
+ test_KErrNone(r);
+ }
+
+ test.Next(_L("Open test channel"));
+ r = HcrSimTest.Open(aDriver);
+ test_KErrNone(r);
+ HcrSimApiNegative(KErrNotReady, 1, 1);
+
+ test.Next(_L("Initialise HCR"));
+ r = HcrSimTest.InitExtension();
+ test_KErrNone(r);
+
+ test.Next(_L("Compiled"));
+ test.Start(_L("Initialisation"));
+ r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::ECoreRepos);
+ test_KErrNone(r);
+ r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::EOverrideRepos);
+ test_KErrNone(r);
+ HcrSimTestApiTests(SettingsList, sizeof(SettingsList) / sizeof(SSettingC));
+ test.End();
+
+ test.Next(_L("Compiled+File"));
+ test.Start(_L("Initialisation"));
+ r = HcrSimTest.SwitchRepository(KTestFileRepos, HCRInternal::ECoreRepos);
+ test_KErrNone(r);
+ r = HcrSimTest.CheckIntegrity();
+ test_KErrNone(r);
+ HcrSimTestApiTests(SettingsList2, sizeof(SettingsList2) / sizeof(SSettingC));
+ test.End();
+
+ test.Next(_L("Compiled+File+Nand"));
+ test.Start(_L("Initialisation"));
+ r = HcrSimTest.SwitchRepository(KTestNandRepos, HCRInternal::EOverrideRepos);
+ test_KErrNone(r);
+ r = HcrSimTest.CheckIntegrity();
+ test_KErrNone(r);
+ HcrSimTestApiTests(SettingsList3, sizeof(SettingsList3) / sizeof(SSettingC));
+ test.End();
+
+ test.Next(_L("Compiled+Nand"));
+ test.Start(_L("Initialisation"));
+ r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::ECoreRepos);
+ test_KErrNone(r);
+ r = HcrSimTest.CheckIntegrity();
+ test_KErrNone(r);
+ HcrSimTestApiTests(SettingsList4, sizeof(SettingsList4) / sizeof(SSettingC));
+ test.End();
+
+ test.Next(_L("Compiled+Empty+Nand"));
+ test.Start(_L("Initialisation"));
+ r = HcrSimTest.SwitchRepository(KTestEmpty, HCRInternal::ECoreRepos);
+ test_KErrNone(r);
+ r = HcrSimTest.CheckIntegrity();
+ test_KErrNone(r);
+ HcrSimTestApiTests(SettingsList4, sizeof(SettingsList4) / sizeof(SSettingC));
+ test.End();
+
+ // Reload device driver without a compiled repository this time
+ test.Next(_L("Reload Device Driver"));
+ HcrSimTest.Close();
+ r = User::FreeLogicalDevice(aDriver);
+ test_KErrNone(r);
+ r = User::LoadLogicalDevice(aDriver);
+ test_KErrNone(r);
+ r = HcrSimTest.Open(aDriver);
+ test_KErrNone(r);
+ r = HcrSimTest.InitExtension(ETestNullRepository); // *** The NULL Repository ***
+ test_KErrNone(r);
+
+ test.Next(_L("NULL+File"));
+ test.Start(_L("Initialisation"));
+ r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::EOverrideRepos);
+ test_KErrNone(r);
+ r = HcrSimTest.CheckIntegrity();
+ test_KErrNone(r);
+ HcrSimTestApiTests(SettingsList7, sizeof(SettingsList7) / sizeof(SSettingC));
+ test.End();
+
+ test.Next(_L("NULL+File+Nand"));
+ test.Start(_L("Initialisation"));
+ r = HcrSimTest.SwitchRepository(KTestNandRepos, HCRInternal::EOverrideRepos);
+ test_KErrNone(r);
+ r = HcrSimTest.CheckIntegrity();
+ test_KErrNone(r);
+ HcrSimTestApiTests(SettingsList6, sizeof(SettingsList6) / sizeof(SSettingC));
+ test.End();
+
+ test.Next(_L("NULL+Nand"));
+ test.Start(_L("Initialisation"));
+ r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::ECoreRepos);
+ test_KErrNone(r);
+ r = HcrSimTest.CheckIntegrity();
+ test_KErrNone(r);
+ HcrSimTestApiTests(SettingsList5, sizeof(SettingsList5) / sizeof(SSettingC));
+ test.End();
+
+ test.Next(_L("Reload Device Driver"));
+ HcrSimTest.Close();
+ r = User::FreeLogicalDevice(aDriver);
+ test_KErrNone(r);
+ r = User::LoadLogicalDevice(aDriver);
+ test_KErrNone(r);
+ r = HcrSimTest.Open(aDriver);
+ test_KErrNone(r);
+ r = HcrSimTest.InitExtension(ETestEmptyRepository); // *** The Empty Repository ***
+ test_KErrNone(r);
+
+ test.Next(_L("Empty+Nand"));
+ test.Start(_L("Initialisation"));
+ r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::ECoreRepos);
+ test_KErrNone(r);
+ r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::EOverrideRepos);
+ test_KErrNone(r);
+ r = HcrSimTest.SwitchRepository(KTestNandRepos, HCRInternal::EOverrideRepos);
+ test_KErrNone(r);
+ r = HcrSimTest.CheckIntegrity();
+ test_KErrNone(r);
+ HcrSimTestApiTests(SettingsList5, sizeof(SettingsList5) / sizeof(SSettingC));
+ test.End();
+
+ test.Next(_L("Empty+File+Nand"));
+ test.Start(_L("Initialisation"));
+ r = HcrSimTest.SwitchRepository(KTestFileRepos, HCRInternal::ECoreRepos);
+ test_KErrNone(r);
+ r = HcrSimTest.CheckIntegrity();
+ test_KErrNone(r);
+ HcrSimTestApiTests(SettingsList6, sizeof(SettingsList6) / sizeof(SSettingC));
+ test.End();
+
+ test.Next(_L("Empty+File"));
+ test.Start(_L("Initialisation"));
+ r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::EOverrideRepos);
+ test_KErrNone(r);
+ r = HcrSimTest.CheckIntegrity();
+ test_KErrNone(r);
+ HcrSimTestApiTests(SettingsList7, sizeof(SettingsList7) / sizeof(SSettingC));
+ test.End();
+
+ test.Next(_L("No Repository (Empty)"));
+ test.Start(_L("Initialisation"));
+ r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::ECoreRepos);
+ test_KErrNone(r);
+ r = HcrSimTest.CheckIntegrity();
+ test_KErrNone(r);
+ HcrSimTestApiTests(NULL, 0);
+ test.End();
+
+ test.Next(_L("All Repositories Empty"));
+ test.Start(_L("Initialisation"));
+ r = HcrSimTest.SwitchRepository(KTestEmpty, HCRInternal::ECoreRepos);
+ test_KErrNone(r);
+ r = HcrSimTest.SwitchRepository(KTestEmpty, HCRInternal::EOverrideRepos);
+ test_KErrNone(r);
+ r = HcrSimTest.CheckIntegrity();
+ test_KErrNone(r);
+ HcrSimTestApiTests(NULL, 0);
+ test.End();
+
+ test.Next(_L("Reload Device Driver"));
+ HcrSimTest.Close();
+ r = User::FreeLogicalDevice(aDriver);
+ test_KErrNone(r);
+ r = User::LoadLogicalDevice(aDriver);
+ test_KErrNone(r);
+ r = HcrSimTest.Open(aDriver);
+ test_KErrNone(r);
+ r = HcrSimTest.InitExtension(ETestIgnoreCoreImgRepository); // *** Ignore Core Image Repository ***
+ test_KErrNone(r);
+
+ test.Next(_L("Compiled+File(Ignored)+Nand")); // Should be same as Compiled+Nand
+ test.Start(_L("Initialisation"));
+ r = HcrSimTest.SwitchRepository(KTestNandRepos, HCRInternal::EOverrideRepos);
+ test_KErrNone(r);
+ r = HcrSimTest.CheckIntegrity();
+ test_KErrNone(r);
+ HcrSimTestApiTests(SettingsList4, sizeof(SettingsList4) / sizeof(SSettingC));
+ test.End();
+
+ test.Next(_L("Reload Device Driver (Corrupt1)"));
+ HcrSimTest.Close();
+ r = User::FreeLogicalDevice(aDriver);
+ test_KErrNone(r);
+ r = User::LoadLogicalDevice(aDriver);
+ test_KErrNone(r);
+ r = HcrSimTest.Open(aDriver);
+ test_KErrNone(r);
+ r = HcrSimTest.InitExtension(ETestCorruptRepository1); // *** Repository not ordered ***
+#ifdef _DEBUG
+ test_Equal(KErrCorrupt, r);
+#else
+ test_KErrNone(r);
+#endif // _DEBUG
+
+ test.Next(_L("Reload Device Driver (Corrupt2)"));
+ HcrSimTest.Close();
+ r = User::FreeLogicalDevice(aDriver);
+ test_KErrNone(r);
+ r = User::LoadLogicalDevice(aDriver);
+ test_KErrNone(r);
+ r = HcrSimTest.Open(aDriver);
+ test_KErrNone(r);
+ r = HcrSimTest.InitExtension(ETestCorruptRepository2); // *** Repository with duplicates ***
+#ifdef _DEBUG
+ test_Equal(KErrAlreadyExists, r);
+#else
+ test_KErrNone(r);
+#endif // _DEBUG
+
+ test.Next(_L("Reload Device Driver (NULL ordered list)"));
+ HcrSimTest.Close();
+ r = User::FreeLogicalDevice(aDriver);
+ test_KErrNone(r);
+ r = User::LoadLogicalDevice(aDriver);
+ test_KErrNone(r);
+ r = HcrSimTest.Open(aDriver);
+ test_KErrNone(r);
+ r = HcrSimTest.InitExtension(ETestNullOrderedList); // *** Repository where iOrderedSettingList==NULL ***
+#ifdef _DEBUG
+ test_Equal(KErrNotFound, r);
+#else
+ test_KErrNone(r);
+#endif // _DEBUG
+
+ test.Next(_L("Reload Device Driver (Default)"));
+ HcrSimTest.Close();
+ r = User::FreeLogicalDevice(aDriver);
+ test_KErrNone(r);
+ r = User::LoadLogicalDevice(aDriver);
+ test_KErrNone(r);
+ r = HcrSimTest.Open(aDriver);
+ test_KErrNone(r);
+ r = HcrSimTest.InitExtension(); // *** Default Repository ***
+ test_KErrNone(r);
+
+ test.Next(_L("Compiled+Corrupt1+Nand"));
+ test.Start(_L("Initialisation"));
+ r = HcrSimTest.SwitchRepository(KTestCorrupt1, HCRInternal::ECoreRepos);
+ test_KErrNone(r);
+ r = HcrSimTest.SwitchRepository(KTestNandRepos, HCRInternal::EOverrideRepos);
+ test_KErrNone(r);
+ r = HcrSimTest.CheckIntegrity();
+ test_Equal(KErrCorrupt, r);
+ test.End();
+
+ test.Next(_L("Compiled+Corrupt2+Nand"));
+ test.Start(_L("Initialisation"));
+ r = HcrSimTest.SwitchRepository(KTestCorrupt2, HCRInternal::ECoreRepos);
+ test_KErrNone(r);
+ r = HcrSimTest.CheckIntegrity();
+ test_Equal(KErrAlreadyExists, r);
+ test.End();
+
+ test.Next(_L("Compiled+File+Corrupt1"));
+ test.Start(_L("Initialisation"));
+ r = HcrSimTest.SwitchRepository(KTestFileRepos, HCRInternal::ECoreRepos);
+ test_KErrNone(r);
+ r = HcrSimTest.SwitchRepository(KTestCorrupt1, HCRInternal::EOverrideRepos);
+ test_KErrNone(r);
+ r = HcrSimTest.CheckIntegrity();
+ test_Equal(KErrCorrupt, r);
+ test.End();
+
+ test.Next(_L("Compiled+File+Corrupt2"));
+ test.Start(_L("Initialisation"));
+ r = HcrSimTest.SwitchRepository(KTestCorrupt2, HCRInternal::EOverrideRepos);
+ test_KErrNone(r);
+ r = HcrSimTest.CheckIntegrity();
+ test_Equal(KErrAlreadyExists, r);
+ test.End();
+
+ test.Next(_L("Close test channel and unload device driver"));
+ HcrSimTest.Close();
+ r = User::FreeLogicalDevice(aDriver);
+ test_KErrNone(r);
+ test.End();
+ }
+
+void RomHeaderTests()
+ {
+ test.Next(_L("Rom Header"));
+#ifdef __WINS__
+ test.Printf(_L("Not available on the emulator.\n"));
+#else
+ const TRomHeader* romheader = (TRomHeader*) UserSvr::RomHeaderAddress();
+ test.Printf(_L("HCR File Address: %08x\n"), romheader->iHcrFileAddress);
+ test(romheader->iHcrFileAddress);
+ if (romheader->iPageableRomStart)
+ {
+ // If this is a paged ROM, HCR file must be in the unpaged area
+ test_Compare(romheader->iRomBase + romheader->iPageableRomStart, >, romheader->iHcrFileAddress);
+ }
+#endif // __WINS__
+ }
+
+void HcrRealSettingDiscovery()
+ {
+ test.Next(_L("Setting Discovery"));
+ TInt r;
+ TCategoryUid cat;
+ test.Printf(_L("Category Element Type Len Value\n"));
+ test.Printf(_L("--------------------------------------------------\n"));
+ for (cat = KHCRUID_ALLOCATED_MIN; cat <= KHCRUID_ALLOCATED_MAX; cat++)
+ {
+ TInt nosettings;
+ nosettings = HcrSimTest.FindNumSettingsInCategory(cat);
+ test_Compare(0, <=, nosettings);
+ if (nosettings > 0)
+ {
+ TUint32 numfound;
+ TElementId* elids;
+ TSettingType* types;
+ TUint16* lens;
+ elids = (TElementId*) User::Alloc(nosettings * sizeof(TElementId));
+ test_NotNull(elids);
+ types = (TSettingType*) User::Alloc(nosettings * sizeof(TSettingType));
+ test_NotNull(types);
+ lens = (TUint16*) User::Alloc(nosettings * sizeof(TUint16));
+ test_NotNull(lens);
+ r = HcrSimTest.FindSettings(cat, nosettings, numfound, elids, types, lens);
+ test_Equal(nosettings, r);
+ test_Equal(nosettings, numfound);
+ TInt i;
+ for (i = 0; i < nosettings; i++)
+ {
+ TSettingId id(cat, *(elids + i));
+ test.Printf(_L("%08x %08x %08x %04x "), cat, *(elids + i), *(types + i), *(lens + i));
+ switch (*(types + i))
+ {
+ case ETypeInt32:
+ {
+ TInt32 val;
+ r = HcrSimTest.GetInt(id, val);
+ test_KErrNone(r);
+ test.Printf(_L("%08x"), val);
+ break;
+ }
+ case ETypeInt16:
+ {
+ TInt16 val;
+ r = HcrSimTest.GetInt(id, val);
+ test_KErrNone(r);
+ test.Printf(_L("%04x"), val);
+ break;
+ }
+ case ETypeInt8:
+ {
+ TInt8 val;
+ r = HcrSimTest.GetInt(id, val);
+ test_KErrNone(r);
+ test.Printf(_L("%02x"), val);
+ break;
+ }
+ case ETypeBool:
+ {
+ TBool val;
+ r = HcrSimTest.GetBool(id, val);
+ test_KErrNone(r);
+ test.Printf(_L("%b"), val ? 1 : 0);
+ break;
+ }
+ case ETypeUInt32:
+ {
+ TUint32 val;
+ r = HcrSimTest.GetUInt(id, val);
+ test_KErrNone(r);
+ test.Printf(_L("%08x"), val);
+ break;
+ }
+ case ETypeUInt16:
+ {
+ TUint16 val;
+ r = HcrSimTest.GetUInt(id, val);
+ test_KErrNone(r);
+ test.Printf(_L("%04x"), val);
+ break;
+ }
+ case ETypeUInt8:
+ {
+ TUint8 val;
+ r = HcrSimTest.GetUInt(id, val);
+ test_KErrNone(r);
+ test.Printf(_L("%02x"), val);
+ break;
+ }
+ case ETypeLinAddr:
+ {
+ TLinAddr val;
+ r = HcrSimTest.GetLinAddr(id, val);
+ test_KErrNone(r);
+ test.Printf(_L("%08x"), val);
+ break;
+ }
+ case ETypeBinData:
+ {
+ TBuf8<KMaxSettingLength> dval;
+ TUint8* pval;
+ pval = (TUint8*) User::Alloc(*(lens + i));
+ test_NotNull(pval);
+ //
+ r = HcrSimTest.GetData(id, dval);
+ test_KErrNone(r);
+ test_Equal(*(lens + i), dval.Length());
+ //
+ TUint16 actuallength;
+ r = HcrSimTest.GetData(id, *(lens + i), pval, actuallength);
+ test_KErrNone(r);
+ test_Equal(*(lens + i), actuallength);
+ //
+ TInt j;
+ for (j = 0; j < 6 && j < dval.Length(); j++)
+ {
+ test.Printf(_L("%02x "), dval[j]);
+ }
+
+ //
+ User::Free(pval);
+ break;
+ }
+ case ETypeText8:
+ {
+ TBuf8<KMaxSettingLength> dval;
+ TText8* pval;
+ pval = (TText8*) User::Alloc(*(lens + i));
+ test_NotNull(pval);
+ //
+ r = HcrSimTest.GetString(id, dval);
+ test_KErrNone(r);
+ test_Equal(*(lens + i), dval.Length());
+ //
+ TUint16 actuallength;
+ r = HcrSimTest.GetString(id, *(lens + i), pval, actuallength);
+ test_KErrNone(r);
+ test_Equal(*(lens + i), actuallength);
+ //
+ TInt j;
+ for (j = 0; j < 15 && j < dval.Length(); j++)
+ {
+ test.Printf(_L("%c "), dval[j]);
+ }
+ //
+ User::Free(pval);
+ break;
+ }
+ case ETypeArrayInt32:
+ {
+ TInt32* pval;
+ pval = (TInt32*) User::Alloc(*(lens + i));
+ test_NotNull(pval);
+ //
+ TUint16 actuallength;
+ r = HcrSimTest.GetArray(id, *(lens + i), pval, actuallength);
+ test_KErrNone(r);
+ //
+ test_Equal(*(lens + i), actuallength);
+ //
+ TUint j;
+ for (j = 0; j < 2 && j < actuallength / sizeof(TInt32); j++)
+ {
+ test.Printf(_L("%08x "), pval[0]);
+ }
+ //
+ User::Free(pval);
+ break;
+ }
+ case ETypeArrayUInt32:
+ {
+ TUint32* pval;
+ pval = (TUint32*) User::Alloc(*(lens + i));
+ test_NotNull(pval);
+ //
+ TUint16 actuallength;
+ r = HcrSimTest.GetArray(id, *(lens + i), pval, actuallength);
+ test_KErrNone(r);
+ //
+ TUint j;
+ for (j = 0; j < 2 && j < actuallength / sizeof(TUint32); j++)
+ {
+ test.Printf(_L("%08x "), pval[0]);
+ }
+ //
+ test_Equal(*(lens + i), actuallength);
+ User::Free(pval);
+ break;
+ }
+ case ETypeInt64:
+ {
+ TInt64 val;
+ r = HcrSimTest.GetInt(id, val);
+ test_KErrNone(r);
+ test.Printf(_L("%016lx"), val);
+
+ break;
+ }
+ case ETypeUInt64:
+ {
+ TUint64 val;
+ r = HcrSimTest.GetUInt(id, val);
+ test_KErrNone(r);
+ test.Printf(_L("%016lx"), val);
+ break;
+ }
+ default:
+ test(EFalse);
+ }
+ test.Printf(_L("\n"));
+ }
+ User::Free(elids);
+ User::Free(types);
+ User::Free(lens);
+ }
+ }
+ }
+void HcrRealRetrieveKernelExtensionTestResults()
+ {
+ test.Next(_L("Retrieve kernel extension test results"));
+ TInt r;
+ TInt kextline;
+ TInt kexterror;
+ r = HcrSimTest.GetInitExtensionTestResults(kextline, kexterror);
+ test_KErrNone(r);
+ if (kextline == -1)
+ {
+ test.Printf(_L("Test not run\n"));
+ }
+ else if (kextline == 0)
+ {
+ test.Printf(_L("Test passed\n"));
+ }
+ else
+ {
+ test.Printf(_L("Test kernel extension error at line %d (error %d)\n"), kextline, kexterror);
+ test(EFalse);
+ }
+ }
+
+void HcrRealTests(const TDesC& aDriver)
+ {
+ test.Next(_L("HCR real tests"));
+ test.Start(_L("Load LDD"));
+ test.Printf(_L("%S\n"), &aDriver);
+ TInt r;
+ r = User::LoadLogicalDevice(aDriver);
+ if (r == KErrNotFound)
+ {
+ test.Printf(_L("%S not found. Skipping tests.\n"), &aDriver);
+ }
+ else
+ {
+ if (r == KErrAlreadyExists)
+ {
+ test.Printf(_L("Unload Device Driver and load it again\n"));
+ r = User::FreeLogicalDevice(aDriver);
+ test_KErrNone(r);
+ r = User::LoadLogicalDevice(aDriver);
+ }
+ test_KErrNone(r);
+ r = HcrSimTest.Open(aDriver);
+ test_KErrNone(r);
+ //
+ HcrRealRetrieveKernelExtensionTestResults();
+ HcrRealSettingDiscovery();
+ //
+ test.Next(_L("Close LDD"));
+ HcrSimTest.Close();
+ r = User::FreeLogicalDevice(aDriver);
+ test_KErrNone(r);
+ }
+ test.End();
+ }
+
+void HcrSimBenchmarkTests(const TDesC& aDriver)
+ {
+ test.Next(_L("Simulated HCR Benchmark"));
+ test.Start(_L("Initialisation"));
+ test.Printf(_L("%S\n"), &aDriver);
+ TInt r;
+ r = User::LoadLogicalDevice(aDriver);
+ if (r == KErrAlreadyExists)
+ {
+ test.Printf(_L("Unload Device Driver and load it again\n"));
+ r = User::FreeLogicalDevice(aDriver);
+ test_KErrNone(r);
+ r = User::LoadLogicalDevice(aDriver);
+ test_KErrNone(r);
+ }
+ else
+ {
+ test_KErrNone(r);
+ }
+ r = HcrSimTest.Open(aDriver);
+ test_KErrNone(r);
+ r = HcrSimTest.InitExtension();
+ test_KErrNone(r);
+ r = HcrSimTest.CheckIntegrity();
+ test_KErrNone(r);
+
+ test.Next(_L("Get Setting"));
+ // Timings in ms
+ TUint32 int1 = 0;
+ TUint32 int1000 = 0;
+ TUint32 array1 = 0;
+ TUint32 array1000 = 0;
+ TUint32 des1 = 0;
+ TUint32 des1000 = 0;
+ TUint32 fns = 0;
+ TUint32 fs = 0;
+ TUint32 gts = 0;
+ TUint32 gws = 0;
+ _LIT(KTestBenchLine, "%-6d %-6d %-6d %-6d %-6d %-6d %-6d %-6d %-6d %-6d\n");
+ test.Printf(_L("HCR Int1 Int1000 Arr1 Arr1000 Des1 Des1000 FNS FS GTS GWS\n"));
+ // Default configuration
+ TSettingId idint1(1, 1);
+ TSettingId idstring1(KTestCategories[2], 0x6000);
+ test_KErrNone(HcrSimTest.BenchmarkGetSettingInt(idint1, int1));
+ test_KErrNone(HcrSimTest.BenchmarkGetSettingArray(idstring1, array1));
+ test_KErrNone(HcrSimTest.BenchmarkGetSettingDes(idstring1, des1));
+ test.Printf(_L("C?? "));
+ test.Printf(KTestBenchLine, int1, int1000, array1, array1000, des1, des1000, fns, fs, gts, gws);
+
+ r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::ECoreRepos);
+ test_KErrNone(r);
+ r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::EOverrideRepos);
+ test_KErrNone(r);
+ r = HcrSimTest.CheckIntegrity();
+ test_KErrNone(r);
+ test_KErrNone(HcrSimTest.BenchmarkGetSettingInt(idint1, int1));
+ test_KErrNone(HcrSimTest.BenchmarkGetSettingArray(idstring1, array1));
+ test_KErrNone(HcrSimTest.BenchmarkGetSettingDes(idstring1, des1));
+ test.Printf(_L("C__ "));
+ test.Printf(KTestBenchLine, int1, int1000, array1, array1000, des1, des1000, fns, fs, gts, gws);
+ //
+ TSettingId idint1000(KTestBenchmarkCategoryId, 1000);
+ TSettingId idstring1000(KTestBenchmarkCategoryId, 1001);
+ r = HcrSimTest.SwitchRepository(KTestMegaLarge1, HCRInternal::ECoreRepos);
+ test_KErrNone(r);
+ r = HcrSimTest.CheckIntegrity();
+ test_KErrNone(r);
+ test_KErrNone(HcrSimTest.BenchmarkGetSettingInt(idint1, int1));
+ test_KErrNone(HcrSimTest.BenchmarkGetSettingInt(idint1000, int1000));
+ test_KErrNone(HcrSimTest.BenchmarkGetSettingArray(idstring1, array1));
+ test_KErrNone(HcrSimTest.BenchmarkGetSettingArray(idstring1000, array1000));
+ test_KErrNone(HcrSimTest.BenchmarkGetSettingDes(idstring1, des1));
+ test_KErrNone(HcrSimTest.BenchmarkGetSettingDes(idstring1000, des1000));
+
+ test_Equal(KTestBenchmarkNumberOfSettingsInCategory, HcrSimTest.BenchmarkFindNumSettingsInCategory(KTestBenchmarkCategoryId, fns));
+ test_Equal(KTestBenchmarkNumberOfSettingsInCategory, HcrSimTest.BenchmarkFindSettings(KTestBenchmarkCategoryId, fs));
+ test_KErrNone(HcrSimTest.BenchmarkGetTypeAndSize(idstring1000, gts));
+ test_Equal(KTestBenchmarkNumberOfSettingsInCategory - 1, HcrSimTest.BenchmarkGetWordSettings(KTestBenchmarkCategoryId, gws));
+
+ test.Printf(_L("CF_ "));
+ test.Printf(KTestBenchLine, int1, int1000, array1, array1000, des1, des1000, fns, fs, gts, gws);
+ //
+ r = HcrSimTest.SwitchRepository(KTestMegaLarge2, HCRInternal::EOverrideRepos);
+ test_KErrNone(r);
+ r = HcrSimTest.CheckIntegrity();
+ test_KErrNone(r);
+ test_KErrNone(HcrSimTest.BenchmarkGetSettingInt(idint1, int1));
+ test_KErrNone(HcrSimTest.BenchmarkGetSettingInt(idint1000, int1000));
+ test_KErrNone(HcrSimTest.BenchmarkGetSettingArray(idstring1, array1));
+ test_KErrNone(HcrSimTest.BenchmarkGetSettingArray(idstring1000, array1000));
+ test_KErrNone(HcrSimTest.BenchmarkGetSettingDes(idstring1, des1));
+ test_KErrNone(HcrSimTest.BenchmarkGetSettingDes(idstring1000, des1000));
+
+ test_Equal(KTestBenchmarkNumberOfSettingsInCategory, HcrSimTest.BenchmarkFindNumSettingsInCategory(KTestBenchmarkCategoryId, fns));
+ test_Equal(KTestBenchmarkNumberOfSettingsInCategory, HcrSimTest.BenchmarkFindSettings(KTestBenchmarkCategoryId, fs));
+ test_KErrNone(HcrSimTest.BenchmarkGetTypeAndSize(idstring1000, gts));
+ test_Equal(KTestBenchmarkNumberOfSettingsInCategory - 1, HcrSimTest.BenchmarkGetWordSettings(KTestBenchmarkCategoryId, gws));
+
+ test.Printf(_L("CFN "));
+ test.Printf(KTestBenchLine, int1, int1000, array1, array1000, des1, des1000, fns, fs, gts, gws);
+ //
+ r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::EOverrideRepos);
+ test_KErrNone(r);
+ r = HcrSimTest.CheckIntegrity();
+ test_KErrNone(r);
+ test_KErrNone(HcrSimTest.BenchmarkGetSettingInt(idint1, int1));
+ test_KErrNone(HcrSimTest.BenchmarkGetSettingInt(idint1000, int1000));
+ test_KErrNone(HcrSimTest.BenchmarkGetSettingArray(idstring1, array1));
+ test_KErrNone(HcrSimTest.BenchmarkGetSettingArray(idstring1000, array1000));
+ test_KErrNone(HcrSimTest.BenchmarkGetSettingDes(idstring1, des1));
+ test_KErrNone(HcrSimTest.BenchmarkGetSettingDes(idstring1000, des1000));
+
+ test_Equal(KTestBenchmarkNumberOfSettingsInCategory, HcrSimTest.BenchmarkFindNumSettingsInCategory(KTestBenchmarkCategoryId, fns));
+ test_Equal(KTestBenchmarkNumberOfSettingsInCategory, HcrSimTest.BenchmarkFindSettings(KTestBenchmarkCategoryId, fs));
+ test_KErrNone(HcrSimTest.BenchmarkGetTypeAndSize(idstring1000, gts));
+ test_Equal(KTestBenchmarkNumberOfSettingsInCategory - 1, HcrSimTest.BenchmarkGetWordSettings(KTestBenchmarkCategoryId, gws));
+
+ test.Printf(_L("C_N "));
+ test.Printf(KTestBenchLine, int1, int1000, array1, array1000, des1, des1000, fns, fs, gts, gws);
+
+ test.Next(_L("Unload LDD"));
+ HcrSimTest.Close();
+ r = User::FreeLogicalDevice(aDriver);
+ test_KErrNone(r);
+ test.End();
+ }
+
+void HcrRealBenchmarkTests(const TDesC& aDriver)
+ {
+ TInt r;
+ test.Next(_L("Real HCR Benchmark"));
+ test.Start(_L("Initialisation"));
+ test.Printf(_L("%S\n"), &aDriver);
+ r = User::LoadLogicalDevice(aDriver);
+ if (r == KErrNotFound)
+ {
+ test.Printf(_L("%S not found. Skipping tests.\n"), &aDriver);
+ }
+ else
+ {
+ if (r == KErrAlreadyExists)
+ {
+ test.Printf(_L("Unload Device Driver and load it again\n"));
+ r = User::FreeLogicalDevice(aDriver);
+ test_KErrNone(r);
+ r = User::LoadLogicalDevice(aDriver);
+ }
+ test_KErrNone(r);
+ r = HcrSimTest.Open(aDriver);
+ test_KErrNone(r);
+ //
+ test.Next(_L("Close LDD"));
+ HcrSimTest.Close();
+ r = User::FreeLogicalDevice(aDriver);
+ test_KErrNone(r);
+ }
+ test.End();
+ }
+
+GLDEF_C TInt E32Main()
+ {
+ __UHEAP_MARK;
+
+ test.Title();
+ test.Start(_L("HCR Test Suite"));
+
+
+
+ //Order the the test lists in descend(the setting with the smallest
+ //setting Id is first)
+ TLinearOrder<SSettingC> order(CompareEntries);
+ //Build the ordered ids arrays
+ RArray<SSettingC> rSettingsList(sizeof(SSettingC), SettingsList,
+ sizeof(SettingsList)/sizeof(SettingsList[0]));
+
+ rSettingsList.Sort(order);
+
+ RArray<SSettingC> rSettingsList2(sizeof(SSettingC), SettingsList2,
+ sizeof(SettingsList2)/sizeof(SettingsList2[0]));
+ rSettingsList2.Sort(order);
+
+ RArray<SSettingC> rSettingsList3(sizeof(SSettingC), SettingsList3,
+ sizeof(SettingsList3)/sizeof(SettingsList3[0]));
+ rSettingsList3.Sort(order);
+
+ RArray<SSettingC> rSettingsList4(sizeof(SSettingC), SettingsList4,
+ sizeof(SettingsList4)/sizeof(SettingsList4[0]));
+ rSettingsList4.Sort(order);
+
+ RArray<SSettingC> rSettingsList5(sizeof(SSettingC), SettingsList5,
+ sizeof(SettingsList5)/sizeof(SettingsList5[0]));
+ rSettingsList5.Sort(order);
+
+ RArray<SSettingC> rSettingsList6(sizeof(SSettingC), SettingsList6,
+ sizeof(SettingsList6)/sizeof(SettingsList6[0]));
+ rSettingsList6.Sort(order);
+
+ RArray<SSettingC> rSettingsList7(sizeof(SSettingC), SettingsList7,
+ sizeof(SettingsList7)/sizeof(SettingsList7[0]));
+ rSettingsList7.Sort(order);
+
+
+ //Functional API tests
+ RomHeaderTests();
+ HcrRealTests(KTestHcrRealOwn);
+ HcrRealTests(KTestHcrRealClient);
+ HcrPslTests(KTestHcrSimOwn);
+ HcrPslTests(KTestHcrSimClient);
+ HcrSimTests(KTestHcrSimOwn);
+ HcrSimTests(KTestHcrSimClient);
+
+
+ //Benchmark tests
+ HcrSimBenchmarkTests(KTestHcrSimOwn);
+ HcrSimBenchmarkTests(KTestHcrSimClient);
+ HcrRealBenchmarkTests(KTestHcrRealOwn);
+ HcrRealBenchmarkTests(KTestHcrRealClient);
+
+ test.End();
+ test.Close();
+
+ __UHEAP_MARKEND;
+ return KErrNone;
+ }