< prev index next >

test/jdk/tools/jlink/multireleasejar/JLinkMultiReleaseJarTest.java

Print this page




  35  *          jdk.zipfs
  36  * @build jdk.test.lib.Utils
  37  *        jdk.test.lib.Asserts
  38  *        jdk.test.lib.JDKToolFinder
  39  *        jdk.test.lib.JDKToolLauncher
  40  *        jdk.test.lib.Platform
  41  *        jdk.test.lib.process.*
  42  * @run testng JLinkMultiReleaseJarTest
  43  */
  44 
  45 import java.io.ByteArrayInputStream;
  46 import java.io.IOException;
  47 import java.lang.invoke.MethodHandle;
  48 import java.lang.invoke.MethodHandles;
  49 import java.lang.invoke.MethodType;
  50 import java.lang.module.ModuleDescriptor;
  51 import java.nio.file.Files;
  52 import java.nio.file.Path;
  53 import java.nio.file.Paths;
  54 import java.nio.file.StandardCopyOption;

  55 import java.util.Arrays;

  56 import java.util.Set;
  57 import java.util.jar.JarFile;
  58 import java.util.spi.ToolProvider;
  59 import java.util.stream.Collectors;
  60 import java.util.stream.Stream;
  61 
  62 import jdk.internal.jimage.BasicImageReader;
  63 import jdk.test.lib.process.ProcessTools;
  64 import jdk.test.lib.process.OutputAnalyzer;
  65 
  66 import org.testng.Assert;
  67 import org.testng.annotations.BeforeClass;
  68 import org.testng.annotations.Test;
  69 
  70 public class JLinkMultiReleaseJarTest {
  71     private static final ToolProvider JAR_TOOL = ToolProvider.findFirst("jar")
  72             .orElseThrow(() -> new RuntimeException("jar tool not found"));
  73     private static final ToolProvider JAVAC_TOOL = ToolProvider.findFirst("javac")
  74             .orElseThrow(() -> new RuntimeException("javac tool not found"));
  75     private static final ToolProvider JLINK_TOOL = ToolProvider.findFirst("jlink")


 117 
 118         // now move the module-info that requires logging to temporary place
 119         Files.move(rtmods.resolve("m1").resolve("module-info.class"),
 120                 userdir.resolve("module-info.class"));
 121 
 122         // and build another jar
 123         args[1] = "m1-no-logging.jar";
 124         JAR_TOOL.run(System.out, System.err, args);
 125 
 126         // replace the no logging module-info with the logging module-info
 127         Files.move(userdir.resolve("module-info.class"),
 128                 basemods.resolve("m1").resolve("module-info.class"),
 129                 StandardCopyOption.REPLACE_EXISTING);
 130 
 131         // and build another jar
 132         args[1] = "m1-logging.jar";
 133         JAR_TOOL.run(System.out, System.err, args);
 134     }
 135 
 136     private void javac(Path source, Path destination, String srcpath) throws IOException {
 137         String[] args = Stream.concat(
 138                 Stream.of("-d", destination.toString(), "--module-source-path", srcpath),
 139                 Files.walk(source)
 140                         .map(Path::toString)
 141                         .filter(s -> s.endsWith(".java"))
 142         ).toArray(String[]::new);
 143         int rc = JAVAC_TOOL.run(System.out, System.err, args);


 144         Assert.assertEquals(rc, 0);
 145     }
 146 
 147     @Test
 148     public void basicTest() throws Throwable {
 149         if (ignoreTest()) return;
 150 
 151         // use jlink to build image from multi-release jar
 152        jlink("m1.jar", "myimage");
 153 
 154         // validate image
 155         Path jimage = userdir.resolve("myimage").resolve("lib").resolve("modules");
 156         try (BasicImageReader reader = BasicImageReader.open(jimage)) {
 157 
 158             // do we have the right entry names?
 159             Set<String> names = Arrays.stream(reader.getEntryNames())
 160                     .filter(n -> n.startsWith("/m1"))
 161                     .collect(Collectors.toSet());
 162             Assert.assertEquals(names, Set.of(
 163                     "/m1/module-info.class",




  35  *          jdk.zipfs
  36  * @build jdk.test.lib.Utils
  37  *        jdk.test.lib.Asserts
  38  *        jdk.test.lib.JDKToolFinder
  39  *        jdk.test.lib.JDKToolLauncher
  40  *        jdk.test.lib.Platform
  41  *        jdk.test.lib.process.*
  42  * @run testng JLinkMultiReleaseJarTest
  43  */
  44 
  45 import java.io.ByteArrayInputStream;
  46 import java.io.IOException;
  47 import java.lang.invoke.MethodHandle;
  48 import java.lang.invoke.MethodHandles;
  49 import java.lang.invoke.MethodType;
  50 import java.lang.module.ModuleDescriptor;
  51 import java.nio.file.Files;
  52 import java.nio.file.Path;
  53 import java.nio.file.Paths;
  54 import java.nio.file.StandardCopyOption;
  55 import java.util.ArrayList;
  56 import java.util.Arrays;
  57 import java.util.List;
  58 import java.util.Set;
  59 import java.util.jar.JarFile;
  60 import java.util.spi.ToolProvider;
  61 import java.util.stream.Collectors;
  62 import java.util.stream.Stream;
  63 
  64 import jdk.internal.jimage.BasicImageReader;
  65 import jdk.test.lib.process.ProcessTools;
  66 import jdk.test.lib.process.OutputAnalyzer;
  67 
  68 import org.testng.Assert;
  69 import org.testng.annotations.BeforeClass;
  70 import org.testng.annotations.Test;
  71 
  72 public class JLinkMultiReleaseJarTest {
  73     private static final ToolProvider JAR_TOOL = ToolProvider.findFirst("jar")
  74             .orElseThrow(() -> new RuntimeException("jar tool not found"));
  75     private static final ToolProvider JAVAC_TOOL = ToolProvider.findFirst("javac")
  76             .orElseThrow(() -> new RuntimeException("javac tool not found"));
  77     private static final ToolProvider JLINK_TOOL = ToolProvider.findFirst("jlink")


 119 
 120         // now move the module-info that requires logging to temporary place
 121         Files.move(rtmods.resolve("m1").resolve("module-info.class"),
 122                 userdir.resolve("module-info.class"));
 123 
 124         // and build another jar
 125         args[1] = "m1-no-logging.jar";
 126         JAR_TOOL.run(System.out, System.err, args);
 127 
 128         // replace the no logging module-info with the logging module-info
 129         Files.move(userdir.resolve("module-info.class"),
 130                 basemods.resolve("m1").resolve("module-info.class"),
 131                 StandardCopyOption.REPLACE_EXISTING);
 132 
 133         // and build another jar
 134         args[1] = "m1-logging.jar";
 135         JAR_TOOL.run(System.out, System.err, args);
 136     }
 137 
 138     private void javac(Path source, Path destination, String srcpath) throws IOException {
 139         List<String> args = new ArrayList<>(List.of("-d", destination.toString(), "--module-source-path", srcpath));
 140         try (Stream<Path> pathStream = Files.walk(source)) {
 141             pathStream.map(Path::toString)

 142                       .filter(s -> s.endsWith(".java"))
 143                       .forEach(args::add);
 144         }
 145 
 146         int rc = JAVAC_TOOL.run(System.out, System.err, args.toArray(new String[0]));
 147         Assert.assertEquals(rc, 0);
 148     }
 149 
 150     @Test
 151     public void basicTest() throws Throwable {
 152         if (ignoreTest()) return;
 153 
 154         // use jlink to build image from multi-release jar
 155         jlink("m1.jar", "myimage");
 156 
 157         // validate image
 158         Path jimage = userdir.resolve("myimage").resolve("lib").resolve("modules");
 159         try (BasicImageReader reader = BasicImageReader.open(jimage)) {
 160 
 161             // do we have the right entry names?
 162             Set<String> names = Arrays.stream(reader.getEntryNames())
 163                     .filter(n -> n.startsWith("/m1"))
 164                     .collect(Collectors.toSet());
 165             Assert.assertEquals(names, Set.of(
 166                     "/m1/module-info.class",


< prev index next >