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
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @author Alexander V. Astapchuk
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @version $Revision$
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage tests.java.security;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
25fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Projectimport dalvik.annotation.KnownFailure;
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase;
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.URL;
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.URLClassLoader;
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.nio.ByteBuffer;
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.CodeSource;
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Permission;
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.PermissionCollection;
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.ProtectionDomain;
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.SecureClassLoader;
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.Certificate;
38ceacc61d16fe3aec9c805de525a79f547e607a27Elliott Hughes
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unit test for SecureClassLoader.
41f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class SecureClassLoaderTest extends TestCase {
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * A class name for the class presented as {@link #klassData bytecode below}
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static final String klassName = "HiWorld";
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Some class presented as bytecode<br>
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Class src:<br>
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <code>public class HiWorld {
55f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *     public static void main(String[] args)
56f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *         {System.out.println("Hi, world!"); }
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *    }
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * </code>
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static final byte[] klassData = { (byte) 0xCA, (byte) 0xFE,
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0xBA, (byte) 0xBE, (byte) 0x00, (byte) 0x00, (byte) 0x00,
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x2E, (byte) 0x00, (byte) 0x22, (byte) 0x01, (byte) 0x00,
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x07, (byte) 0x48, (byte) 0x69, (byte) 0x57, (byte) 0x6F,
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x72, (byte) 0x6C, (byte) 0x64, (byte) 0x07, (byte) 0x00,
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x01, (byte) 0x01, (byte) 0x00, (byte) 0x10, (byte) 0x6A,
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x2F, (byte) 0x6C,
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x61, (byte) 0x6E, (byte) 0x67, (byte) 0x2F, (byte) 0x4F,
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x62, (byte) 0x6A, (byte) 0x65, (byte) 0x63, (byte) 0x74,
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x07, (byte) 0x00, (byte) 0x03, (byte) 0x01, (byte) 0x00,
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x06, (byte) 0x3C, (byte) 0x69, (byte) 0x6E, (byte) 0x69,
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x74, (byte) 0x3E, (byte) 0x01, (byte) 0x00, (byte) 0x03,
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x28, (byte) 0x29, (byte) 0x56, (byte) 0x01, (byte) 0x00,
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x04, (byte) 0x43, (byte) 0x6F, (byte) 0x64, (byte) 0x65,
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x0C, (byte) 0x00, (byte) 0x05, (byte) 0x00, (byte) 0x06,
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x0A, (byte) 0x00, (byte) 0x04, (byte) 0x00, (byte) 0x08,
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x01, (byte) 0x00, (byte) 0x0F, (byte) 0x4C, (byte) 0x69,
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x6E, (byte) 0x65, (byte) 0x4E, (byte) 0x75, (byte) 0x6D,
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x62, (byte) 0x65, (byte) 0x72, (byte) 0x54, (byte) 0x61,
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x62, (byte) 0x6C, (byte) 0x65, (byte) 0x01, (byte) 0x00,
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x12, (byte) 0x4C, (byte) 0x6F, (byte) 0x63, (byte) 0x61,
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x6C, (byte) 0x56, (byte) 0x61, (byte) 0x72, (byte) 0x69,
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x61, (byte) 0x62, (byte) 0x6C, (byte) 0x65, (byte) 0x54,
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x61, (byte) 0x62, (byte) 0x6C, (byte) 0x65, (byte) 0x01,
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x00, (byte) 0x04, (byte) 0x74, (byte) 0x68, (byte) 0x69,
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x73, (byte) 0x01, (byte) 0x00, (byte) 0x09, (byte) 0x4C,
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x48, (byte) 0x69, (byte) 0x57, (byte) 0x6F, (byte) 0x72,
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x6C, (byte) 0x64, (byte) 0x3B, (byte) 0x01, (byte) 0x00,
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x04, (byte) 0x6D, (byte) 0x61, (byte) 0x69, (byte) 0x6E,
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x01, (byte) 0x00, (byte) 0x16, (byte) 0x28, (byte) 0x5B,
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x4C, (byte) 0x6A, (byte) 0x61, (byte) 0x76, (byte) 0x61,
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x2F, (byte) 0x6C, (byte) 0x61, (byte) 0x6E, (byte) 0x67,
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x2F, (byte) 0x53, (byte) 0x74, (byte) 0x72, (byte) 0x69,
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x6E, (byte) 0x67, (byte) 0x3B, (byte) 0x29, (byte) 0x56,
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x01, (byte) 0x00, (byte) 0x10, (byte) 0x6A, (byte) 0x61,
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x76, (byte) 0x61, (byte) 0x2F, (byte) 0x6C, (byte) 0x61,
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x6E, (byte) 0x67, (byte) 0x2F, (byte) 0x53, (byte) 0x79,
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x73, (byte) 0x74, (byte) 0x65, (byte) 0x6D, (byte) 0x07,
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x00, (byte) 0x10, (byte) 0x01, (byte) 0x00, (byte) 0x03,
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x6F, (byte) 0x75, (byte) 0x74, (byte) 0x01, (byte) 0x00,
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x15, (byte) 0x4C, (byte) 0x6A, (byte) 0x61, (byte) 0x76,
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x61, (byte) 0x2F, (byte) 0x69, (byte) 0x6F, (byte) 0x2F,
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x50, (byte) 0x72, (byte) 0x69, (byte) 0x6E, (byte) 0x74,
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x53, (byte) 0x74, (byte) 0x72, (byte) 0x65, (byte) 0x61,
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x6D, (byte) 0x3B, (byte) 0x0C, (byte) 0x00, (byte) 0x12,
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x00, (byte) 0x13, (byte) 0x09, (byte) 0x00, (byte) 0x11,
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x00, (byte) 0x14, (byte) 0x01, (byte) 0x00, (byte) 0x0A,
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x48, (byte) 0x69, (byte) 0x2C, (byte) 0x20, (byte) 0x77,
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x6F, (byte) 0x72, (byte) 0x6C, (byte) 0x64, (byte) 0x21,
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x08, (byte) 0x00, (byte) 0x16, (byte) 0x01, (byte) 0x00,
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x13, (byte) 0x6A, (byte) 0x61, (byte) 0x76, (byte) 0x61,
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x2F, (byte) 0x69, (byte) 0x6F, (byte) 0x2F, (byte) 0x50,
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x72, (byte) 0x69, (byte) 0x6E, (byte) 0x74, (byte) 0x53,
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x74, (byte) 0x72, (byte) 0x65, (byte) 0x61, (byte) 0x6D,
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x07, (byte) 0x00, (byte) 0x18, (byte) 0x01, (byte) 0x00,
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x07, (byte) 0x70, (byte) 0x72, (byte) 0x69, (byte) 0x6E,
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x74, (byte) 0x6C, (byte) 0x6E, (byte) 0x01, (byte) 0x00,
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x15, (byte) 0x28, (byte) 0x4C, (byte) 0x6A, (byte) 0x61,
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x76, (byte) 0x61, (byte) 0x2F, (byte) 0x6C, (byte) 0x61,
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x6E, (byte) 0x67, (byte) 0x2F, (byte) 0x53, (byte) 0x74,
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x72, (byte) 0x69, (byte) 0x6E, (byte) 0x67, (byte) 0x3B,
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x29, (byte) 0x56, (byte) 0x0C, (byte) 0x00, (byte) 0x1A,
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x00, (byte) 0x1B, (byte) 0x0A, (byte) 0x00, (byte) 0x19,
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x00, (byte) 0x1C, (byte) 0x01, (byte) 0x00, (byte) 0x04,
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x61, (byte) 0x72, (byte) 0x67, (byte) 0x73, (byte) 0x01,
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x00, (byte) 0x13, (byte) 0x5B, (byte) 0x4C, (byte) 0x6A,
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x2F, (byte) 0x6C,
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x61, (byte) 0x6E, (byte) 0x67, (byte) 0x2F, (byte) 0x53,
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x74, (byte) 0x72, (byte) 0x69, (byte) 0x6E, (byte) 0x67,
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x3B, (byte) 0x01, (byte) 0x00, (byte) 0x0A, (byte) 0x53,
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x6F, (byte) 0x75, (byte) 0x72, (byte) 0x63, (byte) 0x65,
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x46, (byte) 0x69, (byte) 0x6C, (byte) 0x65, (byte) 0x01,
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x00, (byte) 0x0C, (byte) 0x48, (byte) 0x69, (byte) 0x57,
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x6F, (byte) 0x72, (byte) 0x6C, (byte) 0x64, (byte) 0x2E,
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x6A, (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x00,
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x21, (byte) 0x00, (byte) 0x02, (byte) 0x00, (byte) 0x04,
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x02, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x05,
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x00, (byte) 0x06, (byte) 0x00, (byte) 0x01, (byte) 0x00,
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x07, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x2F,
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x01, (byte) 0x00,
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x00, (byte) 0x00, (byte) 0x05, (byte) 0x2A, (byte) 0xB7,
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x00, (byte) 0x09, (byte) 0xB1, (byte) 0x00, (byte) 0x00,
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x00, (byte) 0x02, (byte) 0x00, (byte) 0x0A, (byte) 0x00,
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x00, (byte) 0x00, (byte) 0x06, (byte) 0x00, (byte) 0x01,
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x14, (byte) 0x00,
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x0B, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x0C,
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00,
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x05, (byte) 0x00, (byte) 0x0C, (byte) 0x00, (byte) 0x0D,
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x09, (byte) 0x00,
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x0E, (byte) 0x00, (byte) 0x0F, (byte) 0x00, (byte) 0x01,
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x00, (byte) 0x07, (byte) 0x00, (byte) 0x00, (byte) 0x00,
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x37, (byte) 0x00, (byte) 0x02, (byte) 0x00, (byte) 0x01,
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x09, (byte) 0xB2,
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x00, (byte) 0x15, (byte) 0x12, (byte) 0x17, (byte) 0xB6,
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x00, (byte) 0x1D, (byte) 0xB1, (byte) 0x00, (byte) 0x00,
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x00, (byte) 0x02, (byte) 0x00, (byte) 0x0A, (byte) 0x00,
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x00, (byte) 0x00, (byte) 0x0A, (byte) 0x00, (byte) 0x02,
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x17, (byte) 0x00,
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x08, (byte) 0x00, (byte) 0x18, (byte) 0x00, (byte) 0x0B,
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x0C, (byte) 0x00,
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x09,
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x00, (byte) 0x1E, (byte) 0x00, (byte) 0x1F, (byte) 0x00,
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x20,
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x02, (byte) 0x00,
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (byte) 0x21, };
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
168fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project    @KnownFailure("Android doesn't allow null parent.")
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testSecureClassLoaderClassLoader() throws Exception {
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        URL[] urls = new URL[] { new URL("http://localhost") };
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        URLClassLoader ucl = URLClassLoader.newInstance(urls);
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        new MyClassLoader(ucl);
173f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new MyClassLoader(null);
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testGetPermissions() throws Exception {
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        URL url = new URL("http://localhost");
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        CodeSource cs = new CodeSource(url, (Certificate[]) null);
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        MyClassLoader ldr = new MyClassLoader();
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ldr.getPerms(null);
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ldr.getPerms(cs);
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
189fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//    /**
190fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//     * Tests defineClass(String, byte[], int, int, CodeSource)
191fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//     */
192fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//    public void _testDefineClassStringbyteArrayintintCodeSource() {
193fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//        MyClassLoader ldr = new MyClassLoader();
194fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//        Class klass = ldr.define(null, klassData, 0, klassData.length, null);
195fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//        assertEquals(klass.getName(), klassName);
196fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//    }
197fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//
198fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//    /**
199fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//     * Tests defineClass(String, ByteBuffer, CodeSource)
200fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//     */
201fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//    public void _testDefineClassStringByteBufferCodeSource() {
202fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//        MyClassLoader ldr = new MyClassLoader();
203fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//        ByteBuffer bbuf = ByteBuffer.wrap(klassData);
204fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//        Class klass = ldr.define(null, bbuf, null);
205fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//        assertEquals(klass.getName(), klassName);
206fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//    }
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    class MyClassLoader extends SecureClassLoader {
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public MyClassLoader() {
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            super();
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public MyClassLoader(ClassLoader parent) {
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            super(parent);
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public PermissionCollection getPerms(CodeSource codesource) {
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return super.getPermissions(codesource);
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Class define(String name, byte[] bytes) {
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return defineClass(name, bytes, 0, bytes.length,
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    (ProtectionDomain) null);
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Class define(String name, ByteBuffer b, CodeSource cs) {
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return defineClass(name, b, cs);
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Class define(String name, byte[] b, int off, int len,
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                CodeSource cs) {
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return defineClass(name, b, off, len, cs);
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
238