javacommons/utils/tsrc/javasrc/com/nokia/mj/impl/rt/support/JvmPortBasicTest.java
changeset 80 d6dafc5d983f
equal deleted inserted replaced
78:71ad690e91f5 80:d6dafc5d983f
       
     1 /*
       
     2 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:
       
    15 *
       
    16 */
       
    17 
       
    18 package com.nokia.mj.impl.rt.support;
       
    19 
       
    20 import com.nokia.mj.impl.rt.test.UnitTestSuiteCreator;
       
    21 import com.nokia.mj.impl.rt.test.JvmPortTest;
       
    22 import com.nokia.mj.impl.rt.support.Jvm;
       
    23 import com.nokia.mj.impl.rt.support.JvmInternal;
       
    24 import j2meunit.framework.Test;
       
    25 import j2meunit.framework.TestCase;
       
    26 import j2meunit.framework.TestMethod;
       
    27 import j2meunit.framework.TestSuite;
       
    28 
       
    29 /**
       
    30  * JvmPort basic unit tests. Testing that the delegation works.
       
    31  */
       
    32 public class JvmPortBasicTest extends TestCase implements UnitTestSuiteCreator
       
    33 {
       
    34 
       
    35     // Begin j2meunit test framework setup
       
    36     public TestSuite createTestSuite(String[] args)
       
    37     {
       
    38         TestSuite suite = new TestSuite(this.getClass().getName());
       
    39 
       
    40         suite.addTest(new JvmPortBasicTest("testJvm", new TestMethod()
       
    41         {
       
    42             public void run(TestCase tc)
       
    43             {
       
    44                 ((JvmPortBasicTest)tc).testJvm();
       
    45             }
       
    46         }));
       
    47 
       
    48         suite.addTest(new JvmPortBasicTest("testVmPortNotExist", new TestMethod()
       
    49         {
       
    50             public void run(TestCase tc)
       
    51             {
       
    52                 ((JvmPortBasicTest)tc).testVmPortNotExist();
       
    53             }
       
    54         }));
       
    55 
       
    56 
       
    57         return suite;
       
    58 
       
    59     }
       
    60 
       
    61     public JvmPortBasicTest()
       
    62     {
       
    63     }
       
    64 
       
    65     public JvmPortBasicTest(String aTestName, TestMethod aTestMethod)
       
    66     {
       
    67         super(aTestName, aTestMethod);
       
    68     }
       
    69 
       
    70     // End j2meunit test framework setup
       
    71 
       
    72     protected void setUp()
       
    73     {
       
    74     }
       
    75 
       
    76     protected void tearDown()
       
    77     {
       
    78     }
       
    79 
       
    80     private void checkCallCounts(String info, int ind)
       
    81     {
       
    82 
       
    83         assertTrue(info + " failed " + JvmPortTest.print(),
       
    84                    JvmPortTest.checkCalls(ind));
       
    85 
       
    86     }
       
    87 
       
    88     private void checkObjects(String info, Object obj1, Object obj2, Object res)
       
    89     {
       
    90 
       
    91         boolean ok = JvmPortTest.mObj1 == obj1;
       
    92         if (!ok && obj1 != null)
       
    93         {
       
    94             ok = obj1.equals(JvmPortTest.mObj1);
       
    95         }
       
    96         assertTrue(info + " failed. obj1 " + obj1 + " != " + " mObj1 " + JvmPortTest.mObj1, ok);
       
    97 
       
    98         ok = JvmPortTest.mObj2 == obj2;
       
    99         if (!ok && obj2 != null)
       
   100         {
       
   101             ok = obj2.equals(JvmPortTest.mObj2);
       
   102         }
       
   103         assertTrue(info + " failed. obj2 " + obj2 + " != " + " mObj2 " + JvmPortTest.mObj2, ok);
       
   104 
       
   105         ok = JvmPortTest.mReturnObj == res;
       
   106         if (!ok && res != null)
       
   107         {
       
   108             ok = res.equals(JvmPortTest.mReturnObj);
       
   109         }
       
   110         assertTrue(info + " failed. res " + res + " != " + " mReturnObj " + JvmPortTest.mReturnObj, ok);
       
   111 
       
   112     }
       
   113     // Test cases
       
   114 
       
   115     private static final String sysProp = "com.nokia.jvm.port";
       
   116 
       
   117     private void setPort(String port)
       
   118     {
       
   119         JvmPortTest.setSystemPropertyImpl(sysProp, port);
       
   120         JvmPortTest.resetInstance();
       
   121     }
       
   122     private void testJvm()
       
   123     {
       
   124         final String testProp = "test.JvmPortTest";
       
   125         String origPort = System.getProperty(sysProp);
       
   126         try
       
   127         {
       
   128             Object testObject1 = new String("testlib");
       
   129             Object testObject2 = null;
       
   130             Object returnObject = null;
       
   131             String methodName;
       
   132             //************ Jvm.loadSystemLibrary ***************************
       
   133             setPort(testProp);
       
   134             Jvm.loadSystemLibrary((String)testObject1);
       
   135             setPort(origPort);
       
   136             methodName = "Jvm.loadSystemLibrary()";
       
   137             checkCallCounts(methodName, JvmPortTest.LOADSYSTEMLIBRARY_CALL);
       
   138             checkObjects(methodName, testObject1, null, null);
       
   139             JvmPortTest.clear();
       
   140 
       
   141             //************ Jvm.loadApplicationClass ***************************
       
   142             testObject1 = new String("testClass");
       
   143             JvmPortTest.mReturnObj = getClass();
       
   144             setPort(testProp);
       
   145             returnObject = Jvm.loadApplicationClass((String)testObject1);
       
   146             methodName = "Jvm.loadApplicationClass()";
       
   147             setPort(origPort);
       
   148             checkCallCounts(methodName, JvmPortTest.LOADAPPLICATIONCLASS_CALL);
       
   149             checkObjects(methodName, testObject1, null, returnObject);
       
   150             JvmPortTest.clear();
       
   151 
       
   152             JvmPortTest.mThrowable = new ClassNotFoundException();
       
   153             setPort(testProp);
       
   154             try
       
   155             {
       
   156                 returnObject = Jvm.loadApplicationClass((String)testObject1);
       
   157                 setPort(origPort);
       
   158                 assertTrue(methodName + ", no Excpetion", false);
       
   159             }
       
   160             catch (ClassNotFoundException cnfe)
       
   161             {
       
   162                 setPort(origPort);
       
   163                 assertTrue(methodName + ", wrong exception: " + cnfe,
       
   164                            cnfe == JvmPortTest.mThrowable);
       
   165             }
       
   166             setPort(origPort);
       
   167             checkCallCounts(methodName, JvmPortTest.LOADAPPLICATIONCLASS_CALL);
       
   168             JvmPortTest.clear();
       
   169 
       
   170             //************ Jvm.setThreadAsDaemon ***************************
       
   171             testObject1 = new Thread(new Runnable()
       
   172             {
       
   173                 public void run() {}
       
   174             });
       
   175             testObject2 = new Boolean(true);
       
   176             setPort(testProp);
       
   177             Jvm.setThreadAsDaemon((Thread)testObject1, ((Boolean)testObject2).booleanValue());
       
   178             methodName = "Jvm.setThreadAsDaemon()";
       
   179             setPort(origPort);
       
   180             checkCallCounts(methodName, JvmPortTest.SETTHREADASDAEMON_CALL);
       
   181             checkObjects(methodName, testObject1, testObject2, null);
       
   182             JvmPortTest.clear();
       
   183 
       
   184             JvmPortTest.mThrowable = new IllegalThreadStateException();
       
   185             setPort(testProp);
       
   186             try
       
   187             {
       
   188                 Jvm.setThreadAsDaemon((Thread)testObject1, ((Boolean)testObject2).booleanValue());
       
   189                 setPort(origPort);
       
   190                 assertTrue(methodName + ", no Excpetion", false);
       
   191             }
       
   192             catch (IllegalThreadStateException itse)
       
   193             {
       
   194                 setPort(origPort);
       
   195                 assertTrue(methodName + ", wrong exception: " + itse,
       
   196                            itse == JvmPortTest.mThrowable);
       
   197             }
       
   198             setPort(origPort);
       
   199             checkCallCounts(methodName, JvmPortTest.SETTHREADASDAEMON_CALL);
       
   200             JvmPortTest.clear();
       
   201 
       
   202             JvmPortTest.mThrowable = new SecurityException();
       
   203             setPort(testProp);
       
   204             try
       
   205             {
       
   206                 Jvm.setThreadAsDaemon((Thread)testObject1, ((Boolean)testObject2).booleanValue());
       
   207                 setPort(origPort);
       
   208                 assertTrue(methodName + ", no Excpetion", false);
       
   209             }
       
   210             catch (SecurityException se)
       
   211             {
       
   212                 setPort(origPort);
       
   213                 assertTrue(methodName + ", wrong exception: " + se,
       
   214                            se == JvmPortTest.mThrowable);
       
   215             }
       
   216             setPort(origPort);
       
   217             checkCallCounts(methodName, JvmPortTest.SETTHREADASDAEMON_CALL);
       
   218             JvmPortTest.clear();
       
   219 
       
   220             //************ Jvm.getResourceAsNativeMemory ***************************
       
   221             setPort(testProp);
       
   222             testObject1 = new String("jarPath");
       
   223             testObject2 = new String("resName");
       
   224             JvmPortTest.mReturnObj = new NativeMemoryBlock()
       
   225             {
       
   226                 public long getPointer()
       
   227                 {
       
   228                     return 0;
       
   229                 }
       
   230                 public int getSize()
       
   231                 {
       
   232                     return 0;
       
   233                 }
       
   234                 public void freeMemory() {}
       
   235             };
       
   236             returnObject = Jvm.getResourceAsNativeMemory((String)testObject1, (String)testObject2);
       
   237             methodName = "Jvm.getResourceAsNativeMemory()";
       
   238             setPort(origPort);
       
   239             checkCallCounts(methodName, JvmPortTest.GETRESOURCEASNATIVEMEMORY_CALL);
       
   240             checkObjects(methodName, testObject1, testObject2, returnObject);
       
   241             JvmPortTest.clear();
       
   242 
       
   243             //************ JvmInternal.enableRuntimeExit ***************************
       
   244             setPort(testProp);
       
   245             JvmInternal.enableRuntimeExit();
       
   246             methodName = "JvmInternal.enableRuntimeExit()";
       
   247             setPort(origPort);
       
   248             checkCallCounts(methodName, JvmPortTest.ENABLERUNTIMEEXIT_CALL);
       
   249             checkObjects(methodName, null, null, null);
       
   250             JvmPortTest.clear();
       
   251 
       
   252             //************ JvmInternal.disableRuntimeExit ***************************
       
   253             setPort(testProp);
       
   254             JvmInternal.disableRuntimeExit();
       
   255             methodName = "JvmInternal.disableRuntimeExit()";
       
   256             setPort(origPort);
       
   257             checkCallCounts(methodName, JvmPortTest.DISABLERUNTIMEEXIT_CALL);
       
   258             checkObjects(methodName, null, null, null);
       
   259             JvmPortTest.clear();
       
   260 
       
   261             //************ JvmInternal.exitVm ***************************
       
   262             setPort(testProp);
       
   263             testObject1 = new Integer(42);
       
   264             JvmInternal.exitVm(((Integer)testObject1).intValue());
       
   265             methodName = "JvmInternal.exitVm()";
       
   266             setPort(origPort);
       
   267             checkCallCounts(methodName, JvmPortTest.EXITVM_CALL);
       
   268             checkObjects(methodName, testObject1, null, null);
       
   269             JvmPortTest.clear();
       
   270 
       
   271             //************ JvmInternal.enableFinalization ***************************
       
   272             setPort(testProp);
       
   273             testObject1 = getClass();
       
   274             JvmInternal.enableFinalization((Class)testObject1);
       
   275             methodName = "JvmInternal.enableFinalization()";
       
   276             setPort(origPort);
       
   277             checkCallCounts(methodName, JvmPortTest.ENABLEFINALIZATION_CALL);
       
   278             checkObjects(methodName, testObject1, null, null);
       
   279             JvmPortTest.clear();
       
   280 
       
   281             //************ JvmInternal.runFinalization ***************************
       
   282             setPort(testProp);
       
   283             JvmInternal.runFinalization();
       
   284             methodName = "JvmInternal.runFinalization()";
       
   285             setPort(origPort);
       
   286             checkCallCounts(methodName, JvmPortTest.RUNFINALIZATION_CALL);
       
   287             checkObjects(methodName, null, null, null);
       
   288             JvmPortTest.clear();
       
   289 
       
   290             //************ JvmInternal.runYoungGenerationGc ***************************
       
   291 
       
   292             setPort(testProp);
       
   293             JvmPortTest.mReturnObj = new Boolean(true);
       
   294             boolean res = JvmInternal.runYoungGenerationGc();
       
   295             returnObject = new Boolean(res);
       
   296             methodName = "JvmInternal.runYoungGenerationGc()";
       
   297             setPort(origPort);
       
   298             checkCallCounts(methodName, JvmPortTest.RUNYOUNGGENERATIONGC_CALL);
       
   299             checkObjects(methodName, null, null, returnObject);
       
   300             JvmPortTest.clear();
       
   301 
       
   302 
       
   303             //************ JvmInternal.setThreadEventListener ***************************
       
   304             setPort(testProp);
       
   305             testObject1 = new ThreadEventListener()
       
   306             {
       
   307                 public void threadStarting(Thread newThread, Thread parentThread) {}
       
   308                 public void threadDied(Thread thread) {}
       
   309                 public void uncaughtException(Thread thread, Throwable e) {}
       
   310             };
       
   311             JvmInternal.setThreadEventListener((ThreadEventListener)testObject1);
       
   312             methodName = "JvmInternal.setThreadEventListener()";
       
   313             setPort(origPort);
       
   314             checkCallCounts(methodName, JvmPortTest.SETTHREADEVENTLISTENER_CALL);
       
   315             checkObjects(methodName, testObject1, null, null);
       
   316             JvmPortTest.clear();
       
   317 
       
   318             //************ JvmInternal.addRestrictedPackagePrefixes ***************************
       
   319             setPort(testProp);
       
   320             testObject1 = new String[] {"package1, package2, package3"};
       
   321             JvmInternal.addRestrictedPackagePrefixes((String[])testObject1);
       
   322             methodName = "JvmInternal.addRestrictedPackagePrefixes()";
       
   323             setPort(origPort);
       
   324             checkCallCounts(methodName, JvmPortTest.ADDRESTRICTEDPACKAGEPREFIXES_CALL);
       
   325             checkObjects(methodName, testObject1, null, null);
       
   326             JvmPortTest.clear();
       
   327 
       
   328             JvmPortTest.mThrowable = new SecurityException();
       
   329             setPort(testProp);
       
   330             try
       
   331             {
       
   332                 JvmInternal.addRestrictedPackagePrefixes((String[])testObject1);
       
   333                 setPort(origPort);
       
   334                 assertTrue(methodName + ", no Excpetion", false);
       
   335             }
       
   336             catch (SecurityException se)
       
   337             {
       
   338                 setPort(origPort);
       
   339                 assertTrue(methodName + ", wrong exception: " + se,
       
   340                            se == JvmPortTest.mThrowable);
       
   341             }
       
   342             setPort(origPort);
       
   343             checkCallCounts(methodName, JvmPortTest.ADDRESTRICTEDPACKAGEPREFIXES_CALL);
       
   344             JvmPortTest.clear();
       
   345 
       
   346             //************ JvmInternal.addProtectedPackagePrefixes ***************************
       
   347             setPort(testProp);
       
   348             testObject1 = new String[] {"package4, package5, package6"};
       
   349             JvmInternal.addProtectedPackagePrefixes((String[])testObject1);
       
   350             methodName = "JvmInternal.addProtectedPackagePrefixes()";
       
   351             setPort(origPort);
       
   352             checkCallCounts(methodName, JvmPortTest.ADDPROTECTEDPACKAGEPREFIXES_CALL);
       
   353             checkObjects(methodName, testObject1, null, null);
       
   354             JvmPortTest.clear();
       
   355 
       
   356             JvmPortTest.mThrowable = new SecurityException();
       
   357             setPort(testProp);
       
   358             try
       
   359             {
       
   360                 JvmInternal.addProtectedPackagePrefixes((String[])testObject1);
       
   361                 setPort(origPort);
       
   362                 assertTrue(methodName + ", no Excpetion", false);
       
   363             }
       
   364             catch (SecurityException se)
       
   365             {
       
   366                 setPort(origPort);
       
   367                 assertTrue(methodName + ", wrong exception: " + se,
       
   368                            se == JvmPortTest.mThrowable);
       
   369             }
       
   370             setPort(origPort);
       
   371             checkCallCounts(methodName, JvmPortTest.ADDPROTECTEDPACKAGEPREFIXES_CALL);
       
   372             JvmPortTest.clear();
       
   373 
       
   374             //************ JvmInternal.appendToClassPath ***************************
       
   375             setPort(testProp);
       
   376             testObject1 = new String("class to append");
       
   377             JvmInternal.appendToClassPath((String)testObject1);
       
   378             methodName = "JvmInternal.appendToClassPath()";
       
   379             setPort(origPort);
       
   380             checkCallCounts(methodName, JvmPortTest.APPENDTOCLASSPATH_CALL);
       
   381             checkObjects(methodName, testObject1, null, null);
       
   382             JvmPortTest.clear();
       
   383 
       
   384             //************ JvmInternal.shrinkJavaHeapToMinimum ***************************
       
   385             setPort(testProp);
       
   386             JvmPortTest.mReturnObj = new Integer(22);
       
   387             int res2 = JvmInternal.shrinkJavaHeapToMinimum();
       
   388             returnObject = new Integer(res2);
       
   389             methodName = "JvmInternal.shrinkJavaHeapToMinimum()";
       
   390             setPort(origPort);
       
   391             checkCallCounts(methodName, JvmPortTest.SHRINKJAVAHEAPTOMINIMUM_CALL);
       
   392             checkObjects(methodName, null, null, returnObject);
       
   393             JvmPortTest.clear();
       
   394 
       
   395             //************ JvmInternal.expandJavaHeap ***************************
       
   396             setPort(testProp);
       
   397             testObject1 = new Integer(33);
       
   398             JvmPortTest.mReturnObj = new Integer(44);
       
   399             int res3 = JvmInternal.expandJavaHeap(((Integer)testObject1).intValue());
       
   400             returnObject = new Integer(res3);
       
   401             methodName = "JvmInternal.expandJavaHeap()";
       
   402             setPort(origPort);
       
   403             checkCallCounts(methodName, JvmPortTest.EXPANDJAVAHEAP_CALL);
       
   404             checkObjects(methodName, testObject1, null, returnObject);
       
   405             JvmPortTest.clear();
       
   406 
       
   407             //************ END***************************
       
   408             assertTrue("Calls missed", JvmPortTest.allCalled());
       
   409 
       
   410         }
       
   411         catch (Throwable t)
       
   412         {
       
   413             setPort(origPort);
       
   414             t.printStackTrace();
       
   415             assertTrue(t.toString(), false);
       
   416         }
       
   417         setPort(origPort);
       
   418     }
       
   419 
       
   420     private void testVmPortNotExist()
       
   421     {
       
   422         System.out.println("NOTE!! IT IS EXPECTED THAT THIS TEST WILL LEAD TO SOME ERROR LOGS.");
       
   423         final String testProp = "test.JvmPortTest";
       
   424         String origPort = System.getProperty(sysProp);
       
   425         try
       
   426         {
       
   427             setPort("TestPort");
       
   428             JvmInternal.enableRuntimeExit();
       
   429             setPort(origPort);
       
   430             assertTrue("No exception.", false);
       
   431         }
       
   432         catch (RuntimeException re)
       
   433         {
       
   434             setPort(origPort);
       
   435             int ind = re.toString().indexOf("Not able to instantiate class com.nokia.mj.impl.rt.TestPort");
       
   436             boolean ok = ind >= 0;
       
   437             if (!ok)
       
   438             {
       
   439                 // Accept also java.lang.ExceptionInInitializerError.
       
   440                 ok = re.toString().equals("java.lang.ExceptionInInitializerError");
       
   441             }
       
   442             assertTrue(re.toString(),  ok);
       
   443         }
       
   444         catch (Throwable t)
       
   445         {
       
   446             t.printStackTrace();
       
   447             assertTrue(t.toString(), false);
       
   448         }
       
   449 
       
   450         try
       
   451         {
       
   452             setPort(origPort);
       
   453         }
       
   454         catch (Throwable t)
       
   455         {
       
   456         }
       
   457     }
       
   458 }