diff -r f5050f1da672 -r 04becd199f91 javacommons/security/legacysupport/tsrc/src/testpermissiondb.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javacommons/security/legacysupport/tsrc/src/testpermissiondb.cpp Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,230 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "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: +* +*/ + +#include +#include + +#include "TestHarness.h" +#include "teststoragehandler.h" +#include "javastoragenames.h" +#include "javauid.h" + +#include + +using namespace MIDP; +using namespace java::storage; +using namespace java::util; + +_LIT(KAppName, "appName"); +_LIT(KAppVendor, "appVendor"); +_LIT(KAppVersion, "1.0.1"); + +TEST_GROUP(TestPermissionDb) +{ + + Midp2PermissionDB* iPermissionDb; + TestStorageHandler* iStorageHandler; + Uid iAppUid; + + TEST_SETUP() + { + iAppUid = Uid(L"appUid"); + iStorageHandler = new TestStorageHandler(); + iStorageHandler->cleanStorage(APPLICATION_PACKAGE_TABLE, iAppUid); + iStorageHandler->cleanStorage(MIDP_PACKAGE_TABLE, iAppUid); + iStorageHandler->populateApplicationPackageTable(iAppUid, L"appName", L"appVendor", L"1.0.1"); + } + + TEST_TEARDOWN() + { + if (iPermissionDb) + { + delete iPermissionDb; + iPermissionDb = NULL; + } + if (iStorageHandler) + { + iStorageHandler->cleanStorage(APPLICATION_PACKAGE_TABLE, iAppUid); + iStorageHandler->cleanStorage(MIDP_PACKAGE_TABLE, iAppUid); + iStorageHandler->cleanStorage(MIDP_FUNC_GRP_SETTINGS_TABLE, iAppUid); + delete iStorageHandler; + iStorageHandler = NULL; + } + } +}; + +/** + */ +TEST(TestPermissionDb, TestNewL) +{ + int error; + _LIT(KDummy, "dummy"); + _LIT(KAppNameLowCase, "appname"); + _LIT(KAppVendorLowCase, "appvendor"); + // null values + TRAP(error, iPermissionDb = Midp2PermissionDB::NewL(KAppName, KAppVendor, KNullDesC())); + CHECK(error == KErrNotFound); + TRAP(error, iPermissionDb = Midp2PermissionDB::NewL(KAppName, KNullDesC(), KNullDesC())); + CHECK(error == KErrNotFound); + TRAP(error, iPermissionDb = Midp2PermissionDB::NewL(KNullDesC(), KNullDesC(), KNullDesC())); + CHECK(error == KErrNotFound); + // dummy values + TRAP(error, iPermissionDb = Midp2PermissionDB::NewL(KDummy, KDummy, KDummy)); + CHECK(error == KErrNotFound); + TRAP(error, iPermissionDb = Midp2PermissionDB::NewL(KAppName, KDummy, KDummy)); + CHECK(error == KErrNotFound); + TRAP(error, iPermissionDb = Midp2PermissionDB::NewL(KAppName, KAppVendor, KDummy)); + CHECK(error == KErrNotFound); + // case-sensitivity + TRAP(error, iPermissionDb = Midp2PermissionDB::NewL(KAppName, KAppVendorLowCase, KAppVersion)); + CHECK(error == KErrNotFound); + TRAP(error, iPermissionDb = Midp2PermissionDB::NewL(KAppNameLowCase, KAppVendor, KAppVersion)); + CHECK(error == KErrNotFound); +} + +TEST(TestPermissionDb, TestGetDomainL) +{ + int error; + // domain not found + TMidp2Domain domain; + TRAP(error, iPermissionDb = Midp2PermissionDB::NewL(KAppName, KAppVendor, KAppVersion)); + CHECK(error == KErrNotFound); + // unknown domain + iStorageHandler->populateMIDPPackageTable(iAppUid, L"unknown"); + iPermissionDb = Midp2PermissionDB::NewL(KAppName, KAppVendor, KAppVersion); + CHECK(iPermissionDb != NULL && iPermissionDb->GetDomain(domain) == KErrNotFound); + // unidentified third party domain + iStorageHandler->cleanStorage(MIDP_PACKAGE_TABLE, iAppUid); + iStorageHandler->populateMIDPPackageTable(iAppUid, L"UTPD"); + delete iPermissionDb; + iPermissionDb = NULL; + iPermissionDb = Midp2PermissionDB::NewL(KAppName, KAppVendor, KAppVersion); + CHECK(iPermissionDb != NULL && iPermissionDb->GetDomain(domain) == KErrNone && domain == EDomainUntrusted); + // manufacturer domain + iStorageHandler->cleanStorage(MIDP_PACKAGE_TABLE, iAppUid); + iStorageHandler->populateMIDPPackageTable(iAppUid, L"MFD"); + delete iPermissionDb; + iPermissionDb = NULL; + iPermissionDb = Midp2PermissionDB::NewL(KAppName, KAppVendor, KAppVersion); + CHECK(iPermissionDb != NULL && iPermissionDb->GetDomain(domain) == KErrNone && domain == EDomainManufacturer); + // operator domain + iStorageHandler->cleanStorage(MIDP_PACKAGE_TABLE, iAppUid); + iStorageHandler->populateMIDPPackageTable(iAppUid, L"OPD"); + delete iPermissionDb; + iPermissionDb = NULL; + iPermissionDb = Midp2PermissionDB::NewL(KAppName, KAppVendor, KAppVersion); + CHECK(iPermissionDb != NULL && iPermissionDb->GetDomain(domain) == KErrNone && domain == EDomainOperator); + // identified third party domain + iStorageHandler->cleanStorage(MIDP_PACKAGE_TABLE, iAppUid); + iStorageHandler->populateMIDPPackageTable(iAppUid, L"ITPD"); + delete iPermissionDb; + iPermissionDb = NULL; + iPermissionDb = Midp2PermissionDB::NewL(KAppName, KAppVendor, KAppVersion); + CHECK(iPermissionDb != NULL && iPermissionDb->GetDomain(domain) == KErrNone && domain == EDomainTTP); +} + +TEST(TestPermissionDb, TestNotSupported) +{ + TMidp2Domain domain; + TMidp2FunctionGroup fg; + TMidp2Permission perm; + iStorageHandler->cleanStorage(MIDP_PACKAGE_TABLE, iAppUid); + iStorageHandler->populateMIDPPackageTable(iAppUid, L"UTPD"); + iPermissionDb = Midp2PermissionDB::NewL(KAppName, KAppVendor, KAppVersion); + CHECK(iPermissionDb->GetDomainFromName(KNullDesC(), domain) == KErrNotSupported); + CHECK(iPermissionDb->GetFunctionGroupFromName(KNullDesC(), fg) == KErrNotSupported); + CHECK(iPermissionDb->GetPermissionFromName(KNullDesC(), perm) == KErrNotSupported); +} + +TEST(TestPermissionDb, TestGetFunctionGroupPermission) +{ + TMidp2PermissionType permissionType; + TMidp2PermissionMode permissionMode; + TUint8 allowedModesMask; + iStorageHandler->cleanStorage(MIDP_PACKAGE_TABLE, iAppUid); + iStorageHandler->populateMIDPPackageTable(iAppUid, L"UTPD"); + iPermissionDb = Midp2PermissionDB::NewL(KAppName, KAppVendor, KAppVersion); + // function group not found + iStorageHandler->cleanStorage(MIDP_FUNC_GRP_SETTINGS_TABLE, iAppUid); + iStorageHandler->populateSecuritySettingsTable(iAppUid, L"Net Access"); + CHECK(iPermissionDb->GetFunctionGroupPermission(ELastFunctionGroupMarker, permissionType, permissionMode, allowedModesMask) == KErrNotFound); + CHECK(iPermissionDb->GetFunctionGroupPermission(EMultimediaRecording, permissionType, permissionMode, allowedModesMask) == KErrNotFound); + // function group allowed + iStorageHandler->populateSecuritySettingsTable(iAppUid, L"Low Level Net Access"); + CHECK(iPermissionDb->GetFunctionGroupPermission(ELowLevelNetAccess, permissionType, permissionMode, allowedModesMask) == KErrNone && permissionType == EAllowed); + // both current interaction mode and allowed interaction modes must be set + iStorageHandler->cleanStorage(MIDP_FUNC_GRP_SETTINGS_TABLE, iAppUid); + iStorageHandler->populateSecuritySettingsTable(iAppUid, L"Call Control", L"1"); + CHECK(iPermissionDb->GetFunctionGroupPermission(ECallControl, permissionType, permissionMode, allowedModesMask) == KErrNone && permissionType == EAllowed); + iStorageHandler->cleanStorage(MIDP_FUNC_GRP_SETTINGS_TABLE, iAppUid); + iStorageHandler->populateSecuritySettingsTable(iAppUid, L"Messaging", L"", L"1"); + CHECK(iPermissionDb->GetFunctionGroupPermission(EMessaging, permissionType, permissionMode, allowedModesMask) == KErrNone && permissionType == EAllowed); + // invalid settings + iStorageHandler->cleanStorage(MIDP_FUNC_GRP_SETTINGS_TABLE, iAppUid); + iStorageHandler->populateSecuritySettingsTable(iAppUid, L"Restricted Messaging", L"5", L"4"); + CHECK(iPermissionDb->GetFunctionGroupPermission(ERestrictedMessaging, permissionType, permissionMode, allowedModesMask) == KErrNone && permissionType == EAllowed); + iStorageHandler->cleanStorage(MIDP_FUNC_GRP_SETTINGS_TABLE, iAppUid); + iStorageHandler->populateSecuritySettingsTable(iAppUid, L"Application Auto Invocation", L"1", L"16"); + CHECK(iPermissionDb->GetFunctionGroupPermission(EAppAutoInvocation, permissionType, permissionMode, allowedModesMask) == KErrNone && permissionType == EAllowed); + // current interaction mode = oneshot, allowed interaction modes = denied + iStorageHandler->cleanStorage(MIDP_FUNC_GRP_SETTINGS_TABLE, iAppUid); + iStorageHandler->populateSecuritySettingsTable(iAppUid, L"Local Connectivity", L"1", L"1"); + allowedModesMask = 0; + CHECK(iPermissionDb->GetFunctionGroupPermission(ELocalConnectivity, permissionType, permissionMode, allowedModesMask) == KErrNone && permissionType == EUser && permissionMode == EOneShot && allowedModesMask == EDenied); + // current interaction mode = session, allowed interaction modes = denied + blanket + iStorageHandler->cleanStorage(MIDP_FUNC_GRP_SETTINGS_TABLE, iAppUid); + iStorageHandler->populateSecuritySettingsTable(iAppUid, L"Multimedia Recording", L"2", L"3"); + allowedModesMask = 0; + CHECK(iPermissionDb->GetFunctionGroupPermission(EMultimediaRecording, permissionType, permissionMode, allowedModesMask) == KErrNone && permissionType == EUser && permissionMode == ESession && allowedModesMask == (EDenied + EBlanket)); + // current interaction mode = blanket, allowed interaction modes = denied + blanket + session + iStorageHandler->cleanStorage(MIDP_FUNC_GRP_SETTINGS_TABLE, iAppUid); + iStorageHandler->populateSecuritySettingsTable(iAppUid, L"Read User Data Access", L"3", L"7"); + allowedModesMask = 0; + CHECK(iPermissionDb->GetFunctionGroupPermission(EReadUserDataAccess, permissionType, permissionMode, allowedModesMask) == KErrNone && permissionType == EUser && permissionMode == EBlanket && allowedModesMask == (EDenied + EBlanket + ESession)); + // current interaction mode = denied, allowed interaction modes = denied + blanket + session + oneshot + iStorageHandler->cleanStorage(MIDP_FUNC_GRP_SETTINGS_TABLE, iAppUid); + iStorageHandler->populateSecuritySettingsTable(iAppUid, L"Write User Data Access", L"4", L"15"); + allowedModesMask = 0; + CHECK(iPermissionDb->GetFunctionGroupPermission(EWriteUserDataAccess, permissionType, permissionMode, allowedModesMask) == KErrNone && permissionType == EUser && permissionMode == EDenied && allowedModesMask == (EDenied + EBlanket + ESession + EOneShot)); +} + +TEST(TestPermissionDb, TestSetFunctionGroupPermission) +{ + TMidp2PermissionType permissionType; + TMidp2PermissionMode permissionMode; + iStorageHandler->cleanStorage(MIDP_PACKAGE_TABLE, iAppUid); + iStorageHandler->populateMIDPPackageTable(iAppUid, L"UTPD"); + iPermissionDb = Midp2PermissionDB::NewL(KAppName, KAppVendor, KAppVersion); + // function group not found + iStorageHandler->cleanStorage(MIDP_FUNC_GRP_SETTINGS_TABLE, iAppUid); + CHECK(iPermissionDb->SetFunctionGroupPermission(ELastFunctionGroupMarker, permissionType, permissionMode) == KErrNotFound); + // oneshot + iStorageHandler->cleanStorage(MIDP_FUNC_GRP_SETTINGS_TABLE, iAppUid); + iStorageHandler->populateSecuritySettingsTable(iAppUid, L"Location", L"1", L"4"); + CHECK(iPermissionDb->SetFunctionGroupPermission(ELocation, permissionType, EOneShot) == KErrNone); + // session + iStorageHandler->cleanStorage(MIDP_FUNC_GRP_SETTINGS_TABLE, iAppUid); + iStorageHandler->populateSecuritySettingsTable(iAppUid, L"Landmark", L"1", L"4"); + CHECK(iPermissionDb->SetFunctionGroupPermission(ELandmark, permissionType, ESession) == KErrNone); + // blanket + iStorageHandler->cleanStorage(MIDP_FUNC_GRP_SETTINGS_TABLE, iAppUid); + iStorageHandler->populateSecuritySettingsTable(iAppUid, L"Local Connectivity", L"1", L"4"); + CHECK(iPermissionDb->SetFunctionGroupPermission(ELocalConnectivity, permissionType, EBlanket) == KErrNone); + std::wstring blanketPrompt; + iStorageHandler->readBlanketPrompt(iAppUid, L"Local Connectivity", blanketPrompt); + CHECK(blanketPrompt == L"1"); +} \ No newline at end of file