001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017:
018: /**
019: * @author Alexander V. Astapchuk
020: * @version $Revision$
021: */package java.security;
022:
023: import java.net.URL;
024: import java.net.URLClassLoader;
025: import java.nio.ByteBuffer;
026: import java.security.cert.Certificate;
027:
028: import junit.framework.TestCase;
029:
030: /**
031: * Unit test for SecureClassLoader.
032: *
033: */
034:
035: public class SecureClassLoaderTest extends TestCase {
036: /**
037: * Entry point for stand alone runs.
038: *
039: * @param args command line parameters
040: */
041: public static void main(String[] args) {
042: junit.textui.TestRunner.run(SecureClassLoaderTest.class);
043: }
044:
045: /**
046: * A class name for the class presented as {@link klassData bytecode below}
047: */
048: private static final String klassName = "HiWorld";
049:
050: /**
051: * Some class presented as bytecode<br>
052: * Class src:<br>
053: * <p>
054: * <code>public class HiWorld {
055: * public static void main(String[] args)
056: * {System.out.println("Hi, world!"); }
057: * }
058: * </code>
059: */
060:
061: private static final byte[] klassData = { (byte) 0xCA, (byte) 0xFE,
062: (byte) 0xBA, (byte) 0xBE, (byte) 0x00, (byte) 0x00,
063: (byte) 0x00, (byte) 0x2E, (byte) 0x00, (byte) 0x22,
064: (byte) 0x01, (byte) 0x00, (byte) 0x07, (byte) 0x48,
065: (byte) 0x69, (byte) 0x57, (byte) 0x6F, (byte) 0x72,
066: (byte) 0x6C, (byte) 0x64, (byte) 0x07, (byte) 0x00,
067: (byte) 0x01, (byte) 0x01, (byte) 0x00, (byte) 0x10,
068: (byte) 0x6A, (byte) 0x61, (byte) 0x76, (byte) 0x61,
069: (byte) 0x2F, (byte) 0x6C, (byte) 0x61, (byte) 0x6E,
070: (byte) 0x67, (byte) 0x2F, (byte) 0x4F, (byte) 0x62,
071: (byte) 0x6A, (byte) 0x65, (byte) 0x63, (byte) 0x74,
072: (byte) 0x07, (byte) 0x00, (byte) 0x03, (byte) 0x01,
073: (byte) 0x00, (byte) 0x06, (byte) 0x3C, (byte) 0x69,
074: (byte) 0x6E, (byte) 0x69, (byte) 0x74, (byte) 0x3E,
075: (byte) 0x01, (byte) 0x00, (byte) 0x03, (byte) 0x28,
076: (byte) 0x29, (byte) 0x56, (byte) 0x01, (byte) 0x00,
077: (byte) 0x04, (byte) 0x43, (byte) 0x6F, (byte) 0x64,
078: (byte) 0x65, (byte) 0x0C, (byte) 0x00, (byte) 0x05,
079: (byte) 0x00, (byte) 0x06, (byte) 0x0A, (byte) 0x00,
080: (byte) 0x04, (byte) 0x00, (byte) 0x08, (byte) 0x01,
081: (byte) 0x00, (byte) 0x0F, (byte) 0x4C, (byte) 0x69,
082: (byte) 0x6E, (byte) 0x65, (byte) 0x4E, (byte) 0x75,
083: (byte) 0x6D, (byte) 0x62, (byte) 0x65, (byte) 0x72,
084: (byte) 0x54, (byte) 0x61, (byte) 0x62, (byte) 0x6C,
085: (byte) 0x65, (byte) 0x01, (byte) 0x00, (byte) 0x12,
086: (byte) 0x4C, (byte) 0x6F, (byte) 0x63, (byte) 0x61,
087: (byte) 0x6C, (byte) 0x56, (byte) 0x61, (byte) 0x72,
088: (byte) 0x69, (byte) 0x61, (byte) 0x62, (byte) 0x6C,
089: (byte) 0x65, (byte) 0x54, (byte) 0x61, (byte) 0x62,
090: (byte) 0x6C, (byte) 0x65, (byte) 0x01, (byte) 0x00,
091: (byte) 0x04, (byte) 0x74, (byte) 0x68, (byte) 0x69,
092: (byte) 0x73, (byte) 0x01, (byte) 0x00, (byte) 0x09,
093: (byte) 0x4C, (byte) 0x48, (byte) 0x69, (byte) 0x57,
094: (byte) 0x6F, (byte) 0x72, (byte) 0x6C, (byte) 0x64,
095: (byte) 0x3B, (byte) 0x01, (byte) 0x00, (byte) 0x04,
096: (byte) 0x6D, (byte) 0x61, (byte) 0x69, (byte) 0x6E,
097: (byte) 0x01, (byte) 0x00, (byte) 0x16, (byte) 0x28,
098: (byte) 0x5B, (byte) 0x4C, (byte) 0x6A, (byte) 0x61,
099: (byte) 0x76, (byte) 0x61, (byte) 0x2F, (byte) 0x6C,
100: (byte) 0x61, (byte) 0x6E, (byte) 0x67, (byte) 0x2F,
101: (byte) 0x53, (byte) 0x74, (byte) 0x72, (byte) 0x69,
102: (byte) 0x6E, (byte) 0x67, (byte) 0x3B, (byte) 0x29,
103: (byte) 0x56, (byte) 0x01, (byte) 0x00, (byte) 0x10,
104: (byte) 0x6A, (byte) 0x61, (byte) 0x76, (byte) 0x61,
105: (byte) 0x2F, (byte) 0x6C, (byte) 0x61, (byte) 0x6E,
106: (byte) 0x67, (byte) 0x2F, (byte) 0x53, (byte) 0x79,
107: (byte) 0x73, (byte) 0x74, (byte) 0x65, (byte) 0x6D,
108: (byte) 0x07, (byte) 0x00, (byte) 0x10, (byte) 0x01,
109: (byte) 0x00, (byte) 0x03, (byte) 0x6F, (byte) 0x75,
110: (byte) 0x74, (byte) 0x01, (byte) 0x00, (byte) 0x15,
111: (byte) 0x4C, (byte) 0x6A, (byte) 0x61, (byte) 0x76,
112: (byte) 0x61, (byte) 0x2F, (byte) 0x69, (byte) 0x6F,
113: (byte) 0x2F, (byte) 0x50, (byte) 0x72, (byte) 0x69,
114: (byte) 0x6E, (byte) 0x74, (byte) 0x53, (byte) 0x74,
115: (byte) 0x72, (byte) 0x65, (byte) 0x61, (byte) 0x6D,
116: (byte) 0x3B, (byte) 0x0C, (byte) 0x00, (byte) 0x12,
117: (byte) 0x00, (byte) 0x13, (byte) 0x09, (byte) 0x00,
118: (byte) 0x11, (byte) 0x00, (byte) 0x14, (byte) 0x01,
119: (byte) 0x00, (byte) 0x0A, (byte) 0x48, (byte) 0x69,
120: (byte) 0x2C, (byte) 0x20, (byte) 0x77, (byte) 0x6F,
121: (byte) 0x72, (byte) 0x6C, (byte) 0x64, (byte) 0x21,
122: (byte) 0x08, (byte) 0x00, (byte) 0x16, (byte) 0x01,
123: (byte) 0x00, (byte) 0x13, (byte) 0x6A, (byte) 0x61,
124: (byte) 0x76, (byte) 0x61, (byte) 0x2F, (byte) 0x69,
125: (byte) 0x6F, (byte) 0x2F, (byte) 0x50, (byte) 0x72,
126: (byte) 0x69, (byte) 0x6E, (byte) 0x74, (byte) 0x53,
127: (byte) 0x74, (byte) 0x72, (byte) 0x65, (byte) 0x61,
128: (byte) 0x6D, (byte) 0x07, (byte) 0x00, (byte) 0x18,
129: (byte) 0x01, (byte) 0x00, (byte) 0x07, (byte) 0x70,
130: (byte) 0x72, (byte) 0x69, (byte) 0x6E, (byte) 0x74,
131: (byte) 0x6C, (byte) 0x6E, (byte) 0x01, (byte) 0x00,
132: (byte) 0x15, (byte) 0x28, (byte) 0x4C, (byte) 0x6A,
133: (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x2F,
134: (byte) 0x6C, (byte) 0x61, (byte) 0x6E, (byte) 0x67,
135: (byte) 0x2F, (byte) 0x53, (byte) 0x74, (byte) 0x72,
136: (byte) 0x69, (byte) 0x6E, (byte) 0x67, (byte) 0x3B,
137: (byte) 0x29, (byte) 0x56, (byte) 0x0C, (byte) 0x00,
138: (byte) 0x1A, (byte) 0x00, (byte) 0x1B, (byte) 0x0A,
139: (byte) 0x00, (byte) 0x19, (byte) 0x00, (byte) 0x1C,
140: (byte) 0x01, (byte) 0x00, (byte) 0x04, (byte) 0x61,
141: (byte) 0x72, (byte) 0x67, (byte) 0x73, (byte) 0x01,
142: (byte) 0x00, (byte) 0x13, (byte) 0x5B, (byte) 0x4C,
143: (byte) 0x6A, (byte) 0x61, (byte) 0x76, (byte) 0x61,
144: (byte) 0x2F, (byte) 0x6C, (byte) 0x61, (byte) 0x6E,
145: (byte) 0x67, (byte) 0x2F, (byte) 0x53, (byte) 0x74,
146: (byte) 0x72, (byte) 0x69, (byte) 0x6E, (byte) 0x67,
147: (byte) 0x3B, (byte) 0x01, (byte) 0x00, (byte) 0x0A,
148: (byte) 0x53, (byte) 0x6F, (byte) 0x75, (byte) 0x72,
149: (byte) 0x63, (byte) 0x65, (byte) 0x46, (byte) 0x69,
150: (byte) 0x6C, (byte) 0x65, (byte) 0x01, (byte) 0x00,
151: (byte) 0x0C, (byte) 0x48, (byte) 0x69, (byte) 0x57,
152: (byte) 0x6F, (byte) 0x72, (byte) 0x6C, (byte) 0x64,
153: (byte) 0x2E, (byte) 0x6A, (byte) 0x61, (byte) 0x76,
154: (byte) 0x61, (byte) 0x00, (byte) 0x21, (byte) 0x00,
155: (byte) 0x02, (byte) 0x00, (byte) 0x04, (byte) 0x00,
156: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
157: (byte) 0x02, (byte) 0x00, (byte) 0x01, (byte) 0x00,
158: (byte) 0x05, (byte) 0x00, (byte) 0x06, (byte) 0x00,
159: (byte) 0x01, (byte) 0x00, (byte) 0x07, (byte) 0x00,
160: (byte) 0x00, (byte) 0x00, (byte) 0x2F, (byte) 0x00,
161: (byte) 0x01, (byte) 0x00, (byte) 0x01, (byte) 0x00,
162: (byte) 0x00, (byte) 0x00, (byte) 0x05, (byte) 0x2A,
163: (byte) 0xB7, (byte) 0x00, (byte) 0x09, (byte) 0xB1,
164: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x02,
165: (byte) 0x00, (byte) 0x0A, (byte) 0x00, (byte) 0x00,
166: (byte) 0x00, (byte) 0x06, (byte) 0x00, (byte) 0x01,
167: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x14,
168: (byte) 0x00, (byte) 0x0B, (byte) 0x00, (byte) 0x00,
169: (byte) 0x00, (byte) 0x0C, (byte) 0x00, (byte) 0x01,
170: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x05,
171: (byte) 0x00, (byte) 0x0C, (byte) 0x00, (byte) 0x0D,
172: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x09,
173: (byte) 0x00, (byte) 0x0E, (byte) 0x00, (byte) 0x0F,
174: (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x07,
175: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x37,
176: (byte) 0x00, (byte) 0x02, (byte) 0x00, (byte) 0x01,
177: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x09,
178: (byte) 0xB2, (byte) 0x00, (byte) 0x15, (byte) 0x12,
179: (byte) 0x17, (byte) 0xB6, (byte) 0x00, (byte) 0x1D,
180: (byte) 0xB1, (byte) 0x00, (byte) 0x00, (byte) 0x00,
181: (byte) 0x02, (byte) 0x00, (byte) 0x0A, (byte) 0x00,
182: (byte) 0x00, (byte) 0x00, (byte) 0x0A, (byte) 0x00,
183: (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x00,
184: (byte) 0x17, (byte) 0x00, (byte) 0x08, (byte) 0x00,
185: (byte) 0x18, (byte) 0x00, (byte) 0x0B, (byte) 0x00,
186: (byte) 0x00, (byte) 0x00, (byte) 0x0C, (byte) 0x00,
187: (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00,
188: (byte) 0x09, (byte) 0x00, (byte) 0x1E, (byte) 0x00,
189: (byte) 0x1F, (byte) 0x00, (byte) 0x00, (byte) 0x00,
190: (byte) 0x01, (byte) 0x00, (byte) 0x20, (byte) 0x00,
191: (byte) 0x00, (byte) 0x00, (byte) 0x02, (byte) 0x00,
192: (byte) 0x21, };
193:
194: /**
195: * Tests default ctor
196: */
197: public void testSecureClassLoader() {
198: new SecureClassLoader();
199: }
200:
201: /**
202: * Tests SecureClassLoader(ClassLoader)
203: */
204: public void testSecureClassLoaderClassLoader() throws Exception {
205: URL[] urls = new URL[] { new URL("http://localhost") };
206: URLClassLoader ucl = URLClassLoader.newInstance(urls);
207: new SecureClassLoader(ucl);
208: }
209:
210: /**
211: * Tests getPermission
212: */
213: public void testGetPermissions() throws Exception {
214: URL url = new URL("http://localhost");
215: CodeSource cs = new CodeSource(url, (Certificate[]) null);
216: SecureClassLoader ldr = new SecureClassLoader();
217: ldr.getPermissions(null);
218: ldr.getPermissions(cs);
219: }
220:
221: /**
222: * Tests defineClass(String, byte[], int, int, CodeSource)
223: */
224: public void testDefineClassStringbyteArrayintintCodeSource() {
225: SecureClassLoader ldr = new SecureClassLoader();
226: Class klass = ldr.defineClass(null, klassData, 0,
227: klassData.length, null);
228: assertEquals(klass.getName(), klassName);
229: }
230:
231: /**
232: * Tests defineClass(String, ByteBuffer, CodeSource)
233: */
234: public void testDefineClassStringByteBufferCodeSource() {
235: SecureClassLoader ldr = new SecureClassLoader();
236: ByteBuffer bbuf = ByteBuffer.wrap(klassData);
237: Class klass = ldr.defineClass(null, bbuf, null);
238: assertEquals(klass.getName(), klassName);
239: }
240: }
|