1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 188bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonpackage libcore.java.lang; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ByteArrayInputStream; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ByteArrayOutputStream; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.File; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.InputStream; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.OutputStream; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Permission; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Arrays; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Vector; 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport tests.support.resource.Support_Resources; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 318bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonpublic class OldRuntimeTest extends junit.framework.TestCase { 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime r = Runtime.getRuntime(); 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InputStream is; 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getRuntime() { 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method java.lang.Runtime java.lang.Runtime.getRuntime() 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull(Runtime.getRuntime()); 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_addShutdownHook() { 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread thrException = new Thread () { 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void run() { 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().addShutdownHook(this); 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalStateException was not thrown."); 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IllegalStateException ise) { 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 51f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 53f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().addShutdownHook(thrException); 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Throwable t) { 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail(t.getMessage()); 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().addShutdownHook(thrException); 62f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes fail("IllegalArgumentException was not thrown."); 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IllegalArgumentException iae) { 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // expected 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 66f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecurityManager sm = new SecurityManager() { 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void checkPermission(Permission perm) { 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (perm.getName().equals("shutdownHooks")) { 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new SecurityException(); 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // remove previously added hook so we're not depending on the priority 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // of the Exceptions to be thrown. 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().removeShutdownHook(thrException); 79f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread.currentThread().sleep(1000); 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (InterruptedException ie) { 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 85f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_availableProcessors() { 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(Runtime.getRuntime().availableProcessors() > 0); 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 90f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 918bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson public void test_execLjava_lang_StringLjava_lang_StringArray() { 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String [] envp = getEnv(); 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project checkExec(0, envp, null); 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project checkExec(0, null, null); 96f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().exec((String)null, null); 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException should be thrown."); 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IOException ioe) { 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was thrown."); 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(NullPointerException npe) { 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 105f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecurityManager sm = new SecurityManager() { 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void checkPermission(Permission perm) { 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (perm.getName().equals("checkExec")) { 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new SecurityException(); 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 113f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void checkExec(String cmd) { 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new SecurityException(); 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 118f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().exec("", envp); 121f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes fail("IllegalArgumentException should be thrown."); 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IllegalArgumentException iae) { 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was thrown."); 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 128f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_execLjava_lang_StringArrayLjava_lang_StringArray() { 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String [] envp = getEnv(); 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project checkExec(4, envp, null); 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project checkExec(4, null, null); 134f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().exec((String[])null, null); 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException should be thrown."); 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IOException ioe) { 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was thrown."); 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(NullPointerException npe) { 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 143f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().exec(new String[]{"ls", null}, null); 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException should be thrown."); 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IOException ioe) { 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was thrown."); 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(NullPointerException npe) { 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 152f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecurityManager sm = new SecurityManager() { 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void checkPermission(Permission perm) { 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (perm.getName().equals("checkExec")) { 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new SecurityException(); 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 160f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void checkExec(String cmd) { 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new SecurityException(); 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 165f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().exec(new String[]{}, envp); 168f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes fail("IndexOutOfBoundsException should be thrown."); 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IndexOutOfBoundsException ioob) { 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was thrown."); 173f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().exec(new String[]{""}, envp); 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException should be thrown."); 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { /* expected */ } 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_execLjava_lang_StringLjava_lang_StringArrayLjava_io_File() { 182f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String [] envp = getEnv(); 184f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project File workFolder = Support_Resources.createTempFolder(); 186f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project checkExec(2, envp, workFolder); 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project checkExec(2, null, null); 189f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().exec((String)null, null, workFolder); 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException should be thrown."); 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IOException ioe) { 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was thrown."); 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(NullPointerException npe) { 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 198f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecurityManager sm = new SecurityManager() { 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void checkPermission(Permission perm) { 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (perm.getName().equals("checkExec")) { 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new SecurityException(); 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 206f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void checkExec(String cmd) { 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new SecurityException(); 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 211f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().exec("", envp, workFolder); 214f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes fail("SecurityException should be thrown."); 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IllegalArgumentException iae) { 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was thrown."); 219f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 221f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_execLjava_lang_StringArrayLjava_lang_StringArrayLjava_io_File() { 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String [] envp = getEnv(); 224f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project File workFolder = Support_Resources.createTempFolder(); 226f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project checkExec(5, envp, workFolder); 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project checkExec(5, null, null); 229f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().exec((String[])null, null, workFolder); 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException should be thrown."); 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IOException ioe) { 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was thrown."); 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(NullPointerException npe) { 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 238f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().exec(new String[]{"ls", null}, null, workFolder); 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException should be thrown."); 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IOException ioe) { 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was thrown."); 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(NullPointerException npe) { 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 247f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecurityManager sm = new SecurityManager() { 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void checkPermission(Permission perm) { 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (perm.getName().equals("checkExec")) { 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new SecurityException(); 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 255f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void checkExec(String cmd) { 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new SecurityException(); 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 260f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().exec(new String[]{""}, envp, workFolder); 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException should be thrown."); 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 268f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String [] getEnv() { 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Object [] valueSet = System.getenv().values().toArray(); 271f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes Object [] keySet = System.getenv().keySet().toArray(); 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String [] envp = new String[valueSet.length]; 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for(int i = 0; i < envp.length; i++) { 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project envp[i] = keySet[i] + "=" + valueSet[i]; 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return envp; 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 278f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project void checkExec(int testCase, String [] envp, File file) { 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String dirName = "Test_Directory"; 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String dirParentName = "Parent_Directory"; 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project File resources = Support_Resources.createTempFolder(); 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String folder = resources.getAbsolutePath() + "/" + dirName; 284f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes String folderWithParent = resources.getAbsolutePath() + "/" + 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project dirParentName + "/" + dirName; 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String command = "mkdir " + folder; 287f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes String [] commandArguments = {"mkdir", folder}; 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Process proc = null; 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project switch(testCase) { 291f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes case 0: 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project proc = Runtime.getRuntime().exec(command, envp); 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 294f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes case 1: 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project proc = Runtime.getRuntime().exec(command); 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 297f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes case 2: 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project proc = Runtime.getRuntime().exec(command, envp, file); 299f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes break; 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case 3: 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project proc = Runtime.getRuntime().exec(commandArguments); 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case 4: 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project proc = Runtime.getRuntime().exec(commandArguments, envp); 305f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes break; 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case 5: 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project proc = Runtime.getRuntime().exec(commandArguments, envp, file); 308f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes break; 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull(proc); 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread.sleep(3000); 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(InterruptedException ie) { 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("InterruptedException was thrown."); 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project File f = new File(folder); 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(f.exists()); 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if(f.exists()) { 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project f.delete(); 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IOException io) { 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was thrown."); 323f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 325f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_execLjava_lang_String() { 327f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes checkExec(1, null, null); 328f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().exec((String) null); 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException was not thrown."); 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(NullPointerException npe) { 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was thrown."); 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 337f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().exec(""); 340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException was not thrown."); 341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IllegalArgumentException iae) { 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was thrown."); 345f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 347f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_execLjava_lang_StringArray() { 349f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 350f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes checkExec(3, null, null); 351f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().exec((String[]) null); 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException was not thrown."); 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(NullPointerException npe) { 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was thrown."); 359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 360f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().exec(new String[]{"ls", null}); 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException was not thrown."); 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(NullPointerException npe) { 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was thrown."); 368f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 369f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().exec(new String[]{}); 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IndexOutOfBoundsException was not thrown."); 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IndexOutOfBoundsException iobe) { 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was thrown."); 377f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 378f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().exec(new String[]{""}); 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException should be thrown."); 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 385f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 386f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_runFinalizersOnExit() { 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().runFinalizersOnExit(true); 389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 390f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_removeShutdownHookLjava_lang_Thread() { 392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread thr1 = new Thread () { 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void run() { 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().addShutdownHook(this); 396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IllegalStateException ise) { 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalStateException shouldn't be thrown."); 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 399f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 401f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().addShutdownHook(thr1); 404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().removeShutdownHook(thr1); 405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Throwable t) { 406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail(t.getMessage()); 407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 408f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread thr2 = new Thread () { 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void run() { 411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().removeShutdownHook(this); 413f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes fail("IllegalStateException wasn't thrown."); 414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IllegalStateException ise) { 415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 417f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().addShutdownHook(thr2); 422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Throwable t) { 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail(t.getMessage()); 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread.currentThread().sleep(1000); 428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (InterruptedException ie) { 429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 431f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_traceInstructions() { 433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().traceInstructions(false); 434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().traceInstructions(true); 435cdd1dac0489aa82d07ad80415622b38732abce65Jorg Pleumann Runtime.getRuntime().traceInstructions(false); 436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 437f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_traceMethodCalls() { 439cdd1dac0489aa82d07ad80415622b38732abce65Jorg Pleumann try { 440cdd1dac0489aa82d07ad80415622b38732abce65Jorg Pleumann Runtime.getRuntime().traceMethodCalls(false); 441cdd1dac0489aa82d07ad80415622b38732abce65Jorg Pleumann Runtime.getRuntime().traceMethodCalls(true); 442cdd1dac0489aa82d07ad80415622b38732abce65Jorg Pleumann Runtime.getRuntime().traceMethodCalls(false); 443cdd1dac0489aa82d07ad80415622b38732abce65Jorg Pleumann } catch (RuntimeException ex) { 444cdd1dac0489aa82d07ad80415622b38732abce65Jorg Pleumann // Slightly ugly: we default to the SD card, which may or may not 445cdd1dac0489aa82d07ad80415622b38732abce65Jorg Pleumann // be there. So we also accept the error case as a success, since 446cdd1dac0489aa82d07ad80415622b38732abce65Jorg Pleumann // it means we actually did enable tracing (or tried to). 447cdd1dac0489aa82d07ad80415622b38732abce65Jorg Pleumann if (!"file open failed".equals(ex.getMessage())) { 448cdd1dac0489aa82d07ad80415622b38732abce65Jorg Pleumann throw ex; 449cdd1dac0489aa82d07ad80415622b38732abce65Jorg Pleumann } 450cdd1dac0489aa82d07ad80415622b38732abce65Jorg Pleumann } 451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 452f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @SuppressWarnings("deprecation") 454498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson public void test_getLocalizedInputStream() throws Exception { 455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String simpleString = "Heart \u2f3c"; 456498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson byte[] expected = simpleString.getBytes("UTF-8"); 457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] returned = new byte[expected.length]; 458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 459498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson ByteArrayInputStream bais = new ByteArrayInputStream( 460498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson simpleString.getBytes("UTF-8")); 461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 462498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson InputStream lcIn = 463498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson Runtime.getRuntime().getLocalizedInputStream(bais); 464498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson lcIn.read(returned); 465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 466498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson assertTrue("wrong result for String: " + simpleString, 467498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson Arrays.equals(expected, returned)); 468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 469f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @SuppressWarnings("deprecation") 471498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson public void test_getLocalizedOutputStream() throws IOException { 472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String simpleString = "Heart \u2f3c"; 473498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson byte[] expected = simpleString.getBytes("UTF-8"); 474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 475498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson ByteArrayOutputStream out = new ByteArrayOutputStream(); 476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 477498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson OutputStream lcOut = 478498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson Runtime.getRuntime().getLocalizedOutputStream(out); 479498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson lcOut.write(simpleString.getBytes("UTF-8")); 480498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson lcOut.flush(); 481498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson lcOut.close(); 482f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 483498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson byte[] returned = out.toByteArray(); 484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 485498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson assertTrue("wrong result for String: " + returned.toString() + 486498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson " expected string: " + expected.toString(), 487498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson Arrays.equals(expected, returned)); 488f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 489f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 490f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_load() { 492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().load("nonExistentLibrary"); 494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("UnsatisfiedLinkError was not thrown."); 495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(UnsatisfiedLinkError ule) { 496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 498f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().load(null); 501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException was not thrown."); 502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(NullPointerException npe) { 503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 506f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_loadLibrary() { 508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().loadLibrary("nonExistentLibrary"); 510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("UnsatisfiedLinkError was not thrown."); 511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(UnsatisfiedLinkError ule) { 512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 514f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().loadLibrary(null); 517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException was not thrown."); 518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(NullPointerException npe) { 519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 523