RuntimeTest.java revision cb318c6f4fe5b0e20099fa85f1b95ccb2d24119f
1cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath/* 2cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * Licensed to the Apache Software Foundation (ASF) under one or more 3cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * contributor license agreements. See the NOTICE file distributed with 4cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * this work for additional information regarding copyright ownership. 5cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * The ASF licenses this file to You under the Apache License, Version 2.0 6cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * (the "License"); you may not use this file except in compliance with 7cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * the License. You may obtain a copy of the License at 8cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * 9cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * http://www.apache.org/licenses/LICENSE-2.0 10cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * 11cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * Unless required by applicable law or agreed to in writing, software 12cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * distributed under the License is distributed on an "AS IS" BASIS, 13cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * See the License for the specific language governing permissions and 15cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * limitations under the License. 16cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 17cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 18cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathpackage tests.api.java.lang; 19cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 20cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.IOException; 21cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.InputStream; 22cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.Vector; 23cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 24cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathpublic class RuntimeTest extends junit.framework.TestCase { 25cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 26cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Runtime r = Runtime.getRuntime(); 27cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 28cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath InputStream is; 29cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 30cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath String s; 31cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 32cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath static boolean flag = false; 33cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 34cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath static boolean ranFinalize = false; 35cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 36cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath class HasFinalizer { 37cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath String internalString; 38cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 39cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath HasFinalizer(String s) { 40cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath internalString = s; 41cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 42cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 43cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath @Override 44cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath protected void finalize() { 45cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath internalString = "hit"; 46cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 47cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 48cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 49cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath @Override 50cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath protected void finalize() { 51cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (flag) 52cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ranFinalize = true; 53cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 54cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 55cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath protected RuntimeTest createInstance() { 56cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return new RuntimeTest("FT"); 57cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 58cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 59cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 60cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Runtime#exit(int) 61cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 62cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_exitI() { 63cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method void java.lang.Runtime.exit(int) 64cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Can't really test this", true); 65cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 66cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 67cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 68cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Runtime#exec(java.lang.String) 69cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 70cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_exec() { 71cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath boolean success = false; 72cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 73cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /* successful exec's are tested by java.lang.Process */ 74cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 75cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Runtime.getRuntime().exec("AnInexistentProgram"); 76cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (IOException e) { 77cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath success = true; 78cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 79cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue( 80cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath "failed to throw IOException when exec'ed inexistent program", 81cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath success); 82cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 83cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 84cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 85cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Runtime#freeMemory() 86cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 87cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_freeMemory() { 88cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method long java.lang.Runtime.freeMemory() 89cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("freeMemory returned nonsense value", r.freeMemory() > 0); 90cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 91cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 92cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 93cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Runtime#gc() 94cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 95cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_gc() { 96cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method void java.lang.Runtime.gc() 97cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 98cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath r.gc(); // ensure all garbage objects have been collected 99cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath r.gc(); // two GCs force collection phase to complete 100cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath long firstRead = r.totalMemory() - r.freeMemory(); 101cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Vector<StringBuffer> v = new Vector<StringBuffer>(); 102cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (int i = 1; i < 10; i++) 103cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath v.addElement(new StringBuffer(10000)); 104cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath long secondRead = r.totalMemory() - r.freeMemory(); 105cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath v = null; 106cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath r.gc(); 107cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath r.gc(); 108cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("object memory did not grow", secondRead > firstRead); 109cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("space was not reclaimed", (r.totalMemory() - r 110cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .freeMemory()) < secondRead); 111cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (OutOfMemoryError oome) { 112cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath System.out.println("Out of memory during freeMemory test"); 113cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath r.gc(); 114cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath r.gc(); 115cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 116cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 117cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 118cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 119cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Runtime#getRuntime() 120cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 121cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_getRuntime() { 122cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method java.lang.Runtime java.lang.Runtime.getRuntime() 123cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Used to test", true); 124cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 125cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 126cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 127cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Runtime#runFinalization() 128cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 129cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_runFinalization() { 130cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method void java.lang.Runtime.runFinalization() 131cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 132cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath flag = true; 133cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath createInstance(); 134cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int count = 10; 135cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // the gc below likely bogosifies the test, but will have to do for 136cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // the moment 137cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath while (!ranFinalize && count-- > 0) { 138cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath r.gc(); 139cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath r.runFinalization(); 140cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 141cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Failed to run finalization", ranFinalize); 142cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 143cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 144cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 145cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Runtime#totalMemory() 146cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 147cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_totalMemory() { 148cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method long java.lang.Runtime.totalMemory() 149cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("totalMemory returned nonsense value", r.totalMemory() >= r 150cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .freeMemory()); 151cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 152cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 153cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public RuntimeTest() { 154cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 155cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 156cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public RuntimeTest(String name) { 157cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath super(name); 158cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 159cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath} 160