javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/authorization/AccessControllerTests.java
changeset 69 773449708c84
parent 21 2a9601315dfc
child 66 2455ef1f5bbc
child 78 71ad690e91f5
equal deleted inserted replaced
61:bf7ee68962da 69:773449708c84
    45  * AccessController unit tests.
    45  * AccessController unit tests.
    46  */
    46  */
    47 public class AccessControllerTests extends TestCase implements InstallerMain
    47 public class AccessControllerTests extends TestCase implements InstallerMain
    48 {
    48 {
    49 
    49 
       
    50     int assertTrace = 0;
    50     // Begin j2meunit test framework setup
    51     // Begin j2meunit test framework setup
    51     public void installerMain(String[] args)
    52     public void installerMain(String[] args)
    52     {
    53     {
    53         TestSuite suite = new TestSuite(this.getClass().getName());
    54         TestSuite suite = new TestSuite(this.getClass().getName());
    54 
    55 
    87     {
    88     {
    88     }
    89     }
    89 
    90 
    90     protected void tearDown()
    91     protected void tearDown()
    91     {
    92     {
       
    93     }
       
    94 
       
    95     private void assertWithTrace(boolean aCondition)
       
    96     {
       
    97         assertTrue("" + assertTrace, aCondition);
       
    98         assertTrace++;
    92     }
    99     }
    93 
   100 
    94     protected void testAccessControllerFactory()
   101     protected void testAccessControllerFactory()
    95     {
   102     {
    96         Uid appUID1 = Uid.createUid("appUID1");
   103         Uid appUID1 = Uid.createUid("appUID1");
    98         AccessControllerImpl ac1;
   105         AccessControllerImpl ac1;
    99         AccessControllerImpl ac2;
   106         AccessControllerImpl ac2;
   100         String appName = "AccessControllerTests";
   107         String appName = "AccessControllerTests";
   101         // check null values
   108         // check null values
   102         ac1 = AccessControllerFactoryImpl.getAccessController(null, null);
   109         ac1 = AccessControllerFactoryImpl.getAccessController(null, null);
   103         assertTrue(ac1 == null);
   110         assertWithTrace(ac1 == null);
   104         AccessControllerFactoryImpl.destroyAccessController(null);
   111         AccessControllerFactoryImpl.destroyAccessController(null);
   105         ac1 = AccessControllerFactoryImpl.getAccessController(null, "appName");
   112         ac1 = AccessControllerFactoryImpl.getAccessController(null, "appName");
   106         assertTrue(ac1 == null);
   113         assertWithTrace(ac1 == null);
   107         AccessControllerFactoryImpl.destroyAccessController(null);
   114         AccessControllerFactoryImpl.destroyAccessController(null);
   108         // check duplicates
   115         // check duplicates
   109         AccessControllerFactoryImpl.destroyAccessController(appUID1);
   116         AccessControllerFactoryImpl.destroyAccessController(appUID1);
   110         ac1 = AccessControllerFactoryImpl.getAccessController(appUID1, appName);
   117         ac1 = AccessControllerFactoryImpl.getAccessController(appUID1, appName);
   111         ac2 = AccessControllerFactoryImpl.getAccessController(appUID1, appName);
   118         ac2 = AccessControllerFactoryImpl.getAccessController(appUID1, appName);
   112         AccessControllerFactoryImpl.destroyAccessController(appUID1);
   119         AccessControllerFactoryImpl.destroyAccessController(appUID1);
   113         assertTrue(ac1 == ac2);
   120         assertWithTrace(ac1 == ac2);
   114         // check destroy
   121         // check destroy
   115         ac1 = AccessControllerFactoryImpl.getAccessController(appUID1, appName);
   122         ac1 = AccessControllerFactoryImpl.getAccessController(appUID1, appName);
   116         AccessControllerFactoryImpl.destroyAccessController(appUID1);
   123         AccessControllerFactoryImpl.destroyAccessController(appUID1);
   117         ac2 = AccessControllerFactoryImpl.getAccessController(appUID1, appName);
   124         ac2 = AccessControllerFactoryImpl.getAccessController(appUID1, appName);
   118         // call destroy two times (or calling it on a UID which does not have an instance)
   125         // call destroy two times (or calling it on a UID which does not have an instance)
   119         AccessControllerFactoryImpl.destroyAccessController(appUID1);
   126         AccessControllerFactoryImpl.destroyAccessController(appUID1);
   120         AccessControllerFactoryImpl.destroyAccessController(appUID1);
   127         AccessControllerFactoryImpl.destroyAccessController(appUID1);
   121         assertTrue(ac1 != ac2);
   128         assertWithTrace(ac1 != ac2);
   122     }
   129     }
   123 
   130 
   124     protected void testAccessController()
   131     protected void testAccessController()
   125     {
   132     {
   126         Uid appUID = Uid.createUid("myAppUID");
   133         Uid appUID = Uid.createUid("myAppUID");
   133         // check null values
   140         // check null values
   134         PermissionResolver.testClearCache();
   141         PermissionResolver.testClearCache();
   135         try
   142         try
   136         {
   143         {
   137             ac.checkPermission((Permission)null);
   144             ac.checkPermission((Permission)null);
   138             assertTrue(false);
   145             assertWithTrace(false);
   139         }
   146         }
   140         catch (AccessControlException e)
   147         catch (AccessControlException e)
   141         {
   148         {
   142             assertTrue(true);
   149             assertWithTrace(true);
   143         }
   150         }
   144         assertTrue(ac.checkPermission((String)null) == 0);
   151         assertWithTrace(ac.checkPermission((String)null) == 0);
   145         // check permission which is not granted
   152         // check permission which is not granted
   146         PermissionResolver.testClearCache();
   153         PermissionResolver.testClearCache();
   147         try
   154         try
   148         {
   155         {
   149             ac.checkPermission(new CommProtocolPermission("comm://"));
   156             ac.checkPermission(new CommProtocolPermission("comm://"));
   150             assertTrue(false);
   157             assertWithTrace(false);
   151         }
   158         }
   152         catch (AccessControlException e)
   159         catch (AccessControlException e)
   153         {
   160         {
   154             assertTrue(true);
   161             assertWithTrace(true);
   155         }
   162         }
   156         try
   163         try
   157         {
   164         {
   158             ac.checkPermission(new CommProtocolPermission("comm://"));
   165             ac.checkPermission(new CommProtocolPermission("comm://"));
   159             assertTrue(false);
   166             assertWithTrace(false);
   160         }
   167         }
   161         catch (AccessControlException e)
   168         catch (AccessControlException e)
   162         {
   169         {
   163             assertTrue(true);
   170             assertWithTrace(true);
   164         }
   171         }
   165         // check allowed permission which is granted
   172         // check allowed permission which is granted
   166         PermissionResolver.testClearCache();
   173         PermissionResolver.testClearCache();
   167         grantedPermissions = new Vector();
   174         grantedPermissions = new Vector();
   168         grantedPermissions.addElement(new PolicyBasedPermissionImpl(
   175         grantedPermissions.addElement(new PolicyBasedPermissionImpl(
   174         storage.writeGrantedPermissions(appUID, null, grantedPermissions);
   181         storage.writeGrantedPermissions(appUID, null, grantedPermissions);
   175         ac.checkPermission(new CommProtocolPermission("comm://"));
   182         ac.checkPermission(new CommProtocolPermission("comm://"));
   176         try
   183         try
   177         {
   184         {
   178             ac.checkPermission(new FileProtocolPermission("file://myFile.txt", "read"));
   185             ac.checkPermission(new FileProtocolPermission("file://myFile.txt", "read"));
   179             assertTrue(false);
   186             assertWithTrace(false);
   180         }
   187         }
   181         catch (AccessControlException e)
   188         catch (AccessControlException e)
   182         {
   189         {
   183             assertTrue(true);
   190             assertWithTrace(true);
   184         }
   191         }
   185         storage.removeGrantedPermissions(appUID);
   192         storage.removeGrantedPermissions(appUID);
   186         // check permission not allowed
   193         // check permission not allowed
   187         PermissionResolver.testClearCache();
   194         PermissionResolver.testClearCache();
   188         grantedPermissions = new Vector();
   195         grantedPermissions = new Vector();
   200         storage.removeGrantedPermissions(appUID);
   207         storage.removeGrantedPermissions(appUID);
   201         storage.writeGrantedPermissions(appUID, null, grantedPermissions);
   208         storage.writeGrantedPermissions(appUID, null, grantedPermissions);
   202         try
   209         try
   203         {
   210         {
   204             ac.checkPermission(new SocketProtocolPermission("socket://:100"));
   211             ac.checkPermission(new SocketProtocolPermission("socket://:100"));
   205             assertTrue(false);
   212             assertWithTrace(false);
   206         }
   213         }
   207         catch (AccessControlException e)
   214         catch (AccessControlException e)
   208         {
   215         {
   209             assertTrue(true);
   216             assertWithTrace(true);
   210         }
   217         }
   211         storage.removeGrantedPermissions(appUID);
   218         storage.removeGrantedPermissions(appUID);
   212         // check user permission with NO as interaction mode -> security exception thrown
   219         // check user permission with NO as interaction mode -> security exception thrown
   213         PermissionResolver.testClearCache();
   220         PermissionResolver.testClearCache();
   214         grantedPermissions = new Vector();
   221         grantedPermissions = new Vector();
   226         storage.removeGrantedPermissions(appUID);
   233         storage.removeGrantedPermissions(appUID);
   227         storage.writeGrantedPermissions(appUID, null, grantedPermissions);
   234         storage.writeGrantedPermissions(appUID, null, grantedPermissions);
   228         try
   235         try
   229         {
   236         {
   230             ac.checkPermission(new HttpProtocolPermissionImpl("http://"));
   237             ac.checkPermission(new HttpProtocolPermissionImpl("http://"));
   231             assertTrue(false);
   238             assertWithTrace(false);
   232         }
   239         }
   233         catch (AccessControlException e)
   240         catch (AccessControlException e)
   234         {
   241         {
   235             assertTrue(true);
   242             assertWithTrace(true);
   236         }
   243         }
   237         try
   244         try
   238         {
   245         {
   239             ac.checkPermission(new HttpProtocolPermission("http://"));
   246             ac.checkPermission(new HttpProtocolPermission("http://"));
   240             assertTrue(false);
   247             assertWithTrace(false);
   241         }
   248         }
   242         catch (AccessControlException e)
   249         catch (AccessControlException e)
   243         {
   250         {
   244             assertTrue(true);
   251             assertWithTrace(true);
   245         }
   252         }
   246         storage.removeGrantedPermissions(appUID);
   253         storage.removeGrantedPermissions(appUID);
   247         // check the named permissions: unknown permission
   254         // check the named permissions: unknown permission
   248         assertTrue(ac.checkPermission("unknownPermission") == 0);
   255         assertWithTrace(ac.checkPermission("unknownPermission") == 0);
   249         // check the named permissions: allowed permission
   256         // check the named permissions: allowed permission
   250         PermissionResolver.testClearCache();
   257         PermissionResolver.testClearCache();
   251         grantedPermissions = new Vector();
   258         grantedPermissions = new Vector();
   252         grantedPermissions.addElement(new PolicyBasedPermissionImpl(
   259         grantedPermissions.addElement(new PolicyBasedPermissionImpl(
   253                                           "com.nokia.mj.impl.gcf.protocol.socket.SocketPermissionImpl",
   260                                           "com.nokia.mj.impl.gcf.protocol.socket.SocketPermissionImpl",
   254                                           "socket://",
   261                                           "socket://*",
   255                                           null,
   262                                           null,
   256                                           null));
   263                                           null));
   257         storage.removeGrantedPermissions(appUID);
   264         storage.removeGrantedPermissions(appUID);
   258         storage.writeGrantedPermissions(appUID, null, grantedPermissions);
   265         storage.writeGrantedPermissions(appUID, null, grantedPermissions);
   259         assertTrue(ac.checkPermission("javax.microedition.io.Connector.socket") == 1);
   266         assertWithTrace(ac.checkPermission("javax.microedition.io.Connector.socket") == 1);
   260         // check the named permissions: user permission with NO interaction mode
   267         // check the named permissions: user permission with NO interaction mode
   261         PermissionResolver.testClearCache();
   268         PermissionResolver.testClearCache();
   262         grantedPermissions = new Vector();
   269         grantedPermissions = new Vector();
   263         grantedPermissions.addElement(new PolicyBasedPermissionImpl(
   270         grantedPermissions.addElement(new PolicyBasedPermissionImpl(
   264                                           "com.nokia.mj.impl.gcf.protocol.http.HttpPermissionImpl",
   271                                           "com.nokia.mj.impl.gcf.protocol.http.HttpPermissionImpl",
   271                                                                                    UserSecuritySettings.BLANKET_INTERACTION_MODE,
   278                                                                                    UserSecuritySettings.BLANKET_INTERACTION_MODE,
   272                                                                                    UserSecuritySettings.NO_INTERACTION_MODE
   279                                                                                    UserSecuritySettings.NO_INTERACTION_MODE
   273                                                                                  })));
   280                                                                                  })));
   274         storage.removeGrantedPermissions(appUID);
   281         storage.removeGrantedPermissions(appUID);
   275         storage.writeGrantedPermissions(appUID, null, grantedPermissions);
   282         storage.writeGrantedPermissions(appUID, null, grantedPermissions);
   276         assertTrue(ac.checkPermission("javax.microedition.io.Connector.http") == 0);
   283         assertWithTrace(ac.checkPermission("javax.microedition.io.Connector.http") == 0);
   277         // check the named permissions: user permission with ONESHOT interaction mode
   284         // check the named permissions: user permission with ONESHOT interaction mode
   278         PermissionResolver.testClearCache();
   285         PermissionResolver.testClearCache();
   279         grantedPermissions = new Vector();
   286         grantedPermissions = new Vector();
   280         grantedPermissions.addElement(new PolicyBasedPermissionImpl(
   287         grantedPermissions.addElement(new PolicyBasedPermissionImpl(
   281                                           "com.nokia.mj.impl.gcf.protocol.http.HttpPermissionImpl",
   288                                           "com.nokia.mj.impl.gcf.protocol.http.HttpPermissionImpl",
   288                                                                                    UserSecuritySettings.BLANKET_INTERACTION_MODE,
   295                                                                                    UserSecuritySettings.BLANKET_INTERACTION_MODE,
   289                                                                                    UserSecuritySettings.NO_INTERACTION_MODE
   296                                                                                    UserSecuritySettings.NO_INTERACTION_MODE
   290                                                                                  })));
   297                                                                                  })));
   291         storage.removeGrantedPermissions(appUID);
   298         storage.removeGrantedPermissions(appUID);
   292         storage.writeGrantedPermissions(appUID, null, grantedPermissions);
   299         storage.writeGrantedPermissions(appUID, null, grantedPermissions);
   293         assertTrue(ac.checkPermission("javax.microedition.io.Connector.http") == -1);
   300         assertWithTrace(ac.checkPermission("javax.microedition.io.Connector.http") == -1);
   294         // check the named permissions: user permission with BLANKET interaction mode (blanket prompt not shown yet)
   301         // check the named permissions: user permission with BLANKET interaction mode (blanket prompt not shown yet)
   295         PermissionResolver.testClearCache();
   302         PermissionResolver.testClearCache();
   296         grantedPermissions = new Vector();
   303         grantedPermissions = new Vector();
   297         grantedPermissions.addElement(new PolicyBasedPermissionImpl(
   304         grantedPermissions.addElement(new PolicyBasedPermissionImpl(
   298                                           "com.nokia.mj.impl.gcf.protocol.http.HttpPermissionImpl",
   305                                           "com.nokia.mj.impl.gcf.protocol.http.HttpPermissionImpl",
   305                                                                                    UserSecuritySettings.BLANKET_INTERACTION_MODE,
   312                                                                                    UserSecuritySettings.BLANKET_INTERACTION_MODE,
   306                                                                                    UserSecuritySettings.NO_INTERACTION_MODE
   313                                                                                    UserSecuritySettings.NO_INTERACTION_MODE
   307                                                                                  })));
   314                                                                                  })));
   308         storage.removeGrantedPermissions(appUID);
   315         storage.removeGrantedPermissions(appUID);
   309         storage.writeGrantedPermissions(appUID, null, grantedPermissions);
   316         storage.writeGrantedPermissions(appUID, null, grantedPermissions);
   310         assertTrue(ac.checkPermission("javax.microedition.io.Connector.http") == -1);
   317         assertWithTrace(ac.checkPermission("javax.microedition.io.Connector.http") == -1);
   311         // check the named permissions: user permission with BLANKET interaction mode (blanket prompt shown already)
   318         // check the named permissions: user permission with BLANKET interaction mode (blanket prompt shown already)
   312         PermissionResolver.testClearCache();
   319         PermissionResolver.testClearCache();
   313         grantedPermissions = new Vector();
   320         grantedPermissions = new Vector();
   314         grantedPermissions.addElement(new PolicyBasedPermissionImpl(
   321         grantedPermissions.addElement(new PolicyBasedPermissionImpl(
   315                                           "com.nokia.mj.impl.gcf.protocol.http.HttpPermissionImpl",
   322                                           "com.nokia.mj.impl.gcf.protocol.http.HttpPermissionImpl",
   323                                                                                    UserSecuritySettings.NO_INTERACTION_MODE
   330                                                                                    UserSecuritySettings.NO_INTERACTION_MODE
   324                                                                                  })));
   331                                                                                  })));
   325         storage.removeGrantedPermissions(appUID);
   332         storage.removeGrantedPermissions(appUID);
   326         storage.writeGrantedPermissions(appUID, null, grantedPermissions);
   333         storage.writeGrantedPermissions(appUID, null, grantedPermissions);
   327         storage.writeUserSecuritySettingsPromptFlag(appUID, "Net Access", true);
   334         storage.writeUserSecuritySettingsPromptFlag(appUID, "Net Access", true);
   328         assertTrue(ac.checkPermission("javax.microedition.io.Connector.http") == 1);
   335         assertWithTrace(ac.checkPermission("javax.microedition.io.Connector.http") == 1);
   329         // check the named permissions: user permission with SESSION interaction mode (session prompt not shown already)
   336         // check the named permissions: user permission with SESSION interaction mode (session prompt not shown already)
   330         PermissionResolver.testClearCache();
   337         PermissionResolver.testClearCache();
   331         grantedPermissions = new Vector();
   338         grantedPermissions = new Vector();
   332         grantedPermissions.addElement(new PolicyBasedPermissionImpl(
   339         grantedPermissions.addElement(new PolicyBasedPermissionImpl(
   333                                           "com.nokia.mj.impl.gcf.protocol.http.HttpPermissionImpl",
   340                                           "com.nokia.mj.impl.gcf.protocol.http.HttpPermissionImpl",
   341                                                                                    UserSecuritySettings.NO_INTERACTION_MODE
   348                                                                                    UserSecuritySettings.NO_INTERACTION_MODE
   342                                                                                  })));
   349                                                                                  })));
   343         storage.removeGrantedPermissions(appUID);
   350         storage.removeGrantedPermissions(appUID);
   344         storage.writeGrantedPermissions(appUID, null, grantedPermissions);
   351         storage.writeGrantedPermissions(appUID, null, grantedPermissions);
   345         storage.writeUserSecuritySettingsPromptFlag(appUID, "Net Access", true);
   352         storage.writeUserSecuritySettingsPromptFlag(appUID, "Net Access", true);
   346         assertTrue(ac.checkPermission("javax.microedition.io.Connector.http") == -1);
   353         assertWithTrace(ac.checkPermission("javax.microedition.io.Connector.http") == -1);
   347         // check the named permissions: denied permission
   354         // check the named permissions: denied permission
   348         PermissionResolver.testClearCache();
   355         PermissionResolver.testClearCache();
   349         grantedPermissions = new Vector();
   356         grantedPermissions = new Vector();
   350         grantedPermissions.addElement(new PolicyBasedPermissionImpl(
   357         grantedPermissions.addElement(new PolicyBasedPermissionImpl(
   351                                           "com.nokia.mj.impl.gcf.protocol.datagram.DatagramPermissionImpl",
   358                                           "com.nokia.mj.impl.gcf.protocol.datagram.DatagramPermissionImpl",
   352                                           "datagram://",
   359                                           "datagram://",
   353                                           null,
   360                                           null,
   354                                           null));
   361                                           null));
   355         storage.removeGrantedPermissions(appUID);
   362         storage.removeGrantedPermissions(appUID);
   356         storage.writeGrantedPermissions(appUID, null, grantedPermissions);
   363         storage.writeGrantedPermissions(appUID, null, grantedPermissions);
   357         assertTrue(ac.checkPermission("javax.wireless.messaging.mms.send") == 0);
   364         assertWithTrace(ac.checkPermission("javax.wireless.messaging.mms.send") == 0);
   358         // cleanup
   365         // cleanup
   359         storage.removeGrantedPermissions(appUID);
   366         storage.removeGrantedPermissions(appUID);
   360         AccessControllerFactoryImpl.destroyAccessController(appUID);
   367         AccessControllerFactoryImpl.destroyAccessController(appUID);
   361     }
   368     }
   362 }
   369 }