Merge
authorduke
Wed, 05 Jul 2017 23:32:48 +0200
changeset 45302 3b471ff2785c
parent 45301 b7453e312305 (current diff)
parent 45298 6cfa262c0b3d (diff)
child 45306 ced081f0007b
Merge
jdk/make/data/docs-resources/specs/resources/jdk-default.css
jdk/test/java/io/Serializable/evolution/AddedExternField/run.sh
jdk/test/java/io/Serializable/evolution/RenamePackage/run.sh
jdk/test/java/io/Serializable/maskSyntheticModifier/Test.java
jdk/test/java/io/Serializable/maskSyntheticModifier/run.sh
jdk/test/java/io/Serializable/packageAccess/Test.java
jdk/test/java/io/Serializable/packageAccess/run.sh
jdk/test/java/io/Serializable/resolveClass/consTest/Test.java
jdk/test/java/io/Serializable/resolveClass/consTest/run.sh
jdk/test/java/io/Serializable/resolveClass/deserializeButton/Test.java
jdk/test/java/io/Serializable/resolveClass/deserializeButton/run.sh
jdk/test/java/io/Serializable/serialver/classpath/Test.java
jdk/test/java/io/Serializable/serialver/classpath/run.sh
jdk/test/java/io/Serializable/serialver/nested/Test.java
jdk/test/java/io/Serializable/serialver/nested/run.sh
jdk/test/java/io/Serializable/subclass/Test.java
jdk/test/java/io/Serializable/subclass/run.sh
jdk/test/java/io/Serializable/superclassDataLoss/Test.java
jdk/test/java/io/Serializable/superclassDataLoss/run.sh
jdk/test/java/io/Serializable/unnamedPackageSwitch/Test.java
jdk/test/java/io/Serializable/unnamedPackageSwitch/run.sh
jdk/test/java/net/Socket/OldSocketImpl.sh
jdk/test/java/net/URL/B5086147.sh
jdk/test/java/net/URLClassLoader/B5077773.java
jdk/test/java/net/URLClassLoader/B5077773.sh
jdk/test/java/net/URLClassLoader/closetest/build.sh
jdk/test/java/net/URLClassLoader/closetest/build2.sh
jdk/test/java/net/URLClassLoader/getresourceasstream/test.sh
jdk/test/java/net/URLClassLoader/sealing/checksealed.sh
jdk/test/java/net/URLConnection/6212146/test.sh
jdk/test/java/net/URLConnection/UNCTest.sh
jdk/test/java/nio/Buffer/LimitDirectMemory.sh
jdk/test/java/nio/channels/AsynchronousChannelGroup/Attack.java
jdk/test/java/nio/channels/AsynchronousChannelGroup/PrivilegedThreadFactory.java
jdk/test/java/nio/channels/AsynchronousChannelGroup/run_any_task.sh
jdk/test/lib/testlibrary/JavaToolUtils.java
jdk/test/lib/testlibrary/jdk/testlibrary/FileUtils.java
jdk/test/lib/testlibrary/jdk/testlibrary/JarUtils.java
jdk/test/lib/testlibrary/jsr292/com/oracle/testlibrary/jsr292/CodeCacheOverflowProcessor.java
jdk/test/lib/testlibrary/jsr292/com/oracle/testlibrary/jsr292/Helper.java
jdk/test/tools/jar/multiRelease/data/runtimetest/base/testpackage/Helper.java
jdk/test/tools/jar/multiRelease/data/runtimetest/base/testpackage/Main.java
jdk/test/tools/jar/multiRelease/data/runtimetest/base/versionResource
jdk/test/tools/jar/multiRelease/data/runtimetest/v10/testpackage/Helper.java
jdk/test/tools/jar/multiRelease/data/runtimetest/v10/testpackage/Main.java
jdk/test/tools/jar/multiRelease/data/runtimetest/v10/versionResource
jdk/test/tools/jar/multiRelease/data/runtimetest/v9/testpackage/Helper.java
jdk/test/tools/jar/multiRelease/data/runtimetest/v9/testpackage/Main.java
jdk/test/tools/jar/multiRelease/data/runtimetest/v9/versionResource
test/lib/jdk/test/lib/wrappers/InfiniteLoop.java
test/lib/jdk/test/lib/wrappers/TimeLimitedRunner.java
--- a/.hgtags-top-repo	Wed May 31 17:44:50 2017 +0000
+++ b/.hgtags-top-repo	Wed Jul 05 23:32:48 2017 +0200
@@ -420,6 +420,7 @@
 03fe61bb7670644cf6e46b5cfafb6b27c0e0157e jdk-10+6
 b25838a28195f4b6dab34668411eedd2d366a16c jdk-9+169
 4d163ec59d989a9261ed7f848bc6303f90869af5 jdk-9+170
-
 aa3c97810d7c484c93a2fd75d3c76ff574deb6d8 jdk-10+7
 df33ef1dc163f994177fd97d4d0e73a1e3cb5d85 jdk-10+8
+b94be69cbb1d2943b886bf2d458745756df146e4 jdk-10+9
+4c12464a907db4656c1033f56fa49cba643ac629 jdk-9+171
--- a/common/autoconf/spec.gmk.in	Wed May 31 17:44:50 2017 +0000
+++ b/common/autoconf/spec.gmk.in	Wed Jul 05 23:32:48 2017 +0200
@@ -651,7 +651,7 @@
 MV:=@MV@
 NAWK:=@NAWK@
 NICE:=@NICE@
-PANDOC:=@PANDOC@
+PANDOC:=@FIXPATH@ @PANDOC@
 PATCH:=@PATCH@
 PRINTF:=@PRINTF@
 RM:=@RM@
--- a/common/doc/building.html	Wed May 31 17:44:50 2017 +0000
+++ b/common/doc/building.html	Wed Jul 05 23:32:48 2017 +0200
@@ -1,21 +1,23 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
+<!DOCTYPE html>
+<html>
 <head>
-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-  <meta http-equiv="Content-Style-Type" content="text/css" />
-  <meta name="generator" content="pandoc" />
+  <meta charset="utf-8">
+  <meta name="generator" content="pandoc">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
   <title>OpenJDK Build README</title>
   <style type="text/css">code{white-space: pre;}</style>
-  <link rel="stylesheet" href=" ../../jdk/make/data/docs-resources/specs/resources/jdk-default.css" type="text/css" />
+  <link rel="stylesheet" href="../../jdk/make/data/docs-resources/specs/resources/jdk-default.css">
+  <!--[if lt IE 9]>
+    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
+  <![endif]-->
 </head>
 <body>
-<div id="header">
+<header>
 <h1 class="title">OpenJDK Build README</h1>
-</div>
-<div class="figure">
-<img src="http://openjdk.java.net/images/openjdk.png" alt="OpenJDK" />
-<p class="caption">OpenJDK</p>
-</div>
+</header>
+<figure>
+<img src="http://openjdk.java.net/images/openjdk.png" alt="OpenJDK" /><figcaption>OpenJDK</figcaption>
+</figure>
 <hr />
 <h2 id="introduction">Introduction</h2>
 <p>This README file contains build instructions for the <a href="http://openjdk.java.net">OpenJDK</a>. Building the source code for the OpenJDK requires a certain degree of technical expertise.</p>
@@ -149,50 +151,50 @@
 <table>
 <thead>
 <tr class="header">
-<th align="left">Package</th>
-<th align="left">Version</th>
+<th style="text-align: left;">Package</th>
+<th style="text-align: left;">Version</th>
 </tr>
 </thead>
 <tbody>
 <tr class="odd">
-<td align="left">developer/solarisstudio-124/backend</td>
-<td align="left">12.4-1.0.6.0</td>
+<td style="text-align: left;">developer/solarisstudio-124/backend</td>
+<td style="text-align: left;">12.4-1.0.6.0</td>
 </tr>
 <tr class="even">
-<td align="left">developer/solarisstudio-124/c++</td>
-<td align="left">12.4-1.0.10.0</td>
+<td style="text-align: left;">developer/solarisstudio-124/c++</td>
+<td style="text-align: left;">12.4-1.0.10.0</td>
 </tr>
 <tr class="odd">
-<td align="left">developer/solarisstudio-124/cc</td>
-<td align="left">12.4-1.0.4.0</td>
+<td style="text-align: left;">developer/solarisstudio-124/cc</td>
+<td style="text-align: left;">12.4-1.0.4.0</td>
 </tr>
 <tr class="even">
-<td align="left">developer/solarisstudio-124/library/c++-libs</td>
-<td align="left">12.4-1.0.10.0</td>
+<td style="text-align: left;">developer/solarisstudio-124/library/c++-libs</td>
+<td style="text-align: left;">12.4-1.0.10.0</td>
 </tr>
 <tr class="odd">
-<td align="left">developer/solarisstudio-124/library/math-libs</td>
-<td align="left">12.4-1.0.0.1</td>
+<td style="text-align: left;">developer/solarisstudio-124/library/math-libs</td>
+<td style="text-align: left;">12.4-1.0.0.1</td>
 </tr>
 <tr class="even">
-<td align="left">developer/solarisstudio-124/library/studio-gccrt</td>
-<td align="left">12.4-1.0.0.1</td>
+<td style="text-align: left;">developer/solarisstudio-124/library/studio-gccrt</td>
+<td style="text-align: left;">12.4-1.0.0.1</td>
 </tr>
 <tr class="odd">
-<td align="left">developer/solarisstudio-124/studio-common</td>
-<td align="left">12.4-1.0.0.1</td>
+<td style="text-align: left;">developer/solarisstudio-124/studio-common</td>
+<td style="text-align: left;">12.4-1.0.0.1</td>
 </tr>
 <tr class="even">
-<td align="left">developer/solarisstudio-124/studio-ja</td>
-<td align="left">12.4-1.0.0.1</td>
+<td style="text-align: left;">developer/solarisstudio-124/studio-ja</td>
+<td style="text-align: left;">12.4-1.0.0.1</td>
 </tr>
 <tr class="odd">
-<td align="left">developer/solarisstudio-124/studio-legal</td>
-<td align="left">12.4-1.0.0.1</td>
+<td style="text-align: left;">developer/solarisstudio-124/studio-legal</td>
+<td style="text-align: left;">12.4-1.0.0.1</td>
 </tr>
 <tr class="even">
-<td align="left">developer/solarisstudio-124/studio-zhCN</td>
-<td align="left">12.4-1.0.0.1</td>
+<td style="text-align: left;">developer/solarisstudio-124/studio-zhCN</td>
+<td style="text-align: left;">12.4-1.0.0.1</td>
 </tr>
 </tbody>
 </table>
@@ -211,66 +213,66 @@
 <table>
 <thead>
 <tr class="header">
-<th align="left">Binary Name</th>
-<th align="left">Category</th>
-<th align="left">Package</th>
-<th align="left">Description</th>
+<th style="text-align: left;">Binary Name</th>
+<th style="text-align: left;">Category</th>
+<th style="text-align: left;">Package</th>
+<th style="text-align: left;">Description</th>
 </tr>
 </thead>
 <tbody>
 <tr class="odd">
-<td align="left">ar.exe</td>
-<td align="left">Devel</td>
-<td align="left">binutils</td>
-<td align="left">The GNU assembler, linker and binary utilities</td>
+<td style="text-align: left;">ar.exe</td>
+<td style="text-align: left;">Devel</td>
+<td style="text-align: left;">binutils</td>
+<td style="text-align: left;">The GNU assembler, linker and binary utilities</td>
 </tr>
 <tr class="even">
-<td align="left">make.exe</td>
-<td align="left">Devel</td>
-<td align="left">make</td>
-<td align="left">The GNU version of the 'make' utility built for CYGWIN</td>
+<td style="text-align: left;">make.exe</td>
+<td style="text-align: left;">Devel</td>
+<td style="text-align: left;">make</td>
+<td style="text-align: left;">The GNU version of the 'make' utility built for CYGWIN</td>
 </tr>
 <tr class="odd">
-<td align="left">m4.exe</td>
-<td align="left">Interpreters</td>
-<td align="left">m4</td>
-<td align="left">GNU implementation of the traditional Unix macro processor</td>
+<td style="text-align: left;">m4.exe</td>
+<td style="text-align: left;">Interpreters</td>
+<td style="text-align: left;">m4</td>
+<td style="text-align: left;">GNU implementation of the traditional Unix macro processor</td>
 </tr>
 <tr class="even">
-<td align="left">cpio.exe</td>
-<td align="left">Utils</td>
-<td align="left">cpio</td>
-<td align="left">A program to manage archives of files</td>
+<td style="text-align: left;">cpio.exe</td>
+<td style="text-align: left;">Utils</td>
+<td style="text-align: left;">cpio</td>
+<td style="text-align: left;">A program to manage archives of files</td>
 </tr>
 <tr class="odd">
-<td align="left">gawk.exe</td>
-<td align="left">Utils</td>
-<td align="left">awk</td>
-<td align="left">Pattern-directed scanning and processing language</td>
+<td style="text-align: left;">gawk.exe</td>
+<td style="text-align: left;">Utils</td>
+<td style="text-align: left;">awk</td>
+<td style="text-align: left;">Pattern-directed scanning and processing language</td>
 </tr>
 <tr class="even">
-<td align="left">file.exe</td>
-<td align="left">Utils</td>
-<td align="left">file</td>
-<td align="left">Determines file type using 'magic' numbers</td>
+<td style="text-align: left;">file.exe</td>
+<td style="text-align: left;">Utils</td>
+<td style="text-align: left;">file</td>
+<td style="text-align: left;">Determines file type using 'magic' numbers</td>
 </tr>
 <tr class="odd">
-<td align="left">zip.exe</td>
-<td align="left">Archive</td>
-<td align="left">zip</td>
-<td align="left">Package and compress (archive) files</td>
+<td style="text-align: left;">zip.exe</td>
+<td style="text-align: left;">Archive</td>
+<td style="text-align: left;">zip</td>
+<td style="text-align: left;">Package and compress (archive) files</td>
 </tr>
 <tr class="even">
-<td align="left">unzip.exe</td>
-<td align="left">Archive</td>
-<td align="left">unzip</td>
-<td align="left">Extract compressed files in a ZIP archive</td>
+<td style="text-align: left;">unzip.exe</td>
+<td style="text-align: left;">Archive</td>
+<td style="text-align: left;">unzip</td>
+<td style="text-align: left;">Extract compressed files in a ZIP archive</td>
 </tr>
 <tr class="odd">
-<td align="left">free.exe</td>
-<td align="left">System</td>
-<td align="left">procps</td>
-<td align="left">Display amount of free and used memory in the system</td>
+<td style="text-align: left;">free.exe</td>
+<td style="text-align: left;">System</td>
+<td style="text-align: left;">procps</td>
+<td style="text-align: left;">Display amount of free and used memory in the system</td>
 </tr>
 </tbody>
 </table>
@@ -561,14 +563,14 @@
 This is probably an issue with SELinux (See <a href="http://en.wikipedia.org/wiki/SELinux">SELinux on Wikipedia</a>). Parts of the VM is built without the <code>-fPIC</code> for performance reasons.</p></li>
 </ul>
 <p>To completely disable SELinux:</p>
-<ol style="list-style-type: decimal">
+<ol type="1">
 <li><code>$ su root</code></li>
 <li><code># system-config-securitylevel</code></li>
 <li><code>In the window that appears, select the SELinux tab</code></li>
 <li><code>Disable SELinux</code></li>
 </ol>
 <p>Alternatively, instead of completely disabling it you could disable just this one check.</p>
-<ol style="list-style-type: decimal">
+<ol type="1">
 <li>Select System-&gt;Administration-&gt;SELinux Management</li>
 <li>In the SELinux Management Tool which appears, select &quot;Boolean&quot; from the menu on the left</li>
 <li>Expand the &quot;Memory Protection&quot; group</li>
@@ -616,62 +618,62 @@
 <table>
 <thead>
 <tr class="header">
-<th align="left">Base OS and Architecture</th>
-<th align="left">OS</th>
-<th align="left">C/C++ Compiler</th>
-<th align="left">Processors</th>
-<th align="left">RAM Minimum</th>
-<th align="left">DISK Needs</th>
+<th style="text-align: left;">Base OS and Architecture</th>
+<th style="text-align: left;">OS</th>
+<th style="text-align: left;">C/C++ Compiler</th>
+<th style="text-align: left;">Processors</th>
+<th style="text-align: left;">RAM Minimum</th>
+<th style="text-align: left;">DISK Needs</th>
 </tr>
 </thead>
 <tbody>
 <tr class="odd">
-<td align="left">Linux X86 (32-bit) and X64 (64-bit)</td>
-<td align="left">Oracle Enterprise Linux 6.4</td>
-<td align="left">gcc 4.9.2</td>
-<td align="left">2 or more</td>
-<td align="left">1 GB</td>
-<td align="left">6 GB</td>
+<td style="text-align: left;">Linux X86 (32-bit) and X64 (64-bit)</td>
+<td style="text-align: left;">Oracle Enterprise Linux 6.4</td>
+<td style="text-align: left;">gcc 4.9.2</td>
+<td style="text-align: left;">2 or more</td>
+<td style="text-align: left;">1 GB</td>
+<td style="text-align: left;">6 GB</td>
 </tr>
 <tr class="even">
-<td align="left">Solaris SPARCV9 (64-bit)</td>
-<td align="left">Solaris 11 Update 1</td>
-<td align="left">Studio 12 Update 4 + patches</td>
-<td align="left">4 or more</td>
-<td align="left">4 GB</td>
-<td align="left">8 GB</td>
+<td style="text-align: left;">Solaris SPARCV9 (64-bit)</td>
+<td style="text-align: left;">Solaris 11 Update 1</td>
+<td style="text-align: left;">Studio 12 Update 4 + patches</td>
+<td style="text-align: left;">4 or more</td>
+<td style="text-align: left;">4 GB</td>
+<td style="text-align: left;">8 GB</td>
 </tr>
 <tr class="odd">
-<td align="left">Solaris X64 (64-bit)</td>
-<td align="left">Solaris 11 Update 1</td>
-<td align="left">Studio 12 Update 4 + patches</td>
-<td align="left">4 or more</td>
-<td align="left">4 GB</td>
-<td align="left">8 GB</td>
+<td style="text-align: left;">Solaris X64 (64-bit)</td>
+<td style="text-align: left;">Solaris 11 Update 1</td>
+<td style="text-align: left;">Studio 12 Update 4 + patches</td>
+<td style="text-align: left;">4 or more</td>
+<td style="text-align: left;">4 GB</td>
+<td style="text-align: left;">8 GB</td>
 </tr>
 <tr class="even">
-<td align="left">Windows X86 (32-bit)</td>
-<td align="left">Windows Server 2012 R2 x64</td>
-<td align="left">Microsoft Visual Studio C++ 2013 Professional Edition</td>
-<td align="left">2 or more</td>
-<td align="left">2 GB</td>
-<td align="left">6 GB</td>
+<td style="text-align: left;">Windows X86 (32-bit)</td>
+<td style="text-align: left;">Windows Server 2012 R2 x64</td>
+<td style="text-align: left;">Microsoft Visual Studio C++ 2013 Professional Edition</td>
+<td style="text-align: left;">2 or more</td>
+<td style="text-align: left;">2 GB</td>
+<td style="text-align: left;">6 GB</td>
 </tr>
 <tr class="odd">
-<td align="left">Windows X64 (64-bit)</td>
-<td align="left">Windows Server 2012 R2 x64</td>
-<td align="left">Microsoft Visual Studio C++ 2013 Professional Edition</td>
-<td align="left">2 or more</td>
-<td align="left">2 GB</td>
-<td align="left">6 GB</td>
+<td style="text-align: left;">Windows X64 (64-bit)</td>
+<td style="text-align: left;">Windows Server 2012 R2 x64</td>
+<td style="text-align: left;">Microsoft Visual Studio C++ 2013 Professional Edition</td>
+<td style="text-align: left;">2 or more</td>
+<td style="text-align: left;">2 GB</td>
+<td style="text-align: left;">6 GB</td>
 </tr>
 <tr class="even">
-<td align="left">Mac OS X X64 (64-bit)</td>
-<td align="left">Mac OS X 10.9 &quot;Mavericks&quot;</td>
-<td align="left">Xcode 6.3 or newer</td>
-<td align="left">2 or more</td>
-<td align="left">4 GB</td>
-<td align="left">6 GB</td>
+<td style="text-align: left;">Mac OS X X64 (64-bit)</td>
+<td style="text-align: left;">Mac OS X 10.9 &quot;Mavericks&quot;</td>
+<td style="text-align: left;">Xcode 6.3 or newer</td>
+<td style="text-align: left;">2 or more</td>
+<td style="text-align: left;">4 GB</td>
+<td style="text-align: left;">6 GB</td>
 </tr>
 </tbody>
 </table>
--- a/common/doc/testing.html	Wed May 31 17:44:50 2017 +0000
+++ b/common/doc/testing.html	Wed Jul 05 23:32:48 2017 +0200
@@ -1,19 +1,22 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
+<!DOCTYPE html>
+<html>
 <head>
-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-  <meta http-equiv="Content-Style-Type" content="text/css" />
-  <meta name="generator" content="pandoc" />
+  <meta charset="utf-8">
+  <meta name="generator" content="pandoc">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
   <title>Testing OpenJDK</title>
   <style type="text/css">code{white-space: pre;}</style>
-  <link rel="stylesheet" href=" ../../jdk/make/data/docs-resources/specs/resources/jdk-default.css" type="text/css" />
+  <link rel="stylesheet" href="../../jdk/make/data/docs-resources/specs/resources/jdk-default.css">
+  <!--[if lt IE 9]>
+    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
+  <![endif]-->
   <style type="text/css">pre, code, tt { color: #1d6ae5; }</style>
 </head>
 <body>
-<div id="header">
+<header>
 <h1 class="title">Testing OpenJDK</h1>
-</div>
-<div id="TOC">
+</header>
+<nav id="TOC">
 <ul>
 <li><a href="#using-the-run-test-framework">Using the run-test framework</a></li>
 <li><a href="#test-selection">Test selection</a><ul>
@@ -26,16 +29,18 @@
 <li><a href="#gtest-keywords">Gtest keywords</a></li>
 </ul></li>
 </ul>
-</div>
+</nav>
 <h2 id="using-the-run-test-framework">Using the run-test framework</h2>
 <p>This new way of running tests is developer-centric. It assumes that you have built a jdk locally and want to test it. Running common test targets is simple, and more complex ad-hoc combination of tests is possible. The user interface is forgiving, and clearly report errors it cannot resolve.</p>
+<p>The main target &quot;run-test&quot; uses the jdk-image as the tested product. There is also an alternate target &quot;exploded-run-test&quot; that uses the exploded image instead. Not all tests will run successfully on the exploded image, but using this target can greatly improve rebuild times for certain workflows.</p>
 <p>Some example command-lines:</p>
 <pre><code>$ make run-test-tier1
 $ make run-test-jdk_lang JTREG=&quot;JOBS=8&quot;
 $ make run-test TEST=jdk_lang
 $ make run-test-only TEST=&quot;gtest:LogTagSet gtest:LogTagSetDescriptions&quot; GTEST=&quot;REPEAT=-1&quot;
 $ make run-test TEST=&quot;hotspot/test:hotspot_gc&quot; JTREG=&quot;JOBS=1;TIMEOUT=8;VM_OTIONS=-XshowSettings -Xlog:gc+ref=debug&quot;
-$ make run-test TEST=&quot;jtreg:hotspot/test:hotspot_gc hotspot/test/native_sanity/JniVersion.java&quot;</code></pre>
+$ make run-test TEST=&quot;jtreg:hotspot/test:hotspot_gc hotspot/test/native_sanity/JniVersion.java&quot;
+$ make exploded-run-test TEST=hotspot_tier1</code></pre>
 <h2 id="test-selection">Test selection</h2>
 <p>All functionality is available using the run-test make target. In this use case, the test or tests to be executed is controlled using the <code>TEST</code> variable. To speed up subsequent test runs with no source code changes, run-test-only can be used instead, which do not depend on the source and test image build.</p>
 <p>For some common top-level tests, direct make targets have been generated. This includes all JTreg test groups, the hotspot gtest, and custom tests (if present). This means that <code>make run-test-tier1</code> is equivalent to <code>make run-test TEST=&quot;tier1&quot;</code>, but the latter is more tab-completion friendly. For more complex test runs, the <code>run-test TEST=&quot;x&quot;</code> solution needs to be used.</p>
--- a/common/doc/testing.md	Wed May 31 17:44:50 2017 +0000
+++ b/common/doc/testing.md	Wed Jul 05 23:32:48 2017 +0200
@@ -7,6 +7,11 @@
 and more complex ad-hoc combination of tests is possible. The user interface is
 forgiving, and clearly report errors it cannot resolve.
 
+The main target "run-test" uses the jdk-image as the tested product. There is
+also an alternate target "exploded-run-test" that uses the exploded image
+instead. Not all tests will run successfully on the exploded image, but using
+this target can greatly improve rebuild times for certain workflows.
+
 Some example command-lines:
 
     $ make run-test-tier1
@@ -15,6 +20,7 @@
     $ make run-test-only TEST="gtest:LogTagSet gtest:LogTagSetDescriptions" GTEST="REPEAT=-1"
     $ make run-test TEST="hotspot/test:hotspot_gc" JTREG="JOBS=1;TIMEOUT=8;VM_OTIONS=-XshowSettings -Xlog:gc+ref=debug"
     $ make run-test TEST="jtreg:hotspot/test:hotspot_gc hotspot/test/native_sanity/JniVersion.java"
+    $ make exploded-run-test TEST=hotspot_tier1
 
 ## Test selection
 
--- a/hotspot/.hgtags	Wed May 31 17:44:50 2017 +0000
+++ b/hotspot/.hgtags	Wed Jul 05 23:32:48 2017 +0200
@@ -582,3 +582,5 @@
 38a240fd58a287acb1963920b92ed4d9c2fd39e3 jdk-9+170
 9d4746eca95aec3e5a344bf2520745dcc1d17eed jdk-10+7
 f5ded0cf954c770deeecb80f2ba1ba6a05cd979b jdk-10+8
+233647e3d3800e76d7612014b745b37a88098f63 jdk-10+9
+d53171650a2cc6c6f699c966c533b914ca9c0602 jdk-9+171
--- a/hotspot/.mx.jvmci/mx_jvmci.py	Wed May 31 17:44:50 2017 +0000
+++ b/hotspot/.mx.jvmci/mx_jvmci.py	Wed Jul 05 23:32:48 2017 +0200
@@ -303,9 +303,9 @@
                         out.close('link')
 
                     out.open('link')
-                    out.element('name', data='generated')
+                    out.element('name', data='gensrc')
                     out.element('type', data='2')
-                    generated = join(_get_hotspot_build_dir(jvmVariant, debugLevel), 'generated')
+                    generated = join(_get_hotspot_build_dir(jvmVariant, debugLevel), 'gensrc')
                     out.element('locationURI', data=mx.get_eclipse_project_rel_locationURI(generated, eclProjectDir))
                     out.close('link')
 
@@ -620,18 +620,12 @@
 def _get_hotspot_build_dir(jvmVariant=None, debugLevel=None):
     """
     Gets the directory in which a particular HotSpot configuration is built
-    (e.g., <JDK_REPO_ROOT>/build/macosx-x86_64-normal-server-release/hotspot/bsd_amd64_compiler2)
+    (e.g., <JDK_REPO_ROOT>/build/macosx-x86_64-normal-server-release/hotspot/variant-<variant>)
     """
     if jvmVariant is None:
         jvmVariant = _vm.jvmVariant
 
-    os = mx.get_os()
-    if os == 'darwin':
-        os = 'bsd'
-    arch = mx.get_arch()
-    buildname = {'client': 'compiler1', 'server': 'compiler2'}.get(jvmVariant, jvmVariant)
-
-    name = '{}_{}_{}'.format(os, arch, buildname)
+    name = 'variant-{}'.format(jvmVariant)
     return join(_get_jdk_build_dir(debugLevel=debugLevel), 'hotspot', name)
 
 class JVMCI9JDKConfig(mx.JDKConfig):
--- a/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp	Wed May 31 17:44:50 2017 +0000
+++ b/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp	Wed Jul 05 23:32:48 2017 +0200
@@ -4134,28 +4134,33 @@
   if ((dst_enc < 16) && (nds_enc < 16)) {
     vandps(dst, nds, negate_field, vector_len);
   } else if ((src_enc < 16) && (dst_enc < 16)) {
-    movss(src, nds);
+    evmovdqul(src, nds, Assembler::AVX_512bit);
     vandps(dst, src, negate_field, vector_len);
   } else if (src_enc < 16) {
-    movss(src, nds);
+    evmovdqul(src, nds, Assembler::AVX_512bit);
     vandps(src, src, negate_field, vector_len);
-    movss(dst, src);
+    evmovdqul(dst, src, Assembler::AVX_512bit);
   } else if (dst_enc < 16) {
-    movdqu(src, xmm0);
-    movss(xmm0, nds);
+    evmovdqul(src, xmm0, Assembler::AVX_512bit);
+    evmovdqul(xmm0, nds, Assembler::AVX_512bit);
     vandps(dst, xmm0, negate_field, vector_len);
-    movdqu(xmm0, src);
-  } else if (nds_enc < 16) {
-    movdqu(src, xmm0);
-    vandps(xmm0, nds, negate_field, vector_len);
-    movss(dst, xmm0);
-    movdqu(xmm0, src);
-  } else {
-    movdqu(src, xmm0);
-    movss(xmm0, nds);
-    vandps(xmm0, xmm0, negate_field, vector_len);
-    movss(dst, xmm0);
-    movdqu(xmm0, src);
+    evmovdqul(xmm0, src, Assembler::AVX_512bit);
+  } else {
+    if (src_enc != dst_enc) {
+      evmovdqul(src, xmm0, Assembler::AVX_512bit);
+      evmovdqul(xmm0, nds, Assembler::AVX_512bit);
+      vandps(xmm0, xmm0, negate_field, vector_len);
+      evmovdqul(dst, xmm0, Assembler::AVX_512bit);
+      evmovdqul(xmm0, src, Assembler::AVX_512bit);
+    } else {
+      subptr(rsp, 64);
+      evmovdqul(Address(rsp, 0), xmm0, Assembler::AVX_512bit);
+      evmovdqul(xmm0, nds, Assembler::AVX_512bit);
+      vandps(xmm0, xmm0, negate_field, vector_len);
+      evmovdqul(dst, xmm0, Assembler::AVX_512bit);
+      evmovdqul(xmm0, Address(rsp, 0), Assembler::AVX_512bit);
+      addptr(rsp, 64);
+    }
   }
 }
 
@@ -4166,28 +4171,33 @@
   if ((dst_enc < 16) && (nds_enc < 16)) {
     vandpd(dst, nds, negate_field, vector_len);
   } else if ((src_enc < 16) && (dst_enc < 16)) {
-    movsd(src, nds);
+    evmovdqul(src, nds, Assembler::AVX_512bit);
     vandpd(dst, src, negate_field, vector_len);
   } else if (src_enc < 16) {
-    movsd(src, nds);
+    evmovdqul(src, nds, Assembler::AVX_512bit);
     vandpd(src, src, negate_field, vector_len);
-    movsd(dst, src);
+    evmovdqul(dst, src, Assembler::AVX_512bit);
   } else if (dst_enc < 16) {
-    movdqu(src, xmm0);
-    movsd(xmm0, nds);
+    evmovdqul(src, xmm0, Assembler::AVX_512bit);
+    evmovdqul(xmm0, nds, Assembler::AVX_512bit);
     vandpd(dst, xmm0, negate_field, vector_len);
-    movdqu(xmm0, src);
-  } else if (nds_enc < 16) {
-    movdqu(src, xmm0);
-    vandpd(xmm0, nds, negate_field, vector_len);
-    movsd(dst, xmm0);
-    movdqu(xmm0, src);
-  } else {
-    movdqu(src, xmm0);
-    movsd(xmm0, nds);
-    vandpd(xmm0, xmm0, negate_field, vector_len);
-    movsd(dst, xmm0);
-    movdqu(xmm0, src);
+    evmovdqul(xmm0, src, Assembler::AVX_512bit);
+  } else {
+    if (src_enc != dst_enc) {
+      evmovdqul(src, xmm0, Assembler::AVX_512bit);
+      evmovdqul(xmm0, nds, Assembler::AVX_512bit);
+      vandpd(xmm0, xmm0, negate_field, vector_len);
+      evmovdqul(dst, xmm0, Assembler::AVX_512bit);
+      evmovdqul(xmm0, src, Assembler::AVX_512bit);
+    } else {
+      subptr(rsp, 64);
+      evmovdqul(Address(rsp, 0), xmm0, Assembler::AVX_512bit);
+      evmovdqul(xmm0, nds, Assembler::AVX_512bit);
+      vandpd(xmm0, xmm0, negate_field, vector_len);
+      evmovdqul(dst, xmm0, Assembler::AVX_512bit);
+      evmovdqul(xmm0, Address(rsp, 0), Assembler::AVX_512bit);
+      addptr(rsp, 64);
+    }
   }
 }
 
@@ -4934,6 +4944,24 @@
   }
 }
 
+void MacroAssembler::pshufd(XMMRegister dst, Address src, int mode) {
+  if (VM_Version::supports_avx512vl()) {
+    Assembler::pshufd(dst, src, mode);
+  } else {
+    int dst_enc = dst->encoding();
+    if (dst_enc < 16) {
+      Assembler::pshufd(dst, src, mode);
+    } else {
+      subptr(rsp, 64);
+      evmovdqul(Address(rsp, 0), xmm0, Assembler::AVX_512bit);
+      Assembler::pshufd(xmm0, src, mode);
+      evmovdqul(dst, xmm0, Assembler::AVX_512bit);
+      evmovdqul(xmm0, Address(rsp, 0), Assembler::AVX_512bit);
+      addptr(rsp, 64);
+    }
+  }
+}
+
 // This instruction exists within macros, ergo we cannot control its input
 // when emitted through those patterns.
 void MacroAssembler::pshuflw(XMMRegister dst, XMMRegister src, int mode) {
--- a/hotspot/src/cpu/x86/vm/macroAssembler_x86.hpp	Wed May 31 17:44:50 2017 +0000
+++ b/hotspot/src/cpu/x86/vm/macroAssembler_x86.hpp	Wed Jul 05 23:32:48 2017 +0200
@@ -1232,6 +1232,9 @@
   void punpcklbw(XMMRegister dst, XMMRegister src);
   void punpcklbw(XMMRegister dst, Address src) { Assembler::punpcklbw(dst, src); }
 
+  void pshufd(XMMRegister dst, Address src, int mode);
+  void pshufd(XMMRegister dst, XMMRegister src, int mode) { Assembler::pshufd(dst, src, mode); }
+
   void pshuflw(XMMRegister dst, XMMRegister src, int mode);
   void pshuflw(XMMRegister dst, Address src, int mode) { Assembler::pshuflw(dst, src, mode); }
 
--- a/hotspot/src/jdk.hotspot.agent/share/classes/module-info.java	Wed May 31 17:44:50 2017 +0000
+++ b/hotspot/src/jdk.hotspot.agent/share/classes/module-info.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,6 +23,12 @@
  * questions.
  */
 
+/**
+ * Defines the implementation of the HotSpot Serviceability Agent.
+ *
+ * @moduleGraph
+ * @since 9
+ */
 module jdk.hotspot.agent {
     requires java.datatransfer;
     requires java.desktop;
--- a/hotspot/src/share/vm/oops/constMethod.cpp	Wed May 31 17:44:50 2017 +0000
+++ b/hotspot/src/share/vm/oops/constMethod.cpp	Wed Jul 05 23:32:48 2017 +0200
@@ -407,8 +407,12 @@
   ResourceMark rm;
   assert(is_constMethod(), "must be constMethod");
   st->print_cr("%s", internal_name());
-  st->print(" - method:       " INTPTR_FORMAT " ", p2i((address)method()));
-  method()->print_value_on(st); st->cr();
+  Method* m = method();
+  st->print(" - method:       " INTPTR_FORMAT " ", p2i((address)m));
+  if (m != NULL) {
+    m->print_value_on(st);
+  }
+  st->cr();
   if (has_stackmap_table()) {
     st->print(" - stackmap data:       ");
     stackmap_data()->print_value_on(st);
@@ -421,7 +425,12 @@
 void ConstMethod::print_value_on(outputStream* st) const {
   assert(is_constMethod(), "must be constMethod");
   st->print(" const part of method " );
-  method()->print_value_on(st);
+  Method* m = method();
+  if (m != NULL) {
+    m->print_value_on(st);
+  } else {
+    st->print("NULL");
+  }
 }
 
 #if INCLUDE_SERVICES
@@ -461,7 +470,7 @@
 
   // Verification can occur during oop construction before the method or
   // other fields have been initialized.
-  guarantee(method()->is_method(), "should be method");
+  guarantee(method() != NULL && method()->is_method(), "should be method");
 
   address m_end = (address)((intptr_t) this + size());
   address compressed_table_start = code_end();
--- a/hotspot/src/share/vm/opto/matcher.cpp	Wed May 31 17:44:50 2017 +0000
+++ b/hotspot/src/share/vm/opto/matcher.cpp	Wed Jul 05 23:32:48 2017 +0200
@@ -1000,7 +1000,7 @@
             if (C->failing())  return NULL;
             if (m == NULL) { Matcher::soft_match_failure(); return NULL; }
           } else {                  // Nothing the matcher cares about
-            if( n->is_Proj() && n->in(0)->is_Multi()) {       // Projections?
+            if (n->is_Proj() && n->in(0) != NULL && n->in(0)->is_Multi()) {       // Projections?
               // Convert to machine-dependent projection
               m = n->in(0)->as_Multi()->match( n->as_Proj(), this );
 #ifdef ASSERT
@@ -1645,6 +1645,7 @@
 
   // Build the object to represent this state & prepare for recursive calls
   MachNode *mach = s->MachNodeGenerator(rule);
+  guarantee(mach != NULL, "Missing MachNode");
   mach->_opnds[0] = s->MachOperGenerator(_reduceOp[rule]);
   assert( mach->_opnds[0] != NULL, "Missing result operand" );
   Node *leaf = s->_leaf;
--- a/hotspot/src/share/vm/opto/memnode.cpp	Wed May 31 17:44:50 2017 +0000
+++ b/hotspot/src/share/vm/opto/memnode.cpp	Wed Jul 05 23:32:48 2017 +0200
@@ -1123,6 +1123,9 @@
       // Use _idx of address base (could be Phi node) for boxed values.
       intptr_t   ignore = 0;
       Node*      base = AddPNode::Ideal_base_and_offset(in(Address), phase, ignore);
+      if (base == NULL) {
+        return this;
+      }
       this_iid = base->_idx;
     }
     const Type* this_type = bottom_type();
@@ -3947,9 +3950,10 @@
     // if it is the last unused 4 bytes of an instance, forget about it
     intptr_t size_limit = phase->find_intptr_t_con(size_in_bytes, max_jint);
     if (zeroes_done + BytesPerLong >= size_limit) {
-      assert(allocation() != NULL, "");
-      if (allocation()->Opcode() == Op_Allocate) {
-        Node* klass_node = allocation()->in(AllocateNode::KlassNode);
+      AllocateNode* alloc = allocation();
+      assert(alloc != NULL, "must be present");
+      if (alloc != NULL && alloc->Opcode() == Op_Allocate) {
+        Node* klass_node = alloc->in(AllocateNode::KlassNode);
         ciKlass* k = phase->type(klass_node)->is_klassptr()->klass();
         if (zeroes_done == k->layout_helper())
           zeroes_done = size_limit;
--- a/hotspot/test/ProblemList.txt	Wed May 31 17:44:50 2017 +0000
+++ b/hotspot/test/ProblemList.txt	Wed Jul 05 23:32:48 2017 +0200
@@ -64,14 +64,14 @@
 runtime/CompressedOops/UseCompressedOops.java 8079353 generic-all
 # This test is disabled since it will stress NMT and timeout during normal testing
 runtime/NMT/MallocStressTest.java 8166548 generic-all
-runtime/SharedArchiveFile/BootAppendTests.java 8150683 generic-all
+runtime/SharedArchiveFile/BootAppendTests.java 8179103 generic-all
 runtime/SharedArchiveFile/DefaultUseWithClient.java 8154204 generic-all
 
 #############################################################################
 
 # :hotspot_serviceability
 
-serviceability/jdwp/AllModulesCommandTest.java 8168478 generic-all
+serviceability/jdwp/AllModulesCommandTest.java 8170541 generic-all
 serviceability/sa/sadebugd/SADebugDTest.java 8163805 generic-all
 serviceability/jvmti/ModuleAwareAgents/ClassFileLoadHook/MAAClassFileLoadHook.java 8173936 generic-all
 
--- a/hotspot/test/compiler/codecache/stress/CodeCacheStressRunner.java	Wed May 31 17:44:50 2017 +0000
+++ b/hotspot/test/compiler/codecache/stress/CodeCacheStressRunner.java	Wed Jul 05 23:32:48 2017 +0200
@@ -23,7 +23,7 @@
 
 package compiler.codecache.stress;
 
-import jdk.test.lib.wrappers.TimeLimitedRunner;
+import jdk.test.lib.TimeLimitedRunner;
 import jdk.test.lib.Utils;
 
 public class CodeCacheStressRunner {
--- a/hotspot/test/compiler/codecache/stress/Helper.java	Wed May 31 17:44:50 2017 +0000
+++ b/hotspot/test/compiler/codecache/stress/Helper.java	Wed Jul 05 23:32:48 2017 +0200
@@ -25,7 +25,7 @@
 
 import jdk.test.lib.Asserts;
 import jdk.test.lib.ByteCodeLoader;
-import jdk.test.lib.wrappers.InfiniteLoop;
+import jdk.test.lib.InfiniteLoop;
 import jdk.test.lib.Utils;
 import sun.hotspot.WhiteBox;
 
--- a/hotspot/test/compiler/compilercontrol/jcmd/StressAddJcmdBase.java	Wed May 31 17:44:50 2017 +0000
+++ b/hotspot/test/compiler/compilercontrol/jcmd/StressAddJcmdBase.java	Wed Jul 05 23:32:48 2017 +0200
@@ -29,7 +29,7 @@
 import compiler.compilercontrol.share.pool.PoolHelper;
 import compiler.compilercontrol.share.scenario.Executor;
 import jdk.test.lib.process.OutputAnalyzer;
-import jdk.test.lib.wrappers.TimeLimitedRunner;
+import jdk.test.lib.TimeLimitedRunner;
 import jdk.test.lib.Utils;
 
 import java.util.ArrayList;
--- a/hotspot/test/compiler/whitebox/AllocationCodeBlobTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/hotspot/test/compiler/whitebox/AllocationCodeBlobTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -44,7 +44,7 @@
 package compiler.whitebox;
 
 import jdk.test.lib.Asserts;
-import jdk.test.lib.wrappers.InfiniteLoop;
+import jdk.test.lib.InfiniteLoop;
 import sun.hotspot.WhiteBox;
 import sun.hotspot.code.BlobType;
 
--- a/hotspot/test/serviceability/jdwp/AllModulesCommandTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/hotspot/test/serviceability/jdwp/AllModulesCommandTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -32,7 +32,6 @@
  * @test
  * @summary Tests the modules-related JDWP commands
  * @library /test/lib
- * @ignore 8170541
  * @modules jdk.jdwp.agent
  * @modules java.base/jdk.internal.misc
  * @compile AllModulesCommandTestDebuggee.java
--- a/jdk/.hgtags	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/.hgtags	Wed Jul 05 23:32:48 2017 +0200
@@ -422,3 +422,5 @@
 ef9954f6896bb0b95ac62bf769f68b59a7a56ccd jdk-9+170
 cbd65760a005766610583949b3b5c9ace92e74b3 jdk-10+7
 f0adc10ed8316e6cf316e3208c5ecf6835d22bc4 jdk-10+8
+b9409a7daa6c793dd631e52fe6ef79d08a3b337a jdk-10+9
+29bbedd4cce8e14742bdb22118c057b877c02f0f jdk-9+171
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/make/data/docs-resources/resources/jdk-default.css	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,129 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+body {
+  margin: 2em 2em;
+  font-family: DejaVu Sans, Bitstream Vera Sans, Luxi Sans, Verdana, Arial, Helvetica;
+  font-size: 10pt;
+  line-height: 1.4;
+}
+
+pre, code, tt {
+  font-family: DejaVu Sans Mono, Bitstream Vera Sans Mono, Luxi Mono,
+    Courier New, monospace;
+}
+
+blockquote {
+  margin: 1.5ex 0em 1.5ex 2em;
+}
+
+p {
+  padding: 0pt;
+  margin: 1ex 0em;
+}
+
+p:first-child, pre:first-child { margin-top: 0pt; }
+
+h1 {
+  font-weight: bold;
+  padding: 0pt;
+  margin: 2ex .5ex 1ex 0pt;
+}
+
+h1:first-child, h2:first-child {
+  margin-top: 0ex;
+}
+
+h2 {
+  font-weight: bold;
+  padding: 0pt;
+  margin: 2ex 0pt 1ex 0pt;
+}
+
+h3 {
+  font-weight: bold;
+  padding: 0pt;
+  margin: 1.5ex 0pt 1ex 0pt;
+}
+
+h4 {
+  font-weight: bold;
+  padding: 0pt;
+  margin: 1.5ex 0pt 1ex 0pt;
+}
+
+a:link {
+  color: #437291;
+}
+
+a:visited {
+  color: #666666;
+}
+
+a[href]:hover {
+  color: #e76f00;
+}
+
+a img {
+  border-width: 0px;
+}
+
+img {
+  background: white;
+}
+
+table {
+  border-collapse: collapse;
+  margin-left: 15px;
+  margin-right: 15px;
+}
+
+th, td {
+  padding: 3px;
+  vertical-align: top;
+}
+
+table, th, td {
+  border: 1px solid black;
+}
+
+caption  {
+  text-align: left;
+  font-style: italic;
+  text-indent: 15px;
+  margin-bottom:10px;
+}
+
+tr:nth-child(even), tr:nth-child(even) th[scope=row] {
+  background: #DDD;
+}
+
+tr:nth-child(odd), tr:nth-child(odd) th[scope=row] {
+  background: #FFF;
+}
+
+th {
+  background: #DDF;
+}
--- a/jdk/make/data/docs-resources/specs/resources/jdk-default.css	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,129 +0,0 @@
-/*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-body {
-  margin: 2em 2em;
-  font-family: DejaVu Sans, Bitstream Vera Sans, Luxi Sans, Verdana, Arial, Helvetica;
-  font-size: 10pt;
-  line-height: 1.4;
-}
-
-pre, code, tt {
-  font-family: DejaVu Sans Mono, Bitstream Vera Sans Mono, Luxi Mono,
-    Courier New, monospace;
-}
-
-blockquote {
-  margin: 1.5ex 0em 1.5ex 2em;
-}
-
-p {
-  padding: 0pt;
-  margin: 1ex 0em;
-}
-
-p:first-child, pre:first-child { margin-top: 0pt; }
-
-h1 {
-  font-weight: bold;
-  padding: 0pt;
-  margin: 2ex .5ex 1ex 0pt;
-}
-
-h1:first-child, h2:first-child {
-  margin-top: 0ex;
-}
-
-h2 {
-  font-weight: bold;
-  padding: 0pt;
-  margin: 2ex 0pt 1ex 0pt;
-}
-
-h3 {
-  font-weight: bold;
-  padding: 0pt;
-  margin: 1.5ex 0pt 1ex 0pt;
-}
-
-h4 {
-  font-weight: bold;
-  padding: 0pt;
-  margin: 1.5ex 0pt 1ex 0pt;
-}
-
-a:link {
-  color: #437291;
-}
-
-a:visited {
-  color: #666666;
-}
-
-a[href]:hover {
-  color: #e76f00;
-}
-
-a img {
-  border-width: 0px;
-}
-
-img {
-  background: white;
-}
-
-table {
-  border-collapse: collapse;
-  margin-left: 15px;
-  margin-right: 15px;
-}
-
-th, td {
-  padding: 3px;
-  vertical-align: top;
-}
-
-table, th, td {
-  border: 1px solid black;
-}
-
-caption  {
-  text-align: left;
-  font-style: italic;
-  text-indent: 15px;
-  margin-bottom:10px;
-}
-
-tr:nth-child(even) {
-  background: #DDD;
-}
-
-tr:nth-child(odd) {
-  background: #FFF;
-}
-
-th {
-  background: #DDF;
-}
--- a/jdk/make/src/classes/build/tools/docs/GenDocsBundlePage.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/make/src/classes/build/tools/docs/GenDocsBundlePage.java	Wed Jul 05 23:32:48 2017 +0200
@@ -31,18 +31,23 @@
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.PrintWriter;
+import java.lang.module.ModuleDescriptor;
 import java.lang.module.ModuleFinder;
+import java.lang.module.ModuleReference;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
-import java.util.stream.Collectors;
+import java.util.function.Predicate;
 import java.util.stream.Stream;
+import static java.util.stream.Collectors.*;
 
 /**
  * Build tool to generate the docs bundle index page.
@@ -104,59 +109,33 @@
     }
 
     private static final String HEADER_TITLE = "@HEADER_TITLE@";
+
+
     final Path outputfile;
     final String title;
-    final Map<String, String> moduleGroups;
-
+    final Map<String, Set<ModuleDescriptor>> moduleGroups = new HashMap<>();
     GenDocsBundlePage(String title, Path outputfile) throws IOException
     {
         this.outputfile = outputfile;
         this.title = title;
-        this.moduleGroups = moduleGroups();
-    }
 
-    static Map<String, String> moduleGroups() throws IOException {
+        // read module groups
         ModuleFinder finder = ModuleFinder.ofSystem();
-        Map<String, String> groups = new HashMap<>();
         try (InputStream in = GenDocsBundlePage.class.getResourceAsStream(MODULE_GROUPS_PROPS)) {
             Properties props = new Properties();
             props.load(in);
             for (String key: props.stringPropertyNames()) {
-                Set<String> mods = Stream.of(props.getProperty(key).split("\\s+"))
-                                         .filter(mn -> finder.find(mn).isPresent())
-                                         .map(String::trim)
-                                         .collect(Collectors.toSet());
+                Set<ModuleDescriptor> mods =
+                    Stream.of(props.getProperty(key).split("\\s+"))
+                          .map(String::trim)
+                          .flatMap(mn -> finder.find(mn).stream())
+                          .map(ModuleReference::descriptor)
+                          .collect(toSet());
 
-                // divide into 3 columns: Java SE, JDK, JavaFX
-                StringBuilder sb = new StringBuilder();
-                sb.append(mods.stream()
-                              .filter(mn -> mn.startsWith("java."))
-                              .sorted()
-                              .map(GenDocsBundlePage::toHRef)
-                              .collect(Collectors.joining("\n")));
-                sb.append("</td>\n<td>")
-                  .append(mods.stream()
-                              .filter(mn -> mn.startsWith("jdk."))
-                              .sorted()
-                              .map(GenDocsBundlePage::toHRef)
-                              .collect(Collectors.joining("\n")));
-                sb.append("</td>\n<td>");
-                if (mods.stream().anyMatch(mn -> mn.startsWith("javafx."))) {
-                    sb.append(mods.stream()
-                                  .filter(mn -> mn.startsWith("javafx."))
-                                  .sorted()
-                                  .map(GenDocsBundlePage::toHRef)
-                                  .collect(Collectors.joining("\n")));
-                }
                 String name = "@" + key.toUpperCase(Locale.ENGLISH) + "@";
-                groups.put(name, sb.toString());
-            }
+                moduleGroups.put(name, mods);
+            };
         }
-        return groups;
-    }
-
-    static String toHRef(String mn) {
-        return String.format("<a href=\"api/%s-summary.html\">%s</a><br>", mn, mn);
     }
 
     void run(BufferedReader reader) throws IOException {
@@ -174,13 +153,95 @@
         if (line.contains(HEADER_TITLE)) {
             line = line.replace(HEADER_TITLE, title);
         }
-        if (line.contains("@")) {
-            for (Map.Entry<String,String> e: moduleGroups.entrySet()) {
-                if (line.contains(e.getKey())) {
-                    line = line.replace(e.getKey(), e.getValue());
-                }
+        int i = line.indexOf('@');
+        int j = line.indexOf('@', i+1);
+        if (i >= 0 && i < j) {
+            String name = line.substring(i, j+1);
+            if (moduleGroups.containsKey(name)) {
+                line = line.replace(name, formatModuleGroup(name));
             }
         }
         return line;
     }
+
+    String toHRef(ModuleDescriptor md) {
+        String mn = md.name();
+        String formattedName;
+        if (hasExportedAPIs(md)) {
+            // has exported APIs
+            formattedName = mn;
+        } else if (!md.provides().isEmpty()) {
+            // a provider
+            formattedName = "<i>" + mn + "</i>";
+        } else {
+            // a tool
+            formattedName = "<i>" + mn + "</i>";
+        }
+        return String.format("<a href=\"api/%s-summary.html\">%s</a>",
+                             mn, formattedName);
+    }
+
+    String formatModuleGroup(String groupName) {
+        StringBuilder sb = new StringBuilder();
+        // organize in Java SE, JDK, JavaFX, JCP groups
+        Set<ModuleDescriptor> modules = moduleGroups.get(groupName);
+        Arrays.stream(ModuleGroup.values())
+            .forEach(g -> {
+                Set<ModuleDescriptor> mods = modules.stream()
+                    .filter(md -> g.predicate.test(md.name()))
+                    .collect(toSet());
+                if (!mods.isEmpty()) {
+                    sb.append("<div class=" + g.cssClass + ">\n");
+                    // modules with exported API
+                    mods.stream()
+                        .filter(this::hasExportedAPIs)
+                        .sorted(Comparator.comparing(ModuleDescriptor::name))
+                        .map(this::toHRef)
+                        .forEach(m -> sb.append(m).append("\n"));
+
+                    // tools and providers
+                    mods.stream()
+                        .filter(md -> !hasExportedAPIs(md))
+                        .sorted(Comparator.comparing(ModuleDescriptor::name))
+                        .map(this::toHRef)
+                        .forEach(m -> sb.append(m).append("\n"));
+                    sb.append("</div>");
+                }
+            });
+        return sb.toString();
+    }
+
+    private boolean hasExportedAPIs(ModuleDescriptor md) {
+        if (md.exports().stream().anyMatch(e -> !e.isQualified())) {
+            return true;
+        }
+        // this should check if any indirect exports
+        // checking requires transitive would be sufficient for JDK modules
+        if (md.requires().stream()
+              .map(ModuleDescriptor.Requires::modifiers)
+              .anyMatch(mods -> mods.contains(ModuleDescriptor.Requires.Modifier.TRANSITIVE))) {
+            return true;
+        }
+        return false;
+    }
+
+    private static final Set<String> NON_JAVA_SE_MODULES =
+        Set.of("java.jnlp", "java.smartcardio");
+
+    /**
+     * CSS class names are defined in docs-bundle-page.html
+     */
+    enum ModuleGroup {
+        JAVA_SE("javase", mn -> mn.startsWith("java.") && !NON_JAVA_SE_MODULES.contains(mn)),
+        JDK("jdk", mn -> mn.startsWith("jdk.")),
+        JAVAFX("javafx", mn -> mn.startsWith("javafx.")),
+        NON_JAVA_SE("jcp", NON_JAVA_SE_MODULES::contains);
+
+        final String cssClass;
+        final Predicate<String> predicate;
+        ModuleGroup(String cssClass, Predicate<String> predicate) {
+            this.cssClass = cssClass;
+            this.predicate = predicate;
+        }
+    }
 }
--- a/jdk/make/src/classes/build/tools/docs/docs-bundle-page.html	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/make/src/classes/build/tools/docs/docs-bundle-page.html	Wed Jul 05 23:32:48 2017 +0200
@@ -26,121 +26,146 @@
 <!DOCTYPE html>
 <html lang="en">
 <head>
-  <meta http-equiv="content-type" content="text/html;" charset="utf-8">
-  <style type="text/css">
-table {
-  border-collapse: collapse;
-}
-table {
+<title>@HEADER_TITLE@</title>
+
+<meta http-equiv="content-type" content="text/html;" charset="utf-8">
+<link rel="stylesheet" href="resources/jdk-default.css" type="text/css" />
+<style type="text/css">
+
+table a { text-decoration: none }
+table { border: none }
+th, td { border: 2px solid white; }
+thead th { background-color: #DDD }
+tbody th { background-color: #EEE }
+
+table div.javase, ul.key span.javase { background-color: #C6E7F3 }
+table div.jdk, ul.key span.jdk { background-color: #ECE1C5 }
+table div.javafx, ul.key span.javafx { background-color: #ECEDCC }
+table div.jcp, ul.key span.jcp { background-color: #E9E9E9 }
+td div { padding: 3px 5px; color: blue }
+table tbody td div a { padding: 0 .5em; margin: 0: 1em; }
+table tbody td div a:link { color: black }
+table tbody td div a:visited { color: black }
+table tbody td div a[href]:hover { color: black; text-decoration: underline }
+td { padding: 0 }
+table tbody td div a { padding: 0 .5em; margin: 0: 1em }
+
+.key { font-size: smaller; }
+ul.key li { display:inline-block; padding: 0 1em }
+ul.key span {
   border: 1px solid black;
-}
-th ,td {
-  border: 0px solid black;
-}
-thead th {
-  background-color: #DDD;
-}
-tbody > tr:nth-child(even) {
-    background-color: #EEE
-}
-tbody > tr:nth-child(odd) {
-    background-color: #FFF
+  font-family: DejaVu Sans Mono, monospace;
 }
-th, td {
-  font-family: sans-serif; /* could eventually be DejaVu */
-  font-size: small;
-  padding: 5px 10px;
-  vertical-align:top;
-}
-td a {
-  text-decoration: none;
+ul.key span:before { content: " " }
+ul.key span:after { content: " " }
+
+caption {
+  text-align: center;
 }
-tr th {
-  text-align:left;
+
+tr:nth-child(even), tr:nth-child(even) th[scope=row] {
+  background-color: #EEE;
 }
-caption {
-  font-size: smaller;
-  font-weight: bold;
+tr:nth-child(odd), tr:nth-child(odd) th[scope=row] {
+  background-color: #EEE;
 }
+
 </style>
-<title>@HEADER_TITLE@</title>
 </head>
-<body>
 
 <h1>@HEADER_TITLE@</h1>
 
 <ul>
 <li><a href="api/index.html">JDK API Specification</a></li>
-<li>Java Language Specification</li>
-<li>Java Virtual Machine Specification</li>
+<li><a href="https://docs.oracle.com/javase/specs/">
+    Java Language and Virtual Machine Specifications</a></li>
+<li><a href="https://www.oracle.com/pls/topic/lookup?ctx=javase9&id=tools_reference_overview">
+    Tools Reference</a></li>
 </ul>
 
+
 <table>
-<caption>Modules</caption>
+<caption style="display:none">JDK Modules</caption>
 <thead>
 <tr>
   <th scope="col">Group</th>
-  <th scope="col">Java SE</th>
-  <th scope="col">JDK</th>
-  <th scope="col">JavaFX</th>
+  <th scope="col">Modules</th>
 </tr>
 </thead>
 <tbody>
 <tr>
   <th scope="row">Foundation</th>
-  <td>@CORE_MODULES@</td>
+  <td>@JAVA_BASE@</td>
 </tr>
 <tr>
-<th scope="row">Security</th>
-  <td>@SECURITY_MODULES@</td>
-</tr>
-<tr>
-<th scope="row">Instrumentation and<br>Management</th>
-  <td>@INSTRUMENT_MGMT_MODULES@</td>
-</tr>
-<tr>
-<th scope="row">Integration</th>
+  <th scope="row">Integration</th>
   <td>@INTEGRATION_MODULES@</td>
 </tr>
 <tr>
   <th scope="row">User Interface</th>
-  <td>@UI_TOOLKITS_MODULES@</td>
+  <td>@UI_MODULES@</td>
+</tr>
+<tr>
+  <th scope="row">Compilation</th>
+  <td>@COMPILER_MODULES@</td>
 </tr>
 <tr>
-  <th scope="row">Compiler and Scripting</th>
-  <td>@COMPILER_SCRIPTING_MODULES@</td>
+  <th scope="row">Scripting</th>
+  <td>@SCRIPTING_MODULES@</td>
+</tr>
+<tr>
+  <th scope="row">Security</th>
+  <td>@SECURITY_MODULES@</td>
+</tr>
+<tr>
+  <th scope="row">Management</th>
+  <td>@MANAGEMENT_MODULES@</td>
 </tr>
 <tr>
-  <th scope="row">Debugging</th>
-  <td>@DEBUG_MODULES@</td>
+  <th scope="row">Instrumentation</th>
+  <td>@INSTRUMENT_MODULES@</td>
+</tr>
+<tr>
+  <th scope="row">Serviceability</th>
+  <td>@SVC_MODULES@</td>
 </tr>
 <tr>
-  <th scope="row">Tools and Tool APIs</th>
-  <td>@TOOL_MODULES@</td>
+  <th scope="row">Packaging</th>
+  <td>@PACKAGING_MODULES@</td>
 </tr>
 <tr>
-  <th scope="row">Incubating Features</th>
+  <th scope="row">Incubator</th>
   <td>@INCUBATOR_MODULES@</td>
 </tr>
 <tr>
+  <th scope="row">Non-Java SE</th>
+  <td>@OTHER_MODULES@</td>
+</tr>
+<tr>
   <th scope="row">Java EE</th>
   <td>@JAVA_EE_MODULES@</td>
 </tr>
 <tr>
-  <th scope="row"></th>
-  <th scope="row">Outside Java SE</th>
-  <th scope="row">JDK</th>
-  <th scope="row">JavaFX</th>
-</tr>
-<tr>
-  <th scope="row">Others</th>
-  <td>@OTHER_MODULES@</td>
+  <th scope="row">Aggregator</th>
+  <td>@AGGREGATOR_MODULES@</td>
 </tr>
 </tbody>
 </table>
 
+<p class="key">Key:
+<ul class="key">
+<li><span class="javase">&nbsp;</span>&nbsp; Java SE
+<li><span class="jdk">&nbsp;</span>&nbsp; JDK
+<li><span class="javafx">&nbsp;</span>&nbsp; JavaFX
+<li><span class="jcp">&nbsp;</span>&nbsp; Non-Java SE
+<li><i>italic</i> No Exported API (e.g. a tool or provider)</li>
+</ul>
+
 <p>
-<hr/>
-<a href="legal/cpyr.html">Copyright</a>&copy; 1993, 2017, Oracle and/or its affiliates. All rights reserved.</p>
+<hr>
+<a href="legal/cpyr.html">Copyright</a> &copy 1993, 2017, Oracle and/or its affiliates. All rights reserved.</p>
+
 </body>
 </html>
+	
+	
--- a/jdk/make/src/classes/build/tools/docs/docs-module-groups.properties	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/make/src/classes/build/tools/docs/docs-module-groups.properties	Wed Jul 05 23:32:48 2017 +0200
@@ -1,13 +1,8 @@
 # Module Grouping for the docs bundle page
 #
 
-core_modules=\
-java.base \
-jdk.charsets \
-jdk.localedata \
-jdk.net \
-jdk.sctp \
-jdk.zipfs
+java_base=\
+java.base
 
 java_ee_modules=\
 java.activation \
@@ -17,6 +12,10 @@
 java.xml.ws \
 java.xml.ws.annotation
 
+aggregator_modules=\
+java.se \
+java.se.ee
+
 security_modules=\
 java.security.jgss \
 java.security.sasl \
@@ -26,18 +25,22 @@
 jdk.crypto.cryptoki \
 jdk.crypto.ec \
 jdk.crypto.mscapi \
-jdk.crypto.ucrypto
+jdk.crypto.ucrypto \
+jdk.policytool
 
-instrument_mgmt_modules=\
-java.instrument \
+instrument_modules=\
+java.instrument
+  
+management_modules=\
 java.management \
 java.management.rmi \
-jdk.jfr \
 jdk.management \
 jdk.management.agent \
 jdk.management.cmm \
 jdk.management.jfr \
 jdk.management.resource \
+jdk.snmp \
+jdk.jconsole
 
 integration_modules=\
 java.logging \
@@ -47,11 +50,18 @@
 java.sql \
 java.sql.rowset \
 java.xml \
+jdk.charsets \
+jdk.localedata \
+jdk.net \
+jdk.sctp \
+jdk.jsobject \
 jdk.httpserver \
 jdk.naming.dns \
-jdk.naming.rmi
+jdk.naming.rmi \
+jdk.xml.dom \
+jdk.zipfs
 
-ui_toolkits_modules=\
+ui_modules=\
 java.datatransfer \
 java.desktop \
 javafx.base \
@@ -63,39 +73,40 @@
 javafx.web \
 jdk.accessibility
 
-other_modules=\
-java.jnlp \
-java.smartcardio \
-jdk.jsobject \
-jdk.xml.dom
-
-debug_modules=\
-jdk.jdi \
-jdk.jdwp.agent
-
-tool_modules=\
+svc_modules=\
+jdk.jfr \
 jdk.attach \
-jdk.editpad \
+jdk.jcmd \
+jdk.jdi \
+jdk.jdwp.agent \
+jdk.jstatd \
+jdk.hotspot.agent
+
+packaging_modules=\
 jdk.jartool \
+jdk.jlink \
+jdk.pack \
+jdk.packager.services
+
+compiler_modules=\
+java.compiler \
+jdk.compiler \
 jdk.javadoc \
-jdk.jcmd \
-jdk.jconsole \
 jdk.jdeps \
-jdk.jlink \
+jdk.editpad \
 jdk.jshell \
-jdk.jstatd \
-jdk.pack \
-jdk.policytool \
-jdk.packager.services \
 jdk.rmic
 
-compiler_scripting_modules=\
-java.compiler \
+scripting_modules=\
 java.scripting \
-jdk.compiler \
 jdk.dynalink \
 jdk.scripting.nashorn \
 jdk.scripting.nashorn.shell
 
+other_modules=\
+java.jnlp \
+java.smartcardio
+  
 incubator_modules=\
 jdk.incubator.httpclient
+
--- a/jdk/make/src/classes/build/tools/taglet/ExtLink.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/make/src/classes/build/tools/taglet/ExtLink.java	Wed Jul 05 23:32:48 2017 +0200
@@ -56,7 +56,7 @@
 
     static final String TAG_NAME = "extLink";
 
-    static final String URL = "https://www.oracle.com/pls/topic/lookup?ctx=javase9&id=";
+    static final String URL = "https://www.oracle.com/pls/topic/lookup?ctx=javase9&amp;id=";
 
     static final Pattern TAG_PATTERN = Pattern.compile("(\\s*)(?<name>\\w+)(\\s+)(?<desc>.*)");
 
--- a/jdk/src/java.base/aix/native/libnet/aix_close.c	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/src/java.base/aix/native/libnet/aix_close.c	Wed Jul 05 23:32:48 2017 +0200
@@ -421,10 +421,8 @@
 }
 
 int NET_RecvFrom(int s, void *buf, int len, unsigned int flags,
-       struct sockaddr *from, int *fromlen) {
-    socklen_t socklen = *fromlen;
-    BLOCKING_IO_RETURN_INT( s, recvfrom(s, buf, len, flags, from, &socklen) );
-    *fromlen = socklen;
+       struct sockaddr *from, socklen_t *fromlen) {
+    BLOCKING_IO_RETURN_INT( s, recvfrom(s, buf, len, flags, from, fromlen) );
 }
 
 int NET_Send(int s, void *msg, int len, unsigned int flags) {
@@ -440,10 +438,8 @@
     BLOCKING_IO_RETURN_INT( s, sendto(s, msg, len, flags, to, tolen) );
 }
 
-int NET_Accept(int s, struct sockaddr *addr, int *addrlen) {
-    socklen_t socklen = *addrlen;
-    BLOCKING_IO_RETURN_INT( s, accept(s, addr, &socklen) );
-    *addrlen = socklen;
+int NET_Accept(int s, struct sockaddr *addr, socklen_t *addrlen) {
+    BLOCKING_IO_RETURN_INT( s, accept(s, addr, addrlen) );
 }
 
 int NET_Connect(int s, struct sockaddr *addr, int addrlen) {
--- a/jdk/src/java.base/share/classes/java/io/File.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/java/io/File.java	Wed Jul 05 23:32:48 2017 +0200
@@ -923,6 +923,12 @@
      * java.nio.file.Files#readAttributes(Path,Class,LinkOption[])
      * Files.readAttributes} method may be used.
      *
+     * @apiNote
+     * While the unit of time of the return value is milliseconds,
+     * the granularity of the value depends on the underlying
+     * file system and may be larger.  For example, some
+     * file systems use time stamps in units of seconds.
+     *
      * @return  A <code>long</code> value representing the time the file was
      *          last modified, measured in milliseconds since the epoch
      *          (00:00:00 GMT, January 1, 1970), or <code>0L</code> if the
--- a/jdk/src/java.base/share/classes/javax/crypto/Cipher.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/javax/crypto/Cipher.java	Wed Jul 05 23:32:48 2017 +0200
@@ -137,6 +137,7 @@
  * <li>{@code AES/CBC/PKCS5Padding} (128)</li>
  * <li>{@code AES/ECB/NoPadding} (128)</li>
  * <li>{@code AES/ECB/PKCS5Padding} (128)</li>
+ * <li>{@code AES/GCM/NoPadding} (128)</li>
  * <li>{@code DES/CBC/NoPadding} (56)</li>
  * <li>{@code DES/CBC/PKCS5Padding} (56)</li>
  * <li>{@code DES/ECB/NoPadding} (56)</li>
--- a/jdk/src/java.base/share/classes/sun/launcher/LauncherHelper.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/sun/launcher/LauncherHelper.java	Wed Jul 05 23:32:48 2017 +0200
@@ -363,10 +363,6 @@
     static void initHelpMessage(String progname) {
         outBuf = outBuf.append(getLocalizedMessage("java.launcher.opt.header",
                 (progname == null) ? "java" : progname ));
-        outBuf = outBuf.append(getLocalizedMessage("java.launcher.opt.datamodel",
-                32));
-        outBuf = outBuf.append(getLocalizedMessage("java.launcher.opt.datamodel",
-                64));
     }
 
     /**
--- a/jdk/src/java.base/share/classes/sun/launcher/resources/launcher.properties	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/src/java.base/share/classes/sun/launcher/resources/launcher.properties	Wed Jul 05 23:32:48 2017 +0200
@@ -34,7 +34,6 @@
 \ <module>/<mainclass> are passed as the arguments to main class.\n\n\
 \ where options include:\n\n
 
-java.launcher.opt.datamodel  =\    -d{0}\t  Deprecated, will be removed in a future release\n
 java.launcher.opt.vmselect   =\    {0}\t  to select the "{1}" VM\n
 java.launcher.opt.hotspot    =\    {0}\t  is a synonym for the "{1}" VM  [deprecated]\n
 
--- a/jdk/src/java.base/share/native/libjli/args.c	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/src/java.base/share/native/libjli/args.c	Wed Jul 05 23:32:48 2017 +0200
@@ -456,6 +456,11 @@
             env++;
         }
 
+        // Trailing space
+        if (*env == '\0') {
+            break;
+        }
+
         arg = p;
         while (*env != '\0' && !isspace(*env)) {
             if (*env == '"' || *env == '\'') {
--- a/jdk/src/java.base/share/native/libjli/emessages.h	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/src/java.base/share/native/libjli/emessages.h	Wed Jul 05 23:32:48 2017 +0200
@@ -36,7 +36,7 @@
 #define JNI_ERROR       "Error: A JNI error has occurred, please check your installation and try again"
 #define JNI_ERROR1      "Error: can't find JNI interfaces in: %s"
 
-#define ARG_INFO_ENVVAR "NOTE: Picked up the following options via %s:\n  %s"
+#define ARG_INFO_ENVVAR "NOTE: Picked up %s: %s"
 #define ARG_WARN        "Warning: %s option is no longer supported."
 
 #define ARG_ERROR1      "Error: %s requires class path specification"
--- a/jdk/src/java.base/unix/native/libjava/UnixFileSystem_md.c	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/src/java.base/unix/native/libjava/UnixFileSystem_md.c	Wed Jul 05 23:32:48 2017 +0200
@@ -229,12 +229,15 @@
     WITH_FIELD_PLATFORM_STRING(env, file, ids.path, path) {
         struct stat64 sb;
         if (stat64(path, &sb) == 0) {
-#ifndef MACOSX
+#if defined(_AIX)
+            rv =  (jlong)sb.st_mtime * 1000;
+            rv += (jlong)sb.st_mtime_n / 1000000;
+#elif defined(MACOSX)
+            rv  = (jlong)sb.st_mtimespec.tv_sec * 1000;
+            rv += (jlong)sb.st_mtimespec.tv_nsec / 1000000;
+#else
             rv  = (jlong)sb.st_mtim.tv_sec * 1000;
             rv += (jlong)sb.st_mtim.tv_nsec / 1000000;
-#else
-            rv  = (jlong)sb.st_mtimespec.tv_sec * 1000;
-            rv += (jlong)sb.st_mtimespec.tv_nsec / 1000000;
 #endif
         }
     } END_PLATFORM_STRING(env, path);
@@ -419,14 +422,16 @@
             struct timeval tv[2];
 
             /* Preserve access time */
-#ifndef MACOSX
+#if defined(_AIX)
+            tv[0].tv_sec = sb.st_atime;
+            tv[0].tv_usec = sb.st_atime_n / 1000;
+#elif defined(MACOSX)
+            tv[0].tv_sec = sb.st_atimespec.tv_sec;
+            tv[0].tv_usec = sb.st_atimespec.tv_nsec / 1000;
+#else
             tv[0].tv_sec = sb.st_atim.tv_sec;
             tv[0].tv_usec = sb.st_atim.tv_nsec / 1000;
-#else
-            tv[0].tv_sec = sb.st_atimespec.tv_sec;
-            tv[0].tv_usec = sb.st_atimespec.tv_nsec / 1000;
 #endif
-
             /* Change last-modified time */
             tv[1].tv_sec = time / 1000;
             tv[1].tv_usec = (time % 1000) * 1000;
--- a/jdk/src/java.security.jgss/share/classes/sun/security/krb5/KrbAsRep.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/src/java.security.jgss/share/classes/sun/security/krb5/KrbAsRep.java	Wed Jul 05 23:32:48 2017 +0200
@@ -160,7 +160,7 @@
         creds = new Credentials(
                                 rep.ticket,
                                 req.reqBody.cname,
-                                rep.ticket.sname,
+                                enc_part.sname,
                                 enc_part.key,
                                 enc_part.flags,
                                 enc_part.authtime,
--- a/jdk/src/java.security.jgss/share/classes/sun/security/krb5/KrbTgsRep.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/src/java.security.jgss/share/classes/sun/security/krb5/KrbTgsRep.java	Wed Jul 05 23:32:48 2017 +0200
@@ -88,7 +88,7 @@
 
         this.creds = new Credentials(rep.ticket,
                                 rep.cname,
-                                rep.ticket.sname,
+                                enc_part.sname,
                                 enc_part.key,
                                 enc_part.flags,
                                 enc_part.authtime,
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/AsyncSSLConnection.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/AsyncSSLConnection.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -190,11 +190,6 @@
     }
 
     @Override
-    protected int readImpl(ByteBuffer buffer) throws IOException {
-        throw new UnsupportedOperationException("Not supported.");
-    }
-
-    @Override
     CompletableFuture<Void> whenReceivingResponse() {
         throw new UnsupportedOperationException("Not supported.");
     }
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/Exchange.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/Exchange.java	Wed Jul 05 23:32:48 2017 +0200
@@ -33,7 +33,6 @@
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URLPermission;
-import java.nio.ByteBuffer;
 import java.security.AccessControlContext;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
@@ -76,9 +75,6 @@
     boolean upgrading; // to HTTP/2
     final PushGroup<?,T> pushGroup;
 
-    // buffer for receiving response headers
-    private volatile ByteBuffer rxBuffer;
-
     Exchange(HttpRequestImpl request, MultiExchange<?,T> multi) {
         this.request = request;
         this.upgrading = false;
@@ -121,17 +117,6 @@
         return client;
     }
 
-    ByteBuffer getBuffer() {
-        if(rxBuffer == null) {
-            synchronized (this) {
-                if(rxBuffer == null) {
-                    rxBuffer = Utils.getExchangeBuffer();
-                }
-            }
-        }
-        return rxBuffer;
-    }
-
     public Response response() throws IOException, InterruptedException {
         return responseImpl(null);
     }
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/Http1Exchange.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/Http1Exchange.java	Wed Jul 05 23:32:48 2017 +0200
@@ -55,7 +55,7 @@
     final HttpConnection connection;
     final HttpClientImpl client;
     final Executor executor;
-    final ByteBuffer buffer; // used for receiving
+    volatile ByteBuffer buffer; // used for receiving
 
     @Override
     public String toString() {
@@ -74,7 +74,7 @@
         this.client = exchange.client();
         this.executor = exchange.executor();
         this.operations = new LinkedList<>();
-        this.buffer = exchange.getBuffer();
+        this.buffer = Utils.EMPTY_BYTEBUFFER;
         if (connection != null) {
             this.connection = connection;
         } else {
@@ -157,7 +157,9 @@
         try {
             response = new Http1Response<>(connection, this);
             response.readHeaders();
-            return response.response();
+            Response r = response.response();
+            buffer = response.getBuffer();
+            return r;
         } catch (Throwable t) {
             connection.close();
             throw t;
@@ -213,7 +215,9 @@
         return MinimalFuture.supply( () -> {
             response = new Http1Response<>(connection, Http1Exchange.this);
             response.readHeaders();
-            return response.response();
+            Response r = response.response();
+            buffer = response.getBuffer();
+            return r;
         }, executor);
     }
 
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/Http1Response.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/Http1Response.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -44,7 +44,7 @@
     private final HttpConnection connection;
     private ResponseHeaders headers;
     private int responseCode;
-    private final ByteBuffer buffer; // same buffer used for reading status line and headers
+    private ByteBuffer buffer;
     private final Http1Exchange<T> exchange;
     private final boolean redirecting; // redirecting
     private boolean return2Cache; // return connection to cache when finished
@@ -96,6 +96,10 @@
         return finished;
     }
 
+    ByteBuffer getBuffer() {
+        return buffer;
+    }
+
     int fixupContentLen(int clen) {
         if (request.method().equalsIgnoreCase("HEAD")) {
             return 0;
@@ -194,12 +198,15 @@
     static final char CR = '\r';
     static final char LF = '\n';
 
-    private int getBuffer() throws IOException {
+    private int obtainBuffer() throws IOException {
         int n = buffer.remaining();
 
         if (n == 0) {
-            buffer.clear();
-            return connection.read(buffer);
+            buffer = connection.read();
+            if (buffer == null) {
+                return -1;
+            }
+            n = buffer.remaining();
         }
         return n;
     }
@@ -207,18 +214,17 @@
     String readStatusLine() throws IOException {
         boolean cr = false;
         StringBuilder statusLine = new StringBuilder(128);
-        ByteBuffer b = buffer;
-        while (getBuffer() != -1) {
-            byte[] buf = b.array();
-            int offset = b.position();
-            int len = b.limit() - offset;
+        while ((obtainBuffer()) != -1) {
+            byte[] buf = buffer.array();
+            int offset = buffer.position();
+            int len = buffer.limit() - offset;
 
             for (int i = 0; i < len; i++) {
                 char c = (char) buf[i+offset];
 
                 if (cr) {
                     if (c == LF) {
-                        b.position(i + 1 + offset);
+                        buffer.position(i + 1 + offset);
                         return statusLine.toString();
                     } else {
                         throw new IOException("invalid status line");
@@ -231,7 +237,7 @@
                 }
             }
             // unlikely, but possible, that multiple reads required
-            b.position(b.limit());
+            buffer.position(buffer.limit());
         }
         return null;
     }
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpConnection.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpConnection.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -323,12 +323,9 @@
         }
     }
 
-    final int read(ByteBuffer buffer) throws IOException {
-        return readImpl(buffer);
-    }
-
     final ByteBuffer read() throws IOException {
-        return readImpl();
+        ByteBuffer b = readImpl();
+        return b;
     }
 
     /*
@@ -337,9 +334,6 @@
      */
     protected abstract ByteBuffer readImpl() throws IOException;
 
-    /** Reads as much as possible into given buffer and returns amount read. */
-    protected abstract int readImpl(ByteBuffer buffer) throws IOException;
-
     @Override
     public String toString() {
         return "HttpConnection: " + channel().toString();
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/PlainHttpConnection.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/PlainHttpConnection.java	Wed Jul 05 23:32:48 2017 +0200
@@ -311,8 +311,7 @@
         }
     }
 
-    @Override
-    protected int readImpl(ByteBuffer buf) throws IOException {
+    private int readImpl(ByteBuffer buf) throws IOException {
         int mark = buf.position();
         int n;
         // FIXME: this hack works in conjunction with the corresponding change
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/PlainTunnelingConnection.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/PlainTunnelingConnection.java	Wed Jul 05 23:32:48 2017 +0200
@@ -157,11 +157,6 @@
     }
 
     @Override
-    protected int readImpl(ByteBuffer buffer) throws IOException {
-        return delegate.readImpl(buffer);
-    }
-
-    @Override
     boolean isSecure() {
         return false;
     }
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/ResponseContent.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/ResponseContent.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -148,11 +148,7 @@
     // make sure we have at least 1 byte to look at
     private void getHunk() throws IOException {
         if (chunkbuf == null || !chunkbuf.hasRemaining()) {
-            if (chunkbuf == null) {
-                chunkbuf = Utils.getBuffer();
-            }
-            chunkbuf.clear();
-            connection.read(chunkbuf);
+            chunkbuf = connection.read();
         }
     }
 
@@ -256,7 +252,6 @@
 
     private void pushBodyFixed(ByteBuffer b) throws IOException {
         int remaining = contentLength;
-        //lastBufferUsed = b;
         while (b.hasRemaining() && remaining > 0) {
             ByteBuffer buffer = Utils.getBuffer();
             int amount = Math.min(b.remaining(), remaining);
@@ -265,22 +260,14 @@
             buffer.flip();
             dataConsumer.accept(Optional.of(buffer));
         }
-        //client.returnBuffer(b);
         while (remaining > 0) {
-            ByteBuffer buffer = Utils.getBuffer();
-            int xx = connection.read(buffer);
-            if (xx == -1)
+            ByteBuffer buffer = connection.read();
+            if (buffer == null)
                 throw new IOException("connection closed");
 
             int bytesread = buffer.remaining();
             // assume for now that pipelining not implemented
             if (bytesread > remaining) {
-                System.err.println("xx = " + xx);
-                System.err.println("bytesread = " + bytesread);
-                System.err.println("remaining = " + remaining);
-                for (int i=0; i<remaining; i++) {
-                    System.err.printf("%x ", buffer.get());
-                }
                 throw new IOException("too many bytes read");
             }
             remaining -= bytesread;
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/ResponseHeaders.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/ResponseHeaders.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -72,7 +72,7 @@
 
     static final class InputStreamWrapper extends InputStream {
         final HttpConnection connection;
-        final ByteBuffer buffer;
+        ByteBuffer buffer;
         int lastRead = -1; // last byte read from the buffer
         int consumed = 0; // number of bytes consumed.
         InputStreamWrapper(HttpConnection connection, ByteBuffer buffer) {
@@ -83,9 +83,8 @@
         @Override
         public int read() throws IOException {
             if (!buffer.hasRemaining()) {
-                buffer.clear();
-                int n = connection.read(buffer);
-                if (n == -1) {
+                buffer = connection.read();
+                if (buffer == null) {
                     return lastRead = -1;
                 }
             }
@@ -97,6 +96,16 @@
         }
     }
 
+    private static void display(Map<String, List<String>> map) {
+        map.forEach((k,v) -> {
+            System.out.print (k + ": ");
+            for (String val : v) {
+                System.out.print(val + ", ");
+            }
+            System.out.println("");
+        });
+    }
+
     private Map<String, List<String>> parse(InputStreamWrapper input)
          throws IOException
     {
@@ -114,7 +123,6 @@
             // finds is CR. This only happens if there are no headers, and
             // only one byte will be consumed from the buffer. In this case
             // the next byte MUST be LF
-            //System.err.println("Last character read is: " + (byte)lastRead);
             if (input.read() != LF) {
                 throw new IOException("Unexpected byte sequence when no headers: "
                      + ((int)CR) + " " + input.lastRead
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLConnection.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLConnection.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -162,10 +162,11 @@
 
     @Override
     protected ByteBuffer readImpl() throws IOException {
-        ByteBuffer dst = ByteBuffer.allocate(8192);
-        int n = readImpl(dst);
+        WrapperResult r = sslDelegate.recvData(ByteBuffer.allocate(8192));
+        // TODO: check for closure
+        int n = r.result.bytesProduced();
         if (n > 0) {
-            return dst;
+            return r.buf;
         } else if (n == 0) {
             return Utils.EMPTY_BYTEBUFFER;
         } else {
@@ -174,19 +175,6 @@
     }
 
     @Override
-    protected int readImpl(ByteBuffer buf) throws IOException {
-        // TODO: need to ensure that buf is big enough for application data
-        WrapperResult r = sslDelegate.recvData(buf);
-        // TODO: check for closure
-        String s = "Receive) ";
-        //debugPrint(s, r.buf);
-        if (r.result.bytesProduced() > 0) {
-            assert buf == r.buf;
-        }
-        return r.result.bytesProduced();
-    }
-
-    @Override
     boolean connected() {
         return delegate.connected();
     }
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLDelegate.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLDelegate.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -104,9 +104,7 @@
         }
         SSLEngineResult result;
 
-        /* if passed in buffer was not big enough then the a reallocated buffer
-         * is returned here  */
-        ByteBuffer buf;
+        ByteBuffer buf; // buffer containing result data
     }
 
     int app_buf_size;
--- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLTunnelConnection.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLTunnelConnection.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -164,19 +164,10 @@
 
     @Override
     protected ByteBuffer readImpl() throws IOException {
-        return sslDelegate.recvData(Utils.EMPTY_BYTEBUFFER).buf; // fix this, make the read normal
-    }
+        ByteBuffer buf = Utils.getBuffer();
 
-    @Override
-    protected int readImpl(ByteBuffer buf) throws IOException {
         WrapperResult r = sslDelegate.recvData(buf);
-        // TODO: check for closure
-        String s = "Receive) ";
-        //debugPrint(s, r.buf);
-        if (r.result.bytesProduced() > 0) {
-            assert buf == r.buf;
-        }
-        return r.result.bytesProduced();
+        return r.buf;
     }
 
     @Override
--- a/jdk/test/ProblemList.txt	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/ProblemList.txt	Wed Jul 05 23:32:48 2017 +0200
@@ -258,8 +258,6 @@
 tools/jimage/JImageListTest.java                                8170120 generic-all
 tools/jimage/JImageVerifyTest.java                              8170120 generic-all
 
-tools/jar/multiRelease/RuntimeTest.java                         8173905 generic-all
-
 tools/schemagen/MultiReleaseJarTest.java                        8174692 generic-all
 tools/wsgen/MultiReleaseJarTest.java                            8174692 generic-all
 
--- a/jdk/test/com/sun/corba/7130985/CorbaExceptionsCompileTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/com/sun/corba/7130985/CorbaExceptionsCompileTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,7 +25,7 @@
  * @test
  * @bug 7130985
  * @summary Four helper classes missing in Sun JDK
- * @library /lib/testlibrary
+ * @library /lib/testlibrary /test/lib
  * @build jdk.testlibrary.*
  * @modules java.corba
  * @run main CorbaExceptionsCompileTest
@@ -35,12 +35,12 @@
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.rmi.RemoteException;
+
 import org.omg.CORBA.ORBPackage.InvalidName;
 import org.omg.CORBA.TypeCodePackage.BadKind;
 import org.omg.CORBA.TypeCodePackage.Bounds;
 
-import jdk.testlibrary.FileUtils;
+import jdk.test.lib.util.FileUtils;
 import jdk.testlibrary.JDKToolLauncher;
 
 public class CorbaExceptionsCompileTest implements CorbaExceptionsTest {
--- a/jdk/test/com/sun/crypto/provider/CICO/PBEFunc/CipherNCFuncTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/com/sun/crypto/provider/CICO/PBEFunc/CipherNCFuncTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -20,20 +20,22 @@
  * or visit www.oracle.com if you need additional information or have any
  * questions.
  */
+
 /*
  * @test
  * @bug 8048604
- * @library ../ /lib/testlibrary
+ * @library ../ /test/lib
  * @summary This test verifies the assertion "There should be no transformation
- *  on the plaintext/ciphertext in encryption/decryption mechanism" for
- *  feature "NullCipher".
+ *          on the plaintext/ciphertext in encryption/decryption mechanism" for
+ *          feature "NullCipher".
  */
+
 import javax.crypto.BadPaddingException;
 import javax.crypto.Cipher;
 import javax.crypto.IllegalBlockSizeException;
 import javax.crypto.NullCipher;
 import javax.crypto.ShortBufferException;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class CipherNCFuncTest {
     public static void main(String[] args) throws ShortBufferException,
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/io/File/createTempFile/SecurityTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ * @bug 4138064
+ * @build SecurityTest
+ * @run main/othervm/policy=java.policy SecurityTest
+ */
+
+import java.io.File;
+
+public class SecurityTest {
+
+    public static void main(String[] args) throws Exception {
+        try {
+            File f = File.createTempFile("foo", null);
+        } catch (java.security.AccessControlException x) {
+            throw x;
+        } catch (SecurityException x) {
+            if (x.getMessage().equals("Unable to create temporary file")) {
+                return;
+            }
+            throw x;
+        }
+        throw new Exception("SecurityException not thrown");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/io/File/createTempFile/java.policy	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,2 @@
+grant {
+};
--- a/jdk/test/java/io/InputStream/ReadAllBytes.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/io/InputStream/ReadAllBytes.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,13 +27,12 @@
 import java.io.InputStream;
 import java.util.Arrays;
 import java.util.Random;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 /*
  * @test
  * @bug 8080835
- * @library /lib/testlibrary
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run main ReadAllBytes
  * @summary Basic test for InputStream.readAllBytes
  * @key randomness
--- a/jdk/test/java/io/InputStream/ReadNBytes.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/io/InputStream/ReadNBytes.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,13 +27,12 @@
 import java.io.InputStream;
 import java.util.Arrays;
 import java.util.Random;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 /*
  * @test
  * @bug 8080835
- * @library /lib/testlibrary
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run main ReadNBytes
  * @summary Basic test for InputStream.readNBytes
  * @key randomness
--- a/jdk/test/java/io/Serializable/evolution/AddedExternField/run.sh	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-#
-# Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-#
-# @bug 4088176
-# @summary  Test reading an evolved class serialization into the original class
-
-rm *.class tmp.ser
-javac WriteAddedField.java
-java ${TESTVMOPTS} WriteAddedField
-rm *.class
-javac ReadAddedField.java
-java ${TESTVMOPTS} ReadAddedField
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/io/Serializable/evolution/RenamePackage/RenamePackageTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4087295 4785472
+ * @library /test/lib
+ * @build jdk.test.lib.compiler.CompilerUtils
+ * @build jdk.test.lib.process.ProcessTools
+ * @build RenamePackageTest
+ * @run main RenamePackageTest
+ * @summary Enable resolveClass() to accommodate package renaming.
+ *          This fix enables one to implement a resolveClass method that maps a
+ *          Serialiazable class within a serialization stream to the same class
+ *          in a different package within the JVM runtime. See run shell script
+ *          for instructions on how to run this test.
+ */
+
+import java.io.File;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import jdk.test.lib.compiler.CompilerUtils;
+import jdk.test.lib.process.ProcessTools;
+
+public class RenamePackageTest {
+    public static void main(String args[]) throws Exception {
+        setup();
+
+        runTestSerialDriver();
+        runInstallSerialDriver();
+
+        runInstallSerialDriver();
+        runTestSerialDriver();
+    }
+
+    private static final Path SHARE = Paths.get(System.getProperty("test.classes"), "share");
+    private static final Path OCLASSES = Paths.get(System.getProperty("test.classes"), "oclasses");
+    private static final Path NCLASSES = Paths.get(System.getProperty("test.classes"), "nclasses");
+
+    private static void setup() throws Exception {
+
+        boolean b = CompilerUtils.compile(Paths.get(System.getProperty("test.src"), "extension"),
+                                          SHARE);
+        assertTrue(b);
+        b = CompilerUtils.compile(Paths.get(System.getProperty("test.src"), "test"),
+                                  OCLASSES,
+                                  "-classpath",
+                                  SHARE.toString());
+        assertTrue(b);
+        b = CompilerUtils.compile(Paths.get(System.getProperty("test.src"), "install"),
+                                  NCLASSES,
+                                  "-classpath",
+                                  SHARE.toString());
+        assertTrue(b);
+    }
+
+    private static void runTestSerialDriver() throws Exception {
+        ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true,
+                "-classpath",
+                SHARE.toString()
+                    + File.pathSeparator
+                    + OCLASSES.toString(),
+                "test.SerialDriver", "-s");
+        Process p = ProcessTools.startProcess("test SerialDriver", pb);
+        p.waitFor();
+        assertTrue(p.exitValue() == 0);
+    }
+
+    private static void runInstallSerialDriver() throws Exception {
+        ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true,
+                "-classpath",
+                SHARE.toString()
+                    + File.pathSeparator
+                    + NCLASSES.toString(),
+                "install.SerialDriver", "-d");
+        Process p = ProcessTools.startProcess("install SerialDriver", pb);
+        p.waitFor();
+        assertTrue(p.exitValue() == 0);
+    }
+
+    private static void assertTrue(boolean b) {
+        if (!b) {
+            throw new RuntimeException("expected true, get false");
+        }
+    }
+}
--- a/jdk/test/java/io/Serializable/evolution/RenamePackage/run.sh	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,105 +0,0 @@
-#
-# Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 4087295 4785472
-# @summary Enable resolveClass() to accommodate package renaming.
-# This fix enables one to implement a resolveClass method that maps a
-# Serialiazable class within a serialization stream to the same class
-# in a different package within the JVM runtime. See run shell script
-# for instructions on how to run this test.
-
-
-if [ "${TESTJAVA}" = "" ]
-then
-  echo "TESTJAVA not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-
-if [ "${COMPILEJAVA}" = "" ] ; then
-  COMPILEJAVA="${TESTJAVA}"
-fi
-
-
-OS=`uname -s`
-# Need to determine the classpath separator and filepath separator based on the
-# operating system.
-case "$OS" in
-SunOS | Linux | Darwin | AIX )
-  PS=":"  ;;
-Windows* | CYGWIN* )
-  PS=";"  ;;
-* )
-  echo "Unrecognized system!"
-  exit 1  ;;
-esac
-
-JAVA=${TESTJAVA}/bin/java
-JAVAC=${COMPILEJAVA}/bin/javac
-MKDIR=mkdir
-RDEL="rm -r"
-
-if [ -d ${TESTCLASSES}/oclasses ]
-then
-   ${RDEL} ${TESTCLASSES}/oclasses
-fi
-if [ -d ${TESTCLASSES}/nclasses ]
-then
-   ${RDEL} ${TESTCLASSES}/nclasses
-fi
-if [ -d ${TESTCLASSES}/share ]
-then
-   ${RDEL} ${TESTCLASSES}/share
-fi
-if [ -f ${TESTCLASSES}/stream.ser ]
-then
-   ${RDEL} ${TESTCLASSES}/stream.ser
-fi
-
-mkdir ${TESTCLASSES}/oclasses
-mkdir ${TESTCLASSES}/share
-mkdir ${TESTCLASSES}/nclasses
-
-# Build sources
-set -e
-${JAVAC} ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d ${TESTCLASSES}/share \
-    ${TESTSRC}/extension/ExtendedObjectInputStream.java
-CLASSPATH=${TESTCLASSES}/share; export CLASSPATH;
-${JAVAC} ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d ${TESTCLASSES}/oclasses \
-    ${TESTSRC}/test/SerialDriver.java
-CLASSPATH=${TESTCLASSES}/share; export CLASSPATH;
-${JAVAC} ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d ${TESTCLASSES}/nclasses \
-    ${TESTSRC}/install/SerialDriver.java
-
-# Run Case 1. Map test.SerialDriver within stream to install.SerialDriver.
-CLASSPATH="${TESTCLASSES}/oclasses${PS}${TESTCLASSES}/share"; export CLASSPATH;
-${JAVA} ${TESTVMOPTS} test.SerialDriver -s
-CLASSPATH="${TESTCLASSES}/nclasses${PS}${TESTCLASSES}/share"; export CLASSPATH;
-${JAVA} ${TESTVMOPTS} install.SerialDriver -d
-rm stream.ser
-
-# Run Case 2. Map install.SerialDriver within stream to test.SerialDriver.
-CLASSPATH="${TESTCLASSES}/nclasses${PS}${TESTCLASSES}/share"; export CLASSPATH;
-${JAVA} ${TESTVMOPTS} install.SerialDriver -s
-CLASSPATH="${TESTCLASSES}/oclasses${PS}${TESTCLASSES}/share"; export CLASSPATH;
-${JAVA} ${TESTVMOPTS} test.SerialDriver -d
--- a/jdk/test/java/io/Serializable/failureAtomicity/FailureAtomicity.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/io/Serializable/failureAtomicity/FailureAtomicity.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,8 +26,7 @@
  * @bug 8071474
  * @summary Better failure atomicity for default read object.
  * @modules jdk.compiler
- * @library /lib/testlibrary
- * @build jdk.testlibrary.FileUtils
+ * @library /test/lib
  * @compile FailureAtomicity.java SerialRef.java
  * @run main failureAtomicity.FailureAtomicity
  */
@@ -59,7 +58,7 @@
 import javax.tools.StandardJavaFileManager;
 import javax.tools.StandardLocation;
 import javax.tools.ToolProvider;
-import jdk.testlibrary.FileUtils;
+import jdk.test.lib.util.FileUtils;
 
 @SuppressWarnings("unchecked")
 public class FailureAtomicity {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/io/Serializable/maskSyntheticModifier/MaskSyntheticModifierTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4897937
+ * @run main MaskSyntheticModifierTest
+ * @summary Verify that the presence of the JVM_ACC_SYNTHETIC bit in the
+ *          modifiers of fields and methods does not affect default
+ *          serialVersionUID calculation.
+ */
+
+import java.io.ObjectStreamClass;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+
+public class MaskSyntheticModifierTest {
+    public static void main(String[] args) throws Exception {
+        setup();
+
+        long suid = ObjectStreamClass.lookup(Foo.class).getSerialVersionUID();
+        if (suid != 8027844768744011556L) {
+            throw new Error("incorrect serialVersionUID: " + suid);
+        }
+    }
+
+    private static void setup() throws Exception {
+        Files.copy(Paths.get(System.getProperty("test.src"), "Foo.class"),
+                Paths.get("Foo.class"), StandardCopyOption.REPLACE_EXISTING);
+    }
+}
--- a/jdk/test/java/io/Serializable/maskSyntheticModifier/Test.java	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @bug 4897937
- * @summary Verify that the presence of the JVM_ACC_SYNTHETIC bit in the
- *          modifiers of fields and methods does not affect default
- *          serialVersionUID calculation.
- */
-
-import java.io.ObjectStreamClass;
-
-public class Test {
-    public static void main(String[] args) {
-        long suid = ObjectStreamClass.lookup(Foo.class).getSerialVersionUID();
-        if (suid != 8027844768744011556L) {
-            throw new Error("incorrect serialVersionUID: " + suid);
-        }
-    }
-}
--- a/jdk/test/java/io/Serializable/maskSyntheticModifier/run.sh	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-#
-# Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 4897937
-# @summary Verify that the presence of the JVM_ACC_SYNTHETIC bit in the
-#          modifiers of fields and methods does not affect default
-#          serialVersionUID calculation.
-
-if [ "${TESTJAVA}" = "" ]
-then
-    echo "TESTJAVA not set.  Test cannot execute.  Failed."
-exit 1
-fi
-
-if [ "${COMPILEJAVA}" = "" ] ; then
-    COMPILEJAVA="${TESTJAVA}"
-fi
-
-if [ "${TESTSRC}" = "" ]
-then
-    TESTSRC="."
-fi
-
-set -ex
-cp ${TESTSRC}/Foo.class .
-${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . ${TESTSRC}/Test.java
-${TESTJAVA}/bin/java ${TESTVMOPTS} Test
-rm -f *.class
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/io/Serializable/packageAccess/PackageAccessTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4765255
+ * @library /lib/testlibrary
+ * @build JarUtils A B C D PackageAccessTest
+ * @run main PackageAccessTest
+ * @summary Verify proper functioning of package equality checks used to
+ *          determine accessibility of superclass constructor and inherited
+ *          writeReplace/readResolve methods.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectStreamClass;
+import java.io.InvalidClassException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+public class PackageAccessTest {
+
+    static Class bcl;
+    static Class dcl;
+
+    public static void main(String[] args) throws Exception {
+        setup();
+
+        try (URLClassLoader ldr =
+            new URLClassLoader(new URL[]{ new URL("file:foo.jar") },
+                    PackageAccessTest.class.getClassLoader())) {
+            bcl = Class.forName("B", true, ldr);
+            dcl = Class.forName("D", true, ldr);
+
+            Object b = bcl.newInstance();
+            try {
+                swizzle(b);
+                throw new Error("expected InvalidClassException for class B");
+            } catch (InvalidClassException e) {
+                System.out.println("caught " + e);
+                e.printStackTrace();
+            }
+            if (A.packagePrivateConstructorInvoked) {
+                throw new Error("package private constructor of A invoked");
+            }
+
+            Object d = dcl.newInstance();
+            swizzle(d);
+        }
+    }
+
+    static void swizzle(Object obj) throws Exception {
+        ByteArrayOutputStream bout = new ByteArrayOutputStream();
+        ObjectOutputStream oout = new ObjectOutputStream(bout);
+        oout.writeObject(obj);
+        oout.close();
+        ByteArrayInputStream bin =
+            new ByteArrayInputStream(bout.toByteArray());
+        new TestObjectInputStream(bin).readObject();
+    }
+
+    static void setup() throws Exception {
+        Path classes = Paths.get(System.getProperty("test.classes", ""));
+        JarUtils.createJarFile(Paths.get("foo.jar"), classes,
+                classes.resolve("B.class"), classes.resolve("D.class"));
+        Files.delete(classes.resolve("B.class"));
+        Files.delete(classes.resolve("D.class"));
+    }
+}
+
+class TestObjectInputStream extends ObjectInputStream {
+    TestObjectInputStream(InputStream in) throws IOException {
+        super(in);
+    }
+
+    protected Class resolveClass(ObjectStreamClass desc)
+        throws IOException, ClassNotFoundException
+    {
+        String n = desc.getName();
+        if (n.equals("B")) {
+            return PackageAccessTest.bcl;
+        } else if (n.equals("D")) {
+            return PackageAccessTest.dcl;
+        } else {
+            return super.resolveClass(desc);
+        }
+    }
+}
--- a/jdk/test/java/io/Serializable/packageAccess/Test.java	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-/*
- * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @bug 4765255
- * @summary Verify proper functioning of package equality checks used to
- *          determine accessibility of superclass constructor and inherited
- *          writeReplace/readResolve methods.
- */
-
-import java.io.*;
-import java.net.*;
-
-public class Test {
-
-    static Class bcl;
-    static Class dcl;
-
-    public static void main(String[] args) throws Exception {
-        ClassLoader ldr =
-            new URLClassLoader(new URL[]{ new URL("file:foo.jar") },
-                               Test.class.getClassLoader());
-        bcl = Class.forName("B", true, ldr);
-        dcl = Class.forName("D", true, ldr);
-
-        Object b = bcl.newInstance();
-        try {
-            swizzle(b);
-            throw new Error("expected InvalidClassException for class B");
-        } catch (InvalidClassException e) {
-            System.out.println("caught " + e);
-            e.printStackTrace();
-        }
-        if (A.packagePrivateConstructorInvoked) {
-            throw new Error("package private constructor of A invoked");
-        }
-
-        Object d = dcl.newInstance();
-        swizzle(d);
-    }
-
-    static void swizzle(Object obj) throws Exception {
-        ByteArrayOutputStream bout = new ByteArrayOutputStream();
-        ObjectOutputStream oout = new ObjectOutputStream(bout);
-        oout.writeObject(obj);
-        oout.close();
-        ByteArrayInputStream bin =
-            new ByteArrayInputStream(bout.toByteArray());
-        new TestObjectInputStream(bin).readObject();
-    }
-}
-
-class TestObjectInputStream extends ObjectInputStream {
-    TestObjectInputStream(InputStream in) throws IOException {
-        super(in);
-    }
-
-    protected Class resolveClass(ObjectStreamClass desc)
-        throws IOException, ClassNotFoundException
-    {
-        String n = desc.getName();
-        if (n.equals("B")) {
-            return Test.bcl;
-        } else if (n.equals("D")) {
-            return Test.dcl;
-        } else {
-            return super.resolveClass(desc);
-        }
-    }
-}
--- a/jdk/test/java/io/Serializable/packageAccess/run.sh	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-#
-# Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 4765255
-# @summary Verify proper functioning of package equality checks used to
-#          determine accessibility of superclass constructor and inherited
-#          writeReplace/readResolve methods.
-
-if [ "${TESTJAVA}" = "" ]
-then
-    echo "TESTJAVA not set.  Test cannot execute.  Failed."
-exit 1
-fi
-
-if [ "${COMPILEJAVA}" = "" ] ; then
-    COMPILEJAVA="${TESTJAVA}"
-fi
-
-if [ "${TESTSRC}" = "" ]
-then
-    TESTSRC="."
-fi
-
-set -ex
-
-${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . \
-    ${TESTSRC}/A.java ${TESTSRC}/B.java ${TESTSRC}/C.java ${TESTSRC}/D.java \
-    ${TESTSRC}/Test.java
-${COMPILEJAVA}/bin/jar ${TESTTOOLVMOPTS} cf foo.jar B.class D.class
-rm -f B.class D.class
-
-${TESTJAVA}/bin/java ${TESTVMOPTS} Test
-rm -f *.class *.jar
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/io/Serializable/resolveClass/consTest/ConsTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4413434
+ * @library /lib/testlibrary
+ * @build JarUtils SetupJar Boot
+ * @run driver SetupJar
+ * @run main/othervm -Xbootclasspath/a:boot.jar ConsTest
+ * @summary Verify that generated java.lang.reflect implementation classes do
+ *          not interfere with serialization's class resolution mechanism.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.lang.reflect.Constructor;
+
+public class ConsTest implements Serializable {
+    public static void main(String[] args) throws Exception {
+        Constructor cons = Boot.class.getConstructor(
+            new Class[] { ObjectInputStream.class });
+        ByteArrayOutputStream bout = new ByteArrayOutputStream();
+        ObjectOutputStream oout = new ObjectOutputStream(bout);
+        oout.writeObject(new ConsTest());
+        oout.close();
+
+        for (int i = 0; i < 100; i++) {
+            ObjectInputStream oin = new ObjectInputStream(
+                new ByteArrayInputStream(bout.toByteArray()));
+            cons.newInstance(new Object[]{ oin });
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/io/Serializable/resolveClass/consTest/SetupJar.java	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+public class SetupJar {
+
+    public static void main(String args[]) throws Exception {
+        Path classes = Paths.get(System.getProperty("test.classes", ""));
+        JarUtils.createJarFile(Paths.get("boot.jar"), classes,
+                classes.resolve("Boot.class"));
+    }
+}
--- a/jdk/test/java/io/Serializable/resolveClass/consTest/Test.java	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @bug 4413434
- * @summary Verify that generated java.lang.reflect implementation classes do
- *          not interfere with serialization's class resolution mechanism.
- */
-
-import java.io.*;
-import java.lang.reflect.*;
-
-public class Test implements Serializable {
-    public static void main(String[] args) throws Exception {
-        Constructor cons = Boot.class.getConstructor(
-            new Class[] { ObjectInputStream.class });
-        ByteArrayOutputStream bout = new ByteArrayOutputStream();
-        ObjectOutputStream oout = new ObjectOutputStream(bout);
-        oout.writeObject(new Test());
-        oout.close();
-
-        for (int i = 0; i < 100; i++) {
-            ObjectInputStream oin = new ObjectInputStream(
-                new ByteArrayInputStream(bout.toByteArray()));
-            cons.newInstance(new Object[]{ oin });
-        }
-    }
-}
--- a/jdk/test/java/io/Serializable/resolveClass/consTest/run.sh	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-#
-# Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 4413434
-# @summary Verify that generated java.lang.reflect implementation classes do
-#          not interfere with serialization's class resolution mechanism.
-
-if [ "${TESTJAVA}" = "" ]
-then
-    echo "TESTJAVA not set.  Test cannot execute.  Failed."
-exit 1
-fi
-
-if [ "${COMPILEJAVA}" = "" ] ; then
-    COMPILEJAVA="${TESTJAVA}"
-fi
-
-if [ "${TESTSRC}" = "" ]
-then
-    TESTSRC="."
-fi
-
-set -ex
-
-rm -f *.class *.jar
-${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . ${TESTSRC}/Boot.java
-${COMPILEJAVA}/bin/jar ${TESTTOOLVMOPTS} cf boot.jar *.class
-rm -f *.class
-${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -classpath boot.jar -d . \
-    ${TESTSRC}/Test.java
-${TESTJAVA}/bin/java ${TESTVMOPTS} -Xbootclasspath/a:boot.jar Test
-rm -f *.class *.jar
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/io/Serializable/resolveClass/deserializeButton/DeserializeButtonTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4413434
+ * @library /lib/testlibrary
+ * @build JarUtils Foo
+ * @run main DeserializeButtonTest
+ * @summary Verify that class loaded outside of application class loader is
+ *          correctly resolved during deserialization when read in by custom
+ *          readObject() method of a bootstrap class (in this case,
+ *          java.util.Vector).
+ */
+
+import java.net.URLClassLoader;
+import java.net.URL;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+public class DeserializeButtonTest {
+    public static void main(String[] args) throws Exception {
+        setup();
+
+        try (URLClassLoader ldr =
+            new URLClassLoader(new URL[]{ new URL("file:cb.jar") })) {
+            Runnable r = (Runnable) Class.forName("Foo", true, ldr).newInstance();
+            r.run();
+        }
+    }
+
+    private static void setup() throws Exception {
+        Path classes = Paths.get(System.getProperty("test.classes", ""));
+        JarUtils.createJarFile(Paths.get("cb.jar"),
+                               classes,
+                               classes.resolve("Foo.class"),
+                               classes.resolve("Foo$TestElement.class"));
+    }
+}
--- a/jdk/test/java/io/Serializable/resolveClass/deserializeButton/Test.java	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @bug 4413434
- * @summary Verify that class loaded outside of application class loader is
- *          correctly resolved during deserialization when read in by custom
- *          readObject() method of a bootstrap class (in this case,
- *          java.util.Vector).
- */
-
-import java.io.*;
-import java.net.*;
-
-public class Test {
-    public static void main(String[] args) throws Exception {
-        ClassLoader ldr =
-            new URLClassLoader(new URL[]{ new URL("file:cb.jar") });
-        Runnable r = (Runnable) Class.forName("Foo", true, ldr).newInstance();
-        r.run();
-    }
-}
--- a/jdk/test/java/io/Serializable/resolveClass/deserializeButton/run.sh	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-#
-# Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 4413434
-# @summary Verify that class loaded outside of application class loader is
-#          correctly resolved during deserialization when read in by custom
-#          readObject() method of a bootstrap class (in this case,
-#          java.util.Vector).
-
-if [ "${TESTJAVA}" = "" ]
-then
-    echo "TESTJAVA not set.  Test cannot execute.  Failed."
-exit 1
-fi
-
-if [ "${COMPILEJAVA}" = "" ] ; then
-    COMPILEJAVA="${TESTJAVA}"
-fi
-
-if [ "${TESTSRC}" = "" ]
-then
-    TESTSRC="."
-fi
-
-set -ex
-
-rm -f *.class *.jar
-${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . ${TESTSRC}/Foo.java
-${COMPILEJAVA}/bin/jar ${TESTTOOLVMOPTS} cf cb.jar *.class
-rm -f *.class
-${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . ${TESTSRC}/Test.java
-${TESTJAVA}/bin/java ${TESTVMOPTS} Test
-rm -f *.class *.jar
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/io/Serializable/serialver/classpath/ClasspathTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4035147 4785472
+ * @library /test/lib
+ * @build jdk.test.lib.JDKToolLauncher
+ * @build jdk.test.lib.process.ProcessTools
+ * @build ClasspathTest
+ * @run main serialver.ClasspathTest
+ * @summary Test the use of the -classpath switch in the serialver application.
+ */
+
+package serialver;
+
+import java.io.File;
+
+import jdk.test.lib.JDKToolLauncher;
+import jdk.test.lib.process.ProcessTools;
+
+public class ClasspathTest implements java.io.Serializable {
+    int a;
+    int b;
+
+    public static void main(String args[]) throws Exception {
+        JDKToolLauncher serialver =
+                JDKToolLauncher.create("serialver")
+                               .addToolArg("-classpath")
+                               .addToolArg(System.getProperty("test.class.path"))
+                               .addToolArg("serialver.ClasspathTest");
+        Process p = ProcessTools.startProcess("serialver",
+                        new ProcessBuilder(serialver.getCommand()));
+        p.waitFor();
+        if (p.exitValue() != 0) {
+            throw new RuntimeException("error occurs in serialver");
+        }
+    }
+}
--- a/jdk/test/java/io/Serializable/serialver/classpath/Test.java	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- *
- *  @bug 4035147
- *  @sumary     Simple java class for test purposes
- */
-
-package serialver;
-
-public class Test implements java.io.Serializable{
-    int a;
-    int b;
-}
--- a/jdk/test/java/io/Serializable/serialver/classpath/run.sh	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-#
-# Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 4035147 4785472
-# @summary Test the use of the -classpath switch in the serialver application.
-# @author Naveen Sanjeeva
-#
-# @build Test
-# @run shell run.sh
-
-# set a few environment variables so that the shell-script can run stand-alone
-# in the source directory
-
-if [ "${TESTSRC}" = "" ] ; then
-  TESTSRC="."
-fi
-if [ "${TESTCLASSES}" = "" ] ; then
-  TESTCLASSES="."
-fi
-if [ "${TESTJAVA}" = "" ] ; then
-  echo "TESTJAVA not set.  Test cannot execute."
-  echo "FAILED!!!"
-  exit 1
-fi
-
-# set platform-dependent variables
-OS=`uname -s`
-case "$OS" in
-  SunOS | Linux | Darwin | AIX )
-    PS=":"    ;;
-  Windows* | CYGWIN* )
-    PS=";"    ;;
-  * )
-    echo "Unrecognized system!"
-    exit 1    ;;
-esac
-
-# the test code
-
-echo "Using the classpath .${PS}${TESTCLASSES}"
-${TESTJAVA}/bin/serialver -classpath ".${PS}${TESTCLASSES}" serialver.Test
-
-exit $?
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/io/Serializable/serialver/nested/NestedTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4312217 4785473
+ * @library /test/lib
+ * @build jdk.test.lib.JDKToolLauncher
+ * @build jdk.test.lib.process.ProcessTools
+ * @build NestedTest
+ * @run main serialver.NestedTest
+ * @summary  To test the use of nested class specification using the '.'
+ *           notation instead of the '$' notation.
+ */
+
+package serialver;
+
+import java.io.Serializable;
+
+import jdk.test.lib.JDKToolLauncher;
+import jdk.test.lib.process.ProcessTools;
+
+public class NestedTest implements Serializable {
+    public static class Test1 implements Serializable {
+        public static class Test2 implements Serializable{
+            private static final long serialVersionUID = 100L;
+        }
+    }
+
+    public static void main(String args[]) throws Exception {
+        JDKToolLauncher serialver =
+                JDKToolLauncher.create("serialver")
+                               .addToolArg("-classpath")
+                               .addToolArg(System.getProperty("test.class.path"))
+                               .addToolArg("serialver.NestedTest.Test1.Test2");
+        Process p = ProcessTools.startProcess("serialver",
+                        new ProcessBuilder(serialver.getCommand()));
+        p.waitFor();
+        if (p.exitValue() != 0) {
+            throw new RuntimeException("error occurs in serialver.");
+        }
+    }
+}
--- a/jdk/test/java/io/Serializable/serialver/nested/Test.java	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- *
- * @bug 4312217
- * @summary  To test the use of nested class specification using the '.'
- *           notation instead of the '$' notation.
- */
-package serialver;
-
-import java.io.*;
-
-public class Test implements Serializable {
-    public static class Test1 implements Serializable {
-        public static class Test2 implements Serializable{
-            private static final long serialVersionUID = 100L;
-        }
-    }
-}
--- a/jdk/test/java/io/Serializable/serialver/nested/run.sh	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-#
-# Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 4312217 4785473
-# @summary Test the use of the -classpath switch in the serialver application.
-# @author Naveen Sanjeeva
-#
-# @build Test
-# @run shell run.sh
-
-# set a few environment variables so that the shell-script can run stand-alone
-# in the source directory
-
-if [ "${TESTSRC}" = "" ] ; then
-  TESTSRC="."
-fi
-if [ "${TESTCLASSES}" = "" ] ; then
-  TESTCLASSES="."
-fi
-if [ "${TESTJAVA}" = "" ] ; then
-  echo "TESTJAVA not set.  Test cannot execute."
-  echo "FAILED!!!"
-  exit 1
-fi
-
-# set platform-dependent variables
-OS=`uname -s`
-case "$OS" in
-  SunOS | Linux | Darwin | AIX )
-    PS=":"    ;;
-  Windows* | CYGWIN* )
-    PS=";"    ;;
-  * )
-    echo "Unrecognized system!"
-    exit 1    ;;
-esac
-
-# the test code
-
-echo "Using the classpath .${PS}${TESTCLASSES}"
-${TESTJAVA}/bin/serialver -classpath ".${PS}${TESTCLASSES}" 'serialver.Test.Test1.Test2'
-
-exit $?
--- a/jdk/test/java/io/Serializable/subclass/Allow.policy	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/io/Serializable/subclass/Allow.policy	Wed Jul 05 23:32:48 2017 +0200
@@ -2,7 +2,6 @@
 	// "standard" properies that can be read by anyone
 	permission java.io.FilePermission "-","read,write,execute";
 	permission java.io.SerializablePermission "enableSubstitution";
-	permission java.io.SerializablePermission "enableSubclassImplementation";
 
 	// Needed to get access to private writeObjectMethod and
         // to be able to call it.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/io/Serializable/subclass/SubclassTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,162 @@
+/*
+ * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4100915
+ * @summary Verify that [write/read]ObjectOverride methods get called.
+ *          Test verifies that ALL methods to write an object can
+ *          be overridden. However, the testing for reading an object
+ *          is incomplete. Only test that readObjectOverride is called.
+ *          An entire protocol would need to be implemented and written
+ *          out before being able to test the input side of the API.
+ *
+ *          Also, would be appropriate that this program verify
+ *          that if SerializablePermission "enableSubclassImplementation"
+ *          is not in the security policy and security is enabled, that
+ *          a security exception is thrown when constructing the
+ *          ObjectOutputStream subclass.
+ *
+ *
+ * @compile AbstractObjectInputStream.java AbstractObjectOutputStream.java
+ * @compile XObjectInputStream.java XObjectOutputStream.java
+ * @compile SubclassTest.java
+ * @run main SubclassTest
+ * @run main/othervm/policy=Allow.policy SubclassTest -expectSecurityException
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectStreamField;
+import java.io.Serializable;
+
+/**
+ * Test if customized readObject and writeObject are called.
+ */
+class B implements Serializable {
+    public int publicIntField;
+    public static int numWriteObjectCalled = 0;
+    B(int v) {
+        publicIntField = v;
+    }
+    private void writeObject(ObjectOutputStream os) throws IOException {
+        numWriteObjectCalled++;
+        os.defaultWriteObject();
+    }
+
+    private void readObject(ObjectInputStream is)
+        throws IOException, ClassNotFoundException
+    {
+        is.defaultReadObject();
+    }
+
+};
+
+/**
+ * Test PutFields interface.
+ */
+
+class C implements Serializable {
+    public int xx1;
+    public int xx2;
+    static final ObjectStreamField[] serialPersistentFields = {
+        new ObjectStreamField("x1", Integer.TYPE),
+        new ObjectStreamField("x2", Integer.TYPE),
+        new ObjectStreamField("x3", Integer.TYPE),
+        new ObjectStreamField("x4", Integer.TYPE)
+    };
+    C() {
+        xx1 = 300;
+        xx2 = 400;
+    }
+
+    private void writeObject(ObjectOutputStream os) throws IOException {
+        ObjectOutputStream.PutField putFields = os.putFields();
+        putFields.put("x1", xx1);
+        putFields.put("x2", xx2);
+        putFields.put("x3", xx1 * 2);
+        putFields.put("x4", xx2 * 2);
+        os.writeFields();
+    }
+
+};
+
+
+class A implements Serializable {
+    public int  publicIntField;
+    public long publicLongField;
+    public B    publicBField;
+    public B[]  publicBArray = { new B(4), new B(6)};
+    public C    publicCField;
+
+    public A() {
+        publicIntField = 3;
+        publicLongField = 10L;
+        publicBField = new B(5);
+        publicCField = new C();
+    }
+};
+
+public class SubclassTest {
+    public static void main(String argv[])
+        throws IOException, ClassNotFoundException
+    {
+        boolean expectSecurityException = false;
+
+        if (argv.length > 0 &&
+            argv[0].compareTo("-expectSecurityException") == 0)
+            expectSecurityException = true;
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream(20);
+        XObjectOutputStream os = null;
+        try {
+            os = new XObjectOutputStream(baos);
+            if (expectSecurityException)
+                throw new Error("Assertion failure. " +
+                                "Expected a security exception on previous line.");
+        } catch (SecurityException e) {
+            if (expectSecurityException) {
+                System.err.println("Caught expected security exception.");
+                return;
+            }
+            throw e;
+        }
+        os.writeObject(new A());
+        os.close();
+        if (B.numWriteObjectCalled != 3)
+            throw new Error("Expected B.writeObject() to be called 3 times;" +
+                            " observed only " + B.numWriteObjectCalled + " times");
+
+        XObjectInputStream is =
+            new XObjectInputStream(new ByteArrayInputStream(baos.toByteArray()));
+        try {
+            A a = (A)is.readObject();
+            throw new Error("Expected readObjectOverride() to be called and throw IOException(not implemented)");
+        } catch (IOException e) {
+        }
+        is.close();
+    }
+};
--- a/jdk/test/java/io/Serializable/subclass/Test.java	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,152 +0,0 @@
-/*
- * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 4100915
- * @summary Verify that [write/read]ObjectOverride methods get called.
- *          Test verifies that ALL methods to write an object can
- *          be overridden. Howver, the testing for reading an object
- *          is incomplete. Only test that readObjectOverride is called.
- *          An entire protocol would need to be implemented and written
- *          out before being able to test the input side of the API.
- *
- *          Also, would be appropriate that this program verify
- *          that if SerializablePermission "enableSubclassImplamentation"
- *          is not in the security policy and security is enabled, that
- *          a security excepiton is thrown when constructing the
- *          ObjectOutputStream subclass.
- *
- *
- * @compile AbstractObjectInputStream.java AbstractObjectOutputStream.java XObjectInputStream.java XObjectOutputStream.java Test.java
- * @run main  Test
- */
-
-import java.io.*;
-
-/**
- * Test if customized readObject and writeObject are called.
- */
-class B implements Serializable {
-    public int publicIntField;
-    public static int numWriteObjectCalled = 0;
-    B(int v) {
-        publicIntField = v;
-    }
-    private void writeObject(ObjectOutputStream os) throws IOException {
-        numWriteObjectCalled++;
-        os.defaultWriteObject();
-    }
-
-    private void readObject(ObjectInputStream is)
-        throws IOException, ClassNotFoundException
-    {
-        is.defaultReadObject();
-    }
-
-};
-
-/**
- * Test PutFields interface.
- */
-
-class C implements Serializable {
-    public int xx1;
-    public int xx2;
-    static final ObjectStreamField[] serialPersistentFields = {
-        new ObjectStreamField("x1", Integer.TYPE),
-        new ObjectStreamField("x2", Integer.TYPE),
-        new ObjectStreamField("x3", Integer.TYPE),
-        new ObjectStreamField("x4", Integer.TYPE)
-    };
-    C() {
-        xx1 = 300;
-        xx2 = 400;
-    }
-
-    private void writeObject(ObjectOutputStream os) throws IOException {
-        ObjectOutputStream.PutField putFields = os.putFields();
-        putFields.put("x1", xx1);
-        putFields.put("x2", xx2);
-        putFields.put("x3", xx1 * 2);
-        putFields.put("x4", xx2 * 2);
-        os.writeFields();
-    }
-
-};
-
-
-class A implements Serializable {
-    public int  publicIntField;
-    public long publicLongField;
-    public B    publicBField;
-    public B[]  publicBArray = { new B(4), new B(6)};
-    public C    publicCField;
-
-    public A() {
-        publicIntField = 3;
-        publicLongField = 10L;
-        publicBField = new B(5);
-        publicCField = new C();
-    }
-};
-
-public class Test {
-    public static void main(String argv[])
-        throws IOException, ClassNotFoundException
-    {
-        boolean expectSecurityException = false;
-
-        if (argv.length > 0 &&
-            argv[0].compareTo("-expectSecurityException") == 0)
-            expectSecurityException = true;
-
-        ByteArrayOutputStream baos = new ByteArrayOutputStream(20);
-        XObjectOutputStream os = null;
-        try {
-            os = new XObjectOutputStream(baos);
-            if (expectSecurityException)
-                throw new Error("Assertion failure. " +
-                                "Expected a security exception on previous line.");
-        } catch (SecurityException e) {
-            if (expectSecurityException)
-                return;
-            else
-                throw e;
-        }
-        os.writeObject(new A());
-        os.close();
-        if (B.numWriteObjectCalled != 3)
-            throw new Error("Expected B.writeObject() to be called 3 times;" +
-                            " observed only " + B.numWriteObjectCalled + " times");
-
-        XObjectInputStream is =
-            new XObjectInputStream(new ByteArrayInputStream(baos.toByteArray()));
-        try {
-            A a = (A)is.readObject();
-            throw new Error("Expected readObjectOverride() to be called and throw IOException(not implemented)");
-        } catch (IOException e) {
-        }
-        is.close();
-    }
-};
--- a/jdk/test/java/io/Serializable/subclass/run.sh	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-#
-# Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-#
-# @bug 4100915
-mkdir classes
-javac -d classes *.java
-java ${TESTVMOPTS} -classpath classes -Djava.policy=Allow.policy Test 
-# ENABLE next line when new method for invoking a main with a SecureClassLoader is known
-#java -classpath classes -Djava.policy=NotAllow.policy Test -expectSecurityException
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/io/Serializable/superclassDataLoss/SuperclassDataLossTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,121 @@
+/*
+ * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4325590
+ * @library /lib/testlibrary
+ * @build JarUtils A B
+ * @run main SuperclassDataLossTest
+ * @summary Verify that superclass data is not lost when incoming superclass
+ *          descriptor is matched with local class that is not a superclass of
+ *          the deserialized instance's class.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectStreamClass;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.net.MalformedURLException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+
+class MixedSuperclassStream extends ObjectInputStream {
+    private boolean ldr12A;
+    private URLClassLoader ldr1;
+    private URLClassLoader ldr2;
+
+    MixedSuperclassStream(InputStream in, URLClassLoader ldr1,
+            URLClassLoader ldr2, boolean ldr1First) throws IOException {
+        super(in);
+        this.ldr1 = ldr1;
+        this.ldr2 = ldr2;
+        this.ldr12A = ldr12A;
+    }
+
+    protected Class resolveClass(ObjectStreamClass desc)
+        throws IOException, ClassNotFoundException
+    {
+        // resolve A's classdesc to class != B's superclass
+        String name = desc.getName();
+        if (ldr12A) {
+            if (name.equals("A")) {
+                return Class.forName(name, true, ldr1);
+            } else if (name.equals("B")) {
+                return Class.forName(name, true, ldr2);
+            }
+        } else {
+            if (name.equals("B")) {
+                return Class.forName(name, true, ldr1);
+            } else if (name.equals("A")) {
+                return Class.forName(name, true, ldr2);
+            }
+        }
+        return super.resolveClass(desc);
+    }
+}
+
+public class SuperclassDataLossTest {
+
+    public static void main(String[] args) throws Exception {
+        try (URLClassLoader ldr1 = new URLClassLoader(new URL[] { new URL("file:cb1.jar") });
+             URLClassLoader ldr2 = new URLClassLoader(new URL[] { new URL("file:cb2.jar") })) {
+            setup();
+
+            Runnable a = (Runnable) Class.forName("B", true, ldr1).newInstance();
+            a.run();
+
+            ByteArrayOutputStream bout = new ByteArrayOutputStream();
+            ObjectOutputStream oout = new ObjectOutputStream(bout);
+            oout.writeObject(a);
+            oout.close();
+
+            test(bout, ldr1, ldr2, true);
+            test(bout, ldr1, ldr2, false);
+        }
+    }
+
+    private static void test(ByteArrayOutputStream bout, URLClassLoader ldr1,
+                             URLClassLoader ldr2, boolean ldr12A) throws Exception {
+        ByteArrayInputStream bin =
+            new ByteArrayInputStream(bout.toByteArray());
+        ObjectInputStream oin = new MixedSuperclassStream(bin, ldr1, ldr2, ldr12A);
+        Runnable a = (Runnable) oin.readObject();
+        a.run();
+    }
+
+    private static void setup() throws Exception {
+        Path classes = Paths.get(System.getProperty("test.classes", ""));
+        JarUtils.createJarFile(Paths.get("cb1.jar"), classes,
+                classes.resolve("A.class"), classes.resolve("B.class"));
+        Files.copy(Paths.get("cb1.jar"), Paths.get("cb2.jar"),
+                   StandardCopyOption.REPLACE_EXISTING);
+    }
+}
--- a/jdk/test/java/io/Serializable/superclassDataLoss/Test.java	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @bug 4325590
- * @summary Verify that superclass data is not lost when incoming superclass
- *          descriptor is matched with local class that is not a superclass of
- *          the deserialized instance's class.
- */
-
-import java.io.*;
-import java.net.*;
-
-class MixedSuperclassStream extends ObjectInputStream {
-    MixedSuperclassStream(InputStream in) throws IOException { super(in); }
-
-    protected Class resolveClass(ObjectStreamClass desc)
-        throws IOException, ClassNotFoundException
-    {
-        // resolve A's classdesc to class != B's superclass
-        String name = desc.getName();
-        if (name.equals("A")) {
-            return Class.forName(name, true, Test.ldr1);
-        } else if (name.equals("B")) {
-            return Class.forName(name, true, Test.ldr2);
-        } else {
-            return super.resolveClass(desc);
-        }
-    }
-}
-
-public class Test {
-
-    static URLClassLoader ldr1, ldr2;
-    static {
-        try {
-            ldr1 = new URLClassLoader(new URL[] { new URL("file:cb1.jar") });
-            ldr2 = new URLClassLoader(new URL[] { new URL("file:cb2.jar") });
-        } catch (MalformedURLException ex) {
-            throw new Error();
-        }
-    }
-
-    public static void main(String[] args) throws Exception {
-        Runnable a = (Runnable) Class.forName("B", true, ldr1).newInstance();
-        a.run();
-
-        ByteArrayOutputStream bout = new ByteArrayOutputStream();
-        ObjectOutputStream oout = new ObjectOutputStream(bout);
-        oout.writeObject(a);
-        oout.close();
-
-        ByteArrayInputStream bin =
-            new ByteArrayInputStream(bout.toByteArray());
-        ObjectInputStream oin = new MixedSuperclassStream(bin);
-        a = (Runnable) oin.readObject();
-        a.run();
-    }
-}
--- a/jdk/test/java/io/Serializable/superclassDataLoss/run.sh	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-#
-# Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 4325590
-# @summary Verify that superclass data is not lost when incoming superclass
-#          descriptor is matched with local class that is not a superclass of
-#          the deserialized instance's class.
-
-if [ "${TESTJAVA}" = "" ]
-then
-    echo "TESTJAVA not set.  Test cannot execute.  Failed."
-exit 1
-fi
-
-if [ "${COMPILEJAVA}" = "" ] ; then
-    COMPILEJAVA="${TESTJAVA}"
-fi
-
-if [ "${TESTSRC}" = "" ]
-then
-    TESTSRC="."
-fi
-
-set -ex
-
-${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . \
-    ${TESTSRC}/A.java ${TESTSRC}/B.java
-${COMPILEJAVA}/bin/jar ${TESTTOOLVMOPTS} cf cb1.jar A.class B.class
-cp cb1.jar cb2.jar
-rm -f A.class B.class
-
-${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . \
-    ${TESTSRC}/Test.java
-${TESTJAVA}/bin/java ${TESTVMOPTS} Test
-rm -f *.class *.jar
--- a/jdk/test/java/io/Serializable/unnamedPackageSwitch/Test.java	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @bug 4348213
- * @summary Verify that deserialization allows an incoming class descriptor
- *          representing a class in the unnamed package to be resolved to a
- *          local class with the same name in a named package, and vice-versa.
- */
-
-import java.io.*;
-
-class A implements Serializable {
-    private static final long serialVersionUID = 0L;
-}
-
-class TestObjectInputStream extends ObjectInputStream {
-    TestObjectInputStream(InputStream in) throws IOException { super(in); }
-    protected Class resolveClass(ObjectStreamClass desc)
-        throws IOException, ClassNotFoundException
-    {
-        String name = desc.getName();
-        if (name.equals("A")) {
-            return pkg.A.class;
-        } else if (name.equals("pkg.A")) {
-            return A.class;
-        } else {
-            return super.resolveClass(desc);
-        }
-    }
-}
-
-public class Test {
-    public static void main(String[] args) throws Exception {
-        ByteArrayOutputStream bout = new ByteArrayOutputStream();
-        ObjectOutputStream oout = new ObjectOutputStream(bout);
-        oout.writeObject(new A());
-        oout.writeObject(new pkg.A());
-        oout.close();
-
-        ObjectInputStream oin = new TestObjectInputStream(
-            new ByteArrayInputStream(bout.toByteArray()));
-        oin.readObject();
-        oin.readObject();
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/io/Serializable/unnamedPackageSwitch/UnnamedPackageSwitchTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4348213
+ * @build UnnamedPackageSwitchTest pkg.A
+ * @run main UnnamedPackageSwitchTest
+ * @summary Verify that deserialization allows an incoming class descriptor
+ *          representing a class in the unnamed package to be resolved to a
+ *          local class with the same name in a named package, and vice-versa.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectStreamClass;
+import java.io.Serializable;
+
+class A implements Serializable {
+    private static final long serialVersionUID = 0L;
+}
+
+class TestObjectInputStream extends ObjectInputStream {
+    TestObjectInputStream(InputStream in) throws IOException { super(in); }
+    protected Class resolveClass(ObjectStreamClass desc)
+        throws IOException, ClassNotFoundException
+    {
+        String name = desc.getName();
+        if (name.equals("A")) {
+            return pkg.A.class;
+        } else if (name.equals("pkg.A")) {
+            return A.class;
+        } else {
+            return super.resolveClass(desc);
+        }
+    }
+}
+
+public class UnnamedPackageSwitchTest {
+    public static void main(String[] args) throws Exception {
+        ByteArrayOutputStream bout = new ByteArrayOutputStream();
+        ObjectOutputStream oout = new ObjectOutputStream(bout);
+        oout.writeObject(new A());
+        oout.writeObject(new pkg.A());
+        oout.close();
+
+        ObjectInputStream oin = new TestObjectInputStream(
+            new ByteArrayInputStream(bout.toByteArray()));
+        oin.readObject();
+        oin.readObject();
+    }
+}
--- a/jdk/test/java/io/Serializable/unnamedPackageSwitch/run.sh	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-#
-# Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 4348213
-# @summary Verify that deserialization allows an incoming class descriptor
-#          representing a class in the unnamed package to be resolved to a
-#          local class with the same name in a named package, and vice-versa.
-
-if [ "${TESTJAVA}" = "" ]
-then
-    echo "TESTJAVA not set.  Test cannot execute.  Failed."
-exit 1
-fi
-
-if [ "${COMPILEJAVA}" = "" ] ; then
-    COMPILEJAVA="${TESTJAVA}"
-fi
-
-if [ "${TESTSRC}" = "" ]
-then
-    TESTSRC="."
-fi
-
-set -ex
-
-${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . \
-    ${TESTSRC}/A.java ${TESTSRC}/Test.java
-${TESTJAVA}/bin/java ${TESTVMOPTS} Test
--- a/jdk/test/java/lang/Class/forName/modules/TestDriver.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/lang/Class/forName/modules/TestDriver.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,7 +29,7 @@
 import java.util.Arrays;
 import java.util.stream.Stream;
 
-import jdk.testlibrary.FileUtils;
+import jdk.test.lib.util.FileUtils;
 import static jdk.testlibrary.ProcessTools.*;
 
 import org.testng.annotations.BeforeClass;
@@ -40,9 +40,9 @@
  * @test
  * @bug 8087335
  * @summary Tests for Class.forName(Module,String)
- * @library /lib/testlibrary
+ * @library /lib/testlibrary /test/lib
  * @modules jdk.compiler
- * @build TestDriver CompilerUtils jdk.testlibrary.ProcessTools jdk.testlibrary.FileUtils TestMain TestLayer
+ * @build TestDriver CompilerUtils jdk.testlibrary.ProcessTools TestMain TestLayer
  * @run testng TestDriver
  */
 
--- a/jdk/test/java/lang/ClassLoader/Assert.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/lang/ClassLoader/Assert.java	Wed Jul 05 23:32:48 2017 +0200
@@ -28,7 +28,7 @@
  * @run main/othervm Assert
  * @summary Test the assertion facility
  * @author Mike McCloskey
- * @key randomness intermittent
+ * @key randomness
  */
 
 import package1.*;
--- a/jdk/test/java/lang/Double/ParseHexFloatingPoint.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/lang/Double/ParseHexFloatingPoint.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,8 +23,7 @@
 
 /*
  * @test
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run main ParseHexFloatingPoint
  * @bug 4826774 8078672
  * @summary Numerical tests for hexadecimal inputs to parse{Double, Float} (use -Dseed=X to set PRNG seed)
@@ -32,7 +31,7 @@
  * @key randomness
  */
 
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class ParseHexFloatingPoint {
     private ParseHexFloatingPoint(){}
--- a/jdk/test/java/lang/Integer/BitTwiddle.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/lang/Integer/BitTwiddle.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,8 +23,7 @@
 
 /*
  * @test
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run main BitTwiddle
  * @bug     4495754 8078672
  * @summary Basic test for int bit twiddling (use -Dseed=X to set PRNG seed)
@@ -33,7 +32,7 @@
  */
 
 import java.util.Random;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 import static java.lang.Integer.*;
 
 public class BitTwiddle {
--- a/jdk/test/java/lang/Long/BitTwiddle.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/lang/Long/BitTwiddle.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,8 +23,7 @@
 
 /*
  * @test
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run main BitTwiddle
  * @bug     4495754 8078672
  * @summary Basic test for long bit twiddling (use -Dseed=X to set PRNG seed)
@@ -33,7 +32,7 @@
  */
 
 import java.util.Random;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 import static java.lang.Long.*;
 
 public class BitTwiddle {
--- a/jdk/test/java/lang/Math/CubeRootTests.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/lang/Math/CubeRootTests.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,8 +23,7 @@
 
 /*
  * @test
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.RandomFactory
+ * @library /test/lib
  * @run main CubeRootTests
  * @bug 4347132 4939441 8078672
  * @summary Tests for {Math, StrictMath}.cbrt (use -Dseed=X to set PRNG seed)
@@ -32,7 +31,7 @@
  * @key randomness
  */
 
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class CubeRootTests {
     private CubeRootTests(){}
--- a/jdk/test/java/lang/Math/HypotTests.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/lang/Math/HypotTests.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,8 +23,7 @@
 
 /*
  * @test
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.RandomFactory
+ * @library /test/lib
  * @run main HypotTests
  * @bug 4851638 4939441 8078672
  * @summary Tests for {Math, StrictMath}.hypot (use -Dseed=X to set PRNG seed)
@@ -32,7 +31,7 @@
  * @key randomness
  */
 
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class HypotTests {
     private HypotTests(){}
--- a/jdk/test/java/lang/Math/IeeeRecommendedTests.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/lang/Math/IeeeRecommendedTests.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,8 +23,7 @@
 
 /*
  * @test
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.RandomFactory
+ * @library /test/lib
  * @run main IeeeRecommendedTests
  * @bug 4860891 4826732 4780454 4939441 4826652 8078672
  * @summary Tests for IEEE 754[R] recommended functions and similar methods (use -Dseed=X to set PRNG seed)
@@ -32,7 +31,7 @@
  * @key randomness
  */
 
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class IeeeRecommendedTests {
     private IeeeRecommendedTests(){}
--- a/jdk/test/java/lang/Math/Log1pTests.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/lang/Math/Log1pTests.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,8 +23,7 @@
 
 /*
  * @test
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.RandomFactory
+ * @library /test/lib
  * @run main Log1pTests
  * @bug 4851638 4939441 8078672
  * @summary Tests for {Math, StrictMath}.log1p (use -Dseed=X to set PRNG seed)
@@ -32,7 +31,7 @@
  * @key randomness
  */
 
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class Log1pTests {
     private Log1pTests(){}
--- a/jdk/test/java/lang/Math/MultiplicationTests.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/lang/Math/MultiplicationTests.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,8 +23,7 @@
 
 /*
  * @test
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run main MultiplicationTests
  * @bug 5100935
  * @summary Tests for multiplication methods (use -Dseed=X to set PRNG seed)
@@ -32,7 +31,7 @@
  */
 
 import java.math.BigInteger;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class MultiplicationTests {
     private MultiplicationTests(){}
--- a/jdk/test/java/lang/StackWalker/StackWalkTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/lang/StackWalker/StackWalkTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,14 +31,13 @@
 import java.util.Set;
 import java.util.TreeSet;
 
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 /**
  * @test
  * @bug 8140450
  * @summary Stack Walk Test (use -Dseed=X to set PRNG seed)
- * @library /lib/testlibrary
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @compile StackRecorderUtil.java
  * @run main/othervm StackWalkTest
  * @run main/othervm/java.security.policy=stackwalktest.policy StackWalkTest
--- a/jdk/test/java/lang/StrictMath/CubeRootTests.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/lang/StrictMath/CubeRootTests.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,8 +25,7 @@
  * @test
  * @bug 4347132 8136799
  * @key randomness
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.RandomFactory
+ * @library /test/lib
  * @build Tests
  * @build FdlibmTranslit
  * @build CubeRootTests
@@ -35,7 +34,7 @@
  * @author Joseph D. Darcy
  */
 
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 /**
  * The tests in ../Math/CubeRootTests.java test properties that should
--- a/jdk/test/java/lang/StrictMath/ExpTests.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/lang/StrictMath/ExpTests.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,8 +25,7 @@
  * @test
  * @bug 8139688
  * @key randomness
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.RandomFactory
+ * @library /test/lib
  * @build Tests
  * @build FdlibmTranslit
  * @build ExpTests
@@ -34,7 +33,7 @@
  * @summary Tests specifically for StrictMath.exp
  */
 
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 /**
  * The role of this test is to verify that the FDLIBM exp algorithm is
--- a/jdk/test/java/lang/StrictMath/HypotTests.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/lang/StrictMath/HypotTests.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,8 +26,7 @@
  * @bug 4851638
  * @key randomness
  * @summary Tests for StrictMath.hypot
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.RandomFactory
+ * @library /test/lib
  * @build Tests
  * @build FdlibmTranslit
  * @build HypotTests
@@ -35,7 +34,7 @@
  * @author Joseph D. Darcy
  */
 
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 /**
  * The tests in ../Math/HypotTests.java test properties that should
--- a/jdk/test/java/lang/String/LiteralReplace.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/lang/String/LiteralReplace.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,8 +23,7 @@
 
 /* @test
  * @bug 8058779 8054307
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.RandomFactory
+ * @library /test/lib
  * @run testng LiteralReplace
  * @summary Basic tests of String.replace(CharSequence, CharSequence)
  * @key randomness
@@ -37,7 +36,7 @@
 import java.util.regex.Pattern;
 import java.util.Random;
 
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 import org.testng.annotations.Test;
 import org.testng.annotations.DataProvider;
--- a/jdk/test/java/lang/invoke/ExplicitCastArgumentsTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/lang/invoke/ExplicitCastArgumentsTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -21,7 +21,9 @@
  * questions.
  */
 
-import com.oracle.testlibrary.jsr292.Helper;
+import sun.invoke.util.Wrapper;
+import test.java.lang.invoke.lib.Helper;
+
 import java.io.File;
 import java.io.Serializable;
 import java.lang.invoke.MethodHandle;
@@ -31,13 +33,12 @@
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Random;
-import sun.invoke.util.Wrapper;
 
 /*
  * @test
  * @bug 8060483 8066746
  * @key randomness
- * @library /lib/testlibrary /lib/testlibrary/jsr292
+ * @library /lib/testlibrary /java/lang/invoke/common
  * @modules java.base/sun.invoke.util
  * @summary unit tests for MethodHandles.explicitCastArguments()
  * @run main ExplicitCastArgumentsTest
@@ -249,21 +250,27 @@
             for (Class parent : parents) {
                 for (int j = 0; j < children.length; j++) {
                     // Child type to parent type non-null conversion, shoud succeed
-                    testConversion(mode, children[j], parent, childInst[j], childInst[j], false, null);
+                    testConversion(mode, children[j], parent, childInst[j],
+                            childInst[j], false, null);
                     // Child type to parent type null conversion, shoud succeed
-                    testConversion(mode, children[j], parent, null, null, false, null);
+                    testConversion(mode, children[j], parent, null,
+                            null, false, null);
                     // Parent type to child type non-null conversion with parent
                     // type instance, should fail
-                    testConversion(mode, parent, children[j], testSuperObj, null, true, ClassCastException.class);
+                    testConversion(mode, parent, children[j], testSuperObj,
+                            null, true, ClassCastException.class);
                     // Parent type to child type non-null conversion with child
                     // type instance, should succeed
-                    testConversion(mode, parent, children[j], childInst[j], childInst[j], false, null);
+                    testConversion(mode, parent, children[j], childInst[j],
+                            childInst[j], false, null);
                     // Parent type to child type null conversion, should succeed
-                    testConversion(mode, parent, children[j], null, null, false, null);
+                    testConversion(mode, parent, children[j], null,
+                            null, false, null);
                 }
                 // Parent type to child type non-null conversion with sibling
                 // type instance, should fail
-                testConversion(mode, parent, testSubClass1, testObj02, null, true, ClassCastException.class);
+                testConversion(mode, parent, testSubClass1, testObj02,
+                        null, true, ClassCastException.class);
             }
             // Sibling type non-null conversion, should fail
             testConversion(mode, testSubClass1,
--- a/jdk/test/java/lang/invoke/LFCaching/LFGarbageCollectedTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/lang/invoke/LFCaching/LFGarbageCollectedTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,11 +28,15 @@
  * @ignore 8078602
  * @summary Test verifies that lambda forms are garbage collected
  * @author kshefov
- * @library /lib/testlibrary/jsr292 /lib/testlibrary
+ * @library /lib/testlibrary /java/lang/invoke/common
  * @build TestMethods
  * @build LambdaFormTestCase
  * @build LFGarbageCollectedTest
- * @run main/othervm -Xmx64m -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+HeapDumpOnOutOfMemoryError -DHEAP_DUMP=false LFGarbageCollectedTest
+ * @run main/othervm -Xmx64m
+ *                   -XX:SoftRefLRUPolicyMSPerMB=0
+ *                   -XX:+HeapDumpOnOutOfMemoryError
+ *                   -DHEAP_DUMP=false
+ *                   LFGarbageCollectedTest
  */
 
 import java.lang.invoke.MethodHandle;
--- a/jdk/test/java/lang/invoke/LFCaching/LFMultiThreadCachingTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/lang/invoke/LFCaching/LFMultiThreadCachingTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -27,7 +27,7 @@
  * @key randomness
  * @summary Test verifies that lambda forms are cached when run with multiple threads
  * @author kshefov
- * @library /lib/testlibrary/jsr292 /lib/testlibrary
+ * @library /lib/testlibrary /java/lang/invoke/common
  * @modules java.base/java.lang.invoke:open
  *          java.base/java.lang.ref:open
  *          java.management
@@ -38,16 +38,16 @@
  * @run main/othervm LFMultiThreadCachingTest
  */
 
+import test.java.lang.invoke.lib.CodeCacheOverflowProcessor;
+
 import java.lang.invoke.MethodHandle;
 import java.util.Collections;
 import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.concurrent.BrokenBarrierException;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.CyclicBarrier;
-import com.oracle.testlibrary.jsr292.CodeCacheOverflowProcessor;
 
 /**
  * Multiple threaded lambda forms caching test class.
@@ -57,13 +57,16 @@
     private static final TestMethods.Kind[] KINDS;
 
     static {
-        EnumSet<TestMethods.Kind> set = EnumSet.complementOf(EnumSet.of(TestMethods.Kind.EXCEPT));
+        EnumSet<TestMethods.Kind> set
+                = EnumSet.complementOf(EnumSet.of(TestMethods.Kind.EXCEPT));
         KINDS = set.toArray(new TestMethods.Kind[set.size()]);
         if (KINDS.length < 2) {
-            throw new Error("TESTBUG: KINDS.length[" + KINDS.length + "] should be at least 2");
+            throw new Error("TESTBUG: KINDS.length[" + KINDS.length
+                    + "] should be at least 2");
         }
     }
-    private static final int CORES = Math.max(KINDS.length, Runtime.getRuntime().availableProcessors());
+    private static final int CORES
+            = Math.max(KINDS.length, Runtime.getRuntime().availableProcessors());
 
     /**
      * Constructor a for multiple threaded lambda forms caching test case.
@@ -144,6 +147,7 @@
      * @param args Accepts no arguments.
      */
     public static void main(String[] args) {
-        LambdaFormTestCase.runTests(LFMultiThreadCachingTest::new, EnumSet.allOf(TestMethods.class));
+        LambdaFormTestCase.runTests(LFMultiThreadCachingTest::new,
+                                    EnumSet.allOf(TestMethods.class));
     }
 }
--- a/jdk/test/java/lang/invoke/LFCaching/LFSingleThreadCachingTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/lang/invoke/LFCaching/LFSingleThreadCachingTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -27,7 +27,7 @@
  * @key randomness
  * @summary Test verifies that lambda forms are cached when run with single thread
  * @author kshefov
- * @library /lib/testlibrary/jsr292 /lib/testlibrary
+ * @library /lib/testlibrary /java/lang/invoke/common
  * @modules java.base/java.lang.ref:open
  *          java.base/java.lang.invoke:open
  *          java.management
@@ -77,6 +77,7 @@
      * @param args Accepts no arguments.
      */
     public static void main(String[] args) {
-        LambdaFormTestCase.runTests(LFSingleThreadCachingTest::new, EnumSet.allOf(TestMethods.class));
+        LambdaFormTestCase.runTests(LFSingleThreadCachingTest::new,
+                                    EnumSet.allOf(TestMethods.class));
     }
 }
--- a/jdk/test/java/lang/invoke/LFCaching/LambdaFormTestCase.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/lang/invoke/LFCaching/LambdaFormTestCase.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -21,8 +21,11 @@
  * questions.
  */
 
-import com.oracle.testlibrary.jsr292.Helper;
-import com.oracle.testlibrary.jsr292.CodeCacheOverflowProcessor;
+import jdk.testlibrary.TimeLimitedRunner;
+import jdk.testlibrary.Utils;
+import test.java.lang.invoke.lib.CodeCacheOverflowProcessor;
+import test.java.lang.invoke.lib.Helper;
+
 import java.lang.invoke.MethodHandle;
 import java.lang.management.GarbageCollectorMXBean;
 import java.lang.management.ManagementFactory;
@@ -32,8 +35,6 @@
 import java.util.Collection;
 import java.util.List;
 import java.util.function.Function;
-import jdk.testlibrary.Utils;
-import jdk.testlibrary.TimeLimitedRunner;
 
 /**
  * Lambda forms caching test case class. Contains all necessary test routines to
@@ -44,7 +45,8 @@
  */
 public abstract class LambdaFormTestCase {
 
-    private static final long TIMEOUT = Helper.IS_THOROUGH ? 0L : (long) (Utils.adjustTimeout(Utils.DEFAULT_TEST_TIMEOUT) * 0.9);
+    private static final long TIMEOUT = Helper.IS_THOROUGH ?
+            0L : (long) (Utils.adjustTimeout(Utils.DEFAULT_TEST_TIMEOUT) * 0.9);
 
     /**
      * Reflection link to {@code j.l.i.MethodHandle.internalForm} method. It is
@@ -92,7 +94,8 @@
         long failCounter;
         boolean passed;
 
-        TestRun(Function<TestMethods, LambdaFormTestCase> ctor, Collection<TestMethods> testMethods) {
+        TestRun(Function<TestMethods, LambdaFormTestCase> ctor,
+                Collection<TestMethods> testMethods) {
             this.ctor = ctor;
             this.testMethods = testMethods;
             long testCaseNum = testMethods.size();
@@ -175,10 +178,12 @@
      * object.
      * @param testMethods list of test methods
      */
-    public static void runTests(Function<TestMethods, LambdaFormTestCase> ctor, Collection<TestMethods> testMethods) {
+    public static void runTests(Function<TestMethods, LambdaFormTestCase> ctor,
+                                Collection<TestMethods> testMethods) {
         LambdaFormTestCase.TestRun run
                 = new LambdaFormTestCase.TestRun(ctor, testMethods);
-        TimeLimitedRunner runner = new TimeLimitedRunner(TIMEOUT, 4.0d, run::doIteration);
+        TimeLimitedRunner runner
+                = new TimeLimitedRunner(TIMEOUT, 4.0d, run::doIteration);
         try {
             runner.call();
         } catch (Exception ex) {
--- a/jdk/test/java/lang/invoke/LFCaching/TestMethods.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/lang/invoke/LFCaching/TestMethods.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -21,7 +21,8 @@
  * questions.
  */
 
-import com.oracle.testlibrary.jsr292.Helper;
+import test.java.lang.invoke.lib.Helper;
+
 import java.lang.invoke.MethodHandle;
 import java.lang.invoke.MethodHandles;
 import java.lang.invoke.MethodType;
@@ -41,462 +42,472 @@
 public enum TestMethods {
 
     FOLD_ARGUMENTS("foldArguments") {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    // Arity after reducing because of long and double take 2 slots.
-                    int realArity = mtTarget.parameterCount();
-                    int modifierMHArgNum = Helper.RNG.nextInt(realArity + 1);
-                    data.put("modifierMHArgNum", modifierMHArgNum);
-                    Class<?> combinerReturnType;
-                    if (realArity == 0) {
-                        combinerReturnType = void.class;
-                    } else {
-                        combinerReturnType = Helper.RNG.nextBoolean() ? void.class : mtTarget.parameterType(0);
-                    }
-                    data.put("combinerReturnType", combinerReturnType);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            // Arity after reducing because of long and double take 2 slots.
+            int realArity = mtTarget.parameterCount();
+            int modifierMHArgNum = Helper.RNG.nextInt(realArity + 1);
+            data.put("modifierMHArgNum", modifierMHArgNum);
+            Class<?> combinerReturnType;
+            if (realArity == 0) {
+                combinerReturnType = void.class;
+            } else {
+                combinerReturnType = Helper.RNG.nextBoolean() ?
+                        void.class : mtTarget.parameterType(0);
+            }
+            data.put("combinerReturnType", combinerReturnType);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) throws NoSuchMethodException, IllegalAccessException {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    Class<?> combinerReturnType = (Class) data.get("combinerReturnType");
-                    int modifierMHArgNum = (int) data.get("modifierMHArgNum");
-                    MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
-                            mtTarget.parameterList(), kind);
-                    Class<?> rType = mtTarget.returnType();
-                    int combListStart = (combinerReturnType == void.class) ? 0 : 1;
-                    if (modifierMHArgNum < combListStart) {
-                        modifierMHArgNum = combListStart;
-                    }
-                    MethodHandle combiner = TestMethods.methodHandleGenerator(combinerReturnType,
-                            mtTarget.parameterList().subList(combListStart,
-                                    modifierMHArgNum), kind);
-                    return MethodHandles.foldArguments(target, combiner);
-                }
-            },
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind)
+                throws NoSuchMethodException, IllegalAccessException {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            Class<?> combinerReturnType = (Class) data.get("combinerReturnType");
+            int modifierMHArgNum = (int) data.get("modifierMHArgNum");
+            MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
+                    mtTarget.parameterList(), kind);
+            Class<?> rType = mtTarget.returnType();
+            int combListStart = (combinerReturnType == void.class) ? 0 : 1;
+            if (modifierMHArgNum < combListStart) {
+                modifierMHArgNum = combListStart;
+            }
+            MethodHandle combiner = TestMethods.methodHandleGenerator(combinerReturnType,
+                    mtTarget.parameterList().subList(combListStart,
+                            modifierMHArgNum), kind);
+            return MethodHandles.foldArguments(target, combiner);
+        }
+    },
     DROP_ARGUMENTS("dropArguments") {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    // Arity after reducing because of long and double take 2 slots.
-                    int realArity = mtTarget.parameterCount();
-                    int dropArgsPos = Helper.RNG.nextInt(realArity + 1);
-                    data.put("dropArgsPos", dropArgsPos);
-                    MethodType mtDropArgs = TestMethods.randomMethodTypeGenerator(
-                            Helper.RNG.nextInt(super.maxArity - realArity));
-                    data.put("mtDropArgs", mtDropArgs);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            // Arity after reducing because of long and double take 2 slots.
+            int realArity = mtTarget.parameterCount();
+            int dropArgsPos = Helper.RNG.nextInt(realArity + 1);
+            data.put("dropArgsPos", dropArgsPos);
+            MethodType mtDropArgs = TestMethods.randomMethodTypeGenerator(
+                    Helper.RNG.nextInt(super.maxArity - realArity));
+            data.put("mtDropArgs", mtDropArgs);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) throws NoSuchMethodException, IllegalAccessException {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    MethodType mtDropArgs = (MethodType) data.get("mtDropArgs");
-                    int dropArgsPos = (int) data.get("dropArgsPos");
-                    MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
-                            mtTarget.parameterList(), kind);
-                    int mtTgtSlotsCount = TestMethods.argSlotsCount(mtTarget);
-                    int mtDASlotsCount = TestMethods.argSlotsCount(mtDropArgs);
-                    List<Class<?>> fakeParList;
-                    if (mtTgtSlotsCount + mtDASlotsCount > super.maxArity - 1) {
-                        fakeParList = TestMethods.reduceArgListToSlotsCount(mtDropArgs.parameterList(),
-                                super.maxArity - mtTgtSlotsCount - 1);
-                    } else {
-                        fakeParList = mtDropArgs.parameterList();
-                    }
-                    return MethodHandles.dropArguments(target, dropArgsPos, fakeParList);
-                }
-            },
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind)
+                throws NoSuchMethodException, IllegalAccessException {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            MethodType mtDropArgs = (MethodType) data.get("mtDropArgs");
+            int dropArgsPos = (int) data.get("dropArgsPos");
+            MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
+                    mtTarget.parameterList(), kind);
+            int mtTgtSlotsCount = TestMethods.argSlotsCount(mtTarget);
+            int mtDASlotsCount = TestMethods.argSlotsCount(mtDropArgs);
+            List<Class<?>> fakeParList;
+            if (mtTgtSlotsCount + mtDASlotsCount > super.maxArity - 1) {
+                fakeParList = TestMethods.reduceArgListToSlotsCount(mtDropArgs.parameterList(),
+                        super.maxArity - mtTgtSlotsCount - 1);
+            } else {
+                fakeParList = mtDropArgs.parameterList();
+            }
+            return MethodHandles.dropArguments(target, dropArgsPos, fakeParList);
+        }
+    },
     EXPLICIT_CAST_ARGUMENTS("explicitCastArguments", Helper.MAX_ARITY / 2) {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    // Arity after reducing because of long and double take 2 slots.
-                    int realArity = mtTarget.parameterCount();
-                    MethodType mtExcplCastArgs = TestMethods.randomMethodTypeGenerator(realArity);
-                    if (mtTarget.returnType() == void.class) {
-                        mtExcplCastArgs = MethodType.methodType(void.class,
-                                mtExcplCastArgs.parameterArray());
-                    }
-                    if (mtExcplCastArgs.returnType() == void.class) {
-                        mtExcplCastArgs = MethodType.methodType(mtTarget.returnType(),
-                                mtExcplCastArgs.parameterArray());
-                    }
-                    data.put("mtExcplCastArgs", mtExcplCastArgs);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            // Arity after reducing because of long and double take 2 slots.
+            int realArity = mtTarget.parameterCount();
+            MethodType mtExcplCastArgs = TestMethods.randomMethodTypeGenerator(realArity);
+            if (mtTarget.returnType() == void.class) {
+                mtExcplCastArgs = MethodType.methodType(void.class,
+                        mtExcplCastArgs.parameterArray());
+            }
+            if (mtExcplCastArgs.returnType() == void.class) {
+                mtExcplCastArgs = MethodType.methodType(mtTarget.returnType(),
+                        mtExcplCastArgs.parameterArray());
+            }
+            data.put("mtExcplCastArgs", mtExcplCastArgs);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) throws NoSuchMethodException, IllegalAccessException {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    MethodType mtExcplCastArgs = (MethodType) data.get("mtExcplCastArgs");
-                    MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
-                            mtTarget.parameterList(), kind);
-                    return MethodHandles.explicitCastArguments(target, mtExcplCastArgs);
-                }
-            },
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind)
+                throws NoSuchMethodException, IllegalAccessException {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            MethodType mtExcplCastArgs = (MethodType) data.get("mtExcplCastArgs");
+            MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
+                    mtTarget.parameterList(), kind);
+            return MethodHandles.explicitCastArguments(target, mtExcplCastArgs);
+        }
+    },
     FILTER_ARGUMENTS("filterArguments", Helper.MAX_ARITY / 2) {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    // Arity after reducing because of long and double take 2 slots.
-                    int realArity = mtTarget.parameterCount();
-                    int filterArgsPos = Helper.RNG.nextInt(realArity + 1);
-                    data.put("filterArgsPos", filterArgsPos);
-                    int filtersArgsArrayLength = Helper.RNG.nextInt(realArity + 1 - filterArgsPos);
-                    data.put("filtersArgsArrayLength", filtersArgsArrayLength);
-                    MethodType mtFilter = TestMethods.randomMethodTypeGenerator(filtersArgsArrayLength);
-                    data.put("mtFilter", mtFilter);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            // Arity after reducing because of long and double take 2 slots.
+            int realArity = mtTarget.parameterCount();
+            int filterArgsPos = Helper.RNG.nextInt(realArity + 1);
+            data.put("filterArgsPos", filterArgsPos);
+            int filtersArgsArrayLength = Helper.RNG.nextInt(realArity + 1 - filterArgsPos);
+            data.put("filtersArgsArrayLength", filtersArgsArrayLength);
+            MethodType mtFilter = TestMethods.randomMethodTypeGenerator(filtersArgsArrayLength);
+            data.put("mtFilter", mtFilter);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) throws NoSuchMethodException, IllegalAccessException {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    MethodType mtFilter = (MethodType) data.get("mtFilter");
-                    int filterArgsPos = (int) data.get("filterArgsPos");
-                    int filtersArgsArrayLength = (int) data.get("filtersArgsArrayLength");
-                    MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
-                            mtTarget.parameterList(), kind);
-                    MethodHandle[] filters = new MethodHandle[filtersArgsArrayLength];
-                    for (int i = 0; i < filtersArgsArrayLength; i++) {
-                        filters[i] = TestMethods.filterGenerator(mtFilter.parameterType(i),
-                                mtTarget.parameterType(filterArgsPos + i), kind);
-                    }
-                    return MethodHandles.filterArguments(target, filterArgsPos, filters);
-                }
-            },
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind)
+                throws NoSuchMethodException, IllegalAccessException {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            MethodType mtFilter = (MethodType) data.get("mtFilter");
+            int filterArgsPos = (int) data.get("filterArgsPos");
+            int filtersArgsArrayLength = (int) data.get("filtersArgsArrayLength");
+            MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
+                    mtTarget.parameterList(), kind);
+            MethodHandle[] filters = new MethodHandle[filtersArgsArrayLength];
+            for (int i = 0; i < filtersArgsArrayLength; i++) {
+                filters[i] = TestMethods.filterGenerator(mtFilter.parameterType(i),
+                        mtTarget.parameterType(filterArgsPos + i), kind);
+            }
+            return MethodHandles.filterArguments(target, filterArgsPos, filters);
+        }
+    },
     FILTER_RETURN_VALUE("filterReturnValue") {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    // Arity after reducing because of long and double take 2 slots.
-                    int realArity = mtTarget.parameterCount();
-                    int filterArgsPos = Helper.RNG.nextInt(realArity + 1);
-                    int filtersArgsArrayLength = Helper.RNG.nextInt(realArity + 1 - filterArgsPos);
-                    MethodType mtFilter = TestMethods.randomMethodTypeGenerator(filtersArgsArrayLength);
-                    data.put("mtFilter", mtFilter);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            // Arity after reducing because of long and double take 2 slots.
+            int realArity = mtTarget.parameterCount();
+            int filterArgsPos = Helper.RNG.nextInt(realArity + 1);
+            int filtersArgsArrayLength = Helper.RNG.nextInt(realArity + 1 - filterArgsPos);
+            MethodType mtFilter = TestMethods.randomMethodTypeGenerator(filtersArgsArrayLength);
+            data.put("mtFilter", mtFilter);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) throws NoSuchMethodException, IllegalAccessException {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    MethodType mtFilter = (MethodType) data.get("mtFilter");
-                    MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
-                            mtTarget.parameterList(), kind);
-                    MethodHandle filter = TestMethods.filterGenerator(mtTarget.returnType(),
-                            mtFilter.returnType(), kind);
-                    return MethodHandles.filterReturnValue(target, filter);
-                }
-            },
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind)
+                throws NoSuchMethodException, IllegalAccessException {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            MethodType mtFilter = (MethodType) data.get("mtFilter");
+            MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
+                    mtTarget.parameterList(), kind);
+            MethodHandle filter = TestMethods.filterGenerator(mtTarget.returnType(),
+                    mtFilter.returnType(), kind);
+            return MethodHandles.filterReturnValue(target, filter);
+        }
+    },
     INSERT_ARGUMENTS("insertArguments", Helper.MAX_ARITY - 3) {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    // Arity after reducing because of long and double take 2 slots.
-                    int realArity = mtTarget.parameterCount();
-                    int insertArgsPos = Helper.RNG.nextInt(realArity + 1);
-                    data.put("insertArgsPos", insertArgsPos);
-                    int insertArgsArrayLength = Helper.RNG.nextInt(realArity + 1 - insertArgsPos);
-                    MethodType mtInsertArgs = MethodType.methodType(void.class, mtTarget.parameterList()
-                            .subList(insertArgsPos, insertArgsPos + insertArgsArrayLength));
-                    data.put("mtInsertArgs", mtInsertArgs);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            // Arity after reducing because of long and double take 2 slots.
+            int realArity = mtTarget.parameterCount();
+            int insertArgsPos = Helper.RNG.nextInt(realArity + 1);
+            data.put("insertArgsPos", insertArgsPos);
+            int insertArgsArrayLength = Helper.RNG.nextInt(realArity + 1 - insertArgsPos);
+            MethodType mtInsertArgs = MethodType.methodType(void.class, mtTarget.parameterList()
+                    .subList(insertArgsPos, insertArgsPos + insertArgsArrayLength));
+            data.put("mtInsertArgs", mtInsertArgs);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) throws NoSuchMethodException, IllegalAccessException {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    MethodType mtInsertArgs = (MethodType) data.get("mtInsertArgs");
-                    int insertArgsPos = (int) data.get("insertArgsPos");
-                    MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
-                            mtTarget.parameterList(), kind);
-                    Object[] insertList = Helper.randomArgs(mtInsertArgs.parameterList());
-                    return MethodHandles.insertArguments(target, insertArgsPos, insertList);
-                }
-            },
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind)
+                throws NoSuchMethodException, IllegalAccessException {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            MethodType mtInsertArgs = (MethodType) data.get("mtInsertArgs");
+            int insertArgsPos = (int) data.get("insertArgsPos");
+            MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
+                    mtTarget.parameterList(), kind);
+            Object[] insertList = Helper.randomArgs(mtInsertArgs.parameterList());
+            return MethodHandles.insertArguments(target, insertArgsPos, insertList);
+        }
+    },
     PERMUTE_ARGUMENTS("permuteArguments", Helper.MAX_ARITY / 2) {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    // Arity after reducing because of long and double take 2 slots.
-                    int realArity = mtTarget.parameterCount();
-                    int[] permuteArgsReorderArray = new int[realArity];
-                    int mtPermuteArgsNum = Helper.RNG.nextInt(Helper.MAX_ARITY);
-                    mtPermuteArgsNum = mtPermuteArgsNum == 0 ? 1 : mtPermuteArgsNum;
-                    MethodType mtPermuteArgs = TestMethods.randomMethodTypeGenerator(mtPermuteArgsNum);
-                    mtTarget = mtTarget.changeReturnType(mtPermuteArgs.returnType());
-                    for (int i = 0; i < realArity; i++) {
-                        int mtPermuteArgsParNum = Helper.RNG.nextInt(mtPermuteArgs.parameterCount());
-                        permuteArgsReorderArray[i] = mtPermuteArgsParNum;
-                        mtTarget = mtTarget.changeParameterType(
-                                i, mtPermuteArgs.parameterType(mtPermuteArgsParNum));
-                    }
-                    data.put("mtTarget", mtTarget);
-                    data.put("permuteArgsReorderArray", permuteArgsReorderArray);
-                    data.put("mtPermuteArgs", mtPermuteArgs);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            // Arity after reducing because of long and double take 2 slots.
+            int realArity = mtTarget.parameterCount();
+            int[] permuteArgsReorderArray = new int[realArity];
+            int mtPermuteArgsNum = Helper.RNG.nextInt(Helper.MAX_ARITY);
+            mtPermuteArgsNum = mtPermuteArgsNum == 0 ? 1 : mtPermuteArgsNum;
+            MethodType mtPermuteArgs = TestMethods.randomMethodTypeGenerator(mtPermuteArgsNum);
+            mtTarget = mtTarget.changeReturnType(mtPermuteArgs.returnType());
+            for (int i = 0; i < realArity; i++) {
+                int mtPermuteArgsParNum = Helper.RNG.nextInt(mtPermuteArgs.parameterCount());
+                permuteArgsReorderArray[i] = mtPermuteArgsParNum;
+                mtTarget = mtTarget.changeParameterType(
+                        i, mtPermuteArgs.parameterType(mtPermuteArgsParNum));
+            }
+            data.put("mtTarget", mtTarget);
+            data.put("permuteArgsReorderArray", permuteArgsReorderArray);
+            data.put("mtPermuteArgs", mtPermuteArgs);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) throws NoSuchMethodException, IllegalAccessException {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    MethodType mtPermuteArgs = (MethodType) data.get("mtPermuteArgs");
-                    int[] permuteArgsReorderArray = (int[]) data.get("permuteArgsReorderArray");
-                    MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
-                            mtTarget.parameterList(), kind);
-                    return MethodHandles.permuteArguments(target, mtPermuteArgs, permuteArgsReorderArray);
-                }
-            },
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind)
+                throws NoSuchMethodException, IllegalAccessException {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            MethodType mtPermuteArgs = (MethodType) data.get("mtPermuteArgs");
+            int[] permuteArgsReorderArray = (int[]) data.get("permuteArgsReorderArray");
+            MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
+                    mtTarget.parameterList(), kind);
+            return MethodHandles.permuteArguments(target, mtPermuteArgs, permuteArgsReorderArray);
+        }
+    },
     THROW_EXCEPTION("throwException") {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    Class<?> rType = mtTarget.returnType();
-                    return MethodHandles.throwException(rType, Exception.class
-                    );
-                }
-            },
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            Class<?> rType = mtTarget.returnType();
+            return MethodHandles.throwException(rType, Exception.class
+            );
+        }
+    },
     GUARD_WITH_TEST("guardWithTest") {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    // Arity after reducing because of long and double take 2 slots.
-                    int realArity = mtTarget.parameterCount();
-                    int modifierMHArgNum = Helper.RNG.nextInt(realArity + 1);
-                    data.put("modifierMHArgNum", modifierMHArgNum);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            // Arity after reducing because of long and double take 2 slots.
+            int realArity = mtTarget.parameterCount();
+            int modifierMHArgNum = Helper.RNG.nextInt(realArity + 1);
+            data.put("modifierMHArgNum", modifierMHArgNum);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) throws NoSuchMethodException, IllegalAccessException {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    int modifierMHArgNum = (int) data.get("modifierMHArgNum");
-                    TestMethods.Kind targetKind;
-                    TestMethods.Kind fallbackKind;
-                    if (kind.equals(TestMethods.Kind.ONE)) {
-                        targetKind = TestMethods.Kind.ONE;
-                        fallbackKind = TestMethods.Kind.TWO;
-                    } else {
-                        targetKind = TestMethods.Kind.TWO;
-                        fallbackKind = TestMethods.Kind.ONE;
-                    }
-                    MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
-                            mtTarget.parameterList(), targetKind);
-                    MethodHandle fallback = TestMethods.methodHandleGenerator(mtTarget.returnType(),
-                            mtTarget.parameterList(), fallbackKind);
-                    MethodHandle test = TestMethods.methodHandleGenerator(boolean.class,
-                            mtTarget.parameterList().subList(0, modifierMHArgNum), kind);
-                    return MethodHandles.guardWithTest(test, target, fallback);
-                }
-            },
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind)
+                throws NoSuchMethodException, IllegalAccessException {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            int modifierMHArgNum = (int) data.get("modifierMHArgNum");
+            TestMethods.Kind targetKind;
+            TestMethods.Kind fallbackKind;
+            if (kind.equals(TestMethods.Kind.ONE)) {
+                targetKind = TestMethods.Kind.ONE;
+                fallbackKind = TestMethods.Kind.TWO;
+            } else {
+                targetKind = TestMethods.Kind.TWO;
+                fallbackKind = TestMethods.Kind.ONE;
+            }
+            MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
+                    mtTarget.parameterList(), targetKind);
+            MethodHandle fallback = TestMethods.methodHandleGenerator(mtTarget.returnType(),
+                    mtTarget.parameterList(), fallbackKind);
+            MethodHandle test = TestMethods.methodHandleGenerator(boolean.class,
+                    mtTarget.parameterList().subList(0, modifierMHArgNum), kind);
+            return MethodHandles.guardWithTest(test, target, fallback);
+        }
+    },
     CATCH_EXCEPTION("catchException") {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    // Arity after reducing because of long and double take 2 slots.
-                    int realArity = mtTarget.parameterCount();
-                    int modifierMHArgNum = Helper.RNG.nextInt(realArity + 1);
-                    data.put("modifierMHArgNum", modifierMHArgNum);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            // Arity after reducing because of long and double take 2 slots.
+            int realArity = mtTarget.parameterCount();
+            int modifierMHArgNum = Helper.RNG.nextInt(realArity + 1);
+            data.put("modifierMHArgNum", modifierMHArgNum);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) throws NoSuchMethodException, IllegalAccessException {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    int modifierMHArgNum = (int) data.get("modifierMHArgNum");
-                    MethodHandle target;
-                    if (kind.equals(TestMethods.Kind.ONE)) {
-                        target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
-                                mtTarget.parameterList(), TestMethods.Kind.ONE);
-                    } else {
-                        target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
-                                mtTarget.parameterList(), TestMethods.Kind.EXCEPT);
-                    }
-                    List<Class<?>> handlerParamList = new ArrayList<>(mtTarget.parameterCount() + 1);
-                    handlerParamList.add(Exception.class);
-                    handlerParamList.addAll(mtTarget.parameterList().subList(0, modifierMHArgNum));
-                    MethodHandle handler = TestMethods.methodHandleGenerator(
-                            mtTarget.returnType(), handlerParamList, TestMethods.Kind.TWO);
-                    return MethodHandles.catchException(target, Exception.class, handler);
-                }
-            },
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind)
+                throws NoSuchMethodException, IllegalAccessException {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            int modifierMHArgNum = (int) data.get("modifierMHArgNum");
+            MethodHandle target;
+            if (kind.equals(TestMethods.Kind.ONE)) {
+                target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
+                        mtTarget.parameterList(), TestMethods.Kind.ONE);
+            } else {
+                target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
+                        mtTarget.parameterList(), TestMethods.Kind.EXCEPT);
+            }
+            List<Class<?>> handlerParamList = new ArrayList<>(mtTarget.parameterCount() + 1);
+            handlerParamList.add(Exception.class);
+            handlerParamList.addAll(mtTarget.parameterList().subList(0, modifierMHArgNum));
+            MethodHandle handler = TestMethods.methodHandleGenerator(
+                    mtTarget.returnType(), handlerParamList, TestMethods.Kind.TWO);
+            return MethodHandles.catchException(target, Exception.class, handler);
+        }
+    },
     INVOKER("invoker", Helper.MAX_ARITY - 1) {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    return MethodHandles.invoker(mtTarget);
-                }
-            },
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            return MethodHandles.invoker(mtTarget);
+        }
+    },
     EXACT_INVOKER("exactInvoker", Helper.MAX_ARITY - 1) {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    return MethodHandles.exactInvoker(mtTarget);
-                }
-            },
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            return MethodHandles.exactInvoker(mtTarget);
+        }
+    },
     SPREAD_INVOKER("spreadInvoker", Helper.MAX_ARITY - 1) {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    // Arity after reducing because of long and double take 2 slots.
-                    int realArity = mtTarget.parameterCount();
-                    int modifierMHArgNum = Helper.RNG.nextInt(realArity + 1);
-                    data.put("modifierMHArgNum", modifierMHArgNum);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            // Arity after reducing because of long and double take 2 slots.
+            int realArity = mtTarget.parameterCount();
+            int modifierMHArgNum = Helper.RNG.nextInt(realArity + 1);
+            data.put("modifierMHArgNum", modifierMHArgNum);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    int modifierMHArgNum = (int) data.get("modifierMHArgNum");
-                    return MethodHandles.spreadInvoker(mtTarget, modifierMHArgNum);
-                }
-            },
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            int modifierMHArgNum = (int) data.get("modifierMHArgNum");
+            return MethodHandles.spreadInvoker(mtTarget, modifierMHArgNum);
+        }
+    },
     ARRAY_ELEMENT_GETTER("arrayElementGetter") {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    Class<?> rType = mtTarget.returnType();
-                    if (rType == void.class) {
-                        rType = Object.class;
-                    }
-                    return MethodHandles.arrayElementGetter(Array.newInstance(rType, 2).getClass());
-                }
-            },
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            Class<?> rType = mtTarget.returnType();
+            if (rType == void.class) {
+                rType = Object.class;
+            }
+            return MethodHandles.arrayElementGetter(Array.newInstance(rType, 2).getClass());
+        }
+    },
     ARRAY_ELEMENT_SETTER("arrayElementSetter") {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    Class<?> rType = mtTarget.returnType();
-                    if (rType == void.class) {
-                        rType = Object.class;
-                    }
-                    return MethodHandles.arrayElementSetter(Array.newInstance(rType, 2).getClass());
-                }
-            },
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            Class<?> rType = mtTarget.returnType();
+            if (rType == void.class) {
+                rType = Object.class;
+            }
+            return MethodHandles.arrayElementSetter(Array.newInstance(rType, 2).getClass());
+        }
+    },
     CONSTANT("constant") {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    return data;
-                }
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    Class<?> rType = mtTarget.returnType();
-                    if (rType == void.class) {
-                        rType = Object.class;
-                    }
-                    if (rType.equals(boolean.class)) {
-                        // There should be the same return values because for default values there are special "zero" forms
-                        return MethodHandles.constant(rType, true);
-                    } else {
-                        return MethodHandles.constant(rType, kind.getValue(rType));
-                    }
-                }
-            },
-    IDENTITY("identity") {
-                @Override
-                public Map<String, Object> getTestCaseData() {
-                    Map<String, Object> data = new HashMap<>();
-                    int desiredArity = Helper.RNG.nextInt(super.maxArity);
-                    MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
-                    data.put("mtTarget", mtTarget);
-                    return data;
-                }
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            Class<?> rType = mtTarget.returnType();
+            if (rType == void.class) {
+                rType = Object.class;
+            }
+            if (rType.equals(boolean.class)) {
+                // There should be the same return values because for default values there are special "zero" forms
+                return MethodHandles.constant(rType, true);
+            } else {
+                return MethodHandles.constant(rType, kind.getValue(rType));
+            }
+        }
+    },
+IDENTITY("identity") {
+        @Override
+        public Map<String, Object> getTestCaseData() {
+            Map<String, Object> data = new HashMap<>();
+            int desiredArity = Helper.RNG.nextInt(super.maxArity);
+            MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
+            data.put("mtTarget", mtTarget);
+            return data;
+        }
 
-                @Override
-                protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
-                    MethodType mtTarget = (MethodType) data.get("mtTarget");
-                    Class<?> rType = mtTarget.returnType();
-                    if (rType == void.class) {
-                        rType = Object.class;
-                    }
-                    return MethodHandles.identity(rType);
-                }
-            };
+        @Override
+        protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) {
+            MethodType mtTarget = (MethodType) data.get("mtTarget");
+            Class<?> rType = mtTarget.returnType();
+            if (rType == void.class) {
+                rType = Object.class;
+            }
+            return MethodHandles.identity(rType);
+        }
+    };
 
     /**
      * Test method's name.
@@ -514,8 +525,10 @@
         this(name, Helper.MAX_ARITY);
     }
 
-    protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) throws NoSuchMethodException, IllegalAccessException {
-        throw new UnsupportedOperationException("TESTBUG: getMH method is not implemented for test method " + this);
+    protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind)
+            throws NoSuchMethodException, IllegalAccessException {
+        throw new UnsupportedOperationException(
+                "TESTBUG: getMH method is not implemented for test method " + this);
     }
 
     /**
@@ -575,13 +588,15 @@
             return Helper.castToWrapper(value, cl);
         }
 
-        private MethodHandle getBasicMH(Class<?> rType) throws NoSuchMethodException, IllegalAccessException {
+        private MethodHandle getBasicMH(Class<?> rType)
+                throws NoSuchMethodException, IllegalAccessException {
             MethodHandle result = null;
             switch (this) {
                 case ONE:
                 case TWO:
                     if (rType.equals(void.class)) {
-                        result = MethodHandles.lookup().findVirtual(Kind.class, "returnVoid", MethodType.methodType(void.class));
+                        result = MethodHandles.lookup().findVirtual(Kind.class,
+                                "returnVoid", MethodType.methodType(void.class));
                         result = MethodHandles.insertArguments(result, 0, this);
                     } else {
                         result = MethodHandles.constant(rType, getValue(rType));
--- a/jdk/test/java/lang/invoke/MethodHandles/CatchExceptionTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/lang/invoke/MethodHandles/CatchExceptionTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -20,25 +20,30 @@
  * or visit www.oracle.com if you need additional information or have any
  * questions.
  */
+
 package test.java.lang.invoke.MethodHandles;
 
-import com.oracle.testlibrary.jsr292.Helper;
-import com.oracle.testlibrary.jsr292.CodeCacheOverflowProcessor;
 import jdk.testlibrary.Asserts;
 import jdk.testlibrary.TimeLimitedRunner;
 import jdk.testlibrary.Utils;
+import test.java.lang.invoke.lib.CodeCacheOverflowProcessor;
+import test.java.lang.invoke.lib.Helper;
 
 import java.lang.invoke.MethodHandle;
 import java.lang.invoke.MethodHandles;
 import java.lang.invoke.MethodType;
 import java.lang.reflect.Array;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
 import java.util.function.BiFunction;
 import java.util.function.Function;
 import java.util.function.Supplier;
 
 /* @test
- * @library /lib/testlibrary/jsr292 /lib/testlibrary/
+ * @library /lib/testlibrary /java/lang/invoke/common
  * @compile CatchExceptionTest.java
  * @run main/othervm -esa test.java.lang.invoke.MethodHandles.CatchExceptionTest
  * @key intermittent randomness
@@ -68,8 +73,8 @@
     private int dropped;
     private MethodHandle thrower;
 
-    public CatchExceptionTest(TestCase testCase, final boolean isVararg, final int argsCount,
-            final int catchDrops) {
+    public CatchExceptionTest(TestCase testCase, final boolean isVararg,
+                              final int argsCount, final int catchDrops) {
         this.testCase = testCase;
         this.dropped = catchDrops;
         MethodHandle thrower = testCase.thrower;
@@ -353,8 +358,8 @@
                 new ClassCastException("testing"),
                 new java.io.IOException("testing"),
                 new LinkageError("testing")};
-        List<Supplier<TestCase>> list = new ArrayList<>(constructors.length *
-                throwables.length * ThrowMode.values().length);
+        List<Supplier<TestCase>> list = new ArrayList<>(constructors.length
+                * throwables.length * ThrowMode.values().length);
         //noinspection unchecked
         for (PartialConstructor f : constructors) {
             for (ThrowMode mode : ThrowMode.values()) {
--- a/jdk/test/java/lang/invoke/MethodHandlesTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/lang/invoke/MethodHandlesTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,23 +23,46 @@
 
 /* @test
  * @summary unit tests for java.lang.invoke.MethodHandles
- * @library /lib/testlibrary /lib/testlibrary/jsr292
+ * @library /lib/testlibrary /java/lang/invoke/common
  * @compile MethodHandlesTest.java remote/RemoteExample.java
- * @run junit/othervm/timeout=2500 -XX:+IgnoreUnrecognizedVMOptions -XX:-VerifyDependencies -esa test.java.lang.invoke.MethodHandlesTest
+ * @run junit/othervm/timeout=2500 -XX:+IgnoreUnrecognizedVMOptions
+ *                                 -XX:-VerifyDependencies
+ *                                 -esa
+ *                                 test.java.lang.invoke.MethodHandlesTest
  */
 
 package test.java.lang.invoke;
 
+import org.junit.*;
+import test.java.lang.invoke.lib.CodeCacheOverflowProcessor;
 import test.java.lang.invoke.remote.RemoteExample;
-import java.lang.invoke.*;
-import static java.lang.invoke.MethodType.methodType;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandleProxies;
+import java.lang.invoke.MethodHandles;
 import java.lang.invoke.MethodHandles.Lookup;
-import java.lang.reflect.*;
-import java.util.*;
-import org.junit.*;
+import java.lang.invoke.MethodType;
+import java.lang.invoke.MutableCallSite;
+import java.lang.invoke.WrongMethodTypeException;
+import java.lang.reflect.Array;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.lang.reflect.UndeclaredThrowableException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Formatter;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import static java.lang.invoke.MethodType.methodType;
 import static org.junit.Assert.*;
-import com.oracle.testlibrary.jsr292.CodeCacheOverflowProcessor;
-
 
 /**
  *
--- a/jdk/test/java/lang/invoke/PermuteArgsTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/lang/invoke/PermuteArgsTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,9 +23,10 @@
 
 /* @test
  * @summary unit tests for method handles which permute their arguments
- * @library /lib/testlibrary/jsr292 /lib/testlibrary
+ * @library /lib/testlibrary /java/lang/invoke/common
  * @run testng/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-VerifyDependencies -ea -esa -DPermuteArgsTest.MAX_ARITY=8 test.java.lang.invoke.PermuteArgsTest
  */
+
 /* Examples of manual runs:
  * java -DPermuteArgsTest.{DRY_RUN=true,MAX_ARITY=253} test.java.lang.invoke.PermuteArgsTest
  * java -DPermuteArgsTest.{VERBOSE=true,MAX_ARITY=5} test.java.lang.invoke.PermuteArgsTest
@@ -34,17 +35,23 @@
 
 package test.java.lang.invoke;
 
-import org.testng.*;
-import org.testng.annotations.*;
-
-import com.oracle.testlibrary.jsr292.CodeCacheOverflowProcessor;
+import org.testng.annotations.Test;
+import test.java.lang.invoke.lib.CodeCacheOverflowProcessor;
 
-import java.util.*;
-import java.lang.reflect.*;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodType;
+import java.lang.invoke.WrongMethodTypeException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
 
-import java.lang.invoke.*;
-import static java.lang.invoke.MethodHandles.*;
-import static java.lang.invoke.MethodType.*;
+import static java.lang.invoke.MethodHandles.Lookup;
+import static java.lang.invoke.MethodHandles.lookup;
+import static java.lang.invoke.MethodHandles.permuteArguments;
+import static java.lang.invoke.MethodType.methodType;
 
 public class PermuteArgsTest {
     private static final Class<?> CLASS = PermuteArgsTest.class;
@@ -205,7 +212,8 @@
             throw new IllegalArgumentException("cannot convert to type "+mt1+" from "+mh, ex);
         }
     }
-    static MethodHandle findTestMH(String name, int[] perm) throws ReflectiveOperationException {
+    static MethodHandle findTestMH(String name, int[] perm)
+            throws ReflectiveOperationException {
         int arity = perm.length;
         Lookup lookup = lookup();
         for (Method m : lookup.lookupClass().getDeclaredMethods()) {
@@ -259,7 +267,8 @@
         }
     }
 
-    static void testPermutations(MethodHandle mh, int[] perm, int start, int end, Set<String> done) throws Throwable {
+    static void testPermutations(MethodHandle mh, int[] perm, int start, int end,
+                                 Set<String> done) throws Throwable {
         if (end - start <= 1)  return;
         for (int j = 0; j <= 1; j++) {
             testRotations(mh, perm, start, end, done);
@@ -283,7 +292,8 @@
         }
     }
 
-    static void testRotations(MethodHandle mh, int[] perm, int start, int end, Set<String> done) throws Throwable {
+    static void testRotations(MethodHandle mh, int[] perm, int start, int end,
+                              Set<String> done) throws Throwable {
         Object[] args = junkArgs(mh.type().parameterArray());
         for (int i = start; i < end; i++) {
             if (done.add(Arrays.toString(perm)))
@@ -292,9 +302,11 @@
         }
     }
 
-    static void testOnePermutation(MethodHandle mh, int[] perm, Object[] args) throws Throwable {
+    static void testOnePermutation(MethodHandle mh, int[] perm, Object[] args)
+            throws Throwable {
         MethodType mt = mh.type();
-        MethodType pmt = methodType(mt.returnType(), unpermuteArgs(perm, mt.parameterArray(), Class[].class));
+        MethodType pmt = methodType(mt.returnType(),
+                unpermuteArgs(perm, mt.parameterArray(), Class[].class));
         if (VERBOSE)
             System.out.println(Arrays.toString(perm));
         testCases += 1;
--- a/jdk/test/java/lang/invoke/TestCatchExceptionWithVarargs.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/lang/invoke/TestCatchExceptionWithVarargs.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,14 +24,18 @@
 /*
  * @test
  * @bug 8019184
- * @library /lib/testlibrary /lib/testlibrary/jsr292
+ * @library /lib/testlibrary /java/lang/invoke/common
  * @summary MethodHandles.catchException() fails when methods have 8 args + varargs
  * @run main TestCatchExceptionWithVarargs
  */
 
-import com.oracle.testlibrary.jsr292.CodeCacheOverflowProcessor;
-import java.util.*;
-import java.lang.invoke.*;
+import test.java.lang.invoke.lib.CodeCacheOverflowProcessor;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+import java.util.LinkedList;
+import java.util.List;
 
 public class TestCatchExceptionWithVarargs {
 
@@ -48,14 +52,16 @@
 
     public static Object target(Object... a) throws Exception {
         if (a[0] != firstArg) {
-            throw new AssertionError("first argument different than expected: " + a[0] + " != " + firstArg);
+            throw new AssertionError("first argument different than expected: "
+                    + a[0] + " != " + firstArg);
         }
         throw new MyException();
     }
 
     public static Object handler(Object... a) {
         if (a[0] != firstArg) {
-            throw new AssertionError("first argument different than expected: " + a[0] + " != " + firstArg);
+            throw new AssertionError("first argument different than expected: "
+                    + a[0] + " != " + firstArg);
         }
         return a[0];
     }
@@ -83,20 +89,27 @@
         for (int i = 1; i < MAX_MH_ARITY - 1; i++) {
             ptypes.add(0, Object.class);
 
-            MethodHandle targetWithArgs = target.asType(MethodType.methodType(Object.class, ptypes));
-            MethodHandle handlerWithArgs = handler.asType(MethodType.methodType(Object.class, ptypes));
-            handlerWithArgs = MethodHandles.dropArguments(handlerWithArgs, 0, MyException.class);
+            MethodHandle targetWithArgs = target.asType(
+                    MethodType.methodType(Object.class, ptypes));
+            MethodHandle handlerWithArgs = handler.asType(
+                    MethodType.methodType(Object.class, ptypes));
+            handlerWithArgs = MethodHandles.dropArguments(
+                    handlerWithArgs, 0, MyException.class);
 
-            MethodHandle gwc1 = MethodHandles.catchException(targetWithArgs, MyException.class, handlerWithArgs);
+            MethodHandle gwc1 = MethodHandles.catchException(
+                    targetWithArgs, MyException.class, handlerWithArgs);
 
             // The next line throws an IllegalArgumentException if there is a bug.
-            MethodHandle gwc2 = MethodHandles.catchException(gwc1, MyException.class, handlerWithArgs);
+            MethodHandle gwc2 = MethodHandles.catchException(
+                    gwc1, MyException.class, handlerWithArgs);
 
             // This is only to verify that the method handles can actually be invoked and do the right thing.
             firstArg = new Object();
-            Object o = gwc2.asSpreader(Object[].class, ptypes.size() - 1).invoke(firstArg, new Object[i]);
+            Object o = gwc2.asSpreader(Object[].class, ptypes.size() - 1)
+                           .invoke(firstArg, new Object[i]);
             if (o != firstArg) {
-                throw new AssertionError("return value different than expected: " + o + " != " + firstArg);
+                throw new AssertionError("return value different than expected: "
+                        + o + " != " + firstArg);
             }
         }
     }
--- a/jdk/test/java/lang/invoke/VarargsArrayTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/lang/invoke/VarargsArrayTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -21,20 +21,20 @@
  * questions.
  */
 
+import sun.invoke.util.Wrapper;
+import test.java.lang.invoke.lib.CodeCacheOverflowProcessor;
 
 import java.lang.invoke.MethodHandle;
 import java.lang.invoke.MethodHandleHelper;
 import java.lang.invoke.MethodType;
-import sun.invoke.util.Wrapper;
 import java.util.Arrays;
 import java.util.Collections;
-import com.oracle.testlibrary.jsr292.CodeCacheOverflowProcessor;
 
 /* @test
  * @summary unit tests for varargs array methods: MethodHandleInfo.varargsArray(int),
  *          MethodHandleInfo.varargsArray(Class,int) & MethodHandleInfo.varargsList(int)
  * @modules java.base/sun.invoke.util
- * @library /lib/testlibrary /lib/testlibrary/jsr292
+ * @library /lib/testlibrary /java/lang/invoke/common
  * @compile/module=java.base java/lang/invoke/MethodHandleHelper.java
  * @run main/bootclasspath VarargsArrayTest
  * @run main/bootclasspath/othervm -DVarargsArrayTest.MAX_ARITY=255 -DVarargsArrayTest.START_ARITY=250
@@ -46,9 +46,12 @@
  */
 public class VarargsArrayTest {
     private static final Class<?> CLASS = VarargsArrayTest.class;
-    private static final int MAX_ARITY = Integer.getInteger(CLASS.getSimpleName()+".MAX_ARITY", 40);
-    private static final int START_ARITY = Integer.getInteger(CLASS.getSimpleName()+".START_ARITY", 0);
-    private static final boolean EXHAUSTIVE = Boolean.getBoolean(CLASS.getSimpleName()+".EXHAUSTIVE");
+    private static final int MAX_ARITY = Integer.getInteger(
+            CLASS.getSimpleName()+".MAX_ARITY", 40);
+    private static final int START_ARITY = Integer.getInteger(
+            CLASS.getSimpleName()+".START_ARITY", 0);
+    private static final boolean EXHAUSTIVE = Boolean.getBoolean(
+            CLASS.getSimpleName()+".EXHAUSTIVE");
 
     public static void main(String[] args) throws Throwable {
         CodeCacheOverflowProcessor.runMHTest(VarargsArrayTest::test);
@@ -211,7 +214,8 @@
             }
             return;
         }
-        throw new AssertionError(Arrays.deepToString(arr1) + " != " + Arrays.deepToString(arr2));
+        throw new AssertionError(Arrays.deepToString(arr1)
+                + " != " + Arrays.deepToString(arr2));
     }
 
     public static void assertEquals(Object o1, Object o2) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/lang/invoke/common/test/java/lang/invoke/lib/CodeCacheOverflowProcessor.java	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package test.java.lang.invoke.lib;
+
+import jdk.testlibrary.Utils;
+
+/**
+ * Helper class used to catch and process VirtualMachineError with message "Out
+ * of space in CodeCache". Some JSR292 tests run out of code cache size, so code
+ * cache overflows and VME is thrown. This VME is considered as non-critical in
+ * some JSR292 tests, so it should be processed to prevent test failure.
+ */
+public class CodeCacheOverflowProcessor {
+
+    /**
+     * Checks if an instance of Throwable is caused by VirtualMachineError with
+     * message "Out of space in CodeCache". May be used as filter in method
+     * {@code jdk.testlibrary.Utils.filterException}.
+     *
+     * @param t - Throwable to check.
+     * @return true if Throwable is caused by VME, false otherwise.
+     */
+    public static Boolean isThrowableCausedByVME(Throwable t) {
+        Throwable causeOfT = t;
+        do {
+            if (causeOfT instanceof VirtualMachineError
+                    && causeOfT.getMessage().matches(".*[Oo]ut of space"
+                            + " in CodeCache.*")) {
+                return true;
+            }
+            causeOfT = causeOfT != null ? causeOfT.getCause() : null;
+        } while (causeOfT != null && causeOfT != t);
+        return false;
+    }
+
+    /**
+     * Checks if the given test throws an exception caused by
+     * VirtualMachineError with message "Out of space in CodeCache", and, if VME
+     * takes place, processes it so that no exception is thrown, and prints its
+     * stack trace. If test throws exception not caused by VME, this method just
+     * re-throws this exception.
+     *
+     * @param test - test to check for and process VirtualMachineError.
+     * @return - an exception caused by VME or null
+     *           if test has thrown no exception.
+     * @throws Throwable - if test has thrown an exception
+     *                     that is not caused by VME.
+     */
+    public static Throwable runMHTest(Utils.ThrowingRunnable test) throws Throwable {
+        Throwable t = Utils.filterException(test::run,
+                CodeCacheOverflowProcessor::isThrowableCausedByVME);
+        if (t != null) {
+            System.err.printf("%nNon-critical exception caught becuse of"
+                    + " code cache size is not enough to run all test cases.%n%n");
+        }
+        return t;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/lang/invoke/common/test/java/lang/invoke/lib/Helper.java	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,351 @@
+/*
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package test.java.lang.invoke.lib;
+
+import jdk.testlibrary.Asserts;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Random;
+
+public class Helper {
+    /** Flag for verbose output, true if {@code -Dverbose} specified */
+    public static final boolean IS_VERBOSE
+            = System.getProperty("verbose") != null;
+    /**
+     * Flag for thorough testing -- all test will be executed,
+     * true if {@code -Dthorough} specified. */
+    public static final boolean IS_THOROUGH
+            = System.getProperty("thorough") != null;
+    /** Random number generator w/ initial seed equal to {@code -Dseed} */
+    public static final Random RNG;
+
+    static {
+        String str = System.getProperty("seed");
+        long seed = str != null ? Long.parseLong(str) : new Random().nextLong();
+        RNG = new Random(seed);
+        System.out.printf("-Dseed=%d%n", seed);
+    }
+
+    public static final long TEST_LIMIT;
+    static {
+        String str = System.getProperty("testLimit");
+        TEST_LIMIT = str != null ? Long.parseUnsignedLong(str) : 2000L;
+        System.out.printf("-DtestLimit=%d%n", TEST_LIMIT);
+    }
+
+    public static final int MAX_ARITY = 254;
+    public static final String MISSING_ARG = "missingArg";
+    public static final String MISSING_ARG_2 = "missingArg#2";
+
+    private static final int
+            // first int value
+            ONE_MILLION = (1000 * 1000),
+            // scale factor to reach upper 32 bits
+            TEN_BILLION = (10 * 1000 * 1000 * 1000),
+            // <<1 makes space for sign bit;
+            INITIAL_ARG_VAL = ONE_MILLION << 1;
+
+    public static final MethodHandle AS_LIST;
+
+    static {
+        try {
+            AS_LIST = MethodHandles.lookup().findStatic(
+                    Arrays.class, "asList",
+                    MethodType.methodType(List.class, Object[].class));
+        } catch (NoSuchMethodException | IllegalAccessException ex) {
+            throw new Error(ex);
+        }
+    }
+
+    public static boolean isDoubleCost(Class<?> aClass) {
+        return aClass == double.class || aClass == long.class;
+    }
+
+    private static List<List<Object>> calledLog = new ArrayList<>();
+    private static long nextArgVal;
+
+    public static void assertCalled(String name, Object... args) {
+        assertCalled(0, name, args);
+    }
+
+    public static void assertCalled(int lag, String name, Object... args) {
+        Object expected = logEntry(name, args);
+        Object actual = getCalled(lag);
+        Asserts.assertEQ(expected, actual, "method call w/ lag = " + lag);
+    }
+
+    public static Object called(String name, Object... args) {
+        List<Object> entry = logEntry(name, args);
+        calledLog.add(entry);
+        return entry;
+    }
+
+    private static List<Object> logEntry(String name, Object... args) {
+        return Arrays.asList(name, Arrays.asList(args));
+    }
+
+    public static void clear() {
+        calledLog.clear();
+    }
+
+    public static List<Object> getCalled(int lag) {
+        int size = calledLog.size();
+        return size <= lag ? null : calledLog.get(size - lag - 1);
+    }
+
+    public static List<Class<?>> randomClasses(Class<?>[] classes, int size) {
+        List<Class<?>> result = new ArrayList<>(size);
+        for (int i = 0; i < size; ++i) {
+            result.add(classes[RNG.nextInt(classes.length)]);
+        }
+        return result;
+    }
+
+    public static List<Class<?>> getParams(List<Class<?>> classes,
+            boolean isVararg, int argsCount) {
+        boolean unmodifiable = true;
+        List<Class<?>> result = classes.subList(0,
+                Math.min(argsCount, (MAX_ARITY / 2) - 1));
+        int extra = 0;
+        if (argsCount >= MAX_ARITY / 2) {
+            result = new ArrayList<>(result);
+            unmodifiable = false;
+            extra = (int) result.stream().filter(Helper::isDoubleCost).count();
+            int i = result.size();
+            while (result.size() + extra < argsCount) {
+                Class<?> aClass = classes.get(i);
+                if (Helper.isDoubleCost(aClass)) {
+                    ++extra;
+                    if (result.size() + extra >= argsCount) {
+                        break;
+                    }
+                }
+                result.add(aClass);
+            }
+        }
+        if (isVararg && result.size() > 0) {
+            if (unmodifiable) {
+                result = new ArrayList<>(result);
+            }
+            int last = result.size() - 1;
+            Class<?> aClass = result.get(last);
+            aClass = Array.newInstance(aClass, 2).getClass();
+            result.set(last, aClass);
+        }
+        return result;
+    }
+
+    public static MethodHandle addTrailingArgs(MethodHandle target, int nargs,
+            List<Class<?>> classes) {
+        int targetLen = target.type().parameterCount();
+        int extra = (nargs - targetLen);
+        if (extra <= 0) {
+            return target;
+        }
+        List<Class<?>> fakeArgs = new ArrayList<>(extra);
+        for (int i = 0; i < extra; ++i) {
+            fakeArgs.add(classes.get(i % classes.size()));
+        }
+        return MethodHandles.dropArguments(target, targetLen, fakeArgs);
+    }
+
+    public static MethodHandle varargsList(int arity) {
+        return AS_LIST.asCollector(Object[].class, arity);
+    }
+
+    private static long nextArg(boolean moreBits) {
+        long val = nextArgVal++;
+        long sign = -(val & 1); // alternate signs
+        val >>= 1;
+        if (moreBits)
+        // Guarantee some bits in the high word.
+        // In any case keep the decimal representation simple-looking,
+        // with lots of zeroes, so as not to make the printed decimal
+        // strings unnecessarily noisy.
+        {
+            val += (val % ONE_MILLION) * TEN_BILLION;
+        }
+        return val ^ sign;
+    }
+
+    private static int nextArg() {
+        // Produce a 32-bit result something like ONE_MILLION+(smallint).
+        // Example: 1_000_042.
+        return (int) nextArg(false);
+    }
+
+    private static long nextArg(Class<?> kind) {
+        if (kind == long.class || kind == Long.class ||
+                kind == double.class || kind == Double.class)
+        // produce a 64-bit result something like
+        // ((TEN_BILLION+1) * (ONE_MILLION+(smallint)))
+        // Example: 10_000_420_001_000_042.
+        {
+            return nextArg(true);
+        }
+        return (long) nextArg();
+    }
+
+    private static Object randomArg(Class<?> param) {
+        Object wrap = castToWrapperOrNull(nextArg(param), param);
+        if (wrap != null) {
+            return wrap;
+        }
+
+        if (param.isInterface()) {
+            for (Class<?> c : param.getClasses()) {
+                if (param.isAssignableFrom(c) && !c.isInterface()) {
+                    param = c;
+                    break;
+                }
+            }
+        }
+        if (param.isArray()) {
+            Class<?> ctype = param.getComponentType();
+            Object arg = Array.newInstance(ctype, 2);
+            Array.set(arg, 0, randomArg(ctype));
+            return arg;
+        }
+        if (param.isInterface() && param.isAssignableFrom(List.class)) {
+            return Arrays.asList("#" + nextArg());
+        }
+        if (param.isInterface() || param.isAssignableFrom(String.class)) {
+            return "#" + nextArg();
+        }
+
+        try {
+            return param.newInstance();
+        } catch (InstantiationException | IllegalAccessException ex) {
+        }
+        return null;  // random class not Object, String, Integer, etc.
+    }
+
+    public static Object[] randomArgs(Class<?>... params) {
+        Object[] args = new Object[params.length];
+        for (int i = 0; i < args.length; i++) {
+            args[i] = randomArg(params[i]);
+        }
+        return args;
+    }
+
+    public static Object[] randomArgs(int nargs, Class<?> param) {
+        Object[] args = new Object[nargs];
+        for (int i = 0; i < args.length; i++) {
+            args[i] = randomArg(param);
+        }
+        return args;
+    }
+
+    public static Object[] randomArgs(int nargs, Class<?>... params) {
+        Object[] args = new Object[nargs];
+        for (int i = 0; i < args.length; i++) {
+            Class<?> param = params[i % params.length];
+            args[i] = randomArg(param);
+        }
+        return args;
+    }
+
+    public static Object[] randomArgs(List<Class<?>> params) {
+        return randomArgs(params.toArray(new Class<?>[params.size()]));
+    }
+
+    public static Object castToWrapper(Object value, Class<?> dst) {
+        Object wrap = null;
+        if (value instanceof Number) {
+            wrap = castToWrapperOrNull(((Number) value).longValue(), dst);
+        }
+        if (value instanceof Character) {
+            wrap = castToWrapperOrNull((char) (Character) value, dst);
+        }
+        if (wrap != null) {
+            return wrap;
+        }
+        return dst.cast(value);
+    }
+
+    @SuppressWarnings("cast")
+    // primitive cast to (long) is part of the pattern
+    private static Object castToWrapperOrNull(long value, Class<?> dst) {
+        if (dst == int.class || dst == Integer.class) {
+            return (int) (value);
+        }
+        if (dst == long.class || dst == Long.class) {
+            return (long) (value);
+        }
+        if (dst == char.class || dst == Character.class) {
+            return (char) (value);
+        }
+        if (dst == short.class || dst == Short.class) {
+            return (short) (value);
+        }
+        if (dst == float.class || dst == Float.class) {
+            return (float) (value);
+        }
+        if (dst == double.class || dst == Double.class) {
+            return (double) (value);
+        }
+        if (dst == byte.class || dst == Byte.class) {
+            return (byte) (value);
+        }
+        if (dst == boolean.class || dst == Boolean.class) {
+            return ((value % 29) & 1) == 0;
+        }
+        return null;
+    }
+
+    /**
+     * Routine used to obtain a randomly generated method type.
+     *
+     * @param arity Arity of returned method type.
+     * @return MethodType generated randomly.
+     */
+    public static MethodType randomMethodTypeGenerator(int arity) {
+        final Class<?>[] CLASSES = {
+            Object.class,
+            int.class,
+            boolean.class,
+            byte.class,
+            short.class,
+            char.class,
+            long.class,
+            float.class,
+            double.class
+        };
+        if (arity > MAX_ARITY) {
+            throw new IllegalArgumentException(
+                    String.format("Arity should not exceed %d!", MAX_ARITY));
+        }
+        List<Class<?>> list = randomClasses(CLASSES, arity);
+        list = getParams(list, false, arity);
+        int i = RNG.nextInt(CLASSES.length + 1);
+        Class<?> rtype = i == CLASSES.length ? void.class : CLASSES[i];
+        return MethodType.methodType(rtype, list);
+    }
+}
--- a/jdk/test/java/math/BigDecimal/StringConstructor.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/math/BigDecimal/StringConstructor.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,8 +23,7 @@
 
 /*
  * @test
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run main StringConstructor
  * @bug 4103117 4331084 4488017 4490929 6255285 6268365 8074460 8078672
  * @summary Tests the BigDecimal string constructor (use -Dseed=X to set PRNG seed).
@@ -33,7 +32,7 @@
 
 import java.math.*;
 import java.util.Random;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class StringConstructor {
 
--- a/jdk/test/java/math/BigInteger/BigIntegerTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/math/BigInteger/BigIntegerTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,8 +23,7 @@
 
 /*
  * @test
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run main BigIntegerTest
  * @bug 4181191 4161971 4227146 4194389 4823171 4624738 4812225 4837946 4026465 8074460 8078672 8032027
  * @summary tests methods in BigInteger (use -Dseed=X to set PRNG seed)
@@ -47,7 +46,7 @@
 import java.util.stream.IntStream;
 import java.util.stream.LongStream;
 import java.util.stream.Stream;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 /**
  * This is a simple test class created to ensure that the results
--- a/jdk/test/java/math/BigInteger/ModPow65537.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/math/BigInteger/ModPow65537.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,8 +23,7 @@
 
 /*
  * @test
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run main ModPow65537
  * @bug 4891312 8074460 8078672
  * @summary verify that modPow() not broken by the special case for 65537 (use -Dseed=X to set PRNG seed)
@@ -37,7 +36,7 @@
 import java.security.*;
 import java.security.spec.*;
 import java.util.Random;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class ModPow65537 {
 
--- a/jdk/test/java/math/BigInteger/PrimeTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/math/BigInteger/PrimeTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,8 +25,7 @@
 
 /*
  * @test
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run main PrimeTest
  * @bug 8026236 8074460 8078672
  * @summary test primality verification methods in BigInteger (use -Dseed=X to set PRNG seed)
@@ -40,7 +39,7 @@
 import java.util.Set;
 import java.util.SplittableRandom;
 import java.util.TreeSet;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 import static java.util.stream.Collectors.toCollection;
 import static java.util.stream.Collectors.toList;
 
--- a/jdk/test/java/math/BigInteger/SymmetricRangeTests.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/math/BigInteger/SymmetricRangeTests.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,8 +24,7 @@
 /*
  * @test
  * @ignore This test has huge memory requirements
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run main/timeout=180/othervm -Xmx8g SymmetricRangeTests
  * @bug 6910473 8021204 8021203 9005933 8074460 8078672
  * @summary Test range of BigInteger values (use -Dseed=X to set PRNG seed)
@@ -40,7 +39,7 @@
 import java.util.Arrays;
 import java.math.BigInteger;
 import java.util.Random;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class SymmetricRangeTests {
 
--- a/jdk/test/java/net/Socket/OldSocketImpl.sh	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-#
-# Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 6449565
-# @run shell/timeout=140 OldSocketImpl.sh
-# @summary Pre-1.4 SocketImpl no longer supported
-
-OS=`uname -s`
-case "$OS" in
-  SunOS | Linux | Darwin | AIX )
-    PS=":"
-    FS="/"
-    ;;
-  CYGWIN* )
-    PS=";"
-    FS="/"
-    ;;
-  Windows* )
-    PS=";"
-    FS="\\"
-    ;;
-  * )
-    echo "Unrecognized system!"
-    exit 1;
-    ;;
-esac
-
-# no need to compile the test. It is already compiled
-# with 1.3 and in OldStyleImpl.jar
-
-# run
-${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -cp ${TESTSRC}${FS}OldSocketImpl.jar OldSocketImpl
-result=$?
-if [ "$result" -ne "0" ]; then
-    exit 1
-fi
-
-# no failures, exit.
-exit 0
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/net/Socket/OldSocketImplTestDriver.java	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import jdk.test.lib.process.ProcessTools;
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+/**
+ * @test
+ * @bug 6449565
+ * @library /test/lib
+ * @build jdk.test.lib.process.ProcessTools
+ * @run main OldSocketImplTestDriver
+ * @summary Test driver for OdlSocketImpl
+ */
+public class OldSocketImplTestDriver {
+    public static void main(String[] args) throws Throwable {
+        Path jar = Paths.get(System.getProperty("test.src"),
+                "OldSocketImpl.jar");
+        ProcessTools.executeTestJava("-cp", jar.toString(), "OldSocketImpl")
+                    .outputTo(System.out)
+                    .errorTo(System.out)
+                    .shouldHaveExitValue(0);
+    }
+}
--- a/jdk/test/java/net/URL/B5086147.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/net/URL/B5086147.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,12 +24,13 @@
 /**
  * @test
  * @bug 5086147
- * @run shell B5086147.sh
+ * @requires (os.family == "windows")
+ * @run main B5086147
  * @summary File,URI,URL conversions are strange for UNC path
  */
 
-import java.net.*;
-import java.io.*;
+import java.io.File;
+import java.net.URI;
 
 public class B5086147 {
     public static final void main( String[] aaParamters ) throws Exception{
--- a/jdk/test/java/net/URL/B5086147.sh	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-#! /bin/sh
-
-#
-# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-
-OS=`uname -s`
-case "$OS" in
-  SunOS | Linux | Darwin | AIX )
-    exit 0
-    ;;
-  CYGWIN* )
-    PS=";"
-    FS="/"
-    ;;
-  Windows* )
-    PS=";"
-    FS="\\"
-    ;;
-  * )
-    echo "Unrecognized system!"
-    exit 1;
-    ;;
-esac
-${COMPILEJAVA}${FS}bin${FS}javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . ${TESTSRC}${FS}B5086147.java
-
-failures=0
-
-echo ''
-${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} B5086147
-if [ $? != 0 ]; then failures=`expr $failures + 1`; fi
-
-if [ "$failures" != "0" ]; then
-    echo $failures tests failed
-    exit 1;
-fi
--- a/jdk/test/java/net/URLClassLoader/B5077773.java	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-import java.io.*;
-import java.net.*;
-
-public class B5077773 {
-
-    public static void main(String[] args) throws Exception {
-        URLClassLoader loader =  new URLClassLoader (new URL[] {new URL("file:foo.jar")});
-        /* This test will fail if the file below is removed from rt.jar */
-        InputStream is = loader.getResourceAsStream ("javax/swing/text/rtf/charsets/mac.txt");
-        if (is == null) {
-            System.out.println ("could not find mac.txt");
-            return;
-        }
-        int c=0;
-        while ((is.read()) != -1) {
-            c++;
-        }
-        if (c == 26) /* size of bad file */  {
-            throw new RuntimeException ("Wrong mac.txt file was loaded");
-        }
-    }
-}
--- a/jdk/test/java/net/URLClassLoader/B5077773.sh	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-#! /bin/sh
-
-#
-# Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @author Michael McMahon
-# @bug 5077773
-# @summary Change in behaviour w.r.t jdk1.4.2 when loading resourcebundles
-#
-# ${TESTJAVA} is pointing to the jre
-#
-# set platform-dependent variables
-
-OS=`uname -s`
-case "$OS" in
-  SunOS | Darwin | AIX )
-    PS=":"
-    FS="/"
-    ;;
-  Linux )
-    PS=":"
-    FS="/"
-    ;;
-  CYGWIN* )
-    PS=";"
-    FS="/"
-    ;;
-  Windows* )
-    PS=";"
-    FS="\\"
-    ;;
-  * )
-    echo "Unrecognized system!"
-    exit 1;
-    ;;
-esac
-
-cp ${TESTSRC}${FS}foo.jar .
-
-${COMPILEJAVA}${FS}bin${FS}javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . \
-    ${TESTSRC}${FS}B5077773.java
-
-WD=`pwd`
-${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} B5077773
-
--- a/jdk/test/java/net/URLClassLoader/closetest/CloseTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/net/URLClassLoader/closetest/CloseTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,24 +26,33 @@
  * @bug 4167874
  * @modules java.logging
  *          jdk.httpserver
+ *          jdk.compiler
  * @library ../../../../com/sun/net/httpserver
- * @library /lib/testlibrary
- * @build FileServerHandler jdk.testlibrary.FileUtils
- * @run shell build.sh
+ *          /lib/testlibrary
+ *          /test/lib
+ * @build FileServerHandler JarUtils CompilerUtils
  * @run main/othervm CloseTest
  * @summary URL-downloaded jar files can consume all available file descriptors
  */
 
 import java.io.File;
+import java.io.IOException;
 import java.lang.reflect.Method;
 import java.net.URLClassLoader;
 import java.net.InetSocketAddress;
 import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
 import com.sun.net.httpserver.HttpContext;
 import com.sun.net.httpserver.HttpServer;
 
+import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
+
 public class CloseTest extends Common {
-
+    private static final String WORK_DIR = System.getProperty("user.dir")
+            + "/";
 //
 // needs two jar files test1.jar and test2.jar with following structure
 //
@@ -54,39 +63,31 @@
 //
 // and a directory hierarchy with the same structure/contents
 
-    public static void main (String args[]) throws Exception {
+    public static void main(String args[]) throws Exception {
+        setup();
 
-        String workdir = System.getProperty("test.classes");
-        if (workdir == null) {
-            workdir = args[0];
-        }
-        if (!workdir.endsWith("/")) {
-            workdir = workdir+"/";
-        }
+        startHttpServer(WORK_DIR + "serverRoot/");
 
-        startHttpServer (workdir+"serverRoot/");
-
-        String testjar = workdir + "test.jar";
-        copyFile (workdir+"test1.jar", testjar);
-        test (testjar, 1);
+        String testjar = WORK_DIR + "test.jar";
+        copyFile(WORK_DIR + "test1.jar", testjar);
+        test(testjar, 1);
 
         // repeat test with different implementation
         // of test.jar (whose TestClass.getValue() returns 2
-
-        copyFile (workdir+"test2.jar", testjar);
-        test (testjar, 2);
+        copyFile(WORK_DIR + "test2.jar", testjar);
+        test(testjar, 2);
 
         // repeat test using a directory of files
-        String testdir=workdir+"testdir/";
-        rm_minus_rf (new File(testdir));
-        copyDir (workdir+"test1/", testdir);
-        test (testdir, 1);
+        String testdir = WORK_DIR + "testdir/";
+        rm_minus_rf(new File(testdir));
+        copyDir(WORK_DIR + "test1/", testdir);
+        test(testdir, 1);
 
-        testdir=workdir+"testdir/";
-        rm_minus_rf (new File(testdir));
-        copyDir (workdir+"test2/", testdir);
-        test (testdir, 2);
-        getHttpServer().stop (3);
+        testdir = WORK_DIR + "testdir/";
+        rm_minus_rf(new File(testdir));
+        copyDir(WORK_DIR + "test2/", testdir);
+        test(testdir, 2);
+        getHttpServer().stop(3);
     }
 
     // create a loader on jarfile (or directory), plus a http loader
@@ -98,47 +99,48 @@
     // check existing classes can be loaded
     // check boot classes can be loaded
 
-    static void test (String name, int expectedValue) throws Exception {
-        URL url = new URL ("file", null, name);
+    static void test(String name, int expectedValue) throws Exception {
+
+        URL url = new URL("file", null, name);
         URL url2 = getServerURL();
-        System.out.println ("Doing tests with URL: " + url + " and " + url2);
+        System.out.println("Doing tests with URL: " + url + " and " + url2);
         URL[] urls = new URL[2];
-        urls[0] =  url;
-        urls[1] =  url2;
-        URLClassLoader loader = new URLClassLoader (urls);
-        Class testclass = loadClass ("com.foo.TestClass", loader, true);
-        Class class2 = loadClass ("Test", loader, true); // from http
+        urls[0] = url;
+        urls[1] = url2;
+        URLClassLoader loader = new URLClassLoader(urls);
+        Class testclass = loadClass("com.foo.TestClass", loader, true);
+        Class class2 = loadClass("Test", loader, true); // from http
         class2.newInstance();
         Object test = testclass.newInstance();
         Method method = testclass.getDeclaredMethods()[0]; // int getValue();
-        int res = (Integer) method.invoke (test);
+        int res = (Integer) method.invoke(test);
 
         if (res != expectedValue) {
-            throw new RuntimeException ("wrong value from getValue() ["+res+
-                        "/"+expectedValue+"]");
+            throw new RuntimeException("wrong value from getValue() [" + res +
+                    "/" + expectedValue + "]");
         }
 
         // should find /resource1
-        URL u1 = loader.findResource ("com/foo/Resource1");
+        URL u1 = loader.findResource("com/foo/Resource1");
         if (u1 == null) {
-            throw new RuntimeException ("can't find com/foo/Resource1 in test1.jar");
+            throw new RuntimeException("can't find com/foo/Resource1 in test1.jar");
         }
-        loader.close ();
+        loader.close();
 
         // should NOT find /resource2 even though it is in jar
-        URL u2 = loader.findResource ("com/foo/Resource2");
+        URL u2 = loader.findResource("com/foo/Resource2");
         if (u2 != null) {
-            throw new RuntimeException ("com/foo/Resource2 unexpected in test1.jar");
+            throw new RuntimeException("com/foo/Resource2 unexpected in test1.jar");
         }
 
         // load tests
-        loadClass ("com.foo.TestClass1", loader, false);
-        loadClass ("com.foo.TestClass", loader, true);
-        loadClass ("java.util.ArrayList", loader, true);
+        loadClass("com.foo.TestClass1", loader, false);
+        loadClass("com.foo.TestClass", loader, true);
+        loadClass("java.util.ArrayList", loader, true);
 
         // now check we can delete the path
-        rm_minus_rf (new File(name));
-        System.out.println (" ... OK");
+        rm_minus_rf(new File(name));
+        System.out.println(" ... OK");
     }
 
     static HttpServer httpServer;
@@ -147,17 +149,54 @@
         return httpServer;
     }
 
-    static URL getServerURL () throws Exception {
+    static URL getServerURL() throws Exception {
         int port = httpServer.getAddress().getPort();
-        String s = "http://127.0.0.1:"+port+"/";
+        String s = "http://127.0.0.1:" + port + "/";
         return new URL(s);
     }
 
-    static void startHttpServer (String docroot) throws Exception {
-        httpServer = HttpServer.create (new InetSocketAddress(0), 10);
-        HttpContext ctx = httpServer.createContext (
+    static void startHttpServer(String docroot) throws Exception {
+        httpServer = HttpServer.create(new InetSocketAddress(0), 10);
+        HttpContext ctx = httpServer.createContext(
                 "/", new FileServerHandler(docroot)
         );
         httpServer.start();
     }
+
+    /**
+     * Prepare jars files for the tests
+     */
+    private static void setup () throws IOException {
+        String[] tests = new String[]{"test1", "test2"};
+        Path workDir = Paths.get(WORK_DIR);
+        Path testSrc = Paths.get(System.getProperty("test.src"));
+        for (String test : tests) {
+            Path testSrcDir =  testSrc.resolve(test);
+            Path testTargetDir = workDir.resolve(test);
+            // Compile sources for corresponding test
+            CompilerUtils.compile(testSrcDir, testTargetDir);
+            // Copy all resources
+            Path packages = Paths.get("com", "foo");
+            Path copySrcDir = testSrcDir.resolve(packages);
+            Path copyTargetDir = testTargetDir.resolve(packages);
+            Files.createDirectories(copyTargetDir);
+            Path res1 = Paths.get("Resource1");
+            Path res2 = Paths.get("Resource2");
+            Files.copy(copySrcDir.resolve(res1), copyTargetDir.resolve(res1),
+                       REPLACE_EXISTING);
+            Files.copy(copySrcDir.resolve(res2), copyTargetDir.resolve(res2),
+                       REPLACE_EXISTING);
+            // Create jar
+            JarUtils.createJarFile(workDir.resolve(test + ".jar"), testTargetDir);
+        }
+
+        // Copy and compile server test class
+        Path serverRoot = Paths.get("serverRoot");
+        Path targetDir = workDir.resolve(serverRoot);
+        Path file = Paths.get("Test.java");
+        Files.createDirectories(targetDir);
+        Files.copy(testSrc.resolve(serverRoot).resolve(file),
+                   targetDir.resolve(file), REPLACE_EXISTING);
+        CompilerUtils.compile(targetDir, targetDir);
+    }
 }
--- a/jdk/test/java/net/URLClassLoader/closetest/Common.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/net/URLClassLoader/closetest/Common.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,7 +24,7 @@
 import java.io.*;
 import java.net.*;
 import java.nio.file.Files;
-import jdk.testlibrary.FileUtils;
+import jdk.test.lib.util.FileUtils;
 import static java.nio.file.StandardCopyOption.*;
 
 public class Common {
--- a/jdk/test/java/net/URLClassLoader/closetest/GetResourceAsStream.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/net/URLClassLoader/closetest/GetResourceAsStream.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,16 +24,25 @@
 /**
  * @test
  * @bug 6899919
- * @library /lib/testlibrary
- * @build jdk.testlibrary.FileUtils
- * @run shell build2.sh
+ * @library /lib/testlibrary /test/lib
+ * @modules jdk.compiler
+ * @build JarUtils CompilerUtils
  * @run main/othervm GetResourceAsStream
  */
 
-import java.io.*;
-import java.net.*;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+import java.nio.file.StandardOpenOption;
 
 public class GetResourceAsStream extends Common {
+    private static  final String WORK_DIR = System.getProperty("user.dir");
 
 /*
  * We simply test various scenarios with class/resource files
@@ -42,35 +51,30 @@
  * on Windows. It will still run correctly on other platforms
  */
     public static void main (String args[]) throws Exception {
-
-        String workdir = System.getProperty("test.classes");
-        if (workdir == null) {
-            workdir = args[0];
-        }
+        setup();
 
         /* the jar we copy for each test */
-        File srcfile = new File (workdir, "foo.jar");
+        File srcfile = new File(WORK_DIR, "foo.jar");
 
         /* the jar we use for the test */
-        File testfile = new File (workdir, "test.jar");
+        File testfile = new File(WORK_DIR, "test.jar");
 
-        copyFile (srcfile, testfile);
-        test (testfile, false, false);
+        copyFile(srcfile, testfile);
+        test(testfile, false, false);
 
-        copyFile (srcfile, testfile);
-        test (testfile, true, false);
+        copyFile(srcfile, testfile);
+        test(testfile, true, false);
 
-        copyFile (srcfile, testfile);
-        test (testfile, true, true);
+        copyFile(srcfile, testfile);
+        test(testfile, true, true);
 
         // repeat test using a directory of files
 
-        File testdir= new File (workdir, "testdir");
-        File srcdir= new File (workdir, "test3");
+        File testdir = new File(WORK_DIR, "testdir");
+        File srcdir = new File(WORK_DIR, "test3");
 
-        copyDir (srcdir, testdir);
-        test (testdir, true, false);
-
+        copyDir(srcdir, testdir);
+        test(testdir, true, false);
     }
 
     // create a loader on jarfile (or directory)
@@ -82,7 +86,7 @@
     static void test (File file, boolean loadclass, boolean readall)
         throws Exception
     {
-        URL[] urls = new URL[] {file.toURL()};
+        URL[] urls = new URL[] {file.toURI().toURL()};
         System.out.println ("Doing tests with URL: " + urls[0]);
         URLClassLoader loader = new URLClassLoader (urls);
         if (loadclass) {
@@ -97,7 +101,7 @@
 
         loader.close ();
 
-        // shouuld not find bye.txt now
+        // should not find bye.txt now
         InputStream s1 = loader.getResourceAsStream("bye.txt");
         if (s1 != null) {
             throw new RuntimeException ("closed loader returned resource");
@@ -107,4 +111,26 @@
         rm_minus_rf (file);
         System.out.println (" ... OK");
     }
+
+    /**
+     * Prepare jars files for the tests
+     */
+    private static void setup () throws IOException {
+        Path classes = Paths.get(WORK_DIR);
+        Path testSrc = Paths.get(System.getProperty("test.src"),
+                "test1", "com", "foo", "TestClass.java");
+        Path targetDir = classes.resolve("test3");
+        Path testTarget = targetDir.resolve("TestClass.java");
+        Files.createDirectories(targetDir);
+        Files.copy(testSrc, testTarget, StandardCopyOption.REPLACE_EXISTING);
+        // Compile sources for corresponding test
+        CompilerUtils.compile(targetDir, targetDir);
+        // Prepare txt files
+        Files.write(targetDir.resolve("hello.txt"), "Hello world".getBytes(),
+                    StandardOpenOption.CREATE);
+        Files.write(targetDir.resolve("bye.txt"), "Bye world".getBytes(),
+                    StandardOpenOption.CREATE);
+        // Create jar
+        JarUtils.createJarFile(classes.resolve("foo.jar"), targetDir);
+    }
 }
--- a/jdk/test/java/net/URLClassLoader/closetest/build.sh	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,78 +0,0 @@
-#!/bin/sh
-# 
-# Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-# 
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-# 
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-# 
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-# 
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-# 
-#
-#
-# This script builds the test files for the test
-# but not the actual test sources themselves.
-#
-if [ "${TESTSRC}" = "" ]
-then
-  echo "TESTSRC not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTSRC=${TESTSRC}"
-
-if [ "${TESTJAVA}" = "" ]
-then
-  echo "TESTJAVA not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTJAVA=${TESTJAVA}"
-
-if [ "${COMPILEJAVA}" = "" ]; then
-  COMPILEJAVA="${TESTJAVA}"
-fi
-echo "COMPILEJAVA=${COMPILEJAVA}"
-
-if [ "${TESTCLASSES}" = "" ]
-then
-  echo "TESTCLASSES not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-
-JAVAC="${COMPILEJAVA}/bin/javac"
-JAR="${COMPILEJAVA}/bin/jar"
-
-rm -rf ${TESTCLASSES}/test1
-rm -rf ${TESTCLASSES}/test2
-rm -rf ${TESTCLASSES}/serverRoot
-mkdir -p ${TESTCLASSES}/test1/com/foo
-mkdir -p ${TESTCLASSES}/test2/com/foo
-mkdir -p ${TESTCLASSES}/serverRoot
-
-cd ${TESTSRC}/test1/com/foo
-cp * ${TESTCLASSES}/test1/com/foo
-cd ${TESTCLASSES}/test1
-${JAVAC} ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} com/foo/*.java
-${JAR} ${TESTTOOLVMOPTS} cvf ../test1.jar com/foo/*.class com/foo/Resource*
-
-cd ${TESTSRC}/test2/com/foo
-cp * ${TESTCLASSES}/test2/com/foo
-cd ${TESTCLASSES}/test2
-${JAVAC} ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} com/foo/*.java
-${JAR} ${TESTTOOLVMOPTS} cvf ../test2.jar com/foo/*.class com/foo/Resource*
-
-cp ${TESTSRC}/serverRoot/Test.java ${TESTCLASSES}/serverRoot
-cd ${TESTCLASSES}/serverRoot
-${JAVAC} ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} Test.java
--- a/jdk/test/java/net/URLClassLoader/closetest/build2.sh	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-#!/bin/sh
-#
-#  Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
-#  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-#  This code is free software; you can redistribute it and/or modify it
-#  under the terms of the GNU General Public License version 2 only, as
-#  published by the Free Software Foundation.
-#
-#  This code is distributed in the hope that it will be useful, but WITHOUT
-#  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-#  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-#  version 2 for more details (a copy is included in the LICENSE file that
-#  accompanied this code).
-#
-#  You should have received a copy of the GNU General Public License version
-#  2 along with this work; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-#  Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-#  or visit www.oracle.com if you need additional information or have any
-#  questions.
-#
-if [ "${TESTSRC}" = "" ]
-then
-  echo "TESTSRC not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTSRC=${TESTSRC}"
-
-if [ "${TESTJAVA}" = "" ]
-then
-  echo "TESTJAVA not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTJAVA=${TESTJAVA}"
-
-if [ "${TESTCLASSES}" = "" ]
-then
-  echo "TESTCLASSES not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-
-JAVAC="${TESTJAVA}/bin/javac"
-JAR="${TESTJAVA}/bin/jar"
-
-rm -rf ${TESTCLASSES}/test3
-mkdir -p ${TESTCLASSES}/test3
-
-echo "Hello world" > ${TESTCLASSES}/test3/hello.txt
-echo "Bye world" > ${TESTCLASSES}/test3/bye.txt
-cp ${TESTSRC}/test1/com/foo/TestClass.java ${TESTCLASSES}/test3
-cd ${TESTCLASSES}/test3
-${JAVAC} -d . TestClass.java
-
-${JAR} cvf foo.jar hello.txt bye.txt com/foo/TestClass.class
-rm -f ../foo.jar
-mv foo.jar ..
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/net/URLClassLoader/getresourceasstream/TestDriver.java	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * @test
+ * @bug 5103449
+ * @summary REGRESSION: getResourceAsStream is broken in JDK1.5.0-rc
+ * @library /test/lib
+ * @build jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.process.ProcessTools
+ *        Test
+ * @run main/othervm TestDriver
+ */
+
+import jdk.test.lib.JDKToolFinder;
+import jdk.test.lib.process.ProcessTools;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
+
+public class TestDriver {
+    private static final String ARCHIVE_NAME = "test.jar";
+    private static final String TEST_NAME = "Test";
+    private static final String POLICY_FILE = "policy";
+    public static void main(String[] args)
+            throws Throwable {
+
+        Path userDir = Paths.get(System.getProperty("user.dir"));
+        String java = JDKToolFinder.getTestJDKTool("java");
+        String basename = userDir.getFileName().toString();
+        setup(userDir);
+        ProcessBuilder[] tests = new ProcessBuilder[]{
+                new ProcessBuilder(
+                        java, TEST_NAME, "./" + ARCHIVE_NAME
+                ),
+                new ProcessBuilder(
+                        java, "-cp", ".",
+                        "-Djava.security.policy=file:./policy",
+                        "-Djava.security.manager",
+                        TEST_NAME, "./" + ARCHIVE_NAME
+                ),
+                new ProcessBuilder(
+                        java, "-cp", ".",
+                        "-Djava.security.policy=file:./policy",
+                        "-Djava.security.manager",
+                        TEST_NAME, "./" + ARCHIVE_NAME
+                ),
+                new ProcessBuilder(
+                        java, "-cp", "..",
+                        "-Djava.security.policy=file:../policy",
+                        "-Djava.security.manager",
+                        TEST_NAME, "../" + ARCHIVE_NAME
+                ).directory(userDir.resolve("tmp").toFile()),
+                new ProcessBuilder(
+                        java, "-cp", basename,
+                        "-Djava.security.policy=file:" + basename + "/policy",
+                        "-Djava.security.manager",
+                        TEST_NAME, basename + "/" + ARCHIVE_NAME
+                ).directory(userDir.resolve("..").toFile())};
+        for (ProcessBuilder test : tests) {
+            runTest(test);
+        }
+    }
+
+    private static void setup(Path userDir) throws IOException {
+        Path src = Paths.get(System.getProperty("test.src"));
+        Path testJar = src.resolve(ARCHIVE_NAME);
+        Path policy = src.resolve(POLICY_FILE);
+        Path testClass = Paths.get(System.getProperty("test.classes"),
+                                   TEST_NAME + ".class");
+        Files.copy(testJar, userDir.resolve(ARCHIVE_NAME), REPLACE_EXISTING);
+        Files.copy(policy, userDir.resolve(POLICY_FILE), REPLACE_EXISTING);
+        Files.copy(testClass, userDir.resolve(TEST_NAME + ".class"),
+                   REPLACE_EXISTING);
+        Files.createDirectories(userDir.resolve("tmp"));
+    }
+
+    private static void runTest(ProcessBuilder pb) throws Exception {
+        System.out.println("Testing with command: [" + pb.command() + "]");
+        ProcessTools.executeProcess(pb)
+                    .outputTo(System.out)
+                    .errorTo(System.err)
+                    .shouldHaveExitValue(0);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/net/URLClassLoader/getresourceasstream/policy	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+grant {
+    permission java.lang.RuntimePermission "createClassLoader";
+};
--- a/jdk/test/java/net/URLClassLoader/getresourceasstream/test.sh	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,71 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-set -x
-# @test
-# @bug 5103449
-# @run shell test.sh
-# @summary REGRESSION: getResourceAsStream is broken in JDK1.5.0-rc
-#      
-
-
-cat << POLICY > policy
-grant {
-    permission java.lang.RuntimePermission "createClassLoader";
-};
-POLICY
-
-checkExit () {
-    if [ $? != 0 ]; then
-	exit $1;
-    fi
-}
-
-${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . ${TESTSRC}/Test.java
-cp ${TESTSRC}/test.jar .
-
-${TESTJAVA}/bin/java ${TESTVMOPTS} Test ./test.jar
-checkExit 1
-
-# try with security manager
-
-${TESTJAVA}/bin/java ${TESTVMOPTS} -Djava.security.policy=file:./policy \
-		-Djava.security.manager Test ./test.jar
-checkExit 2
-
-mkdir tmp
-cd tmp
-${TESTJAVA}/bin/java ${TESTVMOPTS} -Djava.security.policy=file:../policy \
-		-cp .. -Djava.security.manager Test ../test.jar
-checkExit 3
-
-cd ..
-THISDIR=$(basename $(pwd))
-cd ..
-${TESTJAVA}/bin/java ${TESTVMOPTS} -Djava.security.policy=file:$THISDIR/policy \
-		-cp $THISDIR -Djava.security.manager Test $THISDIR/test.jar
-checkExit 4
-
-exit 0
--- a/jdk/test/java/net/URLClassLoader/sealing/CheckSealed.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/net/URLClassLoader/sealing/CheckSealed.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -21,13 +21,6 @@
  * questions.
  */
 
-/*
- * @test
- * @bug 4244970
- * @summary Test to see if sealing violation is detected correctly
- * @run shell checksealed.sh
- *
- */
 public class CheckSealed {
 
     public static void main(String[] argv) throws Exception {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/net/URLClassLoader/sealing/CheckSealedTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * @test
+ * @bug 4244970
+ * @summary Test to see if sealing violation is detected correctly
+ * @library /test/lib
+ * @build jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.process.OutputAnalyzer
+ * @run main CheckSealedTest
+ */
+
+import jdk.test.lib.JDKToolFinder;
+import jdk.test.lib.process.ProcessTools;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+
+import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
+
+public class CheckSealedTest {
+    private static final String ARCHIVE_NAME = "b.jar";
+    private static final String TEST_NAME = "CheckSealed";
+    public static void main(String[] args)
+            throws Throwable {
+
+        String baseDir = System.getProperty("user.dir") + File.separator;
+        String javac = JDKToolFinder.getTestJDKTool("javac");
+        String java = JDKToolFinder.getTestJDKTool("java");
+
+        setup(baseDir);
+        String srcDir = System.getProperty("test.src");
+        String cp = srcDir + File.separator + "a" + File.pathSeparator
+                + srcDir + File.separator + "b.jar" + File.pathSeparator
+                + ".";
+        List<String[]> allCMDs = List.of(
+                // Compile command
+                new String[]{
+                        javac, "-cp", cp, "-d", ".",
+                        srcDir + File.separator + TEST_NAME + ".java"
+                },
+                // Run test the first time
+                new String[]{
+                        java, "-cp", cp, TEST_NAME, "1"
+                },
+                // Run test the second time
+                new String[]{
+                        java, "-cp", cp, TEST_NAME, "2"
+                }
+        );
+
+        for (String[] cmd : allCMDs) {
+            ProcessTools.executeCommand(cmd)
+                        .outputTo(System.out)
+                        .errorTo(System.out)
+                        .shouldHaveExitValue(0);
+        }
+    }
+
+    private static void setup(String baseDir) throws IOException {
+        Path testJar = Paths.get(System.getProperty("test.src"), ARCHIVE_NAME);
+        Files.copy(testJar, Paths.get(baseDir, ARCHIVE_NAME), REPLACE_EXISTING);
+    }
+}
--- a/jdk/test/java/net/URLClassLoader/sealing/checksealed.sh	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-#! /bin/sh
-
-#
-# Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-#
-
-OS=`uname -s`
-case "$OS" in
-  SunOS | Darwin | AIX )
-    PS=":"
-    FS="/"
-    ;;
-  Linux )
-    PS=":"
-    FS="/"
-    ;;
-  CYGWIN* )
-    PS=";"
-    FS="/"
-    ;;
-  Windows* )
-    PS=";"
-    FS="\\"
-    ;;
-  * )
-    echo "Unrecognized system!"
-    exit 1;
-    ;;
-esac
-
-
-if [ x"$TESTJAVA" = x ]; then TESTJAVA=$1; fi
-if [ x"$COMPILEJAVA" = x ]; then COMPILEJAVA=$1; fi
-if [ x"$TESTSRC" = x ]; then TESTSRC=.; fi
-
-CLASSPATH=".${PS}${TESTSRC}${FS}a${PS}${TESTSRC}${FS}b.jar"
-
-${COMPILEJAVA}${FS}bin${FS}javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -classpath "${CLASSPATH}" -d . \
-    ${TESTSRC}${FS}CheckSealed.java
-${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -cp "${CLASSPATH}" CheckSealed 1
-if [ $? != 0 ]; then exit 1; fi
-${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -cp "${CLASSPATH}" CheckSealed 2
-if [ $? != 0 ]; then exit 1; fi
--- a/jdk/test/java/net/URLConnection/6212146/Test.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/net/URLConnection/6212146/Test.java	Wed Jul 05 23:32:48 2017 +0200
@@ -21,49 +21,43 @@
  * questions.
  */
 
-import java.net.*;
-import java.io.*;
+import java.net.URL;
+import java.net.URLConnection;
+import java.nio.file.Paths;
 
 public class Test {
 
     public static void main(String[] args)
          throws Exception {
-      String BASE_DIR = args[0];
-      String ARCHIVE_NAME = args[1];
-      String lProperty = System.getProperty( "do.iterations", "5000" );
-      int lRepetitions = new Integer( lProperty ).intValue();
-      System.out.println ( "Start creating copys of the archive, " + lRepetitions + " times" );
-      for( int i = 0; i < lRepetitions; i++ ) {
-         // Copy the given jar file and add a prefix
-         copyFile( BASE_DIR, ARCHIVE_NAME, i);
+        String baseDir = args[0];
+        String archiveName = args[1];
+        String lProperty = System.getProperty("do.iterations", "5000");
+        int lRepetitions = Integer.valueOf(lProperty);
+        System.out.println("Start creating copys of the archive, "
+                + lRepetitions + " times");
+        for (int i = 0; i < lRepetitions; i++) {
+            // Copy the given jar file and add a prefix
+            copyFile(baseDir, archiveName, i);
+        }
+        System.out.println("Start opening the archives archive, "
+                + lRepetitions + " times");
+        System.out.println("First URL is jar:" + Paths.get(baseDir,
+                0 + archiveName).toUri() + "!/foo/Test.class");
+        for (int i = 0; i < lRepetitions; i++) {
+            // Create URL
+            String lURLPath = "jar:" + Paths.get(baseDir, i
+                    + archiveName).toUri() + "!/foo/Test.class";
+            URL lURL = new URL(lURLPath);
+            // Open URL Connection
+            try {
+                URLConnection lConnection = lURL.openConnection();
+                lConnection.getInputStream();
+            } catch (java.io.FileNotFoundException fnfe) {
+                // Ignore this one because we expect this one
+            } catch (java.util.zip.ZipException ze) {
+                throw new RuntimeException("Test failed: " + ze.getMessage());
+            }
       }
-      System.out.println ( "Start opening the archives archive, " + lRepetitions + " times" );
-      System.out.println ( "First URL is jar:file://" + BASE_DIR + "1" + ARCHIVE_NAME + "!/foo/Test.class");
-      for( int i = 0; i < lRepetitions; i++ ) {
-         // Create ULR
-         String lURLPath = "jar:file://" + BASE_DIR + i + ARCHIVE_NAME + "!/foo/Test.class";
-         URL lURL = new URL( lURLPath );
-         // Open URL Connection
-         try {
-            URLConnection lConnection = lURL.openConnection();
-            lConnection.getInputStream();
-         } catch( java.io.FileNotFoundException fnfe ) {
-            // Ignore this one because we expect this one
-         } catch( java.util.zip.ZipException ze ) {
-            throw new RuntimeException ("Test failed: " + ze.getMessage());
-         }
-      }
-      //System.out.println ( "Done testing, waiting 20 seconds for checking" );
-      //System.out.println ( "Cleaning up");
-      //for( int i = 0; i < lRepetitions; i++ ) {
-         // Copy the given jar file and add a prefix
-         //deleteFile( BASE_DIR, i, ARCHIVE_NAME);
-      ////}
-   }
-
-   private static void deleteFile (String BASE_DIR, int pIndex, String pArchiveName) {
-         java.io.File file = new java.io.File (BASE_DIR, pIndex + pArchiveName );
-         file.delete ();
    }
 
    private static void copyFile( String pBaseDir, String pArchiveName, int pIndex) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/net/URLConnection/6212146/TestDriver.java	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * @test
+ * @bug 6212146
+ * @summary URLConnection.connect() fails on JAR Entry it creates
+ * file handler leak
+ * @library /test/lib
+ * @build jdk.test.lib.JDKToolFinder
+ *        jdk.test.lib.process.ProcessTools
+ *        Test
+ * @run main/othervm TestDriver
+ */
+
+import jdk.test.lib.JDKToolFinder;
+import jdk.test.lib.process.ProcessTools;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
+
+public class TestDriver {
+    private static final String BASE_DIR = System.getProperty("user.dir")
+            +  "/jars/";
+    private static final String ARCHIVE_NAME = "test.jar";
+    private static final String CMD_ULIMIT = "ulimit -n 300;";
+
+    public static void main(String[] args)
+            throws Throwable {
+        setup(BASE_DIR);
+        String testCMD = CMD_ULIMIT + JDKToolFinder.getTestJDKTool("java")
+                + " Test " + BASE_DIR + " " + ARCHIVE_NAME;
+        boolean isWindows = System.getProperty("os.name").startsWith("Windows");
+        if (isWindows) {
+            testCMD = testCMD.replace("\\", "/");
+        }
+        ProcessTools.executeCommand("sh", "-c", testCMD)
+                    .outputTo(System.out)
+                    .errorTo(System.err)
+                    .shouldHaveExitValue(0);
+    }
+
+    private static void setup(String baseDir) throws IOException {
+        Path testJar = Paths.get(System.getProperty("test.src"), ARCHIVE_NAME);
+        Path targetDir = Paths.get(baseDir);
+        Files.createDirectories(targetDir);
+        Files.copy(testJar, targetDir.resolve(ARCHIVE_NAME), REPLACE_EXISTING);
+    }
+}
--- a/jdk/test/java/net/URLConnection/6212146/test.sh	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-#
-#  @test
-#  @run shell/timeout=380 test.sh
-#  @bug 6212146
-#  @summary URLConnection.connect() fails on JAR Entry it creates file handler leak
-#
-# set platform-dependent variables
-
-OS=`uname -s`
-case "$OS" in
-  SunOS | Darwin | AIX )
-    PS=":"
-    FS="/"
-    ;;
-  Linux )
-    PS=":"
-    FS="/"
-    ;;
-  CYGWIN* )
-    PS=";"
-    FS="/"
-    ;;
-  Windows* )
-    PS=";"
-    FS="\\"
-    ;;
-  * )
-    echo "Unrecognized system!"
-    exit 1;
-    ;;
-esac
-
-if [ -d jars ]; then
-    rm -rf jars
-fi
-
-mkdir jars
-
-cp ${TESTSRC}${FS}test.jar  jars
-
-${COMPILEJAVA}${FS}bin${FS}javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . ${TESTSRC}${FS}Test.java
-
-WD=`pwd`
-ulimit -H -n 300
-${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} Test ${WD}/jars/ test.jar
-result=$?
-rm -rf jars
-exit $?
--- a/jdk/test/java/net/URLConnection/UNCTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/net/URLConnection/UNCTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -21,7 +21,16 @@
  * questions.
  */
 
-import java.net.*;
+/**
+ * @test
+ * @bug 4401485
+ * @requires (os.family == "windows")
+ * @summary  Check that URL.openConnection() doesn't open connection to UNC
+ * @run main UNCTest file://jdk/LOCAL-JAVA/jdk1.4/win/README.txt
+ */
+
+import java.net.URL;
+import java.net.URLConnection;
 
 public class UNCTest {
     public static void main(String args[]) throws Exception {
--- a/jdk/test/java/net/URLConnection/UNCTest.sh	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2001, 2002, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-
-# @test
-# @bug 4401485
-# @run shell UNCTest.sh
-# @summary Check that URL.openConnection() doesn't open connection
-#          to UNC.
-
-UNC="file://jdk/LOCAL-JAVA/jdk1.4/win/README.txt"
-
-OS=`uname -s`
-case "$OS" in
-    Windows_95 | Windows_98 | Windows_NT )
-	${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . ${TESTSRC}\\UNCTest.java
-	${TESTJAVA}/bin/java ${TESTVMOPTS} UNCTest ${UNC}
-	exit
-        ;;
-
-    * )
-        echo "This test is not intended for this OS - passing test"
-	exit 0
-        ;;
-esac
--- a/jdk/test/java/net/httpclient/RequestBodyTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/net/httpclient/RequestBodyTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,7 +26,7 @@
  * @modules jdk.incubator.httpclient
  *          java.logging
  *          jdk.httpserver
- * @library /lib/testlibrary/
+ * @library /lib/testlibrary/ /test/lib
  * @compile ../../../com/sun/net/httpserver/LogFilter.java
  * @compile ../../../com/sun/net/httpserver/FileServerHandler.java
  * @build LightWeightHttpServer
@@ -52,7 +52,7 @@
 import java.util.concurrent.Executors;
 import java.util.function.Supplier;
 import javax.net.ssl.SSLContext;
-import jdk.testlibrary.FileUtils;
+import jdk.test.lib.util.FileUtils;
 import static java.nio.charset.StandardCharsets.*;
 import static java.nio.file.StandardOpenOption.*;
 import static jdk.incubator.http.HttpRequest.BodyProcessor.*;
--- a/jdk/test/java/net/httpclient/whitebox/jdk.incubator.httpclient/jdk/incubator/http/ResponseHeadersTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/net/httpclient/whitebox/jdk.incubator.httpclient/jdk/incubator/http/ResponseHeadersTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -214,10 +214,6 @@
         protected ByteBuffer readImpl() throws IOException {
             throw new AssertionError("Bad test assumption: should not have reached here!");
         }
-        @Override
-        protected int readImpl(ByteBuffer buffer) throws IOException {
-            throw new AssertionError("Bad test assumption: should not have reached here!");
-        }
     }
 
     public static HttpHeaders createResponseHeaders(ByteBuffer buffer)
--- a/jdk/test/java/net/spi/URLStreamHandlerProvider/Basic.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/net/spi/URLStreamHandlerProvider/Basic.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -45,7 +45,7 @@
 import javax.tools.StandardJavaFileManager;
 import javax.tools.StandardLocation;
 import javax.tools.ToolProvider;
-import jdk.testlibrary.FileUtils;
+import jdk.test.lib.util.FileUtils;
 import jdk.testlibrary.JDKToolFinder;
 import static java.lang.String.format;
 import static java.util.Arrays.asList;
@@ -55,8 +55,8 @@
  * @bug 8064924
  * @modules jdk.compiler
  * @summary Basic test for URLStreamHandlerProvider
- * @library /lib/testlibrary
- * @build jdk.testlibrary.FileUtils jdk.testlibrary.JDKToolFinder
+ * @library /lib/testlibrary /test/lib
+ * @build jdk.testlibrary.JDKToolFinder
  * @compile Basic.java Child.java
  * @run main Basic
  */
--- a/jdk/test/java/nio/Buffer/LimitDirectMemory.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/nio/Buffer/LimitDirectMemory.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -21,6 +21,35 @@
  * questions.
  */
 
+/*
+ * @test
+ * @bug 4627316 6743526
+ * @summary Test option to limit direct memory allocation
+ * @requires (os.arch == "x86_64") | (os.arch == "amd64") | (os.arch == "sparcv9")
+ * @library /test/lib
+ *
+ * @summary Test: memory is properly limited using multiple buffers
+ * @run main/othervm -XX:MaxDirectMemorySize=10 LimitDirectMemory true 10 1
+ * @run main/othervm -XX:MaxDirectMemorySize=1k LimitDirectMemory true 1k 100
+ * @run main/othervm -XX:MaxDirectMemorySize=10m LimitDirectMemory true 10m 10m
+ *
+ * @summary Test: We can increase the amount of available memory
+ * @run main/othervm -XX:MaxDirectMemorySize=65M LimitDirectMemory false 64M 65M
+ *
+ * @summary Test: Exactly the default amount of memory is available
+ * @run main/othervm LimitDirectMemory false 10 1
+ * @run main/othervm -Xmx64m LimitDirectMemory false 0 DEFAULT
+ * @run main/othervm -Xmx64m LimitDirectMemory true 0 DEFAULT+1
+ *
+ * @summary Test: We should be able to eliminate direct memory allocation entirely
+ * @run main/othervm -XX:MaxDirectMemorySize=0 LimitDirectMemory true 0 1
+ *
+ * @summary Test: Setting the system property should not work so we should be able
+ *                to allocate the default amount
+ * @run main/othervm -Dsun.nio.MaxDirectMemorySize=1K -Xmx64m
+ *                   LimitDirectMemory false DEFAULT-1 DEFAULT/2
+ */
+
 import java.nio.ByteBuffer;
 import java.util.Properties;
 
@@ -28,8 +57,13 @@
     private static final int K = 1024;
 
     public static void main(String [] args) throws Exception {
-        if (args.length < 2)
-            throw new RuntimeException();
+        if (args.length < 2) {
+            throw new IllegalArgumentException("Usage: "
+                    + "java LimitDirectMemory"
+                    + " <OOME_expected(true|false)>"
+                    + " <fill_direct_memory>"
+                    + " <size_per_buffer>");
+        }
         boolean throwp = parseThrow(args[0]);
         int size = parseSize(args[1]);
         int incr = (args.length > 2 ? parseSize(args[2]) : size);
--- a/jdk/test/java/nio/Buffer/LimitDirectMemory.sh	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,93 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 4627316 6743526
-# @summary Test option to limit direct memory allocation
-#
-# @requires (os.arch == "x86_64") | (os.arch == "amd64") | (os.arch == "sparcv9")
-# @build LimitDirectMemory
-# @run shell LimitDirectMemory.sh
-
-TMP1=tmp_$$
-
-runTest() {
-  echo "Testing: $*"
-  ${TESTJAVA}/bin/java ${TESTVMOPTS} $*
-  if [ $? -eq 0 ]
-  then echo "--- passed as expected"
-  else
-    echo "--- failed"
-    exit 1
-  fi
-}
-
-
-launchFail() {
-  echo "Testing: -XX:MaxDirectMemorySize=$* -cp ${TESTCLASSES} \
-     LimitDirectMemory true DEFAULT DEFAULT+1M"
-  ${TESTJAVA}/bin/java ${TESTVMOPTS} -XX:MaxDirectMemorySize=$* -cp ${TESTCLASSES} \
-     LimitDirectMemory true DEFAULT DEFAULT+1M > ${TMP1} 2>&1
-  cat ${TMP1}
-  cat ${TMP1} | grep -s "Unrecognized VM option: \'MaxDirectMemorySize="
-  if [ $? -ne 0 ]
-    then echo "--- failed as expected"
-  else
-    echo "--- failed"
-    exit 1
-  fi
-}
-
-# $java LimitDirectMemory throwp fill_direct_memory size_per_buffer
-
-# Memory is properly limited using multiple buffers.
-runTest -XX:MaxDirectMemorySize=10 -cp ${TESTCLASSES} LimitDirectMemory true 10 1
-runTest -XX:MaxDirectMemorySize=1k -cp ${TESTCLASSES} LimitDirectMemory true 1k 100
-runTest -XX:MaxDirectMemorySize=10m -cp ${TESTCLASSES} LimitDirectMemory true 10m 10m
-
-# We can increase the amount of available memory.
-runTest -XX:MaxDirectMemorySize=65M -cp ${TESTCLASSES} \
-  LimitDirectMemory false 64M 65M
-
-# Exactly the default amount of memory is available.
-runTest -cp ${TESTCLASSES} LimitDirectMemory false 10 1
-runTest -Xmx64m -cp ${TESTCLASSES} LimitDirectMemory false 0 DEFAULT
-runTest -Xmx64m -cp ${TESTCLASSES} LimitDirectMemory true 0 DEFAULT+1
-
-# We should be able to eliminate direct memory allocation entirely.
-runTest -XX:MaxDirectMemorySize=0 -cp ${TESTCLASSES} LimitDirectMemory true 0 1
-
-# Setting the system property should not work so we should be able to allocate
-# the default amount.
-runTest -Dsun.nio.MaxDirectMemorySize=1K -Xmx64m -cp ${TESTCLASSES} \
-  LimitDirectMemory false DEFAULT-1 DEFAULT/2
-
-# Various bad values fail to launch the VM.
-launchFail foo
-launchFail 10kmt
-launchFail -1
-
-# Clean-up
-rm ${TMP1}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/Buffer/LimitDirectMemoryNegativeTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4627316 6743526
+ * @summary Test option to limit direct memory allocation,
+ *          various bad values fail to launch the VM
+ * @requires (os.arch == "x86_64") | (os.arch == "amd64") | (os.arch == "sparcv9")
+ * @library /test/lib
+ *
+ * @run main LimitDirectMemoryNegativeTest foo
+ * @run main LimitDirectMemoryNegativeTest 10kmt
+ * @run main LimitDirectMemoryNegativeTest -1
+ */
+
+import jdk.test.lib.process.ProcessTools;
+
+public class LimitDirectMemoryNegativeTest {
+
+    private static final String ERR = "Improperly specified VM option 'MaxDirectMemorySize=";
+
+    public static void main(String[] args) throws Exception {
+        if (args.length != 1) {
+            throw new IllegalArgumentException("missing size argument");
+        }
+
+        int exitCode = ProcessTools.executeTestJava(
+                                    "-XX:MaxDirectMemorySize=" + args[0],
+                                    LimitDirectMemoryNegativeTest.class.getName())
+                                   .shouldContain(ERR + args[0])
+                                   .getExitValue();
+        if (exitCode != 1) {
+            throw new RuntimeException("Unexpected exit code: " + exitCode);
+        }
+    }
+}
--- a/jdk/test/java/nio/ByteOrder/NativeOrder.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/nio/ByteOrder/NativeOrder.java	Wed Jul 05 23:32:48 2017 +0200
@@ -32,12 +32,19 @@
 
     public static void main(String[] args) throws Exception {
         ByteOrder bo = ByteOrder.nativeOrder();
-        System.err.println(bo);
+        System.err.println("ByteOrder.nativeOrder:" + bo);
         String arch = System.getProperty("os.arch");
+        System.err.println("os.arch:" + arch);
         if (((arch.equals("i386") && (bo != ByteOrder.LITTLE_ENDIAN))) ||
+            ((arch.equals("amd64") && (bo != ByteOrder.LITTLE_ENDIAN))) ||
+            ((arch.equals("x86_64") && (bo != ByteOrder.LITTLE_ENDIAN))) ||
+            ((arch.equals("ppc64") && (bo != ByteOrder.BIG_ENDIAN))) ||
+            ((arch.equals("ppc64le") && (bo != ByteOrder.LITTLE_ENDIAN))) ||
+            ((arch.equals("s390x") && (bo != ByteOrder.BIG_ENDIAN))) ||
             ((arch.equals("sparc") && (bo != ByteOrder.BIG_ENDIAN)))) {
             throw new Exception("Wrong byte order");
         }
+        System.err.println("test is OK");
     }
 
 }
--- a/jdk/test/java/nio/channels/AsynchronousChannelGroup/AsExecutor.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/nio/channels/AsynchronousChannelGroup/AsExecutor.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -21,12 +21,21 @@
  * questions.
  */
 
-import java.nio.channels.AsynchronousChannelGroup;
-import java.util.concurrent.*;
+/*
+ * @test
+ * @bug 4607272
+ * @summary tests tasks can be submitted to a channel group's thread pool.
+ * @library /lib/testlibrary bootlib
+ * @build JarUtils PrivilegedThreadFactory Attack
+ * @run driver SetupJar
+ * @run main/othervm -Xbootclasspath/a:privileged.jar AsExecutor
+ */
 
-/**
- * Test that arbitrary tasks can be submitted to a channel group's thread pool.
- */
+import java.nio.channels.AsynchronousChannelGroup;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
 
 public class AsExecutor {
 
--- a/jdk/test/java/nio/channels/AsynchronousChannelGroup/Attack.java	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-import java.net.*;
-import java.io.IOException;
-import java.util.concurrent.CountDownLatch;
-
-/**
- * A task that attempts to attack the current host.
- */
-
-public class Attack implements Runnable {
-    private final CountDownLatch latch = new CountDownLatch(1);
-    private volatile boolean failedDueToSecurityException;
-
-    public void Attack() {
-        // check class is on boot class path
-        if (Attack.class.getClassLoader() != null)
-            throw new RuntimeException("Attack class not on boot class path");
-    }
-
-    @Override
-    public void run() {
-        try {
-            new Socket("127.0.0.1", 9999).close();
-            throw new RuntimeException("Connected (not expected)");
-        } catch (IOException e) {
-            throw new RuntimeException("IOException (not expected)");
-        } catch (SecurityException e) {
-            failedDueToSecurityException = true;
-        } finally {
-            latch.countDown();
-        }
-    }
-
-    public void waitUntilDone() throws InterruptedException {
-        latch.await();
-    }
-
-    public boolean failedDueToSecurityException() {
-        return failedDueToSecurityException;
-    }
-}
--- a/jdk/test/java/nio/channels/AsynchronousChannelGroup/PrivilegedThreadFactory.java	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-import java.util.concurrent.ThreadFactory;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-/**
- * The "privileged" ThreadFactory used by the AsExecutor test.
- */
-
-public class PrivilegedThreadFactory implements ThreadFactory {
-    public void PrivilegedThreadPoolFactory() {
-        // check class is on boot class path
-        if (PrivilegedThreadFactory.class.getClassLoader() != null)
-            throw new RuntimeException("PrivilegedThreadFactory class not on boot class path");
-    }
-
-    @Override
-    public Thread newThread(final Runnable r) {
-        return AccessController.doPrivileged(new PrivilegedAction<Thread>() {
-            @Override
-            public Thread run() {
-                Thread t = new Thread(r);
-                t.setDaemon(true);
-                return t;
-            }
-        });
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/channels/AsynchronousChannelGroup/SetupJar.java	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+public class SetupJar {
+
+    public static void main(String args[]) throws Exception {
+        Path classes = Paths.get(System.getProperty("test.classes", ""));
+        JarUtils.createJarFile(Paths.get("privileged.jar"),
+                               classes.resolve("bootlib"));
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/channels/AsynchronousChannelGroup/bootlib/Attack.java	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.io.IOException;
+import java.net.Socket;
+import java.util.concurrent.CountDownLatch;
+
+/**
+ * A task that attempts to attack the current host.
+ */
+
+public class Attack implements Runnable {
+    private final CountDownLatch latch = new CountDownLatch(1);
+    private volatile boolean failedDueToSecurityException;
+
+    public void Attack() {
+        // check class is on boot class path
+        if (Attack.class.getClassLoader() != null)
+            throw new RuntimeException("Attack class not on boot class path");
+    }
+
+    @Override
+    public void run() {
+        try {
+            new Socket("127.0.0.1", 9999).close();
+            throw new RuntimeException("Connected (not expected)");
+        } catch (IOException e) {
+            throw new RuntimeException("IOException (not expected)");
+        } catch (SecurityException e) {
+            failedDueToSecurityException = true;
+        } finally {
+            latch.countDown();
+        }
+    }
+
+    public void waitUntilDone() throws InterruptedException {
+        latch.await();
+    }
+
+    public boolean failedDueToSecurityException() {
+        return failedDueToSecurityException;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/channels/AsynchronousChannelGroup/bootlib/PrivilegedThreadFactory.java	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.util.concurrent.ThreadFactory;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+
+/**
+ * The "privileged" ThreadFactory used by the AsExecutor test.
+ */
+
+public class PrivilegedThreadFactory implements ThreadFactory {
+    public void PrivilegedThreadPoolFactory() {
+        // check class is on boot class path
+        if (PrivilegedThreadFactory.class.getClassLoader() != null)
+            throw new RuntimeException("PrivilegedThreadFactory class not on boot class path");
+    }
+
+    @Override
+    public Thread newThread(final Runnable r) {
+        return AccessController.doPrivileged(new PrivilegedAction<Thread>() {
+            @Override
+            public Thread run() {
+                Thread t = new Thread(r);
+                t.setDaemon(true);
+                return t;
+            }
+        });
+    }
+}
--- a/jdk/test/java/nio/channels/AsynchronousChannelGroup/run_any_task.sh	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-#
-# Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 4607272
-# @summary Unit test for AsynchronousChannelGrou#execute
-# @build AsExecutor PrivilegedThreadFactory Attack
-# @run shell run_any_task.sh
-
-# if TESTJAVA isn't set then we assume an interactive run.
-
-if [ -z "$TESTJAVA" ]; then
-    TESTSRC=.
-    TESTCLASSES=.
-    JAVA=java
-    JAR=jar
-else
-    JAVA="${TESTJAVA}/bin/java"
-    JAR="${TESTJAVA}/bin/jar"
-fi
-
-echo "Creating JAR file ..."
-$JAR -cf "${TESTCLASSES}/Privileged.jar" \
-    -C "${TESTCLASSES}" PrivilegedThreadFactory.class \
-    -C "${TESTCLASSES}" PrivilegedThreadFactory\$1.class \
-    -C "${TESTCLASSES}" Attack.class
-
-echo "Running test ..."
-$JAVA ${TESTVMOPTS} \
-      -Xbootclasspath/a:"${TESTCLASSES}/Privileged.jar" \
-      -classpath "${TESTCLASSES}" \
-      AsExecutor
--- a/jdk/test/java/nio/channels/AsynchronousSocketChannel/Basic.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/nio/channels/AsynchronousSocketChannel/Basic.java	Wed Jul 05 23:32:48 2017 +0200
@@ -24,8 +24,7 @@
 /* @test
  * @bug 4607272 6842687 6878369 6944810 7023403
  * @summary Unit test for AsynchronousSocketChannel(use -Dseed=X to set PRNG seed)
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run main Basic -skipSlowConnectTest
  * @key randomness intermittent
  */
@@ -40,7 +39,7 @@
 import java.util.Set;
 import java.util.concurrent.*;
 import java.util.concurrent.atomic.*;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class Basic {
     private static final Random RAND = RandomFactory.getRandom();
--- a/jdk/test/java/nio/channels/FileChannel/Transfer.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/nio/channels/FileChannel/Transfer.java	Wed Jul 05 23:32:48 2017 +0200
@@ -25,8 +25,7 @@
  * @bug 4434723 4482726 4559072 4795550 5081340 5103988 6984545
  * @summary Test FileChannel.transferFrom and transferTo (use -Dseed=X to set PRNG seed)
  * @library ..
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run testng/timeout=300 Transfer
  * @key randomness
  */
@@ -51,7 +50,7 @@
 import java.util.Random;
 import java.util.concurrent.TimeUnit;
 
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 import org.testng.annotations.Test;
 
--- a/jdk/test/java/nio/channels/Selector/SelectAndClose.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/nio/channels/Selector/SelectAndClose.java	Wed Jul 05 23:32:48 2017 +0200
@@ -23,7 +23,6 @@
 
 /* @test
  * @bug 5004077
- * @key intermittent
  * @summary Check blocking of select and close
  */
 
--- a/jdk/test/java/nio/channels/Selector/WakeupAfterClose.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/nio/channels/Selector/WakeupAfterClose.java	Wed Jul 05 23:32:48 2017 +0200
@@ -24,7 +24,6 @@
 /* @test
  * @bug 6524172
  * @summary Invoking wakeup on closed Selector can throw NPE if close resets interrupt status
- * @key intermittent
  */
 
 import java.io.IOException;
--- a/jdk/test/java/nio/channels/SocketChannel/VectorIO.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/nio/channels/SocketChannel/VectorIO.java	Wed Jul 05 23:32:48 2017 +0200
@@ -23,8 +23,7 @@
 
 /* @test
  * @summary Test socketchannel vector IO (use -Dseed=X to set PRNG seed)
- * @library .. /lib/testlibrary/
- * @build jdk.testlibrary.RandomFactory
+ * @library .. /test/lib
  * @run main VectorIO
  * @key randomness
  */
@@ -34,7 +33,7 @@
 import java.nio.*;
 import java.nio.channels.*;
 import java.util.*;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class VectorIO {
 
--- a/jdk/test/java/nio/file/FileStore/Basic.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/nio/file/FileStore/Basic.java	Wed Jul 05 23:32:48 2017 +0200
@@ -25,9 +25,7 @@
  * @bug 4313887 6873621 6979526 7006126 7020517
  * @summary Unit test for java.nio.file.FileStore
  * @key intermittent
- * @library ..
- * @library .. /lib/testlibrary
- * @build jdk.testlibrary.FileUtils
+ * @library .. /test/lib
  * @run main Basic
  */
 
@@ -35,8 +33,8 @@
 import java.nio.file.attribute.*;
 import java.io.File;
 import java.io.IOException;
-import java.util.*;
-import jdk.testlibrary.FileUtils;
+
+import jdk.test.lib.util.FileUtils;
 
 
 public class Basic {
--- a/jdk/test/java/nio/file/FileSystem/Basic.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/nio/file/FileSystem/Basic.java	Wed Jul 05 23:32:48 2017 +0200
@@ -24,8 +24,7 @@
 /* @test
  * @bug 4313887 6838333 8132497
  * @summary Unit test for java.nio.file.FileSystem
- * @library .. /lib/testlibrary
- * @build jdk.testlibrary.FileUtils
+ * @library .. /test/lib
  * @run main/othervm Basic
  */
 
@@ -41,7 +40,7 @@
 import java.nio.file.Paths;
 import java.nio.file.ProviderNotFoundException;
 import java.util.HashMap;
-import jdk.testlibrary.FileUtils;
+import jdk.test.lib.util.FileUtils;
 
 /**
  * Simple sanity checks for java.nio.file.FileSystem
--- a/jdk/test/java/nio/file/Files/CopyAndMove.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/nio/file/Files/CopyAndMove.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,8 +24,8 @@
 /* @test
  * @bug 4313887 6838333 6917021 7006126 6950237 8006645
  * @summary Unit test for java.nio.file.Files copy and move methods (use -Dseed=X to set PRNG seed)
- * @library .. /lib/testlibrary/
- * @build jdk.testlibrary.* CopyAndMove PassThroughFileSystem
+ * @library .. /test/lib
+ * @build CopyAndMove PassThroughFileSystem
  * @run main/othervm CopyAndMove
  * @key randomness
  */
@@ -39,7 +39,7 @@
 import java.io.*;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class CopyAndMove {
     static final Random rand = RandomFactory.getRandom();
--- a/jdk/test/java/nio/file/Files/StreamLinesTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/nio/file/Files/StreamLinesTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -23,9 +23,8 @@
 
 /* @test
  * @bug 8072773
- * @library /lib/testlibrary/ /lib/testlibrary/bootlib
+ * @library /test/lib /lib/testlibrary/bootlib
  * @build java.base/java.util.stream.OpTestCase
- * @build jdk.testlibrary.RandomFactory
  * @run testng/othervm StreamLinesTest
  * @summary Tests streams returned from Files.lines, primarily focused on
  *          testing the file-channel-based stream stream with supported
@@ -54,7 +53,7 @@
 import java.util.stream.OpTestCase;
 import java.util.stream.Stream;
 import java.util.stream.TestData;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class StreamLinesTest extends OpTestCase {
 
--- a/jdk/test/java/nio/file/WatchService/LotsOfEvents.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/nio/file/WatchService/LotsOfEvents.java	Wed Jul 05 23:32:48 2017 +0200
@@ -25,8 +25,7 @@
  * @bug 6907760 6929532
  * @summary Tests WatchService behavior when lots of events are pending (use -Dseed=X to set PRNG seed)
  * @library ..
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run main/timeout=180 LotsOfEvents
  * @key randomness
  */
@@ -37,7 +36,7 @@
 import static java.nio.file.StandardWatchEventKinds.*;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class LotsOfEvents {
 
--- a/jdk/test/java/security/AccessController/DoPrivAccompliceTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/security/AccessController/DoPrivAccompliceTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,76 +23,90 @@
  * questions.
  */
 
-import java.io.File;
+import jdk.test.lib.process.OutputAnalyzer;
+import jdk.test.lib.process.ProcessTools;
+import jdk.test.lib.util.JarUtils;
+
 import java.io.FileWriter;
 import java.io.IOException;
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 
 /*
  * @test
  * @bug 8048362
- * @compile ../../../lib/testlibrary/JavaToolUtils.java
- *                             DoPrivAccomplice.java DoPrivTest.java
  * @summary Tests the doPrivileged with accomplice Generate two jars
  * (DoPrivTest.jar and DoPrivAccomplice.jar) and grant permission to
- * DoPrivAccmplice.jar for reading user.home property from a PrivilagedAction.
- * Run DoPrivTest.jar and try to access user.home property using
+ * DoPrivAccmplice.jar for reading user.name property from a PrivilagedAction.
+ * Run DoPrivTest.jar and try to access user.name property using
  * DoPrivAccmplice.jar.
- * @modules jdk.compiler
+ *
+ * @library /test/lib
+ *
  * @run main/othervm DoPrivAccompliceTest
  */
 
 public class DoPrivAccompliceTest {
+    private static final String ACTION_SOURCE = DoPrivAccomplice.class.getName();
+    private static final String TEST_SOURCE = DoPrivTest.class.getName();
 
-    private static final String PWD = System.getProperty("test.classes", "./");
-    private static final String ACTION_SOURCE = "DoPrivAccomplice";
-    private static final String TEST_SOURCE = "DoPrivTest";
-
-    public static void createPolicyFile(URI codebaseURL) throws IOException {
-        String codebase = codebaseURL.toString();
+    private static void createPolicyFile(Path jarFile, Path policy) {
+        String codebase = jarFile.toFile().toURI().toString();
         String quotes = "\"";
         StringBuilder policyFile = new StringBuilder();
-        policyFile.append("grant codeBase ").append(quotes).
-                append(codebase).append(quotes).append("{\n").
-                append("permission java.util.PropertyPermission ").
-                append(quotes).append("user.name").append(quotes).
-                append(",").append(quotes).append("read").append(quotes).
-                append(";\n};");
-        try (FileWriter writer = new FileWriter(new File(PWD, "java.policy"))) {
+        policyFile.append("grant codeBase ")
+                  .append(quotes).append(codebase).append(quotes)
+                  .append("{\n")
+                  .append("permission java.util.PropertyPermission ")
+                  .append(quotes).append("user.name").append(quotes)
+                  .append(",")
+                  .append(quotes).append("read").append(quotes)
+                  .append(";\n};");
+        try (FileWriter writer = new FileWriter(policy.toFile())) {
             writer.write(policyFile.toString());
-            writer.close();
         } catch (IOException e) {
-            System.err.println("Error while creating policy file");
-            throw e;
+            throw new Error("Error while creating policy file " + policy, e);
         }
     }
 
     public static void main(String[] args) throws Exception {
-        final File class1 = new File(PWD, ACTION_SOURCE + ".class");
-        final File class2 = new File(PWD, TEST_SOURCE + ".class");
-        final File jarFile1 = new File(PWD, ACTION_SOURCE + ".jar");
-        final File jarFile2 = new File(PWD, TEST_SOURCE + ".jar");
-        System.out.println("Compilation successfull");
-        JavaToolUtils.createJar(jarFile1, Arrays.asList(new File[]{class1}));
+        // copy class files to pwd
+        ClassFileInstaller.main(ACTION_SOURCE, TEST_SOURCE);
+        Path pwd = Paths.get(".");
+        Path jarFile1 = pwd.resolve(ACTION_SOURCE + ".jar").toAbsolutePath();
+        Path jarFile2 = pwd.resolve(TEST_SOURCE + ".jar").toAbsolutePath();
+        Path policy = pwd.resolve("java.policy").toAbsolutePath();
+
+        JarUtils.createJar(jarFile1.toString(), ACTION_SOURCE + ".class");
         System.out.println("Created jar file " + jarFile1);
-        JavaToolUtils.createJar(jarFile2, Arrays.asList(new File[]{class2}));
+        JarUtils.createJar(jarFile2.toString(), TEST_SOURCE + ".class");
         System.out.println("Created jar file " + jarFile2);
-        createPolicyFile(jarFile1.toURI());
+
 
-        List<String> commands = new ArrayList<>();
-        final String pathSepartor = System.getProperty("path.separator");
-        commands.add("-Djava.security.manager");
-        commands.add("-Djava.security.policy=" + PWD + "/java.policy");
-        commands.add("-classpath");
-        commands.add(PWD + "/" + TEST_SOURCE + ".jar" + pathSepartor
-                + PWD + "/" + ACTION_SOURCE + ".jar");
-        commands.add(TEST_SOURCE);
-        if (JavaToolUtils.runJava(commands) == 0) {
-            System.out.println("Test PASSES");
-        }
+        String pathSepartor = System.getProperty("path.separator");
+        String[] commands = {
+                "-Djava.security.manager",
+                "-Djava.security.policy=" + policy,
+                "-classpath", jarFile1 + pathSepartor + jarFile2,
+                TEST_SOURCE
+        };
+
+        String userName = System.getProperty("user.name");
+
+        createPolicyFile(jarFile1, policy);
+        System.out.println("Created policy for " + jarFile1);
+        ProcessTools.executeTestJava(commands)
+                    .shouldHaveExitValue(0)
+                    .shouldContain(userName)
+                    .stderrShouldBeEmpty();
+
+        createPolicyFile(jarFile2, policy);
+        System.out.println("Created policy for " + jarFile2);
+        ProcessTools.executeTestJava(commands)
+                    .shouldNotHaveExitValue(0)
+                    .shouldNotContain(userName)
+                    .stderrShouldContain("java.security.AccessControlException");
+
+        System.out.println("Test PASSES");
     }
-
 }
--- a/jdk/test/java/security/KeyStore/PKCS12/EntryProtectionTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/security/KeyStore/PKCS12/EntryProtectionTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,7 +30,7 @@
 import java.util.List;
 import java.util.Random;
 import javax.crypto.spec.PBEParameterSpec;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 import static java.lang.System.out;
 import java.util.Arrays;
 
@@ -40,7 +40,7 @@
  * @summary Test for feature 'support stronger entry protection'. An entry is
  * stored to keystore with different PasswordProtection objects which are
  * specified by different PBE algorithms (use -Dseed=X to set PRNG seed)
- * @library /lib/testlibrary ../
+ * @library /test/lib /lib/testlibrary ../
  * @key randomness
  */
 public class EntryProtectionTest {
--- a/jdk/test/java/security/MessageDigest/TestDigestIOStream.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/security/MessageDigest/TestDigestIOStream.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,6 +1,5 @@
-
 /*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,7 +31,7 @@
 import java.security.Security;
 import java.util.Arrays;
 import java.util.Random;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 import static java.lang.System.out;
 
 /**
@@ -41,7 +40,7 @@
  * @summary MessageDigest tests with DigestIOStream
  * @author Kevin Liu
  * @key randomness
- * @library /lib/testlibrary
+ * @library /test/lib
  * @run main/timeout=180 TestDigestIOStream
  */
 
--- a/jdk/test/java/security/MessageDigest/TestSameLength.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/security/MessageDigest/TestSameLength.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,6 +1,5 @@
-
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,7 +26,7 @@
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.security.Security;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 /**
  * @test
@@ -36,7 +35,7 @@
  *          algorithm/dataLen/(update,digest methods).
  * @author Kevin Liu
  * @key randomness
- * @library /lib/testlibrary
+ * @library /test/lib
  */
 
 public class TestSameLength {
--- a/jdk/test/java/security/MessageDigest/TestSameValue.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/security/MessageDigest/TestSameValue.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,6 +1,5 @@
-
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,7 +27,7 @@
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.security.Security;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 /**
  * @test
@@ -37,7 +36,7 @@
  *          with various update/digest methods.
  * @author Kevin Liu
  * @key randomness
- * @library /lib/testlibrary
+ * @library /test/lib
  */
 
 public class TestSameValue {
--- a/jdk/test/java/security/Policy/ExtensiblePolicy/ExtensiblePolicyWithJarTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/security/Policy/ExtensiblePolicy/ExtensiblePolicyWithJarTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,13 +27,13 @@
 import java.nio.file.Paths;
 import java.security.AccessController;
 import jdk.testlibrary.ProcessTools;
-import jdk.testlibrary.JarUtils;
+import jdk.test.lib.util.JarUtils;
 
 /**
  * @test
  * @bug 8050402
  * @summary Check policy is extensible with user defined permissions
- * @library /lib/testlibrary
+ * @library /lib/testlibrary /test/lib
  * @compile TVJar/TVPermission.java
  * @run main ExtensiblePolicyWithJarTest
  */
--- a/jdk/test/java/security/Signature/Offsets.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/security/Signature/Offsets.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,7 +30,7 @@
 import java.security.PublicKey;
 import java.security.Signature;
 import java.security.SignatureException;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 /*
  * @test
@@ -41,7 +41,7 @@
  *          get random set of clear text data to sign. After the signature
  *          generation, the test tries to verify signature with the above API
  *          and passing in different signature offset (0, 33, 66, 99).
- * @library /lib/testlibrary
+ * @library /test/lib
  * @run main Offsets SUN NONEwithDSA
  * @run main Offsets SUN SHA1withDSA
  * @run main Offsets SUN SHA224withDSA
--- a/jdk/test/java/util/Base64/TestBase64.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/util/Base64/TestBase64.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,8 +25,7 @@
  * @test 4235519 8004212 8005394 8007298 8006295 8006315 8006530 8007379 8008925
  *       8014217 8025003 8026330 8028397 8129544 8165243
  * @summary tests java.util.Base64
- * @library /lib/testlibrary
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run main TestBase64
  * @key randomness
  */
@@ -43,7 +42,7 @@
 import java.util.List;
 import java.util.Random;
 
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class TestBase64 {
 
--- a/jdk/test/java/util/List/SubList.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/util/List/SubList.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,8 +24,7 @@
 /*
  * @test
  * @bug 8079136
- * @library /lib/testlibrary
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run testng SubList
  * @summary Basic functionality of sublists
  * @key randomness
@@ -46,7 +45,7 @@
 import org.testng.annotations.Test;
 import org.testng.annotations.DataProvider;
 
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 
 public class SubList extends org.testng.Assert {
--- a/jdk/test/java/util/WeakHashMap/GCDuringIteration.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/util/WeakHashMap/GCDuringIteration.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,8 +24,7 @@
 /*
  * @test
  * @bug 6499848
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.RandomFactory
+ * @library /test/lib
  * @run main GCDuringIteration
  * @summary Check that iterators work properly in the presence of
  *          concurrent finalization and removal of elements.
@@ -43,7 +42,7 @@
 import java.util.WeakHashMap;
 import java.util.concurrent.CountDownLatch;
 import java.util.function.BooleanSupplier;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class GCDuringIteration {
 
--- a/jdk/test/java/util/concurrent/ThreadPoolExecutor/ConfigChanges.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/util/concurrent/ThreadPoolExecutor/ConfigChanges.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,8 +25,7 @@
  * @test
  * @bug 6450200
  * @summary Test proper handling of pool state changes
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.RandomFactory
+ * @library /test/lib
  * @run main/othervm ConfigChanges
  * @key randomness
  * @author Martin Buchholz
@@ -45,7 +44,7 @@
 import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.function.Supplier;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class ConfigChanges {
     static final ThreadGroup tg = new ThreadGroup("pool");
--- a/jdk/test/java/util/jar/JarFile/mrjar/MultiReleaseJarAPI.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/util/jar/JarFile/mrjar/MultiReleaseJarAPI.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,9 +26,8 @@
  * @bug 8132734 8144062 8165723
  * @summary Test the extended API and the aliasing additions in JarFile that
  *          support multi-release jar files
- * @library /lib/testlibrary/java/util/jar /lib/testlibrary/
+ * @library /lib/testlibrary/java/util/jar /test/lib
  * @build Compiler JarBuilder CreateMultiReleaseTestJars
- * @build jdk.testlibrary.RandomFactory
  * @run testng MultiReleaseJarAPI
  */
 
@@ -45,7 +44,7 @@
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 import org.testng.Assert;
 import org.testng.annotations.AfterClass;
--- a/jdk/test/java/util/logging/FileHandlerMaxLocksTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/util/logging/FileHandlerMaxLocksTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,8 +28,7 @@
  *  "java.util.logging.FileHandler.maxLocks" which will be present in
  *  "logging.properties" file with default value of 100. This property can be
  *  overriden by specifying this property in the custom config file.
- * @library /lib/testlibrary
- * @build jdk.testlibrary.FileUtils
+ * @library /test/lib
  * @author rpatil
  * @run main/othervm FileHandlerMaxLocksTest
  */
@@ -40,7 +39,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.logging.FileHandler;
-import jdk.testlibrary.FileUtils;
+import jdk.test.lib.util.FileUtils;
 
 public class FileHandlerMaxLocksTest {
 
--- a/jdk/test/java/util/regex/RegExTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/util/regex/RegExTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -37,8 +37,7 @@
  * 6328855 6192895 6345469 6988218 6693451 7006761 8140212 8143282 8158482
  * 8176029
  *
- * @library /lib/testlibrary
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run main RegExTest
  * @key randomness
  */
@@ -52,7 +51,7 @@
 import java.util.*;
 import java.nio.CharBuffer;
 import java.util.function.Predicate;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 /**
  * This is a test class created to check the operation of
--- a/jdk/test/java/util/zip/InflaterInputStream/TestAvailable.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/util/zip/InflaterInputStream/TestAvailable.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,8 +22,7 @@
  */
 
 /* @test
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run main TestAvailable
  * @bug 7031075 8161426
  * @summary Make sure that available() method behaves as expected.
@@ -33,7 +32,7 @@
 import java.io.*;
 import java.util.Random;
 import java.util.zip.*;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class TestAvailable {
 
--- a/jdk/test/java/util/zip/ZipFile/MultiThreadedReadTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/util/zip/ZipFile/MultiThreadedReadTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,8 +24,7 @@
 /* @test
  * @bug 8038491
  * @summary Crash in ZipFile.read() when ZipFileInputStream is shared between threads
- * @library /lib/testlibrary
- * @build jdk.testlibrary.FileUtils
+ * @library /test/lib
  * @run main MultiThreadedReadTest
  * @key randomness
  */
@@ -38,7 +37,7 @@
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 import java.util.zip.ZipOutputStream;
-import jdk.testlibrary.FileUtils;
+import jdk.test.lib.util.FileUtils;
 
 public class MultiThreadedReadTest extends Thread {
 
--- a/jdk/test/java/util/zip/ZipFile/ReadLongZipFileName.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/util/zip/ZipFile/ReadLongZipFileName.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,15 +24,14 @@
 /**
  * @test
  * @bug 6374379
- * @library ../../../../lib/testlibrary
+ * @library /test/lib
  * @summary Verify that we can read zip file names > 255 chars long
  */
 
 import java.io.*;
 import java.util.jar.*;
-import java.util.zip.*;
 import java.util.Stack;
-import jdk.testlibrary.FileUtils;
+import jdk.test.lib.util.FileUtils;
 
 public class ReadLongZipFileName {
     private static String entryName = "testFile.txt";;
--- a/jdk/test/java/util/zip/ZipFile/ZipEntryFreeTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/java/util/zip/ZipFile/ZipEntryFreeTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,8 +24,7 @@
 /* @test
  * @bug 6907252
  * @summary ZipFileInputStream Not Thread-Safe
- * @library /lib/testlibrary
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run main ZipEntryFreeTest
  */
 
@@ -35,7 +34,7 @@
 import java.util.Timer;
 import java.util.TimerTask;
 import java.util.zip.*;
-import jdk.testlibrary.FileUtils;
+import jdk.test.lib.util.FileUtils;
 
 public class ZipEntryFreeTest extends Thread {
 
--- a/jdk/test/javax/imageio/plugins/tiff/MultiPageTest/MultiPageTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/javax/imageio/plugins/tiff/MultiPageTest/MultiPageTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,8 +23,7 @@
 
 /**
  * @test
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.*
+ * @library /test/lib
  *
  * @bug     8145776
  * @author  a.stepanov
@@ -47,7 +46,7 @@
 import javax.imageio.*;
 import javax.imageio.stream.*;
 
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 
 public class MultiPageTest {
--- a/jdk/test/javax/net/ssl/DTLS/DTLSIncorrectAppDataTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/javax/net/ssl/DTLS/DTLSIncorrectAppDataTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,7 +26,7 @@
  * @bug 8043758
  * @summary Testing DTLS incorrect app data packages unwrapping.
  * @key randomness
- * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon
+ * @library /sun/security/krb5/auto /test/lib /javax/net/ssl/TLSCommon
  * @modules java.security.jgss
  *          jdk.security.auth
  *          java.security.jgss/sun.security.krb5:+open
@@ -49,7 +49,7 @@
 import javax.net.ssl.SSLEngineResult;
 import javax.net.ssl.SSLException;
 import java.util.Random;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 /**
  * Testing DTLS incorrect app data packages unwrapping. Incorrect application
--- a/jdk/test/javax/net/ssl/DTLS/DTLSRehandshakeWithCipherChangeTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/javax/net/ssl/DTLS/DTLSRehandshakeWithCipherChangeTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,7 +27,7 @@
  * @summary Testing DTLS engines re-handshaking with cipher change. New cipher
  *          is taken randomly from the supporetd ciphers list.
  * @key randomness
- * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon
+ * @library /sun/security/krb5/auto /test/lib /javax/net/ssl/TLSCommon
  * @modules java.security.jgss
  *          java.security.jgss/sun.security.krb5:+open
  *          java.security.jgss/sun.security.krb5.internal:+open
--- a/jdk/test/javax/net/ssl/DTLS/DTLSSequenceNumberTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/javax/net/ssl/DTLS/DTLSSequenceNumberTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,7 +27,7 @@
  * @summary Testing DTLS records sequence number property support in application
  *          data exchange.
  * @key randomness
- * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon
+ * @library /sun/security/krb5/auto /test/lib /javax/net/ssl/TLSCommon
  * @modules java.security.jgss
  *          jdk.security.auth
  *          java.security.jgss/sun.security.krb5:+open
@@ -51,7 +51,7 @@
 import javax.net.ssl.SSLEngineResult;
 import javax.net.ssl.SSLException;
 import java.util.Random;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 /**
  * Testing DTLS records sequence number property support in application data
--- a/jdk/test/javax/net/ssl/DTLSv10/DTLSv10IncorrectAppDataTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/javax/net/ssl/DTLSv10/DTLSv10IncorrectAppDataTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,7 +26,7 @@
  * @bug 8043758
  * @summary Testing DTLS incorrect app data packages unwrapping.
  * @key randomness
- * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon /javax/net/ssl/DTLS
+ * @library /sun/security/krb5/auto /test/lib /javax/net/ssl/TLSCommon /javax/net/ssl/DTLS
  * @modules java.security.jgss
  *          jdk.security.auth
  *          java.security.jgss/sun.security.krb5:+open
--- a/jdk/test/javax/net/ssl/DTLSv10/DTLSv10RehandshakeWithCipherChangeTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/javax/net/ssl/DTLSv10/DTLSv10RehandshakeWithCipherChangeTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,7 +27,7 @@
  * @summary Testing DTLS engines re-handshaking with cipher change. New cipher
  *          is taken randomly from the supporetd ciphers list.
  * @key randomness
- * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon
+ * @library /sun/security/krb5/auto /test/lib /javax/net/ssl/TLSCommon
  * @modules java.security.jgss
  *          java.security.jgss/sun.security.krb5:+open
  *          java.security.jgss/sun.security.krb5.internal:+open
--- a/jdk/test/javax/net/ssl/TLS/TLSRehandshakeWithCipherChangeTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/javax/net/ssl/TLS/TLSRehandshakeWithCipherChangeTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,7 +27,7 @@
  * @summary Testing TLS engines re-handshaking with cipher change. New cipher
  *          is taken randomly from the supporetd ciphers list.
  * @key randomness
- * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon
+ * @library /sun/security/krb5/auto /test/lib /javax/net/ssl/TLSCommon
  * @modules java.security.jgss
  *          java.security.jgss/sun.security.krb5:+open
  *          java.security.jgss/sun.security.krb5.internal:+open
--- a/jdk/test/javax/net/ssl/TLSCommon/RehandshakeWithCipherChangeTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/javax/net/ssl/TLSCommon/RehandshakeWithCipherChangeTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,7 +26,7 @@
 import javax.net.ssl.SSLEngineResult;
 import javax.net.ssl.SSLException;
 import java.util.Random;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 /**
  * Testing SSLEngines re-handshaking with cipher change. New cipher is taken
--- a/jdk/test/javax/net/ssl/TLSv1/TLSRehandshakeWithCipherChangeTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/javax/net/ssl/TLSv1/TLSRehandshakeWithCipherChangeTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,7 +27,7 @@
  * @summary Testing TLS engines re-handshaking with cipher change. New cipher
  *          is taken randomly from the supporetd ciphers list.
  * @key randomness
- * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon
+ * @library /sun/security/krb5/auto /test/lib /javax/net/ssl/TLSCommon
  * @modules java.security.jgss
  *          java.security.jgss/sun.security.krb5:+open
  *          java.security.jgss/sun.security.krb5.internal:+open
--- a/jdk/test/javax/net/ssl/TLSv11/TLSRehandshakeWithCipherChangeTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/javax/net/ssl/TLSv11/TLSRehandshakeWithCipherChangeTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,7 +27,7 @@
  * @summary Testing TLS engines re-handshaking with cipher change. New cipher
  *          is taken randomly from the supporetd ciphers list.
  * @key randomness
- * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon
+ * @library /sun/security/krb5/auto /test/lib /javax/net/ssl/TLSCommon
  * @modules java.security.jgss
  *          java.security.jgss/sun.security.krb5:+open
  *          java.security.jgss/sun.security.krb5.internal:+open
--- a/jdk/test/javax/sound/sampled/Clip/ClipCloseLoss.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/javax/sound/sampled/Clip/ClipCloseLoss.java	Wed Jul 05 23:32:48 2017 +0200
@@ -36,6 +36,7 @@
  * @bug 4946913
  * @summary DirectClip doesn't kill the thread correctly, sometimes
  * @run main/othervm ClipCloseLoss
+ * @key intermittent
  */
 public class ClipCloseLoss {
     static int frameCount = 441000; // lets say 10 seconds
--- a/jdk/test/javax/swing/ToolTipManager/7123767/bug7123767.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/javax/swing/ToolTipManager/7123767/bug7123767.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -38,8 +38,7 @@
  * @key      randomness
  *
  * @modules  java.desktop/sun.awt
- * @library  /lib/testlibrary/
- * @build    jdk.testlibrary.*
+ * @library  /test/lib
  *
  * @run      main/timeout=300 bug7123767
  */
@@ -55,7 +54,7 @@
 import java.util.Collections;
 import java.util.Random;
 
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 
 public class bug7123767 extends JFrame {
--- a/jdk/test/jdk/internal/util/jar/TestVersionedStream.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/jdk/internal/util/jar/TestVersionedStream.java	Wed Jul 05 23:32:48 2017 +0200
@@ -25,9 +25,8 @@
  * @test
  * @bug 8163798
  * @summary basic tests for multi-release jar versioned streams
- * @library /lib/testlibrary
+ * @library /test/lib
  * @modules jdk.jartool/sun.tools.jar java.base/jdk.internal.util.jar
- * @build jdk.testlibrary.FileUtils
  * @run testng TestVersionedStream
  */
 
@@ -57,7 +56,7 @@
 import java.util.stream.Stream;
 import java.util.zip.ZipFile;
 
-import jdk.testlibrary.FileUtils;
+import jdk.test.lib.util.FileUtils;
 
 public class TestVersionedStream {
     private final Path userdir;
--- a/jdk/test/jdk/modules/incubator/ImageModules.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/jdk/modules/incubator/ImageModules.java	Wed Jul 05 23:32:48 2017 +0200
@@ -25,7 +25,7 @@
  * @test
  * @bug 8170859
  * @summary Basic test for incubator modules in jmods and images
- * @library /lib/testlibrary
+ * @library /lib/testlibrary /test/lib
  * @key intermittent
  * @modules jdk.compiler jdk.jartool jdk.jlink
  * @build CompilerUtils
@@ -39,14 +39,13 @@
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.function.Consumer;
 import java.util.spi.ToolProvider;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import jdk.testlibrary.FileUtils;
+import jdk.test.lib.util.FileUtils;
 import org.testng.annotations.BeforeTest;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
--- a/jdk/test/jdk/security/jarsigner/Spec.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/jdk/security/jarsigner/Spec.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,7 +25,7 @@
  * @test
  * @bug 8056174
  * @summary Make sure JarSigner impl conforms to spec
- * @library /lib/testlibrary
+ * @library /test/lib
  * @modules java.base/sun.security.tools.keytool
  *          java.base/sun.security.provider.certpath
  *          jdk.jartool
@@ -35,7 +35,7 @@
 import com.sun.jarsigner.ContentSigner;
 import com.sun.jarsigner.ContentSignerParameters;
 import jdk.security.jarsigner.JarSigner;
-import jdk.testlibrary.JarUtils;
+import jdk.test.lib.util.JarUtils;
 import sun.security.provider.certpath.X509CertPath;
 
 import java.io.File;
--- a/jdk/test/lib/testlibrary/JavaToolUtils.java	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,209 +0,0 @@
-/*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.nio.file.Files;
-import java.util.List;
-import java.util.Objects;
-import java.util.concurrent.TimeUnit;
-import java.util.jar.Attributes;
-import java.util.jar.JarEntry;
-import java.util.jar.JarOutputStream;
-import java.util.jar.Manifest;
-import javax.tools.JavaCompiler;
-import javax.tools.JavaFileObject;
-import javax.tools.StandardJavaFileManager;
-import javax.tools.ToolProvider;
-
-/**
- * Utils class for compiling , creating jar file and executing a java command
- *
- * @author Raghu Nair
- */
-
-public class JavaToolUtils {
-
-    public static final long DEFAULT_WAIT_TIME = 10000;
-
-    private JavaToolUtils() {
-    }
-
-    /**
-     * Takes a list of files and compile these files into the working directory.
-     *
-     * @param files
-     * @throws IOException
-     */
-    public static void compileFiles(List<File> files) throws IOException {
-        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
-        try (StandardJavaFileManager fileManager = compiler.
-                getStandardFileManager(null, null, null)) {
-            Iterable<? extends JavaFileObject> compilationUnit
-                    = fileManager.getJavaFileObjectsFromFiles(files);
-            compiler.getTask(null, fileManager, null, null, null,
-                    compilationUnit).call();
-        }
-    }
-
-    /**
-     * Create a jar file using the list of files provided.
-     *
-     * @param jar
-     * @param files
-     * @throws IOException
-     */
-    public static void createJar(File jar, List<File> files)
-            throws IOException {
-        Manifest manifest = new Manifest();
-        manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION,
-                "1.0");
-        try (JarOutputStream target = new JarOutputStream(
-                new FileOutputStream(jar), manifest)) {
-            for (File file : files) {
-                add(file, target);
-            }
-        }
-    }
-
-    private static void add(File source, JarOutputStream target)
-            throws IOException {
-        Objects.requireNonNull(source, "source cannot be null");
-        Objects.requireNonNull(target, "target cannot be null");
-        // not tested against directories and from different path.
-        String name = source.getName();
-        if (source.isDirectory()) {
-            if (!name.isEmpty()) {
-                if (!name.endsWith("/")) {
-                    name += "/";
-                }
-                JarEntry entry = new JarEntry(name);
-                entry.setTime(source.lastModified());
-                target.putNextEntry(entry);
-                target.closeEntry();
-            }
-            for (File nestedFile : source.listFiles()) {
-                add(nestedFile, target);
-            }
-            return;
-        }
-        System.out.println("Adding entry " + name);
-        JarEntry entry = new JarEntry(name);
-        entry.setTime(source.lastModified());
-        target.putNextEntry(entry);
-        Files.copy(source.toPath(), target);
-        target.closeEntry();
-    }
-
-    /**
-     * Runs java command with provided arguments. Caller should not pass java
-     * command in the argument list.
-     *
-     * @param commands
-     * @param waitTime time to wait for the command to exit in milli seconds
-     * @return
-     * @throws Exception
-     */
-    public static int runJava(List<String> commands,long waitTime)
-            throws Exception {
-        String java = System.getProperty("java.home") + "/bin/java";
-        commands.add(0, java);
-        String command = commands.toString().replace(",", " ");
-        System.out.println("Executing the following command \n" + command);
-        ProcessBuilder processBuilder = new ProcessBuilder(commands);
-        final Process process = processBuilder.start();
-        BufferedReader errorStream = new BufferedReader(
-                new InputStreamReader(process.getErrorStream()));
-        BufferedReader outStream = new BufferedReader(
-                new InputStreamReader(process.getInputStream()));
-        String errorLine;
-        StringBuilder errors = new StringBuilder();
-        String outLines;
-        while ((errorLine = errorStream.readLine()) != null) {
-            errors.append(errorLine).append("\n");
-        }
-        while ((outLines = outStream.readLine()) != null) {
-            System.out.println(outLines);
-        }
-        errorLine = errors.toString();
-        System.err.println(errorLine);
-        process.waitFor(waitTime, TimeUnit.MILLISECONDS);
-        int exitStatus = process.exitValue();
-        if (exitStatus != 0 && errorLine != null && errorLine.isEmpty()) {
-            throw new RuntimeException(errorLine);
-        }
-        return exitStatus;
-    }
-
-    /**
-     * Runs java command with provided arguments. Caller should not pass java
-     * command in the argument list.
-     *
-     * @param commands
-     * @return
-     * @throws Exception
-     */
-    public static int runJava(List<String> commands) throws Exception {
-        return runJava(commands, DEFAULT_WAIT_TIME);
-    }
-
-    /**
-     * Run any command
-     * @param commands
-     * @return
-     * @throws Exception
-     */
-    public static int runCommand(List<String> commands) throws Exception {
-        String command = commands.toString().replace(",", " ");
-        System.out.println("Executing the following command \n" + command);
-        ProcessBuilder processBuilder = new ProcessBuilder(commands);
-        final Process process = processBuilder.start();
-        BufferedReader errorStream = new BufferedReader(
-                new InputStreamReader(process.getErrorStream()));
-        BufferedReader outStream = new BufferedReader(
-                new InputStreamReader(process.getInputStream()));
-        String errorLine;
-        StringBuilder errors = new StringBuilder();
-        String outLines;
-        while ((errorLine = errorStream.readLine()) != null) {
-            errors.append(errorLine).append("\n");
-        }
-        while ((outLines = outStream.readLine()) != null) {
-            System.out.println(outLines);
-        }
-        errorLine = errors.toString();
-        System.err.println(errorLine);
-        int exitStatus = process.exitValue();
-        if (exitStatus != 0 && errorLine != null && errorLine.isEmpty()) {
-            throw new RuntimeException(errorLine);
-        }
-        return exitStatus;
-    }
-
-
-}
--- a/jdk/test/lib/testlibrary/jdk/testlibrary/FileUtils.java	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,230 +0,0 @@
-/*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package jdk.testlibrary;
-
-import java.io.IOException;
-import java.nio.file.DirectoryNotEmptyException;
-import java.nio.file.FileVisitResult;
-import java.nio.file.Files;
-import java.nio.file.NoSuchFileException;
-import java.nio.file.Path;
-import java.nio.file.SimpleFileVisitor;
-import java.nio.file.attribute.BasicFileAttributes;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.TimeUnit;
-
-
-/**
- * Common library for various test file utility functions.
- */
-public final class FileUtils {
-
-    private static final boolean isWindows =
-                            System.getProperty("os.name").startsWith("Windows");
-    private static final int RETRY_DELETE_MILLIS = isWindows ? 500 : 0;
-    private static final int MAX_RETRY_DELETE_TIMES = isWindows ? 15 : 0;
-
-    /**
-     * Deletes a file, retrying if necessary.
-     *
-     * @param path  the file to delete
-     *
-     * @throws NoSuchFileException
-     *         if the file does not exist (optional specific exception)
-     * @throws DirectoryNotEmptyException
-     *         if the file is a directory and could not otherwise be deleted
-     *         because the directory is not empty (optional specific exception)
-     * @throws IOException
-     *         if an I/O error occurs
-     */
-    public static void deleteFileWithRetry(Path path)
-        throws IOException
-    {
-        try {
-            deleteFileWithRetry0(path);
-        } catch (InterruptedException x) {
-            throw new IOException("Interrupted while deleting.", x);
-        }
-    }
-
-    /**
-     * Deletes a file, retrying if necessary.
-     * No exception thrown if file doesn't exist.
-     *
-     * @param path  the file to delete
-     *
-     * @throws NoSuchFileException
-     *         if the file does not exist (optional specific exception)
-     * @throws DirectoryNotEmptyException
-     *         if the file is a directory and could not otherwise be deleted
-     *         because the directory is not empty (optional specific exception)
-     * @throws IOException
-     *         if an I/O error occurs
-     */
-    public static void deleteFileIfExistsWithRetry(Path path)
-        throws IOException
-    {
-        try {
-            if(Files.exists(path))
-                deleteFileWithRetry0(path);
-        } catch (InterruptedException x) {
-            throw new IOException("Interrupted while deleting.", x);
-        }
-    }
-
-    private static void deleteFileWithRetry0(Path path)
-        throws IOException, InterruptedException
-    {
-        int times = 0;
-        IOException ioe = null;
-        while (true) {
-            try {
-                Files.delete(path);
-                while (Files.exists(path)) {
-                    times++;
-                    if (times > MAX_RETRY_DELETE_TIMES)
-                        throw new IOException("File still exists after " + times + " waits.");
-                    Thread.sleep(RETRY_DELETE_MILLIS);
-                }
-                break;
-            } catch (NoSuchFileException | DirectoryNotEmptyException x) {
-                throw x;
-            } catch (IOException x) {
-                // Backoff/retry in case another process is accessing the file
-                times++;
-                if (ioe == null)
-                    ioe = x;
-                else
-                    ioe.addSuppressed(x);
-
-                if (times > MAX_RETRY_DELETE_TIMES)
-                    throw ioe;
-                Thread.sleep(RETRY_DELETE_MILLIS);
-            }
-        }
-    }
-
-    /**
-     * Deletes a directory and its subdirectories, retrying if necessary.
-     *
-     * @param dir  the directory to delete
-     *
-     * @throws  IOException
-     *          If an I/O error occurs. Any such exceptions are caught
-     *          internally. If only one is caught, then it is re-thrown.
-     *          If more than one exception is caught, then the second and
-     *          following exceptions are added as suppressed exceptions of the
-     *          first one caught, which is then re-thrown.
-     */
-    public static void deleteFileTreeWithRetry(Path dir)
-         throws IOException
-    {
-        IOException ioe = null;
-        final List<IOException> excs = deleteFileTreeUnchecked(dir);
-        if (!excs.isEmpty()) {
-            ioe = excs.remove(0);
-            for (IOException x : excs)
-                ioe.addSuppressed(x);
-        }
-        if (ioe != null)
-            throw ioe;
-    }
-
-    public static List<IOException> deleteFileTreeUnchecked(Path dir) {
-        final List<IOException> excs = new ArrayList<>();
-        try {
-            java.nio.file.Files.walkFileTree(dir, new SimpleFileVisitor<Path>() {
-                @Override
-                public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
-                    try {
-                        deleteFileWithRetry0(file);
-                    } catch (IOException x) {
-                        excs.add(x);
-                    } catch (InterruptedException x) {
-                        excs.add(new IOException("Interrupted while deleting.", x));
-                        return FileVisitResult.TERMINATE;
-                    }
-                    return FileVisitResult.CONTINUE;
-                }
-                @Override
-                public FileVisitResult postVisitDirectory(Path dir, IOException exc) {
-                    try {
-                        deleteFileWithRetry0(dir);
-                    } catch (IOException x) {
-                        excs.add(x);
-                    } catch (InterruptedException x) {
-                        excs.add(new IOException("Interrupted while deleting.", x));
-                        return FileVisitResult.TERMINATE;
-                    }
-                    return FileVisitResult.CONTINUE;
-                }
-                @Override
-                public FileVisitResult visitFileFailed(Path file, IOException exc) {
-                    excs.add(exc);
-                    return FileVisitResult.CONTINUE;
-                }
-            });
-        } catch (IOException x) {
-            excs.add(x);
-        }
-        return excs;
-    }
-
-    /**
-     * Checks whether all file systems are accessible. This is performed
-     * by checking free disk space on all mounted file systems via a
-     * separate, spawned process. File systems are considered to be
-     * accessible if this process completes successfully before a given
-     * fixed duration has elapsed.
-     *
-     * @implNote On Unix this executes the {@code df} command in a separate
-     * process and on Windows always returns {@code true}.
-     */
-    public static boolean areFileSystemsAccessible() throws IOException {
-        boolean areFileSystemsAccessible = true;
-        if (!isWindows) {
-            // try to check whether 'df' hangs
-            System.out.println("\n--- df output ---");
-            System.out.flush();
-            Process proc = new ProcessBuilder("df").inheritIO().start();
-            try {
-                proc.waitFor(90, TimeUnit.SECONDS);
-            } catch (InterruptedException ignored) {
-            }
-            try {
-                int exitValue = proc.exitValue();
-                if (exitValue != 0) {
-                    System.err.printf("df process exited with %d != 0%n",
-                        exitValue);
-                    areFileSystemsAccessible = false;
-                }
-            } catch (IllegalThreadStateException ignored) {
-                System.err.println("df command apparently hung");
-                areFileSystemsAccessible = false;
-            }
-        }
-        return areFileSystemsAccessible;
-    }
-}
--- a/jdk/test/lib/testlibrary/jdk/testlibrary/JarUtils.java	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,148 +0,0 @@
-/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package jdk.testlibrary;
-
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-import java.util.jar.JarOutputStream;
-import java.util.jar.Manifest;
-
-/**
- * Common library for various test jar file utility functions.
- */
-public final class JarUtils {
-
-    /**
-     * Create jar file with specified files. If a specified file does not exist,
-     * a new jar entry will be created with the file name itself as the content.
-     */
-    public static void createJar(String dest, String... files)
-            throws IOException {
-        try (JarOutputStream jos = new JarOutputStream(
-                new FileOutputStream(dest), new Manifest())) {
-            for (String file : files) {
-                System.out.println(String.format("Adding %s to %s",
-                        file, dest));
-
-                // add an archive entry, and write a file
-                jos.putNextEntry(new JarEntry(file));
-                try (FileInputStream fis = new FileInputStream(file)) {
-                    fis.transferTo(jos);
-                } catch (FileNotFoundException e) {
-                    jos.write(file.getBytes());
-                }
-            }
-        }
-        System.out.println();
-    }
-
-    /**
-     * Add or remove specified files to existing jar file. If a specified file
-     * to be updated or added does not exist, the jar entry will be created
-     * with the file name itself as the content.
-     *
-     * @param src the original jar file name
-     * @param dest the new jar file name
-     * @param files the files to update. The list is broken into 2 groups
-     *              by a "-" string. The files before in the 1st group will
-     *              be either updated or added. The files in the 2nd group
-     *              will be removed. If no "-" exists, all files belong to
-     *              the 1st group.
-     */
-    public static void updateJar(String src, String dest, String... files)
-            throws IOException {
-        try (JarOutputStream jos = new JarOutputStream(
-                new FileOutputStream(dest))) {
-
-            // copy each old entry into destination unless the entry name
-            // is in the updated list
-            List<String> updatedFiles = new ArrayList<>();
-            try (JarFile srcJarFile = new JarFile(src)) {
-                Enumeration<JarEntry> entries = srcJarFile.entries();
-                while (entries.hasMoreElements()) {
-                    JarEntry entry = entries.nextElement();
-                    String name = entry.getName();
-                    boolean found = false;
-                    boolean update = true;
-                    for (String file : files) {
-                        if (file.equals("-")) {
-                            update = false;
-                        } else if (name.equals(file)) {
-                            updatedFiles.add(file);
-                            found = true;
-                            break;
-                        }
-                    }
-
-                    if (found) {
-                        if (update) {
-                            System.out.println(String.format("Updating %s with %s",
-                                    dest, name));
-                            jos.putNextEntry(new JarEntry(name));
-                            try (FileInputStream fis = new FileInputStream(name)) {
-                                fis.transferTo(jos);
-                            } catch (FileNotFoundException e) {
-                                jos.write(name.getBytes());
-                            }
-                        } else {
-                            System.out.println(String.format("Removing %s from %s",
-                                    name, dest));
-                        }
-                    } else {
-                        System.out.println(String.format("Copying %s to %s",
-                                name, dest));
-                        jos.putNextEntry(entry);
-                        srcJarFile.getInputStream(entry).transferTo(jos);
-                    }
-                }
-            }
-
-            // append new files
-            for (String file : files) {
-                if (file.equals("-")) {
-                    break;
-                }
-                if (!updatedFiles.contains(file)) {
-                    System.out.println(String.format("Adding %s with %s",
-                            dest, file));
-                    jos.putNextEntry(new JarEntry(file));
-                    try (FileInputStream fis = new FileInputStream(file)) {
-                        fis.transferTo(jos);
-                    } catch (FileNotFoundException e) {
-                        jos.write(file.getBytes());
-                    }
-                }
-            }
-        }
-        System.out.println();
-    }
-
-}
--- a/jdk/test/lib/testlibrary/jdk/testlibrary/RandomFactory.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/lib/testlibrary/jdk/testlibrary/RandomFactory.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,7 +30,12 @@
  * Factory class which generates and prints to STDOUT a long-valued seed
  * for use in initializing a PRNG.  An instance of {@code Random} or
  * {@code SplittableRandom} may likewise be obtained.
+ *
+ * @deprecated  This class is deprecated. Use the one from
+ *              {@code <root>/test/lib/jdk/test/lib}
+ *
  */
+@Deprecated
 public class RandomFactory {
     /**
      * Attempt to obtain the seed from the value of the "seed" property.
--- a/jdk/test/lib/testlibrary/jsr292/com/oracle/testlibrary/jsr292/CodeCacheOverflowProcessor.java	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.oracle.testlibrary.jsr292;
-
-import jdk.testlibrary.Utils;
-
-/**
- * Helper class used to catch and process VirtualMachineError with message "Out
- * of space in CodeCache". Some JSR292 tests run out of code cache size, so code
- * cache overflows and VME is thrown. This VME is considered as non-critical in
- * some JSR292 tests, so it should be processed to prevent test failure.
- */
-public class CodeCacheOverflowProcessor {
-
-    /**
-     * Checks if an instance of Throwable is caused by VirtualMachineError with
-     * message "Out of space in CodeCache". May be used as filter in method
-     * {@code jdk.testlibrary.Utils.filterException}.
-     *
-     * @param t - Throwable to check.
-     * @return true if Throwable is caused by VME, false otherwise.
-     */
-    public static Boolean isThrowableCausedByVME(Throwable t) {
-        Throwable causeOfT = t;
-        do {
-            if (causeOfT instanceof VirtualMachineError
-                    && causeOfT.getMessage().matches(".*[Oo]ut of space"
-                            + " in CodeCache.*")) {
-                return true;
-            }
-            causeOfT = causeOfT != null ? causeOfT.getCause() : null;
-        } while (causeOfT != null && causeOfT != t);
-        return false;
-    }
-
-    /**
-     * Checks if the given test throws an exception caused by
-     * VirtualMachineError with message "Out of space in CodeCache", and, if VME
-     * takes place, processes it so that no exception is thrown, and prints its
-     * stack trace. If test throws exception not caused by VME, this method just
-     * re-throws this exception.
-     *
-     * @param test - test to check for and process VirtualMachineError.
-     * @return - an exception caused by VME or null
-     *           if test has thrown no exception.
-     * @throws Throwable - if test has thrown an exception
-     *                     that is not caused by VME.
-     */
-    public static Throwable runMHTest(Utils.ThrowingRunnable test) throws Throwable {
-        Throwable t = Utils.filterException(test::run,
-                CodeCacheOverflowProcessor::isThrowableCausedByVME);
-        if (t != null) {
-            System.err.printf("%nNon-critical exception caught becuse of"
-                    + " code cache size is not enough to run all test cases.%n%n");
-        }
-        return t;
-    }
-}
--- a/jdk/test/lib/testlibrary/jsr292/com/oracle/testlibrary/jsr292/Helper.java	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,347 +0,0 @@
-/*
- * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.oracle.testlibrary.jsr292;
-
-import jdk.testlibrary.Asserts;
-
-import java.lang.invoke.MethodHandle;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.MethodType;
-import java.lang.reflect.Array;
-import java.util.*;
-
-public class Helper {
-    /** Flag for verbose output, true if {@code -Dverbose} specified */
-    public static final boolean IS_VERBOSE
-            = System.getProperty("verbose") != null;
-    /**
-     * Flag for thorough testing -- all test will be executed,
-     * true if {@code -Dthorough} specified. */
-    public static final boolean IS_THOROUGH
-            = System.getProperty("thorough") != null;
-    /** Random number generator w/ initial seed equal to {@code -Dseed} */
-    public static final Random RNG;
-
-    static {
-        String str = System.getProperty("seed");
-        long seed = str != null ? Long.parseLong(str) : new Random().nextLong();
-        RNG = new Random(seed);
-        System.out.printf("-Dseed=%d%n", seed);
-    }
-
-    public static final long TEST_LIMIT;
-    static {
-        String str = System.getProperty("testLimit");
-        TEST_LIMIT = str != null ? Long.parseUnsignedLong(str) : 2000L;
-        System.out.printf("-DtestLimit=%d%n", TEST_LIMIT);
-    }
-
-    public static final int MAX_ARITY = 254;
-    public static final String MISSING_ARG = "missingArg";
-    public static final String MISSING_ARG_2 = "missingArg#2";
-
-    private static final int
-            // first int value
-            ONE_MILLION = (1000 * 1000),
-            // scale factor to reach upper 32 bits
-            TEN_BILLION = (10 * 1000 * 1000 * 1000),
-            // <<1 makes space for sign bit;
-            INITIAL_ARG_VAL = ONE_MILLION << 1;
-
-    public static final MethodHandle AS_LIST;
-
-    static {
-        try {
-            AS_LIST = MethodHandles.lookup().findStatic(
-                    Arrays.class, "asList",
-                    MethodType.methodType(List.class, Object[].class));
-        } catch (NoSuchMethodException | IllegalAccessException ex) {
-            throw new Error(ex);
-        }
-    }
-
-    public static boolean isDoubleCost(Class<?> aClass) {
-        return aClass == double.class || aClass == long.class;
-    }
-
-    private static List<List<Object>> calledLog = new ArrayList<>();
-    private static long nextArgVal;
-
-    public static void assertCalled(String name, Object... args) {
-        assertCalled(0, name, args);
-    }
-
-    public static void assertCalled(int lag, String name, Object... args) {
-        Object expected = logEntry(name, args);
-        Object actual = getCalled(lag);
-        Asserts.assertEQ(expected, actual, "method call w/ lag = " + lag);
-    }
-
-    public static Object called(String name, Object... args) {
-        List<Object> entry = logEntry(name, args);
-        calledLog.add(entry);
-        return entry;
-    }
-
-    private static List<Object> logEntry(String name, Object... args) {
-        return Arrays.asList(name, Arrays.asList(args));
-    }
-
-    public static void clear() {
-        calledLog.clear();
-    }
-
-    public static List<Object> getCalled(int lag) {
-        int size = calledLog.size();
-        return size <= lag ? null : calledLog.get(size - lag - 1);
-    }
-
-    public static List<Class<?>> randomClasses(Class<?>[] classes, int size) {
-        List<Class<?>> result = new ArrayList<>(size);
-        for (int i = 0; i < size; ++i) {
-            result.add(classes[RNG.nextInt(classes.length)]);
-        }
-        return result;
-    }
-
-    public static List<Class<?>> getParams(List<Class<?>> classes,
-            boolean isVararg, int argsCount) {
-        boolean unmodifiable = true;
-        List<Class<?>> result = classes.subList(0,
-                Math.min(argsCount, (MAX_ARITY / 2) - 1));
-        int extra = 0;
-        if (argsCount >= MAX_ARITY / 2) {
-            result = new ArrayList<>(result);
-            unmodifiable = false;
-            extra = (int) result.stream().filter(Helper::isDoubleCost).count();
-            int i = result.size();
-            while (result.size() + extra < argsCount) {
-                Class<?> aClass = classes.get(i);
-                if (Helper.isDoubleCost(aClass)) {
-                    ++extra;
-                    if (result.size() + extra >= argsCount) {
-                        break;
-                    }
-                }
-                result.add(aClass);
-            }
-        }
-        if (isVararg && result.size() > 0) {
-            if (unmodifiable) {
-                result = new ArrayList<>(result);
-            }
-            int last = result.size() - 1;
-            Class<?> aClass = result.get(last);
-            aClass = Array.newInstance(aClass, 2).getClass();
-            result.set(last, aClass);
-        }
-        return result;
-    }
-
-    public static MethodHandle addTrailingArgs(MethodHandle target, int nargs,
-            List<Class<?>> classes) {
-        int targetLen = target.type().parameterCount();
-        int extra = (nargs - targetLen);
-        if (extra <= 0) {
-            return target;
-        }
-        List<Class<?>> fakeArgs = new ArrayList<>(extra);
-        for (int i = 0; i < extra; ++i) {
-            fakeArgs.add(classes.get(i % classes.size()));
-        }
-        return MethodHandles.dropArguments(target, targetLen, fakeArgs);
-    }
-
-    public static MethodHandle varargsList(int arity) {
-        return AS_LIST.asCollector(Object[].class, arity);
-    }
-
-    private static long nextArg(boolean moreBits) {
-        long val = nextArgVal++;
-        long sign = -(val & 1); // alternate signs
-        val >>= 1;
-        if (moreBits)
-        // Guarantee some bits in the high word.
-        // In any case keep the decimal representation simple-looking,
-        // with lots of zeroes, so as not to make the printed decimal
-        // strings unnecessarily noisy.
-        {
-            val += (val % ONE_MILLION) * TEN_BILLION;
-        }
-        return val ^ sign;
-    }
-
-    private static int nextArg() {
-        // Produce a 32-bit result something like ONE_MILLION+(smallint).
-        // Example: 1_000_042.
-        return (int) nextArg(false);
-    }
-
-    private static long nextArg(Class<?> kind) {
-        if (kind == long.class || kind == Long.class ||
-                kind == double.class || kind == Double.class)
-        // produce a 64-bit result something like
-        // ((TEN_BILLION+1) * (ONE_MILLION+(smallint)))
-        // Example: 10_000_420_001_000_042.
-        {
-            return nextArg(true);
-        }
-        return (long) nextArg();
-    }
-
-    private static Object randomArg(Class<?> param) {
-        Object wrap = castToWrapperOrNull(nextArg(param), param);
-        if (wrap != null) {
-            return wrap;
-        }
-
-        if (param.isInterface()) {
-            for (Class<?> c : param.getClasses()) {
-                if (param.isAssignableFrom(c) && !c.isInterface()) {
-                    param = c;
-                    break;
-                }
-            }
-        }
-        if (param.isArray()) {
-            Class<?> ctype = param.getComponentType();
-            Object arg = Array.newInstance(ctype, 2);
-            Array.set(arg, 0, randomArg(ctype));
-            return arg;
-        }
-        if (param.isInterface() && param.isAssignableFrom(List.class)) {
-            return Arrays.asList("#" + nextArg());
-        }
-        if (param.isInterface() || param.isAssignableFrom(String.class)) {
-            return "#" + nextArg();
-        }
-
-        try {
-            return param.newInstance();
-        } catch (InstantiationException | IllegalAccessException ex) {
-        }
-        return null;  // random class not Object, String, Integer, etc.
-    }
-
-    public static Object[] randomArgs(Class<?>... params) {
-        Object[] args = new Object[params.length];
-        for (int i = 0; i < args.length; i++) {
-            args[i] = randomArg(params[i]);
-        }
-        return args;
-    }
-
-    public static Object[] randomArgs(int nargs, Class<?> param) {
-        Object[] args = new Object[nargs];
-        for (int i = 0; i < args.length; i++) {
-            args[i] = randomArg(param);
-        }
-        return args;
-    }
-
-    public static Object[] randomArgs(int nargs, Class<?>... params) {
-        Object[] args = new Object[nargs];
-        for (int i = 0; i < args.length; i++) {
-            Class<?> param = params[i % params.length];
-            args[i] = randomArg(param);
-        }
-        return args;
-    }
-
-    public static Object[] randomArgs(List<Class<?>> params) {
-        return randomArgs(params.toArray(new Class<?>[params.size()]));
-    }
-
-    public static Object castToWrapper(Object value, Class<?> dst) {
-        Object wrap = null;
-        if (value instanceof Number) {
-            wrap = castToWrapperOrNull(((Number) value).longValue(), dst);
-        }
-        if (value instanceof Character) {
-            wrap = castToWrapperOrNull((char) (Character) value, dst);
-        }
-        if (wrap != null) {
-            return wrap;
-        }
-        return dst.cast(value);
-    }
-
-    @SuppressWarnings("cast")
-    // primitive cast to (long) is part of the pattern
-    private static Object castToWrapperOrNull(long value, Class<?> dst) {
-        if (dst == int.class || dst == Integer.class) {
-            return (int) (value);
-        }
-        if (dst == long.class || dst == Long.class) {
-            return (long) (value);
-        }
-        if (dst == char.class || dst == Character.class) {
-            return (char) (value);
-        }
-        if (dst == short.class || dst == Short.class) {
-            return (short) (value);
-        }
-        if (dst == float.class || dst == Float.class) {
-            return (float) (value);
-        }
-        if (dst == double.class || dst == Double.class) {
-            return (double) (value);
-        }
-        if (dst == byte.class || dst == Byte.class) {
-            return (byte) (value);
-        }
-        if (dst == boolean.class || dst == Boolean.class) {
-            return ((value % 29) & 1) == 0;
-        }
-        return null;
-    }
-
-    /**
-     * Routine used to obtain a randomly generated method type.
-     *
-     * @param arity Arity of returned method type.
-     * @return MethodType generated randomly.
-     */
-    public static MethodType randomMethodTypeGenerator(int arity) {
-        final Class<?>[] CLASSES = {
-            Object.class,
-            int.class,
-            boolean.class,
-            byte.class,
-            short.class,
-            char.class,
-            long.class,
-            float.class,
-            double.class
-        };
-        if (arity > MAX_ARITY) {
-            throw new IllegalArgumentException(
-                    String.format("Arity should not exceed %d!", MAX_ARITY));
-        }
-        List<Class<?>> list = randomClasses(CLASSES, arity);
-        list = getParams(list, false, arity);
-        int i = RNG.nextInt(CLASSES.length + 1);
-        Class<?> rtype = i == CLASSES.length ? void.class : CLASSES[i];
-        return MethodType.methodType(rtype, list);
-    }
-}
--- a/jdk/test/sun/nio/cs/FindDecoderBugs.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/sun/nio/cs/FindDecoderBugs.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,8 +25,7 @@
  * @test
  * @bug 6380723
  * @summary Decode many byte sequences in many ways (use -Dseed=X to set PRNG seed)
- * @library /lib/testlibrary
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run main/timeout=1800 FindDecoderBugs
  * @author Martin Buchholz
  * @key randomness
@@ -36,7 +35,7 @@
 import java.util.regex.*;
 import java.nio.*;
 import java.nio.charset.*;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class FindDecoderBugs {
 
--- a/jdk/test/sun/nio/cs/FindEncoderBugs.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/sun/nio/cs/FindEncoderBugs.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,8 +25,7 @@
  * @test
  * @bug 6233345 6381699 6381702 6381705 6381706
  * @summary Encode many char sequences in many ways
- * @library /lib/testlibrary/
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @run main/timeout=1200 FindEncoderBugs
  * @author Martin Buchholz
  * @key randomness
@@ -36,7 +35,7 @@
 import java.util.regex.*;
 import java.nio.*;
 import java.nio.charset.*;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class FindEncoderBugs {
 
--- a/jdk/test/sun/security/ec/SignatureOffsets.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/sun/security/ec/SignatureOffsets.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -34,7 +34,7 @@
  *          get random set of clear text data to sign. After the signature
  *          generation, the test tries to verify signature with the above API
  *          and passing in different signature offset (0, 33, 66, 99).
- * @library /lib/testlibrary
+ * @library /test/lib
  * @compile ../../../java/security/Signature/Offsets.java
  * @run main SignatureOffsets SunEC NONEwithECDSA
  * @run main SignatureOffsets SunEC SHA1withECDSA
--- a/jdk/test/sun/security/krb5/auto/KDC.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/sun/security/krb5/auto/KDC.java	Wed Jul 05 23:32:48 2017 +0200
@@ -828,7 +828,9 @@
                 throw new KrbException(Krb5.KDC_ERR_SUMTYPE_NOSUPP); // TODO
             }
             Ticket t = new Ticket(
-                    service,
+                    System.getProperty("test.kdc.diff.sname") != null ?
+                        new PrincipalName("xx" + service.toString()) :
+                        service,
                     new EncryptedData(skey, enc.asn1Encode(), KeyUsage.KU_TICKET)
             );
             EncTGSRepPart enc_part = new EncTGSRepPart(
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/krb5/auto/TicketSName.java	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8178794
+ * @summary krb5 client should ignore sname in incoming tickets
+ * @compile -XDignore.symbol.file TicketSName.java
+ * @run main/othervm -Dtest.kdc.diff.sname TicketSName
+ */
+
+import sun.security.jgss.GSSUtil;
+import javax.security.auth.kerberos.KerberosTicket;
+
+public class TicketSName {
+
+    public static void main(String[] args) throws Exception {
+
+        new OneKDC(null).writeJAASConf();
+
+        Context c, s;
+        c = Context.fromJAAS("client");
+        s = Context.fromJAAS("server");
+
+        c.startAsClient(OneKDC.SERVER, GSSUtil.GSS_KRB5_MECH_OID);
+        s.startAsServer(GSSUtil.GSS_KRB5_MECH_OID);
+
+        Context.handshake(c, s);
+
+        String expected = OneKDC.SERVER + "@" + OneKDC.REALM;
+        if (!c.s().getPrivateCredentials(KerberosTicket.class)
+                .stream()
+                .anyMatch(t -> t.getServer().toString().equals(expected))) {
+            c.status();
+            throw new Exception("no " + expected);
+        }
+    }
+}
--- a/jdk/test/sun/security/mscapi/SignatureOffsets.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/sun/security/mscapi/SignatureOffsets.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -34,7 +34,7 @@
  *          get random set of clear text data to sign. After the signature
  *          generation, the test tries to verify signature with the above API
  *          and passing in different signature offset (0, 33, 66, 99).
- * @library /lib/testlibrary
+ * @library /test/lib
  * @compile ../../../java/security/Signature/Offsets.java
  * @requires os.family == "windows"
  * @run main SignatureOffsets SunMSCAPI NONEwithRSA
--- a/jdk/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java	Wed Jul 05 23:32:48 2017 +0200
@@ -27,8 +27,7 @@
  * @summary Verify that the RSA KeyPairGenerator works (use -Dseed=X to set PRNG seed)
  * @author Andreas Sterbenz
  * @library ..
- * @library /lib/testlibrary
- * @build jdk.testlibrary.*
+ * @library /test/lib
  * @modules jdk.crypto.cryptoki
  * @run main/othervm -Djava.security.debug=sunpkcs11 TestKeyPairGenerator
  * @run main/othervm -Djava.security.debug=sunpkcs11 TestKeyPairGenerator
@@ -46,7 +45,7 @@
 import java.security.interfaces.RSAPrivateCrtKey;
 import java.security.interfaces.RSAPublicKey;
 import java.security.spec.RSAKeyGenParameterSpec;
-import jdk.testlibrary.RandomFactory;
+import jdk.test.lib.RandomFactory;
 
 public class TestKeyPairGenerator extends PKCS11Test {
 
--- a/jdk/test/sun/security/rsa/SignatureOffsets.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/sun/security/rsa/SignatureOffsets.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -34,7 +34,7 @@
  *          get random set of clear text data to sign. After the signature
  *          generation, the test tries to verify signature with the above API
  *          and passing in different signature offset (0, 33, 66, 99).
- * @library /lib/testlibrary
+ * @library /test/lib
  * @compile ../../../java/security/Signature/Offsets.java
  * @run main SignatureOffsets SunRsaSign MD2withRSA
  * @run main SignatureOffsets SunRsaSign MD5withRSA
--- a/jdk/test/sun/security/ssl/rsa/SignatureOffsets.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/sun/security/ssl/rsa/SignatureOffsets.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -34,7 +34,7 @@
  *          get random set of clear text data to sign. After the signature
  *          generation, the test tries to verify signature with the above API
  *          and passing in different signature offset (0, 33, 66, 99).
- * @library /lib/testlibrary
+ * @library /test/lib
  * @compile ../../../../java/security/Signature/Offsets.java
  * @run main SignatureOffsets SunJSSE MD2withRSA
  * @run main SignatureOffsets SunJSSE MD5withRSA
--- a/jdk/test/sun/security/tools/jarsigner/AltProvider.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/sun/security/tools/jarsigner/AltProvider.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,7 +32,7 @@
 import jdk.test.lib.JDKToolLauncher;
 import jdk.test.lib.process.OutputAnalyzer;
 import jdk.test.lib.process.ProcessTools;
-import jdk.testlibrary.JarUtils;
+import jdk.test.lib.util.JarUtils;
 
 import java.nio.file.*;
 
--- a/jdk/test/sun/security/tools/jarsigner/Options.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/sun/security/tools/jarsigner/Options.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,7 +26,7 @@
  * @bug 8056174
  * @summary Make sure the jarsigner tool still works after it's modified to
  *          be based on JarSigner API
- * @library /lib/testlibrary
+ * @library /test/lib
  * @modules java.base/sun.security.tools.keytool
  *          jdk.jartool/sun.security.tools.jarsigner
  *          java.base/sun.security.pkcs
@@ -35,7 +35,7 @@
 
 import com.sun.jarsigner.ContentSigner;
 import com.sun.jarsigner.ContentSignerParameters;
-import jdk.testlibrary.JarUtils;
+import jdk.test.lib.util.JarUtils;
 import sun.security.pkcs.PKCS7;
 
 import java.io.ByteArrayInputStream;
--- a/jdk/test/sun/security/tools/jarsigner/TimestampCheck.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/sun/security/tools/jarsigner/TimestampCheck.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -45,7 +45,7 @@
 
 import jdk.test.lib.SecurityTools;
 import jdk.testlibrary.*;
-import jdk.testlibrary.JarUtils;
+import jdk.test.lib.util.JarUtils;
 import sun.security.pkcs.ContentInfo;
 import sun.security.pkcs.PKCS7;
 import sun.security.pkcs.PKCS9Attribute;
@@ -557,7 +557,7 @@
     }
 
     static void prepare() throws Exception {
-        jdk.testlibrary.JarUtils.createJar("old.jar", "A");
+        JarUtils.createJar("old.jar", "A");
         Files.deleteIfExists(Paths.get("tsks"));
         keytool("-alias ca -genkeypair -ext bc -dname CN=CA");
         keytool("-alias old -genkeypair -dname CN=old");
--- a/jdk/test/sun/security/tools/jarsigner/TsacertOptionTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/sun/security/tools/jarsigner/TsacertOptionTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -22,7 +22,7 @@
  */
 
 import jdk.testlibrary.OutputAnalyzer;
-import jdk.testlibrary.JarUtils;
+import jdk.test.lib.util.JarUtils;
 
 /**
  * @test
--- a/jdk/test/sun/security/tools/jarsigner/Warning.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/sun/security/tools/jarsigner/Warning.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,7 +22,7 @@
  */
 
 import jdk.testlibrary.JDKToolLauncher;
-import jdk.testlibrary.JarUtils;
+import jdk.test.lib.util.JarUtils;
 import jdk.testlibrary.OutputAnalyzer;
 import jdk.testlibrary.ProcessTools;
 
@@ -34,7 +34,7 @@
  * @test
  * @bug 8024302 8026037 8130132
  * @summary warnings, errors and -strict
- * @library /lib/testlibrary
+ * @library /lib/testlibrary /test/lib
  */
 public class Warning {
 
--- a/jdk/test/sun/security/tools/jarsigner/warnings/AliasNotInStoreTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/sun/security/tools/jarsigner/warnings/AliasNotInStoreTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,13 +22,13 @@
  */
 
 import jdk.testlibrary.OutputAnalyzer;
-import jdk.testlibrary.JarUtils;
+import jdk.test.lib.util.JarUtils;
 
 /**
  * @test
  * @bug 8024302 8026037
  * @summary Test for aliasNotInStore warning
- * @library /lib/testlibrary ../
+ * @library /lib/testlibrary /test/lib ../
  * @run main AliasNotInStoreTest
  */
 public class AliasNotInStoreTest extends Test {
--- a/jdk/test/sun/security/tools/jarsigner/warnings/BadExtendedKeyUsageTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/sun/security/tools/jarsigner/warnings/BadExtendedKeyUsageTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,13 +22,13 @@
  */
 
 import jdk.testlibrary.OutputAnalyzer;
-import jdk.testlibrary.JarUtils;
+import jdk.test.lib.util.JarUtils;
 
 /**
  * @test
  * @bug 8024302 8026037
  * @summary Test for badExtendedKeyUsage warning
- * @library /lib/testlibrary ../
+ * @library /lib/testlibrary /test/lib ../
  * @run main BadExtendedKeyUsageTest
  */
 public class BadExtendedKeyUsageTest extends Test {
--- a/jdk/test/sun/security/tools/jarsigner/warnings/BadKeyUsageTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/sun/security/tools/jarsigner/warnings/BadKeyUsageTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,13 +22,13 @@
  */
 
 import jdk.testlibrary.OutputAnalyzer;
-import jdk.testlibrary.JarUtils;
+import jdk.test.lib.util.JarUtils;
 
 /**
  * @test
  * @bug 8024302 8026037
  * @summary Test for badKeyUsage warning
- * @library /lib/testlibrary ../
+ * @library /lib/testlibrary /test/lib ../
  * @ignore until 8026393 is fixed
  * @run main BadKeyUsageTest
  */
--- a/jdk/test/sun/security/tools/jarsigner/warnings/BadNetscapeCertTypeTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/sun/security/tools/jarsigner/warnings/BadNetscapeCertTypeTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,7 +22,7 @@
  */
 
 import jdk.testlibrary.OutputAnalyzer;
-import jdk.testlibrary.JarUtils;
+import jdk.test.lib.util.JarUtils;
 
 import java.nio.file.Files;
 import java.nio.file.Paths;
@@ -32,7 +32,7 @@
  * @test
  * @bug 8024302 8026037
  * @summary Test for badNetscapeCertType warning
- * @library /lib/testlibrary ../
+ * @library /lib/testlibrary /test/lib ../
  * @run main BadNetscapeCertTypeTest
  */
 public class BadNetscapeCertTypeTest extends Test {
--- a/jdk/test/sun/security/tools/jarsigner/warnings/ChainNotValidatedTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/sun/security/tools/jarsigner/warnings/ChainNotValidatedTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,13 +24,13 @@
 import java.io.File;
 import jdk.testlibrary.OutputAnalyzer;
 import jdk.testlibrary.ProcessTools;
-import jdk.testlibrary.JarUtils;
+import jdk.test.lib.util.JarUtils;
 
 /**
  * @test
  * @bug 8024302 8026037
  * @summary Test for chainNotValidated warning
- * @library /lib/testlibrary ../
+ * @library /lib/testlibrary /test/lib ../
  * @run main ChainNotValidatedTest
  */
 public class ChainNotValidatedTest extends Test {
--- a/jdk/test/sun/security/tools/jarsigner/warnings/HasExpiredCertTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/sun/security/tools/jarsigner/warnings/HasExpiredCertTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,13 +22,13 @@
  */
 
 import jdk.testlibrary.OutputAnalyzer;
-import jdk.testlibrary.JarUtils;
+import jdk.test.lib.util.JarUtils;
 
 /**
  * @test
  * @bug 8024302 8026037
  * @summary Test for hasExpiredCert warning
- * @library /lib/testlibrary ../
+ * @library /lib/testlibrary /test/lib ../
  * @run main HasExpiredCertTest
  */
 public class HasExpiredCertTest extends Test {
--- a/jdk/test/sun/security/tools/jarsigner/warnings/HasExpiringCertTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/sun/security/tools/jarsigner/warnings/HasExpiringCertTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,13 +22,13 @@
  */
 
 import jdk.testlibrary.OutputAnalyzer;
-import jdk.testlibrary.JarUtils;
+import jdk.test.lib.util.JarUtils;
 
 /**
  * @test
  * @bug 8024302 8026037
  * @summary Test for hasExpiringCert warning
- * @library /lib/testlibrary ../
+ * @library /lib/testlibrary /test/lib ../
  * @run main HasExpiringCertTest
  */
 public class HasExpiringCertTest extends Test {
--- a/jdk/test/sun/security/tools/jarsigner/warnings/HasUnsignedEntryTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/sun/security/tools/jarsigner/warnings/HasUnsignedEntryTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,13 +22,13 @@
  */
 
 import jdk.testlibrary.OutputAnalyzer;
-import jdk.testlibrary.JarUtils;
+import jdk.test.lib.util.JarUtils;
 
 /**
  * @test
  * @bug 8024302 8026037
  * @summary Test for hasUnsignedEntry warning
- * @library /lib/testlibrary ../
+ * @library /lib/testlibrary /test/lib ../
  * @run main HasUnsignedEntryTest
  */
 public class HasUnsignedEntryTest extends Test {
--- a/jdk/test/sun/security/tools/jarsigner/warnings/MultipleWarningsTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/sun/security/tools/jarsigner/warnings/MultipleWarningsTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,13 +22,13 @@
  */
 
 import jdk.testlibrary.OutputAnalyzer;
-import jdk.testlibrary.JarUtils;
+import jdk.test.lib.util.JarUtils;
 
 /**
  * @test
  * @bug 8024302 8026037
  * @summary Checks if jarsigner prints appropriate warnings
- * @library /lib/testlibrary ../
+ * @library /lib/testlibrary /test/lib ../
  * @run main MultipleWarningsTest
  */
 public class MultipleWarningsTest extends Test {
--- a/jdk/test/sun/security/tools/jarsigner/warnings/NoTimestampTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/sun/security/tools/jarsigner/warnings/NoTimestampTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,13 +23,13 @@
 
 import java.util.Date;
 import jdk.testlibrary.OutputAnalyzer;
-import jdk.testlibrary.JarUtils;
+import jdk.test.lib.util.JarUtils;
 
 /**
  * @test
  * @bug 8024302 8026037
  * @summary Checks warnings if -tsa and -tsacert options are not specified
- * @library /lib/testlibrary ../
+ * @library /lib/testlibrary /test/lib ../
  * @run main NoTimestampTest
  */
 public class NoTimestampTest extends Test {
--- a/jdk/test/sun/security/tools/jarsigner/warnings/NotSignedByAliasTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/sun/security/tools/jarsigner/warnings/NotSignedByAliasTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,13 +22,13 @@
  */
 
 import jdk.testlibrary.OutputAnalyzer;
-import jdk.testlibrary.JarUtils;
+import jdk.test.lib.util.JarUtils;
 
 /**
  * @test
  * @bug 8024302 8026037
  * @summary Test for notSignedByAlias warning
- * @library /lib/testlibrary ../
+ * @library /lib/testlibrary /test/lib ../
  * @run main NotSignedByAliasTest
  */
 public class NotSignedByAliasTest extends Test {
--- a/jdk/test/sun/security/tools/jarsigner/warnings/NotYetValidCertTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/sun/security/tools/jarsigner/warnings/NotYetValidCertTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,13 +22,13 @@
  */
 
 import jdk.testlibrary.OutputAnalyzer;
-import jdk.testlibrary.JarUtils;
+import jdk.test.lib.util.JarUtils;
 
 /**
  * @test
  * @bug 8024302 8026037
  * @summary Test for notYetValidCert warning
- * @library /lib/testlibrary ../
+ * @library /lib/testlibrary /test/lib ../
  * @run main NotYetValidCertTest
  */
 public class NotYetValidCertTest extends Test {
--- a/jdk/test/sun/security/tools/keytool/ReadJar.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/sun/security/tools/keytool/ReadJar.java	Wed Jul 05 23:32:48 2017 +0200
@@ -26,14 +26,13 @@
  * @bug 6890872 8168882
  * @summary keytool -printcert to recognize signed jar files
  * @library /test/lib
- * @library /lib/testlibrary
  */
 
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import jdk.test.lib.SecurityTools;
 import jdk.test.lib.process.OutputAnalyzer;
-import jdk.testlibrary.JarUtils;
+import jdk.test.lib.util.JarUtils;
 
 public class ReadJar {
 
--- a/jdk/test/tools/jar/InputFilesTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/tools/jar/InputFilesTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,9 +28,8 @@
  *          options with/without a --release option.  Some input files are
  *          duplicates that sometimes cause exceptions and other times do not,
  *          demonstrating identical behavior to JDK 8 jar tool.
- * @library /lib/testlibrary
+ * @library /test/lib
  * @modules jdk.jartool
- * @build jdk.testlibrary.FileUtils
  * @run testng InputFilesTest
  */
 
@@ -51,7 +50,7 @@
 import java.util.stream.Stream;
 import java.util.zip.ZipException;
 
-import jdk.testlibrary.FileUtils;
+import jdk.test.lib.util.FileUtils;
 
 public class InputFilesTest {
     private static final ToolProvider JAR_TOOL = ToolProvider.findFirst("jar")
--- a/jdk/test/tools/jar/ReleaseBeforeFiles.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/tools/jar/ReleaseBeforeFiles.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,9 +27,8 @@
  * @summary test that both old style command line options and new gnu style
  *          command line options work with the --release option whether or
  *          not the --release option is preceded by a file name.
- * @library /lib/testlibrary
+ * @library /test/lib
  * @modules jdk.jartool/sun.tools.jar
- * @build jdk.testlibrary.FileUtils
  * @run testng ReleaseBeforeFiles
  */
 
@@ -46,7 +45,7 @@
 import java.util.Arrays;
 import java.util.stream.Stream;
 
-import jdk.testlibrary.FileUtils;
+import jdk.test.lib.util.FileUtils;
 
 public class ReleaseBeforeFiles {
     private Runnable onCompletion;
--- a/jdk/test/tools/jar/compat/CLICompatibility.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/tools/jar/compat/CLICompatibility.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,7 +35,7 @@
 import java.util.jar.JarOutputStream;
 import java.util.stream.Stream;
 
-import jdk.testlibrary.FileUtils;
+import jdk.test.lib.util.FileUtils;
 import jdk.testlibrary.JDKToolFinder;
 import org.testng.annotations.BeforeTest;
 import org.testng.annotations.Test;
@@ -49,8 +49,8 @@
 /*
  * @test
  * @bug 8170952
- * @library /lib/testlibrary
- * @build jdk.testlibrary.FileUtils jdk.testlibrary.JDKToolFinder
+ * @library /lib/testlibrary /test/lib
+ * @build jdk.testlibrary.JDKToolFinder
  * @run testng CLICompatibility
  * @summary Basic test for compatibility of CLI options
  */
--- a/jdk/test/tools/jar/mmrjar/Basic.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/tools/jar/mmrjar/Basic.java	Wed Jul 05 23:32:48 2017 +0200
@@ -29,8 +29,7 @@
  * @modules java.base/jdk.internal.module
  *          jdk.compiler
  *          jdk.jartool
- * @library /lib/testlibrary
- * @build jdk.testlibrary.FileUtils
+ * @library /test/lib
  * @run testng Basic
  */
 
@@ -57,7 +56,7 @@
 import java.util.zip.ZipFile;
 
 import jdk.internal.module.ModuleInfoExtender;
-import jdk.testlibrary.FileUtils;
+import jdk.test.lib.util.FileUtils;
 
 public class Basic {
     private static final ToolProvider JAR_TOOL = ToolProvider.findFirst("jar")
--- a/jdk/test/tools/jar/modularJar/Basic.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/tools/jar/modularJar/Basic.java	Wed Jul 05 23:32:48 2017 +0200
@@ -25,7 +25,6 @@
 import java.lang.module.ModuleDescriptor;
 import java.lang.reflect.Method;
 import java.nio.file.*;
-import java.nio.file.attribute.BasicFileAttributes;
 import java.util.*;
 import java.util.function.Consumer;
 import java.util.jar.JarEntry;
@@ -36,7 +35,7 @@
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import jdk.testlibrary.FileUtils;
+import jdk.test.lib.util.FileUtils;
 import jdk.testlibrary.JDKToolFinder;
 import org.testng.annotations.BeforeTest;
 import org.testng.annotations.DataProvider;
@@ -48,10 +47,10 @@
 /*
  * @test
  * @bug 8167328 8171830 8165640 8174248 8176772
- * @library /lib/testlibrary
+ * @library /lib/testlibrary /test/lib
  * @modules jdk.compiler
  *          jdk.jartool
- * @build jdk.testlibrary.FileUtils jdk.testlibrary.JDKToolFinder
+ * @build jdk.testlibrary.JDKToolFinder
  * @compile Basic.java
  * @run testng Basic
  * @summary Tests for plain Modular jars & Multi-Release Modular jars
--- a/jdk/test/tools/jar/multiRelease/ApiValidatorTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/tools/jar/multiRelease/ApiValidatorTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -24,18 +24,16 @@
 /*
  * @test
  * @summary Tests for API validator.
- * @library /test/lib /lib/testlibrary
+ * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          jdk.compiler
  *          jdk.jartool
- * @build jdk.test.lib.JDKToolFinder jdk.test.lib.Utils jdk.test.lib.process.*
- * @build jdk.testlibrary.FileUtils
  * @build MRTestBase
  * @run testng/timeout=1200 ApiValidatorTest
  */
 
 import jdk.test.lib.process.OutputAnalyzer;
-import jdk.testlibrary.FileUtils;
+import jdk.test.lib.util.FileUtils;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.DataProvider;
@@ -421,4 +419,5 @@
 
         javac(classes, sourceFiles);
     }
-}
\ No newline at end of file
+}
+
--- a/jdk/test/tools/jar/multiRelease/Basic.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/tools/jar/multiRelease/Basic.java	Wed Jul 05 23:32:48 2017 +0200
@@ -23,19 +23,17 @@
 
 /*
  * @test
- * @library /test/lib /lib/testlibrary
+ * @library /test/lib
  * @modules java.base/jdk.internal.misc
  *          jdk.compiler
  *          jdk.jartool
- * @build jdk.test.lib.JDKToolFinder jdk.test.lib.Utils jdk.test.lib.process.*
- * @build jdk.testlibrary.FileUtils
  * @build MRTestBase
  * @run testng Basic
  */
 
 import static org.testng.Assert.*;
 
-import jdk.testlibrary.FileUtils;
+import jdk.test.lib.util.FileUtils;
 import org.testng.annotations.*;
 
 import java.io.File;
--- a/jdk/test/tools/jar/multiRelease/RuntimeTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/tools/jar/multiRelease/RuntimeTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,12 +25,7 @@
  * @test
  * @summary Test Multi-Release jar usage in runtime
  * @library /test/lib
- * @library /lib/testlibrary
  * @modules jdk.compiler
- * @build jdk.test.lib.JDKToolFinder jdk.test.lib.JDKToolLauncher
- *        jdk.test.lib.process.OutputAnalyzer
- *        jdk.test.lib.process.ProcessTools
- *        CompilerUtils RuntimeTest
  * @run testng RuntimeTest
  */
 
@@ -41,6 +36,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.io.UncheckedIOException;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.net.URL;
@@ -51,7 +47,10 @@
 import java.nio.file.StandardCopyOption;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import org.testng.annotations.BeforeClass;
@@ -60,37 +59,53 @@
 
 import jdk.test.lib.JDKToolFinder;
 import jdk.test.lib.JDKToolLauncher;
+import jdk.test.lib.compiler.CompilerUtils;
 import jdk.test.lib.process.OutputAnalyzer;
 import jdk.test.lib.process.ProcessTools;
 
 public class RuntimeTest {
     public static final int SUCCESS = 0;
-    private final String src = System.getProperty("test.src", ".");
-    private final String usr = System.getProperty("user.dir", ".");
+    private static final String src = System.getProperty("test.src", ".");
+    private static final String usr = System.getProperty("user.dir", ".");
+
+    private static final Path srcFileRoot = Paths.get(src, "data", "runtimetest");
+    private static final Path genFileRoot = Paths.get(usr, "data", "runtimetest");
+
+    private static final int OLD_RELEASE = 8;
+    private static final int CURRENT_RELEASE = Runtime.version().major();
+    private static final int FUTURE_RELEASE = CURRENT_RELEASE + 1;
+    private static final String MRJAR_BOTH_RELEASES = "MV_BOTH.jar";
+    private static final String MRJAR_CURRENT_RELEASE = "MV_ONLY_" + CURRENT_RELEASE + ".jar";
+    private static final String NON_MRJAR_OLD_RELEASE = "NON_MV.jar";
+
+    private static final int[] versions = { OLD_RELEASE, CURRENT_RELEASE, FUTURE_RELEASE };
 
     @DataProvider(name = "jarFiles")
     Object[][] jarFiles() {
-        return new Object[][] { { "MV_BOTH.jar", 9, 9, 9 },
-                { "MV_ONLY_9.jar", 9, 9, 9 },
-                { "NON_MV.jar", 8, 8, 8 } };
+        return new Object[][]{
+            { MRJAR_BOTH_RELEASES, CURRENT_RELEASE, CURRENT_RELEASE, CURRENT_RELEASE },
+            { MRJAR_CURRENT_RELEASE, CURRENT_RELEASE, CURRENT_RELEASE, CURRENT_RELEASE },
+            { NON_MRJAR_OLD_RELEASE, OLD_RELEASE, OLD_RELEASE, OLD_RELEASE }
+        };
     }
 
     @BeforeClass
     protected void setUpTest() throws Throwable {
+        createJarSourceFiles();
         compile();
         Path classes = Paths.get("classes");
-        jar("cfm", "MV_BOTH.jar", "manifest.txt",
-                "-C", classes.resolve("base").toString(), ".",
-                "--release", "9", "-C", classes.resolve("v9").toString(), ".",
-                "--release", "10", "-C", classes.resolve("v10").toString(), ".")
+        jar("cfm", MRJAR_BOTH_RELEASES, "manifest.txt",
+                "-C", classes.resolve("v" + OLD_RELEASE).toString(), ".",
+                "--release", "" + CURRENT_RELEASE, "-C", classes.resolve("v" + CURRENT_RELEASE).toString(), ".",
+                "--release", "" + FUTURE_RELEASE, "-C", classes.resolve("v" + FUTURE_RELEASE).toString(), ".")
                 .shouldHaveExitValue(0);
 
-        jar("cfm", "MV_ONLY_9.jar", "manifest.txt",
-                "-C", classes.resolve("base").toString(), ".",
-                "--release", "9", "-C", classes.resolve("v9").toString(), ".")
+        jar("cfm", MRJAR_CURRENT_RELEASE, "manifest.txt",
+                "-C", classes.resolve("v" + OLD_RELEASE).toString(), ".",
+                "--release", "" + CURRENT_RELEASE, "-C", classes.resolve("v" + CURRENT_RELEASE).toString(), ".")
                 .shouldHaveExitValue(0);
-        jar("cfm", "NON_MV.jar", "manifest.txt",
-                "-C", classes.resolve("base").toString(), ".")
+        jar("cfm", NON_MRJAR_OLD_RELEASE, "manifest.txt",
+                "-C", classes.resolve("v" + OLD_RELEASE).toString(), ".")
                 .shouldHaveExitValue(0);
     }
 
@@ -203,12 +218,37 @@
         return ProcessTools.executeCommand(launcher.getCommand());
     }
 
+    private static String platformPath(String p) {
+        return p.replace("/", File.separator);
+    }
+
+    private static void createJarSourceFiles() throws IOException {
+        for (int ver : versions) {
+            Files.find(srcFileRoot, 3, (file, attrs) -> (file.toString().endsWith(".template")))
+                 .map(srcFileRoot::relativize)
+                 .map(Path::toString)
+                 .map(p -> p.replace(".template", ""))
+                 .forEach(f -> {
+                     try {
+                         Path template = srcFileRoot.resolve(f + ".template");
+                         Path out = genFileRoot.resolve(platformPath("v" + ver + "/" + f));
+                         Files.createDirectories(out.getParent());
+                         List<String> lines = Files.lines(template)
+                                 .map(s -> s.replaceAll("\\$version", String.valueOf(ver)))
+                                 .collect(Collectors.toList());
+                         Files.write(out, lines);
+                     } catch (IOException x) {
+                         throw new UncheckedIOException(x);
+                     }
+                 });
+        }
+    }
+
     private void compile() throws Throwable {
-        String[] vers = { "base", "v9", "v10" };
-        for (String ver : vers) {
-            Path classes = Paths.get(usr, "classes", ver);
+        for (int ver : versions) {
+            Path classes = Paths.get(usr, "classes", "v" + ver);
             Files.createDirectories(classes);
-            Path source = Paths.get(src, "data", "runtimetest", ver);
+            Path source = genFileRoot.resolve("v" + ver);
             assertTrue(CompilerUtils.compile(source, classes));
             Files.copy(source.resolve("versionResource"),
                     classes.resolve("versionResource"),
@@ -217,10 +257,10 @@
 
         Path classes = Paths.get(usr, "classes", "test");
         Files.createDirectory(classes);
-        Path source = Paths.get(src, "data", "runtimetest", "test");
+        Path source = srcFileRoot.resolve("test");
         assertTrue(
-                CompilerUtils.compile(source, classes, "-cp", "classes/base/"));
-        Files.copy(Paths.get(src, "data", "runtimetest", "manifest.txt"),
+                CompilerUtils.compile(source, classes, "-cp", "classes/v" + OLD_RELEASE));
+        Files.copy(srcFileRoot.resolve("manifest.txt"),
                 Paths.get(usr, "manifest.txt"),
                 StandardCopyOption.REPLACE_EXISTING);
     }
--- a/jdk/test/tools/jar/multiRelease/data/runtimetest/base/testpackage/Helper.java	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package testpackage;
-
-public class Helper {
-
-    private static final int HELPER_VERSION = 8;
-
-    public static int getHelperVersion() {
-        return HELPER_VERSION;
-    }
-}
--- a/jdk/test/tools/jar/multiRelease/data/runtimetest/base/testpackage/Main.java	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package testpackage;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-
-public class Main {
-
-    private static final int MAIN_VERSION = 8;
-
-    public static void main(String[] args) {
-        System.out.println("Main version: " + getMainVersion());
-        System.out.println("Helpers version: " + getHelperVersion());
-        System.out.println("Resource version: " + getResourceVersion());
-    }
-
-    public static int getMainVersion() {
-        return MAIN_VERSION;
-    }
-
-    public static int getHelperVersion() {
-        return testpackage.Helper.getHelperVersion();
-    }
-
-    public static int getResourceVersion() {
-        ClassLoader cl = Main.class.getClassLoader();
-        InputStream ris = cl.getResourceAsStream("versionResource");
-        if (ris == null) {
-            throw new Error("Test issue: resource versionResource"
-                    + " cannot be loaded!");
-        }
-        try (BufferedReader br = new BufferedReader(new InputStreamReader(ris))) {
-            return Integer.parseInt(br.readLine());
-        } catch (IOException ioe) {
-            throw new Error("Unexpected issue", ioe);
-        }
-    }
-}
--- a/jdk/test/tools/jar/multiRelease/data/runtimetest/base/versionResource	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-8
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/tools/jar/multiRelease/data/runtimetest/testpackage/Helper.java.template	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package testpackage;
+
+public class Helper {
+
+    private static final int HELPER_VERSION = $version;
+
+    public static int getHelperVersion() {
+        return HELPER_VERSION;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/tools/jar/multiRelease/data/runtimetest/testpackage/Main.java.template	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package testpackage;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
+public class Main {
+
+    private static final int MAIN_VERSION = $version;
+
+    public static void main(String[] args) {
+        System.out.println("Main version: " + getMainVersion());
+        System.out.println("Helpers version: " + getHelperVersion());
+        System.out.println("Resource version: " + getResourceVersion());
+    }
+
+    public static int getMainVersion() {
+        return MAIN_VERSION;
+    }
+
+    public static int getHelperVersion() {
+        return testpackage.Helper.getHelperVersion();
+    }
+
+    public static int getResourceVersion() {
+        ClassLoader cl = Main.class.getClassLoader();
+        InputStream ris = cl.getResourceAsStream("versionResource");
+        if (ris == null) {
+            throw new Error("Test issue: resource versionResource"
+                    + " cannot be loaded!");
+        }
+        try (BufferedReader br = new BufferedReader(new InputStreamReader(ris))) {
+            return Integer.parseInt(br.readLine());
+        } catch (IOException ioe) {
+            throw new Error("Unexpected issue", ioe);
+        }
+    }
+}
--- a/jdk/test/tools/jar/multiRelease/data/runtimetest/v10/testpackage/Helper.java	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package testpackage;
-
-public class Helper {
-
-    private static final int HELPER_VERSION = 10;
-
-    public static int getHelperVersion() {
-        return HELPER_VERSION;
-    }
-}
--- a/jdk/test/tools/jar/multiRelease/data/runtimetest/v10/testpackage/Main.java	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package testpackage;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-
-public class Main {
-
-    private static final int MAIN_VERSION = 10;
-
-    public static void main(String[] args) {
-        System.out.println("Main version: " + getMainVersion());
-        System.out.println("Helpers version: " + getHelperVersion());
-        System.out.println("Resource version: " + getResourceVersion());
-    }
-
-    public static int getMainVersion() {
-        return MAIN_VERSION;
-    }
-
-    public static int getHelperVersion() {
-        return testpackage.Helper.getHelperVersion();
-    }
-
-    public static int getResourceVersion() {
-        ClassLoader cl = Main.class.getClassLoader();
-        InputStream ris = cl.getResourceAsStream("versionResource");
-        if (ris == null) {
-            throw new Error("Test issue: resource versionResource"
-                    + " cannot be loaded!");
-        }
-        try (BufferedReader br = new BufferedReader(new InputStreamReader(ris))) {
-            return Integer.parseInt(br.readLine());
-        } catch (IOException ioe) {
-            throw new Error("Unexpected issue", ioe);
-        }
-    }
-}
--- a/jdk/test/tools/jar/multiRelease/data/runtimetest/v10/versionResource	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-10
--- a/jdk/test/tools/jar/multiRelease/data/runtimetest/v9/testpackage/Helper.java	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package testpackage;
-
-public class Helper {
-
-    private static final int HELPER_VERSION = 9;
-
-    public static int getHelperVersion() {
-        return HELPER_VERSION;
-    }
-}
--- a/jdk/test/tools/jar/multiRelease/data/runtimetest/v9/testpackage/Main.java	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package testpackage;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-
-public class Main {
-
-    private static final int MAIN_VERSION = 9;
-
-    public static void main(String[] args) {
-        System.out.println("Main version: " + getMainVersion());
-        System.out.println("Helpers version: " + getHelperVersion());
-        System.out.println("Resource version: " + getResourceVersion());
-    }
-
-    public static int getMainVersion() {
-        return MAIN_VERSION;
-    }
-
-    public static int getHelperVersion() {
-        return testpackage.Helper.getHelperVersion();
-    }
-
-    public static int getResourceVersion() {
-        ClassLoader cl = Main.class.getClassLoader();
-        InputStream ris = cl.getResourceAsStream("versionResource");
-        if (ris == null) {
-            throw new Error("Test issue: resource versionResource"
-                    + " cannot be loaded!");
-        }
-        try (BufferedReader br = new BufferedReader(new InputStreamReader(ris))) {
-            return Integer.parseInt(br.readLine());
-        } catch (IOException ioe) {
-            throw new Error("Unexpected issue", ioe);
-        }
-    }
-}
--- a/jdk/test/tools/jar/multiRelease/data/runtimetest/v9/versionResource	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/tools/jar/multiRelease/data/runtimetest/versionResource.template	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,1 @@
+$version
--- a/jdk/test/tools/jlink/plugins/SystemModuleDescriptors/CompiledVersionTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/tools/jlink/plugins/SystemModuleDescriptors/CompiledVersionTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,7 +29,7 @@
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import jdk.testlibrary.FileUtils;
+import jdk.test.lib.util.FileUtils;
 import static jdk.testlibrary.ProcessTools.*;
 
 
@@ -39,9 +39,9 @@
 
 /**
  * @test
- * @library /lib/testlibrary
+ * @library /lib/testlibrary /test/lib
  * @modules jdk.compiler jdk.jlink
- * @build CompiledVersionTest CompilerUtils jdk.testlibrary.FileUtils jdk.testlibrary.ProcessTools
+ * @build CompiledVersionTest CompilerUtils jdk.testlibrary.ProcessTools
  * @run testng CompiledVersionTest
  */
 
--- a/jdk/test/tools/jlink/plugins/SystemModuleDescriptors/UserModuleTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/tools/jlink/plugins/SystemModuleDescriptors/UserModuleTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -23,7 +23,6 @@
 
 import java.io.File;
 import java.io.IOException;
-import java.lang.module.ModuleDescriptor;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -33,7 +32,7 @@
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import jdk.testlibrary.FileUtils;
+import jdk.test.lib.util.FileUtils;
 
 import static jdk.testlibrary.ProcessTools.*;
 
@@ -44,11 +43,11 @@
 /**
  * @test
  * @bug 8142968 8173381 8174740
- * @library /lib/testlibrary
+ * @library /lib/testlibrary /test/lib
  * @modules jdk.compiler jdk.jlink
  * @modules java.base/jdk.internal.module
  * @modules java.base/jdk.internal.org.objectweb.asm
- * @build ModuleTargetHelper UserModuleTest CompilerUtils jdk.testlibrary.FileUtils jdk.testlibrary.ProcessTools
+ * @build ModuleTargetHelper UserModuleTest CompilerUtils jdk.testlibrary.ProcessTools
  * @run testng UserModuleTest
  */
 
--- a/jdk/test/tools/jmod/JmodNegativeTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/tools/jmod/JmodNegativeTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /**
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,10 +23,10 @@
 
 /*
  * @test
- * @library /lib/testlibrary
+ * @library /lib/testlibrary /test/lib
  * @modules jdk.compiler
  *          jdk.jlink
- * @build jdk.testlibrary.FileUtils CompilerUtils
+ * @build CompilerUtils
  * @run testng JmodNegativeTest
  * @summary Negative tests for jmod
  */
@@ -41,7 +41,7 @@
 import java.util.function.Supplier;
 import java.util.spi.ToolProvider;
 import java.util.zip.ZipOutputStream;
-import jdk.testlibrary.FileUtils;
+import jdk.test.lib.util.FileUtils;
 import org.testng.annotations.BeforeTest;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
--- a/jdk/test/tools/jmod/JmodTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/tools/jmod/JmodTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -1,5 +1,5 @@
 /**
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,10 +25,10 @@
  * @test
  * @bug 8142968 8166568 8166286 8170618 8168149
  * @summary Basic test for jmod
- * @library /lib/testlibrary
+ * @library /lib/testlibrary /test/lib
  * @modules jdk.compiler
  *          jdk.jlink
- * @build jdk.testlibrary.FileUtils CompilerUtils
+ * @build CompilerUtils
  * @run testng/othervm -Djava.io.tmpdir=. JmodTest
  */
 
@@ -40,9 +40,8 @@
 import java.util.function.Consumer;
 import java.util.regex.Pattern;
 import java.util.spi.ToolProvider;
-import java.util.stream.Collectors;
 import java.util.stream.Stream;
-import jdk.testlibrary.FileUtils;
+import jdk.test.lib.util.FileUtils;
 import org.testng.annotations.BeforeTest;
 import org.testng.annotations.Test;
 
--- a/jdk/test/tools/launcher/ArgsEnvVar.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/tools/launcher/ArgsEnvVar.java	Wed Jul 05 23:32:48 2017 +0200
@@ -23,7 +23,7 @@
 
 /**
  * @test
- * @bug 8170832
+ * @bug 8170832 8180447
  * @summary Arguments passed in environment variable
  * @build TestHelper
  * @run main ArgsEnvVar
@@ -224,6 +224,21 @@
         verifyOptions(List.of("-p", "?", "-jar", "test.jar", "one", "two"), tr);
     }
 
+    @Test
+    public void testTrailingSpaces() {
+        env.put(JDK_JAVA_OPTIONS, "--add-exports java.base/jdk.internal.misc=ALL-UNNAMED ");
+        TestResult tr = doExec(env, javaCmd, "-jar", "test.jar");
+        verifyOptions(List.of("--add-exports", "java.base/jdk.internal.misc=ALL-UNNAMED", "-jar", "test.jar"), tr);
+
+        env.put(JDK_JAVA_OPTIONS, "--class-path ' '");
+        tr = doExec(env, javaCmd, "-jar", "test.jar");
+        verifyOptions(List.of("--class-path", " ", "-jar", "test.jar"), tr);
+
+        env.put(JDK_JAVA_OPTIONS, "  --add-exports java.base/jdk.internal.misc=ALL-UNNAMED ");
+        tr = doExec(env, javaCmd, "-jar", "test.jar");
+        verifyOptions(List.of("--add-exports", "java.base/jdk.internal.misc=ALL-UNNAMED", "-jar", "test.jar"), tr);
+    }
+
     public static void main(String... args) throws Exception {
         init();
         ArgsEnvVar a = new ArgsEnvVar();
@@ -236,4 +251,3 @@
         }
     }
 }
-
--- a/jdk/test/tools/launcher/LauncherMessageTest.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/tools/launcher/LauncherMessageTest.java	Wed Jul 05 23:32:48 2017 +0200
@@ -24,16 +24,16 @@
 /**
  * @test
  * @bug 8167063
- * @library /lib/testlibrary
- * @build jdk.testlibrary.FileUtils
+ * @library /test/lib
  * @run main LauncherMessageTest
  * @summary LauncherHelper should not throw JNI error for LinkageError
  */
+
 import java.io.File;
 import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.List;
-import jdk.testlibrary.FileUtils;
+import jdk.test.lib.util.FileUtils;
 
 public class LauncherMessageTest {
 
--- a/jdk/test/tools/launcher/modules/patch/systemmodules/PatchSystemModules.java	Wed May 31 17:44:50 2017 +0000
+++ b/jdk/test/tools/launcher/modules/patch/systemmodules/PatchSystemModules.java	Wed Jul 05 23:32:48 2017 +0200
@@ -25,7 +25,7 @@
  * @test
  * @bug 8157068 8177844
  * @summary Patch java.base and user module with ModuleHashes attribute
- * @library /lib/testlibrary
+ * @library /lib/testlibrary /test/lib
  * @modules jdk.compiler
  * @build CompilerUtils
  * @run testng PatchSystemModules
@@ -39,7 +39,7 @@
 import java.util.List;
 import java.util.stream.Stream;
 
-import jdk.testlibrary.FileUtils;
+import jdk.test.lib.util.FileUtils;
 import jdk.testlibrary.JDKToolFinder;
 import org.testng.annotations.BeforeTest;
 import org.testng.annotations.Test;
--- a/make/CompileJavaModules.gmk	Wed May 31 17:44:50 2017 +0000
+++ b/make/CompileJavaModules.gmk	Wed Jul 05 23:32:48 2017 +0200
@@ -42,7 +42,8 @@
 
 ################################################################################
 
-java.base_ADD_JAVAC_FLAGS := -Xdoclint:all/protected,-reference '-Xdoclint/package:java.*,javax.*' -XDstringConcat=inline
+java.base_ADD_JAVAC_FLAGS := -Xdoclint:all/protected,-reference '-Xdoclint/package:java.*,javax.*' -XDstringConcat=inline \
+    --doclint-format html4
 java.base_COPY := .icu .dat .spp content-types.properties hijrah-config-islamic-umalqura.properties
 java.base_CLEAN := intrinsic.properties
 
@@ -95,7 +96,8 @@
 ################################################################################
 
 java.desktop_ADD_JAVAC_FLAGS := -Xdoclint:all/protected,-reference \
-    '-Xdoclint/package:java.*,javax.*' -Xlint:exports
+    '-Xdoclint/package:java.*,javax.*' -Xlint:exports \
+    --doclint-format html4
 java.desktop_COPY := .gif .png .wav .txt .xml .css .pf
 java.desktop_CLEAN := iio-plugin.properties cursors.properties
 
--- a/make/Docs.gmk	Wed May 31 17:44:50 2017 +0000
+++ b/make/Docs.gmk	Wed Jul 05 23:32:48 2017 +0200
@@ -55,7 +55,6 @@
 LICENSE_URL := http://www.oracle.com/technetwork/java/javase/terms/license/java9speclicense.html
 REDISTRIBUTION_URL := http://www.oracle.com/technetwork/java/redist-137594.html
 
-
 # In order to get a specific ordering it's necessary to specify the total
 # ordering of tags as the tags are otherwise ordered in order of definition.
 JAVADOC_TAGS := \
@@ -163,7 +162,7 @@
 
 ################################################################################
 
-JDK_DOCS_INDEX_HTML_TITLE := Java&trade; Platform, Standard Edition Development Kit \
+JDK_INDEX_TITLE := Java&trade; Platform, Standard Edition Development Kit \
     (JDK&trade;) $(VERSION_SPECIFICATION) Specification<br>$(DRAFT_MARKER_TITLE)
 
 ################################################################################
@@ -211,10 +210,10 @@
 SetupApiDocsGeneration = $(NamedParamsMacroTemplate)
 define SetupApiDocsGenerationBody
 
-  # Figure out all modules, both specified and transitive, that will be processed
-  # by javadoc.
-  $1_TRANSITIVE_MODULES := $$(call FindTransitiveDepsForModules, $$($1_MODULES))
-  $1_ALL_MODULES := $$(sort $$($1_MODULES) $$($1_TRANSITIVE_MODULES))
+  # Figure out all modules, both specified and transitive indirect exports, that
+  # will be processed by javadoc.
+  $1_INDIRECT_EXPORTS := $$(call FindTransitiveIndirectDepsForModules, $$($1_MODULES))
+  $1_ALL_MODULES := $$(sort $$($1_MODULES) $$($1_INDIRECT_EXPORTS))
 
   ifeq ($$(ENABLE_FULL_DOCS), true)
     # Tell the ModuleGraph taglet to generate html links to soon-to-be-created
@@ -334,7 +333,8 @@
 ################################################################################
 # Setup generation of the Java SE API documentation (javadoc + modulegraph)
 
-# The Java SE module scope is just java.se.ee and it's transitive modules.
+# The Java SE module scope is just java.se.ee and it's transitive indirect
+# exports.
 JAVASE_JAVADOC_MODULES := java.se.ee
 
 JAVASE_JAVADOC_OVERVIEW := $(JDK_TOPDIR)/src/java.base/share/classes/overview-core.html
@@ -356,15 +356,27 @@
 
 ################################################################################
 
-JDK_DOCS_INDEX_HTML := $(DOCS_OUTPUTDIR)/index.html
+JDK_INDEX_HTML := $(DOCS_OUTPUTDIR)/index.html
+JDK_INDEX_TOOLS_DIR := $(TOOLS_CLASSES_DIR)/build/tools/docs
 
-$(JDK_DOCS_INDEX_HTML): $(BUILD_JIGSAW_TOOLS)
+$(JDK_INDEX_HTML): $(BUILD_JIGSAW_TOOLS) \
+    $(JDK_INDEX_TOOLS_DIR)/docs-bundle-page.html  \
+    $(JDK_INDEX_TOOLS_DIR)/docs-module-groups.properties
 	$(call LogInfo, Generating docs bundle index page)
 	$(MKDIR) -p $(@D)
-	$(TOOL_GEN_DOCS_BUNDLE_PAGE) --title '$(JDK_DOCS_INDEX_HTML_TITLE)' \
+	$(TOOL_GEN_DOCS_BUNDLE_PAGE) --title '$(JDK_INDEX_TITLE)' \
 		--output $@
 
-JDK_DOCS_INDEX_HTML_TARGETS := $(JDK_DOCS_INDEX_HTML)
+JDK_INDEX_TARGETS := $(JDK_INDEX_HTML)
+
+# Copy the global resources
+GLOBAL_SPECS_RESOURCES_DIR := $(JDK_TOPDIR)/make/data/docs-resources/
+$(eval $(call SetupCopyFiles, COPY_GLOBAL_RESOURCES, \
+    SRC := $(GLOBAL_SPECS_RESOURCES_DIR), \
+    FILES := $(call CacheFind, $(GLOBAL_SPECS_RESOURCES_DIR)), \
+    DEST := $(DOCS_OUTPUTDIR), \
+))
+JDK_INDEX_TARGETS += $(COPY_GLOBAL_RESOURCES)
 
 ################################################################################
 # Copy JDK specs files
@@ -389,20 +401,11 @@
   ) \
 )
 
-# Copy the global resources
-GLOBAL_SPECS_RESOURCES_DIR := $(JDK_TOPDIR)/make/data/docs-resources/specs
-$(eval $(call SetupCopyFiles, COPY_GLOBAL_RESOURCES, \
-    SRC := $(GLOBAL_SPECS_RESOURCES_DIR), \
-    FILES := $(call CacheFind, $(GLOBAL_SPECS_RESOURCES_DIR)), \
-    DEST := $(DOCS_OUTPUTDIR)/specs/, \
-))
-JDK_SPECS_TARGETS += $(COPY_GLOBAL_RESOURCES)
-
 ifeq ($(ENABLE_FULL_DOCS), true)
   # For all markdown files in $module/share/specs directories, convert them to
   # html.
 
-  GLOBAL_SPECS_DEFAULT_CSS_FILE := $(DOCS_OUTPUTDIR)/specs/resources/jdk-default.css
+  GLOBAL_SPECS_DEFAULT_CSS_FILE := $(DOCS_OUTPUTDIR)/resources/jdk-default.css
 
   $(foreach m, $(ALL_MODULES), \
     $(eval SPECS_$m := $(call FindModuleSpecsDirs, $m)) \
@@ -464,7 +467,7 @@
 
 docs-jdk-specs: $(JDK_SPECS_TARGETS)
 
-docs-jdk-index: $(JDK_DOCS_INDEX_HTML_TARGETS)
+docs-jdk-index: $(JDK_INDEX_TARGETS)
 
 docs-zip: $(ZIP_TARGETS)
 
--- a/make/Help.gmk	Wed May 31 17:44:50 2017 +0000
+++ b/make/Help.gmk	Wed Jul 05 23:32:48 2017 +0200
@@ -56,6 +56,8 @@
 	$(info $(_) make test              # Run tests, default is all tests (see TEST below))
 	$(info $(_) make run-test-<test>   # Run test, e.g. run-test-tier1)
 	$(info $(_) make run-test TEST=<t> # Run test(s) given by TEST specification)
+	$(info $(_) make exploded-run-test TEST=<t> # Run test(s) on the exploded image instead of)
+	$(info $(_)                        # the full jdk image)
 	$(info )
 	$(info Targets for cleaning)
 	$(info $(_) make clean             # Remove all files generated by make, but not those)
--- a/make/Main.gmk	Wed May 31 17:44:50 2017 +0000
+++ b/make/Main.gmk	Wed Jul 05 23:32:48 2017 +0200
@@ -450,13 +450,18 @@
   run-test-$1:
 	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f RunTests.gmk run-test TEST="$1")
 
+  exploded-run-test-$1:
+	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f RunTests.gmk run-test \
+	    TEST="$1" JDK_IMAGE_DIR=$(JDK_OUTPUTDIR))
+
 endef
 
 # ALL_NAMED_TESTS is defined in FindTests.gmk
 $(foreach t, $(ALL_NAMED_TESTS), $(eval $(call DeclareRunTestRecipe,$t)))
 ALL_TEST_TARGETS := $(addprefix run-test-, $(ALL_NAMED_TESTS))
+ALL_EXPLODED_TEST_TARGETS := $(addprefix exploded-run-test-, $(ALL_NAMED_TESTS))
 
-ALL_TARGETS += $(ALL_TEST_TARGETS)
+ALL_TARGETS += $(ALL_TEST_TARGETS) $(ALL_EXPLODED_TEST_TARGETS)
 
 ################################################################################
 # Build tests
@@ -485,6 +490,10 @@
 run-test:
 	+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f RunTests.gmk run-test TEST="$(TEST)")
 
+exploded-run-test:
+	+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f RunTests.gmk run-test \
+	    TEST="$(TEST)" JDK_IMAGE_DIR=$(JDK_OUTPUTDIR))
+
 ifeq ($(BUILD_GTEST), true)
   test-image-hotspot-gtest:
 	+($(CD) $(HOTSPOT_TOPDIR)/make/test && $(MAKE) $(MAKE_ARGS) -f GtestImage.gmk)
@@ -514,7 +523,7 @@
     test-image-hotspot-jtreg-native build-test-jdk-jtreg-native \
     test-image-jdk-jtreg-native build-test-lib build-test-failure-handler \
     test-failure-handler test-image-failure-handler test-image-hotspot-gtest \
-    run-test
+    run-test exploded-run-test
 
 ################################################################################
 # Run tests
@@ -798,7 +807,8 @@
   docs-javase-api-modulegraph: exploded-image buildtools-modules
 
   # The gensrc steps for hotspot and jdk.jdi create html spec files.
-  docs-jdk-specs: hotspot-$(JVM_VARIANT_MAIN)-gensrc jdk.jdi-gensrc
+  docs-jdk-specs: hotspot-$(JVM_VARIANT_MAIN)-gensrc jdk.jdi-gensrc \
+      docs-jdk-index
 
   docs-jdk-index: exploded-image buildtools-modules
 
@@ -807,9 +817,11 @@
   test: jdk-image test-image
 
   run-test: jdk-image test-image
+  exploded-run-test: exploded-image test-image
 
   # Declare dependency for all generated test targets
   $(foreach t, $(ALL_TEST_TARGETS), $(eval $t: jdk-image test-image))
+  $(foreach t, $(ALL_EXPLODED_TEST_TARGETS), $(eval $t: exploded-image test-image))
 
   create-buildjdk-copy: jdk.jlink-java java.base-gendata \
       $(addsuffix -java, $(INTERIM_IMAGE_MODULES))
--- a/make/common/Modules.gmk	Wed May 31 17:44:50 2017 +0000
+++ b/make/common/Modules.gmk	Wed Jul 05 23:32:48 2017 +0200
@@ -151,6 +151,7 @@
     jdk.crypto.ec \
     jdk.dynalink \
     jdk.editpad \
+    jdk.hotspot.agent \
     jdk.httpserver \
     jdk.incubator.httpclient \
     jdk.jartool \
@@ -298,7 +299,8 @@
         $(foreach sub, $(SRC_SUBDIRS), $(addsuffix /*/$(sub), $(TOP_SRC_DIRS))))
 
 ################################################################################
-# Extract module dependencies from module-info.java files.
+# Extract module dependencies from module-info.java files, both normal
+# dependencies ("requires"), and indirect exports ("requires transitive").
 
 MODULE_DEPS_MAKEFILE := $(MAKESUPPORT_OUTPUTDIR)/module-deps.gmk
 
@@ -320,17 +322,31 @@
 	                          gsub(/^ +\*.*/, ""); \
 	                          gsub(/ /, ""); \
 	                          printf(" %s", $$0) } \
+	          END           { printf("\n") }' $m && \
+	      $(PRINTF) "TRANSITIVE_MODULES_$(call GetModuleNameFromModuleInfo, $m) :=" && \
+	      $(NAWK) -v MODULE=$(call GetModuleNameFromModuleInfo, $m) '\
+	          BEGIN      { if (MODULE != "java.base") printf(" java.base"); } \
+	          /^ *requires  *transitive/ { \
+	                          sub(/;/, ""); \
+	                          sub(/requires/, ""); \
+	                          sub(/transitive/, ""); \
+	                          sub(/\/\/.*/, ""); \
+	                          sub(/\/\*.*\*\//, ""); \
+	                          gsub(/^ +\*.*/, ""); \
+	                          gsub(/ /, ""); \
+	                          printf(" %s", $$0) } \
 	          END           { printf("\n") }' $m \
 	    ) >> $@ $(NEWLINE))
 
 -include $(MODULE_DEPS_MAKEFILE)
 
-# Param 1: Module to find deps for
+# Find dependencies ("requires") for a given module.
+# Param 1: Module to find dependencies for.
 FindDepsForModule = \
   $(DEPS_$(strip $1))
 
-# Finds transitive dependencies in 3 levels.
-# Param 1: Module to find transitive deps for
+# Find dependencies ("requires") transitively in 3 levels for a given module.
+# Param 1: Module to find dependencies for.
 FindTransitiveDepsForModule = \
     $(sort $(call FindDepsForModule, $1) \
         $(foreach m, $(call FindDepsForModule, $1), \
@@ -338,11 +354,30 @@
             $(foreach n, $(call FindDepsForModule, $m), \
                  $(call FindDepsForModule, $n))))
 
-# Finds transitive dependencies in 3 levels for a set of modules.
-# Param 1: List of modules to find transitive deps for
+# Find dependencies ("requires") transitively in 3 levels for a set of modules.
+# Param 1: List of modules to find dependencies for.
 FindTransitiveDepsForModules = \
     $(sort $(foreach m, $1, $(call FindTransitiveDepsForModule, $m)))
 
+# Find indirect exported modules ("requires transitive") for a given module .
+# Param 1: Module to find indirect exported modules for.
+FindIndirectExportsForModule = \
+  $(TRANSITIVE_MODULES_$(strip $1))
+
+# Finds indirect exported modules transitively in 3 levels for a given module.
+# Param 1: Module to find indirect exported modules for.
+FindTransitiveIndirectDepsForModule = \
+    $(sort $(call FindIndirectExportsForModule, $1) \
+        $(foreach m, $(call FindIndirectExportsForModule, $1), \
+            $(call FindIndirectExportsForModule, $m) \
+            $(foreach n, $(call FindIndirectExportsForModule, $m), \
+                 $(call FindIndirectExportsForModule, $n))))
+
+# Finds indirect exported modules transitively in 3 levels for a set of modules.
+# Param 1: List of modules to find indirect exported modules for.
+FindTransitiveIndirectDepsForModules = \
+    $(sort $(foreach m, $1, $(call FindTransitiveIndirectDepsForModule, $m)))
+
 # Upgradeable modules are those that are either defined as upgradeable or that
 # require an upradeable module.
 FindAllUpgradeableModules = \
--- a/make/common/ProcessMarkdown.gmk	Wed May 31 17:44:50 2017 +0000
+++ b/make/common/ProcessMarkdown.gmk	Wed Jul 05 23:32:48 2017 +0200
@@ -36,7 +36,7 @@
     ifneq ($$(findstring http:/, $$($1_CSS)), )
       $1_$2_CSS_OPTION := --css '$$($1_CSS)'
     else
-      $1_$2_CSS := $$(call RelativePath, $$($1_CSS), $$($1_$2_TARGET_DIR))
+      $1_$2_CSS := $$(strip $$(call RelativePath, $$($1_CSS), $$($1_$2_TARGET_DIR)))
       $1_$2_CSS_OPTION := --css '$$($1_$2_CSS)'
     endif
   endif
@@ -51,7 +51,7 @@
 	$$(call LogInfo, Converting $2 to html)
 	$$(call MakeDir, $$($1_$2_TARGET_DIR) $$(SUPPORT_OUTPUTDIR)/markdown)
 	$$(call ExecuteWithLog, $$(SUPPORT_OUTPUTDIR)/markdown/$$($1_$2_MARKER), \
-	    $$(PANDOC) $$($1_OPTIONS) -f markdown -t html --standalone \
+	    $$(PANDOC) $$($1_OPTIONS) -f markdown -t html5 --standalone \
 	    $$($1_$2_CSS_OPTION) $$($1_$2_OPTIONS) '$$<' -o '$$@')
         ifneq ($$(findstring $$(LOG_LEVEL), debug trace),)
 	TOO_LONG_LINES=`$$(GREP) -E -e '^.{80}.+$$$$' $$<` || true ; \
--- a/make/common/SetupJavaCompilers.gmk	Wed May 31 17:44:50 2017 +0000
+++ b/make/common/SetupJavaCompilers.gmk	Wed Jul 05 23:32:48 2017 +0200
@@ -69,7 +69,7 @@
 $(eval $(call SetupJavaCompiler,GENERATE_JDKBYTECODE, \
     JVM := $(JAVA_JAVAC), \
     JAVAC := $(NEW_JAVAC), \
-    FLAGS := -source 10 -target 10 \
+    FLAGS := -source 10 -target 10 --doclint-format html5 \
         -encoding ascii -XDignore.symbol.file=true $(JAVAC_WARNINGS), \
     SERVER_DIR := $(SJAVAC_SERVER_DIR), \
     SERVER_JVM := $(SJAVAC_SERVER_JAVA)))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/lib/jdk/test/lib/InfiniteLoop.java	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package jdk.test.lib;
+
+import java.util.Objects;
+
+/**
+ * Class which runs another Runnable in infinite loop with certain pauses
+ * between cycles.
+ */
+public class InfiniteLoop implements Runnable {
+    private final Runnable target;
+    private final long mills;
+
+
+    /**
+     * @param target a target to run in a loop
+     * @param mills  the length of pause time in milliseconds
+     * @throws NullPointerException if target is null
+     * @throws IllegalArgumentException if the value of millis is negative
+     */
+    public InfiniteLoop(Runnable target, long mills) {
+        Objects.requireNonNull(target);
+        if (mills < 0) {
+            throw new IllegalArgumentException("mills < 0");
+        }
+        this.target = target;
+        this.mills = mills;
+    }
+
+    @Override
+    public void run() {
+        try {
+            while (true) {
+                target.run();
+                if (mills > 0) {
+                    Thread.sleep(mills);
+                }
+            }
+        } catch (InterruptedException e) {
+            Thread.currentThread().interrupt();
+            throw new Error(e);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/lib/jdk/test/lib/RandomFactory.java	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package jdk.test.lib;
+
+import java.util.Random;
+import java.util.SplittableRandom;
+
+/**
+ * Factory class which generates and prints to STDOUT a long-valued seed
+ * for use in initializing a PRNG.  An instance of {@code Random} or
+ * {@code SplittableRandom} may likewise be obtained.
+ */
+public class RandomFactory {
+    /**
+     * Attempt to obtain the seed from the value of the "seed" property.
+     * @return The seed or {@code null} if the "seed" property was not set or
+     *         could not be parsed.
+     */
+    private static Long getSystemSeed() {
+        Long seed = null;
+        try {
+            // note that Long.valueOf(null) also throws a
+            // NumberFormatException so if the property is undefined this
+            // will still work correctly
+            seed = Long.valueOf(System.getProperty("seed"));
+        } catch (NumberFormatException e) {
+            // do nothing: seed is still null
+        }
+
+        return seed;
+    }
+
+    /**
+     * Obtain a seed from an independent PRNG.
+     *
+     * @return A random seed.
+     */
+    private static long getRandomSeed() {
+        return new Random().nextLong();
+    }
+
+    /**
+     * Obtain and print to STDOUT a seed appropriate for initializing a PRNG.
+     * If the system property "seed" is set and has value which may be correctly
+     * parsed it is used, otherwise a seed is generated using an independent
+     * PRNG.
+     *
+     * @return The seed.
+     */
+    public static long getSeed() {
+        Long seed = getSystemSeed();
+        if (seed == null) {
+            seed = getRandomSeed();
+        }
+        System.out.println("Seed from RandomFactory = "+seed+"L");
+        return seed;
+    }
+
+    /**
+     * Obtain and print to STDOUT a seed and use it to initialize a new
+     * {@code Random} instance which is returned. If the system
+     * property "seed" is set and has value which may be correctly parsed it
+     * is used, otherwise a seed is generated using an independent PRNG.
+     *
+     * @return The {@code Random} instance.
+     */
+    public static Random getRandom() {
+        return new Random(getSeed());
+    }
+
+    /**
+     * Obtain and print to STDOUT a seed and use it to initialize a new
+     * {@code SplittableRandom} instance which is returned. If the system
+     * property "seed" is set and has value which may be correctly parsed it
+     * is used, otherwise a seed is generated using an independent PRNG.
+     *
+     * @return The {@code SplittableRandom} instance.
+     */
+    public static SplittableRandom getSplittableRandom() {
+        return new SplittableRandom(getSeed());
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/lib/jdk/test/lib/TimeLimitedRunner.java	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package jdk.test.lib;
+
+import java.util.Objects;
+import java.util.concurrent.Callable;
+
+/**
+ * Auxiliary class to run target w/ given timeout.
+ */
+public class TimeLimitedRunner implements Callable<Void> {
+    private final long              stoptime;
+    private final long              timeout;
+    private final double            factor;
+    private final Callable<Boolean> target;
+
+    /**
+     * @param timeout   a timeout. zero means no time limitation
+     * @param factor    a multiplier used to estimate next iteration time
+     * @param target    a target to run
+     * @throws NullPointerException     if target is null
+     * @throws IllegalArgumentException if timeout is negative or
+                                        factor isn't positive
+     */
+    public TimeLimitedRunner(long timeout, double factor,
+            Callable<Boolean> target) {
+        Objects.requireNonNull(target, "target must not be null");
+        if (timeout < 0) {
+            throw new IllegalArgumentException("timeout[" + timeout + "] < 0");
+        }
+        if (factor <= 0d) {
+            throw new IllegalArgumentException("factor[" + factor + "] <= 0");
+        }
+        this.stoptime = System.currentTimeMillis() + timeout;
+        this.timeout = timeout;
+        this.factor = factor;
+        this.target = target;
+    }
+
+    /**
+     * Runs @{linkplan target} while it returns true and timeout isn't exceeded
+     */
+    @Override
+    public Void call() throws Exception {
+        long maxDuration = 0L;
+        long iterStart = System.currentTimeMillis();
+        if (timeout != 0 && iterStart > stoptime) {
+            return null;
+        }
+        while (target.call()) {
+            if (timeout != 0) {
+                long iterDuration = System.currentTimeMillis() - iterStart;
+                maxDuration = Math.max(maxDuration, iterDuration);
+                iterStart = System.currentTimeMillis();
+                if (iterStart + (maxDuration * factor) > stoptime) {
+                    System.out.println("Not enough time to continue execution. "
+                            + "Interrupted.");
+                    break;
+                }
+            }
+        }
+        return null;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/lib/jdk/test/lib/util/FileUtils.java	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,229 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package jdk.test.lib.util;
+
+import jdk.test.lib.Platform;
+
+import java.io.IOException;
+import java.nio.file.DirectoryNotEmptyException;
+import java.nio.file.FileVisitResult;
+import java.nio.file.Files;
+import java.nio.file.NoSuchFileException;
+import java.nio.file.Path;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+
+/**
+ * Common library for various test file utility functions.
+ */
+public final class FileUtils {
+    private static final boolean IS_WINDOWS = Platform.isWindows();
+    private static final int RETRY_DELETE_MILLIS = IS_WINDOWS ? 500 : 0;
+    private static final int MAX_RETRY_DELETE_TIMES = IS_WINDOWS ? 15 : 0;
+
+    /**
+     * Deletes a file, retrying if necessary.
+     *
+     * @param path  the file to delete
+     *
+     * @throws NoSuchFileException
+     *         if the file does not exist (optional specific exception)
+     * @throws DirectoryNotEmptyException
+     *         if the file is a directory and could not otherwise be deleted
+     *         because the directory is not empty (optional specific exception)
+     * @throws IOException
+     *         if an I/O error occurs
+     */
+    public static void deleteFileWithRetry(Path path) throws IOException {
+        try {
+            deleteFileWithRetry0(path);
+        } catch (InterruptedException x) {
+            throw new IOException("Interrupted while deleting.", x);
+        }
+    }
+
+    /**
+     * Deletes a file, retrying if necessary.
+     * No exception thrown if file doesn't exist.
+     *
+     * @param path  the file to delete
+     *
+     * @throws NoSuchFileException
+     *         if the file does not exist (optional specific exception)
+     * @throws DirectoryNotEmptyException
+     *         if the file is a directory and could not otherwise be deleted
+     *         because the directory is not empty (optional specific exception)
+     * @throws IOException
+     *         if an I/O error occurs
+     */
+    public static void deleteFileIfExistsWithRetry(Path path) throws IOException {
+        try {
+            if (Files.exists(path)) {
+                deleteFileWithRetry0(path);
+            }
+        } catch (InterruptedException x) {
+            throw new IOException("Interrupted while deleting.", x);
+        }
+    }
+
+    private static void deleteFileWithRetry0(Path path)
+            throws IOException, InterruptedException {
+        int times = 0;
+        IOException ioe = null;
+        while (true) {
+            try {
+                Files.delete(path);
+                while (Files.exists(path)) {
+                    times++;
+                    if (times > MAX_RETRY_DELETE_TIMES) {
+                        throw new IOException("File still exists after " + times + " waits.");
+                    }
+                    Thread.sleep(RETRY_DELETE_MILLIS);
+                }
+                break;
+            } catch (NoSuchFileException | DirectoryNotEmptyException x) {
+                throw x;
+            } catch (IOException x) {
+                // Backoff/retry in case another process is accessing the file
+                times++;
+                if (ioe == null) {
+                    ioe = x;
+                } else {
+                    ioe.addSuppressed(x);
+                }
+
+                if (times > MAX_RETRY_DELETE_TIMES) {
+                    throw ioe;
+                }
+                Thread.sleep(RETRY_DELETE_MILLIS);
+            }
+        }
+    }
+
+    /**
+     * Deletes a directory and its subdirectories, retrying if necessary.
+     *
+     * @param dir  the directory to delete
+     *
+     * @throws  IOException
+     *          If an I/O error occurs. Any such exceptions are caught
+     *          internally. If only one is caught, then it is re-thrown.
+     *          If more than one exception is caught, then the second and
+     *          following exceptions are added as suppressed exceptions of the
+     *          first one caught, which is then re-thrown.
+     */
+    public static void deleteFileTreeWithRetry(Path dir) throws IOException {
+        IOException ioe = null;
+        final List<IOException> excs = deleteFileTreeUnchecked(dir);
+        if (!excs.isEmpty()) {
+            ioe = excs.remove(0);
+            for (IOException x : excs) {
+                ioe.addSuppressed(x);
+            }
+        }
+        if (ioe != null) {
+            throw ioe;
+        }
+    }
+
+    public static List<IOException> deleteFileTreeUnchecked(Path dir) {
+        final List<IOException> excs = new ArrayList<>();
+        try {
+            java.nio.file.Files.walkFileTree(dir, new SimpleFileVisitor<>() {
+                @Override
+                public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
+                    try {
+                        deleteFileWithRetry0(file);
+                    } catch (IOException x) {
+                        excs.add(x);
+                    } catch (InterruptedException x) {
+                        excs.add(new IOException("Interrupted while deleting.", x));
+                        return FileVisitResult.TERMINATE;
+                    }
+                    return FileVisitResult.CONTINUE;
+                }
+                @Override
+                public FileVisitResult postVisitDirectory(Path dir, IOException exc) {
+                    try {
+                        deleteFileWithRetry0(dir);
+                    } catch (IOException x) {
+                        excs.add(x);
+                    } catch (InterruptedException x) {
+                        excs.add(new IOException("Interrupted while deleting.", x));
+                        return FileVisitResult.TERMINATE;
+                    }
+                    return FileVisitResult.CONTINUE;
+                }
+                @Override
+                public FileVisitResult visitFileFailed(Path file, IOException exc) {
+                    excs.add(exc);
+                    return FileVisitResult.CONTINUE;
+                }
+            });
+        } catch (IOException x) {
+            excs.add(x);
+        }
+        return excs;
+    }
+
+    /**
+     * Checks whether all file systems are accessible. This is performed
+     * by checking free disk space on all mounted file systems via a
+     * separate, spawned process. File systems are considered to be
+     * accessible if this process completes successfully before a given
+     * fixed duration has elapsed.
+     *
+     * @implNote On Unix this executes the {@code df} command in a separate
+     * process and on Windows always returns {@code true}.
+     */
+    public static boolean areFileSystemsAccessible() throws IOException {
+        boolean areFileSystemsAccessible = true;
+        if (!IS_WINDOWS) {
+            // try to check whether 'df' hangs
+            System.out.println("\n--- df output ---");
+            System.out.flush();
+            Process proc = new ProcessBuilder("df").inheritIO().start();
+            try {
+                proc.waitFor(90, TimeUnit.SECONDS);
+            } catch (InterruptedException ignored) {
+            }
+            try {
+                int exitValue = proc.exitValue();
+                if (exitValue != 0) {
+                    System.err.printf("df process exited with %d != 0%n",
+                        exitValue);
+                    areFileSystemsAccessible = false;
+                }
+            } catch (IllegalThreadStateException ignored) {
+                System.err.println("df command apparently hung");
+                areFileSystemsAccessible = false;
+            }
+        }
+        return areFileSystemsAccessible;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/lib/jdk/test/lib/util/JarUtils.java	Wed Jul 05 23:32:48 2017 +0200
@@ -0,0 +1,148 @@
+/*
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package jdk.test.lib.util;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+import java.util.jar.JarOutputStream;
+import java.util.jar.Manifest;
+
+/**
+ * Common library for various test jar file utility functions.
+ */
+public final class JarUtils {
+
+    /**
+     * Create jar file with specified files. If a specified file does not exist,
+     * a new jar entry will be created with the file name itself as the content.
+     */
+    public static void createJar(String dest, String... files)
+            throws IOException {
+        try (JarOutputStream jos = new JarOutputStream(
+                new FileOutputStream(dest), new Manifest())) {
+            for (String file : files) {
+                System.out.println(String.format("Adding %s to %s",
+                        file, dest));
+
+                // add an archive entry, and write a file
+                jos.putNextEntry(new JarEntry(file));
+                try (FileInputStream fis = new FileInputStream(file)) {
+                    fis.transferTo(jos);
+                } catch (FileNotFoundException e) {
+                    jos.write(file.getBytes());
+                }
+            }
+        }
+        System.out.println();
+    }
+
+    /**
+     * Add or remove specified files to existing jar file. If a specified file
+     * to be updated or added does not exist, the jar entry will be created
+     * with the file name itself as the content.
+     *
+     * @param src the original jar file name
+     * @param dest the new jar file name
+     * @param files the files to update. The list is broken into 2 groups
+     *              by a "-" string. The files before in the 1st group will
+     *              be either updated or added. The files in the 2nd group
+     *              will be removed. If no "-" exists, all files belong to
+     *              the 1st group.
+     */
+    public static void updateJar(String src, String dest, String... files)
+            throws IOException {
+        try (JarOutputStream jos = new JarOutputStream(
+                new FileOutputStream(dest))) {
+
+            // copy each old entry into destination unless the entry name
+            // is in the updated list
+            List<String> updatedFiles = new ArrayList<>();
+            try (JarFile srcJarFile = new JarFile(src)) {
+                Enumeration<JarEntry> entries = srcJarFile.entries();
+                while (entries.hasMoreElements()) {
+                    JarEntry entry = entries.nextElement();
+                    String name = entry.getName();
+                    boolean found = false;
+                    boolean update = true;
+                    for (String file : files) {
+                        if (file.equals("-")) {
+                            update = false;
+                        } else if (name.equals(file)) {
+                            updatedFiles.add(file);
+                            found = true;
+                            break;
+                        }
+                    }
+
+                    if (found) {
+                        if (update) {
+                            System.out.println(String.format("Updating %s with %s",
+                                    dest, name));
+                            jos.putNextEntry(new JarEntry(name));
+                            try (FileInputStream fis = new FileInputStream(name)) {
+                                fis.transferTo(jos);
+                            } catch (FileNotFoundException e) {
+                                jos.write(name.getBytes());
+                            }
+                        } else {
+                            System.out.println(String.format("Removing %s from %s",
+                                    name, dest));
+                        }
+                    } else {
+                        System.out.println(String.format("Copying %s to %s",
+                                name, dest));
+                        jos.putNextEntry(entry);
+                        srcJarFile.getInputStream(entry).transferTo(jos);
+                    }
+                }
+            }
+
+            // append new files
+            for (String file : files) {
+                if (file.equals("-")) {
+                    break;
+                }
+                if (!updatedFiles.contains(file)) {
+                    System.out.println(String.format("Adding %s with %s",
+                            dest, file));
+                    jos.putNextEntry(new JarEntry(file));
+                    try (FileInputStream fis = new FileInputStream(file)) {
+                        fis.transferTo(jos);
+                    } catch (FileNotFoundException e) {
+                        jos.write(file.getBytes());
+                    }
+                }
+            }
+        }
+        System.out.println();
+    }
+
+}
--- a/test/lib/jdk/test/lib/wrappers/InfiniteLoop.java	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package jdk.test.lib.wrappers;
-
-import java.util.Objects;
-
-/**
- * Class which runs another Runnable in infinite loop with certain pauses
- * between cycles.
- */
-public class InfiniteLoop implements Runnable {
-    private final Runnable target;
-    private final long mills;
-
-
-    /**
-     * @param target a target to run in a loop
-     * @param mills  the length of pause time in milliseconds
-     * @throws NullPointerException if target is null
-     * @throws IllegalArgumentException if the value of millis is negative
-     */
-    public InfiniteLoop(Runnable target, long mills) {
-        Objects.requireNonNull(target);
-        if (mills < 0) {
-            throw new IllegalArgumentException("mills < 0");
-        }
-        this.target = target;
-        this.mills = mills;
-    }
-
-    @Override
-    public void run() {
-        try {
-            while (true) {
-                target.run();
-                if (mills > 0) {
-                    Thread.sleep(mills);
-                }
-            }
-        } catch (InterruptedException e) {
-            Thread.currentThread().interrupt();
-            throw new Error(e);
-        }
-    }
-}
--- a/test/lib/jdk/test/lib/wrappers/TimeLimitedRunner.java	Wed May 31 17:44:50 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-/*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package jdk.test.lib.wrappers;
-
-import java.util.Objects;
-import java.util.concurrent.Callable;
-
-/**
- * Auxiliary class to run target w/ given timeout.
- */
-public class TimeLimitedRunner implements Callable<Void> {
-    private final long              stoptime;
-    private final long              timeout;
-    private final double            factor;
-    private final Callable<Boolean> target;
-
-    /**
-     * @param timeout   a timeout. zero means no time limitation
-     * @param factor    a multiplier used to estimate next iteration time
-     * @param target    a target to run
-     * @throws NullPointerException     if target is null
-     * @throws IllegalArgumentException if timeout is negative or
-                                        factor isn't positive
-     */
-    public TimeLimitedRunner(long timeout, double factor,
-            Callable<Boolean> target) {
-        Objects.requireNonNull(target, "target must not be null");
-        if (timeout < 0) {
-            throw new IllegalArgumentException("timeout[" + timeout + "] < 0");
-        }
-        if (factor <= 0d) {
-            throw new IllegalArgumentException("factor[" + factor + "] <= 0");
-        }
-        this.stoptime = System.currentTimeMillis() + timeout;
-        this.timeout = timeout;
-        this.factor = factor;
-        this.target = target;
-    }
-
-    /**
-     * Runs @{linkplan target} while it returns true and timeout isn't exceeded
-     */
-    @Override
-    public Void call() throws Exception {
-        long maxDuration = 0L;
-        long iterStart = System.currentTimeMillis();
-        if (timeout != 0 && iterStart > stoptime) {
-            return null;
-        }
-        while (target.call()) {
-            if (timeout != 0) {
-                long iterDuration = System.currentTimeMillis() - iterStart;
-                maxDuration = Math.max(maxDuration, iterDuration);
-                iterStart = System.currentTimeMillis();
-                if (iterStart + (maxDuration * factor) > stoptime) {
-                    System.out.println("Not enough time to continue execution. "
-                            + "Interrupted.");
-                    break;
-                }
-            }
-        }
-        return null;
-    }
-
-}