< prev index next >

test/java/lang/reflect/Proxy/ProxyLayerTest.java

Print this page




  62      * Compiles all modules used by the test
  63      */
  64     @BeforeTest
  65     public void compileAll() throws Exception {
  66         for (String mn : modules) {
  67             Path msrc = SRC_DIR.resolve(mn);
  68             assertTrue(CompilerUtils.compile(msrc, MODS_DIR, "--module-source-path", SRC_DIR.toString()));
  69         }
  70     }
  71 
  72     /**
  73      * Test proxy implementing interfaces in a Layer defined in
  74      * an unnamed module
  75      */
  76     @Test
  77     public void testProxyInUnnamed() throws Exception {
  78         ModuleFinder finder = ModuleFinder.of(MODS_DIR);
  79         Layer bootLayer = Layer.boot();
  80         Configuration cf = bootLayer
  81                 .configuration()
  82                 .resolveRequiresAndUses(ModuleFinder.of(), finder, Arrays.asList(modules));
  83         ClassLoader scl = ClassLoader.getSystemClassLoader();
  84         Layer layer = bootLayer.defineModulesWithOneLoader(cf, scl);
  85 
  86         ClassLoader loader = layer.findLoader("m1");
  87 
  88         assertTrue(layer.findModule("m1").isPresent());
  89         assertTrue(layer.findModule("m2").isPresent());
  90         assertTrue(layer.findModule("m3").isPresent());
  91 
  92         Class<?>[] interfaces = new Class<?>[] {
  93             Class.forName("p.one.I", false, loader),
  94             Class.forName("p.two.A", false, loader),
  95             Class.forName("p.three.P", false, loader),
  96         };
  97         Object o = Proxy.newProxyInstance(loader, interfaces, handler);
  98 
  99         Class<?> proxyClass = o.getClass();
 100         Package pkg = proxyClass.getPackage();
 101         assertFalse(proxyClass.getModule().isNamed());
 102         assertFalse(pkg.isSealed());
 103         assertEquals(proxyClass.getModule().getLayer(), null);
 104     }
 105 
 106     /**
 107      * Test proxy implementing interfaces in a Layer and defined in a
 108      * dynamic module
 109      */
 110     @Test
 111     public void testProxyInDynamicModule() throws Exception {
 112         ModuleFinder finder = ModuleFinder.of(MODS_DIR);
 113         Layer bootLayer = Layer.boot();
 114         Configuration cf = bootLayer
 115                 .configuration()
 116                 .resolveRequiresAndUses(ModuleFinder.of(), finder, Arrays.asList(modules));
 117         ClassLoader scl = ClassLoader.getSystemClassLoader();
 118         Layer layer = bootLayer.defineModulesWithOneLoader(cf, scl);
 119 
 120         ClassLoader loader = layer.findLoader("m1");
 121 
 122         assertTrue(layer.findModule("m1").isPresent());
 123         assertTrue(layer.findModule("m2").isPresent());
 124         assertTrue(layer.findModule("m3").isPresent());
 125 
 126         Class<?>[] interfaces = new Class<?>[] {
 127             Class.forName("p.one.internal.J", false, loader),
 128         };
 129         Object o = Proxy.newProxyInstance(loader, interfaces, handler);
 130         Class<?> proxyClass = o.getClass();
 131         Package pkg = proxyClass.getPackage();
 132         assertTrue(proxyClass.getModule().isNamed());
 133         assertTrue(pkg.isSealed());
 134         assertEquals(proxyClass.getModule().getLayer(), null);
 135     }
 136 
 137     /**
 138      * Test proxy implementing interfaces that the target module has no access
 139      */
 140     @Test
 141     public void testNoReadAccess() throws Exception {
 142         ModuleFinder finder = ModuleFinder.of(MODS_DIR);
 143         Layer bootLayer = Layer.boot();
 144         Configuration cf = bootLayer
 145                 .configuration()
 146                 .resolveRequiresAndUses(ModuleFinder.of(), finder, Arrays.asList(modules));
 147         ClassLoader scl = ClassLoader.getSystemClassLoader();
 148         Layer layer = bootLayer.defineModulesWithOneLoader(cf, scl);
 149 
 150         ClassLoader loader = layer.findLoader("m1");
 151 
 152         assertTrue(layer.findModule("m1").isPresent());
 153         assertTrue(layer.findModule("m2").isPresent());
 154         assertTrue(layer.findModule("m3").isPresent());
 155 
 156         Class<?>[] interfaces = new Class<?>[] {
 157                 Class.forName("p.one.I", false, loader),
 158                 Class.forName("p.two.B", false, loader)   // non-public interface but exported package
 159         };
 160         checkIAE(loader, interfaces);
 161     }
 162 
 163     private void checkIAE(ClassLoader loader, Class<?>[] interfaces) {
 164         try {
 165             Proxy.getProxyClass(loader, interfaces);
 166             throw new RuntimeException("Expected IllegalArgumentException thrown");


  62      * Compiles all modules used by the test
  63      */
  64     @BeforeTest
  65     public void compileAll() throws Exception {
  66         for (String mn : modules) {
  67             Path msrc = SRC_DIR.resolve(mn);
  68             assertTrue(CompilerUtils.compile(msrc, MODS_DIR, "--module-source-path", SRC_DIR.toString()));
  69         }
  70     }
  71 
  72     /**
  73      * Test proxy implementing interfaces in a Layer defined in
  74      * an unnamed module
  75      */
  76     @Test
  77     public void testProxyInUnnamed() throws Exception {
  78         ModuleFinder finder = ModuleFinder.of(MODS_DIR);
  79         Layer bootLayer = Layer.boot();
  80         Configuration cf = bootLayer
  81                 .configuration()
  82                 .resolveAndBind(ModuleFinder.of(), finder, Arrays.asList(modules));
  83         ClassLoader scl = ClassLoader.getSystemClassLoader();
  84         Layer layer = bootLayer.defineModulesWithOneLoader(cf, scl);
  85 
  86         ClassLoader loader = layer.findLoader("m1");
  87 
  88         assertTrue(layer.findModule("m1").isPresent());
  89         assertTrue(layer.findModule("m2").isPresent());
  90         assertTrue(layer.findModule("m3").isPresent());
  91 
  92         Class<?>[] interfaces = new Class<?>[] {
  93             Class.forName("p.one.I", false, loader),
  94             Class.forName("p.two.A", false, loader),
  95             Class.forName("p.three.P", false, loader),
  96         };
  97         Object o = Proxy.newProxyInstance(loader, interfaces, handler);
  98 
  99         Class<?> proxyClass = o.getClass();
 100         Package pkg = proxyClass.getPackage();
 101         assertFalse(proxyClass.getModule().isNamed());
 102         assertFalse(pkg.isSealed());
 103         assertEquals(proxyClass.getModule().getLayer(), null);
 104     }
 105 
 106     /**
 107      * Test proxy implementing interfaces in a Layer and defined in a
 108      * dynamic module
 109      */
 110     @Test
 111     public void testProxyInDynamicModule() throws Exception {
 112         ModuleFinder finder = ModuleFinder.of(MODS_DIR);
 113         Layer bootLayer = Layer.boot();
 114         Configuration cf = bootLayer
 115                 .configuration()
 116                 .resolveAndBind(ModuleFinder.of(), finder, Arrays.asList(modules));
 117         ClassLoader scl = ClassLoader.getSystemClassLoader();
 118         Layer layer = bootLayer.defineModulesWithOneLoader(cf, scl);
 119 
 120         ClassLoader loader = layer.findLoader("m1");
 121 
 122         assertTrue(layer.findModule("m1").isPresent());
 123         assertTrue(layer.findModule("m2").isPresent());
 124         assertTrue(layer.findModule("m3").isPresent());
 125 
 126         Class<?>[] interfaces = new Class<?>[] {
 127             Class.forName("p.one.internal.J", false, loader),
 128         };
 129         Object o = Proxy.newProxyInstance(loader, interfaces, handler);
 130         Class<?> proxyClass = o.getClass();
 131         Package pkg = proxyClass.getPackage();
 132         assertTrue(proxyClass.getModule().isNamed());
 133         assertTrue(pkg.isSealed());
 134         assertEquals(proxyClass.getModule().getLayer(), null);
 135     }
 136 
 137     /**
 138      * Test proxy implementing interfaces that the target module has no access
 139      */
 140     @Test
 141     public void testNoReadAccess() throws Exception {
 142         ModuleFinder finder = ModuleFinder.of(MODS_DIR);
 143         Layer bootLayer = Layer.boot();
 144         Configuration cf = bootLayer
 145                 .configuration()
 146                 .resolveAndBind(ModuleFinder.of(), finder, Arrays.asList(modules));
 147         ClassLoader scl = ClassLoader.getSystemClassLoader();
 148         Layer layer = bootLayer.defineModulesWithOneLoader(cf, scl);
 149 
 150         ClassLoader loader = layer.findLoader("m1");
 151 
 152         assertTrue(layer.findModule("m1").isPresent());
 153         assertTrue(layer.findModule("m2").isPresent());
 154         assertTrue(layer.findModule("m3").isPresent());
 155 
 156         Class<?>[] interfaces = new Class<?>[] {
 157                 Class.forName("p.one.I", false, loader),
 158                 Class.forName("p.two.B", false, loader)   // non-public interface but exported package
 159         };
 160         checkIAE(loader, interfaces);
 161     }
 162 
 163     private void checkIAE(ClassLoader loader, Class<?>[] interfaces) {
 164         try {
 165             Proxy.getProxyClass(loader, interfaces);
 166             throw new RuntimeException("Expected IllegalArgumentException thrown");
< prev index next >