# HG changeset patch # User prr # Date 1496439989 25200 # Node ID 098910995d15a7200cb84912470d3bf141e55243 # Parent 957f1a2dc196b6fa58148bf1bb4ebaa26d9a3d54# Parent ebc2f494b6cd8536272b11b6dba8be5ba5a5cbd9 Merge diff -r 957f1a2dc196 -r 098910995d15 .hgtags --- a/.hgtags Sat May 27 12:52:18 2017 +0530 +++ b/.hgtags Fri Jun 02 14:46:29 2017 -0700 @@ -1,3 +1,4 @@ +643b5f18c2656fe91b69fea85b07b98d5fad394d jdk-9+171 898cbe31fbdae2d25d141384fac746cc244a730c jdk-9+170 c7efde2b60fc1ec04630be769d9ad60efb39c39c jdk-9+169 8fd0a4569191f33c98ee90c2709174a342fefb0d jdk-9+167 @@ -422,3 +423,4 @@ 1407b19a2ddf6baae162f5a1a5b96af473f4d7d1 jdk-10+6 30e75693ae99fd8e47fd2f5116527aff1b59aff9 jdk-10+7 c42dc7b58b4d4301ea676a76326fd9bbd403d595 jdk-10+8 +aa5b01f5e5620438fd39efdb2e2f6365a2c7d898 jdk-10+9 diff -r 957f1a2dc196 -r 098910995d15 .hgtags-top-repo --- a/.hgtags-top-repo Sat May 27 12:52:18 2017 +0530 +++ b/.hgtags-top-repo Fri Jun 02 14:46:29 2017 -0700 @@ -420,6 +420,8 @@ 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 +6558c37afe832582238d338578d598f30c6fdd75 jdk-10+10 diff -r 957f1a2dc196 -r 098910995d15 common/autoconf/spec.gmk.in --- a/common/autoconf/spec.gmk.in Sat May 27 12:52:18 2017 +0530 +++ b/common/autoconf/spec.gmk.in Fri Jun 02 14:46:29 2017 -0700 @@ -651,7 +651,7 @@ MV:=@MV@ NAWK:=@NAWK@ NICE:=@NICE@ -PANDOC:=@PANDOC@ +PANDOC:=@FIXPATH@ @PANDOC@ PATCH:=@PATCH@ PRINTF:=@PRINTF@ RM:=@RM@ diff -r 957f1a2dc196 -r 098910995d15 common/doc/building.html --- a/common/doc/building.html Sat May 27 12:52:18 2017 +0530 +++ b/common/doc/building.html Fri Jun 02 14:46:29 2017 -0700 @@ -1,21 +1,23 @@ - - + + - - - + + + OpenJDK Build README - + + - -
-OpenJDK -

OpenJDK

-
+ +
+OpenJDK
OpenJDK
+

Introduction

This README file contains build instructions for the OpenJDK. Building the source code for the OpenJDK requires a certain degree of technical expertise.

@@ -149,50 +151,50 @@ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + +
PackageVersionPackageVersion
developer/solarisstudio-124/backend12.4-1.0.6.0developer/solarisstudio-124/backend12.4-1.0.6.0
developer/solarisstudio-124/c++12.4-1.0.10.0developer/solarisstudio-124/c++12.4-1.0.10.0
developer/solarisstudio-124/cc12.4-1.0.4.0developer/solarisstudio-124/cc12.4-1.0.4.0
developer/solarisstudio-124/library/c++-libs12.4-1.0.10.0developer/solarisstudio-124/library/c++-libs12.4-1.0.10.0
developer/solarisstudio-124/library/math-libs12.4-1.0.0.1developer/solarisstudio-124/library/math-libs12.4-1.0.0.1
developer/solarisstudio-124/library/studio-gccrt12.4-1.0.0.1developer/solarisstudio-124/library/studio-gccrt12.4-1.0.0.1
developer/solarisstudio-124/studio-common12.4-1.0.0.1developer/solarisstudio-124/studio-common12.4-1.0.0.1
developer/solarisstudio-124/studio-ja12.4-1.0.0.1developer/solarisstudio-124/studio-ja12.4-1.0.0.1
developer/solarisstudio-124/studio-legal12.4-1.0.0.1developer/solarisstudio-124/studio-legal12.4-1.0.0.1
developer/solarisstudio-124/studio-zhCN12.4-1.0.0.1developer/solarisstudio-124/studio-zhCN12.4-1.0.0.1
@@ -211,66 +213,66 @@ - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + +
Binary NameCategoryPackageDescriptionBinary NameCategoryPackageDescription
ar.exeDevelbinutilsThe GNU assembler, linker and binary utilitiesar.exeDevelbinutilsThe GNU assembler, linker and binary utilities
make.exeDevelmakeThe GNU version of the 'make' utility built for CYGWINmake.exeDevelmakeThe GNU version of the 'make' utility built for CYGWIN
m4.exeInterpretersm4GNU implementation of the traditional Unix macro processorm4.exeInterpretersm4GNU implementation of the traditional Unix macro processor
cpio.exeUtilscpioA program to manage archives of filescpio.exeUtilscpioA program to manage archives of files
gawk.exeUtilsawkPattern-directed scanning and processing languagegawk.exeUtilsawkPattern-directed scanning and processing language
file.exeUtilsfileDetermines file type using 'magic' numbersfile.exeUtilsfileDetermines file type using 'magic' numbers
zip.exeArchivezipPackage and compress (archive) fileszip.exeArchivezipPackage and compress (archive) files
unzip.exeArchiveunzipExtract compressed files in a ZIP archiveunzip.exeArchiveunzipExtract compressed files in a ZIP archive
free.exeSystemprocpsDisplay amount of free and used memory in the systemfree.exeSystemprocpsDisplay amount of free and used memory in the system
@@ -561,14 +563,14 @@ This is probably an issue with SELinux (See SELinux on Wikipedia). Parts of the VM is built without the -fPIC for performance reasons.

To completely disable SELinux:

-
    +
    1. $ su root
    2. # system-config-securitylevel
    3. In the window that appears, select the SELinux tab
    4. Disable SELinux

    Alternatively, instead of completely disabling it you could disable just this one check.

    -
      +
      1. Select System->Administration->SELinux Management
      2. In the SELinux Management Tool which appears, select "Boolean" from the menu on the left
      3. Expand the "Memory Protection" group
      4. @@ -616,62 +618,62 @@ - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + +
        Base OS and ArchitectureOSC/C++ CompilerProcessorsRAM MinimumDISK NeedsBase OS and ArchitectureOSC/C++ CompilerProcessorsRAM MinimumDISK Needs
        Linux X86 (32-bit) and X64 (64-bit)Oracle Enterprise Linux 6.4gcc 4.9.22 or more1 GB6 GBLinux X86 (32-bit) and X64 (64-bit)Oracle Enterprise Linux 6.4gcc 4.9.22 or more1 GB6 GB
        Solaris SPARCV9 (64-bit)Solaris 11 Update 1Studio 12 Update 4 + patches4 or more4 GB8 GBSolaris SPARCV9 (64-bit)Solaris 11 Update 1Studio 12 Update 4 + patches4 or more4 GB8 GB
        Solaris X64 (64-bit)Solaris 11 Update 1Studio 12 Update 4 + patches4 or more4 GB8 GBSolaris X64 (64-bit)Solaris 11 Update 1Studio 12 Update 4 + patches4 or more4 GB8 GB
        Windows X86 (32-bit)Windows Server 2012 R2 x64Microsoft Visual Studio C++ 2013 Professional Edition2 or more2 GB6 GBWindows X86 (32-bit)Windows Server 2012 R2 x64Microsoft Visual Studio C++ 2013 Professional Edition2 or more2 GB6 GB
        Windows X64 (64-bit)Windows Server 2012 R2 x64Microsoft Visual Studio C++ 2013 Professional Edition2 or more2 GB6 GBWindows X64 (64-bit)Windows Server 2012 R2 x64Microsoft Visual Studio C++ 2013 Professional Edition2 or more2 GB6 GB
        Mac OS X X64 (64-bit)Mac OS X 10.9 "Mavericks"Xcode 6.3 or newer2 or more4 GB6 GBMac OS X X64 (64-bit)Mac OS X 10.9 "Mavericks"Xcode 6.3 or newer2 or more4 GB6 GB
        diff -r 957f1a2dc196 -r 098910995d15 common/doc/testing.html --- a/common/doc/testing.html Sat May 27 12:52:18 2017 +0530 +++ b/common/doc/testing.html Fri Jun 02 14:46:29 2017 -0700 @@ -1,19 +1,22 @@ - - + + - - - + + + Testing OpenJDK - + + - - +

        Using the run-test framework

        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.

        +

        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
         $ make run-test-jdk_lang JTREG="JOBS=8"
         $ make run-test TEST=jdk_lang
         $ 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 run-test TEST="jtreg:hotspot/test:hotspot_gc hotspot/test/native_sanity/JniVersion.java" +$ make exploded-run-test TEST=hotspot_tier1

        Test selection

        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 TEST 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.

        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 make run-test-tier1 is equivalent to make run-test TEST="tier1", but the latter is more tab-completion friendly. For more complex test runs, the run-test TEST="x" solution needs to be used.

        diff -r 957f1a2dc196 -r 098910995d15 common/doc/testing.md --- a/common/doc/testing.md Sat May 27 12:52:18 2017 +0530 +++ b/common/doc/testing.md Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 corba/.hgtags --- a/corba/.hgtags Sat May 27 12:52:18 2017 +0530 +++ b/corba/.hgtags Fri Jun 02 14:46:29 2017 -0700 @@ -422,3 +422,5 @@ 8a4ab3b0ab9a86df73d9a1e337134f2dbe006725 jdk-9+170 aed5a4edc8275c1c50195503756ff92bfe0197f5 jdk-10+7 648b0a00824eb29e71936bc3258d309a25e3b8c0 jdk-10+8 +54c6621f7b34cc6ce6c0882d047f61fe0962c257 jdk-10+9 +c62e5964cfcf144d8f72e9ba69757897785349a9 jdk-9+171 diff -r 957f1a2dc196 -r 098910995d15 hotspot/.hgtags --- a/hotspot/.hgtags Sat May 27 12:52:18 2017 +0530 +++ b/hotspot/.hgtags Fri Jun 02 14:46:29 2017 -0700 @@ -582,3 +582,5 @@ 38a240fd58a287acb1963920b92ed4d9c2fd39e3 jdk-9+170 9d4746eca95aec3e5a344bf2520745dcc1d17eed jdk-10+7 f5ded0cf954c770deeecb80f2ba1ba6a05cd979b jdk-10+8 +233647e3d3800e76d7612014b745b37a88098f63 jdk-10+9 +d53171650a2cc6c6f699c966c533b914ca9c0602 jdk-9+171 diff -r 957f1a2dc196 -r 098910995d15 hotspot/.mx.jvmci/mx_jvmci.py --- a/hotspot/.mx.jvmci/mx_jvmci.py Sat May 27 12:52:18 2017 +0530 +++ b/hotspot/.mx.jvmci/mx_jvmci.py Fri Jun 02 14:46:29 2017 -0700 @@ -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., /build/macosx-x86_64-normal-server-release/hotspot/bsd_amd64_compiler2) + (e.g., /build/macosx-x86_64-normal-server-release/hotspot/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): diff -r 957f1a2dc196 -r 098910995d15 hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp --- a/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp Sat May 27 12:52:18 2017 +0530 +++ b/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp Fri Jun 02 14:46:29 2017 -0700 @@ -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) { diff -r 957f1a2dc196 -r 098910995d15 hotspot/src/cpu/x86/vm/macroAssembler_x86.hpp --- a/hotspot/src/cpu/x86/vm/macroAssembler_x86.hpp Sat May 27 12:52:18 2017 +0530 +++ b/hotspot/src/cpu/x86/vm/macroAssembler_x86.hpp Fri Jun 02 14:46:29 2017 -0700 @@ -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); } diff -r 957f1a2dc196 -r 098910995d15 hotspot/src/jdk.hotspot.agent/share/classes/module-info.java --- a/hotspot/src/jdk.hotspot.agent/share/classes/module-info.java Sat May 27 12:52:18 2017 +0530 +++ b/hotspot/src/jdk.hotspot.agent/share/classes/module-info.java Fri Jun 02 14:46:29 2017 -0700 @@ -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; diff -r 957f1a2dc196 -r 098910995d15 hotspot/src/share/vm/oops/constMethod.cpp --- a/hotspot/src/share/vm/oops/constMethod.cpp Sat May 27 12:52:18 2017 +0530 +++ b/hotspot/src/share/vm/oops/constMethod.cpp Fri Jun 02 14:46:29 2017 -0700 @@ -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(); diff -r 957f1a2dc196 -r 098910995d15 hotspot/src/share/vm/opto/matcher.cpp --- a/hotspot/src/share/vm/opto/matcher.cpp Sat May 27 12:52:18 2017 +0530 +++ b/hotspot/src/share/vm/opto/matcher.cpp Fri Jun 02 14:46:29 2017 -0700 @@ -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; diff -r 957f1a2dc196 -r 098910995d15 hotspot/src/share/vm/opto/memnode.cpp --- a/hotspot/src/share/vm/opto/memnode.cpp Sat May 27 12:52:18 2017 +0530 +++ b/hotspot/src/share/vm/opto/memnode.cpp Fri Jun 02 14:46:29 2017 -0700 @@ -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; diff -r 957f1a2dc196 -r 098910995d15 hotspot/test/ProblemList.txt --- a/hotspot/test/ProblemList.txt Sat May 27 12:52:18 2017 +0530 +++ b/hotspot/test/ProblemList.txt Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 hotspot/test/compiler/codecache/stress/CodeCacheStressRunner.java --- a/hotspot/test/compiler/codecache/stress/CodeCacheStressRunner.java Sat May 27 12:52:18 2017 +0530 +++ b/hotspot/test/compiler/codecache/stress/CodeCacheStressRunner.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 hotspot/test/compiler/codecache/stress/Helper.java --- a/hotspot/test/compiler/codecache/stress/Helper.java Sat May 27 12:52:18 2017 +0530 +++ b/hotspot/test/compiler/codecache/stress/Helper.java Fri Jun 02 14:46:29 2017 -0700 @@ -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; diff -r 957f1a2dc196 -r 098910995d15 hotspot/test/compiler/compilercontrol/jcmd/StressAddJcmdBase.java --- a/hotspot/test/compiler/compilercontrol/jcmd/StressAddJcmdBase.java Sat May 27 12:52:18 2017 +0530 +++ b/hotspot/test/compiler/compilercontrol/jcmd/StressAddJcmdBase.java Fri Jun 02 14:46:29 2017 -0700 @@ -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; diff -r 957f1a2dc196 -r 098910995d15 hotspot/test/compiler/whitebox/AllocationCodeBlobTest.java --- a/hotspot/test/compiler/whitebox/AllocationCodeBlobTest.java Sat May 27 12:52:18 2017 +0530 +++ b/hotspot/test/compiler/whitebox/AllocationCodeBlobTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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; diff -r 957f1a2dc196 -r 098910995d15 hotspot/test/serviceability/jdwp/AllModulesCommandTest.java --- a/hotspot/test/serviceability/jdwp/AllModulesCommandTest.java Sat May 27 12:52:18 2017 +0530 +++ b/hotspot/test/serviceability/jdwp/AllModulesCommandTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 jaxp/.hgtags --- a/jaxp/.hgtags Sat May 27 12:52:18 2017 +0530 +++ b/jaxp/.hgtags Fri Jun 02 14:46:29 2017 -0700 @@ -422,3 +422,5 @@ 6e78f902f477a093afca85a1042f97410d01eb69 jdk-9+170 09cae4c36242734f5450de739b8264523a030809 jdk-10+7 856998840907b67b7e1fc49259f785ac085a189b jdk-10+8 +3c75f07b2a49cb0a4f4eb5df8bbcbc64dda3153f jdk-10+9 +c27321c889cf4c8e465a61b84572c00ef7ee6004 jdk-9+171 diff -r 957f1a2dc196 -r 098910995d15 jaxp/src/java.xml/share/classes/javax/xml/catalog/CatalogFeatures.java --- a/jaxp/src/java.xml/share/classes/javax/xml/catalog/CatalogFeatures.java Sat May 27 12:52:18 2017 +0530 +++ b/jaxp/src/java.xml/share/classes/javax/xml/catalog/CatalogFeatures.java Fri Jun 02 14:46:29 2017 -0700 @@ -34,9 +34,9 @@ * The CatalogFeatures holds a collection of features and properties. *

        * - *

        Catalog Features

        * - * + *
        + * * * * @@ -44,7 +44,7 @@ * * * - * + * * * * @@ -55,7 +55,7 @@ * * * - * + * * @@ -71,7 +71,7 @@ * * * - * + * * * @@ -89,7 +89,7 @@ * * * - * + * * @@ -107,7 +107,7 @@ * * * - * + * * * @@ -241,9 +241,10 @@ * supports a resolver. The following table lists all such processes. * *

        - *

        Processes with Catalog Support

        + *

        Processes with Catalog Support

        * - *
        Catalog Features
        FeatureProperty NameSystem Property [1]jaxp.properties [1]Value [2]Value [2]Action
        FILESFILESA semicolon-delimited list of URIs to locate the catalog files. * The URIs must be absolute and have a URL protocol handler for the URI scheme. *
        PREFERPREFERIndicates the preference between the public and system * identifiers. The default value is public [3].javax.xml.catalog.prefer
        DEFERDEFERIndicates that the alternative catalogs including those * specified in delegate entries or nextCatalog are not read until they are * needed. The default value is true.
        RESOLVERESOLVEDetermines the action if there is no matching entry found after * all of the specified catalogs are exhausted. The default is strict.javax.xml.catalog.resolve [4]
        + *
        + * * * * diff -r 957f1a2dc196 -r 098910995d15 jaxp/src/java.xml/share/classes/javax/xml/catalog/package.html --- a/jaxp/src/java.xml/share/classes/javax/xml/catalog/package.html Sat May 27 12:52:18 2017 +0530 +++ b/jaxp/src/java.xml/share/classes/javax/xml/catalog/package.html Fri Jun 02 14:46:29 2017 -0700 @@ -1,8 +1,8 @@ - + - + Provides the classes for implementing @@ -35,7 +35,7 @@

        Unless otherwise noted, passing a null argument to a constructor or method in any class or interface in this package will - cause a NullPointerException to be thrown. + cause a NullPointerException to be thrown.

        @since 9 diff -r 957f1a2dc196 -r 098910995d15 jaxp/src/java.xml/share/classes/javax/xml/datatype/DatatypeFactory.java --- a/jaxp/src/java.xml/share/classes/javax/xml/datatype/DatatypeFactory.java Sat May 27 12:52:18 2017 +0530 +++ b/jaxp/src/java.xml/share/classes/javax/xml/datatype/DatatypeFactory.java Fri Jun 02 14:46:29 2017 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 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 @@ -774,15 +774,11 @@ /** * Create an {@code XMLGregorianCalendar} from a {@link GregorianCalendar}. * - *
        Processes with Catalog Support
        Process
        + *
        + * * * - * - * - * * * * diff -r 957f1a2dc196 -r 098910995d15 jaxp/src/java.xml/share/classes/javax/xml/datatype/Duration.java --- a/jaxp/src/java.xml/share/classes/javax/xml/datatype/Duration.java Sat May 27 12:52:18 2017 +0530 +++ b/jaxp/src/java.xml/share/classes/javax/xml/datatype/Duration.java Fri Jun 02 14:46:29 2017 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, 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 @@ -120,26 +120,22 @@ * maps to. Type is computed based on fields that are set, * i.e. {@link #isSet(DatatypeConstants.Field field)} == {@code true}. * - *
        Field by Field Conversion from + * {@link GregorianCalendar} to an {@link XMLGregorianCalendar}
        - * Field by Field Conversion from - * {@link GregorianCalendar} to an {@link XMLGregorianCalendar} - *
        {@code java.util.GregorianCalendar} field{@code javax.xml.datatype.XMLGregorianCalendar} field
        + *
        + * * * - * + * + * + * + * + * + * + * * * * * - * - * - * - * - * - * - * - * - * * * * diff -r 957f1a2dc196 -r 098910995d15 jaxp/src/java.xml/share/classes/javax/xml/datatype/XMLGregorianCalendar.java --- a/jaxp/src/java.xml/share/classes/javax/xml/datatype/XMLGregorianCalendar.java Sat May 27 12:52:18 2017 +0530 +++ b/jaxp/src/java.xml/share/classes/javax/xml/datatype/XMLGregorianCalendar.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 @@ -53,25 +53,21 @@ * W3C XML Schema 1.0 Part 2, Appendix D, * ISO 8601 Date and Time Formats. * - * - *
        Required fields for XML Schema 1.0 Date/Time Datatypes.
        + * (timezone is optional for all date/time datatypes)
        - * Required fields for XML Schema 1.0 Date/Time Datatypes.
        - * (timezone is optional for all date/time datatypes) - *
        Datatypeyearmonthdayhourminutesecond
        Datatypeyearmonthdayhourminutesecond
        {@link DatatypeConstants#DURATION}XX
        + * + *
        + * * * - * - * - * - * - * * * * * + * + * * - * + * * @@ -89,12 +85,12 @@ * * * - * + * * * * * - * + * * * * * - * + * * * * * - * + * * * * * - * + * * * * - * + * * *
        Date/Time Datatype Field Mapping Between XML Schema 1.0 and Java Representation
        - * Date/Time Datatype Field Mapping Between XML Schema 1.0 and Java Representation - *
        XML Schema 1.0
        * datatype
        * field
        Related
        XMLGregorianCalendar
        Accessor(s)
        Value Range
        yearyear {@link #getYear()} + {@link #getEon()} or
        * {@link #getEonAndYear} *
        monthmonth {@link #getMonth()} 1 to 12 or {@link DatatypeConstants#FIELD_UNDEFINED}
        dayday {@link #getDay()} Independent of month, max range is 1 to 31 or {@link DatatypeConstants#FIELD_UNDEFINED}.
        * The normative value constraint stated relative to month @@ -102,7 +98,7 @@ *
        hourhour{@link #getHour()} * 0 to 23 or {@link DatatypeConstants#FIELD_UNDEFINED}. @@ -114,12 +110,12 @@ *
        minuteminute {@link #getMinute()} 0 to 59 or {@link DatatypeConstants#FIELD_UNDEFINED}
        secondsecond * {@link #getSecond()} + {@link #getMillisecond()}/1000 or
        * {@link #getSecond()} + {@link #getFractionalSecond()} @@ -135,7 +131,7 @@ *
        timezonetimezone {@link #getTimezone()} Number of minutes or {@link DatatypeConstants#FIELD_UNDEFINED}. * Value range from -14 hours (-14 * 60 minutes) to 14 hours (14 * 60 minutes). @@ -748,26 +744,22 @@ * Return the name of the XML Schema date/time type that this instance * maps to. Type is computed based on fields that are set. * - * + *
        + * * * - * + * + * + * + * + * + * + * * * * * - * - * - * - * - * - * - * - * - * * * * @@ -911,21 +903,17 @@ * instance, see * {@link #toGregorianCalendar(TimeZone, Locale, XMLGregorianCalendar)}. * - *
        Required fields for XML Schema 1.0 Date/Time Datatypes.
        + * (timezone is optional for all date/time datatypes)
        - * Required fields for XML Schema 1.0 Date/Time Datatypes.
        - * (timezone is optional for all date/time datatypes) - *
        Datatypeyearmonthdayhourminutesecond
        Datatypeyearmonthdayhourminutesecond
        {@link DatatypeConstants#DATETIME}XX
        + *
        + * * * - * + * + * * * * * - * - * - * - * * * * diff -r 957f1a2dc196 -r 098910995d15 jaxp/src/java.xml/share/classes/javax/xml/datatype/package.html --- a/jaxp/src/java.xml/share/classes/javax/xml/datatype/package.html Sat May 27 12:52:18 2017 +0530 +++ b/jaxp/src/java.xml/share/classes/javax/xml/datatype/package.html Fri Jun 02 14:46:29 2017 -0700 @@ -1,6 +1,6 @@ - + - - +javax.xml.xpath @@ -50,9 +49,10 @@
      5. XQuery 1.0 and XPath 2.0 Data Model, xdt:yearMonthDuration
      6. -
        +
        -
        Field by Field Conversion from this class to + * {@code java.util.GregorianCalendar}
        - * Field by Field Conversion from this class to - * {@code java.util.GregorianCalendar} - * {@code java.util.GregorianCalendar} field{@code javax.xml.datatype.XMLGregorianCalendar} field
        {@code java.util.GregorianCalendar} field{@code javax.xml.datatype.XMLGregorianCalendar} field
        {@code ERA}{@link #getEonAndYear()}{@code .signum() < 0 ? GregorianCalendar.BC : GregorianCalendar.AD}
        +
        + @@ -101,10 +101,11 @@
        W3C XML Schema/Java Type Mappings
        W3C XML Schema Data Type
        -
        +
        - +
        + @@ -124,7 +125,7 @@
        XQuery and XPath/Java Type Mappings
        XQuery 1.0 and XPath 2.0 Data Model
        -
        +

        W3C XML Schema data types that have a "natural" mapping to Java types are defined by @@ -151,7 +152,7 @@

      7. xs:unsignedShort
      8. -
        +
          @@ -162,7 +163,7 @@
        • Since 1.5
        -
        +
        diff -r 957f1a2dc196 -r 098910995d15 jaxp/src/java.xml/share/classes/javax/xml/namespace/NamespaceContext.java --- a/jaxp/src/java.xml/share/classes/javax/xml/namespace/NamespaceContext.java Sat May 27 12:52:18 2017 +0530 +++ b/jaxp/src/java.xml/share/classes/javax/xml/namespace/NamespaceContext.java Fri Jun 02 14:46:29 2017 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, 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 @@ -88,17 +88,12 @@ * table describes the returned Namespace URI value for all * possible prefix values: * - * + *
        + * * * - * - * - * - * - * + * + * * * * @@ -158,15 +153,10 @@ * table describes the returned prefix value for all Namespace URI * values: * - *
        Return value for specified prefixes
        - * {@code getNamespaceURI(prefix)} - * return value for specified prefixes - *
        prefix parameterNamespace URI return valueprefix parameterNamespace URI return value
        + *
        + * * * - * - * - * * * * @@ -230,14 +220,10 @@ * table describes the returned prefixes value for all Namespace * URI values: * - *
        Return value for specified Namespace URIs
        - * {@code getPrefix(namespaceURI)} return value for - * specified Namespace URIs - *
        Namespace URI parameterprefix value returned
        + *
        + * * * - * - * - * * * * diff -r 957f1a2dc196 -r 098910995d15 jaxp/src/java.xml/share/classes/javax/xml/stream/XMLEventWriter.java --- a/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLEventWriter.java Sat May 27 12:52:18 2017 +0530 +++ b/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLEventWriter.java Fri Jun 02 14:46:29 2017 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 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 @@ -64,21 +64,17 @@ * Add an event to the output stream * Adding a START_ELEMENT will open a new namespace scope that * will be closed when the corresponding END_ELEMENT is written. - *
        Return value for specified Namespace URIs
        {@code - * getPrefixes(namespaceURI)} return value for - * specified Namespace URIs
        Namespace URI parameterprefixes value returned
        + *
        + * * * - * - * - * - * - * * * * * * + * + * * * * diff -r 957f1a2dc196 -r 098910995d15 jaxp/src/java.xml/share/classes/javax/xml/stream/XMLInputFactory.java --- a/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLInputFactory.java Sat May 27 12:52:18 2017 +0530 +++ b/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLInputFactory.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 @@ -36,22 +36,18 @@ * Each property varies in the level of support required by each implementation. * The level of support required is described in the 'Required' column. * - *
        Required and optional fields for events added to the writer
        - * Required and optional fields for events added to the writer - *
        Event TypeRequired FieldsOptional FieldsRequired Behavior
        START_ELEMENT QName name
        + *
        + * * * - * - * - * - * - * * * * * * * + * + * * * * diff -r 957f1a2dc196 -r 098910995d15 jaxp/src/java.xml/share/classes/javax/xml/stream/XMLOutputFactory.java --- a/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLOutputFactory.java Sat May 27 12:52:18 2017 +0530 +++ b/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLOutputFactory.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 @@ -36,22 +36,18 @@ * Each property varies in the level of support required by each implementation. * The level of support required is described in the 'Required' column. * - *
        Configuration Parameters
        - * Configuration parameters - *
        Property NameBehaviorReturn typeDefault ValueRequired
        javax.xml.stream.isValidatingTurns on/off implementation specific DTD validationBooleanFalseNo
        javax.xml.stream.isNamespaceAwareTurns on/off namespace processing for XML 1.0 supportBooleanTrueTrue (required) / False (optional)
        javax.xml.stream.isCoalescingRequires the processor to coalesce adjacent character dataBooleanFalseYes
        + *
        + * * * - * - * - * - * - * * * * * * * + * + * * * diff -r 957f1a2dc196 -r 098910995d15 jaxp/src/java.xml/share/classes/javax/xml/stream/XMLStreamReader.java --- a/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLStreamReader.java Sat May 27 12:52:18 2017 +0530 +++ b/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLStreamReader.java Fri Jun 02 14:46:29 2017 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 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 @@ -71,19 +71,15 @@ * If a method is called in an invalid state the method will throw a * java.lang.IllegalStateException. * - *
        Configuration Parameters
        - * Configuration parameters - *
        Property NameBehaviorReturn typeDefault ValueRequired
        javax.xml.stream.isRepairingNamespacesdefaults prefixes * on the output sideBooleanFalseYes
        + *
        + * * * - * - * - * - * - * * * * + * + * * * *
        Valid methods for each state
        - * Valid methods for each state - *
        Event TypeValid Methods
        All States getProperty(), hasNext(), require(), close(), diff -r 957f1a2dc196 -r 098910995d15 jaxp/src/java.xml/share/classes/javax/xml/stream/XMLStreamWriter.java --- a/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLStreamWriter.java Sat May 27 12:52:18 2017 +0530 +++ b/jaxp/src/java.xml/share/classes/javax/xml/stream/XMLStreamWriter.java Fri Jun 02 14:46:29 2017 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 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 @@ -38,12 +38,10 @@ * Each NAMESPACE * and ATTRIBUTE must be individually written. * - * + *
        + * * - * - * - * - * + * * * * diff -r 957f1a2dc196 -r 098910995d15 jaxp/src/java.xml/share/classes/javax/xml/transform/package.html --- a/jaxp/src/java.xml/share/classes/javax/xml/transform/package.html Sat May 27 12:52:18 2017 +0530 +++ b/jaxp/src/java.xml/share/classes/javax/xml/transform/package.html Fri Jun 02 14:46:29 2017 -0700 @@ -1,6 +1,6 @@ - + - - - +javax.xml.transform @@ -97,7 +93,7 @@

        -Qualified Name Representation +Qualified Name Representation

        Namespaces diff -r 957f1a2dc196 -r 098910995d15 jaxp/src/java.xml/share/classes/javax/xml/validation/SchemaFactory.java --- a/jaxp/src/java.xml/share/classes/javax/xml/validation/SchemaFactory.java Sat May 27 12:52:18 2017 +0530 +++ b/jaxp/src/java.xml/share/classes/javax/xml/validation/SchemaFactory.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 @@ -58,7 +58,7 @@ * may not attempt to recursively invoke the {@code newSchema} method, * even from the same thread. * - *

        Schema Language

        + *

        Schema Language

        *

        * This spec uses a namespace URI to designate a schema language. * The following table shows the values defined by this specification. @@ -84,7 +84,8 @@ * validation implemented on this interface necessarily deviate from * the XML DTD semantics as defined in the XML 1.0. * - *

        XML Namespaces, {@code javax.xml.stream.isRepairingNamespaces} and write method behaviour
        XML Namespaces, {@code javax.xml.stream.isRepairingNamespaces} and write method behaviour
        Method {@code isRepairingNamespaces} == true{@code isRepairingNamespaces} == false
        + *
        + * * * * diff -r 957f1a2dc196 -r 098910995d15 jaxp/src/java.xml/share/classes/javax/xml/validation/SchemaFactoryLoader.java --- a/jaxp/src/java.xml/share/classes/javax/xml/validation/SchemaFactoryLoader.java Sat May 27 12:52:18 2017 +0530 +++ b/jaxp/src/java.xml/share/classes/javax/xml/validation/SchemaFactoryLoader.java Fri Jun 02 14:46:29 2017 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 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 @@ -60,7 +60,7 @@ * the list of available schema languages. * * @throws NullPointerException - * If the schemaLanguage parameter is null. + * If the schemaLanguage parameter is null. * * @return null if the callee fails to create one. */ diff -r 957f1a2dc196 -r 098910995d15 jaxp/src/java.xml/share/classes/javax/xml/validation/Validator.java --- a/jaxp/src/java.xml/share/classes/javax/xml/validation/Validator.java Sat May 27 12:52:18 2017 +0530 +++ b/jaxp/src/java.xml/share/classes/javax/xml/validation/Validator.java Fri Jun 02 14:46:29 2017 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, 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 @@ -131,12 +131,10 @@ *

        This method places the following restrictions on the types of * the {@link Source}/{@link Result} accepted. * - *

        URIs for Supported Schema languages
        value
        + *
        + * * * - * - * - * * * * @@ -144,7 +142,7 @@ * * * - * + * * * * diff -r 957f1a2dc196 -r 098910995d15 jaxp/src/java.xml/share/classes/javax/xml/validation/package.html --- a/jaxp/src/java.xml/share/classes/javax/xml/validation/package.html Sat May 27 12:52:18 2017 +0530 +++ b/jaxp/src/java.xml/share/classes/javax/xml/validation/package.html Fri Jun 02 14:46:29 2017 -0700 @@ -1,6 +1,6 @@ - + - - - +javax.xml.validation @@ -86,7 +82,7 @@ process simple (see example below).

        - Usage example. The following example demonstrates validating + Usage example. The following example demonstrates validating an XML document with the Validation API (for readability, some exception handling is not shown):

        diff -r 957f1a2dc196 -r 098910995d15 jaxp/src/java.xml/share/classes/javax/xml/xpath/XPath.java
        --- a/jaxp/src/java.xml/share/classes/javax/xml/xpath/XPath.java	Sat May 27 12:52:18 2017 +0530
        +++ b/jaxp/src/java.xml/share/classes/javax/xml/xpath/XPath.java	Fri Jun 02 14:46:29 2017 -0700
        @@ -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
        @@ -31,14 +31,18 @@
         
         /**
          * {@code XPath} provides access to the XPath evaluation environment and expressions.
        + * The XPath evaluation is affected by the factors described in the following table.
          *
        - * 
        - * 
        {@code Source} / {@code Result} Accepted
        {@code Source} / {@code Result} Accepted
        {@link javax.xml.transform.stream.StreamSource}{@link javax.xml.transform.sax.SAXSource}{@link javax.xml.transform.stax.StAXSource}
        {@code null}OK
        + * + *
        + * * * - * + * + * * * + * * * * * + * *
        Evaluation of XPath Expressions
        Evaluation of XPath Expressions.FactorBehavior
        context @@ -84,6 +88,7 @@ * Conversion to the return type follows XPath conversion rules. *
        * *

        An XPath object is not thread-safe and not reentrant. diff -r 957f1a2dc196 -r 098910995d15 jaxp/src/java.xml/share/classes/javax/xml/xpath/XPathExpression.java --- a/jaxp/src/java.xml/share/classes/javax/xml/xpath/XPathExpression.java Sat May 27 12:52:18 2017 +0530 +++ b/jaxp/src/java.xml/share/classes/javax/xml/xpath/XPathExpression.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 @@ -30,14 +30,18 @@ /** * {@code XPathExpression} provides access to compiled XPath expressions. + * The XPath evaluation is affected by the factors described in the following table. * - * - * + * + *
        + * * * - * + * + * * * + * * * * \n\n
        Evaluation of XPath Expressions
        Evaluation of XPath Expressions.FactorBehavior
        context diff -r 957f1a2dc196 -r 098910995d15 jaxp/src/java.xml/share/classes/javax/xml/xpath/package.html --- a/jaxp/src/java.xml/share/classes/javax/xml/xpath/package.html Sat May 27 12:52:18 2017 +0530 +++ b/jaxp/src/java.xml/share/classes/javax/xml/xpath/package.html Fri Jun 02 14:46:29 2017 -0700 @@ -1,8 +1,8 @@ - + - + This package provides an object-model neutral API for the evaluation of XPath expressions and access to the evaluation @@ -36,7 +36,7 @@ The XPath API supports XML Path Language (XPath) Version 1.0 -
        +

        - +

        1. XPath Overview

        The XPath language provides a simple, concise syntax for selecting @@ -69,7 +69,7 @@ replace many lines of DOM API code.

        - +

        2. XPath Expressions

        An XPath expression is composed of a location @@ -139,11 +139,15 @@ nodes. The following table gives examples of location paths for each of these node types:

        - +
        + + - - + + + + +
        Examples of Location Path
        Location PathDescriptionLocation PathDescription
        /foo/bar/@id @@ -171,6 +175,7 @@ <bar> element.

        Predicates allow for refining the nodes selected by an XPath @@ -194,7 +199,7 @@ - +

        3. XPath Data Types

        While XPath expressions select nodes in the XML document, the XPath @@ -207,7 +212,7 @@

      9. String
      10. - +

        3.1 QName types

        The XPath API defines the following {@link javax.xml.namespace.QName} types to represent return types of an XPath evaluation: @@ -236,7 +241,7 @@

        The Number return type attempts to coalesce the text of a node to a double data type. - +

        3.2 Class types

        In addition to the QName types, the XPath API supports the use of Class types through the XPathExpression.evaluteExpression(...) or @@ -254,14 +259,14 @@

        Of the subtypes of Number, only Double, Integer and Long are supported. - +

        3.3 Enum types

        Enum types are defined in {@link javax.xml.xpath.XPathEvaluationResult.XPathResultType} that provide mappings between the QName and Class types above. The result of evaluating an expression using the XPathExpression.evaluteExpression(...) or XPath.evaluateExpression(...) methods will be of one of these types. - +

        4. XPath Context

        XPath location paths may be relative to a particular node in the @@ -278,7 +283,7 @@ It is an XML document tree represented as a hierarchy of nodes, a {@link org.w3c.dom.Node} for example, in the JDK implementation. - +

        5. Using the XPath API

        Consider the following XML document: diff -r 957f1a2dc196 -r 098910995d15 jaxp/src/java.xml/share/classes/org/w3c/dom/Attr.java --- a/jaxp/src/java.xml/share/classes/org/w3c/dom/Attr.java Sat May 27 12:52:18 2017 +0530 +++ b/jaxp/src/java.xml/share/classes/org/w3c/dom/Attr.java Fri Jun 02 14:46:29 2017 -0700 @@ -111,7 +111,9 @@ *

        The following table gives some examples of the relations between the * attribute value in the original document (parsed attribute), the value as * exposed in the DOM, and the serialization of the value: - * + *
        + * + * * * * * * + * + * * * @@ -126,7 +130,7 @@ *
        "x&#178;=5"
        * * * * * + * *
        Examples of the Original, Normalized and Serialized Values
        ExamplesParsed @@ -119,6 +121,8 @@ * Initial Attr.valueSerialized attribute value
        * Character reference - *
        "x\u00b2=5"
        + *
        "x²=5"
        *
        *
        "x&#178;=5"
        @@ -180,6 +184,7 @@ *
        Dependent on Implementation and Load OptionsDependent on Implementation and Load/Save Options
        *

        See also the Document Object Model (DOM) Level 3 Core Specification. */ diff -r 957f1a2dc196 -r 098910995d15 jaxp/src/java.xml/share/classes/org/w3c/dom/Document.java --- a/jaxp/src/java.xml/share/classes/org/w3c/dom/Document.java Sat May 27 12:52:18 2017 +0530 +++ b/jaxp/src/java.xml/share/classes/org/w3c/dom/Document.java Fri Jun 02 14:46:29 2017 -0700 @@ -353,37 +353,42 @@ * instantiate. * @return A new Element object with the following * attributes: - * + *
        + * + * * * * * + * + * * - * - * + * * * - * - * + * * * - * - * + * * * - * - * + * * * - * - * + * * + * *
        Attributes of the {@code Element} object
        AttributeValue
        Node.nodeName + * Node.nodeName * qualifiedName
        Node.namespaceURI + * Node.namespaceURI * namespaceURI
        Node.prefixprefix, extracted + * Node.prefixprefix, extracted * from qualifiedName, or null if there is * no prefix
        Node.localNamelocal name, extracted from + * Node.localNamelocal name, extracted from * qualifiedName
        Element.tagName + * Element.tagName * qualifiedName
        * @exception DOMException * INVALID_CHARACTER_ERR: Raised if the specified @@ -417,43 +422,48 @@ * @param qualifiedName The qualified name of the attribute to * instantiate. * @return A new Attr object with the following attributes: - * + *
        + * + * * * * * + * + * * - * - * + * + * * * - * - * + * * * - * - * * * - * - * + * * * - * - * + * * * - * - * + * * + * *
        Attributes of the {@code Attr} object
        * AttributeValue
        Node.nodeNamequalifiedNameNode.nodeNamequalifiedName
        + * * Node.namespaceURInamespaceURInamespaceURI
        + * * Node.prefixprefix, extracted from + * prefix, extracted from * qualifiedName, or null if there is no * prefix
        Node.localNamelocal name, extracted from + * Node.localNamelocal name, extracted from * qualifiedName
        Attr.name + * Attr.name * qualifiedName
        Node.nodeValuethe empty + * Node.nodeValuethe empty * string
        * @exception DOMException * INVALID_CHARACTER_ERR: Raised if the specified diff -r 957f1a2dc196 -r 098910995d15 jaxp/src/java.xml/share/classes/org/w3c/dom/Node.java --- a/jaxp/src/java.xml/share/classes/org/w3c/dom/Node.java Sat May 27 12:52:18 2017 +0530 +++ b/jaxp/src/java.xml/share/classes/org/w3c/dom/Node.java Fri Jun 02 14:46:29 2017 -0700 @@ -61,104 +61,109 @@ *

        The values of nodeName, * nodeValue, and attributes vary according to the * node type as follows: - * + *
        + * + * * * * * * * + * + * * - * - * - * + * - * + * * * - * - * + * - * - * + * * * - * - * + * - * - * + * * * - * - * + * - * - * + * + * * * - * - * - * + * - * + * * * - * - * + * - * - * + * + * * * - * - * - * - * + * + * * * - * - * - * - * + * + * + * * * - * - * - * + * + * - * + * * * - * - * - * + * + * - * + * * * - * - * + * - * - * + * * * - * - * + * - * - * + * * + * *
        Interface table
        InterfacenodeNamenodeValueattributes
        + * * Attrsame as Attr.namesame as + * same as Attr.namesame as * Attr.valuenullnull
        CDATASection + * CDATASection * "#cdata-section"same as CharacterData.data, the + * same as CharacterData.data, the * content of the CDATA Sectionnullnull
        Comment + * Comment * "#comment"same as CharacterData.data, the + * same as CharacterData.data, the * content of the commentnullnull
        Document + * Document * "#document"nullnullnullnull
        + * * DocumentFragment"#document-fragment" + * "#document-fragment" * nullnullnull
        DocumentTypesame as + * DocumentTypesame as * DocumentType.namenullnullnullnull
        + * * Elementsame as Element.tagNamenull + * same as Element.tagNamenull * NamedNodeMap
        Entityentity namenull + * Entityentity namenull * null
        EntityReferencename of entity referenced + * EntityReferencename of entity referenced * nullnullnull
        Notationnotation name + * Notationnotation name * nullnullnull
        ProcessingInstructionsame + * ProcessingInstructionsame * as ProcessingInstruction.targetsame as + * same as * ProcessingInstruction.datanullnull
        Text + * Text * "#text"same as CharacterData.data, the content + * same as CharacterData.data, the content * of the text nodenullnull
        *

        See also the Document Object Model (DOM) Level 3 Core Specification. */ @@ -687,30 +692,35 @@ * textual content. *
        The string returned is made of the text content of this node * depending on its type, as defined below: - * + *
        + * + * * * * * + * + * * - * - * * * - * - * + * * * - * - * + * * + * *
        Node/Content table
        Node typeContent
        + * * ELEMENT_NODE, ATTRIBUTE_NODE, ENTITY_NODE, ENTITY_REFERENCE_NODE, * DOCUMENT_FRAGMENT_NODEconcatenation of the textContent + * concatenation of the textContent * attribute value of every child node, excluding COMMENT_NODE and * PROCESSING_INSTRUCTION_NODE nodes. This is the empty string if the * node has no children.
        TEXT_NODE, CDATA_SECTION_NODE, COMMENT_NODE, + * TEXT_NODE, CDATA_SECTION_NODE, COMMENT_NODE, * PROCESSING_INSTRUCTION_NODEnodeValuenodeValue
        DOCUMENT_NODE, + * DOCUMENT_NODE, * DOCUMENT_TYPE_NODE, NOTATION_NODEnullnull
        * @exception DOMException * DOMSTRING_SIZE_ERR: Raised when it would return more characters than @@ -737,30 +747,35 @@ * textual content. *
        The string returned is made of the text content of this node * depending on its type, as defined below: - * + *
        + * + * * * * * + * + * * - * - * * * - * - * + * * * - * - * + * * + * *
        Node/Content table
        Node typeContent
        + * * ELEMENT_NODE, ATTRIBUTE_NODE, ENTITY_NODE, ENTITY_REFERENCE_NODE, * DOCUMENT_FRAGMENT_NODEconcatenation of the textContent + * concatenation of the textContent * attribute value of every child node, excluding COMMENT_NODE and * PROCESSING_INSTRUCTION_NODE nodes. This is the empty string if the * node has no children.
        TEXT_NODE, CDATA_SECTION_NODE, COMMENT_NODE, + * TEXT_NODE, CDATA_SECTION_NODE, COMMENT_NODE, * PROCESSING_INSTRUCTION_NODEnodeValuenodeValue
        DOCUMENT_NODE, + * DOCUMENT_NODE, * DOCUMENT_TYPE_NODE, NOTATION_NODEnullnull
        * @exception DOMException * NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly. diff -r 957f1a2dc196 -r 098910995d15 jaxp/src/java.xml/share/classes/org/w3c/dom/ranges/package.html --- a/jaxp/src/java.xml/share/classes/org/w3c/dom/ranges/package.html Sat May 27 12:52:18 2017 +0530 +++ b/jaxp/src/java.xml/share/classes/org/w3c/dom/ranges/package.html Fri Jun 02 14:46:29 2017 -0700 @@ -2,7 +2,7 @@ W3C IPR SOFTWARE NOTICE - +

        Document Object Model Level 2 Traversal and Range is a platform and language-neutral interfaces that allow programs @@ -20,14 +20,14 @@

        W3C IPR SOFTWARE NOTICE

        -

        +

        Copyright © 2000 World Wide Web Consortium, (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University). All Rights Reserved. -

        +

        The DOM bindings are published under the W3C Software Copyright Notice and License. The software license requires "Notice of any changes or @@ -42,14 +42,14 @@ and License could be found at http://www.w3.org/Consortium/Legal/copyright-software-19980720

        -

        +

        Copyright © 1994-2000 World Wide Web Consortium, (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University). All Rights Reserved. http://www.w3.org/Consortium/Legal/ -

        +

        This W3C work (including software, documents, or other related items) is being provided by the copyright holders under the following license. By diff -r 957f1a2dc196 -r 098910995d15 jaxp/src/java.xml/share/classes/org/xml/sax/package.html --- a/jaxp/src/java.xml/share/classes/org/xml/sax/package.html Sat May 27 12:52:18 2017 +0530 +++ b/jaxp/src/java.xml/share/classes/org/xml/sax/package.html Fri Jun 02 14:46:29 2017 -0700 @@ -24,14 +24,18 @@ setFeature. Those standard identifiers are:

        - - +
        + + + - + + + @@ -208,7 +212,7 @@ Returns "false" if the parser supports only XML 1.0. - +
        SAX2 Standard Features
        Feature ID Access Default Description
        external-general-entities read/write

        Support for the default values of the @@ -236,11 +240,15 @@ dom-node. Manage those properties using setProperty(). Those identifiers are:

        - - +
        + + + + + @@ -287,7 +295,7 @@ - +
        SAX2 Standard Properties
        Property ID Description
        declaration-handler Readable only during a parser callback, this exposes a TBS chunk of characters responsible for the current event.

        All of these standard properties are optional; diff -r 957f1a2dc196 -r 098910995d15 jaxws/.hgtags --- a/jaxws/.hgtags Sat May 27 12:52:18 2017 +0530 +++ b/jaxws/.hgtags Fri Jun 02 14:46:29 2017 -0700 @@ -425,3 +425,5 @@ e75d3abe579a7b39b762fc0a1a337c49eb072d82 jdk-9+170 b0efae7df1dfa14926058baebaf999e4268c955c jdk-10+7 e705867d9989d00e4357f66f18b302c95e13b5e7 jdk-10+8 +2fe03e35bed54238bcaeeb298b011df240e3711d jdk-10+9 +139e7c786ee4885efe53eb650b72c7b5a2d3b964 jdk-9+171 diff -r 957f1a2dc196 -r 098910995d15 jdk/.hgtags --- a/jdk/.hgtags Sat May 27 12:52:18 2017 +0530 +++ b/jdk/.hgtags Fri Jun 02 14:46:29 2017 -0700 @@ -422,3 +422,5 @@ ef9954f6896bb0b95ac62bf769f68b59a7a56ccd jdk-9+170 cbd65760a005766610583949b3b5c9ace92e74b3 jdk-10+7 f0adc10ed8316e6cf316e3208c5ecf6835d22bc4 jdk-10+8 +b9409a7daa6c793dd631e52fe6ef79d08a3b337a jdk-10+9 +29bbedd4cce8e14742bdb22118c057b877c02f0f jdk-9+171 diff -r 957f1a2dc196 -r 098910995d15 jdk/make/data/docs-resources/resources/jdk-default.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/make/data/docs-resources/resources/jdk-default.css Fri Jun 02 14:46:29 2017 -0700 @@ -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; +} diff -r 957f1a2dc196 -r 098910995d15 jdk/make/data/docs-resources/specs/resources/jdk-default.css --- a/jdk/make/data/docs-resources/specs/resources/jdk-default.css Sat May 27 12:52:18 2017 +0530 +++ /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; -} diff -r 957f1a2dc196 -r 098910995d15 jdk/make/src/classes/build/tools/docs/GenDocsBundlePage.java --- a/jdk/make/src/classes/build/tools/docs/GenDocsBundlePage.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/make/src/classes/build/tools/docs/GenDocsBundlePage.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 moduleGroups; - + final Map> moduleGroups = new HashMap<>(); GenDocsBundlePage(String title, Path outputfile) throws IOException { this.outputfile = outputfile; this.title = title; - this.moduleGroups = moduleGroups(); - } - static Map moduleGroups() throws IOException { + // read module groups ModuleFinder finder = ModuleFinder.ofSystem(); - Map 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 mods = Stream.of(props.getProperty(key).split("\\s+")) - .filter(mn -> finder.find(mn).isPresent()) - .map(String::trim) - .collect(Collectors.toSet()); + Set 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("

        ") - .append(mods.stream() - .filter(mn -> mn.startsWith("jdk.")) - .sorted() - .map(GenDocsBundlePage::toHRef) - .collect(Collectors.joining("\n"))); - sb.append(""); - 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("%s
        ", 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 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 = "" + mn + ""; + } else { + // a tool + formattedName = "" + mn + ""; + } + return String.format("%s", + mn, formattedName); + } + + String formatModuleGroup(String groupName) { + StringBuilder sb = new StringBuilder(); + // organize in Java SE, JDK, JavaFX, JCP groups + Set modules = moduleGroups.get(groupName); + Arrays.stream(ModuleGroup.values()) + .forEach(g -> { + Set mods = modules.stream() + .filter(md -> g.predicate.test(md.name())) + .collect(toSet()); + if (!mods.isEmpty()) { + sb.append("
        \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("
        "); + } + }); + 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 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 predicate; + ModuleGroup(String cssClass, Predicate predicate) { + this.cssClass = cssClass; + this.predicate = predicate; + } + } } diff -r 957f1a2dc196 -r 098910995d15 jdk/make/src/classes/build/tools/docs/docs-bundle-page.html --- a/jdk/make/src/classes/build/tools/docs/docs-bundle-page.html Sat May 27 12:52:18 2017 +0530 +++ b/jdk/make/src/classes/build/tools/docs/docs-bundle-page.html Fri Jun 02 14:46:29 2017 -0700 @@ -26,121 +26,146 @@ - - -@HEADER_TITLE@ -

        @HEADER_TITLE@

        + - + - - - + - + - - - - - - - - - + - + + + + + - - + + + + + + + + + + - - + + + + + + - - + + - + + + + + - - - - - - - - + +
        ModulesJDK Modules
        GroupJava SEJDKJavaFXModules
        Foundation@CORE_MODULES@@JAVA_BASE@
        Security@SECURITY_MODULES@
        Instrumentation and
        Management
        @INSTRUMENT_MGMT_MODULES@
        IntegrationIntegration @INTEGRATION_MODULES@
        User Interface@UI_TOOLKITS_MODULES@@UI_MODULES@
        Compilation@COMPILER_MODULES@
        Compiler and Scripting@COMPILER_SCRIPTING_MODULES@Scripting@SCRIPTING_MODULES@
        Security@SECURITY_MODULES@
        Management@MANAGEMENT_MODULES@
        Debugging@DEBUG_MODULES@Instrumentation@INSTRUMENT_MODULES@
        Serviceability@SVC_MODULES@
        Tools and Tool APIs@TOOL_MODULES@Packaging@PACKAGING_MODULES@
        Incubating FeaturesIncubator @INCUBATOR_MODULES@
        Non-Java SE@OTHER_MODULES@
        Java EE @JAVA_EE_MODULES@
        Outside Java SEJDKJavaFX
        Others@OTHER_MODULES@Aggregator@AGGREGATOR_MODULES@
        +

        Key: +

          +
        •    Java SE +
        •    JDK +
        •    JavaFX +
        •    Non-Java SE +
        • italic No Exported API (e.g. a tool or provider)
        • +
        +

        -


        -Copyright© 1993, 2017, Oracle and/or its affiliates. All rights reserved.

        +
        +Copyright © 1993, 2017, Oracle and/or its affiliates. All rights reserved.

        + + + diff -r 957f1a2dc196 -r 098910995d15 jdk/make/src/classes/build/tools/docs/docs-module-groups.properties --- a/jdk/make/src/classes/build/tools/docs/docs-module-groups.properties Sat May 27 12:52:18 2017 +0530 +++ b/jdk/make/src/classes/build/tools/docs/docs-module-groups.properties Fri Jun 02 14:46:29 2017 -0700 @@ -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 + diff -r 957f1a2dc196 -r 098910995d15 jdk/make/src/classes/build/tools/taglet/ExtLink.java --- a/jdk/make/src/classes/build/tools/taglet/ExtLink.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/make/src/classes/build/tools/taglet/ExtLink.java Fri Jun 02 14:46:29 2017 -0700 @@ -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&id="; static final Pattern TAG_PATTERN = Pattern.compile("(\\s*)(?\\w+)(\\s+)(?.*)"); diff -r 957f1a2dc196 -r 098910995d15 jdk/src/java.base/aix/native/libnet/aix_close.c --- a/jdk/src/java.base/aix/native/libnet/aix_close.c Sat May 27 12:52:18 2017 +0530 +++ b/jdk/src/java.base/aix/native/libnet/aix_close.c Fri Jun 02 14:46:29 2017 -0700 @@ -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) { diff -r 957f1a2dc196 -r 098910995d15 jdk/src/java.base/share/classes/java/io/File.java --- a/jdk/src/java.base/share/classes/java/io/File.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/src/java.base/share/classes/java/io/File.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 long value representing the time the file was * last modified, measured in milliseconds since the epoch * (00:00:00 GMT, January 1, 1970), or 0L if the diff -r 957f1a2dc196 -r 098910995d15 jdk/src/java.base/share/classes/javax/crypto/Cipher.java --- a/jdk/src/java.base/share/classes/javax/crypto/Cipher.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/src/java.base/share/classes/javax/crypto/Cipher.java Fri Jun 02 14:46:29 2017 -0700 @@ -137,6 +137,7 @@ *
      11. {@code AES/CBC/PKCS5Padding} (128)
      12. *
      13. {@code AES/ECB/NoPadding} (128)
      14. *
      15. {@code AES/ECB/PKCS5Padding} (128)
      16. + *
      17. {@code AES/GCM/NoPadding} (128)
      18. *
      19. {@code DES/CBC/NoPadding} (56)
      20. *
      21. {@code DES/CBC/PKCS5Padding} (56)
      22. *
      23. {@code DES/ECB/NoPadding} (56)
      24. diff -r 957f1a2dc196 -r 098910995d15 jdk/src/java.base/share/classes/sun/launcher/LauncherHelper.java --- a/jdk/src/java.base/share/classes/sun/launcher/LauncherHelper.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/src/java.base/share/classes/sun/launcher/LauncherHelper.java Fri Jun 02 14:46:29 2017 -0700 @@ -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)); } /** diff -r 957f1a2dc196 -r 098910995d15 jdk/src/java.base/share/classes/sun/launcher/resources/launcher.properties --- a/jdk/src/java.base/share/classes/sun/launcher/resources/launcher.properties Sat May 27 12:52:18 2017 +0530 +++ b/jdk/src/java.base/share/classes/sun/launcher/resources/launcher.properties Fri Jun 02 14:46:29 2017 -0700 @@ -34,7 +34,6 @@ \ / 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 diff -r 957f1a2dc196 -r 098910995d15 jdk/src/java.base/share/classes/sun/security/ssl/SupportedGroupsExtension.java diff -r 957f1a2dc196 -r 098910995d15 jdk/src/java.base/share/native/libjli/args.c --- a/jdk/src/java.base/share/native/libjli/args.c Sat May 27 12:52:18 2017 +0530 +++ b/jdk/src/java.base/share/native/libjli/args.c Fri Jun 02 14:46:29 2017 -0700 @@ -456,6 +456,11 @@ env++; } + // Trailing space + if (*env == '\0') { + break; + } + arg = p; while (*env != '\0' && !isspace(*env)) { if (*env == '"' || *env == '\'') { diff -r 957f1a2dc196 -r 098910995d15 jdk/src/java.base/share/native/libjli/emessages.h --- a/jdk/src/java.base/share/native/libjli/emessages.h Sat May 27 12:52:18 2017 +0530 +++ b/jdk/src/java.base/share/native/libjli/emessages.h Fri Jun 02 14:46:29 2017 -0700 @@ -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" diff -r 957f1a2dc196 -r 098910995d15 jdk/src/java.base/unix/native/libjava/UnixFileSystem_md.c --- a/jdk/src/java.base/unix/native/libjava/UnixFileSystem_md.c Sat May 27 12:52:18 2017 +0530 +++ b/jdk/src/java.base/unix/native/libjava/UnixFileSystem_md.c Fri Jun 02 14:46:29 2017 -0700 @@ -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; diff -r 957f1a2dc196 -r 098910995d15 jdk/src/java.security.jgss/share/classes/sun/security/krb5/KrbAsRep.java --- a/jdk/src/java.security.jgss/share/classes/sun/security/krb5/KrbAsRep.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/src/java.security.jgss/share/classes/sun/security/krb5/KrbAsRep.java Fri Jun 02 14:46:29 2017 -0700 @@ -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, diff -r 957f1a2dc196 -r 098910995d15 jdk/src/java.security.jgss/share/classes/sun/security/krb5/KrbTgsRep.java --- a/jdk/src/java.security.jgss/share/classes/sun/security/krb5/KrbTgsRep.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/src/java.security.jgss/share/classes/sun/security/krb5/KrbTgsRep.java Fri Jun 02 14:46:29 2017 -0700 @@ -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, diff -r 957f1a2dc196 -r 098910995d15 jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/AsyncSSLConnection.java --- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/AsyncSSLConnection.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/AsyncSSLConnection.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 whenReceivingResponse() { throw new UnsupportedOperationException("Not supported."); } diff -r 957f1a2dc196 -r 098910995d15 jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/Exchange.java --- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/Exchange.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/Exchange.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 pushGroup; - // buffer for receiving response headers - private volatile ByteBuffer rxBuffer; - Exchange(HttpRequestImpl request, MultiExchange 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); } diff -r 957f1a2dc196 -r 098910995d15 jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/Http1Exchange.java --- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/Http1Exchange.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/Http1Exchange.java Fri Jun 02 14:46:29 2017 -0700 @@ -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); } diff -r 957f1a2dc196 -r 098910995d15 jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/Http1Response.java --- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/Http1Response.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/Http1Response.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 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; } diff -r 957f1a2dc196 -r 098910995d15 jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpConnection.java --- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpConnection.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpConnection.java Fri Jun 02 14:46:29 2017 -0700 @@ -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(); diff -r 957f1a2dc196 -r 098910995d15 jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/PlainHttpConnection.java --- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/PlainHttpConnection.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/PlainHttpConnection.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/PlainTunnelingConnection.java --- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/PlainTunnelingConnection.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/PlainTunnelingConnection.java Fri Jun 02 14:46:29 2017 -0700 @@ -157,11 +157,6 @@ } @Override - protected int readImpl(ByteBuffer buffer) throws IOException { - return delegate.readImpl(buffer); - } - - @Override boolean isSecure() { return false; } diff -r 957f1a2dc196 -r 098910995d15 jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/ResponseContent.java --- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/ResponseContent.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/ResponseContent.java Fri Jun 02 14:46:29 2017 -0700 @@ -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> map) { + map.forEach((k,v) -> { + System.out.print (k + ": "); + for (String val : v) { + System.out.print(val + ", "); + } + System.out.println(""); + }); + } + private Map> 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 diff -r 957f1a2dc196 -r 098910995d15 jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLConnection.java --- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLConnection.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLConnection.java Fri Jun 02 14:46:29 2017 -0700 @@ -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(); } diff -r 957f1a2dc196 -r 098910995d15 jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLDelegate.java --- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLDelegate.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLDelegate.java Fri Jun 02 14:46:29 2017 -0700 @@ -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; diff -r 957f1a2dc196 -r 098910995d15 jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLTunnelConnection.java --- a/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLTunnelConnection.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLTunnelConnection.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/ProblemList.txt --- a/jdk/test/ProblemList.txt Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/ProblemList.txt Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/com/sun/corba/7130985/CorbaExceptionsCompileTest.java --- a/jdk/test/com/sun/corba/7130985/CorbaExceptionsCompileTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/com/sun/corba/7130985/CorbaExceptionsCompileTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/com/sun/crypto/provider/CICO/PBEFunc/CipherNCFuncTest.java --- a/jdk/test/com/sun/crypto/provider/CICO/PBEFunc/CipherNCFuncTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/com/sun/crypto/provider/CICO/PBEFunc/CipherNCFuncTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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, diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/File/createTempFile/SecurityTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/io/File/createTempFile/SecurityTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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"); + } +} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/File/createTempFile/java.policy --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/io/File/createTempFile/java.policy Fri Jun 02 14:46:29 2017 -0700 @@ -0,0 +1,2 @@ +grant { +}; diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/InputStream/ReadAllBytes.java --- a/jdk/test/java/io/InputStream/ReadAllBytes.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/io/InputStream/ReadAllBytes.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/InputStream/ReadNBytes.java --- a/jdk/test/java/io/InputStream/ReadNBytes.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/io/InputStream/ReadNBytes.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/evolution/AddedExternField/run.sh --- a/jdk/test/java/io/Serializable/evolution/AddedExternField/run.sh Sat May 27 12:52:18 2017 +0530 +++ /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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/evolution/RenamePackage/RenamePackageTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/io/Serializable/evolution/RenamePackage/RenamePackageTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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"); + } + } +} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/evolution/RenamePackage/run.sh --- a/jdk/test/java/io/Serializable/evolution/RenamePackage/run.sh Sat May 27 12:52:18 2017 +0530 +++ /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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/failureAtomicity/FailureAtomicity.java --- a/jdk/test/java/io/Serializable/failureAtomicity/FailureAtomicity.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/io/Serializable/failureAtomicity/FailureAtomicity.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/maskSyntheticModifier/MaskSyntheticModifierTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/io/Serializable/maskSyntheticModifier/MaskSyntheticModifierTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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); + } +} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/maskSyntheticModifier/Test.java --- a/jdk/test/java/io/Serializable/maskSyntheticModifier/Test.java Sat May 27 12:52:18 2017 +0530 +++ /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); - } - } -} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/maskSyntheticModifier/run.sh --- a/jdk/test/java/io/Serializable/maskSyntheticModifier/run.sh Sat May 27 12:52:18 2017 +0530 +++ /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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/packageAccess/PackageAccessTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/io/Serializable/packageAccess/PackageAccessTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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); + } + } +} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/packageAccess/Test.java --- a/jdk/test/java/io/Serializable/packageAccess/Test.java Sat May 27 12:52:18 2017 +0530 +++ /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); - } - } -} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/packageAccess/run.sh --- a/jdk/test/java/io/Serializable/packageAccess/run.sh Sat May 27 12:52:18 2017 +0530 +++ /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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/resolveClass/consTest/ConsTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/io/Serializable/resolveClass/consTest/ConsTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 }); + } + } +} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/resolveClass/consTest/SetupJar.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/io/Serializable/resolveClass/consTest/SetupJar.java Fri Jun 02 14:46:29 2017 -0700 @@ -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")); + } +} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/resolveClass/consTest/Test.java --- a/jdk/test/java/io/Serializable/resolveClass/consTest/Test.java Sat May 27 12:52:18 2017 +0530 +++ /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 }); - } - } -} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/resolveClass/consTest/run.sh --- a/jdk/test/java/io/Serializable/resolveClass/consTest/run.sh Sat May 27 12:52:18 2017 +0530 +++ /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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/resolveClass/deserializeButton/DeserializeButtonTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/io/Serializable/resolveClass/deserializeButton/DeserializeButtonTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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")); + } +} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/resolveClass/deserializeButton/Test.java --- a/jdk/test/java/io/Serializable/resolveClass/deserializeButton/Test.java Sat May 27 12:52:18 2017 +0530 +++ /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(); - } -} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/resolveClass/deserializeButton/run.sh --- a/jdk/test/java/io/Serializable/resolveClass/deserializeButton/run.sh Sat May 27 12:52:18 2017 +0530 +++ /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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/serialver/classpath/ClasspathTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/io/Serializable/serialver/classpath/ClasspathTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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"); + } + } +} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/serialver/classpath/Test.java --- a/jdk/test/java/io/Serializable/serialver/classpath/Test.java Sat May 27 12:52:18 2017 +0530 +++ /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; -} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/serialver/classpath/run.sh --- a/jdk/test/java/io/Serializable/serialver/classpath/run.sh Sat May 27 12:52:18 2017 +0530 +++ /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 $? diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/serialver/nested/NestedTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/io/Serializable/serialver/nested/NestedTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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."); + } + } +} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/serialver/nested/Test.java --- a/jdk/test/java/io/Serializable/serialver/nested/Test.java Sat May 27 12:52:18 2017 +0530 +++ /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; - } - } -} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/serialver/nested/run.sh --- a/jdk/test/java/io/Serializable/serialver/nested/run.sh Sat May 27 12:52:18 2017 +0530 +++ /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 $? diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/subclass/Allow.policy --- a/jdk/test/java/io/Serializable/subclass/Allow.policy Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/io/Serializable/subclass/Allow.policy Fri Jun 02 14:46:29 2017 -0700 @@ -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. diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/subclass/SubclassTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/io/Serializable/subclass/SubclassTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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(); + } +}; diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/subclass/Test.java --- a/jdk/test/java/io/Serializable/subclass/Test.java Sat May 27 12:52:18 2017 +0530 +++ /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(); - } -}; diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/subclass/run.sh --- a/jdk/test/java/io/Serializable/subclass/run.sh Sat May 27 12:52:18 2017 +0530 +++ /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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/superclassDataLoss/SuperclassDataLossTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/io/Serializable/superclassDataLoss/SuperclassDataLossTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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); + } +} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/superclassDataLoss/Test.java --- a/jdk/test/java/io/Serializable/superclassDataLoss/Test.java Sat May 27 12:52:18 2017 +0530 +++ /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(); - } -} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/superclassDataLoss/run.sh --- a/jdk/test/java/io/Serializable/superclassDataLoss/run.sh Sat May 27 12:52:18 2017 +0530 +++ /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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/unnamedPackageSwitch/Test.java --- a/jdk/test/java/io/Serializable/unnamedPackageSwitch/Test.java Sat May 27 12:52:18 2017 +0530 +++ /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(); - } -} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/unnamedPackageSwitch/UnnamedPackageSwitchTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/io/Serializable/unnamedPackageSwitch/UnnamedPackageSwitchTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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(); + } +} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/io/Serializable/unnamedPackageSwitch/run.sh --- a/jdk/test/java/io/Serializable/unnamedPackageSwitch/run.sh Sat May 27 12:52:18 2017 +0530 +++ /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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/lang/Class/forName/modules/TestDriver.java --- a/jdk/test/java/lang/Class/forName/modules/TestDriver.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/lang/Class/forName/modules/TestDriver.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 */ diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/lang/ClassLoader/Assert.java --- a/jdk/test/java/lang/ClassLoader/Assert.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/lang/ClassLoader/Assert.java Fri Jun 02 14:46:29 2017 -0700 @@ -28,7 +28,7 @@ * @run main/othervm Assert * @summary Test the assertion facility * @author Mike McCloskey - * @key randomness intermittent + * @key randomness */ import package1.*; diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/lang/Double/ParseHexFloatingPoint.java --- a/jdk/test/java/lang/Double/ParseHexFloatingPoint.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/lang/Double/ParseHexFloatingPoint.java Fri Jun 02 14:46:29 2017 -0700 @@ -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(){} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/lang/Integer/BitTwiddle.java --- a/jdk/test/java/lang/Integer/BitTwiddle.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/lang/Integer/BitTwiddle.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/lang/Long/BitTwiddle.java --- a/jdk/test/java/lang/Long/BitTwiddle.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/lang/Long/BitTwiddle.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/lang/Math/CubeRootTests.java --- a/jdk/test/java/lang/Math/CubeRootTests.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/lang/Math/CubeRootTests.java Fri Jun 02 14:46:29 2017 -0700 @@ -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(){} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/lang/Math/HypotTests.java --- a/jdk/test/java/lang/Math/HypotTests.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/lang/Math/HypotTests.java Fri Jun 02 14:46:29 2017 -0700 @@ -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(){} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/lang/Math/IeeeRecommendedTests.java --- a/jdk/test/java/lang/Math/IeeeRecommendedTests.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/lang/Math/IeeeRecommendedTests.java Fri Jun 02 14:46:29 2017 -0700 @@ -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(){} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/lang/Math/Log1pTests.java --- a/jdk/test/java/lang/Math/Log1pTests.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/lang/Math/Log1pTests.java Fri Jun 02 14:46:29 2017 -0700 @@ -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(){} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/lang/Math/MultiplicationTests.java --- a/jdk/test/java/lang/Math/MultiplicationTests.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/lang/Math/MultiplicationTests.java Fri Jun 02 14:46:29 2017 -0700 @@ -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(){} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/lang/StackWalker/StackWalkTest.java --- a/jdk/test/java/lang/StackWalker/StackWalkTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/lang/StackWalker/StackWalkTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/lang/StrictMath/CubeRootTests.java --- a/jdk/test/java/lang/StrictMath/CubeRootTests.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/lang/StrictMath/CubeRootTests.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/lang/StrictMath/ExpTests.java --- a/jdk/test/java/lang/StrictMath/ExpTests.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/lang/StrictMath/ExpTests.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/lang/StrictMath/HypotTests.java --- a/jdk/test/java/lang/StrictMath/HypotTests.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/lang/StrictMath/HypotTests.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/lang/String/LiteralReplace.java --- a/jdk/test/java/lang/String/LiteralReplace.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/lang/String/LiteralReplace.java Fri Jun 02 14:46:29 2017 -0700 @@ -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; diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/lang/invoke/ExplicitCastArgumentsTest.java --- a/jdk/test/java/lang/invoke/ExplicitCastArgumentsTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/lang/invoke/ExplicitCastArgumentsTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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, diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/lang/invoke/LFCaching/LFGarbageCollectedTest.java --- a/jdk/test/java/lang/invoke/LFCaching/LFGarbageCollectedTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/lang/invoke/LFCaching/LFGarbageCollectedTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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; diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/lang/invoke/LFCaching/LFMultiThreadCachingTest.java --- a/jdk/test/java/lang/invoke/LFCaching/LFMultiThreadCachingTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/lang/invoke/LFCaching/LFMultiThreadCachingTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 set = EnumSet.complementOf(EnumSet.of(TestMethods.Kind.EXCEPT)); + EnumSet 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)); } } diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/lang/invoke/LFCaching/LFSingleThreadCachingTest.java --- a/jdk/test/java/lang/invoke/LFCaching/LFSingleThreadCachingTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/lang/invoke/LFCaching/LFSingleThreadCachingTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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)); } } diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/lang/invoke/LFCaching/LambdaFormTestCase.java --- a/jdk/test/java/lang/invoke/LFCaching/LambdaFormTestCase.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/lang/invoke/LFCaching/LambdaFormTestCase.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 ctor, Collection testMethods) { + TestRun(Function ctor, + Collection 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 ctor, Collection testMethods) { + public static void runTests(Function ctor, + Collection 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) { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/lang/invoke/LFCaching/TestMethods.java --- a/jdk/test/java/lang/invoke/LFCaching/TestMethods.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/lang/invoke/LFCaching/TestMethods.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 getTestCaseData() { - Map 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 getTestCaseData() { + Map 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 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 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 getTestCaseData() { - Map 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 getTestCaseData() { + Map 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 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> 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 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> 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 getTestCaseData() { - Map 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 getTestCaseData() { + Map 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 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 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 getTestCaseData() { - Map 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 getTestCaseData() { + Map 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 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 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 getTestCaseData() { - Map 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 getTestCaseData() { + Map 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 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 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 getTestCaseData() { - Map 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 getTestCaseData() { + Map 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 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 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 getTestCaseData() { - Map 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 getTestCaseData() { + Map 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 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 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 getTestCaseData() { - Map data = new HashMap<>(); - int desiredArity = Helper.RNG.nextInt(super.maxArity); - MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); - data.put("mtTarget", mtTarget); - return data; - } + @Override + public Map getTestCaseData() { + Map 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 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 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 getTestCaseData() { - Map 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 getTestCaseData() { + Map 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 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 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 getTestCaseData() { - Map 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 getTestCaseData() { + Map 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 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> 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 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> 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 getTestCaseData() { - Map data = new HashMap<>(); - int desiredArity = Helper.RNG.nextInt(super.maxArity); - MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); - data.put("mtTarget", mtTarget); - return data; - } + @Override + public Map getTestCaseData() { + Map 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 data, TestMethods.Kind kind) { - MethodType mtTarget = (MethodType) data.get("mtTarget"); - return MethodHandles.invoker(mtTarget); - } - }, + @Override + protected MethodHandle getMH(Map data, TestMethods.Kind kind) { + MethodType mtTarget = (MethodType) data.get("mtTarget"); + return MethodHandles.invoker(mtTarget); + } + }, EXACT_INVOKER("exactInvoker", Helper.MAX_ARITY - 1) { - @Override - public Map getTestCaseData() { - Map data = new HashMap<>(); - int desiredArity = Helper.RNG.nextInt(super.maxArity); - MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); - data.put("mtTarget", mtTarget); - return data; - } + @Override + public Map getTestCaseData() { + Map 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 data, TestMethods.Kind kind) { - MethodType mtTarget = (MethodType) data.get("mtTarget"); - return MethodHandles.exactInvoker(mtTarget); - } - }, + @Override + protected MethodHandle getMH(Map data, TestMethods.Kind kind) { + MethodType mtTarget = (MethodType) data.get("mtTarget"); + return MethodHandles.exactInvoker(mtTarget); + } + }, SPREAD_INVOKER("spreadInvoker", Helper.MAX_ARITY - 1) { - @Override - public Map getTestCaseData() { - Map 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 getTestCaseData() { + Map 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 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 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 getTestCaseData() { - Map data = new HashMap<>(); - int desiredArity = Helper.RNG.nextInt(super.maxArity); - MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); - data.put("mtTarget", mtTarget); - return data; - } + @Override + public Map getTestCaseData() { + Map 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 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 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 getTestCaseData() { - Map data = new HashMap<>(); - int desiredArity = Helper.RNG.nextInt(super.maxArity); - MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); - data.put("mtTarget", mtTarget); - return data; - } + @Override + public Map getTestCaseData() { + Map 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 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 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 getTestCaseData() { - Map data = new HashMap<>(); - int desiredArity = Helper.RNG.nextInt(super.maxArity); - MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); - data.put("mtTarget", mtTarget); - return data; - } + @Override + public Map getTestCaseData() { + Map 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 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 getTestCaseData() { - Map 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 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 getTestCaseData() { + Map 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 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 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 data, TestMethods.Kind kind) throws NoSuchMethodException, IllegalAccessException { - throw new UnsupportedOperationException("TESTBUG: getMH method is not implemented for test method " + this); + protected MethodHandle getMH(Map 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)); diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/lang/invoke/MethodHandles/CatchExceptionTest.java --- a/jdk/test/java/lang/invoke/MethodHandles/CatchExceptionTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/lang/invoke/MethodHandles/CatchExceptionTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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> list = new ArrayList<>(constructors.length * - throwables.length * ThrowMode.values().length); + List> list = new ArrayList<>(constructors.length + * throwables.length * ThrowMode.values().length); //noinspection unchecked for (PartialConstructor f : constructors) { for (ThrowMode mode : ThrowMode.values()) { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/lang/invoke/MethodHandlesTest.java --- a/jdk/test/java/lang/invoke/MethodHandlesTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/lang/invoke/MethodHandlesTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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; - /** * diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/lang/invoke/PermuteArgsTest.java --- a/jdk/test/java/lang/invoke/PermuteArgsTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/lang/invoke/PermuteArgsTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 done) throws Throwable { + static void testPermutations(MethodHandle mh, int[] perm, int start, int end, + Set 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 done) throws Throwable { + static void testRotations(MethodHandle mh, int[] perm, int start, int end, + Set 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; diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/lang/invoke/TestCatchExceptionWithVarargs.java --- a/jdk/test/java/lang/invoke/TestCatchExceptionWithVarargs.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/lang/invoke/TestCatchExceptionWithVarargs.java Fri Jun 02 14:46:29 2017 -0700 @@ -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); } } } diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/lang/invoke/VarargsArrayTest.java --- a/jdk/test/java/lang/invoke/VarargsArrayTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/lang/invoke/VarargsArrayTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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) { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/lang/invoke/common/test/java/lang/invoke/lib/CodeCacheOverflowProcessor.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/lang/invoke/common/test/java/lang/invoke/lib/CodeCacheOverflowProcessor.java Fri Jun 02 14:46:29 2017 -0700 @@ -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; + } +} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/lang/invoke/common/test/java/lang/invoke/lib/Helper.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/lang/invoke/common/test/java/lang/invoke/lib/Helper.java Fri Jun 02 14:46:29 2017 -0700 @@ -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> 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 entry = logEntry(name, args); + calledLog.add(entry); + return entry; + } + + private static List logEntry(String name, Object... args) { + return Arrays.asList(name, Arrays.asList(args)); + } + + public static void clear() { + calledLog.clear(); + } + + public static List getCalled(int lag) { + int size = calledLog.size(); + return size <= lag ? null : calledLog.get(size - lag - 1); + } + + public static List> randomClasses(Class[] classes, int size) { + List> result = new ArrayList<>(size); + for (int i = 0; i < size; ++i) { + result.add(classes[RNG.nextInt(classes.length)]); + } + return result; + } + + public static List> getParams(List> classes, + boolean isVararg, int argsCount) { + boolean unmodifiable = true; + List> 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> classes) { + int targetLen = target.type().parameterCount(); + int extra = (nargs - targetLen); + if (extra <= 0) { + return target; + } + List> 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> 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> 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); + } +} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/math/BigDecimal/StringConstructor.java --- a/jdk/test/java/math/BigDecimal/StringConstructor.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/math/BigDecimal/StringConstructor.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/math/BigInteger/BigIntegerTest.java --- a/jdk/test/java/math/BigInteger/BigIntegerTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/math/BigInteger/BigIntegerTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/math/BigInteger/ModPow65537.java --- a/jdk/test/java/math/BigInteger/ModPow65537.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/math/BigInteger/ModPow65537.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/math/BigInteger/PrimeTest.java --- a/jdk/test/java/math/BigInteger/PrimeTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/math/BigInteger/PrimeTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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; diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/math/BigInteger/SymmetricRangeTests.java --- a/jdk/test/java/math/BigInteger/SymmetricRangeTests.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/math/BigInteger/SymmetricRangeTests.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/net/Socket/OldSocketImpl.sh --- a/jdk/test/java/net/Socket/OldSocketImpl.sh Sat May 27 12:52:18 2017 +0530 +++ /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 - diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/net/Socket/OldSocketImplTestDriver.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/net/Socket/OldSocketImplTestDriver.java Fri Jun 02 14:46:29 2017 -0700 @@ -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); + } +} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/net/URL/B5086147.java --- a/jdk/test/java/net/URL/B5086147.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/net/URL/B5086147.java Fri Jun 02 14:46:29 2017 -0700 @@ -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{ diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/net/URL/B5086147.sh --- a/jdk/test/java/net/URL/B5086147.sh Sat May 27 12:52:18 2017 +0530 +++ /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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/net/URLClassLoader/B5077773.java --- a/jdk/test/java/net/URLClassLoader/B5077773.java Sat May 27 12:52:18 2017 +0530 +++ /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"); - } - } -} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/net/URLClassLoader/B5077773.sh --- a/jdk/test/java/net/URLClassLoader/B5077773.sh Sat May 27 12:52:18 2017 +0530 +++ /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 - diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/net/URLClassLoader/closetest/CloseTest.java --- a/jdk/test/java/net/URLClassLoader/closetest/CloseTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/net/URLClassLoader/closetest/CloseTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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); + } } diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/net/URLClassLoader/closetest/Common.java --- a/jdk/test/java/net/URLClassLoader/closetest/Common.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/net/URLClassLoader/closetest/Common.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/net/URLClassLoader/closetest/GetResourceAsStream.java --- a/jdk/test/java/net/URLClassLoader/closetest/GetResourceAsStream.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/net/URLClassLoader/closetest/GetResourceAsStream.java Fri Jun 02 14:46:29 2017 -0700 @@ -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); + } } diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/net/URLClassLoader/closetest/build.sh --- a/jdk/test/java/net/URLClassLoader/closetest/build.sh Sat May 27 12:52:18 2017 +0530 +++ /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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/net/URLClassLoader/closetest/build2.sh --- a/jdk/test/java/net/URLClassLoader/closetest/build2.sh Sat May 27 12:52:18 2017 +0530 +++ /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 .. diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/net/URLClassLoader/getresourceasstream/TestDriver.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/net/URLClassLoader/getresourceasstream/TestDriver.java Fri Jun 02 14:46:29 2017 -0700 @@ -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); + } +} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/net/URLClassLoader/getresourceasstream/policy --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/net/URLClassLoader/getresourceasstream/policy Fri Jun 02 14:46:29 2017 -0700 @@ -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"; +}; diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/net/URLClassLoader/getresourceasstream/test.sh --- a/jdk/test/java/net/URLClassLoader/getresourceasstream/test.sh Sat May 27 12:52:18 2017 +0530 +++ /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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/net/URLClassLoader/sealing/CheckSealed.java --- a/jdk/test/java/net/URLClassLoader/sealing/CheckSealed.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/net/URLClassLoader/sealing/CheckSealed.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/net/URLClassLoader/sealing/CheckSealedTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/net/URLClassLoader/sealing/CheckSealedTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 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); + } +} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/net/URLClassLoader/sealing/checksealed.sh --- a/jdk/test/java/net/URLClassLoader/sealing/checksealed.sh Sat May 27 12:52:18 2017 +0530 +++ /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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/net/URLConnection/6212146/Test.java --- a/jdk/test/java/net/URLConnection/6212146/Test.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/net/URLConnection/6212146/Test.java Fri Jun 02 14:46:29 2017 -0700 @@ -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) { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/net/URLConnection/6212146/TestDriver.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/net/URLConnection/6212146/TestDriver.java Fri Jun 02 14:46:29 2017 -0700 @@ -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); + } +} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/net/URLConnection/6212146/test.sh --- a/jdk/test/java/net/URLConnection/6212146/test.sh Sat May 27 12:52:18 2017 +0530 +++ /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 $? diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/net/URLConnection/UNCTest.java --- a/jdk/test/java/net/URLConnection/UNCTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/net/URLConnection/UNCTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/net/URLConnection/UNCTest.sh --- a/jdk/test/java/net/URLConnection/UNCTest.sh Sat May 27 12:52:18 2017 +0530 +++ /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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/net/httpclient/RequestBodyTest.java --- a/jdk/test/java/net/httpclient/RequestBodyTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/net/httpclient/RequestBodyTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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.*; diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/net/httpclient/whitebox/jdk.incubator.httpclient/jdk/incubator/http/ResponseHeadersTest.java --- a/jdk/test/java/net/httpclient/whitebox/jdk.incubator.httpclient/jdk/incubator/http/ResponseHeadersTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/net/httpclient/whitebox/jdk.incubator.httpclient/jdk/incubator/http/ResponseHeadersTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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) diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/net/spi/URLStreamHandlerProvider/Basic.java --- a/jdk/test/java/net/spi/URLStreamHandlerProvider/Basic.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/net/spi/URLStreamHandlerProvider/Basic.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 */ diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/nio/Buffer/LimitDirectMemory.java --- a/jdk/test/java/nio/Buffer/LimitDirectMemory.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/nio/Buffer/LimitDirectMemory.java Fri Jun 02 14:46:29 2017 -0700 @@ -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" + + " " + + " " + + " "); + } boolean throwp = parseThrow(args[0]); int size = parseSize(args[1]); int incr = (args.length > 2 ? parseSize(args[2]) : size); diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/nio/Buffer/LimitDirectMemory.sh --- a/jdk/test/java/nio/Buffer/LimitDirectMemory.sh Sat May 27 12:52:18 2017 +0530 +++ /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} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/nio/Buffer/LimitDirectMemoryNegativeTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/nio/Buffer/LimitDirectMemoryNegativeTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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); + } + } +} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/nio/ByteOrder/NativeOrder.java --- a/jdk/test/java/nio/ByteOrder/NativeOrder.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/nio/ByteOrder/NativeOrder.java Fri Jun 02 14:46:29 2017 -0700 @@ -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"); } } diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/nio/channels/AsynchronousChannelGroup/AsExecutor.java --- a/jdk/test/java/nio/channels/AsynchronousChannelGroup/AsExecutor.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/nio/channels/AsynchronousChannelGroup/AsExecutor.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/nio/channels/AsynchronousChannelGroup/Attack.java --- a/jdk/test/java/nio/channels/AsynchronousChannelGroup/Attack.java Sat May 27 12:52:18 2017 +0530 +++ /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; - } -} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/nio/channels/AsynchronousChannelGroup/PrivilegedThreadFactory.java --- a/jdk/test/java/nio/channels/AsynchronousChannelGroup/PrivilegedThreadFactory.java Sat May 27 12:52:18 2017 +0530 +++ /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() { - @Override - public Thread run() { - Thread t = new Thread(r); - t.setDaemon(true); - return t; - } - }); - } -} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/nio/channels/AsynchronousChannelGroup/SetupJar.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/nio/channels/AsynchronousChannelGroup/SetupJar.java Fri Jun 02 14:46:29 2017 -0700 @@ -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")); + } +} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/nio/channels/AsynchronousChannelGroup/bootlib/Attack.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/nio/channels/AsynchronousChannelGroup/bootlib/Attack.java Fri Jun 02 14:46:29 2017 -0700 @@ -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; + } +} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/nio/channels/AsynchronousChannelGroup/bootlib/PrivilegedThreadFactory.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/nio/channels/AsynchronousChannelGroup/bootlib/PrivilegedThreadFactory.java Fri Jun 02 14:46:29 2017 -0700 @@ -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() { + @Override + public Thread run() { + Thread t = new Thread(r); + t.setDaemon(true); + return t; + } + }); + } +} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/nio/channels/AsynchronousChannelGroup/run_any_task.sh --- a/jdk/test/java/nio/channels/AsynchronousChannelGroup/run_any_task.sh Sat May 27 12:52:18 2017 +0530 +++ /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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/nio/channels/AsynchronousSocketChannel/Basic.java --- a/jdk/test/java/nio/channels/AsynchronousSocketChannel/Basic.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/nio/channels/AsynchronousSocketChannel/Basic.java Fri Jun 02 14:46:29 2017 -0700 @@ -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(); diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/nio/channels/FileChannel/Transfer.java --- a/jdk/test/java/nio/channels/FileChannel/Transfer.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/nio/channels/FileChannel/Transfer.java Fri Jun 02 14:46:29 2017 -0700 @@ -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; diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/nio/channels/Selector/SelectAndClose.java --- a/jdk/test/java/nio/channels/Selector/SelectAndClose.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/nio/channels/Selector/SelectAndClose.java Fri Jun 02 14:46:29 2017 -0700 @@ -23,7 +23,6 @@ /* @test * @bug 5004077 - * @key intermittent * @summary Check blocking of select and close */ diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/nio/channels/Selector/WakeupAfterClose.java --- a/jdk/test/java/nio/channels/Selector/WakeupAfterClose.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/nio/channels/Selector/WakeupAfterClose.java Fri Jun 02 14:46:29 2017 -0700 @@ -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; diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/nio/channels/SocketChannel/VectorIO.java --- a/jdk/test/java/nio/channels/SocketChannel/VectorIO.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/nio/channels/SocketChannel/VectorIO.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/nio/file/FileStore/Basic.java --- a/jdk/test/java/nio/file/FileStore/Basic.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/nio/file/FileStore/Basic.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/nio/file/FileSystem/Basic.java --- a/jdk/test/java/nio/file/FileSystem/Basic.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/nio/file/FileSystem/Basic.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/nio/file/Files/CopyAndMove.java --- a/jdk/test/java/nio/file/Files/CopyAndMove.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/nio/file/Files/CopyAndMove.java Fri Jun 02 14:46:29 2017 -0700 @@ -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(); diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/nio/file/Files/StreamLinesTest.java --- a/jdk/test/java/nio/file/Files/StreamLinesTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/nio/file/Files/StreamLinesTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/nio/file/WatchService/LotsOfEvents.java --- a/jdk/test/java/nio/file/WatchService/LotsOfEvents.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/nio/file/WatchService/LotsOfEvents.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/security/AccessController/DoPrivAccompliceTest.java --- a/jdk/test/java/security/AccessController/DoPrivAccompliceTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/security/AccessController/DoPrivAccompliceTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 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"); } - } diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/security/KeyStore/PKCS12/EntryProtectionTest.java --- a/jdk/test/java/security/KeyStore/PKCS12/EntryProtectionTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/security/KeyStore/PKCS12/EntryProtectionTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/security/MessageDigest/TestDigestIOStream.java --- a/jdk/test/java/security/MessageDigest/TestDigestIOStream.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/security/MessageDigest/TestDigestIOStream.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 */ diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/security/MessageDigest/TestSameLength.java --- a/jdk/test/java/security/MessageDigest/TestSameLength.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/security/MessageDigest/TestSameLength.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/security/MessageDigest/TestSameValue.java --- a/jdk/test/java/security/MessageDigest/TestSameValue.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/security/MessageDigest/TestSameValue.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/security/Policy/ExtensiblePolicy/ExtensiblePolicyWithJarTest.java --- a/jdk/test/java/security/Policy/ExtensiblePolicy/ExtensiblePolicyWithJarTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/security/Policy/ExtensiblePolicy/ExtensiblePolicyWithJarTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 */ diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/security/Signature/Offsets.java --- a/jdk/test/java/security/Signature/Offsets.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/security/Signature/Offsets.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/util/Base64/TestBase64.java --- a/jdk/test/java/util/Base64/TestBase64.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/util/Base64/TestBase64.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/util/List/SubList.java --- a/jdk/test/java/util/List/SubList.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/util/List/SubList.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/util/WeakHashMap/GCDuringIteration.java --- a/jdk/test/java/util/WeakHashMap/GCDuringIteration.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/util/WeakHashMap/GCDuringIteration.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/util/concurrent/ThreadPoolExecutor/ConfigChanges.java --- a/jdk/test/java/util/concurrent/ThreadPoolExecutor/ConfigChanges.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/util/concurrent/ThreadPoolExecutor/ConfigChanges.java Fri Jun 02 14:46:29 2017 -0700 @@ -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"); diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/util/jar/JarFile/mrjar/MultiReleaseJarAPI.java --- a/jdk/test/java/util/jar/JarFile/mrjar/MultiReleaseJarAPI.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/util/jar/JarFile/mrjar/MultiReleaseJarAPI.java Fri Jun 02 14:46:29 2017 -0700 @@ -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; diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/util/logging/FileHandlerMaxLocksTest.java --- a/jdk/test/java/util/logging/FileHandlerMaxLocksTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/util/logging/FileHandlerMaxLocksTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/util/regex/RegExTest.java --- a/jdk/test/java/util/regex/RegExTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/util/regex/RegExTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/util/zip/InflaterInputStream/TestAvailable.java --- a/jdk/test/java/util/zip/InflaterInputStream/TestAvailable.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/util/zip/InflaterInputStream/TestAvailable.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/util/zip/ZipFile/MultiThreadedReadTest.java --- a/jdk/test/java/util/zip/ZipFile/MultiThreadedReadTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/util/zip/ZipFile/MultiThreadedReadTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/util/zip/ZipFile/ReadLongZipFileName.java --- a/jdk/test/java/util/zip/ZipFile/ReadLongZipFileName.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/util/zip/ZipFile/ReadLongZipFileName.java Fri Jun 02 14:46:29 2017 -0700 @@ -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";; diff -r 957f1a2dc196 -r 098910995d15 jdk/test/java/util/zip/ZipFile/ZipEntryFreeTest.java --- a/jdk/test/java/util/zip/ZipFile/ZipEntryFreeTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/java/util/zip/ZipFile/ZipEntryFreeTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/javax/imageio/plugins/tiff/MultiPageTest/MultiPageTest.java --- a/jdk/test/javax/imageio/plugins/tiff/MultiPageTest/MultiPageTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/javax/imageio/plugins/tiff/MultiPageTest/MultiPageTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/javax/net/ssl/DTLS/DTLSIncorrectAppDataTest.java --- a/jdk/test/javax/net/ssl/DTLS/DTLSIncorrectAppDataTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/javax/net/ssl/DTLS/DTLSIncorrectAppDataTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/javax/net/ssl/DTLS/DTLSRehandshakeWithCipherChangeTest.java --- a/jdk/test/javax/net/ssl/DTLS/DTLSRehandshakeWithCipherChangeTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/javax/net/ssl/DTLS/DTLSRehandshakeWithCipherChangeTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/javax/net/ssl/DTLS/DTLSSequenceNumberTest.java --- a/jdk/test/javax/net/ssl/DTLS/DTLSSequenceNumberTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/javax/net/ssl/DTLS/DTLSSequenceNumberTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/javax/net/ssl/DTLSv10/DTLSv10IncorrectAppDataTest.java --- a/jdk/test/javax/net/ssl/DTLSv10/DTLSv10IncorrectAppDataTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/javax/net/ssl/DTLSv10/DTLSv10IncorrectAppDataTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/javax/net/ssl/DTLSv10/DTLSv10RehandshakeWithCipherChangeTest.java --- a/jdk/test/javax/net/ssl/DTLSv10/DTLSv10RehandshakeWithCipherChangeTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/javax/net/ssl/DTLSv10/DTLSv10RehandshakeWithCipherChangeTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/javax/net/ssl/TLS/TLSRehandshakeWithCipherChangeTest.java --- a/jdk/test/javax/net/ssl/TLS/TLSRehandshakeWithCipherChangeTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/javax/net/ssl/TLS/TLSRehandshakeWithCipherChangeTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/javax/net/ssl/TLSCommon/RehandshakeWithCipherChangeTest.java --- a/jdk/test/javax/net/ssl/TLSCommon/RehandshakeWithCipherChangeTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/javax/net/ssl/TLSCommon/RehandshakeWithCipherChangeTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/javax/net/ssl/TLSv1/TLSRehandshakeWithCipherChangeTest.java --- a/jdk/test/javax/net/ssl/TLSv1/TLSRehandshakeWithCipherChangeTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/javax/net/ssl/TLSv1/TLSRehandshakeWithCipherChangeTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/javax/net/ssl/TLSv11/TLSRehandshakeWithCipherChangeTest.java --- a/jdk/test/javax/net/ssl/TLSv11/TLSRehandshakeWithCipherChangeTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/javax/net/ssl/TLSv11/TLSRehandshakeWithCipherChangeTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/javax/sound/sampled/Clip/ClipCloseLoss.java --- a/jdk/test/javax/sound/sampled/Clip/ClipCloseLoss.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/javax/sound/sampled/Clip/ClipCloseLoss.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/javax/swing/ToolTipManager/7123767/bug7123767.java --- a/jdk/test/javax/swing/ToolTipManager/7123767/bug7123767.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/javax/swing/ToolTipManager/7123767/bug7123767.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/jdk/internal/util/jar/TestVersionedStream.java --- a/jdk/test/jdk/internal/util/jar/TestVersionedStream.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/jdk/internal/util/jar/TestVersionedStream.java Fri Jun 02 14:46:29 2017 -0700 @@ -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; diff -r 957f1a2dc196 -r 098910995d15 jdk/test/jdk/modules/incubator/ImageModules.java --- a/jdk/test/jdk/modules/incubator/ImageModules.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/jdk/modules/incubator/ImageModules.java Fri Jun 02 14:46:29 2017 -0700 @@ -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; diff -r 957f1a2dc196 -r 098910995d15 jdk/test/jdk/security/jarsigner/Spec.java --- a/jdk/test/jdk/security/jarsigner/Spec.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/jdk/security/jarsigner/Spec.java Fri Jun 02 14:46:29 2017 -0700 @@ -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; diff -r 957f1a2dc196 -r 098910995d15 jdk/test/lib/testlibrary/JavaToolUtils.java --- a/jdk/test/lib/testlibrary/JavaToolUtils.java Sat May 27 12:52:18 2017 +0530 +++ /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 files) throws IOException { - JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); - try (StandardJavaFileManager fileManager = compiler. - getStandardFileManager(null, null, null)) { - Iterable 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 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 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 commands) throws Exception { - return runJava(commands, DEFAULT_WAIT_TIME); - } - - /** - * Run any command - * @param commands - * @return - * @throws Exception - */ - public static int runCommand(List 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; - } - - -} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/lib/testlibrary/bootlib/java.base/java/util/SpliteratorOfIntDataBuilder.java diff -r 957f1a2dc196 -r 098910995d15 jdk/test/lib/testlibrary/bootlib/java.base/java/util/stream/DoubleStreamTestScenario.java diff -r 957f1a2dc196 -r 098910995d15 jdk/test/lib/testlibrary/bootlib/java.base/java/util/stream/IntStreamTestScenario.java diff -r 957f1a2dc196 -r 098910995d15 jdk/test/lib/testlibrary/bootlib/java.base/java/util/stream/LongStreamTestScenario.java diff -r 957f1a2dc196 -r 098910995d15 jdk/test/lib/testlibrary/bootlib/java.base/java/util/stream/StreamTestScenario.java diff -r 957f1a2dc196 -r 098910995d15 jdk/test/lib/testlibrary/jdk/testlibrary/FileUtils.java --- a/jdk/test/lib/testlibrary/jdk/testlibrary/FileUtils.java Sat May 27 12:52:18 2017 +0530 +++ /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 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 deleteFileTreeUnchecked(Path dir) { - final List 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 (!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; - } -} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/lib/testlibrary/jdk/testlibrary/JarUtils.java --- a/jdk/test/lib/testlibrary/jdk/testlibrary/JarUtils.java Sat May 27 12:52:18 2017 +0530 +++ /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 updatedFiles = new ArrayList<>(); - try (JarFile srcJarFile = new JarFile(src)) { - Enumeration 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(); - } - -} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/lib/testlibrary/jdk/testlibrary/RandomFactory.java --- a/jdk/test/lib/testlibrary/jdk/testlibrary/RandomFactory.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/lib/testlibrary/jdk/testlibrary/RandomFactory.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 /test/lib/jdk/test/lib} + * */ +@Deprecated public class RandomFactory { /** * Attempt to obtain the seed from the value of the "seed" property. diff -r 957f1a2dc196 -r 098910995d15 jdk/test/lib/testlibrary/jsr292/com/oracle/testlibrary/jsr292/CodeCacheOverflowProcessor.java --- a/jdk/test/lib/testlibrary/jsr292/com/oracle/testlibrary/jsr292/CodeCacheOverflowProcessor.java Sat May 27 12:52:18 2017 +0530 +++ /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; - } -} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/lib/testlibrary/jsr292/com/oracle/testlibrary/jsr292/Helper.java --- a/jdk/test/lib/testlibrary/jsr292/com/oracle/testlibrary/jsr292/Helper.java Sat May 27 12:52:18 2017 +0530 +++ /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> 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 entry = logEntry(name, args); - calledLog.add(entry); - return entry; - } - - private static List logEntry(String name, Object... args) { - return Arrays.asList(name, Arrays.asList(args)); - } - - public static void clear() { - calledLog.clear(); - } - - public static List getCalled(int lag) { - int size = calledLog.size(); - return size <= lag ? null : calledLog.get(size - lag - 1); - } - - public static List> randomClasses(Class[] classes, int size) { - List> result = new ArrayList<>(size); - for (int i = 0; i < size; ++i) { - result.add(classes[RNG.nextInt(classes.length)]); - } - return result; - } - - public static List> getParams(List> classes, - boolean isVararg, int argsCount) { - boolean unmodifiable = true; - List> 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> classes) { - int targetLen = target.type().parameterCount(); - int extra = (nargs - targetLen); - if (extra <= 0) { - return target; - } - List> 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> 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> 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); - } -} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/sun/nio/cs/FindDecoderBugs.java --- a/jdk/test/sun/nio/cs/FindDecoderBugs.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/sun/nio/cs/FindDecoderBugs.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/sun/nio/cs/FindEncoderBugs.java --- a/jdk/test/sun/nio/cs/FindEncoderBugs.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/sun/nio/cs/FindEncoderBugs.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/sun/security/ec/SignatureOffsets.java --- a/jdk/test/sun/security/ec/SignatureOffsets.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/sun/security/ec/SignatureOffsets.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/sun/security/krb5/auto/KDC.java --- a/jdk/test/sun/security/krb5/auto/KDC.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/sun/security/krb5/auto/KDC.java Fri Jun 02 14:46:29 2017 -0700 @@ -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( diff -r 957f1a2dc196 -r 098910995d15 jdk/test/sun/security/krb5/auto/TicketSName.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/security/krb5/auto/TicketSName.java Fri Jun 02 14:46:29 2017 -0700 @@ -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); + } + } +} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/sun/security/mscapi/SignatureOffsets.java --- a/jdk/test/sun/security/mscapi/SignatureOffsets.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/sun/security/mscapi/SignatureOffsets.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java --- a/jdk/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/sun/security/rsa/SignatureOffsets.java --- a/jdk/test/sun/security/rsa/SignatureOffsets.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/sun/security/rsa/SignatureOffsets.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/sun/security/ssl/rsa/SignatureOffsets.java --- a/jdk/test/sun/security/ssl/rsa/SignatureOffsets.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/sun/security/ssl/rsa/SignatureOffsets.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/sun/security/tools/jarsigner/AltProvider.java --- a/jdk/test/sun/security/tools/jarsigner/AltProvider.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/sun/security/tools/jarsigner/AltProvider.java Fri Jun 02 14:46:29 2017 -0700 @@ -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.*; diff -r 957f1a2dc196 -r 098910995d15 jdk/test/sun/security/tools/jarsigner/Options.java --- a/jdk/test/sun/security/tools/jarsigner/Options.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/sun/security/tools/jarsigner/Options.java Fri Jun 02 14:46:29 2017 -0700 @@ -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; diff -r 957f1a2dc196 -r 098910995d15 jdk/test/sun/security/tools/jarsigner/TimestampCheck.java --- a/jdk/test/sun/security/tools/jarsigner/TimestampCheck.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/sun/security/tools/jarsigner/TimestampCheck.java Fri Jun 02 14:46:29 2017 -0700 @@ -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"); diff -r 957f1a2dc196 -r 098910995d15 jdk/test/sun/security/tools/jarsigner/TsacertOptionTest.java --- a/jdk/test/sun/security/tools/jarsigner/TsacertOptionTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/sun/security/tools/jarsigner/TsacertOptionTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -22,7 +22,7 @@ */ import jdk.testlibrary.OutputAnalyzer; -import jdk.testlibrary.JarUtils; +import jdk.test.lib.util.JarUtils; /** * @test diff -r 957f1a2dc196 -r 098910995d15 jdk/test/sun/security/tools/jarsigner/Warning.java --- a/jdk/test/sun/security/tools/jarsigner/Warning.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/sun/security/tools/jarsigner/Warning.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/sun/security/tools/jarsigner/warnings/AliasNotInStoreTest.java --- a/jdk/test/sun/security/tools/jarsigner/warnings/AliasNotInStoreTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/sun/security/tools/jarsigner/warnings/AliasNotInStoreTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/sun/security/tools/jarsigner/warnings/BadExtendedKeyUsageTest.java --- a/jdk/test/sun/security/tools/jarsigner/warnings/BadExtendedKeyUsageTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/sun/security/tools/jarsigner/warnings/BadExtendedKeyUsageTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/sun/security/tools/jarsigner/warnings/BadKeyUsageTest.java --- a/jdk/test/sun/security/tools/jarsigner/warnings/BadKeyUsageTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/sun/security/tools/jarsigner/warnings/BadKeyUsageTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 */ diff -r 957f1a2dc196 -r 098910995d15 jdk/test/sun/security/tools/jarsigner/warnings/BadNetscapeCertTypeTest.java --- a/jdk/test/sun/security/tools/jarsigner/warnings/BadNetscapeCertTypeTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/sun/security/tools/jarsigner/warnings/BadNetscapeCertTypeTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/sun/security/tools/jarsigner/warnings/ChainNotValidatedTest.java --- a/jdk/test/sun/security/tools/jarsigner/warnings/ChainNotValidatedTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/sun/security/tools/jarsigner/warnings/ChainNotValidatedTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/sun/security/tools/jarsigner/warnings/HasExpiredCertTest.java --- a/jdk/test/sun/security/tools/jarsigner/warnings/HasExpiredCertTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/sun/security/tools/jarsigner/warnings/HasExpiredCertTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/sun/security/tools/jarsigner/warnings/HasExpiringCertTest.java --- a/jdk/test/sun/security/tools/jarsigner/warnings/HasExpiringCertTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/sun/security/tools/jarsigner/warnings/HasExpiringCertTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/sun/security/tools/jarsigner/warnings/HasUnsignedEntryTest.java --- a/jdk/test/sun/security/tools/jarsigner/warnings/HasUnsignedEntryTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/sun/security/tools/jarsigner/warnings/HasUnsignedEntryTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/sun/security/tools/jarsigner/warnings/MultipleWarningsTest.java --- a/jdk/test/sun/security/tools/jarsigner/warnings/MultipleWarningsTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/sun/security/tools/jarsigner/warnings/MultipleWarningsTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/sun/security/tools/jarsigner/warnings/NoTimestampTest.java --- a/jdk/test/sun/security/tools/jarsigner/warnings/NoTimestampTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/sun/security/tools/jarsigner/warnings/NoTimestampTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/sun/security/tools/jarsigner/warnings/NotSignedByAliasTest.java --- a/jdk/test/sun/security/tools/jarsigner/warnings/NotSignedByAliasTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/sun/security/tools/jarsigner/warnings/NotSignedByAliasTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/sun/security/tools/jarsigner/warnings/NotYetValidCertTest.java --- a/jdk/test/sun/security/tools/jarsigner/warnings/NotYetValidCertTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/sun/security/tools/jarsigner/warnings/NotYetValidCertTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/sun/security/tools/keytool/ReadJar.java --- a/jdk/test/sun/security/tools/keytool/ReadJar.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/sun/security/tools/keytool/ReadJar.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/tools/jar/InputFilesTest.java --- a/jdk/test/tools/jar/InputFilesTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/tools/jar/InputFilesTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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") diff -r 957f1a2dc196 -r 098910995d15 jdk/test/tools/jar/ReleaseBeforeFiles.java --- a/jdk/test/tools/jar/ReleaseBeforeFiles.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/tools/jar/ReleaseBeforeFiles.java Fri Jun 02 14:46:29 2017 -0700 @@ -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; diff -r 957f1a2dc196 -r 098910995d15 jdk/test/tools/jar/compat/CLICompatibility.java --- a/jdk/test/tools/jar/compat/CLICompatibility.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/tools/jar/compat/CLICompatibility.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 */ diff -r 957f1a2dc196 -r 098910995d15 jdk/test/tools/jar/mmrjar/Basic.java --- a/jdk/test/tools/jar/mmrjar/Basic.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/tools/jar/mmrjar/Basic.java Fri Jun 02 14:46:29 2017 -0700 @@ -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") diff -r 957f1a2dc196 -r 098910995d15 jdk/test/tools/jar/modularJar/Basic.java --- a/jdk/test/tools/jar/modularJar/Basic.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/tools/jar/modularJar/Basic.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/tools/jar/multiRelease/ApiValidatorTest.java --- a/jdk/test/tools/jar/multiRelease/ApiValidatorTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/tools/jar/multiRelease/ApiValidatorTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 +} + diff -r 957f1a2dc196 -r 098910995d15 jdk/test/tools/jar/multiRelease/Basic.java --- a/jdk/test/tools/jar/multiRelease/Basic.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/tools/jar/multiRelease/Basic.java Fri Jun 02 14:46:29 2017 -0700 @@ -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; diff -r 957f1a2dc196 -r 098910995d15 jdk/test/tools/jar/multiRelease/RuntimeTest.java --- a/jdk/test/tools/jar/multiRelease/RuntimeTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/tools/jar/multiRelease/RuntimeTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 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); } diff -r 957f1a2dc196 -r 098910995d15 jdk/test/tools/jar/multiRelease/data/runtimetest/base/testpackage/Helper.java --- a/jdk/test/tools/jar/multiRelease/data/runtimetest/base/testpackage/Helper.java Sat May 27 12:52:18 2017 +0530 +++ /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; - } -} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/tools/jar/multiRelease/data/runtimetest/base/testpackage/Main.java --- a/jdk/test/tools/jar/multiRelease/data/runtimetest/base/testpackage/Main.java Sat May 27 12:52:18 2017 +0530 +++ /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); - } - } -} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/tools/jar/multiRelease/data/runtimetest/base/versionResource --- a/jdk/test/tools/jar/multiRelease/data/runtimetest/base/versionResource Sat May 27 12:52:18 2017 +0530 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -8 \ No newline at end of file diff -r 957f1a2dc196 -r 098910995d15 jdk/test/tools/jar/multiRelease/data/runtimetest/testpackage/Helper.java.template --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/tools/jar/multiRelease/data/runtimetest/testpackage/Helper.java.template Fri Jun 02 14:46:29 2017 -0700 @@ -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; + } +} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/tools/jar/multiRelease/data/runtimetest/testpackage/Main.java.template --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/tools/jar/multiRelease/data/runtimetest/testpackage/Main.java.template Fri Jun 02 14:46:29 2017 -0700 @@ -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); + } + } +} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/tools/jar/multiRelease/data/runtimetest/v10/testpackage/Helper.java --- a/jdk/test/tools/jar/multiRelease/data/runtimetest/v10/testpackage/Helper.java Sat May 27 12:52:18 2017 +0530 +++ /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; - } -} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/tools/jar/multiRelease/data/runtimetest/v10/testpackage/Main.java --- a/jdk/test/tools/jar/multiRelease/data/runtimetest/v10/testpackage/Main.java Sat May 27 12:52:18 2017 +0530 +++ /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); - } - } -} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/tools/jar/multiRelease/data/runtimetest/v10/versionResource --- a/jdk/test/tools/jar/multiRelease/data/runtimetest/v10/versionResource Sat May 27 12:52:18 2017 +0530 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -10 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/tools/jar/multiRelease/data/runtimetest/v9/testpackage/Helper.java --- a/jdk/test/tools/jar/multiRelease/data/runtimetest/v9/testpackage/Helper.java Sat May 27 12:52:18 2017 +0530 +++ /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; - } -} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/tools/jar/multiRelease/data/runtimetest/v9/testpackage/Main.java --- a/jdk/test/tools/jar/multiRelease/data/runtimetest/v9/testpackage/Main.java Sat May 27 12:52:18 2017 +0530 +++ /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); - } - } -} diff -r 957f1a2dc196 -r 098910995d15 jdk/test/tools/jar/multiRelease/data/runtimetest/v9/versionResource --- a/jdk/test/tools/jar/multiRelease/data/runtimetest/v9/versionResource Sat May 27 12:52:18 2017 +0530 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -9 diff -r 957f1a2dc196 -r 098910995d15 jdk/test/tools/jar/multiRelease/data/runtimetest/versionResource.template --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/tools/jar/multiRelease/data/runtimetest/versionResource.template Fri Jun 02 14:46:29 2017 -0700 @@ -0,0 +1,1 @@ +$version diff -r 957f1a2dc196 -r 098910995d15 jdk/test/tools/jlink/plugins/SystemModuleDescriptors/CompiledVersionTest.java --- a/jdk/test/tools/jlink/plugins/SystemModuleDescriptors/CompiledVersionTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/tools/jlink/plugins/SystemModuleDescriptors/CompiledVersionTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 */ diff -r 957f1a2dc196 -r 098910995d15 jdk/test/tools/jlink/plugins/SystemModuleDescriptors/UserModuleTest.java --- a/jdk/test/tools/jlink/plugins/SystemModuleDescriptors/UserModuleTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/tools/jlink/plugins/SystemModuleDescriptors/UserModuleTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 */ diff -r 957f1a2dc196 -r 098910995d15 jdk/test/tools/jmod/JmodNegativeTest.java --- a/jdk/test/tools/jmod/JmodNegativeTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/tools/jmod/JmodNegativeTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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; diff -r 957f1a2dc196 -r 098910995d15 jdk/test/tools/jmod/JmodTest.java --- a/jdk/test/tools/jmod/JmodTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/tools/jmod/JmodTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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; diff -r 957f1a2dc196 -r 098910995d15 jdk/test/tools/launcher/ArgsEnvVar.java --- a/jdk/test/tools/launcher/ArgsEnvVar.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/tools/launcher/ArgsEnvVar.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 @@ } } } - diff -r 957f1a2dc196 -r 098910995d15 jdk/test/tools/launcher/LauncherMessageTest.java --- a/jdk/test/tools/launcher/LauncherMessageTest.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/tools/launcher/LauncherMessageTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { diff -r 957f1a2dc196 -r 098910995d15 jdk/test/tools/launcher/modules/patch/systemmodules/PatchSystemModules.java --- a/jdk/test/tools/launcher/modules/patch/systemmodules/PatchSystemModules.java Sat May 27 12:52:18 2017 +0530 +++ b/jdk/test/tools/launcher/modules/patch/systemmodules/PatchSystemModules.java Fri Jun 02 14:46:29 2017 -0700 @@ -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; diff -r 957f1a2dc196 -r 098910995d15 langtools/.hgtags --- a/langtools/.hgtags Sat May 27 12:52:18 2017 +0530 +++ b/langtools/.hgtags Fri Jun 02 14:46:29 2017 -0700 @@ -422,3 +422,5 @@ 18355c879c69a33167f1862896738a7b9a4da729 jdk-9+170 85581ae8a97f20fd2f817a71eb3cd7b04e492722 jdk-10+7 6d9a33d72d0647f3981c9d9c636a6f1290689895 jdk-10+8 +a8e4d2286ebaf93c0f69fb4bbd399253f396db00 jdk-10+9 +aae59039c1f5701ae933c5eed30e75d6e3afaeee jdk-9+171 diff -r 957f1a2dc196 -r 098910995d15 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Gen.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Gen.java Sat May 27 12:52:18 2017 +0530 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Gen.java Fri Jun 02 14:46:29 2017 -0700 @@ -1894,7 +1894,7 @@ case NULLCHK: result = od.load(); code.emitop0(dup); - genNullCheck(tree.pos()); + genNullCheck(tree); break; default: Assert.error(); @@ -1903,12 +1903,13 @@ } /** Generate a null check from the object value at stack top. */ - private void genNullCheck(DiagnosticPosition pos) { + private void genNullCheck(JCTree tree) { + code.statBegin(tree.pos); if (allowBetterNullChecks) { - callMethod(pos, syms.objectsType, names.requireNonNull, + callMethod(tree.pos(), syms.objectsType, names.requireNonNull, List.of(syms.objectType), true); } else { - callMethod(pos, syms.objectType, names.getClass, + callMethod(tree.pos(), syms.objectType, names.getClass, List.nil(), false); } code.emitop0(pop); @@ -2087,7 +2088,7 @@ base.drop(); } else { base.load(); - genNullCheck(tree.selected.pos()); + genNullCheck(tree.selected); } result = items. makeImmediateItem(sym.type, ((VarSymbol) sym).getConstValue()); diff -r 957f1a2dc196 -r 098910995d15 langtools/test/tools/javac/linenumbers/NullCheckLineNumberTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/linenumbers/NullCheckLineNumberTest.java Fri Jun 02 14:46:29 2017 -0700 @@ -0,0 +1,87 @@ +/* + * @test /nodynamiccopyright/ + * @bug 8172880 + * @summary Wrong LineNumberTable for synthetic null checks + * @modules jdk.jdeps/com.sun.tools.classfile + */ + +import com.sun.tools.classfile.ClassFile; +import com.sun.tools.classfile.ConstantPoolException; +import com.sun.tools.classfile.Method; +import com.sun.tools.classfile.Attribute; +import com.sun.tools.classfile.Code_attribute; +import com.sun.tools.classfile.LineNumberTable_attribute; + +import java.io.IOException; +import java.util.AbstractMap.SimpleEntry; +import java.util.Arrays; +import java.util.List; +import java.util.Map.Entry; +import java.util.Objects; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class NullCheckLineNumberTest { + + //test data: + static class Test { + + public Test() { + String a = "", b = null; + + Stream.of("x") + .filter(a::equals) + .filter(b::equals) + .count(); + } + + } + + public static void main(String[] args) throws Exception { + List actualEntries = findEntries(); + List expectedEntries = List.of( + new SimpleEntry<>(29, 0), + new SimpleEntry<>(30, 4), + new SimpleEntry<>(32, 9), + new SimpleEntry<>(33, 16), + new SimpleEntry<>(34, 32), + new SimpleEntry<>(35, 46), + new SimpleEntry<>(36, 52) + ); + if (!Objects.equals(actualEntries, expectedEntries)) { + error(String.format("Unexpected LineNumberTable: %s", actualEntries.toString())); + } + + try { + new Test(); + } catch (NullPointerException npe) { + if (Arrays.stream(npe.getStackTrace()) + .noneMatch(se -> se.getFileName().contains("NullCheckLineNumberTest") && + se.getLineNumber() == 34)) { + throw new AssertionError("Should go through line 34!"); + } + } + } + + static List findEntries() throws IOException, ConstantPoolException { + ClassFile self = ClassFile.read(NullCheckLineNumberTest.Test.class.getResourceAsStream("NullCheckLineNumberTest$Test.class")); + for (Method m : self.methods) { + if ("".equals(m.getName(self.constant_pool))) { + Code_attribute code_attribute = (Code_attribute)m.attributes.get(Attribute.Code); + for (Attribute at : code_attribute.attributes) { + if (Attribute.LineNumberTable.equals(at.getName(self.constant_pool))) { + return Arrays.stream(((LineNumberTable_attribute)at).line_number_table) + .map(e -> new SimpleEntry<> (e.line_number, e.start_pc)) + .collect(Collectors.toList()); + } + } + } + } + return null; + } + + static void error(String msg) { + throw new AssertionError(msg); + } + +} diff -r 957f1a2dc196 -r 098910995d15 make/CompileJavaModules.gmk --- a/make/CompileJavaModules.gmk Sat May 27 12:52:18 2017 +0530 +++ b/make/CompileJavaModules.gmk Fri Jun 02 14:46:29 2017 -0700 @@ -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 diff -r 957f1a2dc196 -r 098910995d15 make/Docs.gmk --- a/make/Docs.gmk Sat May 27 12:52:18 2017 +0530 +++ b/make/Docs.gmk Fri Jun 02 14:46:29 2017 -0700 @@ -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™ Platform, Standard Edition Development Kit \ +JDK_INDEX_TITLE := Java™ Platform, Standard Edition Development Kit \ (JDK™) $(VERSION_SPECIFICATION) Specification
        $(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) diff -r 957f1a2dc196 -r 098910995d15 make/Help.gmk --- a/make/Help.gmk Sat May 27 12:52:18 2017 +0530 +++ b/make/Help.gmk Fri Jun 02 14:46:29 2017 -0700 @@ -56,6 +56,8 @@ $(info $(_) make test # Run tests, default is all tests (see TEST below)) $(info $(_) make run-test- # Run test, e.g. run-test-tier1) $(info $(_) make run-test TEST= # Run test(s) given by TEST specification) + $(info $(_) make exploded-run-test TEST= # 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) diff -r 957f1a2dc196 -r 098910995d15 make/Main.gmk --- a/make/Main.gmk Sat May 27 12:52:18 2017 +0530 +++ b/make/Main.gmk Fri Jun 02 14:46:29 2017 -0700 @@ -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)) diff -r 957f1a2dc196 -r 098910995d15 make/common/Modules.gmk --- a/make/common/Modules.gmk Sat May 27 12:52:18 2017 +0530 +++ b/make/common/Modules.gmk Fri Jun 02 14:46:29 2017 -0700 @@ -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 = \ diff -r 957f1a2dc196 -r 098910995d15 make/common/ProcessMarkdown.gmk --- a/make/common/ProcessMarkdown.gmk Sat May 27 12:52:18 2017 +0530 +++ b/make/common/ProcessMarkdown.gmk Fri Jun 02 14:46:29 2017 -0700 @@ -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 ; \ diff -r 957f1a2dc196 -r 098910995d15 make/common/SetupJavaCompilers.gmk --- a/make/common/SetupJavaCompilers.gmk Sat May 27 12:52:18 2017 +0530 +++ b/make/common/SetupJavaCompilers.gmk Fri Jun 02 14:46:29 2017 -0700 @@ -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))) diff -r 957f1a2dc196 -r 098910995d15 nashorn/.hgtags --- a/nashorn/.hgtags Sat May 27 12:52:18 2017 +0530 +++ b/nashorn/.hgtags Fri Jun 02 14:46:29 2017 -0700 @@ -413,3 +413,5 @@ 550bfc15779f8f339610793867fdc251125811b5 jdk-9+170 7e9cb37e6d6edbe56fdf4d510e5110f797823f09 jdk-10+7 edb825e2dfb140c8e57a61b5d45de19edebccccf jdk-10+8 +d7d69c89088aec56d13bbff81a6f0a8b68ca75f4 jdk-10+9 +fc416270a776409b74006262dd0a9f5f5ff31555 jdk-9+171 diff -r 957f1a2dc196 -r 098910995d15 test/lib/jdk/test/lib/InfiniteLoop.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/lib/jdk/test/lib/InfiniteLoop.java Fri Jun 02 14:46:29 2017 -0700 @@ -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); + } + } +} diff -r 957f1a2dc196 -r 098910995d15 test/lib/jdk/test/lib/RandomFactory.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/lib/jdk/test/lib/RandomFactory.java Fri Jun 02 14:46:29 2017 -0700 @@ -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()); + } +} diff -r 957f1a2dc196 -r 098910995d15 test/lib/jdk/test/lib/TimeLimitedRunner.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/lib/jdk/test/lib/TimeLimitedRunner.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 { + private final long stoptime; + private final long timeout; + private final double factor; + private final Callable 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 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; + } + +} diff -r 957f1a2dc196 -r 098910995d15 test/lib/jdk/test/lib/hprof/parser/HprofReader.java --- a/test/lib/jdk/test/lib/hprof/parser/HprofReader.java Sat May 27 12:52:18 2017 +0530 +++ b/test/lib/jdk/test/lib/hprof/parser/HprofReader.java Fri Jun 02 14:46:29 2017 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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,6 +35,7 @@ import java.io.*; import java.util.Date; import java.util.Hashtable; +import java.util.Map; import jdk.test.lib.hprof.model.ArrayTypeCodes; import jdk.test.lib.hprof.model.*; @@ -357,6 +358,22 @@ return snapshot; } + public String printStackTraces() { + StringBuffer output = new StringBuffer(); + for (Map.Entry entry : stackTraces.entrySet()) { + StackFrame[] frames = entry.getValue().getFrames(); + output.append("SerialNo " + entry.getKey() + "\n"); + for (int i = 0; i < frames.length; i++) { + output.append(" " + frames[i].getClassName() + "." + frames[i].getMethodName() + + frames[i].getMethodSignature() + " (" + frames[i].getSourceFileName() + + ":" + frames[i].getLineNumber() + ")" + "\n"); + } + } + + System.out.println(output); + return output.toString(); + } + private void skipBytes(long length) throws IOException { while (length > 0) { long skipped = in.skip(length); diff -r 957f1a2dc196 -r 098910995d15 test/lib/jdk/test/lib/hprof/parser/Reader.java --- a/test/lib/jdk/test/lib/hprof/parser/Reader.java Sat May 27 12:52:18 2017 +0530 +++ b/test/lib/jdk/test/lib/hprof/parser/Reader.java Fri Jun 02 14:46:29 2017 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 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 @@ -94,4 +94,42 @@ } } } + + /** + * Get Stack Traces from a Hprof file. + * + * @param heapFile The name of a file containing a heap dump + */ + public static String getStack(String heapFile, int debugLevel) + throws IOException { + int dumpNumber = 1; + int pos = heapFile.lastIndexOf('#'); + if (pos > -1) { + String num = heapFile.substring(pos+1, heapFile.length()); + try { + dumpNumber = Integer.parseInt(num, 10); + } catch (java.lang.NumberFormatException ex) { + String msg = "In file name \"" + heapFile + + "\", a dump number was " + + "expected after the :, but \"" + + num + "\" was found instead."; + System.err.println(msg); + throw new IOException(msg); + } + heapFile = heapFile.substring(0, pos); + } + try (PositionDataInputStream in = new PositionDataInputStream( + new BufferedInputStream(new FileInputStream(heapFile)))) { + int i = in.readInt(); + if (i == HprofReader.MAGIC_NUMBER) { + HprofReader r + = new HprofReader(heapFile, in, dumpNumber, + true, debugLevel); + r.read(); + return r.printStackTraces(); + } else { + throw new IOException("Unrecognized magic number: " + i); + } + } + } } diff -r 957f1a2dc196 -r 098910995d15 test/lib/jdk/test/lib/util/FileUtils.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/lib/jdk/test/lib/util/FileUtils.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 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 deleteFileTreeUnchecked(Path dir) { + final List 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; + } +} diff -r 957f1a2dc196 -r 098910995d15 test/lib/jdk/test/lib/util/JarUtils.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/lib/jdk/test/lib/util/JarUtils.java Fri Jun 02 14:46:29 2017 -0700 @@ -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 updatedFiles = new ArrayList<>(); + try (JarFile srcJarFile = new JarFile(src)) { + Enumeration 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(); + } + +} diff -r 957f1a2dc196 -r 098910995d15 test/lib/jdk/test/lib/wrappers/InfiniteLoop.java --- a/test/lib/jdk/test/lib/wrappers/InfiniteLoop.java Sat May 27 12:52:18 2017 +0530 +++ /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); - } - } -} diff -r 957f1a2dc196 -r 098910995d15 test/lib/jdk/test/lib/wrappers/TimeLimitedRunner.java --- a/test/lib/jdk/test/lib/wrappers/TimeLimitedRunner.java Sat May 27 12:52:18 2017 +0530 +++ /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 { - private final long stoptime; - private final long timeout; - private final double factor; - private final Callable 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 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; - } - -}