blob: beaebb833d72b0ba2e587dc1ac5397311e253782 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @author Serguei S.Zapreyev
*/
package java.lang;
import java.io.File;
import junit.framework.TestCase;
/*
* Created on January 5, 2005
*
* This RuntimeTest class is used to test the Core API Runtime class
*
*/
/**
* ###############################################################################
* ###############################################################################
* REMINDER("XXX") LIST:
* 1. [Jun 11, 2005] test_availableProcessors, test_freeMemory, test_gc, test_runFinalization,
* test_runFinalizersOnExit fail on "ORP+our Runtime+CLASSPATH API" platform
* because the availableProcessors, freeMemory, runFinalization (runFinalizersOnExit?)
* methods aren't correctly supported yet in orp/drl_natives/src
* 2. [Jun 11, 2005] test_maxMemory, test_totalMemory fail on "ORP+CLASSPATH API" platform
* because the maxMemory
* method isn't correctly supported yet in orp/drl_natives/src:
* (Exception: java.lang.UnsatisfiedLinkError: Error compiling method java/lang/Runtime.maxMemory()J)
* 3. [Jun 11, 2005] test_availableProcessors fails on "ORP+CLASSPATH API" platform
* because the availableProcessors
* method isn't correctly supported yet in orp/drl_natives/src:
* (Exception: java.lang.UnsatisfiedLinkError: Error compiling method java/lang/Runtime.availableProcessors()I)
* ###############################################################################
* ###############################################################################
**/
public class RuntimeTest extends TestCase {
protected void setUp() throws Exception {
}
protected void tearDown() throws Exception {
}
/**
*
*/
public void test_availableProcessors() {
/**/System.out.println("test_availableProcessors");
int fR = Runtime.getRuntime().availableProcessors();
int sR = Runtime.getRuntime().availableProcessors();
assertEquals("Runtime.availableProcessors method should return the " +
"same value during this test running as a rule!",
fR, sR);
assertTrue("Runtime.availableProcessors method should return " +
"a value greater than 0!(" + fR + "|" +
Runtime.getRuntime().availableProcessors()+ ")",
fR > 0);
//XXX: the next case may be to compare with the bringing via Runtime.exec(...).getOutputStream()...
}
/**
*
*/
public void test_freeMemory() {
Runtime.getRuntime().gc();
long r1 = Runtime.getRuntime().freeMemory();
assertTrue("Runtime.freeMemory() returned negative value: " + r1,
r1 >= 0);
if (r1 < 500000) {
// low memory condition,
// avoid false alarm if indicator is too coarse-grained
return;
}
int probe = 0;
try {
String stmp = "";
for (int ind = 0; ind < 300; ind++) {
stmp += "0123456789";
}
String inc = stmp;
probe = stmp.length();
while (r1 <= Runtime.getRuntime().freeMemory()) {
stmp += inc;
probe = stmp.length();
}
} catch (OutOfMemoryError e) {
fail("Runtime.freeMemory() failed to detect " + probe
+ " memory reduction from " + r1);
}
}
/**
*
*/
public void test_gc() {
/**/System.out.println("test_gc");
long r1=Runtime.getRuntime().freeMemory();
long r2;
long r4;
String[] sa = new String[(int)r1/50000];
int ind1=0;
try {
String stmp = "";
for (int ind2=0; ind2<100/* 1000 */; ind2++) {
stmp += "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"+
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"+
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"+
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"+
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"+
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"+
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"+
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"+
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"+
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"+
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";
}
for (ind1=0; ind1 <(int)r1/50000; ind1++) {
sa[ind1]=""+stmp;
}
r2=Runtime.getRuntime().freeMemory();
for (ind1=0; ind1 <(int)r1/50000; ind1++) {
sa[ind1]=null;
Runtime.getRuntime().gc();
try {Thread.sleep(20);} catch (Exception e) {}
}
sa=null;
try {Thread.sleep(1000);} catch (Exception e) {}
Runtime.getRuntime().gc();
try {Thread.sleep(1000);} catch (Exception e) {}
r4=Runtime.getRuntime().freeMemory();
//assertTrue( "FAILED: gc.check001: Runtime.gc method should initiate garbage collecting!("+r4+">"+r2+"?)", r4>r2 /*r4-r2>49999*/);
if( r4 <= r2 ) {
System.out.println("WARNNING: RuntimeTest.test_gc " +
"check001: It would be better if Runtime.gc method" +
" could initiate garbage collecting! " +
"(Here we have " + r4 + " !> " + r2 + " .)");
}
} catch (OutOfMemoryError e) {
System.out.println("WARNNING: test_gc did not check " +
"Runtime.gc method due to the technical reason !");
}
}
/**
*
*/
public void test_getLocalizedInputStream() {
/**/System.out.println("test_getLocalizedInputStream");
byte[] bt = new byte[9];
int res = 0;
java.io.InputStream is = Runtime.getRuntime().getLocalizedInputStream(
new java.io.StringBufferInputStream(
"\u005a\u0061\u0070\u0072\u0065\u0079\u0065\u0076"));
try {
res = is.read(bt);
}
catch(Exception e) {
fail("Runtime.getLocalizedInputStream method should return " +
"correct input stream!");
}
assertEquals("Incorrect number of bytes returned by InputStream!",
8, res);
//assertTrue("FAILED: getLocalizedInputStream.check003: Runtime.getLocalizedInputStream method should return correct input stream ("+new String(bt)+")!", new String(bt).indexOf("Zapreyev")==0);
}
/**
*
*/
public void test_getLocalizedOutputStream() {
/**/System.out.println("test_getLocalizedOutputStream");
byte[] bt1 = {0x5a, 0x61, 0x70, 0x72, 0x65, 0x79, 0x65, 0x76};
byte[] bt2 = new byte[9];
java.io.PipedInputStream pis = new java.io.PipedInputStream();
java.io.OutputStream os = null;
try {
os = Runtime.getRuntime().getLocalizedOutputStream(
new java.io.PipedOutputStream(pis));
} catch (Exception e) {
fail("check001: unexpected exception " + e);
}
try {
os.write(bt1);
} catch (Exception e) {
fail("check002: unexpected exception " + e);
}
try {
pis.read(bt2);
} catch (Exception e) {
fail("check003: unexpected exception " + e);
}
assertTrue("Incorrect bytes written by outputStream: " + new String(bt2)
+ ")!",
new String(bt2).indexOf("Zapreyev") == 0);
}
/**
*
*/
public void test_getRuntime() {
/**/System.out.println("test_getRuntime");
Runtime r1 = Runtime.getRuntime();
assertNotNull("Runtime.getRuntime method must not return null!", r1);
for (int ind2 = 0; ind2 < 1000; ind2++) {
assertSame(
"Runtime.getRuntime() should always return the same value!",
r1, Runtime.getRuntime());
}
}
/**
*
*/
public void test_load() {
/**/System.out.println("test_load");
String jLP = null;
String jlp = System.getProperty("java.library.path");
String vblp = System.getProperty("vm.boot.library.path");
jLP = (jlp != null && jlp.length() != 0 ? jlp : "")
+ (vblp != null && vblp.length() != 0 ? File.pathSeparator
+ vblp : "");
if (jLP.length() == 0) {
fail("empty java.library.path!");
}
String[] paths = jLP.split(File.pathSeparator);
String ext = (System.getProperty("os.name").indexOf("indows") != -1)
? ".dll"
: ".so";
int ind1;
int ind2;
File[] asf = null;
for (ind1 = 0; ind1 < paths.length; ind1++) {
asf = new java.io.File(paths[ind1]).listFiles();
if (asf != null) {
for (ind2 = 0; ind2 < asf.length; ind2++) {
if (asf[ind2].getName().indexOf(ext) != -1) {
try {
Runtime.getRuntime().load(
asf[ind2].getCanonicalPath());
return;
} catch (UnsatisfiedLinkError e) {
continue;
} catch (Throwable e) {
continue;
}
}
}
}
}
fail("Runtime.loadLibrary method has not loaded a dynamic library!");
}
/**
*
*/
public void test_loadLibrary() {
/**/System.out.println("test_loadLibrary");
String jLP = null;
String jlp = System.getProperty("java.library.path");
String vblp = System.getProperty("vm.boot.library.path");
jLP = (jlp != null && jlp.length() != 0 ? jlp : "")
+ (vblp != null && vblp.length() != 0
? File.pathSeparator + vblp
: "");
if (jLP.length() == 0) {
fail("empty java.library.path!");
}
String[] paths = jLP.split(File.pathSeparator);
String ext = (System.getProperty("os.name").indexOf("indows") != -1
? ".dll"
:".so");
int ind1;
int ind2;
File[] asf = null;
for (ind1 = 0; ind1 < paths.length; ind1++) {
if (paths[ind1] == null) {
continue;
}
asf = new java.io.File(paths[ind1]).listFiles();
if (asf != null) {
for (ind2 = 0; ind2 < asf.length; ind2++) {
if (asf[ind2].getName().indexOf(ext) != -1) {
String libName = asf[ind2].getName();
if (ext.equals(".dll")) {
libName = libName.substring(0, libName.length() - 4);
} else {
libName = libName.substring(3, libName.length() - 3);
}
try {
Runtime.getRuntime().loadLibrary(libName);
return;
} catch (UnsatisfiedLinkError e) {
continue;
} catch (Throwable e) {
continue;
}
}
}
}
}
fail("Runtime.loadLibrary method has not loaded a dynamic library!");
}
/**
*
*/
public void test_maxMemory() {
/**/System.out.println("test_maxMemory");
long r1 = Runtime.getRuntime().freeMemory();
long r2 = Runtime.getRuntime().maxMemory();
assertTrue("Runtime.maxMemory method must not return negative value!",
r2 >= 0);
assertTrue(
"Runtime.maxMemory must be greater than Runtime.freeMemory!",
r2 >= r1);
for (int ind2 = 0; ind2 < 1000; ind2++) {
//assertSame("Runtime.maxMemory() must always return the same value!",
// r2, Runtime.getRuntime().maxMemory());
assertTrue( "FAILED: test_maxMemory: Runtime.maxMemory method should return same value each time!", r2==Runtime.getRuntime().maxMemory());
}
}
/**
*
*/
public void test_totalMemory() {
/**/System.out.println("test_totalMemory");
long r1 = Runtime.getRuntime().freeMemory();
long r2 = Runtime.getRuntime().maxMemory();
long r3 = Runtime.getRuntime().totalMemory();
assertTrue("Runtime.totalMemory() should not return negative value!",
r3 >= 0);
assertTrue(
"Runtime.totalMemory() should be greater than "
+ "Runtime.freeMemory()!",
r3 >= r1);
assertTrue(
"Runtime.totalMemory() should be smaller than "
+ "Runtime.maxMemory()!",
r2 >= r3);
for (int ind2 = 0; ind2 < 1000; ind2++) {
assertTrue("Runtime.totalMemory, Runtime.freeMemory, " +
"Runtime.maxMemory should correlate correctly!",
Runtime.getRuntime().freeMemory() <= Runtime.getRuntime()
.totalMemory()
&& Runtime.getRuntime().maxMemory() >= Runtime
.getRuntime().totalMemory());
}
}
/**
*
*/
public void test_traceInstructions() {
/**/System.out.println("test_traceInstructions");
java.util.Random r = new java.util.Random();
try {
for (int ind2 = 0; ind2 < 1000; ind2++) {
Runtime.getRuntime()
.traceInstructions((r.nextInt(10) % 2) == 0);
Integer.toString(ind2);
}
} catch (Throwable e) {
fail("Unexpected exception: " + e);
}
}
/**
*
*/
public void test_traceMethodCalls() {
/**/System.out.println("test_traceMethodCalls");
java.util.Random r = new java.util.Random();
try {
for (int ind2 = 0; ind2 < 1000; ind2++) {
Runtime.getRuntime().traceMethodCalls((r.nextInt(10) % 2) == 0);
Math.pow((long) ind2, (long) ind2);
Math.IEEEremainder((double) ind2, (double) ind2);
}
} catch (Throwable e) {
fail("Unexpected exception: " + e);
}
}
/**
*
*/
public void test_halt() {
//System.out.println("test_halt");
//Runtime.getRuntime().halt(777);
//fail("what's wrong ;) ?");
}
/**
*
*/
public void test_exit() {
//System.out.println("test_exit");
//Runtime.getRuntime().exit(777);
//fail("what's wrong ;) ?");
}
/**
* Regression test for HARMONY-690
*/
public void test_addShutdownHook() {
// Test for method long java.lang.Runtime.addShutdownHook()
boolean exception = false;
try {
Runtime.getRuntime().addShutdownHook(null);
} catch (NullPointerException npe) {
exception = true;
}
assertTrue("NullPointerException expected!", exception);
}
/**
* Regression test for HARMONY-690
*/
public void test_removeShutdownHook() {
// Test for method long java.lang.Runtime.removeShutdownHook()
boolean exception = false;
try {
Runtime.getRuntime().removeShutdownHook(null);
} catch (NullPointerException npe) {
exception = true;
}
assertTrue("NullPointerException expected!", exception);
}
/**
* Regression test for HARMONY-920
*/
public void test_execStrStr() throws Exception {
try {
String[] cmd = new String [] {null, "gcc"};
String[] env = new String[] {"aaa", "bbb"};
Runtime.getRuntime().exec(cmd, env);
fail("1: exception expcected");
} catch (NullPointerException npe) {
//expected
}
try {
String[] cmd = new String [] {"gcc", "-m"};
String[] env = new String[] {"aaa", null};
Runtime.getRuntime().exec(cmd, env);
fail("2: exception expcected");
} catch (NullPointerException npe) {
//expected
}
}
}