javacommons/security/legacysupport/tsrc/src/testpermissiondb.cpp
branchRCL_3
changeset 19 04becd199f91
child 47 f40128debb5d
--- /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