hotspot/test/runtime/modules/AccessCheck/ExpQualToM1.java
changeset 43665 4bb003cad9b9
parent 42307 cefc81dc1d52
child 44520 0553e129e0ec
equal deleted inserted replaced
43606:a5aa7536131c 43665:4bb003cad9b9
     1 /*
     1 /*
     2  * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
     2  * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.  Oracle designates this
     7  * published by the Free Software Foundation.  Oracle designates this
    23  * questions.
    23  * questions.
    24  */
    24  */
    25 
    25 
    26 /*
    26 /*
    27  * @test
    27  * @test
    28  * @summary Test that if module m1 can read module m2, AND package p2 in m2 is
    28  * @summary Test that if module m1x can read module m2x, AND package p2 in m2x is
    29  *          exported qualifiedly to m1, then class p1.c1 in m1 can read p2.c2 in m2.
    29  *          exported qualifiedly to m1x, then class p1.c1 in m1x can read p2.c2 in m2x.
    30  * @modules java.base/jdk.internal.misc
    30  * @modules java.base/jdk.internal.misc
    31  * @library /test/lib
    31  * @library /test/lib
    32  * @compile myloaders/MySameClassLoader.java
    32  * @compile myloaders/MySameClassLoader.java
    33  * @compile p2/c2.java
    33  * @compile p2/c2.java
    34  * @compile p1/c1.java
    34  * @compile p1/c1.java
    51     // Create a Layer over the boot layer.
    51     // Create a Layer over the boot layer.
    52     // Define modules within this layer to test access between
    52     // Define modules within this layer to test access between
    53     // publically defined classes within packages of those modules.
    53     // publically defined classes within packages of those modules.
    54     public void createLayerOnBoot() throws Throwable {
    54     public void createLayerOnBoot() throws Throwable {
    55 
    55 
    56         // Define module:     m1
    56         // Define module:     m1x
    57         // Can read:          java.base, m2
    57         // Can read:          java.base, m2x
    58         // Packages:          p1
    58         // Packages:          p1
    59         // Packages exported: p1 is exported unqualifiedly
    59         // Packages exported: p1 is exported unqualifiedly
    60         ModuleDescriptor descriptor_m1 =
    60         ModuleDescriptor descriptor_m1x =
    61                 ModuleDescriptor.module("m1")
    61                 ModuleDescriptor.newModule("m1x")
    62                         .requires("java.base")
    62                         .requires("java.base")
    63                         .requires("m2")
    63                         .requires("m2x")
    64                         .exports("p1")
    64                         .exports("p1")
    65                         .build();
    65                         .build();
    66 
    66 
    67         // Define module:     m2
    67         // Define module:     m2x
    68         // Can read:          java.base
    68         // Can read:          java.base
    69         // Packages:          p2
    69         // Packages:          p2
    70         // Packages exported: p2 is exported qualifiedly to m1
    70         // Packages exported: p2 is exported qualifiedly to m1x
    71         ModuleDescriptor descriptor_m2 =
    71         ModuleDescriptor descriptor_m2x =
    72                 ModuleDescriptor.module("m2")
    72                 ModuleDescriptor.newModule("m2x")
    73                         .requires("java.base")
    73                         .requires("java.base")
    74                         .exports("p2", Set.of("m1"))
    74                         .exports("p2", Set.of("m1x"))
    75                         .build();
    75                         .build();
    76 
    76 
    77         // Set up a ModuleFinder containing all modules for this layer.
    77         // Set up a ModuleFinder containing all modules for this layer.
    78         ModuleFinder finder = ModuleLibrary.of(descriptor_m1, descriptor_m2);
    78         ModuleFinder finder = ModuleLibrary.of(descriptor_m1x, descriptor_m2x);
    79 
    79 
    80         // Resolves "m1"
    80         // Resolves "m1x"
    81         Configuration cf = Layer.boot()
    81         Configuration cf = Layer.boot()
    82                 .configuration()
    82                 .configuration()
    83                 .resolveRequires(finder, ModuleFinder.of(), Set.of("m1"));
    83                 .resolve(finder, ModuleFinder.of(), Set.of("m1x"));
    84 
    84 
    85         // map each module to the same class loader for this test
    85         // map each module to the same class loader for this test
    86         Map<String, ClassLoader> map = new HashMap<>();
    86         Map<String, ClassLoader> map = new HashMap<>();
    87         map.put("m1", MySameClassLoader.loader1);
    87         map.put("m1x", MySameClassLoader.loader1);
    88         map.put("m2", MySameClassLoader.loader1);
    88         map.put("m2x", MySameClassLoader.loader1);
    89 
    89 
    90         // Create Layer that contains m1 & m2
    90         // Create Layer that contains m1x & m2x
    91         Layer layer = Layer.boot().defineModules(cf, map::get);
    91         Layer layer = Layer.boot().defineModules(cf, map::get);
    92 
    92 
    93         assertTrue(layer.findLoader("m1") == MySameClassLoader.loader1);
    93         assertTrue(layer.findLoader("m1x") == MySameClassLoader.loader1);
    94         assertTrue(layer.findLoader("m2") == MySameClassLoader.loader1);
    94         assertTrue(layer.findLoader("m2x") == MySameClassLoader.loader1);
    95 
    95 
    96         // now use the same loader to load class p1.c1
    96         // now use the same loader to load class p1.c1
    97         Class p1_c1_class = MySameClassLoader.loader1.loadClass("p1.c1");
    97         Class p1_c1_class = MySameClassLoader.loader1.loadClass("p1.c1");
    98         try {
    98         try {
    99             p1_c1_class.newInstance();
    99             p1_c1_class.newInstance();
   100         } catch (IllegalAccessError e) {
   100         } catch (IllegalAccessError e) {
   101             throw new RuntimeException("Test Failed, an IAE should not be thrown since p2 is exported qualifiedly to m1");
   101             throw new RuntimeException("Test Failed, an IAE should not be thrown since p2 is exported qualifiedly to m1x");
   102         }
   102         }
   103     }
   103     }
   104 
   104 
   105     public static void main(String args[]) throws Throwable {
   105     public static void main(String args[]) throws Throwable {
   106       ExpQualToM1 test = new ExpQualToM1();
   106       ExpQualToM1 test = new ExpQualToM1();