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