Path: blob/master/test/jdk/java/lang/ModuleLayer/LayerControllerTest.java
41149 views
/*1* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223/**24* @test25* @library /test/lib26* @build LayerControllerTest27* jdk.test.lib.util.ModuleUtils28* @run testng LayerControllerTest29* @summary Basic tests for java.lang.ModuleLayer.Controller30*/3132import java.lang.module.Configuration;33import java.lang.module.ModuleDescriptor;34import java.lang.module.ModuleFinder;35import java.util.List;36import java.util.Set;3738import jdk.test.lib.util.ModuleUtils;3940import org.testng.annotations.Test;41import static org.testng.Assert.*;4243@Test44public class LayerControllerTest {4546/**47* Creates a Controller for a module layer containing modules m1 and m2.48* Module m1 contains p1, reads java.base, does not export/open any package49* Module m2 contains p2, reads java.base, does not export/open any package50*/51private ModuleLayer.Controller createTestLayer() {52ModuleDescriptor descriptor153= ModuleDescriptor.newModule("m1")54.packages(Set.of("p1"))55.requires("java.base")56.build();5758ModuleDescriptor descriptor259= ModuleDescriptor.newModule("m2")60.requires("java.base")61.packages(Set.of("p2"))62.build();6364ModuleDescriptor descriptor365= ModuleDescriptor.newModule("m3")66.requires("java.base")67.packages(Set.of("p3"))68.build();6970ModuleFinder finder = ModuleUtils.finderOf(descriptor1, descriptor2, descriptor3);71ModuleLayer bootLayer = ModuleLayer.boot();7273Configuration cf = bootLayer.configuration()74.resolve(finder, ModuleFinder.of(), Set.of("m1", "m2", "m3"));7576ClassLoader scl = ClassLoader.getSystemClassLoader();7778ModuleLayer.Controller controller79= ModuleLayer.defineModulesWithOneLoader(cf, List.of(bootLayer), scl);8081ModuleLayer layer = controller.layer();8283assertTrue(layer.modules().size() == 3);84assertTrue(layer.findModule("m1").isPresent());85assertTrue(layer.findModule("m2").isPresent());86assertTrue(layer.findModule("m3").isPresent());8788return controller;89}9091/**92* Basic test of Controller to update modules m1 and m2 to read and93* open packages to each other.94*/95public void testBasic() {96ModuleLayer.Controller controller = createTestLayer();97ModuleLayer layer = controller.layer();98Module m1 = layer.findModule("m1").orElseThrow(RuntimeException::new);99Module m2 = layer.findModule("m2").orElseThrow(RuntimeException::new);100Module m3 = layer.findModule("m3").orElseThrow(RuntimeException::new);101102assertFalse(m1.canRead(m2));103assertFalse(m1.canRead(m3));104assertFalse(m1.isExported("p1"));105assertFalse(m1.isOpen("p1"));106assertFalse(m1.isExported("p1", m2));107assertFalse(m1.isExported("p1", m3));108assertFalse(m1.isOpen("p1", m2));109assertFalse(m1.isOpen("p1", m3));110111assertFalse(m2.canRead(m1));112assertFalse(m2.canRead(m3));113assertFalse(m2.isExported("p2"));114assertFalse(m2.isOpen("p2"));115assertFalse(m2.isExported("p2", m1));116assertFalse(m2.isExported("p2", m3));117assertFalse(m2.isOpen("p2", m1));118assertFalse(m2.isOpen("p2", m3));119120assertFalse(m3.canRead(m1));121assertFalse(m3.canRead(m2));122assertFalse(m3.isExported("p3"));123assertFalse(m3.isOpen("p3"));124assertFalse(m3.isExported("p3", m1));125assertFalse(m3.isExported("p3", m2));126assertFalse(m3.isOpen("p3", m1));127assertFalse(m3.isOpen("p3", m2));128129// update m1 to read m2130assertTrue(controller.addReads(m1, m2) == controller);131assertTrue(m1.canRead(m2));132assertFalse(m2.canRead(m1));133134// update m2 to read m1135assertTrue(controller.addReads(m2, m1) == controller);136assertTrue(m1.canRead(m2));137assertTrue(m1.canRead(m1));138139// update m1 to export p1 to m2140assertTrue(controller.addExports(m1, "p1", m2) == controller);141assertTrue(m1.isExported("p1", m2));142assertFalse(m1.isOpen("p1", m2));143assertFalse(m1.isExported("p1"));144assertFalse(m1.isOpen("p1"));145146// update m3 to open p3 to m1147assertTrue(controller.addExports(m3, "p3", m1) == controller);148assertTrue(m3.isExported("p3", m1));149assertFalse(m3.isOpen("p3", m1));150assertFalse(m3.isExported("p3"));151assertFalse(m3.isOpen("p3"));152153// update m1 to open p1 to m3154assertTrue(controller.addOpens(m1, "p1", m3) == controller);155assertTrue(m1.isExported("p1", m3));156assertTrue(m1.isOpen("p1", m3));157assertFalse(m1.isExported("p1"));158assertFalse(m1.isOpen("p1"));159160// update m3 to open p3 to m1161assertTrue(controller.addOpens(m3, "p3", m1) == controller);162assertTrue(m3.isExported("p3", m1));163assertTrue(m3.isOpen("p3", m1));164assertFalse(m3.isExported("p3"));165assertFalse(m3.isOpen("p3"));166}167168/**169* Test invalid argument handling170*/171public void testBadArguments() {172ModuleLayer.Controller controller = createTestLayer();173ModuleLayer layer = controller.layer();174Module m1 = layer.findModule("m1").orElseThrow(RuntimeException::new);175Module m2 = layer.findModule("m2").orElseThrow(RuntimeException::new);176Module base = Object.class.getModule();177178// java.base is not in layer179try {180controller.addReads(base, m2);181assertTrue(false);182} catch (IllegalArgumentException expected) { }183184// java.base is not in layer185try {186controller.addExports(base, "java.lang", m2);187assertTrue(false);188} catch (IllegalArgumentException expected) { }189190// m1 does not contain java.lang191try {192controller.addExports(m1, "java.lang", m2);193assertTrue(false);194} catch (IllegalArgumentException expected) { }195196// java.base is not in layer197try {198controller.addOpens(base, "java.lang", m2);199assertTrue(false);200} catch (IllegalArgumentException expected) { }201202// m1 does not contain java.lang203try {204controller.addOpens(m1, "java.lang", m2);205assertTrue(false);206} catch (IllegalArgumentException expected) { }207}208209/**210* Test null handling211*/212public void testNulls() {213ModuleLayer.Controller controller = createTestLayer();214ModuleLayer layer = controller.layer();215Module m1 = layer.findModule("m1").orElseThrow(RuntimeException::new);216Module m2 = layer.findModule("m2").orElseThrow(RuntimeException::new);217assertTrue(m1 != null);218assertTrue(m2 != null);219220try {221controller.addReads(null, m2);222assertTrue(false);223} catch (NullPointerException expected) { }224225try {226controller.addReads(m1, null);227assertTrue(false);228} catch (NullPointerException expected) { }229230try {231controller.addExports(null, "p1", m2);232assertTrue(false);233} catch (NullPointerException expected) { }234235try {236controller.addExports(m1, null, m2);237assertTrue(false);238} catch (NullPointerException expected) { }239240try {241controller.addExports(m1, "p1", null);242assertTrue(false);243} catch (NullPointerException expected) { }244245try {246controller.addOpens(null, "p1", m2);247assertTrue(false);248} catch (NullPointerException expected) { }249250try {251controller.addOpens(m1, null, m2);252assertTrue(false);253} catch (NullPointerException expected) { }254255try {256controller.addOpens(m1, "p1", null);257assertTrue(false);258} catch (NullPointerException expected) { }259}260}261262263