1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/*
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * contributor license agreements.  See the NOTICE file distributed with
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * this work for additional information regarding copyright ownership.
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * (the "License"); you may not use this file except in compliance with
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * the License.  You may obtain a copy of the License at
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Unless required by applicable law or agreed to in writing, software
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS,
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * See the License for the specific language governing permissions and
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * limitations under the License.
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.security.tests.java.security;
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.File;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.InputStream;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.CodeSource;
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.PermissionCollection;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.ProtectionDomain;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.SecureClassLoader;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.cert.Certificate;
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Enumeration;
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.jar.JarFile;
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.luni.util.InputStreamHelper;
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.support.Support_GetLocal;
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class SecureClassLoader2Test extends junit.framework.TestCase {
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /**
388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * @tests java.security.SecureClassLoader#getPermissions(java.security.CodeSource)
398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     */
408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void test_getPermissionsLjava_security_CodeSource() throws IOException {
418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        class MyClassLoader extends SecureClassLoader {
428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            public PermissionCollection getPerms() {
438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                return super.getPermissions(new CodeSource(null,
448d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                        (Certificate[]) null));
458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            }
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            public Class define(String name, byte[] bytes) {
488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                return defineClass(name, bytes, 0, bytes.length,
498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                        (ProtectionDomain) null);
508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            }
518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        MyClassLoader myloader = new MyClassLoader();
548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        PermissionCollection pc = myloader.getPerms();
558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Enumeration e1 = pc.elements();
568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        int count = 0;
578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        while (e1.hasMoreElements()) {
588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            e1.nextElement();
598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            count++;
608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals("expected no permissions", 0, count);
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        File file = Support_GetLocal.getLocalFile("hyts_security.jar");
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        JarFile jar = new JarFile(file);
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        InputStream in = jar.getInputStream(jar.getEntry("packA/SecurityTest.class"));
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] bytes = InputStreamHelper.readFullyAndClose(in);
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Class c = myloader.define("packA.SecurityTest", bytes);
688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        ProtectionDomain pd = c.getProtectionDomain();
698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNotNull("Expected dynamic policy", pd.getClassLoader());
708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull("Expected null permissions", pd.getPermissions());
718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}