--- /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 <stdio.h>
+#include <string>
+
+#include "TestHarness.h"
+#include "teststoragehandler.h"
+#include "javastoragenames.h"
+#include "javauid.h"
+
+#include <midp2permissiondb.h>
+
+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