# HG changeset patch # User duke # Date 1499290368 -7200 # Node ID 3b471ff2785c1655de4585384b90e18f9bf359b2 # Parent b7453e31230515fb1b621e5ce9f8e8afc806f6d1# Parent 6cfa262c0b3d14b006fcb3830ec8472492554bd7 Merge diff -r b7453e312305 -r 3b471ff2785c .hgtags-top-repo --- a/.hgtags-top-repo Wed May 31 17:44:50 2017 +0000 +++ b/.hgtags-top-repo Wed Jul 05 23:32:48 2017 +0200 @@ -420,6 +420,7 @@ 03fe61bb7670644cf6e46b5cfafb6b27c0e0157e jdk-10+6 b25838a28195f4b6dab34668411eedd2d366a16c jdk-9+169 4d163ec59d989a9261ed7f848bc6303f90869af5 jdk-9+170 - aa3c97810d7c484c93a2fd75d3c76ff574deb6d8 jdk-10+7 df33ef1dc163f994177fd97d4d0e73a1e3cb5d85 jdk-10+8 +b94be69cbb1d2943b886bf2d458745756df146e4 jdk-10+9 +4c12464a907db4656c1033f56fa49cba643ac629 jdk-9+171 diff -r b7453e312305 -r 3b471ff2785c common/autoconf/spec.gmk.in --- a/common/autoconf/spec.gmk.in Wed May 31 17:44:50 2017 +0000 +++ b/common/autoconf/spec.gmk.in Wed Jul 05 23:32:48 2017 +0200 @@ -651,7 +651,7 @@ MV:=@MV@ NAWK:=@NAWK@ NICE:=@NICE@ -PANDOC:=@PANDOC@ +PANDOC:=@FIXPATH@ @PANDOC@ PATCH:=@PATCH@ PRINTF:=@PRINTF@ RM:=@RM@ diff -r b7453e312305 -r 3b471ff2785c common/doc/building.html --- a/common/doc/building.html Wed May 31 17:44:50 2017 +0000 +++ b/common/doc/building.html Wed Jul 05 23:32:48 2017 +0200 @@ -1,21 +1,23 @@ - - + + - - - + + + 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 b7453e312305 -r 3b471ff2785c common/doc/testing.html --- a/common/doc/testing.html Wed May 31 17:44:50 2017 +0000 +++ b/common/doc/testing.html Wed Jul 05 23:32:48 2017 +0200 @@ -1,19 +1,22 @@ - - + + - - - + + + 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 b7453e312305 -r 3b471ff2785c common/doc/testing.md --- a/common/doc/testing.md Wed May 31 17:44:50 2017 +0000 +++ b/common/doc/testing.md Wed Jul 05 23:32:48 2017 +0200 @@ -7,6 +7,11 @@ and more complex ad-hoc combination of tests is possible. The user interface is forgiving, and clearly report errors it cannot resolve. +The main target "run-test" uses the jdk-image as the tested product. There is +also an alternate target "exploded-run-test" that uses the exploded image +instead. Not all tests will run successfully on the exploded image, but using +this target can greatly improve rebuild times for certain workflows. + Some example command-lines: $ make run-test-tier1 @@ -15,6 +20,7 @@ $ make run-test-only TEST="gtest:LogTagSet gtest:LogTagSetDescriptions" GTEST="REPEAT=-1" $ make run-test TEST="hotspot/test:hotspot_gc" JTREG="JOBS=1;TIMEOUT=8;VM_OTIONS=-XshowSettings -Xlog:gc+ref=debug" $ make run-test TEST="jtreg:hotspot/test:hotspot_gc hotspot/test/native_sanity/JniVersion.java" + $ make exploded-run-test TEST=hotspot_tier1 ## Test selection diff -r b7453e312305 -r 3b471ff2785c hotspot/.hgtags --- a/hotspot/.hgtags Wed May 31 17:44:50 2017 +0000 +++ b/hotspot/.hgtags Wed Jul 05 23:32:48 2017 +0200 @@ -582,3 +582,5 @@ 38a240fd58a287acb1963920b92ed4d9c2fd39e3 jdk-9+170 9d4746eca95aec3e5a344bf2520745dcc1d17eed jdk-10+7 f5ded0cf954c770deeecb80f2ba1ba6a05cd979b jdk-10+8 +233647e3d3800e76d7612014b745b37a88098f63 jdk-10+9 +d53171650a2cc6c6f699c966c533b914ca9c0602 jdk-9+171 diff -r b7453e312305 -r 3b471ff2785c hotspot/.mx.jvmci/mx_jvmci.py --- a/hotspot/.mx.jvmci/mx_jvmci.py Wed May 31 17:44:50 2017 +0000 +++ b/hotspot/.mx.jvmci/mx_jvmci.py Wed Jul 05 23:32:48 2017 +0200 @@ -303,9 +303,9 @@ out.close('link') out.open('link') - out.element('name', data='generated') + out.element('name', data='gensrc') out.element('type', data='2') - generated = join(_get_hotspot_build_dir(jvmVariant, debugLevel), 'generated') + generated = join(_get_hotspot_build_dir(jvmVariant, debugLevel), 'gensrc') out.element('locationURI', data=mx.get_eclipse_project_rel_locationURI(generated, eclProjectDir)) out.close('link') @@ -620,18 +620,12 @@ def _get_hotspot_build_dir(jvmVariant=None, debugLevel=None): """ Gets the directory in which a particular HotSpot configuration is built - (e.g., /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 b7453e312305 -r 3b471ff2785c hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp --- a/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp Wed May 31 17:44:50 2017 +0000 +++ b/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp Wed Jul 05 23:32:48 2017 +0200 @@ -4134,28 +4134,33 @@ if ((dst_enc < 16) && (nds_enc < 16)) { vandps(dst, nds, negate_field, vector_len); } else if ((src_enc < 16) && (dst_enc < 16)) { - movss(src, nds); + evmovdqul(src, nds, Assembler::AVX_512bit); vandps(dst, src, negate_field, vector_len); } else if (src_enc < 16) { - movss(src, nds); + evmovdqul(src, nds, Assembler::AVX_512bit); vandps(src, src, negate_field, vector_len); - movss(dst, src); + evmovdqul(dst, src, Assembler::AVX_512bit); } else if (dst_enc < 16) { - movdqu(src, xmm0); - movss(xmm0, nds); + evmovdqul(src, xmm0, Assembler::AVX_512bit); + evmovdqul(xmm0, nds, Assembler::AVX_512bit); vandps(dst, xmm0, negate_field, vector_len); - movdqu(xmm0, src); - } else if (nds_enc < 16) { - movdqu(src, xmm0); - vandps(xmm0, nds, negate_field, vector_len); - movss(dst, xmm0); - movdqu(xmm0, src); - } else { - movdqu(src, xmm0); - movss(xmm0, nds); - vandps(xmm0, xmm0, negate_field, vector_len); - movss(dst, xmm0); - movdqu(xmm0, src); + evmovdqul(xmm0, src, Assembler::AVX_512bit); + } else { + if (src_enc != dst_enc) { + evmovdqul(src, xmm0, Assembler::AVX_512bit); + evmovdqul(xmm0, nds, Assembler::AVX_512bit); + vandps(xmm0, xmm0, negate_field, vector_len); + evmovdqul(dst, xmm0, Assembler::AVX_512bit); + evmovdqul(xmm0, src, Assembler::AVX_512bit); + } else { + subptr(rsp, 64); + evmovdqul(Address(rsp, 0), xmm0, Assembler::AVX_512bit); + evmovdqul(xmm0, nds, Assembler::AVX_512bit); + vandps(xmm0, xmm0, negate_field, vector_len); + evmovdqul(dst, xmm0, Assembler::AVX_512bit); + evmovdqul(xmm0, Address(rsp, 0), Assembler::AVX_512bit); + addptr(rsp, 64); + } } } @@ -4166,28 +4171,33 @@ if ((dst_enc < 16) && (nds_enc < 16)) { vandpd(dst, nds, negate_field, vector_len); } else if ((src_enc < 16) && (dst_enc < 16)) { - movsd(src, nds); + evmovdqul(src, nds, Assembler::AVX_512bit); vandpd(dst, src, negate_field, vector_len); } else if (src_enc < 16) { - movsd(src, nds); + evmovdqul(src, nds, Assembler::AVX_512bit); vandpd(src, src, negate_field, vector_len); - movsd(dst, src); + evmovdqul(dst, src, Assembler::AVX_512bit); } else if (dst_enc < 16) { - movdqu(src, xmm0); - movsd(xmm0, nds); + evmovdqul(src, xmm0, Assembler::AVX_512bit); + evmovdqul(xmm0, nds, Assembler::AVX_512bit); vandpd(dst, xmm0, negate_field, vector_len); - movdqu(xmm0, src); - } else if (nds_enc < 16) { - movdqu(src, xmm0); - vandpd(xmm0, nds, negate_field, vector_len); - movsd(dst, xmm0); - movdqu(xmm0, src); - } else { - movdqu(src, xmm0); - movsd(xmm0, nds); - vandpd(xmm0, xmm0, negate_field, vector_len); - movsd(dst, xmm0); - movdqu(xmm0, src); + evmovdqul(xmm0, src, Assembler::AVX_512bit); + } else { + if (src_enc != dst_enc) { + evmovdqul(src, xmm0, Assembler::AVX_512bit); + evmovdqul(xmm0, nds, Assembler::AVX_512bit); + vandpd(xmm0, xmm0, negate_field, vector_len); + evmovdqul(dst, xmm0, Assembler::AVX_512bit); + evmovdqul(xmm0, src, Assembler::AVX_512bit); + } else { + subptr(rsp, 64); + evmovdqul(Address(rsp, 0), xmm0, Assembler::AVX_512bit); + evmovdqul(xmm0, nds, Assembler::AVX_512bit); + vandpd(xmm0, xmm0, negate_field, vector_len); + evmovdqul(dst, xmm0, Assembler::AVX_512bit); + evmovdqul(xmm0, Address(rsp, 0), Assembler::AVX_512bit); + addptr(rsp, 64); + } } } @@ -4934,6 +4944,24 @@ } } +void MacroAssembler::pshufd(XMMRegister dst, Address src, int mode) { + if (VM_Version::supports_avx512vl()) { + Assembler::pshufd(dst, src, mode); + } else { + int dst_enc = dst->encoding(); + if (dst_enc < 16) { + Assembler::pshufd(dst, src, mode); + } else { + subptr(rsp, 64); + evmovdqul(Address(rsp, 0), xmm0, Assembler::AVX_512bit); + Assembler::pshufd(xmm0, src, mode); + evmovdqul(dst, xmm0, Assembler::AVX_512bit); + evmovdqul(xmm0, Address(rsp, 0), Assembler::AVX_512bit); + addptr(rsp, 64); + } + } +} + // This instruction exists within macros, ergo we cannot control its input // when emitted through those patterns. void MacroAssembler::pshuflw(XMMRegister dst, XMMRegister src, int mode) { diff -r b7453e312305 -r 3b471ff2785c hotspot/src/cpu/x86/vm/macroAssembler_x86.hpp --- a/hotspot/src/cpu/x86/vm/macroAssembler_x86.hpp Wed May 31 17:44:50 2017 +0000 +++ b/hotspot/src/cpu/x86/vm/macroAssembler_x86.hpp Wed Jul 05 23:32:48 2017 +0200 @@ -1232,6 +1232,9 @@ void punpcklbw(XMMRegister dst, XMMRegister src); void punpcklbw(XMMRegister dst, Address src) { Assembler::punpcklbw(dst, src); } + void pshufd(XMMRegister dst, Address src, int mode); + void pshufd(XMMRegister dst, XMMRegister src, int mode) { Assembler::pshufd(dst, src, mode); } + void pshuflw(XMMRegister dst, XMMRegister src, int mode); void pshuflw(XMMRegister dst, Address src, int mode) { Assembler::pshuflw(dst, src, mode); } diff -r b7453e312305 -r 3b471ff2785c hotspot/src/jdk.hotspot.agent/share/classes/module-info.java --- a/hotspot/src/jdk.hotspot.agent/share/classes/module-info.java Wed May 31 17:44:50 2017 +0000 +++ b/hotspot/src/jdk.hotspot.agent/share/classes/module-info.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,6 +23,12 @@ * questions. */ +/** + * Defines the implementation of the HotSpot Serviceability Agent. + * + * @moduleGraph + * @since 9 + */ module jdk.hotspot.agent { requires java.datatransfer; requires java.desktop; diff -r b7453e312305 -r 3b471ff2785c hotspot/src/share/vm/oops/constMethod.cpp --- a/hotspot/src/share/vm/oops/constMethod.cpp Wed May 31 17:44:50 2017 +0000 +++ b/hotspot/src/share/vm/oops/constMethod.cpp Wed Jul 05 23:32:48 2017 +0200 @@ -407,8 +407,12 @@ ResourceMark rm; assert(is_constMethod(), "must be constMethod"); st->print_cr("%s", internal_name()); - st->print(" - method: " INTPTR_FORMAT " ", p2i((address)method())); - method()->print_value_on(st); st->cr(); + Method* m = method(); + st->print(" - method: " INTPTR_FORMAT " ", p2i((address)m)); + if (m != NULL) { + m->print_value_on(st); + } + st->cr(); if (has_stackmap_table()) { st->print(" - stackmap data: "); stackmap_data()->print_value_on(st); @@ -421,7 +425,12 @@ void ConstMethod::print_value_on(outputStream* st) const { assert(is_constMethod(), "must be constMethod"); st->print(" const part of method " ); - method()->print_value_on(st); + Method* m = method(); + if (m != NULL) { + m->print_value_on(st); + } else { + st->print("NULL"); + } } #if INCLUDE_SERVICES @@ -461,7 +470,7 @@ // Verification can occur during oop construction before the method or // other fields have been initialized. - guarantee(method()->is_method(), "should be method"); + guarantee(method() != NULL && method()->is_method(), "should be method"); address m_end = (address)((intptr_t) this + size()); address compressed_table_start = code_end(); diff -r b7453e312305 -r 3b471ff2785c hotspot/src/share/vm/opto/matcher.cpp --- a/hotspot/src/share/vm/opto/matcher.cpp Wed May 31 17:44:50 2017 +0000 +++ b/hotspot/src/share/vm/opto/matcher.cpp Wed Jul 05 23:32:48 2017 +0200 @@ -1000,7 +1000,7 @@ if (C->failing()) return NULL; if (m == NULL) { Matcher::soft_match_failure(); return NULL; } } else { // Nothing the matcher cares about - if( n->is_Proj() && n->in(0)->is_Multi()) { // Projections? + if (n->is_Proj() && n->in(0) != NULL && n->in(0)->is_Multi()) { // Projections? // Convert to machine-dependent projection m = n->in(0)->as_Multi()->match( n->as_Proj(), this ); #ifdef ASSERT @@ -1645,6 +1645,7 @@ // Build the object to represent this state & prepare for recursive calls MachNode *mach = s->MachNodeGenerator(rule); + guarantee(mach != NULL, "Missing MachNode"); mach->_opnds[0] = s->MachOperGenerator(_reduceOp[rule]); assert( mach->_opnds[0] != NULL, "Missing result operand" ); Node *leaf = s->_leaf; diff -r b7453e312305 -r 3b471ff2785c hotspot/src/share/vm/opto/memnode.cpp --- a/hotspot/src/share/vm/opto/memnode.cpp Wed May 31 17:44:50 2017 +0000 +++ b/hotspot/src/share/vm/opto/memnode.cpp Wed Jul 05 23:32:48 2017 +0200 @@ -1123,6 +1123,9 @@ // Use _idx of address base (could be Phi node) for boxed values. intptr_t ignore = 0; Node* base = AddPNode::Ideal_base_and_offset(in(Address), phase, ignore); + if (base == NULL) { + return this; + } this_iid = base->_idx; } const Type* this_type = bottom_type(); @@ -3947,9 +3950,10 @@ // if it is the last unused 4 bytes of an instance, forget about it intptr_t size_limit = phase->find_intptr_t_con(size_in_bytes, max_jint); if (zeroes_done + BytesPerLong >= size_limit) { - assert(allocation() != NULL, ""); - if (allocation()->Opcode() == Op_Allocate) { - Node* klass_node = allocation()->in(AllocateNode::KlassNode); + AllocateNode* alloc = allocation(); + assert(alloc != NULL, "must be present"); + if (alloc != NULL && alloc->Opcode() == Op_Allocate) { + Node* klass_node = alloc->in(AllocateNode::KlassNode); ciKlass* k = phase->type(klass_node)->is_klassptr()->klass(); if (zeroes_done == k->layout_helper()) zeroes_done = size_limit; diff -r b7453e312305 -r 3b471ff2785c hotspot/test/ProblemList.txt --- a/hotspot/test/ProblemList.txt Wed May 31 17:44:50 2017 +0000 +++ b/hotspot/test/ProblemList.txt Wed Jul 05 23:32:48 2017 +0200 @@ -64,14 +64,14 @@ runtime/CompressedOops/UseCompressedOops.java 8079353 generic-all # This test is disabled since it will stress NMT and timeout during normal testing runtime/NMT/MallocStressTest.java 8166548 generic-all -runtime/SharedArchiveFile/BootAppendTests.java 8150683 generic-all +runtime/SharedArchiveFile/BootAppendTests.java 8179103 generic-all runtime/SharedArchiveFile/DefaultUseWithClient.java 8154204 generic-all ############################################################################# # :hotspot_serviceability -serviceability/jdwp/AllModulesCommandTest.java 8168478 generic-all +serviceability/jdwp/AllModulesCommandTest.java 8170541 generic-all serviceability/sa/sadebugd/SADebugDTest.java 8163805 generic-all serviceability/jvmti/ModuleAwareAgents/ClassFileLoadHook/MAAClassFileLoadHook.java 8173936 generic-all diff -r b7453e312305 -r 3b471ff2785c hotspot/test/compiler/codecache/stress/CodeCacheStressRunner.java --- a/hotspot/test/compiler/codecache/stress/CodeCacheStressRunner.java Wed May 31 17:44:50 2017 +0000 +++ b/hotspot/test/compiler/codecache/stress/CodeCacheStressRunner.java Wed Jul 05 23:32:48 2017 +0200 @@ -23,7 +23,7 @@ package compiler.codecache.stress; -import jdk.test.lib.wrappers.TimeLimitedRunner; +import jdk.test.lib.TimeLimitedRunner; import jdk.test.lib.Utils; public class CodeCacheStressRunner { diff -r b7453e312305 -r 3b471ff2785c hotspot/test/compiler/codecache/stress/Helper.java --- a/hotspot/test/compiler/codecache/stress/Helper.java Wed May 31 17:44:50 2017 +0000 +++ b/hotspot/test/compiler/codecache/stress/Helper.java Wed Jul 05 23:32:48 2017 +0200 @@ -25,7 +25,7 @@ import jdk.test.lib.Asserts; import jdk.test.lib.ByteCodeLoader; -import jdk.test.lib.wrappers.InfiniteLoop; +import jdk.test.lib.InfiniteLoop; import jdk.test.lib.Utils; import sun.hotspot.WhiteBox; diff -r b7453e312305 -r 3b471ff2785c hotspot/test/compiler/compilercontrol/jcmd/StressAddJcmdBase.java --- a/hotspot/test/compiler/compilercontrol/jcmd/StressAddJcmdBase.java Wed May 31 17:44:50 2017 +0000 +++ b/hotspot/test/compiler/compilercontrol/jcmd/StressAddJcmdBase.java Wed Jul 05 23:32:48 2017 +0200 @@ -29,7 +29,7 @@ import compiler.compilercontrol.share.pool.PoolHelper; import compiler.compilercontrol.share.scenario.Executor; import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.wrappers.TimeLimitedRunner; +import jdk.test.lib.TimeLimitedRunner; import jdk.test.lib.Utils; import java.util.ArrayList; diff -r b7453e312305 -r 3b471ff2785c hotspot/test/compiler/whitebox/AllocationCodeBlobTest.java --- a/hotspot/test/compiler/whitebox/AllocationCodeBlobTest.java Wed May 31 17:44:50 2017 +0000 +++ b/hotspot/test/compiler/whitebox/AllocationCodeBlobTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -44,7 +44,7 @@ package compiler.whitebox; import jdk.test.lib.Asserts; -import jdk.test.lib.wrappers.InfiniteLoop; +import jdk.test.lib.InfiniteLoop; import sun.hotspot.WhiteBox; import sun.hotspot.code.BlobType; diff -r b7453e312305 -r 3b471ff2785c hotspot/test/serviceability/jdwp/AllModulesCommandTest.java --- a/hotspot/test/serviceability/jdwp/AllModulesCommandTest.java Wed May 31 17:44:50 2017 +0000 +++ b/hotspot/test/serviceability/jdwp/AllModulesCommandTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -32,7 +32,6 @@ * @test * @summary Tests the modules-related JDWP commands * @library /test/lib - * @ignore 8170541 * @modules jdk.jdwp.agent * @modules java.base/jdk.internal.misc * @compile AllModulesCommandTestDebuggee.java diff -r b7453e312305 -r 3b471ff2785c jdk/.hgtags --- a/jdk/.hgtags Wed May 31 17:44:50 2017 +0000 +++ b/jdk/.hgtags Wed Jul 05 23:32:48 2017 +0200 @@ -422,3 +422,5 @@ ef9954f6896bb0b95ac62bf769f68b59a7a56ccd jdk-9+170 cbd65760a005766610583949b3b5c9ace92e74b3 jdk-10+7 f0adc10ed8316e6cf316e3208c5ecf6835d22bc4 jdk-10+8 +b9409a7daa6c793dd631e52fe6ef79d08a3b337a jdk-10+9 +29bbedd4cce8e14742bdb22118c057b877c02f0f jdk-9+171 diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +body { + margin: 2em 2em; + font-family: DejaVu Sans, Bitstream Vera Sans, Luxi Sans, Verdana, Arial, Helvetica; + font-size: 10pt; + line-height: 1.4; +} + +pre, code, tt { + font-family: DejaVu Sans Mono, Bitstream Vera Sans Mono, Luxi Mono, + Courier New, monospace; +} + +blockquote { + margin: 1.5ex 0em 1.5ex 2em; +} + +p { + padding: 0pt; + margin: 1ex 0em; +} + +p:first-child, pre:first-child { margin-top: 0pt; } + +h1 { + font-weight: bold; + padding: 0pt; + margin: 2ex .5ex 1ex 0pt; +} + +h1:first-child, h2:first-child { + margin-top: 0ex; +} + +h2 { + font-weight: bold; + padding: 0pt; + margin: 2ex 0pt 1ex 0pt; +} + +h3 { + font-weight: bold; + padding: 0pt; + margin: 1.5ex 0pt 1ex 0pt; +} + +h4 { + font-weight: bold; + padding: 0pt; + margin: 1.5ex 0pt 1ex 0pt; +} + +a:link { + color: #437291; +} + +a:visited { + color: #666666; +} + +a[href]:hover { + color: #e76f00; +} + +a img { + border-width: 0px; +} + +img { + background: white; +} + +table { + border-collapse: collapse; + margin-left: 15px; + margin-right: 15px; +} + +th, td { + padding: 3px; + vertical-align: top; +} + +table, th, td { + border: 1px solid black; +} + +caption { + text-align: left; + font-style: italic; + text-indent: 15px; + margin-bottom:10px; +} + +tr:nth-child(even), tr:nth-child(even) th[scope=row] { + background: #DDD; +} + +tr:nth-child(odd), tr:nth-child(odd) th[scope=row] { + background: #FFF; +} + +th { + background: #DDF; +} diff -r b7453e312305 -r 3b471ff2785c jdk/make/data/docs-resources/specs/resources/jdk-default.css --- a/jdk/make/data/docs-resources/specs/resources/jdk-default.css Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,129 +0,0 @@ -/* - * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -body { - margin: 2em 2em; - font-family: DejaVu Sans, Bitstream Vera Sans, Luxi Sans, Verdana, Arial, Helvetica; - font-size: 10pt; - line-height: 1.4; -} - -pre, code, tt { - font-family: DejaVu Sans Mono, Bitstream Vera Sans Mono, Luxi Mono, - Courier New, monospace; -} - -blockquote { - margin: 1.5ex 0em 1.5ex 2em; -} - -p { - padding: 0pt; - margin: 1ex 0em; -} - -p:first-child, pre:first-child { margin-top: 0pt; } - -h1 { - font-weight: bold; - padding: 0pt; - margin: 2ex .5ex 1ex 0pt; -} - -h1:first-child, h2:first-child { - margin-top: 0ex; -} - -h2 { - font-weight: bold; - padding: 0pt; - margin: 2ex 0pt 1ex 0pt; -} - -h3 { - font-weight: bold; - padding: 0pt; - margin: 1.5ex 0pt 1ex 0pt; -} - -h4 { - font-weight: bold; - padding: 0pt; - margin: 1.5ex 0pt 1ex 0pt; -} - -a:link { - color: #437291; -} - -a:visited { - color: #666666; -} - -a[href]:hover { - color: #e76f00; -} - -a img { - border-width: 0px; -} - -img { - background: white; -} - -table { - border-collapse: collapse; - margin-left: 15px; - margin-right: 15px; -} - -th, td { - padding: 3px; - vertical-align: top; -} - -table, th, td { - border: 1px solid black; -} - -caption { - text-align: left; - font-style: italic; - text-indent: 15px; - margin-bottom:10px; -} - -tr:nth-child(even) { - background: #DDD; -} - -tr:nth-child(odd) { - background: #FFF; -} - -th { - background: #DDF; -} diff -r b7453e312305 -r 3b471ff2785c jdk/make/src/classes/build/tools/docs/GenDocsBundlePage.java --- a/jdk/make/src/classes/build/tools/docs/GenDocsBundlePage.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/make/src/classes/build/tools/docs/GenDocsBundlePage.java Wed Jul 05 23:32:48 2017 +0200 @@ -31,18 +31,23 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; +import java.lang.module.ModuleDescriptor; import java.lang.module.ModuleFinder; +import java.lang.module.ModuleReference; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.Arrays; +import java.util.Comparator; import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.Properties; import java.util.Set; -import java.util.stream.Collectors; +import java.util.function.Predicate; import java.util.stream.Stream; +import static java.util.stream.Collectors.*; /** * Build tool to generate the docs bundle index page. @@ -104,59 +109,33 @@ } private static final String HEADER_TITLE = "@HEADER_TITLE@"; + + final Path outputfile; final String title; - final Map 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("\n") - .append(mods.stream() - .filter(mn -> mn.startsWith("jdk.")) - .sorted() - .map(GenDocsBundlePage::toHRef) - .collect(Collectors.joining("\n"))); - sb.append("\n"); - 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 b7453e312305 -r 3b471ff2785c jdk/make/src/classes/build/tools/docs/docs-bundle-page.html --- a/jdk/make/src/classes/build/tools/docs/docs-bundle-page.html Wed May 31 17:44:50 2017 +0000 +++ b/jdk/make/src/classes/build/tools/docs/docs-bundle-page.html Wed Jul 05 23:32:48 2017 +0200 @@ -26,121 +26,146 @@ - - -@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 b7453e312305 -r 3b471ff2785c jdk/make/src/classes/build/tools/docs/docs-module-groups.properties --- a/jdk/make/src/classes/build/tools/docs/docs-module-groups.properties Wed May 31 17:44:50 2017 +0000 +++ b/jdk/make/src/classes/build/tools/docs/docs-module-groups.properties Wed Jul 05 23:32:48 2017 +0200 @@ -1,13 +1,8 @@ # Module Grouping for the docs bundle page # -core_modules=\ -java.base \ -jdk.charsets \ -jdk.localedata \ -jdk.net \ -jdk.sctp \ -jdk.zipfs +java_base=\ +java.base java_ee_modules=\ java.activation \ @@ -17,6 +12,10 @@ java.xml.ws \ java.xml.ws.annotation +aggregator_modules=\ +java.se \ +java.se.ee + security_modules=\ java.security.jgss \ java.security.sasl \ @@ -26,18 +25,22 @@ jdk.crypto.cryptoki \ jdk.crypto.ec \ jdk.crypto.mscapi \ -jdk.crypto.ucrypto +jdk.crypto.ucrypto \ +jdk.policytool -instrument_mgmt_modules=\ -java.instrument \ +instrument_modules=\ +java.instrument + +management_modules=\ java.management \ java.management.rmi \ -jdk.jfr \ jdk.management \ jdk.management.agent \ jdk.management.cmm \ jdk.management.jfr \ jdk.management.resource \ +jdk.snmp \ +jdk.jconsole integration_modules=\ java.logging \ @@ -47,11 +50,18 @@ java.sql \ java.sql.rowset \ java.xml \ +jdk.charsets \ +jdk.localedata \ +jdk.net \ +jdk.sctp \ +jdk.jsobject \ jdk.httpserver \ jdk.naming.dns \ -jdk.naming.rmi +jdk.naming.rmi \ +jdk.xml.dom \ +jdk.zipfs -ui_toolkits_modules=\ +ui_modules=\ java.datatransfer \ java.desktop \ javafx.base \ @@ -63,39 +73,40 @@ javafx.web \ jdk.accessibility -other_modules=\ -java.jnlp \ -java.smartcardio \ -jdk.jsobject \ -jdk.xml.dom - -debug_modules=\ -jdk.jdi \ -jdk.jdwp.agent - -tool_modules=\ +svc_modules=\ +jdk.jfr \ jdk.attach \ -jdk.editpad \ +jdk.jcmd \ +jdk.jdi \ +jdk.jdwp.agent \ +jdk.jstatd \ +jdk.hotspot.agent + +packaging_modules=\ jdk.jartool \ +jdk.jlink \ +jdk.pack \ +jdk.packager.services + +compiler_modules=\ +java.compiler \ +jdk.compiler \ jdk.javadoc \ -jdk.jcmd \ -jdk.jconsole \ jdk.jdeps \ -jdk.jlink \ +jdk.editpad \ jdk.jshell \ -jdk.jstatd \ -jdk.pack \ -jdk.policytool \ -jdk.packager.services \ jdk.rmic -compiler_scripting_modules=\ -java.compiler \ +scripting_modules=\ java.scripting \ -jdk.compiler \ jdk.dynalink \ jdk.scripting.nashorn \ jdk.scripting.nashorn.shell +other_modules=\ +java.jnlp \ +java.smartcardio + incubator_modules=\ jdk.incubator.httpclient + diff -r b7453e312305 -r 3b471ff2785c jdk/make/src/classes/build/tools/taglet/ExtLink.java --- a/jdk/make/src/classes/build/tools/taglet/ExtLink.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/make/src/classes/build/tools/taglet/ExtLink.java Wed Jul 05 23:32:48 2017 +0200 @@ -56,7 +56,7 @@ static final String TAG_NAME = "extLink"; - static final String URL = "https://www.oracle.com/pls/topic/lookup?ctx=javase9&id="; + static final String URL = "https://www.oracle.com/pls/topic/lookup?ctx=javase9&id="; static final Pattern TAG_PATTERN = Pattern.compile("(\\s*)(?\\w+)(\\s+)(?.*)"); diff -r b7453e312305 -r 3b471ff2785c jdk/src/java.base/aix/native/libnet/aix_close.c --- a/jdk/src/java.base/aix/native/libnet/aix_close.c Wed May 31 17:44:50 2017 +0000 +++ b/jdk/src/java.base/aix/native/libnet/aix_close.c Wed Jul 05 23:32:48 2017 +0200 @@ -421,10 +421,8 @@ } int NET_RecvFrom(int s, void *buf, int len, unsigned int flags, - struct sockaddr *from, int *fromlen) { - socklen_t socklen = *fromlen; - BLOCKING_IO_RETURN_INT( s, recvfrom(s, buf, len, flags, from, &socklen) ); - *fromlen = socklen; + struct sockaddr *from, socklen_t *fromlen) { + BLOCKING_IO_RETURN_INT( s, recvfrom(s, buf, len, flags, from, fromlen) ); } int NET_Send(int s, void *msg, int len, unsigned int flags) { @@ -440,10 +438,8 @@ BLOCKING_IO_RETURN_INT( s, sendto(s, msg, len, flags, to, tolen) ); } -int NET_Accept(int s, struct sockaddr *addr, int *addrlen) { - socklen_t socklen = *addrlen; - BLOCKING_IO_RETURN_INT( s, accept(s, addr, &socklen) ); - *addrlen = socklen; +int NET_Accept(int s, struct sockaddr *addr, socklen_t *addrlen) { + BLOCKING_IO_RETURN_INT( s, accept(s, addr, addrlen) ); } int NET_Connect(int s, struct sockaddr *addr, int addrlen) { diff -r b7453e312305 -r 3b471ff2785c jdk/src/java.base/share/classes/java/io/File.java --- a/jdk/src/java.base/share/classes/java/io/File.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/src/java.base/share/classes/java/io/File.java Wed Jul 05 23:32:48 2017 +0200 @@ -923,6 +923,12 @@ * java.nio.file.Files#readAttributes(Path,Class,LinkOption[]) * Files.readAttributes} method may be used. * + * @apiNote + * While the unit of time of the return value is milliseconds, + * the granularity of the value depends on the underlying + * file system and may be larger. For example, some + * file systems use time stamps in units of seconds. + * * @return A 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 b7453e312305 -r 3b471ff2785c jdk/src/java.base/share/classes/javax/crypto/Cipher.java --- a/jdk/src/java.base/share/classes/javax/crypto/Cipher.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/src/java.base/share/classes/javax/crypto/Cipher.java Wed Jul 05 23:32:48 2017 +0200 @@ -137,6 +137,7 @@ *
      5. {@code AES/CBC/PKCS5Padding} (128)
      6. *
      7. {@code AES/ECB/NoPadding} (128)
      8. *
      9. {@code AES/ECB/PKCS5Padding} (128)
      10. + *
      11. {@code AES/GCM/NoPadding} (128)
      12. *
      13. {@code DES/CBC/NoPadding} (56)
      14. *
      15. {@code DES/CBC/PKCS5Padding} (56)
      16. *
      17. {@code DES/ECB/NoPadding} (56)
      18. diff -r b7453e312305 -r 3b471ff2785c jdk/src/java.base/share/classes/sun/launcher/LauncherHelper.java --- a/jdk/src/java.base/share/classes/sun/launcher/LauncherHelper.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/src/java.base/share/classes/sun/launcher/LauncherHelper.java Wed Jul 05 23:32:48 2017 +0200 @@ -363,10 +363,6 @@ static void initHelpMessage(String progname) { outBuf = outBuf.append(getLocalizedMessage("java.launcher.opt.header", (progname == null) ? "java" : progname )); - outBuf = outBuf.append(getLocalizedMessage("java.launcher.opt.datamodel", - 32)); - outBuf = outBuf.append(getLocalizedMessage("java.launcher.opt.datamodel", - 64)); } /** diff -r b7453e312305 -r 3b471ff2785c jdk/src/java.base/share/classes/sun/launcher/resources/launcher.properties --- a/jdk/src/java.base/share/classes/sun/launcher/resources/launcher.properties Wed May 31 17:44:50 2017 +0000 +++ b/jdk/src/java.base/share/classes/sun/launcher/resources/launcher.properties Wed Jul 05 23:32:48 2017 +0200 @@ -34,7 +34,6 @@ \ / 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 b7453e312305 -r 3b471ff2785c jdk/src/java.base/share/native/libjli/args.c --- a/jdk/src/java.base/share/native/libjli/args.c Wed May 31 17:44:50 2017 +0000 +++ b/jdk/src/java.base/share/native/libjli/args.c Wed Jul 05 23:32:48 2017 +0200 @@ -456,6 +456,11 @@ env++; } + // Trailing space + if (*env == '\0') { + break; + } + arg = p; while (*env != '\0' && !isspace(*env)) { if (*env == '"' || *env == '\'') { diff -r b7453e312305 -r 3b471ff2785c jdk/src/java.base/share/native/libjli/emessages.h --- a/jdk/src/java.base/share/native/libjli/emessages.h Wed May 31 17:44:50 2017 +0000 +++ b/jdk/src/java.base/share/native/libjli/emessages.h Wed Jul 05 23:32:48 2017 +0200 @@ -36,7 +36,7 @@ #define JNI_ERROR "Error: A JNI error has occurred, please check your installation and try again" #define JNI_ERROR1 "Error: can't find JNI interfaces in: %s" -#define ARG_INFO_ENVVAR "NOTE: Picked up the following options via %s:\n %s" +#define ARG_INFO_ENVVAR "NOTE: Picked up %s: %s" #define ARG_WARN "Warning: %s option is no longer supported." #define ARG_ERROR1 "Error: %s requires class path specification" diff -r b7453e312305 -r 3b471ff2785c jdk/src/java.base/unix/native/libjava/UnixFileSystem_md.c --- a/jdk/src/java.base/unix/native/libjava/UnixFileSystem_md.c Wed May 31 17:44:50 2017 +0000 +++ b/jdk/src/java.base/unix/native/libjava/UnixFileSystem_md.c Wed Jul 05 23:32:48 2017 +0200 @@ -229,12 +229,15 @@ WITH_FIELD_PLATFORM_STRING(env, file, ids.path, path) { struct stat64 sb; if (stat64(path, &sb) == 0) { -#ifndef MACOSX +#if defined(_AIX) + rv = (jlong)sb.st_mtime * 1000; + rv += (jlong)sb.st_mtime_n / 1000000; +#elif defined(MACOSX) + rv = (jlong)sb.st_mtimespec.tv_sec * 1000; + rv += (jlong)sb.st_mtimespec.tv_nsec / 1000000; +#else rv = (jlong)sb.st_mtim.tv_sec * 1000; rv += (jlong)sb.st_mtim.tv_nsec / 1000000; -#else - rv = (jlong)sb.st_mtimespec.tv_sec * 1000; - rv += (jlong)sb.st_mtimespec.tv_nsec / 1000000; #endif } } END_PLATFORM_STRING(env, path); @@ -419,14 +422,16 @@ struct timeval tv[2]; /* Preserve access time */ -#ifndef MACOSX +#if defined(_AIX) + tv[0].tv_sec = sb.st_atime; + tv[0].tv_usec = sb.st_atime_n / 1000; +#elif defined(MACOSX) + tv[0].tv_sec = sb.st_atimespec.tv_sec; + tv[0].tv_usec = sb.st_atimespec.tv_nsec / 1000; +#else tv[0].tv_sec = sb.st_atim.tv_sec; tv[0].tv_usec = sb.st_atim.tv_nsec / 1000; -#else - tv[0].tv_sec = sb.st_atimespec.tv_sec; - tv[0].tv_usec = sb.st_atimespec.tv_nsec / 1000; #endif - /* Change last-modified time */ tv[1].tv_sec = time / 1000; tv[1].tv_usec = (time % 1000) * 1000; diff -r b7453e312305 -r 3b471ff2785c 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 Wed May 31 17:44:50 2017 +0000 +++ b/jdk/src/java.security.jgss/share/classes/sun/security/krb5/KrbAsRep.java Wed Jul 05 23:32:48 2017 +0200 @@ -160,7 +160,7 @@ creds = new Credentials( rep.ticket, req.reqBody.cname, - rep.ticket.sname, + enc_part.sname, enc_part.key, enc_part.flags, enc_part.authtime, diff -r b7453e312305 -r 3b471ff2785c 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 Wed May 31 17:44:50 2017 +0000 +++ b/jdk/src/java.security.jgss/share/classes/sun/security/krb5/KrbTgsRep.java Wed Jul 05 23:32:48 2017 +0200 @@ -88,7 +88,7 @@ this.creds = new Credentials(rep.ticket, rep.cname, - rep.ticket.sname, + enc_part.sname, enc_part.key, enc_part.flags, enc_part.authtime, diff -r b7453e312305 -r 3b471ff2785c 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 Wed May 31 17:44:50 2017 +0000 +++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/AsyncSSLConnection.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -190,11 +190,6 @@ } @Override - protected int readImpl(ByteBuffer buffer) throws IOException { - throw new UnsupportedOperationException("Not supported."); - } - - @Override CompletableFuture whenReceivingResponse() { throw new UnsupportedOperationException("Not supported."); } diff -r b7453e312305 -r 3b471ff2785c 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 Wed May 31 17:44:50 2017 +0000 +++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/Exchange.java Wed Jul 05 23:32:48 2017 +0200 @@ -33,7 +33,6 @@ import java.net.URI; import java.net.URISyntaxException; import java.net.URLPermission; -import java.nio.ByteBuffer; import java.security.AccessControlContext; import java.security.AccessController; import java.security.PrivilegedAction; @@ -76,9 +75,6 @@ boolean upgrading; // to HTTP/2 final PushGroup 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 b7453e312305 -r 3b471ff2785c 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 Wed May 31 17:44:50 2017 +0000 +++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/Http1Exchange.java Wed Jul 05 23:32:48 2017 +0200 @@ -55,7 +55,7 @@ final HttpConnection connection; final HttpClientImpl client; final Executor executor; - final ByteBuffer buffer; // used for receiving + volatile ByteBuffer buffer; // used for receiving @Override public String toString() { @@ -74,7 +74,7 @@ this.client = exchange.client(); this.executor = exchange.executor(); this.operations = new LinkedList<>(); - this.buffer = exchange.getBuffer(); + this.buffer = Utils.EMPTY_BYTEBUFFER; if (connection != null) { this.connection = connection; } else { @@ -157,7 +157,9 @@ try { response = new Http1Response<>(connection, this); response.readHeaders(); - return response.response(); + Response r = response.response(); + buffer = response.getBuffer(); + return r; } catch (Throwable t) { connection.close(); throw t; @@ -213,7 +215,9 @@ return MinimalFuture.supply( () -> { response = new Http1Response<>(connection, Http1Exchange.this); response.readHeaders(); - return response.response(); + Response r = response.response(); + buffer = response.getBuffer(); + return r; }, executor); } diff -r b7453e312305 -r 3b471ff2785c 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 Wed May 31 17:44:50 2017 +0000 +++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/Http1Response.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -44,7 +44,7 @@ private final HttpConnection connection; private ResponseHeaders headers; private int responseCode; - private final ByteBuffer buffer; // same buffer used for reading status line and headers + private ByteBuffer buffer; private final Http1Exchange 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 b7453e312305 -r 3b471ff2785c 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 Wed May 31 17:44:50 2017 +0000 +++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpConnection.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -323,12 +323,9 @@ } } - final int read(ByteBuffer buffer) throws IOException { - return readImpl(buffer); - } - final ByteBuffer read() throws IOException { - return readImpl(); + ByteBuffer b = readImpl(); + return b; } /* @@ -337,9 +334,6 @@ */ protected abstract ByteBuffer readImpl() throws IOException; - /** Reads as much as possible into given buffer and returns amount read. */ - protected abstract int readImpl(ByteBuffer buffer) throws IOException; - @Override public String toString() { return "HttpConnection: " + channel().toString(); diff -r b7453e312305 -r 3b471ff2785c 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 Wed May 31 17:44:50 2017 +0000 +++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/PlainHttpConnection.java Wed Jul 05 23:32:48 2017 +0200 @@ -311,8 +311,7 @@ } } - @Override - protected int readImpl(ByteBuffer buf) throws IOException { + private int readImpl(ByteBuffer buf) throws IOException { int mark = buf.position(); int n; // FIXME: this hack works in conjunction with the corresponding change diff -r b7453e312305 -r 3b471ff2785c 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 Wed May 31 17:44:50 2017 +0000 +++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/PlainTunnelingConnection.java Wed Jul 05 23:32:48 2017 +0200 @@ -157,11 +157,6 @@ } @Override - protected int readImpl(ByteBuffer buffer) throws IOException { - return delegate.readImpl(buffer); - } - - @Override boolean isSecure() { return false; } diff -r b7453e312305 -r 3b471ff2785c 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 Wed May 31 17:44:50 2017 +0000 +++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/ResponseContent.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -148,11 +148,7 @@ // make sure we have at least 1 byte to look at private void getHunk() throws IOException { if (chunkbuf == null || !chunkbuf.hasRemaining()) { - if (chunkbuf == null) { - chunkbuf = Utils.getBuffer(); - } - chunkbuf.clear(); - connection.read(chunkbuf); + chunkbuf = connection.read(); } } @@ -256,7 +252,6 @@ private void pushBodyFixed(ByteBuffer b) throws IOException { int remaining = contentLength; - //lastBufferUsed = b; while (b.hasRemaining() && remaining > 0) { ByteBuffer buffer = Utils.getBuffer(); int amount = Math.min(b.remaining(), remaining); @@ -265,22 +260,14 @@ buffer.flip(); dataConsumer.accept(Optional.of(buffer)); } - //client.returnBuffer(b); while (remaining > 0) { - ByteBuffer buffer = Utils.getBuffer(); - int xx = connection.read(buffer); - if (xx == -1) + ByteBuffer buffer = connection.read(); + if (buffer == null) throw new IOException("connection closed"); int bytesread = buffer.remaining(); // assume for now that pipelining not implemented if (bytesread > remaining) { - System.err.println("xx = " + xx); - System.err.println("bytesread = " + bytesread); - System.err.println("remaining = " + remaining); - for (int i=0; i> 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 b7453e312305 -r 3b471ff2785c 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 Wed May 31 17:44:50 2017 +0000 +++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLConnection.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -162,10 +162,11 @@ @Override protected ByteBuffer readImpl() throws IOException { - ByteBuffer dst = ByteBuffer.allocate(8192); - int n = readImpl(dst); + WrapperResult r = sslDelegate.recvData(ByteBuffer.allocate(8192)); + // TODO: check for closure + int n = r.result.bytesProduced(); if (n > 0) { - return dst; + return r.buf; } else if (n == 0) { return Utils.EMPTY_BYTEBUFFER; } else { @@ -174,19 +175,6 @@ } @Override - protected int readImpl(ByteBuffer buf) throws IOException { - // TODO: need to ensure that buf is big enough for application data - WrapperResult r = sslDelegate.recvData(buf); - // TODO: check for closure - String s = "Receive) "; - //debugPrint(s, r.buf); - if (r.result.bytesProduced() > 0) { - assert buf == r.buf; - } - return r.result.bytesProduced(); - } - - @Override boolean connected() { return delegate.connected(); } diff -r b7453e312305 -r 3b471ff2785c 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 Wed May 31 17:44:50 2017 +0000 +++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLDelegate.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -104,9 +104,7 @@ } SSLEngineResult result; - /* if passed in buffer was not big enough then the a reallocated buffer - * is returned here */ - ByteBuffer buf; + ByteBuffer buf; // buffer containing result data } int app_buf_size; diff -r b7453e312305 -r 3b471ff2785c 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 Wed May 31 17:44:50 2017 +0000 +++ b/jdk/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/SSLTunnelConnection.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -164,19 +164,10 @@ @Override protected ByteBuffer readImpl() throws IOException { - return sslDelegate.recvData(Utils.EMPTY_BYTEBUFFER).buf; // fix this, make the read normal - } + ByteBuffer buf = Utils.getBuffer(); - @Override - protected int readImpl(ByteBuffer buf) throws IOException { WrapperResult r = sslDelegate.recvData(buf); - // TODO: check for closure - String s = "Receive) "; - //debugPrint(s, r.buf); - if (r.result.bytesProduced() > 0) { - assert buf == r.buf; - } - return r.result.bytesProduced(); + return r.buf; } @Override diff -r b7453e312305 -r 3b471ff2785c jdk/test/ProblemList.txt --- a/jdk/test/ProblemList.txt Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/ProblemList.txt Wed Jul 05 23:32:48 2017 +0200 @@ -258,8 +258,6 @@ tools/jimage/JImageListTest.java 8170120 generic-all tools/jimage/JImageVerifyTest.java 8170120 generic-all -tools/jar/multiRelease/RuntimeTest.java 8173905 generic-all - tools/schemagen/MultiReleaseJarTest.java 8174692 generic-all tools/wsgen/MultiReleaseJarTest.java 8174692 generic-all diff -r b7453e312305 -r 3b471ff2785c jdk/test/com/sun/corba/7130985/CorbaExceptionsCompileTest.java --- a/jdk/test/com/sun/corba/7130985/CorbaExceptionsCompileTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/com/sun/corba/7130985/CorbaExceptionsCompileTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,7 +25,7 @@ * @test * @bug 7130985 * @summary Four helper classes missing in Sun JDK - * @library /lib/testlibrary + * @library /lib/testlibrary /test/lib * @build jdk.testlibrary.* * @modules java.corba * @run main CorbaExceptionsCompileTest @@ -35,12 +35,12 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.rmi.RemoteException; + import org.omg.CORBA.ORBPackage.InvalidName; import org.omg.CORBA.TypeCodePackage.BadKind; import org.omg.CORBA.TypeCodePackage.Bounds; -import jdk.testlibrary.FileUtils; +import jdk.test.lib.util.FileUtils; import jdk.testlibrary.JDKToolLauncher; public class CorbaExceptionsCompileTest implements CorbaExceptionsTest { diff -r b7453e312305 -r 3b471ff2785c jdk/test/com/sun/crypto/provider/CICO/PBEFunc/CipherNCFuncTest.java --- a/jdk/test/com/sun/crypto/provider/CICO/PBEFunc/CipherNCFuncTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/com/sun/crypto/provider/CICO/PBEFunc/CipherNCFuncTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -20,20 +20,22 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ + /* * @test * @bug 8048604 - * @library ../ /lib/testlibrary + * @library ../ /test/lib * @summary This test verifies the assertion "There should be no transformation - * on the plaintext/ciphertext in encryption/decryption mechanism" for - * feature "NullCipher". + * on the plaintext/ciphertext in encryption/decryption mechanism" for + * feature "NullCipher". */ + import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NullCipher; import javax.crypto.ShortBufferException; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; public class CipherNCFuncTest { public static void main(String[] args) throws ShortBufferException, diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + * @bug 4138064 + * @build SecurityTest + * @run main/othervm/policy=java.policy SecurityTest + */ + +import java.io.File; + +public class SecurityTest { + + public static void main(String[] args) throws Exception { + try { + File f = File.createTempFile("foo", null); + } catch (java.security.AccessControlException x) { + throw x; + } catch (SecurityException x) { + if (x.getMessage().equals("Unable to create temporary file")) { + return; + } + throw x; + } + throw new Exception("SecurityException not thrown"); + } +} diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,2 @@ +grant { +}; diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/io/InputStream/ReadAllBytes.java --- a/jdk/test/java/io/InputStream/ReadAllBytes.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/io/InputStream/ReadAllBytes.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,13 +27,12 @@ import java.io.InputStream; import java.util.Arrays; import java.util.Random; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; /* * @test * @bug 8080835 - * @library /lib/testlibrary - * @build jdk.testlibrary.* + * @library /test/lib * @run main ReadAllBytes * @summary Basic test for InputStream.readAllBytes * @key randomness diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/io/InputStream/ReadNBytes.java --- a/jdk/test/java/io/InputStream/ReadNBytes.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/io/InputStream/ReadNBytes.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,13 +27,12 @@ import java.io.InputStream; import java.util.Arrays; import java.util.Random; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; /* * @test * @bug 8080835 - * @library /lib/testlibrary - * @build jdk.testlibrary.* + * @library /test/lib * @run main ReadNBytes * @summary Basic test for InputStream.readNBytes * @key randomness diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/io/Serializable/evolution/AddedExternField/run.sh --- a/jdk/test/java/io/Serializable/evolution/AddedExternField/run.sh Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -# -# Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# @bug 4088176 -# @summary Test reading an evolved class serialization into the original class - -rm *.class tmp.ser -javac WriteAddedField.java -java ${TESTVMOPTS} WriteAddedField -rm *.class -javac ReadAddedField.java -java ${TESTVMOPTS} ReadAddedField diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,107 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4087295 4785472 + * @library /test/lib + * @build jdk.test.lib.compiler.CompilerUtils + * @build jdk.test.lib.process.ProcessTools + * @build RenamePackageTest + * @run main RenamePackageTest + * @summary Enable resolveClass() to accommodate package renaming. + * This fix enables one to implement a resolveClass method that maps a + * Serialiazable class within a serialization stream to the same class + * in a different package within the JVM runtime. See run shell script + * for instructions on how to run this test. + */ + +import java.io.File; +import java.nio.file.Path; +import java.nio.file.Paths; + +import jdk.test.lib.compiler.CompilerUtils; +import jdk.test.lib.process.ProcessTools; + +public class RenamePackageTest { + public static void main(String args[]) throws Exception { + setup(); + + runTestSerialDriver(); + runInstallSerialDriver(); + + runInstallSerialDriver(); + runTestSerialDriver(); + } + + private static final Path SHARE = Paths.get(System.getProperty("test.classes"), "share"); + private static final Path OCLASSES = Paths.get(System.getProperty("test.classes"), "oclasses"); + private static final Path NCLASSES = Paths.get(System.getProperty("test.classes"), "nclasses"); + + private static void setup() throws Exception { + + boolean b = CompilerUtils.compile(Paths.get(System.getProperty("test.src"), "extension"), + SHARE); + assertTrue(b); + b = CompilerUtils.compile(Paths.get(System.getProperty("test.src"), "test"), + OCLASSES, + "-classpath", + SHARE.toString()); + assertTrue(b); + b = CompilerUtils.compile(Paths.get(System.getProperty("test.src"), "install"), + NCLASSES, + "-classpath", + SHARE.toString()); + assertTrue(b); + } + + private static void runTestSerialDriver() throws Exception { + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true, + "-classpath", + SHARE.toString() + + File.pathSeparator + + OCLASSES.toString(), + "test.SerialDriver", "-s"); + Process p = ProcessTools.startProcess("test SerialDriver", pb); + p.waitFor(); + assertTrue(p.exitValue() == 0); + } + + private static void runInstallSerialDriver() throws Exception { + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true, + "-classpath", + SHARE.toString() + + File.pathSeparator + + NCLASSES.toString(), + "install.SerialDriver", "-d"); + Process p = ProcessTools.startProcess("install SerialDriver", pb); + p.waitFor(); + assertTrue(p.exitValue() == 0); + } + + private static void assertTrue(boolean b) { + if (!b) { + throw new RuntimeException("expected true, get false"); + } + } +} diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/io/Serializable/evolution/RenamePackage/run.sh --- a/jdk/test/java/io/Serializable/evolution/RenamePackage/run.sh Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,105 +0,0 @@ -# -# Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# @test -# @bug 4087295 4785472 -# @summary Enable resolveClass() to accommodate package renaming. -# This fix enables one to implement a resolveClass method that maps a -# Serialiazable class within a serialization stream to the same class -# in a different package within the JVM runtime. See run shell script -# for instructions on how to run this test. - - -if [ "${TESTJAVA}" = "" ] -then - echo "TESTJAVA not set. Test cannot execute. Failed." - exit 1 -fi - -if [ "${COMPILEJAVA}" = "" ] ; then - COMPILEJAVA="${TESTJAVA}" -fi - - -OS=`uname -s` -# Need to determine the classpath separator and filepath separator based on the -# operating system. -case "$OS" in -SunOS | Linux | Darwin | AIX ) - PS=":" ;; -Windows* | CYGWIN* ) - PS=";" ;; -* ) - echo "Unrecognized system!" - exit 1 ;; -esac - -JAVA=${TESTJAVA}/bin/java -JAVAC=${COMPILEJAVA}/bin/javac -MKDIR=mkdir -RDEL="rm -r" - -if [ -d ${TESTCLASSES}/oclasses ] -then - ${RDEL} ${TESTCLASSES}/oclasses -fi -if [ -d ${TESTCLASSES}/nclasses ] -then - ${RDEL} ${TESTCLASSES}/nclasses -fi -if [ -d ${TESTCLASSES}/share ] -then - ${RDEL} ${TESTCLASSES}/share -fi -if [ -f ${TESTCLASSES}/stream.ser ] -then - ${RDEL} ${TESTCLASSES}/stream.ser -fi - -mkdir ${TESTCLASSES}/oclasses -mkdir ${TESTCLASSES}/share -mkdir ${TESTCLASSES}/nclasses - -# Build sources -set -e -${JAVAC} ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d ${TESTCLASSES}/share \ - ${TESTSRC}/extension/ExtendedObjectInputStream.java -CLASSPATH=${TESTCLASSES}/share; export CLASSPATH; -${JAVAC} ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d ${TESTCLASSES}/oclasses \ - ${TESTSRC}/test/SerialDriver.java -CLASSPATH=${TESTCLASSES}/share; export CLASSPATH; -${JAVAC} ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d ${TESTCLASSES}/nclasses \ - ${TESTSRC}/install/SerialDriver.java - -# Run Case 1. Map test.SerialDriver within stream to install.SerialDriver. -CLASSPATH="${TESTCLASSES}/oclasses${PS}${TESTCLASSES}/share"; export CLASSPATH; -${JAVA} ${TESTVMOPTS} test.SerialDriver -s -CLASSPATH="${TESTCLASSES}/nclasses${PS}${TESTCLASSES}/share"; export CLASSPATH; -${JAVA} ${TESTVMOPTS} install.SerialDriver -d -rm stream.ser - -# Run Case 2. Map install.SerialDriver within stream to test.SerialDriver. -CLASSPATH="${TESTCLASSES}/nclasses${PS}${TESTCLASSES}/share"; export CLASSPATH; -${JAVA} ${TESTVMOPTS} install.SerialDriver -s -CLASSPATH="${TESTCLASSES}/oclasses${PS}${TESTCLASSES}/share"; export CLASSPATH; -${JAVA} ${TESTVMOPTS} test.SerialDriver -d diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/io/Serializable/failureAtomicity/FailureAtomicity.java --- a/jdk/test/java/io/Serializable/failureAtomicity/FailureAtomicity.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/io/Serializable/failureAtomicity/FailureAtomicity.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,8 +26,7 @@ * @bug 8071474 * @summary Better failure atomicity for default read object. * @modules jdk.compiler - * @library /lib/testlibrary - * @build jdk.testlibrary.FileUtils + * @library /test/lib * @compile FailureAtomicity.java SerialRef.java * @run main failureAtomicity.FailureAtomicity */ @@ -59,7 +58,7 @@ import javax.tools.StandardJavaFileManager; import javax.tools.StandardLocation; import javax.tools.ToolProvider; -import jdk.testlibrary.FileUtils; +import jdk.test.lib.util.FileUtils; @SuppressWarnings("unchecked") public class FailureAtomicity { diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4897937 + * @run main MaskSyntheticModifierTest + * @summary Verify that the presence of the JVM_ACC_SYNTHETIC bit in the + * modifiers of fields and methods does not affect default + * serialVersionUID calculation. + */ + +import java.io.ObjectStreamClass; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; + +public class MaskSyntheticModifierTest { + public static void main(String[] args) throws Exception { + setup(); + + long suid = ObjectStreamClass.lookup(Foo.class).getSerialVersionUID(); + if (suid != 8027844768744011556L) { + throw new Error("incorrect serialVersionUID: " + suid); + } + } + + private static void setup() throws Exception { + Files.copy(Paths.get(System.getProperty("test.src"), "Foo.class"), + Paths.get("Foo.class"), StandardCopyOption.REPLACE_EXISTING); + } +} diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/io/Serializable/maskSyntheticModifier/Test.java --- a/jdk/test/java/io/Serializable/maskSyntheticModifier/Test.java Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @bug 4897937 - * @summary Verify that the presence of the JVM_ACC_SYNTHETIC bit in the - * modifiers of fields and methods does not affect default - * serialVersionUID calculation. - */ - -import java.io.ObjectStreamClass; - -public class Test { - public static void main(String[] args) { - long suid = ObjectStreamClass.lookup(Foo.class).getSerialVersionUID(); - if (suid != 8027844768744011556L) { - throw new Error("incorrect serialVersionUID: " + suid); - } - } -} diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/io/Serializable/maskSyntheticModifier/run.sh --- a/jdk/test/java/io/Serializable/maskSyntheticModifier/run.sh Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -# -# Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# @test -# @bug 4897937 -# @summary Verify that the presence of the JVM_ACC_SYNTHETIC bit in the -# modifiers of fields and methods does not affect default -# serialVersionUID calculation. - -if [ "${TESTJAVA}" = "" ] -then - echo "TESTJAVA not set. Test cannot execute. Failed." -exit 1 -fi - -if [ "${COMPILEJAVA}" = "" ] ; then - COMPILEJAVA="${TESTJAVA}" -fi - -if [ "${TESTSRC}" = "" ] -then - TESTSRC="." -fi - -set -ex -cp ${TESTSRC}/Foo.class . -${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . ${TESTSRC}/Test.java -${TESTJAVA}/bin/java ${TESTVMOPTS} Test -rm -f *.class diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4765255 + * @library /lib/testlibrary + * @build JarUtils A B C D PackageAccessTest + * @run main PackageAccessTest + * @summary Verify proper functioning of package equality checks used to + * determine accessibility of superclass constructor and inherited + * writeReplace/readResolve methods. + */ + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.ObjectStreamClass; +import java.io.InvalidClassException; +import java.net.URL; +import java.net.URLClassLoader; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +public class PackageAccessTest { + + static Class bcl; + static Class dcl; + + public static void main(String[] args) throws Exception { + setup(); + + try (URLClassLoader ldr = + new URLClassLoader(new URL[]{ new URL("file:foo.jar") }, + PackageAccessTest.class.getClassLoader())) { + bcl = Class.forName("B", true, ldr); + dcl = Class.forName("D", true, ldr); + + Object b = bcl.newInstance(); + try { + swizzle(b); + throw new Error("expected InvalidClassException for class B"); + } catch (InvalidClassException e) { + System.out.println("caught " + e); + e.printStackTrace(); + } + if (A.packagePrivateConstructorInvoked) { + throw new Error("package private constructor of A invoked"); + } + + Object d = dcl.newInstance(); + swizzle(d); + } + } + + static void swizzle(Object obj) throws Exception { + ByteArrayOutputStream bout = new ByteArrayOutputStream(); + ObjectOutputStream oout = new ObjectOutputStream(bout); + oout.writeObject(obj); + oout.close(); + ByteArrayInputStream bin = + new ByteArrayInputStream(bout.toByteArray()); + new TestObjectInputStream(bin).readObject(); + } + + static void setup() throws Exception { + Path classes = Paths.get(System.getProperty("test.classes", "")); + JarUtils.createJarFile(Paths.get("foo.jar"), classes, + classes.resolve("B.class"), classes.resolve("D.class")); + Files.delete(classes.resolve("B.class")); + Files.delete(classes.resolve("D.class")); + } +} + +class TestObjectInputStream extends ObjectInputStream { + TestObjectInputStream(InputStream in) throws IOException { + super(in); + } + + protected Class resolveClass(ObjectStreamClass desc) + throws IOException, ClassNotFoundException + { + String n = desc.getName(); + if (n.equals("B")) { + return PackageAccessTest.bcl; + } else if (n.equals("D")) { + return PackageAccessTest.dcl; + } else { + return super.resolveClass(desc); + } + } +} diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/io/Serializable/packageAccess/Test.java --- a/jdk/test/java/io/Serializable/packageAccess/Test.java Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @bug 4765255 - * @summary Verify proper functioning of package equality checks used to - * determine accessibility of superclass constructor and inherited - * writeReplace/readResolve methods. - */ - -import java.io.*; -import java.net.*; - -public class Test { - - static Class bcl; - static Class dcl; - - public static void main(String[] args) throws Exception { - ClassLoader ldr = - new URLClassLoader(new URL[]{ new URL("file:foo.jar") }, - Test.class.getClassLoader()); - bcl = Class.forName("B", true, ldr); - dcl = Class.forName("D", true, ldr); - - Object b = bcl.newInstance(); - try { - swizzle(b); - throw new Error("expected InvalidClassException for class B"); - } catch (InvalidClassException e) { - System.out.println("caught " + e); - e.printStackTrace(); - } - if (A.packagePrivateConstructorInvoked) { - throw new Error("package private constructor of A invoked"); - } - - Object d = dcl.newInstance(); - swizzle(d); - } - - static void swizzle(Object obj) throws Exception { - ByteArrayOutputStream bout = new ByteArrayOutputStream(); - ObjectOutputStream oout = new ObjectOutputStream(bout); - oout.writeObject(obj); - oout.close(); - ByteArrayInputStream bin = - new ByteArrayInputStream(bout.toByteArray()); - new TestObjectInputStream(bin).readObject(); - } -} - -class TestObjectInputStream extends ObjectInputStream { - TestObjectInputStream(InputStream in) throws IOException { - super(in); - } - - protected Class resolveClass(ObjectStreamClass desc) - throws IOException, ClassNotFoundException - { - String n = desc.getName(); - if (n.equals("B")) { - return Test.bcl; - } else if (n.equals("D")) { - return Test.dcl; - } else { - return super.resolveClass(desc); - } - } -} diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/io/Serializable/packageAccess/run.sh --- a/jdk/test/java/io/Serializable/packageAccess/run.sh Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -# -# Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# @test -# @bug 4765255 -# @summary Verify proper functioning of package equality checks used to -# determine accessibility of superclass constructor and inherited -# writeReplace/readResolve methods. - -if [ "${TESTJAVA}" = "" ] -then - echo "TESTJAVA not set. Test cannot execute. Failed." -exit 1 -fi - -if [ "${COMPILEJAVA}" = "" ] ; then - COMPILEJAVA="${TESTJAVA}" -fi - -if [ "${TESTSRC}" = "" ] -then - TESTSRC="." -fi - -set -ex - -${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . \ - ${TESTSRC}/A.java ${TESTSRC}/B.java ${TESTSRC}/C.java ${TESTSRC}/D.java \ - ${TESTSRC}/Test.java -${COMPILEJAVA}/bin/jar ${TESTTOOLVMOPTS} cf foo.jar B.class D.class -rm -f B.class D.class - -${TESTJAVA}/bin/java ${TESTVMOPTS} Test -rm -f *.class *.jar diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4413434 + * @library /lib/testlibrary + * @build JarUtils SetupJar Boot + * @run driver SetupJar + * @run main/othervm -Xbootclasspath/a:boot.jar ConsTest + * @summary Verify that generated java.lang.reflect implementation classes do + * not interfere with serialization's class resolution mechanism. + */ + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.lang.reflect.Constructor; + +public class ConsTest implements Serializable { + public static void main(String[] args) throws Exception { + Constructor cons = Boot.class.getConstructor( + new Class[] { ObjectInputStream.class }); + ByteArrayOutputStream bout = new ByteArrayOutputStream(); + ObjectOutputStream oout = new ObjectOutputStream(bout); + oout.writeObject(new ConsTest()); + oout.close(); + + for (int i = 0; i < 100; i++) { + ObjectInputStream oin = new ObjectInputStream( + new ByteArrayInputStream(bout.toByteArray())); + cons.newInstance(new Object[]{ oin }); + } + } +} diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.nio.file.Path; +import java.nio.file.Paths; + +public class SetupJar { + + public static void main(String args[]) throws Exception { + Path classes = Paths.get(System.getProperty("test.classes", "")); + JarUtils.createJarFile(Paths.get("boot.jar"), classes, + classes.resolve("Boot.class")); + } +} diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/io/Serializable/resolveClass/consTest/Test.java --- a/jdk/test/java/io/Serializable/resolveClass/consTest/Test.java Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @bug 4413434 - * @summary Verify that generated java.lang.reflect implementation classes do - * not interfere with serialization's class resolution mechanism. - */ - -import java.io.*; -import java.lang.reflect.*; - -public class Test implements Serializable { - public static void main(String[] args) throws Exception { - Constructor cons = Boot.class.getConstructor( - new Class[] { ObjectInputStream.class }); - ByteArrayOutputStream bout = new ByteArrayOutputStream(); - ObjectOutputStream oout = new ObjectOutputStream(bout); - oout.writeObject(new Test()); - oout.close(); - - for (int i = 0; i < 100; i++) { - ObjectInputStream oin = new ObjectInputStream( - new ByteArrayInputStream(bout.toByteArray())); - cons.newInstance(new Object[]{ oin }); - } - } -} diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/io/Serializable/resolveClass/consTest/run.sh --- a/jdk/test/java/io/Serializable/resolveClass/consTest/run.sh Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -# -# Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# @test -# @bug 4413434 -# @summary Verify that generated java.lang.reflect implementation classes do -# not interfere with serialization's class resolution mechanism. - -if [ "${TESTJAVA}" = "" ] -then - echo "TESTJAVA not set. Test cannot execute. Failed." -exit 1 -fi - -if [ "${COMPILEJAVA}" = "" ] ; then - COMPILEJAVA="${TESTJAVA}" -fi - -if [ "${TESTSRC}" = "" ] -then - TESTSRC="." -fi - -set -ex - -rm -f *.class *.jar -${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . ${TESTSRC}/Boot.java -${COMPILEJAVA}/bin/jar ${TESTTOOLVMOPTS} cf boot.jar *.class -rm -f *.class -${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -classpath boot.jar -d . \ - ${TESTSRC}/Test.java -${TESTJAVA}/bin/java ${TESTVMOPTS} -Xbootclasspath/a:boot.jar Test -rm -f *.class *.jar diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4413434 + * @library /lib/testlibrary + * @build JarUtils Foo + * @run main DeserializeButtonTest + * @summary Verify that class loaded outside of application class loader is + * correctly resolved during deserialization when read in by custom + * readObject() method of a bootstrap class (in this case, + * java.util.Vector). + */ + +import java.net.URLClassLoader; +import java.net.URL; +import java.nio.file.Path; +import java.nio.file.Paths; + +public class DeserializeButtonTest { + public static void main(String[] args) throws Exception { + setup(); + + try (URLClassLoader ldr = + new URLClassLoader(new URL[]{ new URL("file:cb.jar") })) { + Runnable r = (Runnable) Class.forName("Foo", true, ldr).newInstance(); + r.run(); + } + } + + private static void setup() throws Exception { + Path classes = Paths.get(System.getProperty("test.classes", "")); + JarUtils.createJarFile(Paths.get("cb.jar"), + classes, + classes.resolve("Foo.class"), + classes.resolve("Foo$TestElement.class")); + } +} diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/io/Serializable/resolveClass/deserializeButton/Test.java --- a/jdk/test/java/io/Serializable/resolveClass/deserializeButton/Test.java Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @bug 4413434 - * @summary Verify that class loaded outside of application class loader is - * correctly resolved during deserialization when read in by custom - * readObject() method of a bootstrap class (in this case, - * java.util.Vector). - */ - -import java.io.*; -import java.net.*; - -public class Test { - public static void main(String[] args) throws Exception { - ClassLoader ldr = - new URLClassLoader(new URL[]{ new URL("file:cb.jar") }); - Runnable r = (Runnable) Class.forName("Foo", true, ldr).newInstance(); - r.run(); - } -} diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/io/Serializable/resolveClass/deserializeButton/run.sh --- a/jdk/test/java/io/Serializable/resolveClass/deserializeButton/run.sh Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -# -# Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# @test -# @bug 4413434 -# @summary Verify that class loaded outside of application class loader is -# correctly resolved during deserialization when read in by custom -# readObject() method of a bootstrap class (in this case, -# java.util.Vector). - -if [ "${TESTJAVA}" = "" ] -then - echo "TESTJAVA not set. Test cannot execute. Failed." -exit 1 -fi - -if [ "${COMPILEJAVA}" = "" ] ; then - COMPILEJAVA="${TESTJAVA}" -fi - -if [ "${TESTSRC}" = "" ] -then - TESTSRC="." -fi - -set -ex - -rm -f *.class *.jar -${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . ${TESTSRC}/Foo.java -${COMPILEJAVA}/bin/jar ${TESTTOOLVMOPTS} cf cb.jar *.class -rm -f *.class -${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . ${TESTSRC}/Test.java -${TESTJAVA}/bin/java ${TESTVMOPTS} Test -rm -f *.class *.jar diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4035147 4785472 + * @library /test/lib + * @build jdk.test.lib.JDKToolLauncher + * @build jdk.test.lib.process.ProcessTools + * @build ClasspathTest + * @run main serialver.ClasspathTest + * @summary Test the use of the -classpath switch in the serialver application. + */ + +package serialver; + +import java.io.File; + +import jdk.test.lib.JDKToolLauncher; +import jdk.test.lib.process.ProcessTools; + +public class ClasspathTest implements java.io.Serializable { + int a; + int b; + + public static void main(String args[]) throws Exception { + JDKToolLauncher serialver = + JDKToolLauncher.create("serialver") + .addToolArg("-classpath") + .addToolArg(System.getProperty("test.class.path")) + .addToolArg("serialver.ClasspathTest"); + Process p = ProcessTools.startProcess("serialver", + new ProcessBuilder(serialver.getCommand())); + p.waitFor(); + if (p.exitValue() != 0) { + throw new RuntimeException("error occurs in serialver"); + } + } +} diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/io/Serializable/serialver/classpath/Test.java --- a/jdk/test/java/io/Serializable/serialver/classpath/Test.java Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * - * @bug 4035147 - * @sumary Simple java class for test purposes - */ - -package serialver; - -public class Test implements java.io.Serializable{ - int a; - int b; -} diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/io/Serializable/serialver/classpath/run.sh --- a/jdk/test/java/io/Serializable/serialver/classpath/run.sh Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,64 +0,0 @@ -# -# Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# @test -# @bug 4035147 4785472 -# @summary Test the use of the -classpath switch in the serialver application. -# @author Naveen Sanjeeva -# -# @build Test -# @run shell run.sh - -# set a few environment variables so that the shell-script can run stand-alone -# in the source directory - -if [ "${TESTSRC}" = "" ] ; then - TESTSRC="." -fi -if [ "${TESTCLASSES}" = "" ] ; then - TESTCLASSES="." -fi -if [ "${TESTJAVA}" = "" ] ; then - echo "TESTJAVA not set. Test cannot execute." - echo "FAILED!!!" - exit 1 -fi - -# set platform-dependent variables -OS=`uname -s` -case "$OS" in - SunOS | Linux | Darwin | AIX ) - PS=":" ;; - Windows* | CYGWIN* ) - PS=";" ;; - * ) - echo "Unrecognized system!" - exit 1 ;; -esac - -# the test code - -echo "Using the classpath .${PS}${TESTCLASSES}" -${TESTJAVA}/bin/serialver -classpath ".${PS}${TESTCLASSES}" serialver.Test - -exit $? diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4312217 4785473 + * @library /test/lib + * @build jdk.test.lib.JDKToolLauncher + * @build jdk.test.lib.process.ProcessTools + * @build NestedTest + * @run main serialver.NestedTest + * @summary To test the use of nested class specification using the '.' + * notation instead of the '$' notation. + */ + +package serialver; + +import java.io.Serializable; + +import jdk.test.lib.JDKToolLauncher; +import jdk.test.lib.process.ProcessTools; + +public class NestedTest implements Serializable { + public static class Test1 implements Serializable { + public static class Test2 implements Serializable{ + private static final long serialVersionUID = 100L; + } + } + + public static void main(String args[]) throws Exception { + JDKToolLauncher serialver = + JDKToolLauncher.create("serialver") + .addToolArg("-classpath") + .addToolArg(System.getProperty("test.class.path")) + .addToolArg("serialver.NestedTest.Test1.Test2"); + Process p = ProcessTools.startProcess("serialver", + new ProcessBuilder(serialver.getCommand())); + p.waitFor(); + if (p.exitValue() != 0) { + throw new RuntimeException("error occurs in serialver."); + } + } +} diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/io/Serializable/serialver/nested/Test.java --- a/jdk/test/java/io/Serializable/serialver/nested/Test.java Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * - * @bug 4312217 - * @summary To test the use of nested class specification using the '.' - * notation instead of the '$' notation. - */ -package serialver; - -import java.io.*; - -public class Test implements Serializable { - public static class Test1 implements Serializable { - public static class Test2 implements Serializable{ - private static final long serialVersionUID = 100L; - } - } -} diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/io/Serializable/serialver/nested/run.sh --- a/jdk/test/java/io/Serializable/serialver/nested/run.sh Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,64 +0,0 @@ -# -# Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# @test -# @bug 4312217 4785473 -# @summary Test the use of the -classpath switch in the serialver application. -# @author Naveen Sanjeeva -# -# @build Test -# @run shell run.sh - -# set a few environment variables so that the shell-script can run stand-alone -# in the source directory - -if [ "${TESTSRC}" = "" ] ; then - TESTSRC="." -fi -if [ "${TESTCLASSES}" = "" ] ; then - TESTCLASSES="." -fi -if [ "${TESTJAVA}" = "" ] ; then - echo "TESTJAVA not set. Test cannot execute." - echo "FAILED!!!" - exit 1 -fi - -# set platform-dependent variables -OS=`uname -s` -case "$OS" in - SunOS | Linux | Darwin | AIX ) - PS=":" ;; - Windows* | CYGWIN* ) - PS=";" ;; - * ) - echo "Unrecognized system!" - exit 1 ;; -esac - -# the test code - -echo "Using the classpath .${PS}${TESTCLASSES}" -${TESTJAVA}/bin/serialver -classpath ".${PS}${TESTCLASSES}" 'serialver.Test.Test1.Test2' - -exit $? diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/io/Serializable/subclass/Allow.policy --- a/jdk/test/java/io/Serializable/subclass/Allow.policy Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/io/Serializable/subclass/Allow.policy Wed Jul 05 23:32:48 2017 +0200 @@ -2,7 +2,6 @@ // "standard" properies that can be read by anyone permission java.io.FilePermission "-","read,write,execute"; permission java.io.SerializablePermission "enableSubstitution"; - permission java.io.SerializablePermission "enableSubclassImplementation"; // Needed to get access to private writeObjectMethod and // to be able to call it. diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,162 @@ +/* + * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4100915 + * @summary Verify that [write/read]ObjectOverride methods get called. + * Test verifies that ALL methods to write an object can + * be overridden. However, the testing for reading an object + * is incomplete. Only test that readObjectOverride is called. + * An entire protocol would need to be implemented and written + * out before being able to test the input side of the API. + * + * Also, would be appropriate that this program verify + * that if SerializablePermission "enableSubclassImplementation" + * is not in the security policy and security is enabled, that + * a security exception is thrown when constructing the + * ObjectOutputStream subclass. + * + * + * @compile AbstractObjectInputStream.java AbstractObjectOutputStream.java + * @compile XObjectInputStream.java XObjectOutputStream.java + * @compile SubclassTest.java + * @run main SubclassTest + * @run main/othervm/policy=Allow.policy SubclassTest -expectSecurityException + */ + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.ObjectStreamField; +import java.io.Serializable; + +/** + * Test if customized readObject and writeObject are called. + */ +class B implements Serializable { + public int publicIntField; + public static int numWriteObjectCalled = 0; + B(int v) { + publicIntField = v; + } + private void writeObject(ObjectOutputStream os) throws IOException { + numWriteObjectCalled++; + os.defaultWriteObject(); + } + + private void readObject(ObjectInputStream is) + throws IOException, ClassNotFoundException + { + is.defaultReadObject(); + } + +}; + +/** + * Test PutFields interface. + */ + +class C implements Serializable { + public int xx1; + public int xx2; + static final ObjectStreamField[] serialPersistentFields = { + new ObjectStreamField("x1", Integer.TYPE), + new ObjectStreamField("x2", Integer.TYPE), + new ObjectStreamField("x3", Integer.TYPE), + new ObjectStreamField("x4", Integer.TYPE) + }; + C() { + xx1 = 300; + xx2 = 400; + } + + private void writeObject(ObjectOutputStream os) throws IOException { + ObjectOutputStream.PutField putFields = os.putFields(); + putFields.put("x1", xx1); + putFields.put("x2", xx2); + putFields.put("x3", xx1 * 2); + putFields.put("x4", xx2 * 2); + os.writeFields(); + } + +}; + + +class A implements Serializable { + public int publicIntField; + public long publicLongField; + public B publicBField; + public B[] publicBArray = { new B(4), new B(6)}; + public C publicCField; + + public A() { + publicIntField = 3; + publicLongField = 10L; + publicBField = new B(5); + publicCField = new C(); + } +}; + +public class SubclassTest { + public static void main(String argv[]) + throws IOException, ClassNotFoundException + { + boolean expectSecurityException = false; + + if (argv.length > 0 && + argv[0].compareTo("-expectSecurityException") == 0) + expectSecurityException = true; + + ByteArrayOutputStream baos = new ByteArrayOutputStream(20); + XObjectOutputStream os = null; + try { + os = new XObjectOutputStream(baos); + if (expectSecurityException) + throw new Error("Assertion failure. " + + "Expected a security exception on previous line."); + } catch (SecurityException e) { + if (expectSecurityException) { + System.err.println("Caught expected security exception."); + return; + } + throw e; + } + os.writeObject(new A()); + os.close(); + if (B.numWriteObjectCalled != 3) + throw new Error("Expected B.writeObject() to be called 3 times;" + + " observed only " + B.numWriteObjectCalled + " times"); + + XObjectInputStream is = + new XObjectInputStream(new ByteArrayInputStream(baos.toByteArray())); + try { + A a = (A)is.readObject(); + throw new Error("Expected readObjectOverride() to be called and throw IOException(not implemented)"); + } catch (IOException e) { + } + is.close(); + } +}; diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/io/Serializable/subclass/Test.java --- a/jdk/test/java/io/Serializable/subclass/Test.java Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,152 +0,0 @@ -/* - * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 4100915 - * @summary Verify that [write/read]ObjectOverride methods get called. - * Test verifies that ALL methods to write an object can - * be overridden. Howver, the testing for reading an object - * is incomplete. Only test that readObjectOverride is called. - * An entire protocol would need to be implemented and written - * out before being able to test the input side of the API. - * - * Also, would be appropriate that this program verify - * that if SerializablePermission "enableSubclassImplamentation" - * is not in the security policy and security is enabled, that - * a security excepiton is thrown when constructing the - * ObjectOutputStream subclass. - * - * - * @compile AbstractObjectInputStream.java AbstractObjectOutputStream.java XObjectInputStream.java XObjectOutputStream.java Test.java - * @run main Test - */ - -import java.io.*; - -/** - * Test if customized readObject and writeObject are called. - */ -class B implements Serializable { - public int publicIntField; - public static int numWriteObjectCalled = 0; - B(int v) { - publicIntField = v; - } - private void writeObject(ObjectOutputStream os) throws IOException { - numWriteObjectCalled++; - os.defaultWriteObject(); - } - - private void readObject(ObjectInputStream is) - throws IOException, ClassNotFoundException - { - is.defaultReadObject(); - } - -}; - -/** - * Test PutFields interface. - */ - -class C implements Serializable { - public int xx1; - public int xx2; - static final ObjectStreamField[] serialPersistentFields = { - new ObjectStreamField("x1", Integer.TYPE), - new ObjectStreamField("x2", Integer.TYPE), - new ObjectStreamField("x3", Integer.TYPE), - new ObjectStreamField("x4", Integer.TYPE) - }; - C() { - xx1 = 300; - xx2 = 400; - } - - private void writeObject(ObjectOutputStream os) throws IOException { - ObjectOutputStream.PutField putFields = os.putFields(); - putFields.put("x1", xx1); - putFields.put("x2", xx2); - putFields.put("x3", xx1 * 2); - putFields.put("x4", xx2 * 2); - os.writeFields(); - } - -}; - - -class A implements Serializable { - public int publicIntField; - public long publicLongField; - public B publicBField; - public B[] publicBArray = { new B(4), new B(6)}; - public C publicCField; - - public A() { - publicIntField = 3; - publicLongField = 10L; - publicBField = new B(5); - publicCField = new C(); - } -}; - -public class Test { - public static void main(String argv[]) - throws IOException, ClassNotFoundException - { - boolean expectSecurityException = false; - - if (argv.length > 0 && - argv[0].compareTo("-expectSecurityException") == 0) - expectSecurityException = true; - - ByteArrayOutputStream baos = new ByteArrayOutputStream(20); - XObjectOutputStream os = null; - try { - os = new XObjectOutputStream(baos); - if (expectSecurityException) - throw new Error("Assertion failure. " + - "Expected a security exception on previous line."); - } catch (SecurityException e) { - if (expectSecurityException) - return; - else - throw e; - } - os.writeObject(new A()); - os.close(); - if (B.numWriteObjectCalled != 3) - throw new Error("Expected B.writeObject() to be called 3 times;" + - " observed only " + B.numWriteObjectCalled + " times"); - - XObjectInputStream is = - new XObjectInputStream(new ByteArrayInputStream(baos.toByteArray())); - try { - A a = (A)is.readObject(); - throw new Error("Expected readObjectOverride() to be called and throw IOException(not implemented)"); - } catch (IOException e) { - } - is.close(); - } -}; diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/io/Serializable/subclass/run.sh --- a/jdk/test/java/io/Serializable/subclass/run.sh Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -# -# Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# @bug 4100915 -mkdir classes -javac -d classes *.java -java ${TESTVMOPTS} -classpath classes -Djava.policy=Allow.policy Test -# ENABLE next line when new method for invoking a main with a SecureClassLoader is known -#java -classpath classes -Djava.policy=NotAllow.policy Test -expectSecurityException diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4325590 + * @library /lib/testlibrary + * @build JarUtils A B + * @run main SuperclassDataLossTest + * @summary Verify that superclass data is not lost when incoming superclass + * descriptor is matched with local class that is not a superclass of + * the deserialized instance's class. + */ + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.ObjectStreamClass; +import java.net.URL; +import java.net.URLClassLoader; +import java.net.MalformedURLException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; + +class MixedSuperclassStream extends ObjectInputStream { + private boolean ldr12A; + private URLClassLoader ldr1; + private URLClassLoader ldr2; + + MixedSuperclassStream(InputStream in, URLClassLoader ldr1, + URLClassLoader ldr2, boolean ldr1First) throws IOException { + super(in); + this.ldr1 = ldr1; + this.ldr2 = ldr2; + this.ldr12A = ldr12A; + } + + protected Class resolveClass(ObjectStreamClass desc) + throws IOException, ClassNotFoundException + { + // resolve A's classdesc to class != B's superclass + String name = desc.getName(); + if (ldr12A) { + if (name.equals("A")) { + return Class.forName(name, true, ldr1); + } else if (name.equals("B")) { + return Class.forName(name, true, ldr2); + } + } else { + if (name.equals("B")) { + return Class.forName(name, true, ldr1); + } else if (name.equals("A")) { + return Class.forName(name, true, ldr2); + } + } + return super.resolveClass(desc); + } +} + +public class SuperclassDataLossTest { + + public static void main(String[] args) throws Exception { + try (URLClassLoader ldr1 = new URLClassLoader(new URL[] { new URL("file:cb1.jar") }); + URLClassLoader ldr2 = new URLClassLoader(new URL[] { new URL("file:cb2.jar") })) { + setup(); + + Runnable a = (Runnable) Class.forName("B", true, ldr1).newInstance(); + a.run(); + + ByteArrayOutputStream bout = new ByteArrayOutputStream(); + ObjectOutputStream oout = new ObjectOutputStream(bout); + oout.writeObject(a); + oout.close(); + + test(bout, ldr1, ldr2, true); + test(bout, ldr1, ldr2, false); + } + } + + private static void test(ByteArrayOutputStream bout, URLClassLoader ldr1, + URLClassLoader ldr2, boolean ldr12A) throws Exception { + ByteArrayInputStream bin = + new ByteArrayInputStream(bout.toByteArray()); + ObjectInputStream oin = new MixedSuperclassStream(bin, ldr1, ldr2, ldr12A); + Runnable a = (Runnable) oin.readObject(); + a.run(); + } + + private static void setup() throws Exception { + Path classes = Paths.get(System.getProperty("test.classes", "")); + JarUtils.createJarFile(Paths.get("cb1.jar"), classes, + classes.resolve("A.class"), classes.resolve("B.class")); + Files.copy(Paths.get("cb1.jar"), Paths.get("cb2.jar"), + StandardCopyOption.REPLACE_EXISTING); + } +} diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/io/Serializable/superclassDataLoss/Test.java --- a/jdk/test/java/io/Serializable/superclassDataLoss/Test.java Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,79 +0,0 @@ -/* - * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @bug 4325590 - * @summary Verify that superclass data is not lost when incoming superclass - * descriptor is matched with local class that is not a superclass of - * the deserialized instance's class. - */ - -import java.io.*; -import java.net.*; - -class MixedSuperclassStream extends ObjectInputStream { - MixedSuperclassStream(InputStream in) throws IOException { super(in); } - - protected Class resolveClass(ObjectStreamClass desc) - throws IOException, ClassNotFoundException - { - // resolve A's classdesc to class != B's superclass - String name = desc.getName(); - if (name.equals("A")) { - return Class.forName(name, true, Test.ldr1); - } else if (name.equals("B")) { - return Class.forName(name, true, Test.ldr2); - } else { - return super.resolveClass(desc); - } - } -} - -public class Test { - - static URLClassLoader ldr1, ldr2; - static { - try { - ldr1 = new URLClassLoader(new URL[] { new URL("file:cb1.jar") }); - ldr2 = new URLClassLoader(new URL[] { new URL("file:cb2.jar") }); - } catch (MalformedURLException ex) { - throw new Error(); - } - } - - public static void main(String[] args) throws Exception { - Runnable a = (Runnable) Class.forName("B", true, ldr1).newInstance(); - a.run(); - - ByteArrayOutputStream bout = new ByteArrayOutputStream(); - ObjectOutputStream oout = new ObjectOutputStream(bout); - oout.writeObject(a); - oout.close(); - - ByteArrayInputStream bin = - new ByteArrayInputStream(bout.toByteArray()); - ObjectInputStream oin = new MixedSuperclassStream(bin); - a = (Runnable) oin.readObject(); - a.run(); - } -} diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/io/Serializable/superclassDataLoss/run.sh --- a/jdk/test/java/io/Serializable/superclassDataLoss/run.sh Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ -# -# Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# @test -# @bug 4325590 -# @summary Verify that superclass data is not lost when incoming superclass -# descriptor is matched with local class that is not a superclass of -# the deserialized instance's class. - -if [ "${TESTJAVA}" = "" ] -then - echo "TESTJAVA not set. Test cannot execute. Failed." -exit 1 -fi - -if [ "${COMPILEJAVA}" = "" ] ; then - COMPILEJAVA="${TESTJAVA}" -fi - -if [ "${TESTSRC}" = "" ] -then - TESTSRC="." -fi - -set -ex - -${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . \ - ${TESTSRC}/A.java ${TESTSRC}/B.java -${COMPILEJAVA}/bin/jar ${TESTTOOLVMOPTS} cf cb1.jar A.class B.class -cp cb1.jar cb2.jar -rm -f A.class B.class - -${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . \ - ${TESTSRC}/Test.java -${TESTJAVA}/bin/java ${TESTVMOPTS} Test -rm -f *.class *.jar diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/io/Serializable/unnamedPackageSwitch/Test.java --- a/jdk/test/java/io/Serializable/unnamedPackageSwitch/Test.java Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @bug 4348213 - * @summary Verify that deserialization allows an incoming class descriptor - * representing a class in the unnamed package to be resolved to a - * local class with the same name in a named package, and vice-versa. - */ - -import java.io.*; - -class A implements Serializable { - private static final long serialVersionUID = 0L; -} - -class TestObjectInputStream extends ObjectInputStream { - TestObjectInputStream(InputStream in) throws IOException { super(in); } - protected Class resolveClass(ObjectStreamClass desc) - throws IOException, ClassNotFoundException - { - String name = desc.getName(); - if (name.equals("A")) { - return pkg.A.class; - } else if (name.equals("pkg.A")) { - return A.class; - } else { - return super.resolveClass(desc); - } - } -} - -public class Test { - public static void main(String[] args) throws Exception { - ByteArrayOutputStream bout = new ByteArrayOutputStream(); - ObjectOutputStream oout = new ObjectOutputStream(bout); - oout.writeObject(new A()); - oout.writeObject(new pkg.A()); - oout.close(); - - ObjectInputStream oin = new TestObjectInputStream( - new ByteArrayInputStream(bout.toByteArray())); - oin.readObject(); - oin.readObject(); - } -} diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4348213 + * @build UnnamedPackageSwitchTest pkg.A + * @run main UnnamedPackageSwitchTest + * @summary Verify that deserialization allows an incoming class descriptor + * representing a class in the unnamed package to be resolved to a + * local class with the same name in a named package, and vice-versa. + */ + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.io.IOException; +import java.io.ObjectOutputStream; +import java.io.ObjectInputStream; +import java.io.ObjectStreamClass; +import java.io.Serializable; + +class A implements Serializable { + private static final long serialVersionUID = 0L; +} + +class TestObjectInputStream extends ObjectInputStream { + TestObjectInputStream(InputStream in) throws IOException { super(in); } + protected Class resolveClass(ObjectStreamClass desc) + throws IOException, ClassNotFoundException + { + String name = desc.getName(); + if (name.equals("A")) { + return pkg.A.class; + } else if (name.equals("pkg.A")) { + return A.class; + } else { + return super.resolveClass(desc); + } + } +} + +public class UnnamedPackageSwitchTest { + public static void main(String[] args) throws Exception { + ByteArrayOutputStream bout = new ByteArrayOutputStream(); + ObjectOutputStream oout = new ObjectOutputStream(bout); + oout.writeObject(new A()); + oout.writeObject(new pkg.A()); + oout.close(); + + ObjectInputStream oin = new TestObjectInputStream( + new ByteArrayInputStream(bout.toByteArray())); + oin.readObject(); + oin.readObject(); + } +} diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/io/Serializable/unnamedPackageSwitch/run.sh --- a/jdk/test/java/io/Serializable/unnamedPackageSwitch/run.sh Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -# -# Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# @test -# @bug 4348213 -# @summary Verify that deserialization allows an incoming class descriptor -# representing a class in the unnamed package to be resolved to a -# local class with the same name in a named package, and vice-versa. - -if [ "${TESTJAVA}" = "" ] -then - echo "TESTJAVA not set. Test cannot execute. Failed." -exit 1 -fi - -if [ "${COMPILEJAVA}" = "" ] ; then - COMPILEJAVA="${TESTJAVA}" -fi - -if [ "${TESTSRC}" = "" ] -then - TESTSRC="." -fi - -set -ex - -${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . \ - ${TESTSRC}/A.java ${TESTSRC}/Test.java -${TESTJAVA}/bin/java ${TESTVMOPTS} Test diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/lang/Class/forName/modules/TestDriver.java --- a/jdk/test/java/lang/Class/forName/modules/TestDriver.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/lang/Class/forName/modules/TestDriver.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,7 +29,7 @@ import java.util.Arrays; import java.util.stream.Stream; -import jdk.testlibrary.FileUtils; +import jdk.test.lib.util.FileUtils; import static jdk.testlibrary.ProcessTools.*; import org.testng.annotations.BeforeClass; @@ -40,9 +40,9 @@ * @test * @bug 8087335 * @summary Tests for Class.forName(Module,String) - * @library /lib/testlibrary + * @library /lib/testlibrary /test/lib * @modules jdk.compiler - * @build TestDriver CompilerUtils jdk.testlibrary.ProcessTools jdk.testlibrary.FileUtils TestMain TestLayer + * @build TestDriver CompilerUtils jdk.testlibrary.ProcessTools TestMain TestLayer * @run testng TestDriver */ diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/lang/ClassLoader/Assert.java --- a/jdk/test/java/lang/ClassLoader/Assert.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/lang/ClassLoader/Assert.java Wed Jul 05 23:32:48 2017 +0200 @@ -28,7 +28,7 @@ * @run main/othervm Assert * @summary Test the assertion facility * @author Mike McCloskey - * @key randomness intermittent + * @key randomness */ import package1.*; diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/lang/Double/ParseHexFloatingPoint.java --- a/jdk/test/java/lang/Double/ParseHexFloatingPoint.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/lang/Double/ParseHexFloatingPoint.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,8 +23,7 @@ /* * @test - * @library /lib/testlibrary/ - * @build jdk.testlibrary.* + * @library /test/lib * @run main ParseHexFloatingPoint * @bug 4826774 8078672 * @summary Numerical tests for hexadecimal inputs to parse{Double, Float} (use -Dseed=X to set PRNG seed) @@ -32,7 +31,7 @@ * @key randomness */ -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; public class ParseHexFloatingPoint { private ParseHexFloatingPoint(){} diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/lang/Integer/BitTwiddle.java --- a/jdk/test/java/lang/Integer/BitTwiddle.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/lang/Integer/BitTwiddle.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,8 +23,7 @@ /* * @test - * @library /lib/testlibrary/ - * @build jdk.testlibrary.* + * @library /test/lib * @run main BitTwiddle * @bug 4495754 8078672 * @summary Basic test for int bit twiddling (use -Dseed=X to set PRNG seed) @@ -33,7 +32,7 @@ */ import java.util.Random; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; import static java.lang.Integer.*; public class BitTwiddle { diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/lang/Long/BitTwiddle.java --- a/jdk/test/java/lang/Long/BitTwiddle.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/lang/Long/BitTwiddle.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,8 +23,7 @@ /* * @test - * @library /lib/testlibrary/ - * @build jdk.testlibrary.* + * @library /test/lib * @run main BitTwiddle * @bug 4495754 8078672 * @summary Basic test for long bit twiddling (use -Dseed=X to set PRNG seed) @@ -33,7 +32,7 @@ */ import java.util.Random; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; import static java.lang.Long.*; public class BitTwiddle { diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/lang/Math/CubeRootTests.java --- a/jdk/test/java/lang/Math/CubeRootTests.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/lang/Math/CubeRootTests.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,8 +23,7 @@ /* * @test - * @library /lib/testlibrary/ - * @build jdk.testlibrary.RandomFactory + * @library /test/lib * @run main CubeRootTests * @bug 4347132 4939441 8078672 * @summary Tests for {Math, StrictMath}.cbrt (use -Dseed=X to set PRNG seed) @@ -32,7 +31,7 @@ * @key randomness */ -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; public class CubeRootTests { private CubeRootTests(){} diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/lang/Math/HypotTests.java --- a/jdk/test/java/lang/Math/HypotTests.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/lang/Math/HypotTests.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,8 +23,7 @@ /* * @test - * @library /lib/testlibrary/ - * @build jdk.testlibrary.RandomFactory + * @library /test/lib * @run main HypotTests * @bug 4851638 4939441 8078672 * @summary Tests for {Math, StrictMath}.hypot (use -Dseed=X to set PRNG seed) @@ -32,7 +31,7 @@ * @key randomness */ -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; public class HypotTests { private HypotTests(){} diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/lang/Math/IeeeRecommendedTests.java --- a/jdk/test/java/lang/Math/IeeeRecommendedTests.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/lang/Math/IeeeRecommendedTests.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,8 +23,7 @@ /* * @test - * @library /lib/testlibrary/ - * @build jdk.testlibrary.RandomFactory + * @library /test/lib * @run main IeeeRecommendedTests * @bug 4860891 4826732 4780454 4939441 4826652 8078672 * @summary Tests for IEEE 754[R] recommended functions and similar methods (use -Dseed=X to set PRNG seed) @@ -32,7 +31,7 @@ * @key randomness */ -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; public class IeeeRecommendedTests { private IeeeRecommendedTests(){} diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/lang/Math/Log1pTests.java --- a/jdk/test/java/lang/Math/Log1pTests.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/lang/Math/Log1pTests.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,8 +23,7 @@ /* * @test - * @library /lib/testlibrary/ - * @build jdk.testlibrary.RandomFactory + * @library /test/lib * @run main Log1pTests * @bug 4851638 4939441 8078672 * @summary Tests for {Math, StrictMath}.log1p (use -Dseed=X to set PRNG seed) @@ -32,7 +31,7 @@ * @key randomness */ -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; public class Log1pTests { private Log1pTests(){} diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/lang/Math/MultiplicationTests.java --- a/jdk/test/java/lang/Math/MultiplicationTests.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/lang/Math/MultiplicationTests.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,8 +23,7 @@ /* * @test - * @library /lib/testlibrary/ - * @build jdk.testlibrary.* + * @library /test/lib * @run main MultiplicationTests * @bug 5100935 * @summary Tests for multiplication methods (use -Dseed=X to set PRNG seed) @@ -32,7 +31,7 @@ */ import java.math.BigInteger; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; public class MultiplicationTests { private MultiplicationTests(){} diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/lang/StackWalker/StackWalkTest.java --- a/jdk/test/java/lang/StackWalker/StackWalkTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/lang/StackWalker/StackWalkTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,14 +31,13 @@ import java.util.Set; import java.util.TreeSet; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; /** * @test * @bug 8140450 * @summary Stack Walk Test (use -Dseed=X to set PRNG seed) - * @library /lib/testlibrary - * @build jdk.testlibrary.* + * @library /test/lib * @compile StackRecorderUtil.java * @run main/othervm StackWalkTest * @run main/othervm/java.security.policy=stackwalktest.policy StackWalkTest diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/lang/StrictMath/CubeRootTests.java --- a/jdk/test/java/lang/StrictMath/CubeRootTests.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/lang/StrictMath/CubeRootTests.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,8 +25,7 @@ * @test * @bug 4347132 8136799 * @key randomness - * @library /lib/testlibrary/ - * @build jdk.testlibrary.RandomFactory + * @library /test/lib * @build Tests * @build FdlibmTranslit * @build CubeRootTests @@ -35,7 +34,7 @@ * @author Joseph D. Darcy */ -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; /** * The tests in ../Math/CubeRootTests.java test properties that should diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/lang/StrictMath/ExpTests.java --- a/jdk/test/java/lang/StrictMath/ExpTests.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/lang/StrictMath/ExpTests.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,8 +25,7 @@ * @test * @bug 8139688 * @key randomness - * @library /lib/testlibrary/ - * @build jdk.testlibrary.RandomFactory + * @library /test/lib * @build Tests * @build FdlibmTranslit * @build ExpTests @@ -34,7 +33,7 @@ * @summary Tests specifically for StrictMath.exp */ -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; /** * The role of this test is to verify that the FDLIBM exp algorithm is diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/lang/StrictMath/HypotTests.java --- a/jdk/test/java/lang/StrictMath/HypotTests.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/lang/StrictMath/HypotTests.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,8 +26,7 @@ * @bug 4851638 * @key randomness * @summary Tests for StrictMath.hypot - * @library /lib/testlibrary/ - * @build jdk.testlibrary.RandomFactory + * @library /test/lib * @build Tests * @build FdlibmTranslit * @build HypotTests @@ -35,7 +34,7 @@ * @author Joseph D. Darcy */ -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; /** * The tests in ../Math/HypotTests.java test properties that should diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/lang/String/LiteralReplace.java --- a/jdk/test/java/lang/String/LiteralReplace.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/lang/String/LiteralReplace.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,8 +23,7 @@ /* @test * @bug 8058779 8054307 - * @library /lib/testlibrary/ - * @build jdk.testlibrary.RandomFactory + * @library /test/lib * @run testng LiteralReplace * @summary Basic tests of String.replace(CharSequence, CharSequence) * @key randomness @@ -37,7 +36,7 @@ import java.util.regex.Pattern; import java.util.Random; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; import org.testng.annotations.Test; import org.testng.annotations.DataProvider; diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/lang/invoke/ExplicitCastArgumentsTest.java --- a/jdk/test/java/lang/invoke/ExplicitCastArgumentsTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/lang/invoke/ExplicitCastArgumentsTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,7 +21,9 @@ * questions. */ -import com.oracle.testlibrary.jsr292.Helper; +import sun.invoke.util.Wrapper; +import test.java.lang.invoke.lib.Helper; + import java.io.File; import java.io.Serializable; import java.lang.invoke.MethodHandle; @@ -31,13 +33,12 @@ import java.util.HashMap; import java.util.Map; import java.util.Random; -import sun.invoke.util.Wrapper; /* * @test * @bug 8060483 8066746 * @key randomness - * @library /lib/testlibrary /lib/testlibrary/jsr292 + * @library /lib/testlibrary /java/lang/invoke/common * @modules java.base/sun.invoke.util * @summary unit tests for MethodHandles.explicitCastArguments() * @run main ExplicitCastArgumentsTest @@ -249,21 +250,27 @@ for (Class parent : parents) { for (int j = 0; j < children.length; j++) { // Child type to parent type non-null conversion, shoud succeed - testConversion(mode, children[j], parent, childInst[j], childInst[j], false, null); + testConversion(mode, children[j], parent, childInst[j], + childInst[j], false, null); // Child type to parent type null conversion, shoud succeed - testConversion(mode, children[j], parent, null, null, false, null); + testConversion(mode, children[j], parent, null, + null, false, null); // Parent type to child type non-null conversion with parent // type instance, should fail - testConversion(mode, parent, children[j], testSuperObj, null, true, ClassCastException.class); + testConversion(mode, parent, children[j], testSuperObj, + null, true, ClassCastException.class); // Parent type to child type non-null conversion with child // type instance, should succeed - testConversion(mode, parent, children[j], childInst[j], childInst[j], false, null); + testConversion(mode, parent, children[j], childInst[j], + childInst[j], false, null); // Parent type to child type null conversion, should succeed - testConversion(mode, parent, children[j], null, null, false, null); + testConversion(mode, parent, children[j], null, + null, false, null); } // Parent type to child type non-null conversion with sibling // type instance, should fail - testConversion(mode, parent, testSubClass1, testObj02, null, true, ClassCastException.class); + testConversion(mode, parent, testSubClass1, testObj02, + null, true, ClassCastException.class); } // Sibling type non-null conversion, should fail testConversion(mode, testSubClass1, diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/lang/invoke/LFCaching/LFGarbageCollectedTest.java --- a/jdk/test/java/lang/invoke/LFCaching/LFGarbageCollectedTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/lang/invoke/LFCaching/LFGarbageCollectedTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,11 +28,15 @@ * @ignore 8078602 * @summary Test verifies that lambda forms are garbage collected * @author kshefov - * @library /lib/testlibrary/jsr292 /lib/testlibrary + * @library /lib/testlibrary /java/lang/invoke/common * @build TestMethods * @build LambdaFormTestCase * @build LFGarbageCollectedTest - * @run main/othervm -Xmx64m -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+HeapDumpOnOutOfMemoryError -DHEAP_DUMP=false LFGarbageCollectedTest + * @run main/othervm -Xmx64m + * -XX:SoftRefLRUPolicyMSPerMB=0 + * -XX:+HeapDumpOnOutOfMemoryError + * -DHEAP_DUMP=false + * LFGarbageCollectedTest */ import java.lang.invoke.MethodHandle; diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/lang/invoke/LFCaching/LFMultiThreadCachingTest.java --- a/jdk/test/java/lang/invoke/LFCaching/LFMultiThreadCachingTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/lang/invoke/LFCaching/LFMultiThreadCachingTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -27,7 +27,7 @@ * @key randomness * @summary Test verifies that lambda forms are cached when run with multiple threads * @author kshefov - * @library /lib/testlibrary/jsr292 /lib/testlibrary + * @library /lib/testlibrary /java/lang/invoke/common * @modules java.base/java.lang.invoke:open * java.base/java.lang.ref:open * java.management @@ -38,16 +38,16 @@ * @run main/othervm LFMultiThreadCachingTest */ +import test.java.lang.invoke.lib.CodeCacheOverflowProcessor; + import java.lang.invoke.MethodHandle; import java.util.Collections; import java.util.EnumSet; import java.util.HashMap; import java.util.Map; -import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.CountDownLatch; import java.util.concurrent.CyclicBarrier; -import com.oracle.testlibrary.jsr292.CodeCacheOverflowProcessor; /** * Multiple threaded lambda forms caching test class. @@ -57,13 +57,16 @@ private static final TestMethods.Kind[] KINDS; static { - EnumSet 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 b7453e312305 -r 3b471ff2785c jdk/test/java/lang/invoke/LFCaching/LFSingleThreadCachingTest.java --- a/jdk/test/java/lang/invoke/LFCaching/LFSingleThreadCachingTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/lang/invoke/LFCaching/LFSingleThreadCachingTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -27,7 +27,7 @@ * @key randomness * @summary Test verifies that lambda forms are cached when run with single thread * @author kshefov - * @library /lib/testlibrary/jsr292 /lib/testlibrary + * @library /lib/testlibrary /java/lang/invoke/common * @modules java.base/java.lang.ref:open * java.base/java.lang.invoke:open * java.management @@ -77,6 +77,7 @@ * @param args Accepts no arguments. */ public static void main(String[] args) { - LambdaFormTestCase.runTests(LFSingleThreadCachingTest::new, EnumSet.allOf(TestMethods.class)); + LambdaFormTestCase.runTests(LFSingleThreadCachingTest::new, + EnumSet.allOf(TestMethods.class)); } } diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/lang/invoke/LFCaching/LambdaFormTestCase.java --- a/jdk/test/java/lang/invoke/LFCaching/LambdaFormTestCase.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/lang/invoke/LFCaching/LambdaFormTestCase.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,8 +21,11 @@ * questions. */ -import com.oracle.testlibrary.jsr292.Helper; -import com.oracle.testlibrary.jsr292.CodeCacheOverflowProcessor; +import jdk.testlibrary.TimeLimitedRunner; +import jdk.testlibrary.Utils; +import test.java.lang.invoke.lib.CodeCacheOverflowProcessor; +import test.java.lang.invoke.lib.Helper; + import java.lang.invoke.MethodHandle; import java.lang.management.GarbageCollectorMXBean; import java.lang.management.ManagementFactory; @@ -32,8 +35,6 @@ import java.util.Collection; import java.util.List; import java.util.function.Function; -import jdk.testlibrary.Utils; -import jdk.testlibrary.TimeLimitedRunner; /** * Lambda forms caching test case class. Contains all necessary test routines to @@ -44,7 +45,8 @@ */ public abstract class LambdaFormTestCase { - private static final long TIMEOUT = Helper.IS_THOROUGH ? 0L : (long) (Utils.adjustTimeout(Utils.DEFAULT_TEST_TIMEOUT) * 0.9); + private static final long TIMEOUT = Helper.IS_THOROUGH ? + 0L : (long) (Utils.adjustTimeout(Utils.DEFAULT_TEST_TIMEOUT) * 0.9); /** * Reflection link to {@code j.l.i.MethodHandle.internalForm} method. It is @@ -92,7 +94,8 @@ long failCounter; boolean passed; - TestRun(Function 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 b7453e312305 -r 3b471ff2785c jdk/test/java/lang/invoke/LFCaching/TestMethods.java --- a/jdk/test/java/lang/invoke/LFCaching/TestMethods.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/lang/invoke/LFCaching/TestMethods.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,7 +21,8 @@ * questions. */ -import com.oracle.testlibrary.jsr292.Helper; +import test.java.lang.invoke.lib.Helper; + import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; @@ -41,462 +42,472 @@ public enum TestMethods { FOLD_ARGUMENTS("foldArguments") { - @Override - public Map 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 b7453e312305 -r 3b471ff2785c jdk/test/java/lang/invoke/MethodHandles/CatchExceptionTest.java --- a/jdk/test/java/lang/invoke/MethodHandles/CatchExceptionTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/lang/invoke/MethodHandles/CatchExceptionTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -20,25 +20,30 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ + package test.java.lang.invoke.MethodHandles; -import com.oracle.testlibrary.jsr292.Helper; -import com.oracle.testlibrary.jsr292.CodeCacheOverflowProcessor; import jdk.testlibrary.Asserts; import jdk.testlibrary.TimeLimitedRunner; import jdk.testlibrary.Utils; +import test.java.lang.invoke.lib.CodeCacheOverflowProcessor; +import test.java.lang.invoke.lib.Helper; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; import java.lang.reflect.Array; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Objects; import java.util.function.BiFunction; import java.util.function.Function; import java.util.function.Supplier; /* @test - * @library /lib/testlibrary/jsr292 /lib/testlibrary/ + * @library /lib/testlibrary /java/lang/invoke/common * @compile CatchExceptionTest.java * @run main/othervm -esa test.java.lang.invoke.MethodHandles.CatchExceptionTest * @key intermittent randomness @@ -68,8 +73,8 @@ private int dropped; private MethodHandle thrower; - public CatchExceptionTest(TestCase testCase, final boolean isVararg, final int argsCount, - final int catchDrops) { + public CatchExceptionTest(TestCase testCase, final boolean isVararg, + final int argsCount, final int catchDrops) { this.testCase = testCase; this.dropped = catchDrops; MethodHandle thrower = testCase.thrower; @@ -353,8 +358,8 @@ new ClassCastException("testing"), new java.io.IOException("testing"), new LinkageError("testing")}; - List> 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 b7453e312305 -r 3b471ff2785c jdk/test/java/lang/invoke/MethodHandlesTest.java --- a/jdk/test/java/lang/invoke/MethodHandlesTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/lang/invoke/MethodHandlesTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,23 +23,46 @@ /* @test * @summary unit tests for java.lang.invoke.MethodHandles - * @library /lib/testlibrary /lib/testlibrary/jsr292 + * @library /lib/testlibrary /java/lang/invoke/common * @compile MethodHandlesTest.java remote/RemoteExample.java - * @run junit/othervm/timeout=2500 -XX:+IgnoreUnrecognizedVMOptions -XX:-VerifyDependencies -esa test.java.lang.invoke.MethodHandlesTest + * @run junit/othervm/timeout=2500 -XX:+IgnoreUnrecognizedVMOptions + * -XX:-VerifyDependencies + * -esa + * test.java.lang.invoke.MethodHandlesTest */ package test.java.lang.invoke; +import org.junit.*; +import test.java.lang.invoke.lib.CodeCacheOverflowProcessor; import test.java.lang.invoke.remote.RemoteExample; -import java.lang.invoke.*; -import static java.lang.invoke.MethodType.methodType; + +import java.lang.invoke.CallSite; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandleProxies; +import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodHandles.Lookup; -import java.lang.reflect.*; -import java.util.*; -import org.junit.*; +import java.lang.invoke.MethodType; +import java.lang.invoke.MutableCallSite; +import java.lang.invoke.WrongMethodTypeException; +import java.lang.reflect.Array; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.lang.reflect.UndeclaredThrowableException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Formatter; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static java.lang.invoke.MethodType.methodType; import static org.junit.Assert.*; -import com.oracle.testlibrary.jsr292.CodeCacheOverflowProcessor; - /** * diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/lang/invoke/PermuteArgsTest.java --- a/jdk/test/java/lang/invoke/PermuteArgsTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/lang/invoke/PermuteArgsTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,9 +23,10 @@ /* @test * @summary unit tests for method handles which permute their arguments - * @library /lib/testlibrary/jsr292 /lib/testlibrary + * @library /lib/testlibrary /java/lang/invoke/common * @run testng/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-VerifyDependencies -ea -esa -DPermuteArgsTest.MAX_ARITY=8 test.java.lang.invoke.PermuteArgsTest */ + /* Examples of manual runs: * java -DPermuteArgsTest.{DRY_RUN=true,MAX_ARITY=253} test.java.lang.invoke.PermuteArgsTest * java -DPermuteArgsTest.{VERBOSE=true,MAX_ARITY=5} test.java.lang.invoke.PermuteArgsTest @@ -34,17 +35,23 @@ package test.java.lang.invoke; -import org.testng.*; -import org.testng.annotations.*; - -import com.oracle.testlibrary.jsr292.CodeCacheOverflowProcessor; +import org.testng.annotations.Test; +import test.java.lang.invoke.lib.CodeCacheOverflowProcessor; -import java.util.*; -import java.lang.reflect.*; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodType; +import java.lang.invoke.WrongMethodTypeException; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; -import java.lang.invoke.*; -import static java.lang.invoke.MethodHandles.*; -import static java.lang.invoke.MethodType.*; +import static java.lang.invoke.MethodHandles.Lookup; +import static java.lang.invoke.MethodHandles.lookup; +import static java.lang.invoke.MethodHandles.permuteArguments; +import static java.lang.invoke.MethodType.methodType; public class PermuteArgsTest { private static final Class CLASS = PermuteArgsTest.class; @@ -205,7 +212,8 @@ throw new IllegalArgumentException("cannot convert to type "+mt1+" from "+mh, ex); } } - static MethodHandle findTestMH(String name, int[] perm) throws ReflectiveOperationException { + static MethodHandle findTestMH(String name, int[] perm) + throws ReflectiveOperationException { int arity = perm.length; Lookup lookup = lookup(); for (Method m : lookup.lookupClass().getDeclaredMethods()) { @@ -259,7 +267,8 @@ } } - static void testPermutations(MethodHandle mh, int[] perm, int start, int end, Set 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 b7453e312305 -r 3b471ff2785c jdk/test/java/lang/invoke/TestCatchExceptionWithVarargs.java --- a/jdk/test/java/lang/invoke/TestCatchExceptionWithVarargs.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/lang/invoke/TestCatchExceptionWithVarargs.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,14 +24,18 @@ /* * @test * @bug 8019184 - * @library /lib/testlibrary /lib/testlibrary/jsr292 + * @library /lib/testlibrary /java/lang/invoke/common * @summary MethodHandles.catchException() fails when methods have 8 args + varargs * @run main TestCatchExceptionWithVarargs */ -import com.oracle.testlibrary.jsr292.CodeCacheOverflowProcessor; -import java.util.*; -import java.lang.invoke.*; +import test.java.lang.invoke.lib.CodeCacheOverflowProcessor; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.util.LinkedList; +import java.util.List; public class TestCatchExceptionWithVarargs { @@ -48,14 +52,16 @@ public static Object target(Object... a) throws Exception { if (a[0] != firstArg) { - throw new AssertionError("first argument different than expected: " + a[0] + " != " + firstArg); + throw new AssertionError("first argument different than expected: " + + a[0] + " != " + firstArg); } throw new MyException(); } public static Object handler(Object... a) { if (a[0] != firstArg) { - throw new AssertionError("first argument different than expected: " + a[0] + " != " + firstArg); + throw new AssertionError("first argument different than expected: " + + a[0] + " != " + firstArg); } return a[0]; } @@ -83,20 +89,27 @@ for (int i = 1; i < MAX_MH_ARITY - 1; i++) { ptypes.add(0, Object.class); - MethodHandle targetWithArgs = target.asType(MethodType.methodType(Object.class, ptypes)); - MethodHandle handlerWithArgs = handler.asType(MethodType.methodType(Object.class, ptypes)); - handlerWithArgs = MethodHandles.dropArguments(handlerWithArgs, 0, MyException.class); + MethodHandle targetWithArgs = target.asType( + MethodType.methodType(Object.class, ptypes)); + MethodHandle handlerWithArgs = handler.asType( + MethodType.methodType(Object.class, ptypes)); + handlerWithArgs = MethodHandles.dropArguments( + handlerWithArgs, 0, MyException.class); - MethodHandle gwc1 = MethodHandles.catchException(targetWithArgs, MyException.class, handlerWithArgs); + MethodHandle gwc1 = MethodHandles.catchException( + targetWithArgs, MyException.class, handlerWithArgs); // The next line throws an IllegalArgumentException if there is a bug. - MethodHandle gwc2 = MethodHandles.catchException(gwc1, MyException.class, handlerWithArgs); + MethodHandle gwc2 = MethodHandles.catchException( + gwc1, MyException.class, handlerWithArgs); // This is only to verify that the method handles can actually be invoked and do the right thing. firstArg = new Object(); - Object o = gwc2.asSpreader(Object[].class, ptypes.size() - 1).invoke(firstArg, new Object[i]); + Object o = gwc2.asSpreader(Object[].class, ptypes.size() - 1) + .invoke(firstArg, new Object[i]); if (o != firstArg) { - throw new AssertionError("return value different than expected: " + o + " != " + firstArg); + throw new AssertionError("return value different than expected: " + + o + " != " + firstArg); } } } diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/lang/invoke/VarargsArrayTest.java --- a/jdk/test/java/lang/invoke/VarargsArrayTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/lang/invoke/VarargsArrayTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,20 +21,20 @@ * questions. */ +import sun.invoke.util.Wrapper; +import test.java.lang.invoke.lib.CodeCacheOverflowProcessor; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandleHelper; import java.lang.invoke.MethodType; -import sun.invoke.util.Wrapper; import java.util.Arrays; import java.util.Collections; -import com.oracle.testlibrary.jsr292.CodeCacheOverflowProcessor; /* @test * @summary unit tests for varargs array methods: MethodHandleInfo.varargsArray(int), * MethodHandleInfo.varargsArray(Class,int) & MethodHandleInfo.varargsList(int) * @modules java.base/sun.invoke.util - * @library /lib/testlibrary /lib/testlibrary/jsr292 + * @library /lib/testlibrary /java/lang/invoke/common * @compile/module=java.base java/lang/invoke/MethodHandleHelper.java * @run main/bootclasspath VarargsArrayTest * @run main/bootclasspath/othervm -DVarargsArrayTest.MAX_ARITY=255 -DVarargsArrayTest.START_ARITY=250 @@ -46,9 +46,12 @@ */ public class VarargsArrayTest { private static final Class CLASS = VarargsArrayTest.class; - private static final int MAX_ARITY = Integer.getInteger(CLASS.getSimpleName()+".MAX_ARITY", 40); - private static final int START_ARITY = Integer.getInteger(CLASS.getSimpleName()+".START_ARITY", 0); - private static final boolean EXHAUSTIVE = Boolean.getBoolean(CLASS.getSimpleName()+".EXHAUSTIVE"); + private static final int MAX_ARITY = Integer.getInteger( + CLASS.getSimpleName()+".MAX_ARITY", 40); + private static final int START_ARITY = Integer.getInteger( + CLASS.getSimpleName()+".START_ARITY", 0); + private static final boolean EXHAUSTIVE = Boolean.getBoolean( + CLASS.getSimpleName()+".EXHAUSTIVE"); public static void main(String[] args) throws Throwable { CodeCacheOverflowProcessor.runMHTest(VarargsArrayTest::test); @@ -211,7 +214,8 @@ } return; } - throw new AssertionError(Arrays.deepToString(arr1) + " != " + Arrays.deepToString(arr2)); + throw new AssertionError(Arrays.deepToString(arr1) + + " != " + Arrays.deepToString(arr2)); } public static void assertEquals(Object o1, Object o2) { diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package test.java.lang.invoke.lib; + +import jdk.testlibrary.Utils; + +/** + * Helper class used to catch and process VirtualMachineError with message "Out + * of space in CodeCache". Some JSR292 tests run out of code cache size, so code + * cache overflows and VME is thrown. This VME is considered as non-critical in + * some JSR292 tests, so it should be processed to prevent test failure. + */ +public class CodeCacheOverflowProcessor { + + /** + * Checks if an instance of Throwable is caused by VirtualMachineError with + * message "Out of space in CodeCache". May be used as filter in method + * {@code jdk.testlibrary.Utils.filterException}. + * + * @param t - Throwable to check. + * @return true if Throwable is caused by VME, false otherwise. + */ + public static Boolean isThrowableCausedByVME(Throwable t) { + Throwable causeOfT = t; + do { + if (causeOfT instanceof VirtualMachineError + && causeOfT.getMessage().matches(".*[Oo]ut of space" + + " in CodeCache.*")) { + return true; + } + causeOfT = causeOfT != null ? causeOfT.getCause() : null; + } while (causeOfT != null && causeOfT != t); + return false; + } + + /** + * Checks if the given test throws an exception caused by + * VirtualMachineError with message "Out of space in CodeCache", and, if VME + * takes place, processes it so that no exception is thrown, and prints its + * stack trace. If test throws exception not caused by VME, this method just + * re-throws this exception. + * + * @param test - test to check for and process VirtualMachineError. + * @return - an exception caused by VME or null + * if test has thrown no exception. + * @throws Throwable - if test has thrown an exception + * that is not caused by VME. + */ + public static Throwable runMHTest(Utils.ThrowingRunnable test) throws Throwable { + Throwable t = Utils.filterException(test::run, + CodeCacheOverflowProcessor::isThrowableCausedByVME); + if (t != null) { + System.err.printf("%nNon-critical exception caught becuse of" + + " code cache size is not enough to run all test cases.%n%n"); + } + return t; + } +} diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,351 @@ +/* + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package test.java.lang.invoke.lib; + +import jdk.testlibrary.Asserts; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +public class Helper { + /** Flag for verbose output, true if {@code -Dverbose} specified */ + public static final boolean IS_VERBOSE + = System.getProperty("verbose") != null; + /** + * Flag for thorough testing -- all test will be executed, + * true if {@code -Dthorough} specified. */ + public static final boolean IS_THOROUGH + = System.getProperty("thorough") != null; + /** Random number generator w/ initial seed equal to {@code -Dseed} */ + public static final Random RNG; + + static { + String str = System.getProperty("seed"); + long seed = str != null ? Long.parseLong(str) : new Random().nextLong(); + RNG = new Random(seed); + System.out.printf("-Dseed=%d%n", seed); + } + + public static final long TEST_LIMIT; + static { + String str = System.getProperty("testLimit"); + TEST_LIMIT = str != null ? Long.parseUnsignedLong(str) : 2000L; + System.out.printf("-DtestLimit=%d%n", TEST_LIMIT); + } + + public static final int MAX_ARITY = 254; + public static final String MISSING_ARG = "missingArg"; + public static final String MISSING_ARG_2 = "missingArg#2"; + + private static final int + // first int value + ONE_MILLION = (1000 * 1000), + // scale factor to reach upper 32 bits + TEN_BILLION = (10 * 1000 * 1000 * 1000), + // <<1 makes space for sign bit; + INITIAL_ARG_VAL = ONE_MILLION << 1; + + public static final MethodHandle AS_LIST; + + static { + try { + AS_LIST = MethodHandles.lookup().findStatic( + Arrays.class, "asList", + MethodType.methodType(List.class, Object[].class)); + } catch (NoSuchMethodException | IllegalAccessException ex) { + throw new Error(ex); + } + } + + public static boolean isDoubleCost(Class aClass) { + return aClass == double.class || aClass == long.class; + } + + private static List> 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 b7453e312305 -r 3b471ff2785c jdk/test/java/math/BigDecimal/StringConstructor.java --- a/jdk/test/java/math/BigDecimal/StringConstructor.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/math/BigDecimal/StringConstructor.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,8 +23,7 @@ /* * @test - * @library /lib/testlibrary/ - * @build jdk.testlibrary.* + * @library /test/lib * @run main StringConstructor * @bug 4103117 4331084 4488017 4490929 6255285 6268365 8074460 8078672 * @summary Tests the BigDecimal string constructor (use -Dseed=X to set PRNG seed). @@ -33,7 +32,7 @@ import java.math.*; import java.util.Random; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; public class StringConstructor { diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/math/BigInteger/BigIntegerTest.java --- a/jdk/test/java/math/BigInteger/BigIntegerTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/math/BigInteger/BigIntegerTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,8 +23,7 @@ /* * @test - * @library /lib/testlibrary/ - * @build jdk.testlibrary.* + * @library /test/lib * @run main BigIntegerTest * @bug 4181191 4161971 4227146 4194389 4823171 4624738 4812225 4837946 4026465 8074460 8078672 8032027 * @summary tests methods in BigInteger (use -Dseed=X to set PRNG seed) @@ -47,7 +46,7 @@ import java.util.stream.IntStream; import java.util.stream.LongStream; import java.util.stream.Stream; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; /** * This is a simple test class created to ensure that the results diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/math/BigInteger/ModPow65537.java --- a/jdk/test/java/math/BigInteger/ModPow65537.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/math/BigInteger/ModPow65537.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,8 +23,7 @@ /* * @test - * @library /lib/testlibrary/ - * @build jdk.testlibrary.* + * @library /test/lib * @run main ModPow65537 * @bug 4891312 8074460 8078672 * @summary verify that modPow() not broken by the special case for 65537 (use -Dseed=X to set PRNG seed) @@ -37,7 +36,7 @@ import java.security.*; import java.security.spec.*; import java.util.Random; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; public class ModPow65537 { diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/math/BigInteger/PrimeTest.java --- a/jdk/test/java/math/BigInteger/PrimeTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/math/BigInteger/PrimeTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,8 +25,7 @@ /* * @test - * @library /lib/testlibrary/ - * @build jdk.testlibrary.* + * @library /test/lib * @run main PrimeTest * @bug 8026236 8074460 8078672 * @summary test primality verification methods in BigInteger (use -Dseed=X to set PRNG seed) @@ -40,7 +39,7 @@ import java.util.Set; import java.util.SplittableRandom; import java.util.TreeSet; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; import static java.util.stream.Collectors.toCollection; import static java.util.stream.Collectors.toList; diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/math/BigInteger/SymmetricRangeTests.java --- a/jdk/test/java/math/BigInteger/SymmetricRangeTests.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/math/BigInteger/SymmetricRangeTests.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,8 +24,7 @@ /* * @test * @ignore This test has huge memory requirements - * @library /lib/testlibrary/ - * @build jdk.testlibrary.* + * @library /test/lib * @run main/timeout=180/othervm -Xmx8g SymmetricRangeTests * @bug 6910473 8021204 8021203 9005933 8074460 8078672 * @summary Test range of BigInteger values (use -Dseed=X to set PRNG seed) @@ -40,7 +39,7 @@ import java.util.Arrays; import java.math.BigInteger; import java.util.Random; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; public class SymmetricRangeTests { diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/net/Socket/OldSocketImpl.sh --- a/jdk/test/java/net/Socket/OldSocketImpl.sh Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +0,0 @@ -# -# Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# @test -# @bug 6449565 -# @run shell/timeout=140 OldSocketImpl.sh -# @summary Pre-1.4 SocketImpl no longer supported - -OS=`uname -s` -case "$OS" in - SunOS | Linux | Darwin | AIX ) - PS=":" - FS="/" - ;; - CYGWIN* ) - PS=";" - FS="/" - ;; - Windows* ) - PS=";" - FS="\\" - ;; - * ) - echo "Unrecognized system!" - exit 1; - ;; -esac - -# no need to compile the test. It is already compiled -# with 1.3 and in OldStyleImpl.jar - -# run -${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -cp ${TESTSRC}${FS}OldSocketImpl.jar OldSocketImpl -result=$? -if [ "$result" -ne "0" ]; then - exit 1 -fi - -# no failures, exit. -exit 0 - diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import jdk.test.lib.process.ProcessTools; + +import java.nio.file.Path; +import java.nio.file.Paths; + +/** + * @test + * @bug 6449565 + * @library /test/lib + * @build jdk.test.lib.process.ProcessTools + * @run main OldSocketImplTestDriver + * @summary Test driver for OdlSocketImpl + */ +public class OldSocketImplTestDriver { + public static void main(String[] args) throws Throwable { + Path jar = Paths.get(System.getProperty("test.src"), + "OldSocketImpl.jar"); + ProcessTools.executeTestJava("-cp", jar.toString(), "OldSocketImpl") + .outputTo(System.out) + .errorTo(System.out) + .shouldHaveExitValue(0); + } +} diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/net/URL/B5086147.java --- a/jdk/test/java/net/URL/B5086147.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/net/URL/B5086147.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,12 +24,13 @@ /** * @test * @bug 5086147 - * @run shell B5086147.sh + * @requires (os.family == "windows") + * @run main B5086147 * @summary File,URI,URL conversions are strange for UNC path */ -import java.net.*; -import java.io.*; +import java.io.File; +import java.net.URI; public class B5086147 { public static final void main( String[] aaParamters ) throws Exception{ diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/net/URL/B5086147.sh --- a/jdk/test/java/net/URL/B5086147.sh Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ -#! /bin/sh - -# -# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - - -OS=`uname -s` -case "$OS" in - SunOS | Linux | Darwin | AIX ) - exit 0 - ;; - CYGWIN* ) - PS=";" - FS="/" - ;; - Windows* ) - PS=";" - FS="\\" - ;; - * ) - echo "Unrecognized system!" - exit 1; - ;; -esac -${COMPILEJAVA}${FS}bin${FS}javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . ${TESTSRC}${FS}B5086147.java - -failures=0 - -echo '' -${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} B5086147 -if [ $? != 0 ]; then failures=`expr $failures + 1`; fi - -if [ "$failures" != "0" ]; then - echo $failures tests failed - exit 1; -fi diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/net/URLClassLoader/B5077773.java --- a/jdk/test/java/net/URLClassLoader/B5077773.java Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -import java.io.*; -import java.net.*; - -public class B5077773 { - - public static void main(String[] args) throws Exception { - URLClassLoader loader = new URLClassLoader (new URL[] {new URL("file:foo.jar")}); - /* This test will fail if the file below is removed from rt.jar */ - InputStream is = loader.getResourceAsStream ("javax/swing/text/rtf/charsets/mac.txt"); - if (is == null) { - System.out.println ("could not find mac.txt"); - return; - } - int c=0; - while ((is.read()) != -1) { - c++; - } - if (c == 26) /* size of bad file */ { - throw new RuntimeException ("Wrong mac.txt file was loaded"); - } - } -} diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/net/URLClassLoader/B5077773.sh --- a/jdk/test/java/net/URLClassLoader/B5077773.sh Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,66 +0,0 @@ -#! /bin/sh - -# -# Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# @test -# @author Michael McMahon -# @bug 5077773 -# @summary Change in behaviour w.r.t jdk1.4.2 when loading resourcebundles -# -# ${TESTJAVA} is pointing to the jre -# -# set platform-dependent variables - -OS=`uname -s` -case "$OS" in - SunOS | Darwin | AIX ) - PS=":" - FS="/" - ;; - Linux ) - PS=":" - FS="/" - ;; - CYGWIN* ) - PS=";" - FS="/" - ;; - Windows* ) - PS=";" - FS="\\" - ;; - * ) - echo "Unrecognized system!" - exit 1; - ;; -esac - -cp ${TESTSRC}${FS}foo.jar . - -${COMPILEJAVA}${FS}bin${FS}javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . \ - ${TESTSRC}${FS}B5077773.java - -WD=`pwd` -${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} B5077773 - diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/net/URLClassLoader/closetest/CloseTest.java --- a/jdk/test/java/net/URLClassLoader/closetest/CloseTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/net/URLClassLoader/closetest/CloseTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,24 +26,33 @@ * @bug 4167874 * @modules java.logging * jdk.httpserver + * jdk.compiler * @library ../../../../com/sun/net/httpserver - * @library /lib/testlibrary - * @build FileServerHandler jdk.testlibrary.FileUtils - * @run shell build.sh + * /lib/testlibrary + * /test/lib + * @build FileServerHandler JarUtils CompilerUtils * @run main/othervm CloseTest * @summary URL-downloaded jar files can consume all available file descriptors */ import java.io.File; +import java.io.IOException; import java.lang.reflect.Method; import java.net.URLClassLoader; import java.net.InetSocketAddress; import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + import com.sun.net.httpserver.HttpContext; import com.sun.net.httpserver.HttpServer; +import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; + public class CloseTest extends Common { - + private static final String WORK_DIR = System.getProperty("user.dir") + + "/"; // // needs two jar files test1.jar and test2.jar with following structure // @@ -54,39 +63,31 @@ // // and a directory hierarchy with the same structure/contents - public static void main (String args[]) throws Exception { + public static void main(String args[]) throws Exception { + setup(); - String workdir = System.getProperty("test.classes"); - if (workdir == null) { - workdir = args[0]; - } - if (!workdir.endsWith("/")) { - workdir = workdir+"/"; - } + startHttpServer(WORK_DIR + "serverRoot/"); - startHttpServer (workdir+"serverRoot/"); - - String testjar = workdir + "test.jar"; - copyFile (workdir+"test1.jar", testjar); - test (testjar, 1); + String testjar = WORK_DIR + "test.jar"; + copyFile(WORK_DIR + "test1.jar", testjar); + test(testjar, 1); // repeat test with different implementation // of test.jar (whose TestClass.getValue() returns 2 - - copyFile (workdir+"test2.jar", testjar); - test (testjar, 2); + copyFile(WORK_DIR + "test2.jar", testjar); + test(testjar, 2); // repeat test using a directory of files - String testdir=workdir+"testdir/"; - rm_minus_rf (new File(testdir)); - copyDir (workdir+"test1/", testdir); - test (testdir, 1); + String testdir = WORK_DIR + "testdir/"; + rm_minus_rf(new File(testdir)); + copyDir(WORK_DIR + "test1/", testdir); + test(testdir, 1); - testdir=workdir+"testdir/"; - rm_minus_rf (new File(testdir)); - copyDir (workdir+"test2/", testdir); - test (testdir, 2); - getHttpServer().stop (3); + testdir = WORK_DIR + "testdir/"; + rm_minus_rf(new File(testdir)); + copyDir(WORK_DIR + "test2/", testdir); + test(testdir, 2); + getHttpServer().stop(3); } // create a loader on jarfile (or directory), plus a http loader @@ -98,47 +99,48 @@ // check existing classes can be loaded // check boot classes can be loaded - static void test (String name, int expectedValue) throws Exception { - URL url = new URL ("file", null, name); + static void test(String name, int expectedValue) throws Exception { + + URL url = new URL("file", null, name); URL url2 = getServerURL(); - System.out.println ("Doing tests with URL: " + url + " and " + url2); + System.out.println("Doing tests with URL: " + url + " and " + url2); URL[] urls = new URL[2]; - urls[0] = url; - urls[1] = url2; - URLClassLoader loader = new URLClassLoader (urls); - Class testclass = loadClass ("com.foo.TestClass", loader, true); - Class class2 = loadClass ("Test", loader, true); // from http + urls[0] = url; + urls[1] = url2; + URLClassLoader loader = new URLClassLoader(urls); + Class testclass = loadClass("com.foo.TestClass", loader, true); + Class class2 = loadClass("Test", loader, true); // from http class2.newInstance(); Object test = testclass.newInstance(); Method method = testclass.getDeclaredMethods()[0]; // int getValue(); - int res = (Integer) method.invoke (test); + int res = (Integer) method.invoke(test); if (res != expectedValue) { - throw new RuntimeException ("wrong value from getValue() ["+res+ - "/"+expectedValue+"]"); + throw new RuntimeException("wrong value from getValue() [" + res + + "/" + expectedValue + "]"); } // should find /resource1 - URL u1 = loader.findResource ("com/foo/Resource1"); + URL u1 = loader.findResource("com/foo/Resource1"); if (u1 == null) { - throw new RuntimeException ("can't find com/foo/Resource1 in test1.jar"); + throw new RuntimeException("can't find com/foo/Resource1 in test1.jar"); } - loader.close (); + loader.close(); // should NOT find /resource2 even though it is in jar - URL u2 = loader.findResource ("com/foo/Resource2"); + URL u2 = loader.findResource("com/foo/Resource2"); if (u2 != null) { - throw new RuntimeException ("com/foo/Resource2 unexpected in test1.jar"); + throw new RuntimeException("com/foo/Resource2 unexpected in test1.jar"); } // load tests - loadClass ("com.foo.TestClass1", loader, false); - loadClass ("com.foo.TestClass", loader, true); - loadClass ("java.util.ArrayList", loader, true); + loadClass("com.foo.TestClass1", loader, false); + loadClass("com.foo.TestClass", loader, true); + loadClass("java.util.ArrayList", loader, true); // now check we can delete the path - rm_minus_rf (new File(name)); - System.out.println (" ... OK"); + rm_minus_rf(new File(name)); + System.out.println(" ... OK"); } static HttpServer httpServer; @@ -147,17 +149,54 @@ return httpServer; } - static URL getServerURL () throws Exception { + static URL getServerURL() throws Exception { int port = httpServer.getAddress().getPort(); - String s = "http://127.0.0.1:"+port+"/"; + String s = "http://127.0.0.1:" + port + "/"; return new URL(s); } - static void startHttpServer (String docroot) throws Exception { - httpServer = HttpServer.create (new InetSocketAddress(0), 10); - HttpContext ctx = httpServer.createContext ( + static void startHttpServer(String docroot) throws Exception { + httpServer = HttpServer.create(new InetSocketAddress(0), 10); + HttpContext ctx = httpServer.createContext( "/", new FileServerHandler(docroot) ); httpServer.start(); } + + /** + * Prepare jars files for the tests + */ + private static void setup () throws IOException { + String[] tests = new String[]{"test1", "test2"}; + Path workDir = Paths.get(WORK_DIR); + Path testSrc = Paths.get(System.getProperty("test.src")); + for (String test : tests) { + Path testSrcDir = testSrc.resolve(test); + Path testTargetDir = workDir.resolve(test); + // Compile sources for corresponding test + CompilerUtils.compile(testSrcDir, testTargetDir); + // Copy all resources + Path packages = Paths.get("com", "foo"); + Path copySrcDir = testSrcDir.resolve(packages); + Path copyTargetDir = testTargetDir.resolve(packages); + Files.createDirectories(copyTargetDir); + Path res1 = Paths.get("Resource1"); + Path res2 = Paths.get("Resource2"); + Files.copy(copySrcDir.resolve(res1), copyTargetDir.resolve(res1), + REPLACE_EXISTING); + Files.copy(copySrcDir.resolve(res2), copyTargetDir.resolve(res2), + REPLACE_EXISTING); + // Create jar + JarUtils.createJarFile(workDir.resolve(test + ".jar"), testTargetDir); + } + + // Copy and compile server test class + Path serverRoot = Paths.get("serverRoot"); + Path targetDir = workDir.resolve(serverRoot); + Path file = Paths.get("Test.java"); + Files.createDirectories(targetDir); + Files.copy(testSrc.resolve(serverRoot).resolve(file), + targetDir.resolve(file), REPLACE_EXISTING); + CompilerUtils.compile(targetDir, targetDir); + } } diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/net/URLClassLoader/closetest/Common.java --- a/jdk/test/java/net/URLClassLoader/closetest/Common.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/net/URLClassLoader/closetest/Common.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,7 +24,7 @@ import java.io.*; import java.net.*; import java.nio.file.Files; -import jdk.testlibrary.FileUtils; +import jdk.test.lib.util.FileUtils; import static java.nio.file.StandardCopyOption.*; public class Common { diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/net/URLClassLoader/closetest/GetResourceAsStream.java --- a/jdk/test/java/net/URLClassLoader/closetest/GetResourceAsStream.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/net/URLClassLoader/closetest/GetResourceAsStream.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,16 +24,25 @@ /** * @test * @bug 6899919 - * @library /lib/testlibrary - * @build jdk.testlibrary.FileUtils - * @run shell build2.sh + * @library /lib/testlibrary /test/lib + * @modules jdk.compiler + * @build JarUtils CompilerUtils * @run main/othervm GetResourceAsStream */ -import java.io.*; -import java.net.*; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.net.URLClassLoader; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import java.nio.file.StandardOpenOption; public class GetResourceAsStream extends Common { + private static final String WORK_DIR = System.getProperty("user.dir"); /* * We simply test various scenarios with class/resource files @@ -42,35 +51,30 @@ * on Windows. It will still run correctly on other platforms */ public static void main (String args[]) throws Exception { - - String workdir = System.getProperty("test.classes"); - if (workdir == null) { - workdir = args[0]; - } + setup(); /* the jar we copy for each test */ - File srcfile = new File (workdir, "foo.jar"); + File srcfile = new File(WORK_DIR, "foo.jar"); /* the jar we use for the test */ - File testfile = new File (workdir, "test.jar"); + File testfile = new File(WORK_DIR, "test.jar"); - copyFile (srcfile, testfile); - test (testfile, false, false); + copyFile(srcfile, testfile); + test(testfile, false, false); - copyFile (srcfile, testfile); - test (testfile, true, false); + copyFile(srcfile, testfile); + test(testfile, true, false); - copyFile (srcfile, testfile); - test (testfile, true, true); + copyFile(srcfile, testfile); + test(testfile, true, true); // repeat test using a directory of files - File testdir= new File (workdir, "testdir"); - File srcdir= new File (workdir, "test3"); + File testdir = new File(WORK_DIR, "testdir"); + File srcdir = new File(WORK_DIR, "test3"); - copyDir (srcdir, testdir); - test (testdir, true, false); - + copyDir(srcdir, testdir); + test(testdir, true, false); } // create a loader on jarfile (or directory) @@ -82,7 +86,7 @@ static void test (File file, boolean loadclass, boolean readall) throws Exception { - URL[] urls = new URL[] {file.toURL()}; + URL[] urls = new URL[] {file.toURI().toURL()}; System.out.println ("Doing tests with URL: " + urls[0]); URLClassLoader loader = new URLClassLoader (urls); if (loadclass) { @@ -97,7 +101,7 @@ loader.close (); - // shouuld not find bye.txt now + // should not find bye.txt now InputStream s1 = loader.getResourceAsStream("bye.txt"); if (s1 != null) { throw new RuntimeException ("closed loader returned resource"); @@ -107,4 +111,26 @@ rm_minus_rf (file); System.out.println (" ... OK"); } + + /** + * Prepare jars files for the tests + */ + private static void setup () throws IOException { + Path classes = Paths.get(WORK_DIR); + Path testSrc = Paths.get(System.getProperty("test.src"), + "test1", "com", "foo", "TestClass.java"); + Path targetDir = classes.resolve("test3"); + Path testTarget = targetDir.resolve("TestClass.java"); + Files.createDirectories(targetDir); + Files.copy(testSrc, testTarget, StandardCopyOption.REPLACE_EXISTING); + // Compile sources for corresponding test + CompilerUtils.compile(targetDir, targetDir); + // Prepare txt files + Files.write(targetDir.resolve("hello.txt"), "Hello world".getBytes(), + StandardOpenOption.CREATE); + Files.write(targetDir.resolve("bye.txt"), "Bye world".getBytes(), + StandardOpenOption.CREATE); + // Create jar + JarUtils.createJarFile(classes.resolve("foo.jar"), targetDir); + } } diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/net/URLClassLoader/closetest/build.sh --- a/jdk/test/java/net/URLClassLoader/closetest/build.sh Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,78 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# -# -# -# This script builds the test files for the test -# but not the actual test sources themselves. -# -if [ "${TESTSRC}" = "" ] -then - echo "TESTSRC not set. Test cannot execute. Failed." - exit 1 -fi -echo "TESTSRC=${TESTSRC}" - -if [ "${TESTJAVA}" = "" ] -then - echo "TESTJAVA not set. Test cannot execute. Failed." - exit 1 -fi -echo "TESTJAVA=${TESTJAVA}" - -if [ "${COMPILEJAVA}" = "" ]; then - COMPILEJAVA="${TESTJAVA}" -fi -echo "COMPILEJAVA=${COMPILEJAVA}" - -if [ "${TESTCLASSES}" = "" ] -then - echo "TESTCLASSES not set. Test cannot execute. Failed." - exit 1 -fi - -JAVAC="${COMPILEJAVA}/bin/javac" -JAR="${COMPILEJAVA}/bin/jar" - -rm -rf ${TESTCLASSES}/test1 -rm -rf ${TESTCLASSES}/test2 -rm -rf ${TESTCLASSES}/serverRoot -mkdir -p ${TESTCLASSES}/test1/com/foo -mkdir -p ${TESTCLASSES}/test2/com/foo -mkdir -p ${TESTCLASSES}/serverRoot - -cd ${TESTSRC}/test1/com/foo -cp * ${TESTCLASSES}/test1/com/foo -cd ${TESTCLASSES}/test1 -${JAVAC} ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} com/foo/*.java -${JAR} ${TESTTOOLVMOPTS} cvf ../test1.jar com/foo/*.class com/foo/Resource* - -cd ${TESTSRC}/test2/com/foo -cp * ${TESTCLASSES}/test2/com/foo -cd ${TESTCLASSES}/test2 -${JAVAC} ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} com/foo/*.java -${JAR} ${TESTTOOLVMOPTS} cvf ../test2.jar com/foo/*.class com/foo/Resource* - -cp ${TESTSRC}/serverRoot/Test.java ${TESTCLASSES}/serverRoot -cd ${TESTCLASSES}/serverRoot -${JAVAC} ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} Test.java diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/net/URLClassLoader/closetest/build2.sh --- a/jdk/test/java/net/URLClassLoader/closetest/build2.sh Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,58 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# -if [ "${TESTSRC}" = "" ] -then - echo "TESTSRC not set. Test cannot execute. Failed." - exit 1 -fi -echo "TESTSRC=${TESTSRC}" - -if [ "${TESTJAVA}" = "" ] -then - echo "TESTJAVA not set. Test cannot execute. Failed." - exit 1 -fi -echo "TESTJAVA=${TESTJAVA}" - -if [ "${TESTCLASSES}" = "" ] -then - echo "TESTCLASSES not set. Test cannot execute. Failed." - exit 1 -fi - -JAVAC="${TESTJAVA}/bin/javac" -JAR="${TESTJAVA}/bin/jar" - -rm -rf ${TESTCLASSES}/test3 -mkdir -p ${TESTCLASSES}/test3 - -echo "Hello world" > ${TESTCLASSES}/test3/hello.txt -echo "Bye world" > ${TESTCLASSES}/test3/bye.txt -cp ${TESTSRC}/test1/com/foo/TestClass.java ${TESTCLASSES}/test3 -cd ${TESTCLASSES}/test3 -${JAVAC} -d . TestClass.java - -${JAR} cvf foo.jar hello.txt bye.txt com/foo/TestClass.class -rm -f ../foo.jar -mv foo.jar .. diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @bug 5103449 + * @summary REGRESSION: getResourceAsStream is broken in JDK1.5.0-rc + * @library /test/lib + * @build jdk.test.lib.JDKToolFinder + * jdk.test.lib.process.ProcessTools + * Test + * @run main/othervm TestDriver + */ + +import jdk.test.lib.JDKToolFinder; +import jdk.test.lib.process.ProcessTools; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; + +public class TestDriver { + private static final String ARCHIVE_NAME = "test.jar"; + private static final String TEST_NAME = "Test"; + private static final String POLICY_FILE = "policy"; + public static void main(String[] args) + throws Throwable { + + Path userDir = Paths.get(System.getProperty("user.dir")); + String java = JDKToolFinder.getTestJDKTool("java"); + String basename = userDir.getFileName().toString(); + setup(userDir); + ProcessBuilder[] tests = new ProcessBuilder[]{ + new ProcessBuilder( + java, TEST_NAME, "./" + ARCHIVE_NAME + ), + new ProcessBuilder( + java, "-cp", ".", + "-Djava.security.policy=file:./policy", + "-Djava.security.manager", + TEST_NAME, "./" + ARCHIVE_NAME + ), + new ProcessBuilder( + java, "-cp", ".", + "-Djava.security.policy=file:./policy", + "-Djava.security.manager", + TEST_NAME, "./" + ARCHIVE_NAME + ), + new ProcessBuilder( + java, "-cp", "..", + "-Djava.security.policy=file:../policy", + "-Djava.security.manager", + TEST_NAME, "../" + ARCHIVE_NAME + ).directory(userDir.resolve("tmp").toFile()), + new ProcessBuilder( + java, "-cp", basename, + "-Djava.security.policy=file:" + basename + "/policy", + "-Djava.security.manager", + TEST_NAME, basename + "/" + ARCHIVE_NAME + ).directory(userDir.resolve("..").toFile())}; + for (ProcessBuilder test : tests) { + runTest(test); + } + } + + private static void setup(Path userDir) throws IOException { + Path src = Paths.get(System.getProperty("test.src")); + Path testJar = src.resolve(ARCHIVE_NAME); + Path policy = src.resolve(POLICY_FILE); + Path testClass = Paths.get(System.getProperty("test.classes"), + TEST_NAME + ".class"); + Files.copy(testJar, userDir.resolve(ARCHIVE_NAME), REPLACE_EXISTING); + Files.copy(policy, userDir.resolve(POLICY_FILE), REPLACE_EXISTING); + Files.copy(testClass, userDir.resolve(TEST_NAME + ".class"), + REPLACE_EXISTING); + Files.createDirectories(userDir.resolve("tmp")); + } + + private static void runTest(ProcessBuilder pb) throws Exception { + System.out.println("Testing with command: [" + pb.command() + "]"); + ProcessTools.executeProcess(pb) + .outputTo(System.out) + .errorTo(System.err) + .shouldHaveExitValue(0); + } +} diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +grant { + permission java.lang.RuntimePermission "createClassLoader"; +}; diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/net/URLClassLoader/getresourceasstream/test.sh --- a/jdk/test/java/net/URLClassLoader/getresourceasstream/test.sh Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,71 +0,0 @@ -#!/bin/sh - -# -# Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -set -x -# @test -# @bug 5103449 -# @run shell test.sh -# @summary REGRESSION: getResourceAsStream is broken in JDK1.5.0-rc -# - - -cat << POLICY > policy -grant { - permission java.lang.RuntimePermission "createClassLoader"; -}; -POLICY - -checkExit () { - if [ $? != 0 ]; then - exit $1; - fi -} - -${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . ${TESTSRC}/Test.java -cp ${TESTSRC}/test.jar . - -${TESTJAVA}/bin/java ${TESTVMOPTS} Test ./test.jar -checkExit 1 - -# try with security manager - -${TESTJAVA}/bin/java ${TESTVMOPTS} -Djava.security.policy=file:./policy \ - -Djava.security.manager Test ./test.jar -checkExit 2 - -mkdir tmp -cd tmp -${TESTJAVA}/bin/java ${TESTVMOPTS} -Djava.security.policy=file:../policy \ - -cp .. -Djava.security.manager Test ../test.jar -checkExit 3 - -cd .. -THISDIR=$(basename $(pwd)) -cd .. -${TESTJAVA}/bin/java ${TESTVMOPTS} -Djava.security.policy=file:$THISDIR/policy \ - -cp $THISDIR -Djava.security.manager Test $THISDIR/test.jar -checkExit 4 - -exit 0 diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/net/URLClassLoader/sealing/CheckSealed.java --- a/jdk/test/java/net/URLClassLoader/sealing/CheckSealed.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/net/URLClassLoader/sealing/CheckSealed.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,13 +21,6 @@ * questions. */ -/* - * @test - * @bug 4244970 - * @summary Test to see if sealing violation is detected correctly - * @run shell checksealed.sh - * - */ public class CheckSealed { public static void main(String[] argv) throws Exception { diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @bug 4244970 + * @summary Test to see if sealing violation is detected correctly + * @library /test/lib + * @build jdk.test.lib.JDKToolFinder + * jdk.test.lib.process.OutputAnalyzer + * @run main CheckSealedTest + */ + +import jdk.test.lib.JDKToolFinder; +import jdk.test.lib.process.ProcessTools; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.List; + +import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; + +public class CheckSealedTest { + private static final String ARCHIVE_NAME = "b.jar"; + private static final String TEST_NAME = "CheckSealed"; + public static void main(String[] args) + throws Throwable { + + String baseDir = System.getProperty("user.dir") + File.separator; + String javac = JDKToolFinder.getTestJDKTool("javac"); + String java = JDKToolFinder.getTestJDKTool("java"); + + setup(baseDir); + String srcDir = System.getProperty("test.src"); + String cp = srcDir + File.separator + "a" + File.pathSeparator + + srcDir + File.separator + "b.jar" + File.pathSeparator + + "."; + List 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 b7453e312305 -r 3b471ff2785c jdk/test/java/net/URLClassLoader/sealing/checksealed.sh --- a/jdk/test/java/net/URLClassLoader/sealing/checksealed.sh Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,64 +0,0 @@ -#! /bin/sh - -# -# Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# - -OS=`uname -s` -case "$OS" in - SunOS | Darwin | AIX ) - PS=":" - FS="/" - ;; - Linux ) - PS=":" - FS="/" - ;; - CYGWIN* ) - PS=";" - FS="/" - ;; - Windows* ) - PS=";" - FS="\\" - ;; - * ) - echo "Unrecognized system!" - exit 1; - ;; -esac - - -if [ x"$TESTJAVA" = x ]; then TESTJAVA=$1; fi -if [ x"$COMPILEJAVA" = x ]; then COMPILEJAVA=$1; fi -if [ x"$TESTSRC" = x ]; then TESTSRC=.; fi - -CLASSPATH=".${PS}${TESTSRC}${FS}a${PS}${TESTSRC}${FS}b.jar" - -${COMPILEJAVA}${FS}bin${FS}javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -classpath "${CLASSPATH}" -d . \ - ${TESTSRC}${FS}CheckSealed.java -${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -cp "${CLASSPATH}" CheckSealed 1 -if [ $? != 0 ]; then exit 1; fi -${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -cp "${CLASSPATH}" CheckSealed 2 -if [ $? != 0 ]; then exit 1; fi diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/net/URLConnection/6212146/Test.java --- a/jdk/test/java/net/URLConnection/6212146/Test.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/net/URLConnection/6212146/Test.java Wed Jul 05 23:32:48 2017 +0200 @@ -21,49 +21,43 @@ * questions. */ -import java.net.*; -import java.io.*; +import java.net.URL; +import java.net.URLConnection; +import java.nio.file.Paths; public class Test { public static void main(String[] args) throws Exception { - String BASE_DIR = args[0]; - String ARCHIVE_NAME = args[1]; - String lProperty = System.getProperty( "do.iterations", "5000" ); - int lRepetitions = new Integer( lProperty ).intValue(); - System.out.println ( "Start creating copys of the archive, " + lRepetitions + " times" ); - for( int i = 0; i < lRepetitions; i++ ) { - // Copy the given jar file and add a prefix - copyFile( BASE_DIR, ARCHIVE_NAME, i); + String baseDir = args[0]; + String archiveName = args[1]; + String lProperty = System.getProperty("do.iterations", "5000"); + int lRepetitions = Integer.valueOf(lProperty); + System.out.println("Start creating copys of the archive, " + + lRepetitions + " times"); + for (int i = 0; i < lRepetitions; i++) { + // Copy the given jar file and add a prefix + copyFile(baseDir, archiveName, i); + } + System.out.println("Start opening the archives archive, " + + lRepetitions + " times"); + System.out.println("First URL is jar:" + Paths.get(baseDir, + 0 + archiveName).toUri() + "!/foo/Test.class"); + for (int i = 0; i < lRepetitions; i++) { + // Create URL + String lURLPath = "jar:" + Paths.get(baseDir, i + + archiveName).toUri() + "!/foo/Test.class"; + URL lURL = new URL(lURLPath); + // Open URL Connection + try { + URLConnection lConnection = lURL.openConnection(); + lConnection.getInputStream(); + } catch (java.io.FileNotFoundException fnfe) { + // Ignore this one because we expect this one + } catch (java.util.zip.ZipException ze) { + throw new RuntimeException("Test failed: " + ze.getMessage()); + } } - System.out.println ( "Start opening the archives archive, " + lRepetitions + " times" ); - System.out.println ( "First URL is jar:file://" + BASE_DIR + "1" + ARCHIVE_NAME + "!/foo/Test.class"); - for( int i = 0; i < lRepetitions; i++ ) { - // Create ULR - String lURLPath = "jar:file://" + BASE_DIR + i + ARCHIVE_NAME + "!/foo/Test.class"; - URL lURL = new URL( lURLPath ); - // Open URL Connection - try { - URLConnection lConnection = lURL.openConnection(); - lConnection.getInputStream(); - } catch( java.io.FileNotFoundException fnfe ) { - // Ignore this one because we expect this one - } catch( java.util.zip.ZipException ze ) { - throw new RuntimeException ("Test failed: " + ze.getMessage()); - } - } - //System.out.println ( "Done testing, waiting 20 seconds for checking" ); - //System.out.println ( "Cleaning up"); - //for( int i = 0; i < lRepetitions; i++ ) { - // Copy the given jar file and add a prefix - //deleteFile( BASE_DIR, i, ARCHIVE_NAME); - ////} - } - - private static void deleteFile (String BASE_DIR, int pIndex, String pArchiveName) { - java.io.File file = new java.io.File (BASE_DIR, pIndex + pArchiveName ); - file.delete (); } private static void copyFile( String pBaseDir, String pArchiveName, int pIndex) { diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @bug 6212146 + * @summary URLConnection.connect() fails on JAR Entry it creates + * file handler leak + * @library /test/lib + * @build jdk.test.lib.JDKToolFinder + * jdk.test.lib.process.ProcessTools + * Test + * @run main/othervm TestDriver + */ + +import jdk.test.lib.JDKToolFinder; +import jdk.test.lib.process.ProcessTools; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; + +public class TestDriver { + private static final String BASE_DIR = System.getProperty("user.dir") + + "/jars/"; + private static final String ARCHIVE_NAME = "test.jar"; + private static final String CMD_ULIMIT = "ulimit -n 300;"; + + public static void main(String[] args) + throws Throwable { + setup(BASE_DIR); + String testCMD = CMD_ULIMIT + JDKToolFinder.getTestJDKTool("java") + + " Test " + BASE_DIR + " " + ARCHIVE_NAME; + boolean isWindows = System.getProperty("os.name").startsWith("Windows"); + if (isWindows) { + testCMD = testCMD.replace("\\", "/"); + } + ProcessTools.executeCommand("sh", "-c", testCMD) + .outputTo(System.out) + .errorTo(System.err) + .shouldHaveExitValue(0); + } + + private static void setup(String baseDir) throws IOException { + Path testJar = Paths.get(System.getProperty("test.src"), ARCHIVE_NAME); + Path targetDir = Paths.get(baseDir); + Files.createDirectories(targetDir); + Files.copy(testJar, targetDir.resolve(ARCHIVE_NAME), REPLACE_EXISTING); + } +} diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/net/URLConnection/6212146/test.sh --- a/jdk/test/java/net/URLConnection/6212146/test.sh Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,73 +0,0 @@ -#!/bin/sh - -# -# Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# @test -# @run shell/timeout=380 test.sh -# @bug 6212146 -# @summary URLConnection.connect() fails on JAR Entry it creates file handler leak -# -# set platform-dependent variables - -OS=`uname -s` -case "$OS" in - SunOS | Darwin | AIX ) - PS=":" - FS="/" - ;; - Linux ) - PS=":" - FS="/" - ;; - CYGWIN* ) - PS=";" - FS="/" - ;; - Windows* ) - PS=";" - FS="\\" - ;; - * ) - echo "Unrecognized system!" - exit 1; - ;; -esac - -if [ -d jars ]; then - rm -rf jars -fi - -mkdir jars - -cp ${TESTSRC}${FS}test.jar jars - -${COMPILEJAVA}${FS}bin${FS}javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . ${TESTSRC}${FS}Test.java - -WD=`pwd` -ulimit -H -n 300 -${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} Test ${WD}/jars/ test.jar -result=$? -rm -rf jars -exit $? diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/net/URLConnection/UNCTest.java --- a/jdk/test/java/net/URLConnection/UNCTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/net/URLConnection/UNCTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,7 +21,16 @@ * questions. */ -import java.net.*; +/** + * @test + * @bug 4401485 + * @requires (os.family == "windows") + * @summary Check that URL.openConnection() doesn't open connection to UNC + * @run main UNCTest file://jdk/LOCAL-JAVA/jdk1.4/win/README.txt + */ + +import java.net.URL; +import java.net.URLConnection; public class UNCTest { public static void main(String args[]) throws Exception { diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/net/URLConnection/UNCTest.sh --- a/jdk/test/java/net/URLConnection/UNCTest.sh Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -#!/bin/sh - -# -# Copyright (c) 2001, 2002, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - - -# @test -# @bug 4401485 -# @run shell UNCTest.sh -# @summary Check that URL.openConnection() doesn't open connection -# to UNC. - -UNC="file://jdk/LOCAL-JAVA/jdk1.4/win/README.txt" - -OS=`uname -s` -case "$OS" in - Windows_95 | Windows_98 | Windows_NT ) - ${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . ${TESTSRC}\\UNCTest.java - ${TESTJAVA}/bin/java ${TESTVMOPTS} UNCTest ${UNC} - exit - ;; - - * ) - echo "This test is not intended for this OS - passing test" - exit 0 - ;; -esac diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/net/httpclient/RequestBodyTest.java --- a/jdk/test/java/net/httpclient/RequestBodyTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/net/httpclient/RequestBodyTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,7 @@ * @modules jdk.incubator.httpclient * java.logging * jdk.httpserver - * @library /lib/testlibrary/ + * @library /lib/testlibrary/ /test/lib * @compile ../../../com/sun/net/httpserver/LogFilter.java * @compile ../../../com/sun/net/httpserver/FileServerHandler.java * @build LightWeightHttpServer @@ -52,7 +52,7 @@ import java.util.concurrent.Executors; import java.util.function.Supplier; import javax.net.ssl.SSLContext; -import jdk.testlibrary.FileUtils; +import jdk.test.lib.util.FileUtils; import static java.nio.charset.StandardCharsets.*; import static java.nio.file.StandardOpenOption.*; import static jdk.incubator.http.HttpRequest.BodyProcessor.*; diff -r b7453e312305 -r 3b471ff2785c 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 Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/net/httpclient/whitebox/jdk.incubator.httpclient/jdk/incubator/http/ResponseHeadersTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -214,10 +214,6 @@ protected ByteBuffer readImpl() throws IOException { throw new AssertionError("Bad test assumption: should not have reached here!"); } - @Override - protected int readImpl(ByteBuffer buffer) throws IOException { - throw new AssertionError("Bad test assumption: should not have reached here!"); - } } public static HttpHeaders createResponseHeaders(ByteBuffer buffer) diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/net/spi/URLStreamHandlerProvider/Basic.java --- a/jdk/test/java/net/spi/URLStreamHandlerProvider/Basic.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/net/spi/URLStreamHandlerProvider/Basic.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,7 +45,7 @@ import javax.tools.StandardJavaFileManager; import javax.tools.StandardLocation; import javax.tools.ToolProvider; -import jdk.testlibrary.FileUtils; +import jdk.test.lib.util.FileUtils; import jdk.testlibrary.JDKToolFinder; import static java.lang.String.format; import static java.util.Arrays.asList; @@ -55,8 +55,8 @@ * @bug 8064924 * @modules jdk.compiler * @summary Basic test for URLStreamHandlerProvider - * @library /lib/testlibrary - * @build jdk.testlibrary.FileUtils jdk.testlibrary.JDKToolFinder + * @library /lib/testlibrary /test/lib + * @build jdk.testlibrary.JDKToolFinder * @compile Basic.java Child.java * @run main Basic */ diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/nio/Buffer/LimitDirectMemory.java --- a/jdk/test/java/nio/Buffer/LimitDirectMemory.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/nio/Buffer/LimitDirectMemory.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,6 +21,35 @@ * questions. */ +/* + * @test + * @bug 4627316 6743526 + * @summary Test option to limit direct memory allocation + * @requires (os.arch == "x86_64") | (os.arch == "amd64") | (os.arch == "sparcv9") + * @library /test/lib + * + * @summary Test: memory is properly limited using multiple buffers + * @run main/othervm -XX:MaxDirectMemorySize=10 LimitDirectMemory true 10 1 + * @run main/othervm -XX:MaxDirectMemorySize=1k LimitDirectMemory true 1k 100 + * @run main/othervm -XX:MaxDirectMemorySize=10m LimitDirectMemory true 10m 10m + * + * @summary Test: We can increase the amount of available memory + * @run main/othervm -XX:MaxDirectMemorySize=65M LimitDirectMemory false 64M 65M + * + * @summary Test: Exactly the default amount of memory is available + * @run main/othervm LimitDirectMemory false 10 1 + * @run main/othervm -Xmx64m LimitDirectMemory false 0 DEFAULT + * @run main/othervm -Xmx64m LimitDirectMemory true 0 DEFAULT+1 + * + * @summary Test: We should be able to eliminate direct memory allocation entirely + * @run main/othervm -XX:MaxDirectMemorySize=0 LimitDirectMemory true 0 1 + * + * @summary Test: Setting the system property should not work so we should be able + * to allocate the default amount + * @run main/othervm -Dsun.nio.MaxDirectMemorySize=1K -Xmx64m + * LimitDirectMemory false DEFAULT-1 DEFAULT/2 + */ + import java.nio.ByteBuffer; import java.util.Properties; @@ -28,8 +57,13 @@ private static final int K = 1024; public static void main(String [] args) throws Exception { - if (args.length < 2) - throw new RuntimeException(); + if (args.length < 2) { + throw new IllegalArgumentException("Usage: " + + "java LimitDirectMemory" + + " " + + " " + + " "); + } boolean throwp = parseThrow(args[0]); int size = parseSize(args[1]); int incr = (args.length > 2 ? parseSize(args[2]) : size); diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/nio/Buffer/LimitDirectMemory.sh --- a/jdk/test/java/nio/Buffer/LimitDirectMemory.sh Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,93 +0,0 @@ -#!/bin/sh - -# -# Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# @test -# @bug 4627316 6743526 -# @summary Test option to limit direct memory allocation -# -# @requires (os.arch == "x86_64") | (os.arch == "amd64") | (os.arch == "sparcv9") -# @build LimitDirectMemory -# @run shell LimitDirectMemory.sh - -TMP1=tmp_$$ - -runTest() { - echo "Testing: $*" - ${TESTJAVA}/bin/java ${TESTVMOPTS} $* - if [ $? -eq 0 ] - then echo "--- passed as expected" - else - echo "--- failed" - exit 1 - fi -} - - -launchFail() { - echo "Testing: -XX:MaxDirectMemorySize=$* -cp ${TESTCLASSES} \ - LimitDirectMemory true DEFAULT DEFAULT+1M" - ${TESTJAVA}/bin/java ${TESTVMOPTS} -XX:MaxDirectMemorySize=$* -cp ${TESTCLASSES} \ - LimitDirectMemory true DEFAULT DEFAULT+1M > ${TMP1} 2>&1 - cat ${TMP1} - cat ${TMP1} | grep -s "Unrecognized VM option: \'MaxDirectMemorySize=" - if [ $? -ne 0 ] - then echo "--- failed as expected" - else - echo "--- failed" - exit 1 - fi -} - -# $java LimitDirectMemory throwp fill_direct_memory size_per_buffer - -# Memory is properly limited using multiple buffers. -runTest -XX:MaxDirectMemorySize=10 -cp ${TESTCLASSES} LimitDirectMemory true 10 1 -runTest -XX:MaxDirectMemorySize=1k -cp ${TESTCLASSES} LimitDirectMemory true 1k 100 -runTest -XX:MaxDirectMemorySize=10m -cp ${TESTCLASSES} LimitDirectMemory true 10m 10m - -# We can increase the amount of available memory. -runTest -XX:MaxDirectMemorySize=65M -cp ${TESTCLASSES} \ - LimitDirectMemory false 64M 65M - -# Exactly the default amount of memory is available. -runTest -cp ${TESTCLASSES} LimitDirectMemory false 10 1 -runTest -Xmx64m -cp ${TESTCLASSES} LimitDirectMemory false 0 DEFAULT -runTest -Xmx64m -cp ${TESTCLASSES} LimitDirectMemory true 0 DEFAULT+1 - -# We should be able to eliminate direct memory allocation entirely. -runTest -XX:MaxDirectMemorySize=0 -cp ${TESTCLASSES} LimitDirectMemory true 0 1 - -# Setting the system property should not work so we should be able to allocate -# the default amount. -runTest -Dsun.nio.MaxDirectMemorySize=1K -Xmx64m -cp ${TESTCLASSES} \ - LimitDirectMemory false DEFAULT-1 DEFAULT/2 - -# Various bad values fail to launch the VM. -launchFail foo -launchFail 10kmt -launchFail -1 - -# Clean-up -rm ${TMP1} diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4627316 6743526 + * @summary Test option to limit direct memory allocation, + * various bad values fail to launch the VM + * @requires (os.arch == "x86_64") | (os.arch == "amd64") | (os.arch == "sparcv9") + * @library /test/lib + * + * @run main LimitDirectMemoryNegativeTest foo + * @run main LimitDirectMemoryNegativeTest 10kmt + * @run main LimitDirectMemoryNegativeTest -1 + */ + +import jdk.test.lib.process.ProcessTools; + +public class LimitDirectMemoryNegativeTest { + + private static final String ERR = "Improperly specified VM option 'MaxDirectMemorySize="; + + public static void main(String[] args) throws Exception { + if (args.length != 1) { + throw new IllegalArgumentException("missing size argument"); + } + + int exitCode = ProcessTools.executeTestJava( + "-XX:MaxDirectMemorySize=" + args[0], + LimitDirectMemoryNegativeTest.class.getName()) + .shouldContain(ERR + args[0]) + .getExitValue(); + if (exitCode != 1) { + throw new RuntimeException("Unexpected exit code: " + exitCode); + } + } +} diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/nio/ByteOrder/NativeOrder.java --- a/jdk/test/java/nio/ByteOrder/NativeOrder.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/nio/ByteOrder/NativeOrder.java Wed Jul 05 23:32:48 2017 +0200 @@ -32,12 +32,19 @@ public static void main(String[] args) throws Exception { ByteOrder bo = ByteOrder.nativeOrder(); - System.err.println(bo); + System.err.println("ByteOrder.nativeOrder:" + bo); String arch = System.getProperty("os.arch"); + System.err.println("os.arch:" + arch); if (((arch.equals("i386") && (bo != ByteOrder.LITTLE_ENDIAN))) || + ((arch.equals("amd64") && (bo != ByteOrder.LITTLE_ENDIAN))) || + ((arch.equals("x86_64") && (bo != ByteOrder.LITTLE_ENDIAN))) || + ((arch.equals("ppc64") && (bo != ByteOrder.BIG_ENDIAN))) || + ((arch.equals("ppc64le") && (bo != ByteOrder.LITTLE_ENDIAN))) || + ((arch.equals("s390x") && (bo != ByteOrder.BIG_ENDIAN))) || ((arch.equals("sparc") && (bo != ByteOrder.BIG_ENDIAN)))) { throw new Exception("Wrong byte order"); } + System.err.println("test is OK"); } } diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/nio/channels/AsynchronousChannelGroup/AsExecutor.java --- a/jdk/test/java/nio/channels/AsynchronousChannelGroup/AsExecutor.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/nio/channels/AsynchronousChannelGroup/AsExecutor.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,12 +21,21 @@ * questions. */ -import java.nio.channels.AsynchronousChannelGroup; -import java.util.concurrent.*; +/* + * @test + * @bug 4607272 + * @summary tests tasks can be submitted to a channel group's thread pool. + * @library /lib/testlibrary bootlib + * @build JarUtils PrivilegedThreadFactory Attack + * @run driver SetupJar + * @run main/othervm -Xbootclasspath/a:privileged.jar AsExecutor + */ -/** - * Test that arbitrary tasks can be submitted to a channel group's thread pool. - */ +import java.nio.channels.AsynchronousChannelGroup; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadFactory; public class AsExecutor { diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/nio/channels/AsynchronousChannelGroup/Attack.java --- a/jdk/test/java/nio/channels/AsynchronousChannelGroup/Attack.java Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -import java.net.*; -import java.io.IOException; -import java.util.concurrent.CountDownLatch; - -/** - * A task that attempts to attack the current host. - */ - -public class Attack implements Runnable { - private final CountDownLatch latch = new CountDownLatch(1); - private volatile boolean failedDueToSecurityException; - - public void Attack() { - // check class is on boot class path - if (Attack.class.getClassLoader() != null) - throw new RuntimeException("Attack class not on boot class path"); - } - - @Override - public void run() { - try { - new Socket("127.0.0.1", 9999).close(); - throw new RuntimeException("Connected (not expected)"); - } catch (IOException e) { - throw new RuntimeException("IOException (not expected)"); - } catch (SecurityException e) { - failedDueToSecurityException = true; - } finally { - latch.countDown(); - } - } - - public void waitUntilDone() throws InterruptedException { - latch.await(); - } - - public boolean failedDueToSecurityException() { - return failedDueToSecurityException; - } -} diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/nio/channels/AsynchronousChannelGroup/PrivilegedThreadFactory.java --- a/jdk/test/java/nio/channels/AsynchronousChannelGroup/PrivilegedThreadFactory.java Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -import java.util.concurrent.ThreadFactory; -import java.security.AccessController; -import java.security.PrivilegedAction; - -/** - * The "privileged" ThreadFactory used by the AsExecutor test. - */ - -public class PrivilegedThreadFactory implements ThreadFactory { - public void PrivilegedThreadPoolFactory() { - // check class is on boot class path - if (PrivilegedThreadFactory.class.getClassLoader() != null) - throw new RuntimeException("PrivilegedThreadFactory class not on boot class path"); - } - - @Override - public Thread newThread(final Runnable r) { - return AccessController.doPrivileged(new PrivilegedAction() { - @Override - public Thread run() { - Thread t = new Thread(r); - t.setDaemon(true); - return t; - } - }); - } -} diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.nio.file.Path; +import java.nio.file.Paths; + +public class SetupJar { + + public static void main(String args[]) throws Exception { + Path classes = Paths.get(System.getProperty("test.classes", "")); + JarUtils.createJarFile(Paths.get("privileged.jar"), + classes.resolve("bootlib")); + } +} diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.io.IOException; +import java.net.Socket; +import java.util.concurrent.CountDownLatch; + +/** + * A task that attempts to attack the current host. + */ + +public class Attack implements Runnable { + private final CountDownLatch latch = new CountDownLatch(1); + private volatile boolean failedDueToSecurityException; + + public void Attack() { + // check class is on boot class path + if (Attack.class.getClassLoader() != null) + throw new RuntimeException("Attack class not on boot class path"); + } + + @Override + public void run() { + try { + new Socket("127.0.0.1", 9999).close(); + throw new RuntimeException("Connected (not expected)"); + } catch (IOException e) { + throw new RuntimeException("IOException (not expected)"); + } catch (SecurityException e) { + failedDueToSecurityException = true; + } finally { + latch.countDown(); + } + } + + public void waitUntilDone() throws InterruptedException { + latch.await(); + } + + public boolean failedDueToSecurityException() { + return failedDueToSecurityException; + } +} diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.util.concurrent.ThreadFactory; +import java.security.AccessController; +import java.security.PrivilegedAction; + +/** + * The "privileged" ThreadFactory used by the AsExecutor test. + */ + +public class PrivilegedThreadFactory implements ThreadFactory { + public void PrivilegedThreadPoolFactory() { + // check class is on boot class path + if (PrivilegedThreadFactory.class.getClassLoader() != null) + throw new RuntimeException("PrivilegedThreadFactory class not on boot class path"); + } + + @Override + public Thread newThread(final Runnable r) { + return AccessController.doPrivileged(new PrivilegedAction() { + @Override + public Thread run() { + Thread t = new Thread(r); + t.setDaemon(true); + return t; + } + }); + } +} diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/nio/channels/AsynchronousChannelGroup/run_any_task.sh --- a/jdk/test/java/nio/channels/AsynchronousChannelGroup/run_any_task.sh Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -# -# Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# @test -# @bug 4607272 -# @summary Unit test for AsynchronousChannelGrou#execute -# @build AsExecutor PrivilegedThreadFactory Attack -# @run shell run_any_task.sh - -# if TESTJAVA isn't set then we assume an interactive run. - -if [ -z "$TESTJAVA" ]; then - TESTSRC=. - TESTCLASSES=. - JAVA=java - JAR=jar -else - JAVA="${TESTJAVA}/bin/java" - JAR="${TESTJAVA}/bin/jar" -fi - -echo "Creating JAR file ..." -$JAR -cf "${TESTCLASSES}/Privileged.jar" \ - -C "${TESTCLASSES}" PrivilegedThreadFactory.class \ - -C "${TESTCLASSES}" PrivilegedThreadFactory\$1.class \ - -C "${TESTCLASSES}" Attack.class - -echo "Running test ..." -$JAVA ${TESTVMOPTS} \ - -Xbootclasspath/a:"${TESTCLASSES}/Privileged.jar" \ - -classpath "${TESTCLASSES}" \ - AsExecutor diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/nio/channels/AsynchronousSocketChannel/Basic.java --- a/jdk/test/java/nio/channels/AsynchronousSocketChannel/Basic.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/nio/channels/AsynchronousSocketChannel/Basic.java Wed Jul 05 23:32:48 2017 +0200 @@ -24,8 +24,7 @@ /* @test * @bug 4607272 6842687 6878369 6944810 7023403 * @summary Unit test for AsynchronousSocketChannel(use -Dseed=X to set PRNG seed) - * @library /lib/testlibrary/ - * @build jdk.testlibrary.* + * @library /test/lib * @run main Basic -skipSlowConnectTest * @key randomness intermittent */ @@ -40,7 +39,7 @@ import java.util.Set; import java.util.concurrent.*; import java.util.concurrent.atomic.*; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; public class Basic { private static final Random RAND = RandomFactory.getRandom(); diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/nio/channels/FileChannel/Transfer.java --- a/jdk/test/java/nio/channels/FileChannel/Transfer.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/nio/channels/FileChannel/Transfer.java Wed Jul 05 23:32:48 2017 +0200 @@ -25,8 +25,7 @@ * @bug 4434723 4482726 4559072 4795550 5081340 5103988 6984545 * @summary Test FileChannel.transferFrom and transferTo (use -Dseed=X to set PRNG seed) * @library .. - * @library /lib/testlibrary/ - * @build jdk.testlibrary.* + * @library /test/lib * @run testng/timeout=300 Transfer * @key randomness */ @@ -51,7 +50,7 @@ import java.util.Random; import java.util.concurrent.TimeUnit; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; import org.testng.annotations.Test; diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/nio/channels/Selector/SelectAndClose.java --- a/jdk/test/java/nio/channels/Selector/SelectAndClose.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/nio/channels/Selector/SelectAndClose.java Wed Jul 05 23:32:48 2017 +0200 @@ -23,7 +23,6 @@ /* @test * @bug 5004077 - * @key intermittent * @summary Check blocking of select and close */ diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/nio/channels/Selector/WakeupAfterClose.java --- a/jdk/test/java/nio/channels/Selector/WakeupAfterClose.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/nio/channels/Selector/WakeupAfterClose.java Wed Jul 05 23:32:48 2017 +0200 @@ -24,7 +24,6 @@ /* @test * @bug 6524172 * @summary Invoking wakeup on closed Selector can throw NPE if close resets interrupt status - * @key intermittent */ import java.io.IOException; diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/nio/channels/SocketChannel/VectorIO.java --- a/jdk/test/java/nio/channels/SocketChannel/VectorIO.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/nio/channels/SocketChannel/VectorIO.java Wed Jul 05 23:32:48 2017 +0200 @@ -23,8 +23,7 @@ /* @test * @summary Test socketchannel vector IO (use -Dseed=X to set PRNG seed) - * @library .. /lib/testlibrary/ - * @build jdk.testlibrary.RandomFactory + * @library .. /test/lib * @run main VectorIO * @key randomness */ @@ -34,7 +33,7 @@ import java.nio.*; import java.nio.channels.*; import java.util.*; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; public class VectorIO { diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/nio/file/FileStore/Basic.java --- a/jdk/test/java/nio/file/FileStore/Basic.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/nio/file/FileStore/Basic.java Wed Jul 05 23:32:48 2017 +0200 @@ -25,9 +25,7 @@ * @bug 4313887 6873621 6979526 7006126 7020517 * @summary Unit test for java.nio.file.FileStore * @key intermittent - * @library .. - * @library .. /lib/testlibrary - * @build jdk.testlibrary.FileUtils + * @library .. /test/lib * @run main Basic */ @@ -35,8 +33,8 @@ import java.nio.file.attribute.*; import java.io.File; import java.io.IOException; -import java.util.*; -import jdk.testlibrary.FileUtils; + +import jdk.test.lib.util.FileUtils; public class Basic { diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/nio/file/FileSystem/Basic.java --- a/jdk/test/java/nio/file/FileSystem/Basic.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/nio/file/FileSystem/Basic.java Wed Jul 05 23:32:48 2017 +0200 @@ -24,8 +24,7 @@ /* @test * @bug 4313887 6838333 8132497 * @summary Unit test for java.nio.file.FileSystem - * @library .. /lib/testlibrary - * @build jdk.testlibrary.FileUtils + * @library .. /test/lib * @run main/othervm Basic */ @@ -41,7 +40,7 @@ import java.nio.file.Paths; import java.nio.file.ProviderNotFoundException; import java.util.HashMap; -import jdk.testlibrary.FileUtils; +import jdk.test.lib.util.FileUtils; /** * Simple sanity checks for java.nio.file.FileSystem diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/nio/file/Files/CopyAndMove.java --- a/jdk/test/java/nio/file/Files/CopyAndMove.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/nio/file/Files/CopyAndMove.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,8 +24,8 @@ /* @test * @bug 4313887 6838333 6917021 7006126 6950237 8006645 * @summary Unit test for java.nio.file.Files copy and move methods (use -Dseed=X to set PRNG seed) - * @library .. /lib/testlibrary/ - * @build jdk.testlibrary.* CopyAndMove PassThroughFileSystem + * @library .. /test/lib + * @build CopyAndMove PassThroughFileSystem * @run main/othervm CopyAndMove * @key randomness */ @@ -39,7 +39,7 @@ import java.io.*; import java.util.*; import java.util.concurrent.TimeUnit; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; public class CopyAndMove { static final Random rand = RandomFactory.getRandom(); diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/nio/file/Files/StreamLinesTest.java --- a/jdk/test/java/nio/file/Files/StreamLinesTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/nio/file/Files/StreamLinesTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -23,9 +23,8 @@ /* @test * @bug 8072773 - * @library /lib/testlibrary/ /lib/testlibrary/bootlib + * @library /test/lib /lib/testlibrary/bootlib * @build java.base/java.util.stream.OpTestCase - * @build jdk.testlibrary.RandomFactory * @run testng/othervm StreamLinesTest * @summary Tests streams returned from Files.lines, primarily focused on * testing the file-channel-based stream stream with supported @@ -54,7 +53,7 @@ import java.util.stream.OpTestCase; import java.util.stream.Stream; import java.util.stream.TestData; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; public class StreamLinesTest extends OpTestCase { diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/nio/file/WatchService/LotsOfEvents.java --- a/jdk/test/java/nio/file/WatchService/LotsOfEvents.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/nio/file/WatchService/LotsOfEvents.java Wed Jul 05 23:32:48 2017 +0200 @@ -25,8 +25,7 @@ * @bug 6907760 6929532 * @summary Tests WatchService behavior when lots of events are pending (use -Dseed=X to set PRNG seed) * @library .. - * @library /lib/testlibrary/ - * @build jdk.testlibrary.* + * @library /test/lib * @run main/timeout=180 LotsOfEvents * @key randomness */ @@ -37,7 +36,7 @@ import static java.nio.file.StandardWatchEventKinds.*; import java.util.*; import java.util.concurrent.TimeUnit; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; public class LotsOfEvents { diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/security/AccessController/DoPrivAccompliceTest.java --- a/jdk/test/java/security/AccessController/DoPrivAccompliceTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/security/AccessController/DoPrivAccompliceTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,76 +23,90 @@ * questions. */ -import java.io.File; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; +import jdk.test.lib.util.JarUtils; + import java.io.FileWriter; import java.io.IOException; -import java.net.URI; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.nio.file.Path; +import java.nio.file.Paths; /* * @test * @bug 8048362 - * @compile ../../../lib/testlibrary/JavaToolUtils.java - * DoPrivAccomplice.java DoPrivTest.java * @summary Tests the doPrivileged with accomplice Generate two jars * (DoPrivTest.jar and DoPrivAccomplice.jar) and grant permission to - * DoPrivAccmplice.jar for reading user.home property from a PrivilagedAction. - * Run DoPrivTest.jar and try to access user.home property using + * DoPrivAccmplice.jar for reading user.name property from a PrivilagedAction. + * Run DoPrivTest.jar and try to access user.name property using * DoPrivAccmplice.jar. - * @modules jdk.compiler + * + * @library /test/lib + * * @run main/othervm DoPrivAccompliceTest */ public class DoPrivAccompliceTest { + private static final String ACTION_SOURCE = DoPrivAccomplice.class.getName(); + private static final String TEST_SOURCE = DoPrivTest.class.getName(); - private static final String PWD = System.getProperty("test.classes", "./"); - private static final String ACTION_SOURCE = "DoPrivAccomplice"; - private static final String TEST_SOURCE = "DoPrivTest"; - - public static void createPolicyFile(URI codebaseURL) throws IOException { - String codebase = codebaseURL.toString(); + private static void createPolicyFile(Path jarFile, Path policy) { + String codebase = jarFile.toFile().toURI().toString(); String quotes = "\""; StringBuilder policyFile = new StringBuilder(); - policyFile.append("grant codeBase ").append(quotes). - append(codebase).append(quotes).append("{\n"). - append("permission java.util.PropertyPermission "). - append(quotes).append("user.name").append(quotes). - append(",").append(quotes).append("read").append(quotes). - append(";\n};"); - try (FileWriter writer = new FileWriter(new File(PWD, "java.policy"))) { + policyFile.append("grant codeBase ") + .append(quotes).append(codebase).append(quotes) + .append("{\n") + .append("permission java.util.PropertyPermission ") + .append(quotes).append("user.name").append(quotes) + .append(",") + .append(quotes).append("read").append(quotes) + .append(";\n};"); + try (FileWriter writer = new FileWriter(policy.toFile())) { writer.write(policyFile.toString()); - writer.close(); } catch (IOException e) { - System.err.println("Error while creating policy file"); - throw e; + throw new Error("Error while creating policy file " + policy, e); } } public static void main(String[] args) throws Exception { - final File class1 = new File(PWD, ACTION_SOURCE + ".class"); - final File class2 = new File(PWD, TEST_SOURCE + ".class"); - final File jarFile1 = new File(PWD, ACTION_SOURCE + ".jar"); - final File jarFile2 = new File(PWD, TEST_SOURCE + ".jar"); - System.out.println("Compilation successfull"); - JavaToolUtils.createJar(jarFile1, Arrays.asList(new File[]{class1})); + // copy class files to pwd + ClassFileInstaller.main(ACTION_SOURCE, TEST_SOURCE); + Path pwd = Paths.get("."); + Path jarFile1 = pwd.resolve(ACTION_SOURCE + ".jar").toAbsolutePath(); + Path jarFile2 = pwd.resolve(TEST_SOURCE + ".jar").toAbsolutePath(); + Path policy = pwd.resolve("java.policy").toAbsolutePath(); + + JarUtils.createJar(jarFile1.toString(), ACTION_SOURCE + ".class"); System.out.println("Created jar file " + jarFile1); - JavaToolUtils.createJar(jarFile2, Arrays.asList(new File[]{class2})); + JarUtils.createJar(jarFile2.toString(), TEST_SOURCE + ".class"); System.out.println("Created jar file " + jarFile2); - createPolicyFile(jarFile1.toURI()); + - List 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 b7453e312305 -r 3b471ff2785c jdk/test/java/security/KeyStore/PKCS12/EntryProtectionTest.java --- a/jdk/test/java/security/KeyStore/PKCS12/EntryProtectionTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/security/KeyStore/PKCS12/EntryProtectionTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,7 +30,7 @@ import java.util.List; import java.util.Random; import javax.crypto.spec.PBEParameterSpec; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; import static java.lang.System.out; import java.util.Arrays; @@ -40,7 +40,7 @@ * @summary Test for feature 'support stronger entry protection'. An entry is * stored to keystore with different PasswordProtection objects which are * specified by different PBE algorithms (use -Dseed=X to set PRNG seed) - * @library /lib/testlibrary ../ + * @library /test/lib /lib/testlibrary ../ * @key randomness */ public class EntryProtectionTest { diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/security/MessageDigest/TestDigestIOStream.java --- a/jdk/test/java/security/MessageDigest/TestDigestIOStream.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/security/MessageDigest/TestDigestIOStream.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,6 +1,5 @@ - /* - * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,7 +31,7 @@ import java.security.Security; import java.util.Arrays; import java.util.Random; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; import static java.lang.System.out; /** @@ -41,7 +40,7 @@ * @summary MessageDigest tests with DigestIOStream * @author Kevin Liu * @key randomness - * @library /lib/testlibrary + * @library /test/lib * @run main/timeout=180 TestDigestIOStream */ diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/security/MessageDigest/TestSameLength.java --- a/jdk/test/java/security/MessageDigest/TestSameLength.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/security/MessageDigest/TestSameLength.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,6 +1,5 @@ - /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +26,7 @@ import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.Security; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; /** * @test @@ -36,7 +35,7 @@ * algorithm/dataLen/(update,digest methods). * @author Kevin Liu * @key randomness - * @library /lib/testlibrary + * @library /test/lib */ public class TestSameLength { diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/security/MessageDigest/TestSameValue.java --- a/jdk/test/java/security/MessageDigest/TestSameValue.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/security/MessageDigest/TestSameValue.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,6 +1,5 @@ - /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,7 +27,7 @@ import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.Security; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; /** * @test @@ -37,7 +36,7 @@ * with various update/digest methods. * @author Kevin Liu * @key randomness - * @library /lib/testlibrary + * @library /test/lib */ public class TestSameValue { diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/security/Policy/ExtensiblePolicy/ExtensiblePolicyWithJarTest.java --- a/jdk/test/java/security/Policy/ExtensiblePolicy/ExtensiblePolicyWithJarTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/security/Policy/ExtensiblePolicy/ExtensiblePolicyWithJarTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,13 +27,13 @@ import java.nio.file.Paths; import java.security.AccessController; import jdk.testlibrary.ProcessTools; -import jdk.testlibrary.JarUtils; +import jdk.test.lib.util.JarUtils; /** * @test * @bug 8050402 * @summary Check policy is extensible with user defined permissions - * @library /lib/testlibrary + * @library /lib/testlibrary /test/lib * @compile TVJar/TVPermission.java * @run main ExtensiblePolicyWithJarTest */ diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/security/Signature/Offsets.java --- a/jdk/test/java/security/Signature/Offsets.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/security/Signature/Offsets.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,7 +30,7 @@ import java.security.PublicKey; import java.security.Signature; import java.security.SignatureException; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; /* * @test @@ -41,7 +41,7 @@ * get random set of clear text data to sign. After the signature * generation, the test tries to verify signature with the above API * and passing in different signature offset (0, 33, 66, 99). - * @library /lib/testlibrary + * @library /test/lib * @run main Offsets SUN NONEwithDSA * @run main Offsets SUN SHA1withDSA * @run main Offsets SUN SHA224withDSA diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/util/Base64/TestBase64.java --- a/jdk/test/java/util/Base64/TestBase64.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/util/Base64/TestBase64.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,8 +25,7 @@ * @test 4235519 8004212 8005394 8007298 8006295 8006315 8006530 8007379 8008925 * 8014217 8025003 8026330 8028397 8129544 8165243 * @summary tests java.util.Base64 - * @library /lib/testlibrary - * @build jdk.testlibrary.* + * @library /test/lib * @run main TestBase64 * @key randomness */ @@ -43,7 +42,7 @@ import java.util.List; import java.util.Random; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; public class TestBase64 { diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/util/List/SubList.java --- a/jdk/test/java/util/List/SubList.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/util/List/SubList.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,8 +24,7 @@ /* * @test * @bug 8079136 - * @library /lib/testlibrary - * @build jdk.testlibrary.* + * @library /test/lib * @run testng SubList * @summary Basic functionality of sublists * @key randomness @@ -46,7 +45,7 @@ import org.testng.annotations.Test; import org.testng.annotations.DataProvider; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; public class SubList extends org.testng.Assert { diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/util/WeakHashMap/GCDuringIteration.java --- a/jdk/test/java/util/WeakHashMap/GCDuringIteration.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/util/WeakHashMap/GCDuringIteration.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,8 +24,7 @@ /* * @test * @bug 6499848 - * @library /lib/testlibrary/ - * @build jdk.testlibrary.RandomFactory + * @library /test/lib * @run main GCDuringIteration * @summary Check that iterators work properly in the presence of * concurrent finalization and removal of elements. @@ -43,7 +42,7 @@ import java.util.WeakHashMap; import java.util.concurrent.CountDownLatch; import java.util.function.BooleanSupplier; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; public class GCDuringIteration { diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/util/concurrent/ThreadPoolExecutor/ConfigChanges.java --- a/jdk/test/java/util/concurrent/ThreadPoolExecutor/ConfigChanges.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/util/concurrent/ThreadPoolExecutor/ConfigChanges.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,8 +25,7 @@ * @test * @bug 6450200 * @summary Test proper handling of pool state changes - * @library /lib/testlibrary/ - * @build jdk.testlibrary.RandomFactory + * @library /test/lib * @run main/othervm ConfigChanges * @key randomness * @author Martin Buchholz @@ -45,7 +44,7 @@ import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; import java.util.function.Supplier; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; public class ConfigChanges { static final ThreadGroup tg = new ThreadGroup("pool"); diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/util/jar/JarFile/mrjar/MultiReleaseJarAPI.java --- a/jdk/test/java/util/jar/JarFile/mrjar/MultiReleaseJarAPI.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/util/jar/JarFile/mrjar/MultiReleaseJarAPI.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,9 +26,8 @@ * @bug 8132734 8144062 8165723 * @summary Test the extended API and the aliasing additions in JarFile that * support multi-release jar files - * @library /lib/testlibrary/java/util/jar /lib/testlibrary/ + * @library /lib/testlibrary/java/util/jar /test/lib * @build Compiler JarBuilder CreateMultiReleaseTestJars - * @build jdk.testlibrary.RandomFactory * @run testng MultiReleaseJarAPI */ @@ -45,7 +44,7 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipFile; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; import org.testng.Assert; import org.testng.annotations.AfterClass; diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/util/logging/FileHandlerMaxLocksTest.java --- a/jdk/test/java/util/logging/FileHandlerMaxLocksTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/util/logging/FileHandlerMaxLocksTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,8 +28,7 @@ * "java.util.logging.FileHandler.maxLocks" which will be present in * "logging.properties" file with default value of 100. This property can be * overriden by specifying this property in the custom config file. - * @library /lib/testlibrary - * @build jdk.testlibrary.FileUtils + * @library /test/lib * @author rpatil * @run main/othervm FileHandlerMaxLocksTest */ @@ -40,7 +39,7 @@ import java.util.ArrayList; import java.util.List; import java.util.logging.FileHandler; -import jdk.testlibrary.FileUtils; +import jdk.test.lib.util.FileUtils; public class FileHandlerMaxLocksTest { diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/util/regex/RegExTest.java --- a/jdk/test/java/util/regex/RegExTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/util/regex/RegExTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,8 +37,7 @@ * 6328855 6192895 6345469 6988218 6693451 7006761 8140212 8143282 8158482 * 8176029 * - * @library /lib/testlibrary - * @build jdk.testlibrary.* + * @library /test/lib * @run main RegExTest * @key randomness */ @@ -52,7 +51,7 @@ import java.util.*; import java.nio.CharBuffer; import java.util.function.Predicate; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; /** * This is a test class created to check the operation of diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/util/zip/InflaterInputStream/TestAvailable.java --- a/jdk/test/java/util/zip/InflaterInputStream/TestAvailable.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/util/zip/InflaterInputStream/TestAvailable.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,7 @@ */ /* @test - * @library /lib/testlibrary/ - * @build jdk.testlibrary.* + * @library /test/lib * @run main TestAvailable * @bug 7031075 8161426 * @summary Make sure that available() method behaves as expected. @@ -33,7 +32,7 @@ import java.io.*; import java.util.Random; import java.util.zip.*; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; public class TestAvailable { diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/util/zip/ZipFile/MultiThreadedReadTest.java --- a/jdk/test/java/util/zip/ZipFile/MultiThreadedReadTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/util/zip/ZipFile/MultiThreadedReadTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,8 +24,7 @@ /* @test * @bug 8038491 * @summary Crash in ZipFile.read() when ZipFileInputStream is shared between threads - * @library /lib/testlibrary - * @build jdk.testlibrary.FileUtils + * @library /test/lib * @run main MultiThreadedReadTest * @key randomness */ @@ -38,7 +37,7 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import java.util.zip.ZipOutputStream; -import jdk.testlibrary.FileUtils; +import jdk.test.lib.util.FileUtils; public class MultiThreadedReadTest extends Thread { diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/util/zip/ZipFile/ReadLongZipFileName.java --- a/jdk/test/java/util/zip/ZipFile/ReadLongZipFileName.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/util/zip/ZipFile/ReadLongZipFileName.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,15 +24,14 @@ /** * @test * @bug 6374379 - * @library ../../../../lib/testlibrary + * @library /test/lib * @summary Verify that we can read zip file names > 255 chars long */ import java.io.*; import java.util.jar.*; -import java.util.zip.*; import java.util.Stack; -import jdk.testlibrary.FileUtils; +import jdk.test.lib.util.FileUtils; public class ReadLongZipFileName { private static String entryName = "testFile.txt";; diff -r b7453e312305 -r 3b471ff2785c jdk/test/java/util/zip/ZipFile/ZipEntryFreeTest.java --- a/jdk/test/java/util/zip/ZipFile/ZipEntryFreeTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/java/util/zip/ZipFile/ZipEntryFreeTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,8 +24,7 @@ /* @test * @bug 6907252 * @summary ZipFileInputStream Not Thread-Safe - * @library /lib/testlibrary - * @build jdk.testlibrary.* + * @library /test/lib * @run main ZipEntryFreeTest */ @@ -35,7 +34,7 @@ import java.util.Timer; import java.util.TimerTask; import java.util.zip.*; -import jdk.testlibrary.FileUtils; +import jdk.test.lib.util.FileUtils; public class ZipEntryFreeTest extends Thread { diff -r b7453e312305 -r 3b471ff2785c jdk/test/javax/imageio/plugins/tiff/MultiPageTest/MultiPageTest.java --- a/jdk/test/javax/imageio/plugins/tiff/MultiPageTest/MultiPageTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/javax/imageio/plugins/tiff/MultiPageTest/MultiPageTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,8 +23,7 @@ /** * @test - * @library /lib/testlibrary/ - * @build jdk.testlibrary.* + * @library /test/lib * * @bug 8145776 * @author a.stepanov @@ -47,7 +46,7 @@ import javax.imageio.*; import javax.imageio.stream.*; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; public class MultiPageTest { diff -r b7453e312305 -r 3b471ff2785c jdk/test/javax/net/ssl/DTLS/DTLSIncorrectAppDataTest.java --- a/jdk/test/javax/net/ssl/DTLS/DTLSIncorrectAppDataTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/javax/net/ssl/DTLS/DTLSIncorrectAppDataTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,7 @@ * @bug 8043758 * @summary Testing DTLS incorrect app data packages unwrapping. * @key randomness - * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon + * @library /sun/security/krb5/auto /test/lib /javax/net/ssl/TLSCommon * @modules java.security.jgss * jdk.security.auth * java.security.jgss/sun.security.krb5:+open @@ -49,7 +49,7 @@ import javax.net.ssl.SSLEngineResult; import javax.net.ssl.SSLException; import java.util.Random; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; /** * Testing DTLS incorrect app data packages unwrapping. Incorrect application diff -r b7453e312305 -r 3b471ff2785c jdk/test/javax/net/ssl/DTLS/DTLSRehandshakeWithCipherChangeTest.java --- a/jdk/test/javax/net/ssl/DTLS/DTLSRehandshakeWithCipherChangeTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/javax/net/ssl/DTLS/DTLSRehandshakeWithCipherChangeTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,7 @@ * @summary Testing DTLS engines re-handshaking with cipher change. New cipher * is taken randomly from the supporetd ciphers list. * @key randomness - * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon + * @library /sun/security/krb5/auto /test/lib /javax/net/ssl/TLSCommon * @modules java.security.jgss * java.security.jgss/sun.security.krb5:+open * java.security.jgss/sun.security.krb5.internal:+open diff -r b7453e312305 -r 3b471ff2785c jdk/test/javax/net/ssl/DTLS/DTLSSequenceNumberTest.java --- a/jdk/test/javax/net/ssl/DTLS/DTLSSequenceNumberTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/javax/net/ssl/DTLS/DTLSSequenceNumberTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,7 @@ * @summary Testing DTLS records sequence number property support in application * data exchange. * @key randomness - * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon + * @library /sun/security/krb5/auto /test/lib /javax/net/ssl/TLSCommon * @modules java.security.jgss * jdk.security.auth * java.security.jgss/sun.security.krb5:+open @@ -51,7 +51,7 @@ import javax.net.ssl.SSLEngineResult; import javax.net.ssl.SSLException; import java.util.Random; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; /** * Testing DTLS records sequence number property support in application data diff -r b7453e312305 -r 3b471ff2785c jdk/test/javax/net/ssl/DTLSv10/DTLSv10IncorrectAppDataTest.java --- a/jdk/test/javax/net/ssl/DTLSv10/DTLSv10IncorrectAppDataTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/javax/net/ssl/DTLSv10/DTLSv10IncorrectAppDataTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,7 @@ * @bug 8043758 * @summary Testing DTLS incorrect app data packages unwrapping. * @key randomness - * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon /javax/net/ssl/DTLS + * @library /sun/security/krb5/auto /test/lib /javax/net/ssl/TLSCommon /javax/net/ssl/DTLS * @modules java.security.jgss * jdk.security.auth * java.security.jgss/sun.security.krb5:+open diff -r b7453e312305 -r 3b471ff2785c jdk/test/javax/net/ssl/DTLSv10/DTLSv10RehandshakeWithCipherChangeTest.java --- a/jdk/test/javax/net/ssl/DTLSv10/DTLSv10RehandshakeWithCipherChangeTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/javax/net/ssl/DTLSv10/DTLSv10RehandshakeWithCipherChangeTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,7 @@ * @summary Testing DTLS engines re-handshaking with cipher change. New cipher * is taken randomly from the supporetd ciphers list. * @key randomness - * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon + * @library /sun/security/krb5/auto /test/lib /javax/net/ssl/TLSCommon * @modules java.security.jgss * java.security.jgss/sun.security.krb5:+open * java.security.jgss/sun.security.krb5.internal:+open diff -r b7453e312305 -r 3b471ff2785c jdk/test/javax/net/ssl/TLS/TLSRehandshakeWithCipherChangeTest.java --- a/jdk/test/javax/net/ssl/TLS/TLSRehandshakeWithCipherChangeTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/javax/net/ssl/TLS/TLSRehandshakeWithCipherChangeTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,7 @@ * @summary Testing TLS engines re-handshaking with cipher change. New cipher * is taken randomly from the supporetd ciphers list. * @key randomness - * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon + * @library /sun/security/krb5/auto /test/lib /javax/net/ssl/TLSCommon * @modules java.security.jgss * java.security.jgss/sun.security.krb5:+open * java.security.jgss/sun.security.krb5.internal:+open diff -r b7453e312305 -r 3b471ff2785c jdk/test/javax/net/ssl/TLSCommon/RehandshakeWithCipherChangeTest.java --- a/jdk/test/javax/net/ssl/TLSCommon/RehandshakeWithCipherChangeTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/javax/net/ssl/TLSCommon/RehandshakeWithCipherChangeTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,7 @@ import javax.net.ssl.SSLEngineResult; import javax.net.ssl.SSLException; import java.util.Random; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; /** * Testing SSLEngines re-handshaking with cipher change. New cipher is taken diff -r b7453e312305 -r 3b471ff2785c jdk/test/javax/net/ssl/TLSv1/TLSRehandshakeWithCipherChangeTest.java --- a/jdk/test/javax/net/ssl/TLSv1/TLSRehandshakeWithCipherChangeTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/javax/net/ssl/TLSv1/TLSRehandshakeWithCipherChangeTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,7 @@ * @summary Testing TLS engines re-handshaking with cipher change. New cipher * is taken randomly from the supporetd ciphers list. * @key randomness - * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon + * @library /sun/security/krb5/auto /test/lib /javax/net/ssl/TLSCommon * @modules java.security.jgss * java.security.jgss/sun.security.krb5:+open * java.security.jgss/sun.security.krb5.internal:+open diff -r b7453e312305 -r 3b471ff2785c jdk/test/javax/net/ssl/TLSv11/TLSRehandshakeWithCipherChangeTest.java --- a/jdk/test/javax/net/ssl/TLSv11/TLSRehandshakeWithCipherChangeTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/javax/net/ssl/TLSv11/TLSRehandshakeWithCipherChangeTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,7 @@ * @summary Testing TLS engines re-handshaking with cipher change. New cipher * is taken randomly from the supporetd ciphers list. * @key randomness - * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon + * @library /sun/security/krb5/auto /test/lib /javax/net/ssl/TLSCommon * @modules java.security.jgss * java.security.jgss/sun.security.krb5:+open * java.security.jgss/sun.security.krb5.internal:+open diff -r b7453e312305 -r 3b471ff2785c jdk/test/javax/sound/sampled/Clip/ClipCloseLoss.java --- a/jdk/test/javax/sound/sampled/Clip/ClipCloseLoss.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/javax/sound/sampled/Clip/ClipCloseLoss.java Wed Jul 05 23:32:48 2017 +0200 @@ -36,6 +36,7 @@ * @bug 4946913 * @summary DirectClip doesn't kill the thread correctly, sometimes * @run main/othervm ClipCloseLoss + * @key intermittent */ public class ClipCloseLoss { static int frameCount = 441000; // lets say 10 seconds diff -r b7453e312305 -r 3b471ff2785c jdk/test/javax/swing/ToolTipManager/7123767/bug7123767.java --- a/jdk/test/javax/swing/ToolTipManager/7123767/bug7123767.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/javax/swing/ToolTipManager/7123767/bug7123767.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -38,8 +38,7 @@ * @key randomness * * @modules java.desktop/sun.awt - * @library /lib/testlibrary/ - * @build jdk.testlibrary.* + * @library /test/lib * * @run main/timeout=300 bug7123767 */ @@ -55,7 +54,7 @@ import java.util.Collections; import java.util.Random; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; public class bug7123767 extends JFrame { diff -r b7453e312305 -r 3b471ff2785c jdk/test/jdk/internal/util/jar/TestVersionedStream.java --- a/jdk/test/jdk/internal/util/jar/TestVersionedStream.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/jdk/internal/util/jar/TestVersionedStream.java Wed Jul 05 23:32:48 2017 +0200 @@ -25,9 +25,8 @@ * @test * @bug 8163798 * @summary basic tests for multi-release jar versioned streams - * @library /lib/testlibrary + * @library /test/lib * @modules jdk.jartool/sun.tools.jar java.base/jdk.internal.util.jar - * @build jdk.testlibrary.FileUtils * @run testng TestVersionedStream */ @@ -57,7 +56,7 @@ import java.util.stream.Stream; import java.util.zip.ZipFile; -import jdk.testlibrary.FileUtils; +import jdk.test.lib.util.FileUtils; public class TestVersionedStream { private final Path userdir; diff -r b7453e312305 -r 3b471ff2785c jdk/test/jdk/modules/incubator/ImageModules.java --- a/jdk/test/jdk/modules/incubator/ImageModules.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/jdk/modules/incubator/ImageModules.java Wed Jul 05 23:32:48 2017 +0200 @@ -25,7 +25,7 @@ * @test * @bug 8170859 * @summary Basic test for incubator modules in jmods and images - * @library /lib/testlibrary + * @library /lib/testlibrary /test/lib * @key intermittent * @modules jdk.compiler jdk.jartool jdk.jlink * @build CompilerUtils @@ -39,14 +39,13 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; import java.util.spi.ToolProvider; import java.util.stream.Collectors; import java.util.stream.Stream; -import jdk.testlibrary.FileUtils; +import jdk.test.lib.util.FileUtils; import org.testng.annotations.BeforeTest; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; diff -r b7453e312305 -r 3b471ff2785c jdk/test/jdk/security/jarsigner/Spec.java --- a/jdk/test/jdk/security/jarsigner/Spec.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/jdk/security/jarsigner/Spec.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,7 +25,7 @@ * @test * @bug 8056174 * @summary Make sure JarSigner impl conforms to spec - * @library /lib/testlibrary + * @library /test/lib * @modules java.base/sun.security.tools.keytool * java.base/sun.security.provider.certpath * jdk.jartool @@ -35,7 +35,7 @@ import com.sun.jarsigner.ContentSigner; import com.sun.jarsigner.ContentSignerParameters; import jdk.security.jarsigner.JarSigner; -import jdk.testlibrary.JarUtils; +import jdk.test.lib.util.JarUtils; import sun.security.provider.certpath.X509CertPath; import java.io.File; diff -r b7453e312305 -r 3b471ff2785c jdk/test/lib/testlibrary/JavaToolUtils.java --- a/jdk/test/lib/testlibrary/JavaToolUtils.java Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,209 +0,0 @@ -/* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.nio.file.Files; -import java.util.List; -import java.util.Objects; -import java.util.concurrent.TimeUnit; -import java.util.jar.Attributes; -import java.util.jar.JarEntry; -import java.util.jar.JarOutputStream; -import java.util.jar.Manifest; -import javax.tools.JavaCompiler; -import javax.tools.JavaFileObject; -import javax.tools.StandardJavaFileManager; -import javax.tools.ToolProvider; - -/** - * Utils class for compiling , creating jar file and executing a java command - * - * @author Raghu Nair - */ - -public class JavaToolUtils { - - public static final long DEFAULT_WAIT_TIME = 10000; - - private JavaToolUtils() { - } - - /** - * Takes a list of files and compile these files into the working directory. - * - * @param files - * @throws IOException - */ - public static void compileFiles(List 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 b7453e312305 -r 3b471ff2785c jdk/test/lib/testlibrary/jdk/testlibrary/FileUtils.java --- a/jdk/test/lib/testlibrary/jdk/testlibrary/FileUtils.java Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,230 +0,0 @@ -/* - * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package jdk.testlibrary; - -import java.io.IOException; -import java.nio.file.DirectoryNotEmptyException; -import java.nio.file.FileVisitResult; -import java.nio.file.Files; -import java.nio.file.NoSuchFileException; -import java.nio.file.Path; -import java.nio.file.SimpleFileVisitor; -import java.nio.file.attribute.BasicFileAttributes; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.TimeUnit; - - -/** - * Common library for various test file utility functions. - */ -public final class FileUtils { - - private static final boolean isWindows = - System.getProperty("os.name").startsWith("Windows"); - private static final int RETRY_DELETE_MILLIS = isWindows ? 500 : 0; - private static final int MAX_RETRY_DELETE_TIMES = isWindows ? 15 : 0; - - /** - * Deletes a file, retrying if necessary. - * - * @param path the file to delete - * - * @throws NoSuchFileException - * if the file does not exist (optional specific exception) - * @throws DirectoryNotEmptyException - * if the file is a directory and could not otherwise be deleted - * because the directory is not empty (optional specific exception) - * @throws IOException - * if an I/O error occurs - */ - public static void deleteFileWithRetry(Path path) - throws IOException - { - try { - deleteFileWithRetry0(path); - } catch (InterruptedException x) { - throw new IOException("Interrupted while deleting.", x); - } - } - - /** - * Deletes a file, retrying if necessary. - * No exception thrown if file doesn't exist. - * - * @param path the file to delete - * - * @throws NoSuchFileException - * if the file does not exist (optional specific exception) - * @throws DirectoryNotEmptyException - * if the file is a directory and could not otherwise be deleted - * because the directory is not empty (optional specific exception) - * @throws IOException - * if an I/O error occurs - */ - public static void deleteFileIfExistsWithRetry(Path path) - throws IOException - { - try { - if(Files.exists(path)) - deleteFileWithRetry0(path); - } catch (InterruptedException x) { - throw new IOException("Interrupted while deleting.", x); - } - } - - private static void deleteFileWithRetry0(Path path) - throws IOException, InterruptedException - { - int times = 0; - IOException ioe = null; - while (true) { - try { - Files.delete(path); - while (Files.exists(path)) { - times++; - if (times > MAX_RETRY_DELETE_TIMES) - throw new IOException("File still exists after " + times + " waits."); - Thread.sleep(RETRY_DELETE_MILLIS); - } - break; - } catch (NoSuchFileException | DirectoryNotEmptyException x) { - throw x; - } catch (IOException x) { - // Backoff/retry in case another process is accessing the file - times++; - if (ioe == null) - ioe = x; - else - ioe.addSuppressed(x); - - if (times > MAX_RETRY_DELETE_TIMES) - throw ioe; - Thread.sleep(RETRY_DELETE_MILLIS); - } - } - } - - /** - * Deletes a directory and its subdirectories, retrying if necessary. - * - * @param dir the directory to delete - * - * @throws IOException - * If an I/O error occurs. Any such exceptions are caught - * internally. If only one is caught, then it is re-thrown. - * If more than one exception is caught, then the second and - * following exceptions are added as suppressed exceptions of the - * first one caught, which is then re-thrown. - */ - public static void deleteFileTreeWithRetry(Path dir) - throws IOException - { - IOException ioe = null; - final List 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 b7453e312305 -r 3b471ff2785c jdk/test/lib/testlibrary/jdk/testlibrary/JarUtils.java --- a/jdk/test/lib/testlibrary/jdk/testlibrary/JarUtils.java Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,148 +0,0 @@ -/* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package jdk.testlibrary; - -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.List; -import java.util.jar.JarEntry; -import java.util.jar.JarFile; -import java.util.jar.JarOutputStream; -import java.util.jar.Manifest; - -/** - * Common library for various test jar file utility functions. - */ -public final class JarUtils { - - /** - * Create jar file with specified files. If a specified file does not exist, - * a new jar entry will be created with the file name itself as the content. - */ - public static void createJar(String dest, String... files) - throws IOException { - try (JarOutputStream jos = new JarOutputStream( - new FileOutputStream(dest), new Manifest())) { - for (String file : files) { - System.out.println(String.format("Adding %s to %s", - file, dest)); - - // add an archive entry, and write a file - jos.putNextEntry(new JarEntry(file)); - try (FileInputStream fis = new FileInputStream(file)) { - fis.transferTo(jos); - } catch (FileNotFoundException e) { - jos.write(file.getBytes()); - } - } - } - System.out.println(); - } - - /** - * Add or remove specified files to existing jar file. If a specified file - * to be updated or added does not exist, the jar entry will be created - * with the file name itself as the content. - * - * @param src the original jar file name - * @param dest the new jar file name - * @param files the files to update. The list is broken into 2 groups - * by a "-" string. The files before in the 1st group will - * be either updated or added. The files in the 2nd group - * will be removed. If no "-" exists, all files belong to - * the 1st group. - */ - public static void updateJar(String src, String dest, String... files) - throws IOException { - try (JarOutputStream jos = new JarOutputStream( - new FileOutputStream(dest))) { - - // copy each old entry into destination unless the entry name - // is in the updated list - List 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 b7453e312305 -r 3b471ff2785c jdk/test/lib/testlibrary/jdk/testlibrary/RandomFactory.java --- a/jdk/test/lib/testlibrary/jdk/testlibrary/RandomFactory.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/lib/testlibrary/jdk/testlibrary/RandomFactory.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,7 +30,12 @@ * Factory class which generates and prints to STDOUT a long-valued seed * for use in initializing a PRNG. An instance of {@code Random} or * {@code SplittableRandom} may likewise be obtained. + * + * @deprecated This class is deprecated. Use the one from + * {@code /test/lib/jdk/test/lib} + * */ +@Deprecated public class RandomFactory { /** * Attempt to obtain the seed from the value of the "seed" property. diff -r b7453e312305 -r 3b471ff2785c jdk/test/lib/testlibrary/jsr292/com/oracle/testlibrary/jsr292/CodeCacheOverflowProcessor.java --- a/jdk/test/lib/testlibrary/jsr292/com/oracle/testlibrary/jsr292/CodeCacheOverflowProcessor.java Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,78 +0,0 @@ -/* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package com.oracle.testlibrary.jsr292; - -import jdk.testlibrary.Utils; - -/** - * Helper class used to catch and process VirtualMachineError with message "Out - * of space in CodeCache". Some JSR292 tests run out of code cache size, so code - * cache overflows and VME is thrown. This VME is considered as non-critical in - * some JSR292 tests, so it should be processed to prevent test failure. - */ -public class CodeCacheOverflowProcessor { - - /** - * Checks if an instance of Throwable is caused by VirtualMachineError with - * message "Out of space in CodeCache". May be used as filter in method - * {@code jdk.testlibrary.Utils.filterException}. - * - * @param t - Throwable to check. - * @return true if Throwable is caused by VME, false otherwise. - */ - public static Boolean isThrowableCausedByVME(Throwable t) { - Throwable causeOfT = t; - do { - if (causeOfT instanceof VirtualMachineError - && causeOfT.getMessage().matches(".*[Oo]ut of space" - + " in CodeCache.*")) { - return true; - } - causeOfT = causeOfT != null ? causeOfT.getCause() : null; - } while (causeOfT != null && causeOfT != t); - return false; - } - - /** - * Checks if the given test throws an exception caused by - * VirtualMachineError with message "Out of space in CodeCache", and, if VME - * takes place, processes it so that no exception is thrown, and prints its - * stack trace. If test throws exception not caused by VME, this method just - * re-throws this exception. - * - * @param test - test to check for and process VirtualMachineError. - * @return - an exception caused by VME or null - * if test has thrown no exception. - * @throws Throwable - if test has thrown an exception - * that is not caused by VME. - */ - public static Throwable runMHTest(Utils.ThrowingRunnable test) throws Throwable { - Throwable t = Utils.filterException(test::run, - CodeCacheOverflowProcessor::isThrowableCausedByVME); - if (t != null) { - System.err.printf("%nNon-critical exception caught becuse of" - + " code cache size is not enough to run all test cases.%n%n"); - } - return t; - } -} diff -r b7453e312305 -r 3b471ff2785c jdk/test/lib/testlibrary/jsr292/com/oracle/testlibrary/jsr292/Helper.java --- a/jdk/test/lib/testlibrary/jsr292/com/oracle/testlibrary/jsr292/Helper.java Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,347 +0,0 @@ -/* - * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package com.oracle.testlibrary.jsr292; - -import jdk.testlibrary.Asserts; - -import java.lang.invoke.MethodHandle; -import java.lang.invoke.MethodHandles; -import java.lang.invoke.MethodType; -import java.lang.reflect.Array; -import java.util.*; - -public class Helper { - /** Flag for verbose output, true if {@code -Dverbose} specified */ - public static final boolean IS_VERBOSE - = System.getProperty("verbose") != null; - /** - * Flag for thorough testing -- all test will be executed, - * true if {@code -Dthorough} specified. */ - public static final boolean IS_THOROUGH - = System.getProperty("thorough") != null; - /** Random number generator w/ initial seed equal to {@code -Dseed} */ - public static final Random RNG; - - static { - String str = System.getProperty("seed"); - long seed = str != null ? Long.parseLong(str) : new Random().nextLong(); - RNG = new Random(seed); - System.out.printf("-Dseed=%d%n", seed); - } - - public static final long TEST_LIMIT; - static { - String str = System.getProperty("testLimit"); - TEST_LIMIT = str != null ? Long.parseUnsignedLong(str) : 2000L; - System.out.printf("-DtestLimit=%d%n", TEST_LIMIT); - } - - public static final int MAX_ARITY = 254; - public static final String MISSING_ARG = "missingArg"; - public static final String MISSING_ARG_2 = "missingArg#2"; - - private static final int - // first int value - ONE_MILLION = (1000 * 1000), - // scale factor to reach upper 32 bits - TEN_BILLION = (10 * 1000 * 1000 * 1000), - // <<1 makes space for sign bit; - INITIAL_ARG_VAL = ONE_MILLION << 1; - - public static final MethodHandle AS_LIST; - - static { - try { - AS_LIST = MethodHandles.lookup().findStatic( - Arrays.class, "asList", - MethodType.methodType(List.class, Object[].class)); - } catch (NoSuchMethodException | IllegalAccessException ex) { - throw new Error(ex); - } - } - - public static boolean isDoubleCost(Class aClass) { - return aClass == double.class || aClass == long.class; - } - - private static List> 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 b7453e312305 -r 3b471ff2785c jdk/test/sun/nio/cs/FindDecoderBugs.java --- a/jdk/test/sun/nio/cs/FindDecoderBugs.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/sun/nio/cs/FindDecoderBugs.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,8 +25,7 @@ * @test * @bug 6380723 * @summary Decode many byte sequences in many ways (use -Dseed=X to set PRNG seed) - * @library /lib/testlibrary - * @build jdk.testlibrary.* + * @library /test/lib * @run main/timeout=1800 FindDecoderBugs * @author Martin Buchholz * @key randomness @@ -36,7 +35,7 @@ import java.util.regex.*; import java.nio.*; import java.nio.charset.*; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; public class FindDecoderBugs { diff -r b7453e312305 -r 3b471ff2785c jdk/test/sun/nio/cs/FindEncoderBugs.java --- a/jdk/test/sun/nio/cs/FindEncoderBugs.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/sun/nio/cs/FindEncoderBugs.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,8 +25,7 @@ * @test * @bug 6233345 6381699 6381702 6381705 6381706 * @summary Encode many char sequences in many ways - * @library /lib/testlibrary/ - * @build jdk.testlibrary.* + * @library /test/lib * @run main/timeout=1200 FindEncoderBugs * @author Martin Buchholz * @key randomness @@ -36,7 +35,7 @@ import java.util.regex.*; import java.nio.*; import java.nio.charset.*; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; public class FindEncoderBugs { diff -r b7453e312305 -r 3b471ff2785c jdk/test/sun/security/ec/SignatureOffsets.java --- a/jdk/test/sun/security/ec/SignatureOffsets.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/sun/security/ec/SignatureOffsets.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,7 +34,7 @@ * get random set of clear text data to sign. After the signature * generation, the test tries to verify signature with the above API * and passing in different signature offset (0, 33, 66, 99). - * @library /lib/testlibrary + * @library /test/lib * @compile ../../../java/security/Signature/Offsets.java * @run main SignatureOffsets SunEC NONEwithECDSA * @run main SignatureOffsets SunEC SHA1withECDSA diff -r b7453e312305 -r 3b471ff2785c jdk/test/sun/security/krb5/auto/KDC.java --- a/jdk/test/sun/security/krb5/auto/KDC.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/sun/security/krb5/auto/KDC.java Wed Jul 05 23:32:48 2017 +0200 @@ -828,7 +828,9 @@ throw new KrbException(Krb5.KDC_ERR_SUMTYPE_NOSUPP); // TODO } Ticket t = new Ticket( - service, + System.getProperty("test.kdc.diff.sname") != null ? + new PrincipalName("xx" + service.toString()) : + service, new EncryptedData(skey, enc.asn1Encode(), KeyUsage.KU_TICKET) ); EncTGSRepPart enc_part = new EncTGSRepPart( diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8178794 + * @summary krb5 client should ignore sname in incoming tickets + * @compile -XDignore.symbol.file TicketSName.java + * @run main/othervm -Dtest.kdc.diff.sname TicketSName + */ + +import sun.security.jgss.GSSUtil; +import javax.security.auth.kerberos.KerberosTicket; + +public class TicketSName { + + public static void main(String[] args) throws Exception { + + new OneKDC(null).writeJAASConf(); + + Context c, s; + c = Context.fromJAAS("client"); + s = Context.fromJAAS("server"); + + c.startAsClient(OneKDC.SERVER, GSSUtil.GSS_KRB5_MECH_OID); + s.startAsServer(GSSUtil.GSS_KRB5_MECH_OID); + + Context.handshake(c, s); + + String expected = OneKDC.SERVER + "@" + OneKDC.REALM; + if (!c.s().getPrivateCredentials(KerberosTicket.class) + .stream() + .anyMatch(t -> t.getServer().toString().equals(expected))) { + c.status(); + throw new Exception("no " + expected); + } + } +} diff -r b7453e312305 -r 3b471ff2785c jdk/test/sun/security/mscapi/SignatureOffsets.java --- a/jdk/test/sun/security/mscapi/SignatureOffsets.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/sun/security/mscapi/SignatureOffsets.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,7 +34,7 @@ * get random set of clear text data to sign. After the signature * generation, the test tries to verify signature with the above API * and passing in different signature offset (0, 33, 66, 99). - * @library /lib/testlibrary + * @library /test/lib * @compile ../../../java/security/Signature/Offsets.java * @requires os.family == "windows" * @run main SignatureOffsets SunMSCAPI NONEwithRSA diff -r b7453e312305 -r 3b471ff2785c jdk/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java --- a/jdk/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java Wed Jul 05 23:32:48 2017 +0200 @@ -27,8 +27,7 @@ * @summary Verify that the RSA KeyPairGenerator works (use -Dseed=X to set PRNG seed) * @author Andreas Sterbenz * @library .. - * @library /lib/testlibrary - * @build jdk.testlibrary.* + * @library /test/lib * @modules jdk.crypto.cryptoki * @run main/othervm -Djava.security.debug=sunpkcs11 TestKeyPairGenerator * @run main/othervm -Djava.security.debug=sunpkcs11 TestKeyPairGenerator @@ -46,7 +45,7 @@ import java.security.interfaces.RSAPrivateCrtKey; import java.security.interfaces.RSAPublicKey; import java.security.spec.RSAKeyGenParameterSpec; -import jdk.testlibrary.RandomFactory; +import jdk.test.lib.RandomFactory; public class TestKeyPairGenerator extends PKCS11Test { diff -r b7453e312305 -r 3b471ff2785c jdk/test/sun/security/rsa/SignatureOffsets.java --- a/jdk/test/sun/security/rsa/SignatureOffsets.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/sun/security/rsa/SignatureOffsets.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,7 +34,7 @@ * get random set of clear text data to sign. After the signature * generation, the test tries to verify signature with the above API * and passing in different signature offset (0, 33, 66, 99). - * @library /lib/testlibrary + * @library /test/lib * @compile ../../../java/security/Signature/Offsets.java * @run main SignatureOffsets SunRsaSign MD2withRSA * @run main SignatureOffsets SunRsaSign MD5withRSA diff -r b7453e312305 -r 3b471ff2785c jdk/test/sun/security/ssl/rsa/SignatureOffsets.java --- a/jdk/test/sun/security/ssl/rsa/SignatureOffsets.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/sun/security/ssl/rsa/SignatureOffsets.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,7 +34,7 @@ * get random set of clear text data to sign. After the signature * generation, the test tries to verify signature with the above API * and passing in different signature offset (0, 33, 66, 99). - * @library /lib/testlibrary + * @library /test/lib * @compile ../../../../java/security/Signature/Offsets.java * @run main SignatureOffsets SunJSSE MD2withRSA * @run main SignatureOffsets SunJSSE MD5withRSA diff -r b7453e312305 -r 3b471ff2785c jdk/test/sun/security/tools/jarsigner/AltProvider.java --- a/jdk/test/sun/security/tools/jarsigner/AltProvider.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/sun/security/tools/jarsigner/AltProvider.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,7 +32,7 @@ import jdk.test.lib.JDKToolLauncher; import jdk.test.lib.process.OutputAnalyzer; import jdk.test.lib.process.ProcessTools; -import jdk.testlibrary.JarUtils; +import jdk.test.lib.util.JarUtils; import java.nio.file.*; diff -r b7453e312305 -r 3b471ff2785c jdk/test/sun/security/tools/jarsigner/Options.java --- a/jdk/test/sun/security/tools/jarsigner/Options.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/sun/security/tools/jarsigner/Options.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,7 @@ * @bug 8056174 * @summary Make sure the jarsigner tool still works after it's modified to * be based on JarSigner API - * @library /lib/testlibrary + * @library /test/lib * @modules java.base/sun.security.tools.keytool * jdk.jartool/sun.security.tools.jarsigner * java.base/sun.security.pkcs @@ -35,7 +35,7 @@ import com.sun.jarsigner.ContentSigner; import com.sun.jarsigner.ContentSignerParameters; -import jdk.testlibrary.JarUtils; +import jdk.test.lib.util.JarUtils; import sun.security.pkcs.PKCS7; import java.io.ByteArrayInputStream; diff -r b7453e312305 -r 3b471ff2785c jdk/test/sun/security/tools/jarsigner/TimestampCheck.java --- a/jdk/test/sun/security/tools/jarsigner/TimestampCheck.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/sun/security/tools/jarsigner/TimestampCheck.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,7 +45,7 @@ import jdk.test.lib.SecurityTools; import jdk.testlibrary.*; -import jdk.testlibrary.JarUtils; +import jdk.test.lib.util.JarUtils; import sun.security.pkcs.ContentInfo; import sun.security.pkcs.PKCS7; import sun.security.pkcs.PKCS9Attribute; @@ -557,7 +557,7 @@ } static void prepare() throws Exception { - jdk.testlibrary.JarUtils.createJar("old.jar", "A"); + JarUtils.createJar("old.jar", "A"); Files.deleteIfExists(Paths.get("tsks")); keytool("-alias ca -genkeypair -ext bc -dname CN=CA"); keytool("-alias old -genkeypair -dname CN=old"); diff -r b7453e312305 -r 3b471ff2785c jdk/test/sun/security/tools/jarsigner/TsacertOptionTest.java --- a/jdk/test/sun/security/tools/jarsigner/TsacertOptionTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/sun/security/tools/jarsigner/TsacertOptionTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -22,7 +22,7 @@ */ import jdk.testlibrary.OutputAnalyzer; -import jdk.testlibrary.JarUtils; +import jdk.test.lib.util.JarUtils; /** * @test diff -r b7453e312305 -r 3b471ff2785c jdk/test/sun/security/tools/jarsigner/Warning.java --- a/jdk/test/sun/security/tools/jarsigner/Warning.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/sun/security/tools/jarsigner/Warning.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,7 @@ */ import jdk.testlibrary.JDKToolLauncher; -import jdk.testlibrary.JarUtils; +import jdk.test.lib.util.JarUtils; import jdk.testlibrary.OutputAnalyzer; import jdk.testlibrary.ProcessTools; @@ -34,7 +34,7 @@ * @test * @bug 8024302 8026037 8130132 * @summary warnings, errors and -strict - * @library /lib/testlibrary + * @library /lib/testlibrary /test/lib */ public class Warning { diff -r b7453e312305 -r 3b471ff2785c jdk/test/sun/security/tools/jarsigner/warnings/AliasNotInStoreTest.java --- a/jdk/test/sun/security/tools/jarsigner/warnings/AliasNotInStoreTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/sun/security/tools/jarsigner/warnings/AliasNotInStoreTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,13 +22,13 @@ */ import jdk.testlibrary.OutputAnalyzer; -import jdk.testlibrary.JarUtils; +import jdk.test.lib.util.JarUtils; /** * @test * @bug 8024302 8026037 * @summary Test for aliasNotInStore warning - * @library /lib/testlibrary ../ + * @library /lib/testlibrary /test/lib ../ * @run main AliasNotInStoreTest */ public class AliasNotInStoreTest extends Test { diff -r b7453e312305 -r 3b471ff2785c jdk/test/sun/security/tools/jarsigner/warnings/BadExtendedKeyUsageTest.java --- a/jdk/test/sun/security/tools/jarsigner/warnings/BadExtendedKeyUsageTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/sun/security/tools/jarsigner/warnings/BadExtendedKeyUsageTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,13 +22,13 @@ */ import jdk.testlibrary.OutputAnalyzer; -import jdk.testlibrary.JarUtils; +import jdk.test.lib.util.JarUtils; /** * @test * @bug 8024302 8026037 * @summary Test for badExtendedKeyUsage warning - * @library /lib/testlibrary ../ + * @library /lib/testlibrary /test/lib ../ * @run main BadExtendedKeyUsageTest */ public class BadExtendedKeyUsageTest extends Test { diff -r b7453e312305 -r 3b471ff2785c jdk/test/sun/security/tools/jarsigner/warnings/BadKeyUsageTest.java --- a/jdk/test/sun/security/tools/jarsigner/warnings/BadKeyUsageTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/sun/security/tools/jarsigner/warnings/BadKeyUsageTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,13 +22,13 @@ */ import jdk.testlibrary.OutputAnalyzer; -import jdk.testlibrary.JarUtils; +import jdk.test.lib.util.JarUtils; /** * @test * @bug 8024302 8026037 * @summary Test for badKeyUsage warning - * @library /lib/testlibrary ../ + * @library /lib/testlibrary /test/lib ../ * @ignore until 8026393 is fixed * @run main BadKeyUsageTest */ diff -r b7453e312305 -r 3b471ff2785c jdk/test/sun/security/tools/jarsigner/warnings/BadNetscapeCertTypeTest.java --- a/jdk/test/sun/security/tools/jarsigner/warnings/BadNetscapeCertTypeTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/sun/security/tools/jarsigner/warnings/BadNetscapeCertTypeTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,7 @@ */ import jdk.testlibrary.OutputAnalyzer; -import jdk.testlibrary.JarUtils; +import jdk.test.lib.util.JarUtils; import java.nio.file.Files; import java.nio.file.Paths; @@ -32,7 +32,7 @@ * @test * @bug 8024302 8026037 * @summary Test for badNetscapeCertType warning - * @library /lib/testlibrary ../ + * @library /lib/testlibrary /test/lib ../ * @run main BadNetscapeCertTypeTest */ public class BadNetscapeCertTypeTest extends Test { diff -r b7453e312305 -r 3b471ff2785c jdk/test/sun/security/tools/jarsigner/warnings/ChainNotValidatedTest.java --- a/jdk/test/sun/security/tools/jarsigner/warnings/ChainNotValidatedTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/sun/security/tools/jarsigner/warnings/ChainNotValidatedTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,13 +24,13 @@ import java.io.File; import jdk.testlibrary.OutputAnalyzer; import jdk.testlibrary.ProcessTools; -import jdk.testlibrary.JarUtils; +import jdk.test.lib.util.JarUtils; /** * @test * @bug 8024302 8026037 * @summary Test for chainNotValidated warning - * @library /lib/testlibrary ../ + * @library /lib/testlibrary /test/lib ../ * @run main ChainNotValidatedTest */ public class ChainNotValidatedTest extends Test { diff -r b7453e312305 -r 3b471ff2785c jdk/test/sun/security/tools/jarsigner/warnings/HasExpiredCertTest.java --- a/jdk/test/sun/security/tools/jarsigner/warnings/HasExpiredCertTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/sun/security/tools/jarsigner/warnings/HasExpiredCertTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,13 +22,13 @@ */ import jdk.testlibrary.OutputAnalyzer; -import jdk.testlibrary.JarUtils; +import jdk.test.lib.util.JarUtils; /** * @test * @bug 8024302 8026037 * @summary Test for hasExpiredCert warning - * @library /lib/testlibrary ../ + * @library /lib/testlibrary /test/lib ../ * @run main HasExpiredCertTest */ public class HasExpiredCertTest extends Test { diff -r b7453e312305 -r 3b471ff2785c jdk/test/sun/security/tools/jarsigner/warnings/HasExpiringCertTest.java --- a/jdk/test/sun/security/tools/jarsigner/warnings/HasExpiringCertTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/sun/security/tools/jarsigner/warnings/HasExpiringCertTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,13 +22,13 @@ */ import jdk.testlibrary.OutputAnalyzer; -import jdk.testlibrary.JarUtils; +import jdk.test.lib.util.JarUtils; /** * @test * @bug 8024302 8026037 * @summary Test for hasExpiringCert warning - * @library /lib/testlibrary ../ + * @library /lib/testlibrary /test/lib ../ * @run main HasExpiringCertTest */ public class HasExpiringCertTest extends Test { diff -r b7453e312305 -r 3b471ff2785c jdk/test/sun/security/tools/jarsigner/warnings/HasUnsignedEntryTest.java --- a/jdk/test/sun/security/tools/jarsigner/warnings/HasUnsignedEntryTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/sun/security/tools/jarsigner/warnings/HasUnsignedEntryTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,13 +22,13 @@ */ import jdk.testlibrary.OutputAnalyzer; -import jdk.testlibrary.JarUtils; +import jdk.test.lib.util.JarUtils; /** * @test * @bug 8024302 8026037 * @summary Test for hasUnsignedEntry warning - * @library /lib/testlibrary ../ + * @library /lib/testlibrary /test/lib ../ * @run main HasUnsignedEntryTest */ public class HasUnsignedEntryTest extends Test { diff -r b7453e312305 -r 3b471ff2785c jdk/test/sun/security/tools/jarsigner/warnings/MultipleWarningsTest.java --- a/jdk/test/sun/security/tools/jarsigner/warnings/MultipleWarningsTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/sun/security/tools/jarsigner/warnings/MultipleWarningsTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,13 +22,13 @@ */ import jdk.testlibrary.OutputAnalyzer; -import jdk.testlibrary.JarUtils; +import jdk.test.lib.util.JarUtils; /** * @test * @bug 8024302 8026037 * @summary Checks if jarsigner prints appropriate warnings - * @library /lib/testlibrary ../ + * @library /lib/testlibrary /test/lib ../ * @run main MultipleWarningsTest */ public class MultipleWarningsTest extends Test { diff -r b7453e312305 -r 3b471ff2785c jdk/test/sun/security/tools/jarsigner/warnings/NoTimestampTest.java --- a/jdk/test/sun/security/tools/jarsigner/warnings/NoTimestampTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/sun/security/tools/jarsigner/warnings/NoTimestampTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,13 +23,13 @@ import java.util.Date; import jdk.testlibrary.OutputAnalyzer; -import jdk.testlibrary.JarUtils; +import jdk.test.lib.util.JarUtils; /** * @test * @bug 8024302 8026037 * @summary Checks warnings if -tsa and -tsacert options are not specified - * @library /lib/testlibrary ../ + * @library /lib/testlibrary /test/lib ../ * @run main NoTimestampTest */ public class NoTimestampTest extends Test { diff -r b7453e312305 -r 3b471ff2785c jdk/test/sun/security/tools/jarsigner/warnings/NotSignedByAliasTest.java --- a/jdk/test/sun/security/tools/jarsigner/warnings/NotSignedByAliasTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/sun/security/tools/jarsigner/warnings/NotSignedByAliasTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,13 +22,13 @@ */ import jdk.testlibrary.OutputAnalyzer; -import jdk.testlibrary.JarUtils; +import jdk.test.lib.util.JarUtils; /** * @test * @bug 8024302 8026037 * @summary Test for notSignedByAlias warning - * @library /lib/testlibrary ../ + * @library /lib/testlibrary /test/lib ../ * @run main NotSignedByAliasTest */ public class NotSignedByAliasTest extends Test { diff -r b7453e312305 -r 3b471ff2785c jdk/test/sun/security/tools/jarsigner/warnings/NotYetValidCertTest.java --- a/jdk/test/sun/security/tools/jarsigner/warnings/NotYetValidCertTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/sun/security/tools/jarsigner/warnings/NotYetValidCertTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,13 +22,13 @@ */ import jdk.testlibrary.OutputAnalyzer; -import jdk.testlibrary.JarUtils; +import jdk.test.lib.util.JarUtils; /** * @test * @bug 8024302 8026037 * @summary Test for notYetValidCert warning - * @library /lib/testlibrary ../ + * @library /lib/testlibrary /test/lib ../ * @run main NotYetValidCertTest */ public class NotYetValidCertTest extends Test { diff -r b7453e312305 -r 3b471ff2785c jdk/test/sun/security/tools/keytool/ReadJar.java --- a/jdk/test/sun/security/tools/keytool/ReadJar.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/sun/security/tools/keytool/ReadJar.java Wed Jul 05 23:32:48 2017 +0200 @@ -26,14 +26,13 @@ * @bug 6890872 8168882 * @summary keytool -printcert to recognize signed jar files * @library /test/lib - * @library /lib/testlibrary */ import java.nio.file.Files; import java.nio.file.Paths; import jdk.test.lib.SecurityTools; import jdk.test.lib.process.OutputAnalyzer; -import jdk.testlibrary.JarUtils; +import jdk.test.lib.util.JarUtils; public class ReadJar { diff -r b7453e312305 -r 3b471ff2785c jdk/test/tools/jar/InputFilesTest.java --- a/jdk/test/tools/jar/InputFilesTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/tools/jar/InputFilesTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,9 +28,8 @@ * options with/without a --release option. Some input files are * duplicates that sometimes cause exceptions and other times do not, * demonstrating identical behavior to JDK 8 jar tool. - * @library /lib/testlibrary + * @library /test/lib * @modules jdk.jartool - * @build jdk.testlibrary.FileUtils * @run testng InputFilesTest */ @@ -51,7 +50,7 @@ import java.util.stream.Stream; import java.util.zip.ZipException; -import jdk.testlibrary.FileUtils; +import jdk.test.lib.util.FileUtils; public class InputFilesTest { private static final ToolProvider JAR_TOOL = ToolProvider.findFirst("jar") diff -r b7453e312305 -r 3b471ff2785c jdk/test/tools/jar/ReleaseBeforeFiles.java --- a/jdk/test/tools/jar/ReleaseBeforeFiles.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/tools/jar/ReleaseBeforeFiles.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,9 +27,8 @@ * @summary test that both old style command line options and new gnu style * command line options work with the --release option whether or * not the --release option is preceded by a file name. - * @library /lib/testlibrary + * @library /test/lib * @modules jdk.jartool/sun.tools.jar - * @build jdk.testlibrary.FileUtils * @run testng ReleaseBeforeFiles */ @@ -46,7 +45,7 @@ import java.util.Arrays; import java.util.stream.Stream; -import jdk.testlibrary.FileUtils; +import jdk.test.lib.util.FileUtils; public class ReleaseBeforeFiles { private Runnable onCompletion; diff -r b7453e312305 -r 3b471ff2785c jdk/test/tools/jar/compat/CLICompatibility.java --- a/jdk/test/tools/jar/compat/CLICompatibility.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/tools/jar/compat/CLICompatibility.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,7 +35,7 @@ import java.util.jar.JarOutputStream; import java.util.stream.Stream; -import jdk.testlibrary.FileUtils; +import jdk.test.lib.util.FileUtils; import jdk.testlibrary.JDKToolFinder; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; @@ -49,8 +49,8 @@ /* * @test * @bug 8170952 - * @library /lib/testlibrary - * @build jdk.testlibrary.FileUtils jdk.testlibrary.JDKToolFinder + * @library /lib/testlibrary /test/lib + * @build jdk.testlibrary.JDKToolFinder * @run testng CLICompatibility * @summary Basic test for compatibility of CLI options */ diff -r b7453e312305 -r 3b471ff2785c jdk/test/tools/jar/mmrjar/Basic.java --- a/jdk/test/tools/jar/mmrjar/Basic.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/tools/jar/mmrjar/Basic.java Wed Jul 05 23:32:48 2017 +0200 @@ -29,8 +29,7 @@ * @modules java.base/jdk.internal.module * jdk.compiler * jdk.jartool - * @library /lib/testlibrary - * @build jdk.testlibrary.FileUtils + * @library /test/lib * @run testng Basic */ @@ -57,7 +56,7 @@ import java.util.zip.ZipFile; import jdk.internal.module.ModuleInfoExtender; -import jdk.testlibrary.FileUtils; +import jdk.test.lib.util.FileUtils; public class Basic { private static final ToolProvider JAR_TOOL = ToolProvider.findFirst("jar") diff -r b7453e312305 -r 3b471ff2785c jdk/test/tools/jar/modularJar/Basic.java --- a/jdk/test/tools/jar/modularJar/Basic.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/tools/jar/modularJar/Basic.java Wed Jul 05 23:32:48 2017 +0200 @@ -25,7 +25,6 @@ import java.lang.module.ModuleDescriptor; import java.lang.reflect.Method; import java.nio.file.*; -import java.nio.file.attribute.BasicFileAttributes; import java.util.*; import java.util.function.Consumer; import java.util.jar.JarEntry; @@ -36,7 +35,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import jdk.testlibrary.FileUtils; +import jdk.test.lib.util.FileUtils; import jdk.testlibrary.JDKToolFinder; import org.testng.annotations.BeforeTest; import org.testng.annotations.DataProvider; @@ -48,10 +47,10 @@ /* * @test * @bug 8167328 8171830 8165640 8174248 8176772 - * @library /lib/testlibrary + * @library /lib/testlibrary /test/lib * @modules jdk.compiler * jdk.jartool - * @build jdk.testlibrary.FileUtils jdk.testlibrary.JDKToolFinder + * @build jdk.testlibrary.JDKToolFinder * @compile Basic.java * @run testng Basic * @summary Tests for plain Modular jars & Multi-Release Modular jars diff -r b7453e312305 -r 3b471ff2785c jdk/test/tools/jar/multiRelease/ApiValidatorTest.java --- a/jdk/test/tools/jar/multiRelease/ApiValidatorTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/tools/jar/multiRelease/ApiValidatorTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -24,18 +24,16 @@ /* * @test * @summary Tests for API validator. - * @library /test/lib /lib/testlibrary + * @library /test/lib * @modules java.base/jdk.internal.misc * jdk.compiler * jdk.jartool - * @build jdk.test.lib.JDKToolFinder jdk.test.lib.Utils jdk.test.lib.process.* - * @build jdk.testlibrary.FileUtils * @build MRTestBase * @run testng/timeout=1200 ApiValidatorTest */ import jdk.test.lib.process.OutputAnalyzer; -import jdk.testlibrary.FileUtils; +import jdk.test.lib.util.FileUtils; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.DataProvider; @@ -421,4 +419,5 @@ javac(classes, sourceFiles); } -} \ No newline at end of file +} + diff -r b7453e312305 -r 3b471ff2785c jdk/test/tools/jar/multiRelease/Basic.java --- a/jdk/test/tools/jar/multiRelease/Basic.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/tools/jar/multiRelease/Basic.java Wed Jul 05 23:32:48 2017 +0200 @@ -23,19 +23,17 @@ /* * @test - * @library /test/lib /lib/testlibrary + * @library /test/lib * @modules java.base/jdk.internal.misc * jdk.compiler * jdk.jartool - * @build jdk.test.lib.JDKToolFinder jdk.test.lib.Utils jdk.test.lib.process.* - * @build jdk.testlibrary.FileUtils * @build MRTestBase * @run testng Basic */ import static org.testng.Assert.*; -import jdk.testlibrary.FileUtils; +import jdk.test.lib.util.FileUtils; import org.testng.annotations.*; import java.io.File; diff -r b7453e312305 -r 3b471ff2785c jdk/test/tools/jar/multiRelease/RuntimeTest.java --- a/jdk/test/tools/jar/multiRelease/RuntimeTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/tools/jar/multiRelease/RuntimeTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,12 +25,7 @@ * @test * @summary Test Multi-Release jar usage in runtime * @library /test/lib - * @library /lib/testlibrary * @modules jdk.compiler - * @build jdk.test.lib.JDKToolFinder jdk.test.lib.JDKToolLauncher - * jdk.test.lib.process.OutputAnalyzer - * jdk.test.lib.process.ProcessTools - * CompilerUtils RuntimeTest * @run testng RuntimeTest */ @@ -41,6 +36,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.io.UncheckedIOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.URL; @@ -51,7 +47,10 @@ import java.nio.file.StandardCopyOption; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; import java.util.stream.Stream; import org.testng.annotations.BeforeClass; @@ -60,37 +59,53 @@ import jdk.test.lib.JDKToolFinder; import jdk.test.lib.JDKToolLauncher; +import jdk.test.lib.compiler.CompilerUtils; import jdk.test.lib.process.OutputAnalyzer; import jdk.test.lib.process.ProcessTools; public class RuntimeTest { public static final int SUCCESS = 0; - private final String src = System.getProperty("test.src", "."); - private final String usr = System.getProperty("user.dir", "."); + private static final String src = System.getProperty("test.src", "."); + private static final String usr = System.getProperty("user.dir", "."); + + private static final Path srcFileRoot = Paths.get(src, "data", "runtimetest"); + private static final Path genFileRoot = Paths.get(usr, "data", "runtimetest"); + + private static final int OLD_RELEASE = 8; + private static final int CURRENT_RELEASE = Runtime.version().major(); + private static final int FUTURE_RELEASE = CURRENT_RELEASE + 1; + private static final String MRJAR_BOTH_RELEASES = "MV_BOTH.jar"; + private static final String MRJAR_CURRENT_RELEASE = "MV_ONLY_" + CURRENT_RELEASE + ".jar"; + private static final String NON_MRJAR_OLD_RELEASE = "NON_MV.jar"; + + private static final int[] versions = { OLD_RELEASE, CURRENT_RELEASE, FUTURE_RELEASE }; @DataProvider(name = "jarFiles") Object[][] jarFiles() { - return new Object[][] { { "MV_BOTH.jar", 9, 9, 9 }, - { "MV_ONLY_9.jar", 9, 9, 9 }, - { "NON_MV.jar", 8, 8, 8 } }; + return new Object[][]{ + { MRJAR_BOTH_RELEASES, CURRENT_RELEASE, CURRENT_RELEASE, CURRENT_RELEASE }, + { MRJAR_CURRENT_RELEASE, CURRENT_RELEASE, CURRENT_RELEASE, CURRENT_RELEASE }, + { NON_MRJAR_OLD_RELEASE, OLD_RELEASE, OLD_RELEASE, OLD_RELEASE } + }; } @BeforeClass protected void setUpTest() throws Throwable { + createJarSourceFiles(); compile(); Path classes = Paths.get("classes"); - jar("cfm", "MV_BOTH.jar", "manifest.txt", - "-C", classes.resolve("base").toString(), ".", - "--release", "9", "-C", classes.resolve("v9").toString(), ".", - "--release", "10", "-C", classes.resolve("v10").toString(), ".") + jar("cfm", MRJAR_BOTH_RELEASES, "manifest.txt", + "-C", classes.resolve("v" + OLD_RELEASE).toString(), ".", + "--release", "" + CURRENT_RELEASE, "-C", classes.resolve("v" + CURRENT_RELEASE).toString(), ".", + "--release", "" + FUTURE_RELEASE, "-C", classes.resolve("v" + FUTURE_RELEASE).toString(), ".") .shouldHaveExitValue(0); - jar("cfm", "MV_ONLY_9.jar", "manifest.txt", - "-C", classes.resolve("base").toString(), ".", - "--release", "9", "-C", classes.resolve("v9").toString(), ".") + jar("cfm", MRJAR_CURRENT_RELEASE, "manifest.txt", + "-C", classes.resolve("v" + OLD_RELEASE).toString(), ".", + "--release", "" + CURRENT_RELEASE, "-C", classes.resolve("v" + CURRENT_RELEASE).toString(), ".") .shouldHaveExitValue(0); - jar("cfm", "NON_MV.jar", "manifest.txt", - "-C", classes.resolve("base").toString(), ".") + jar("cfm", NON_MRJAR_OLD_RELEASE, "manifest.txt", + "-C", classes.resolve("v" + OLD_RELEASE).toString(), ".") .shouldHaveExitValue(0); } @@ -203,12 +218,37 @@ return ProcessTools.executeCommand(launcher.getCommand()); } + private static String platformPath(String p) { + return p.replace("/", File.separator); + } + + private static void createJarSourceFiles() throws IOException { + for (int ver : versions) { + Files.find(srcFileRoot, 3, (file, attrs) -> (file.toString().endsWith(".template"))) + .map(srcFileRoot::relativize) + .map(Path::toString) + .map(p -> p.replace(".template", "")) + .forEach(f -> { + try { + Path template = srcFileRoot.resolve(f + ".template"); + Path out = genFileRoot.resolve(platformPath("v" + ver + "/" + f)); + Files.createDirectories(out.getParent()); + List 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 b7453e312305 -r 3b471ff2785c jdk/test/tools/jar/multiRelease/data/runtimetest/base/testpackage/Helper.java --- a/jdk/test/tools/jar/multiRelease/data/runtimetest/base/testpackage/Helper.java Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package testpackage; - -public class Helper { - - private static final int HELPER_VERSION = 8; - - public static int getHelperVersion() { - return HELPER_VERSION; - } -} diff -r b7453e312305 -r 3b471ff2785c jdk/test/tools/jar/multiRelease/data/runtimetest/base/testpackage/Main.java --- a/jdk/test/tools/jar/multiRelease/data/runtimetest/base/testpackage/Main.java Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package testpackage; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; - -public class Main { - - private static final int MAIN_VERSION = 8; - - public static void main(String[] args) { - System.out.println("Main version: " + getMainVersion()); - System.out.println("Helpers version: " + getHelperVersion()); - System.out.println("Resource version: " + getResourceVersion()); - } - - public static int getMainVersion() { - return MAIN_VERSION; - } - - public static int getHelperVersion() { - return testpackage.Helper.getHelperVersion(); - } - - public static int getResourceVersion() { - ClassLoader cl = Main.class.getClassLoader(); - InputStream ris = cl.getResourceAsStream("versionResource"); - if (ris == null) { - throw new Error("Test issue: resource versionResource" - + " cannot be loaded!"); - } - try (BufferedReader br = new BufferedReader(new InputStreamReader(ris))) { - return Integer.parseInt(br.readLine()); - } catch (IOException ioe) { - throw new Error("Unexpected issue", ioe); - } - } -} diff -r b7453e312305 -r 3b471ff2785c jdk/test/tools/jar/multiRelease/data/runtimetest/base/versionResource --- a/jdk/test/tools/jar/multiRelease/data/runtimetest/base/versionResource Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -8 \ No newline at end of file diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package testpackage; + +public class Helper { + + private static final int HELPER_VERSION = $version; + + public static int getHelperVersion() { + return HELPER_VERSION; + } +} diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package testpackage; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; + +public class Main { + + private static final int MAIN_VERSION = $version; + + public static void main(String[] args) { + System.out.println("Main version: " + getMainVersion()); + System.out.println("Helpers version: " + getHelperVersion()); + System.out.println("Resource version: " + getResourceVersion()); + } + + public static int getMainVersion() { + return MAIN_VERSION; + } + + public static int getHelperVersion() { + return testpackage.Helper.getHelperVersion(); + } + + public static int getResourceVersion() { + ClassLoader cl = Main.class.getClassLoader(); + InputStream ris = cl.getResourceAsStream("versionResource"); + if (ris == null) { + throw new Error("Test issue: resource versionResource" + + " cannot be loaded!"); + } + try (BufferedReader br = new BufferedReader(new InputStreamReader(ris))) { + return Integer.parseInt(br.readLine()); + } catch (IOException ioe) { + throw new Error("Unexpected issue", ioe); + } + } +} diff -r b7453e312305 -r 3b471ff2785c jdk/test/tools/jar/multiRelease/data/runtimetest/v10/testpackage/Helper.java --- a/jdk/test/tools/jar/multiRelease/data/runtimetest/v10/testpackage/Helper.java Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package testpackage; - -public class Helper { - - private static final int HELPER_VERSION = 10; - - public static int getHelperVersion() { - return HELPER_VERSION; - } -} diff -r b7453e312305 -r 3b471ff2785c jdk/test/tools/jar/multiRelease/data/runtimetest/v10/testpackage/Main.java --- a/jdk/test/tools/jar/multiRelease/data/runtimetest/v10/testpackage/Main.java Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package testpackage; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; - -public class Main { - - private static final int MAIN_VERSION = 10; - - public static void main(String[] args) { - System.out.println("Main version: " + getMainVersion()); - System.out.println("Helpers version: " + getHelperVersion()); - System.out.println("Resource version: " + getResourceVersion()); - } - - public static int getMainVersion() { - return MAIN_VERSION; - } - - public static int getHelperVersion() { - return testpackage.Helper.getHelperVersion(); - } - - public static int getResourceVersion() { - ClassLoader cl = Main.class.getClassLoader(); - InputStream ris = cl.getResourceAsStream("versionResource"); - if (ris == null) { - throw new Error("Test issue: resource versionResource" - + " cannot be loaded!"); - } - try (BufferedReader br = new BufferedReader(new InputStreamReader(ris))) { - return Integer.parseInt(br.readLine()); - } catch (IOException ioe) { - throw new Error("Unexpected issue", ioe); - } - } -} diff -r b7453e312305 -r 3b471ff2785c jdk/test/tools/jar/multiRelease/data/runtimetest/v10/versionResource --- a/jdk/test/tools/jar/multiRelease/data/runtimetest/v10/versionResource Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -10 diff -r b7453e312305 -r 3b471ff2785c jdk/test/tools/jar/multiRelease/data/runtimetest/v9/testpackage/Helper.java --- a/jdk/test/tools/jar/multiRelease/data/runtimetest/v9/testpackage/Helper.java Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package testpackage; - -public class Helper { - - private static final int HELPER_VERSION = 9; - - public static int getHelperVersion() { - return HELPER_VERSION; - } -} diff -r b7453e312305 -r 3b471ff2785c jdk/test/tools/jar/multiRelease/data/runtimetest/v9/testpackage/Main.java --- a/jdk/test/tools/jar/multiRelease/data/runtimetest/v9/testpackage/Main.java Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package testpackage; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; - -public class Main { - - private static final int MAIN_VERSION = 9; - - public static void main(String[] args) { - System.out.println("Main version: " + getMainVersion()); - System.out.println("Helpers version: " + getHelperVersion()); - System.out.println("Resource version: " + getResourceVersion()); - } - - public static int getMainVersion() { - return MAIN_VERSION; - } - - public static int getHelperVersion() { - return testpackage.Helper.getHelperVersion(); - } - - public static int getResourceVersion() { - ClassLoader cl = Main.class.getClassLoader(); - InputStream ris = cl.getResourceAsStream("versionResource"); - if (ris == null) { - throw new Error("Test issue: resource versionResource" - + " cannot be loaded!"); - } - try (BufferedReader br = new BufferedReader(new InputStreamReader(ris))) { - return Integer.parseInt(br.readLine()); - } catch (IOException ioe) { - throw new Error("Unexpected issue", ioe); - } - } -} diff -r b7453e312305 -r 3b471ff2785c jdk/test/tools/jar/multiRelease/data/runtimetest/v9/versionResource --- a/jdk/test/tools/jar/multiRelease/data/runtimetest/v9/versionResource Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -9 diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,1 @@ +$version diff -r b7453e312305 -r 3b471ff2785c jdk/test/tools/jlink/plugins/SystemModuleDescriptors/CompiledVersionTest.java --- a/jdk/test/tools/jlink/plugins/SystemModuleDescriptors/CompiledVersionTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/tools/jlink/plugins/SystemModuleDescriptors/CompiledVersionTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,7 +29,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import jdk.testlibrary.FileUtils; +import jdk.test.lib.util.FileUtils; import static jdk.testlibrary.ProcessTools.*; @@ -39,9 +39,9 @@ /** * @test - * @library /lib/testlibrary + * @library /lib/testlibrary /test/lib * @modules jdk.compiler jdk.jlink - * @build CompiledVersionTest CompilerUtils jdk.testlibrary.FileUtils jdk.testlibrary.ProcessTools + * @build CompiledVersionTest CompilerUtils jdk.testlibrary.ProcessTools * @run testng CompiledVersionTest */ diff -r b7453e312305 -r 3b471ff2785c jdk/test/tools/jlink/plugins/SystemModuleDescriptors/UserModuleTest.java --- a/jdk/test/tools/jlink/plugins/SystemModuleDescriptors/UserModuleTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/tools/jlink/plugins/SystemModuleDescriptors/UserModuleTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -23,7 +23,6 @@ import java.io.File; import java.io.IOException; -import java.lang.module.ModuleDescriptor; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -33,7 +32,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import jdk.testlibrary.FileUtils; +import jdk.test.lib.util.FileUtils; import static jdk.testlibrary.ProcessTools.*; @@ -44,11 +43,11 @@ /** * @test * @bug 8142968 8173381 8174740 - * @library /lib/testlibrary + * @library /lib/testlibrary /test/lib * @modules jdk.compiler jdk.jlink * @modules java.base/jdk.internal.module * @modules java.base/jdk.internal.org.objectweb.asm - * @build ModuleTargetHelper UserModuleTest CompilerUtils jdk.testlibrary.FileUtils jdk.testlibrary.ProcessTools + * @build ModuleTargetHelper UserModuleTest CompilerUtils jdk.testlibrary.ProcessTools * @run testng UserModuleTest */ diff -r b7453e312305 -r 3b471ff2785c jdk/test/tools/jmod/JmodNegativeTest.java --- a/jdk/test/tools/jmod/JmodNegativeTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/tools/jmod/JmodNegativeTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /** - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,10 +23,10 @@ /* * @test - * @library /lib/testlibrary + * @library /lib/testlibrary /test/lib * @modules jdk.compiler * jdk.jlink - * @build jdk.testlibrary.FileUtils CompilerUtils + * @build CompilerUtils * @run testng JmodNegativeTest * @summary Negative tests for jmod */ @@ -41,7 +41,7 @@ import java.util.function.Supplier; import java.util.spi.ToolProvider; import java.util.zip.ZipOutputStream; -import jdk.testlibrary.FileUtils; +import jdk.test.lib.util.FileUtils; import org.testng.annotations.BeforeTest; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; diff -r b7453e312305 -r 3b471ff2785c jdk/test/tools/jmod/JmodTest.java --- a/jdk/test/tools/jmod/JmodTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/tools/jmod/JmodTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -1,5 +1,5 @@ /** - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,10 +25,10 @@ * @test * @bug 8142968 8166568 8166286 8170618 8168149 * @summary Basic test for jmod - * @library /lib/testlibrary + * @library /lib/testlibrary /test/lib * @modules jdk.compiler * jdk.jlink - * @build jdk.testlibrary.FileUtils CompilerUtils + * @build CompilerUtils * @run testng/othervm -Djava.io.tmpdir=. JmodTest */ @@ -40,9 +40,8 @@ import java.util.function.Consumer; import java.util.regex.Pattern; import java.util.spi.ToolProvider; -import java.util.stream.Collectors; import java.util.stream.Stream; -import jdk.testlibrary.FileUtils; +import jdk.test.lib.util.FileUtils; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; diff -r b7453e312305 -r 3b471ff2785c jdk/test/tools/launcher/ArgsEnvVar.java --- a/jdk/test/tools/launcher/ArgsEnvVar.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/tools/launcher/ArgsEnvVar.java Wed Jul 05 23:32:48 2017 +0200 @@ -23,7 +23,7 @@ /** * @test - * @bug 8170832 + * @bug 8170832 8180447 * @summary Arguments passed in environment variable * @build TestHelper * @run main ArgsEnvVar @@ -224,6 +224,21 @@ verifyOptions(List.of("-p", "?", "-jar", "test.jar", "one", "two"), tr); } + @Test + public void testTrailingSpaces() { + env.put(JDK_JAVA_OPTIONS, "--add-exports java.base/jdk.internal.misc=ALL-UNNAMED "); + TestResult tr = doExec(env, javaCmd, "-jar", "test.jar"); + verifyOptions(List.of("--add-exports", "java.base/jdk.internal.misc=ALL-UNNAMED", "-jar", "test.jar"), tr); + + env.put(JDK_JAVA_OPTIONS, "--class-path ' '"); + tr = doExec(env, javaCmd, "-jar", "test.jar"); + verifyOptions(List.of("--class-path", " ", "-jar", "test.jar"), tr); + + env.put(JDK_JAVA_OPTIONS, " --add-exports java.base/jdk.internal.misc=ALL-UNNAMED "); + tr = doExec(env, javaCmd, "-jar", "test.jar"); + verifyOptions(List.of("--add-exports", "java.base/jdk.internal.misc=ALL-UNNAMED", "-jar", "test.jar"), tr); + } + public static void main(String... args) throws Exception { init(); ArgsEnvVar a = new ArgsEnvVar(); @@ -236,4 +251,3 @@ } } } - diff -r b7453e312305 -r 3b471ff2785c jdk/test/tools/launcher/LauncherMessageTest.java --- a/jdk/test/tools/launcher/LauncherMessageTest.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/tools/launcher/LauncherMessageTest.java Wed Jul 05 23:32:48 2017 +0200 @@ -24,16 +24,16 @@ /** * @test * @bug 8167063 - * @library /lib/testlibrary - * @build jdk.testlibrary.FileUtils + * @library /test/lib * @run main LauncherMessageTest * @summary LauncherHelper should not throw JNI error for LinkageError */ + import java.io.File; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; -import jdk.testlibrary.FileUtils; +import jdk.test.lib.util.FileUtils; public class LauncherMessageTest { diff -r b7453e312305 -r 3b471ff2785c jdk/test/tools/launcher/modules/patch/systemmodules/PatchSystemModules.java --- a/jdk/test/tools/launcher/modules/patch/systemmodules/PatchSystemModules.java Wed May 31 17:44:50 2017 +0000 +++ b/jdk/test/tools/launcher/modules/patch/systemmodules/PatchSystemModules.java Wed Jul 05 23:32:48 2017 +0200 @@ -25,7 +25,7 @@ * @test * @bug 8157068 8177844 * @summary Patch java.base and user module with ModuleHashes attribute - * @library /lib/testlibrary + * @library /lib/testlibrary /test/lib * @modules jdk.compiler * @build CompilerUtils * @run testng PatchSystemModules @@ -39,7 +39,7 @@ import java.util.List; import java.util.stream.Stream; -import jdk.testlibrary.FileUtils; +import jdk.test.lib.util.FileUtils; import jdk.testlibrary.JDKToolFinder; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; diff -r b7453e312305 -r 3b471ff2785c make/CompileJavaModules.gmk --- a/make/CompileJavaModules.gmk Wed May 31 17:44:50 2017 +0000 +++ b/make/CompileJavaModules.gmk Wed Jul 05 23:32:48 2017 +0200 @@ -42,7 +42,8 @@ ################################################################################ -java.base_ADD_JAVAC_FLAGS := -Xdoclint:all/protected,-reference '-Xdoclint/package:java.*,javax.*' -XDstringConcat=inline +java.base_ADD_JAVAC_FLAGS := -Xdoclint:all/protected,-reference '-Xdoclint/package:java.*,javax.*' -XDstringConcat=inline \ + --doclint-format html4 java.base_COPY := .icu .dat .spp content-types.properties hijrah-config-islamic-umalqura.properties java.base_CLEAN := intrinsic.properties @@ -95,7 +96,8 @@ ################################################################################ java.desktop_ADD_JAVAC_FLAGS := -Xdoclint:all/protected,-reference \ - '-Xdoclint/package:java.*,javax.*' -Xlint:exports + '-Xdoclint/package:java.*,javax.*' -Xlint:exports \ + --doclint-format html4 java.desktop_COPY := .gif .png .wav .txt .xml .css .pf java.desktop_CLEAN := iio-plugin.properties cursors.properties diff -r b7453e312305 -r 3b471ff2785c make/Docs.gmk --- a/make/Docs.gmk Wed May 31 17:44:50 2017 +0000 +++ b/make/Docs.gmk Wed Jul 05 23:32:48 2017 +0200 @@ -55,7 +55,6 @@ LICENSE_URL := http://www.oracle.com/technetwork/java/javase/terms/license/java9speclicense.html REDISTRIBUTION_URL := http://www.oracle.com/technetwork/java/redist-137594.html - # In order to get a specific ordering it's necessary to specify the total # ordering of tags as the tags are otherwise ordered in order of definition. JAVADOC_TAGS := \ @@ -163,7 +162,7 @@ ################################################################################ -JDK_DOCS_INDEX_HTML_TITLE := Java™ 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 b7453e312305 -r 3b471ff2785c make/Help.gmk --- a/make/Help.gmk Wed May 31 17:44:50 2017 +0000 +++ b/make/Help.gmk Wed Jul 05 23:32:48 2017 +0200 @@ -56,6 +56,8 @@ $(info $(_) make test # Run tests, default is all tests (see TEST below)) $(info $(_) make run-test- # 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 b7453e312305 -r 3b471ff2785c make/Main.gmk --- a/make/Main.gmk Wed May 31 17:44:50 2017 +0000 +++ b/make/Main.gmk Wed Jul 05 23:32:48 2017 +0200 @@ -450,13 +450,18 @@ run-test-$1: +($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f RunTests.gmk run-test TEST="$1") + exploded-run-test-$1: + +($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f RunTests.gmk run-test \ + TEST="$1" JDK_IMAGE_DIR=$(JDK_OUTPUTDIR)) + endef # ALL_NAMED_TESTS is defined in FindTests.gmk $(foreach t, $(ALL_NAMED_TESTS), $(eval $(call DeclareRunTestRecipe,$t))) ALL_TEST_TARGETS := $(addprefix run-test-, $(ALL_NAMED_TESTS)) +ALL_EXPLODED_TEST_TARGETS := $(addprefix exploded-run-test-, $(ALL_NAMED_TESTS)) -ALL_TARGETS += $(ALL_TEST_TARGETS) +ALL_TARGETS += $(ALL_TEST_TARGETS) $(ALL_EXPLODED_TEST_TARGETS) ################################################################################ # Build tests @@ -485,6 +490,10 @@ run-test: +($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f RunTests.gmk run-test TEST="$(TEST)") +exploded-run-test: + +($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f RunTests.gmk run-test \ + TEST="$(TEST)" JDK_IMAGE_DIR=$(JDK_OUTPUTDIR)) + ifeq ($(BUILD_GTEST), true) test-image-hotspot-gtest: +($(CD) $(HOTSPOT_TOPDIR)/make/test && $(MAKE) $(MAKE_ARGS) -f GtestImage.gmk) @@ -514,7 +523,7 @@ test-image-hotspot-jtreg-native build-test-jdk-jtreg-native \ test-image-jdk-jtreg-native build-test-lib build-test-failure-handler \ test-failure-handler test-image-failure-handler test-image-hotspot-gtest \ - run-test + run-test exploded-run-test ################################################################################ # Run tests @@ -798,7 +807,8 @@ docs-javase-api-modulegraph: exploded-image buildtools-modules # The gensrc steps for hotspot and jdk.jdi create html spec files. - docs-jdk-specs: hotspot-$(JVM_VARIANT_MAIN)-gensrc jdk.jdi-gensrc + docs-jdk-specs: hotspot-$(JVM_VARIANT_MAIN)-gensrc jdk.jdi-gensrc \ + docs-jdk-index docs-jdk-index: exploded-image buildtools-modules @@ -807,9 +817,11 @@ test: jdk-image test-image run-test: jdk-image test-image + exploded-run-test: exploded-image test-image # Declare dependency for all generated test targets $(foreach t, $(ALL_TEST_TARGETS), $(eval $t: jdk-image test-image)) + $(foreach t, $(ALL_EXPLODED_TEST_TARGETS), $(eval $t: exploded-image test-image)) create-buildjdk-copy: jdk.jlink-java java.base-gendata \ $(addsuffix -java, $(INTERIM_IMAGE_MODULES)) diff -r b7453e312305 -r 3b471ff2785c make/common/Modules.gmk --- a/make/common/Modules.gmk Wed May 31 17:44:50 2017 +0000 +++ b/make/common/Modules.gmk Wed Jul 05 23:32:48 2017 +0200 @@ -151,6 +151,7 @@ jdk.crypto.ec \ jdk.dynalink \ jdk.editpad \ + jdk.hotspot.agent \ jdk.httpserver \ jdk.incubator.httpclient \ jdk.jartool \ @@ -298,7 +299,8 @@ $(foreach sub, $(SRC_SUBDIRS), $(addsuffix /*/$(sub), $(TOP_SRC_DIRS)))) ################################################################################ -# Extract module dependencies from module-info.java files. +# Extract module dependencies from module-info.java files, both normal +# dependencies ("requires"), and indirect exports ("requires transitive"). MODULE_DEPS_MAKEFILE := $(MAKESUPPORT_OUTPUTDIR)/module-deps.gmk @@ -320,17 +322,31 @@ gsub(/^ +\*.*/, ""); \ gsub(/ /, ""); \ printf(" %s", $$0) } \ + END { printf("\n") }' $m && \ + $(PRINTF) "TRANSITIVE_MODULES_$(call GetModuleNameFromModuleInfo, $m) :=" && \ + $(NAWK) -v MODULE=$(call GetModuleNameFromModuleInfo, $m) '\ + BEGIN { if (MODULE != "java.base") printf(" java.base"); } \ + /^ *requires *transitive/ { \ + sub(/;/, ""); \ + sub(/requires/, ""); \ + sub(/transitive/, ""); \ + sub(/\/\/.*/, ""); \ + sub(/\/\*.*\*\//, ""); \ + gsub(/^ +\*.*/, ""); \ + gsub(/ /, ""); \ + printf(" %s", $$0) } \ END { printf("\n") }' $m \ ) >> $@ $(NEWLINE)) -include $(MODULE_DEPS_MAKEFILE) -# Param 1: Module to find deps for +# Find dependencies ("requires") for a given module. +# Param 1: Module to find dependencies for. FindDepsForModule = \ $(DEPS_$(strip $1)) -# Finds transitive dependencies in 3 levels. -# Param 1: Module to find transitive deps for +# Find dependencies ("requires") transitively in 3 levels for a given module. +# Param 1: Module to find dependencies for. FindTransitiveDepsForModule = \ $(sort $(call FindDepsForModule, $1) \ $(foreach m, $(call FindDepsForModule, $1), \ @@ -338,11 +354,30 @@ $(foreach n, $(call FindDepsForModule, $m), \ $(call FindDepsForModule, $n)))) -# Finds transitive dependencies in 3 levels for a set of modules. -# Param 1: List of modules to find transitive deps for +# Find dependencies ("requires") transitively in 3 levels for a set of modules. +# Param 1: List of modules to find dependencies for. FindTransitiveDepsForModules = \ $(sort $(foreach m, $1, $(call FindTransitiveDepsForModule, $m))) +# Find indirect exported modules ("requires transitive") for a given module . +# Param 1: Module to find indirect exported modules for. +FindIndirectExportsForModule = \ + $(TRANSITIVE_MODULES_$(strip $1)) + +# Finds indirect exported modules transitively in 3 levels for a given module. +# Param 1: Module to find indirect exported modules for. +FindTransitiveIndirectDepsForModule = \ + $(sort $(call FindIndirectExportsForModule, $1) \ + $(foreach m, $(call FindIndirectExportsForModule, $1), \ + $(call FindIndirectExportsForModule, $m) \ + $(foreach n, $(call FindIndirectExportsForModule, $m), \ + $(call FindIndirectExportsForModule, $n)))) + +# Finds indirect exported modules transitively in 3 levels for a set of modules. +# Param 1: List of modules to find indirect exported modules for. +FindTransitiveIndirectDepsForModules = \ + $(sort $(foreach m, $1, $(call FindTransitiveIndirectDepsForModule, $m))) + # Upgradeable modules are those that are either defined as upgradeable or that # require an upradeable module. FindAllUpgradeableModules = \ diff -r b7453e312305 -r 3b471ff2785c make/common/ProcessMarkdown.gmk --- a/make/common/ProcessMarkdown.gmk Wed May 31 17:44:50 2017 +0000 +++ b/make/common/ProcessMarkdown.gmk Wed Jul 05 23:32:48 2017 +0200 @@ -36,7 +36,7 @@ ifneq ($$(findstring http:/, $$($1_CSS)), ) $1_$2_CSS_OPTION := --css '$$($1_CSS)' else - $1_$2_CSS := $$(call RelativePath, $$($1_CSS), $$($1_$2_TARGET_DIR)) + $1_$2_CSS := $$(strip $$(call RelativePath, $$($1_CSS), $$($1_$2_TARGET_DIR))) $1_$2_CSS_OPTION := --css '$$($1_$2_CSS)' endif endif @@ -51,7 +51,7 @@ $$(call LogInfo, Converting $2 to html) $$(call MakeDir, $$($1_$2_TARGET_DIR) $$(SUPPORT_OUTPUTDIR)/markdown) $$(call ExecuteWithLog, $$(SUPPORT_OUTPUTDIR)/markdown/$$($1_$2_MARKER), \ - $$(PANDOC) $$($1_OPTIONS) -f markdown -t html --standalone \ + $$(PANDOC) $$($1_OPTIONS) -f markdown -t html5 --standalone \ $$($1_$2_CSS_OPTION) $$($1_$2_OPTIONS) '$$<' -o '$$@') ifneq ($$(findstring $$(LOG_LEVEL), debug trace),) TOO_LONG_LINES=`$$(GREP) -E -e '^.{80}.+$$$$' $$<` || true ; \ diff -r b7453e312305 -r 3b471ff2785c make/common/SetupJavaCompilers.gmk --- a/make/common/SetupJavaCompilers.gmk Wed May 31 17:44:50 2017 +0000 +++ b/make/common/SetupJavaCompilers.gmk Wed Jul 05 23:32:48 2017 +0200 @@ -69,7 +69,7 @@ $(eval $(call SetupJavaCompiler,GENERATE_JDKBYTECODE, \ JVM := $(JAVA_JAVAC), \ JAVAC := $(NEW_JAVAC), \ - FLAGS := -source 10 -target 10 \ + FLAGS := -source 10 -target 10 --doclint-format html5 \ -encoding ascii -XDignore.symbol.file=true $(JAVAC_WARNINGS), \ SERVER_DIR := $(SJAVAC_SERVER_DIR), \ SERVER_JVM := $(SJAVAC_SERVER_JAVA))) diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package jdk.test.lib; + +import java.util.Objects; + +/** + * Class which runs another Runnable in infinite loop with certain pauses + * between cycles. + */ +public class InfiniteLoop implements Runnable { + private final Runnable target; + private final long mills; + + + /** + * @param target a target to run in a loop + * @param mills the length of pause time in milliseconds + * @throws NullPointerException if target is null + * @throws IllegalArgumentException if the value of millis is negative + */ + public InfiniteLoop(Runnable target, long mills) { + Objects.requireNonNull(target); + if (mills < 0) { + throw new IllegalArgumentException("mills < 0"); + } + this.target = target; + this.mills = mills; + } + + @Override + public void run() { + try { + while (true) { + target.run(); + if (mills > 0) { + Thread.sleep(mills); + } + } + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new Error(e); + } + } +} diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package jdk.test.lib; + +import java.util.Random; +import java.util.SplittableRandom; + +/** + * Factory class which generates and prints to STDOUT a long-valued seed + * for use in initializing a PRNG. An instance of {@code Random} or + * {@code SplittableRandom} may likewise be obtained. + */ +public class RandomFactory { + /** + * Attempt to obtain the seed from the value of the "seed" property. + * @return The seed or {@code null} if the "seed" property was not set or + * could not be parsed. + */ + private static Long getSystemSeed() { + Long seed = null; + try { + // note that Long.valueOf(null) also throws a + // NumberFormatException so if the property is undefined this + // will still work correctly + seed = Long.valueOf(System.getProperty("seed")); + } catch (NumberFormatException e) { + // do nothing: seed is still null + } + + return seed; + } + + /** + * Obtain a seed from an independent PRNG. + * + * @return A random seed. + */ + private static long getRandomSeed() { + return new Random().nextLong(); + } + + /** + * Obtain and print to STDOUT a seed appropriate for initializing a PRNG. + * If the system property "seed" is set and has value which may be correctly + * parsed it is used, otherwise a seed is generated using an independent + * PRNG. + * + * @return The seed. + */ + public static long getSeed() { + Long seed = getSystemSeed(); + if (seed == null) { + seed = getRandomSeed(); + } + System.out.println("Seed from RandomFactory = "+seed+"L"); + return seed; + } + + /** + * Obtain and print to STDOUT a seed and use it to initialize a new + * {@code Random} instance which is returned. If the system + * property "seed" is set and has value which may be correctly parsed it + * is used, otherwise a seed is generated using an independent PRNG. + * + * @return The {@code Random} instance. + */ + public static Random getRandom() { + return new Random(getSeed()); + } + + /** + * Obtain and print to STDOUT a seed and use it to initialize a new + * {@code SplittableRandom} instance which is returned. If the system + * property "seed" is set and has value which may be correctly parsed it + * is used, otherwise a seed is generated using an independent PRNG. + * + * @return The {@code SplittableRandom} instance. + */ + public static SplittableRandom getSplittableRandom() { + return new SplittableRandom(getSeed()); + } +} diff -r b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package jdk.test.lib; + +import java.util.Objects; +import java.util.concurrent.Callable; + +/** + * Auxiliary class to run target w/ given timeout. + */ +public class TimeLimitedRunner implements Callable { + 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 b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,229 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package jdk.test.lib.util; + +import jdk.test.lib.Platform; + +import java.io.IOException; +import java.nio.file.DirectoryNotEmptyException; +import java.nio.file.FileVisitResult; +import java.nio.file.Files; +import java.nio.file.NoSuchFileException; +import java.nio.file.Path; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeUnit; + + +/** + * Common library for various test file utility functions. + */ +public final class FileUtils { + private static final boolean IS_WINDOWS = Platform.isWindows(); + private static final int RETRY_DELETE_MILLIS = IS_WINDOWS ? 500 : 0; + private static final int MAX_RETRY_DELETE_TIMES = IS_WINDOWS ? 15 : 0; + + /** + * Deletes a file, retrying if necessary. + * + * @param path the file to delete + * + * @throws NoSuchFileException + * if the file does not exist (optional specific exception) + * @throws DirectoryNotEmptyException + * if the file is a directory and could not otherwise be deleted + * because the directory is not empty (optional specific exception) + * @throws IOException + * if an I/O error occurs + */ + public static void deleteFileWithRetry(Path path) throws IOException { + try { + deleteFileWithRetry0(path); + } catch (InterruptedException x) { + throw new IOException("Interrupted while deleting.", x); + } + } + + /** + * Deletes a file, retrying if necessary. + * No exception thrown if file doesn't exist. + * + * @param path the file to delete + * + * @throws NoSuchFileException + * if the file does not exist (optional specific exception) + * @throws DirectoryNotEmptyException + * if the file is a directory and could not otherwise be deleted + * because the directory is not empty (optional specific exception) + * @throws IOException + * if an I/O error occurs + */ + public static void deleteFileIfExistsWithRetry(Path path) throws IOException { + try { + if (Files.exists(path)) { + deleteFileWithRetry0(path); + } + } catch (InterruptedException x) { + throw new IOException("Interrupted while deleting.", x); + } + } + + private static void deleteFileWithRetry0(Path path) + throws IOException, InterruptedException { + int times = 0; + IOException ioe = null; + while (true) { + try { + Files.delete(path); + while (Files.exists(path)) { + times++; + if (times > MAX_RETRY_DELETE_TIMES) { + throw new IOException("File still exists after " + times + " waits."); + } + Thread.sleep(RETRY_DELETE_MILLIS); + } + break; + } catch (NoSuchFileException | DirectoryNotEmptyException x) { + throw x; + } catch (IOException x) { + // Backoff/retry in case another process is accessing the file + times++; + if (ioe == null) { + ioe = x; + } else { + ioe.addSuppressed(x); + } + + if (times > MAX_RETRY_DELETE_TIMES) { + throw ioe; + } + Thread.sleep(RETRY_DELETE_MILLIS); + } + } + } + + /** + * Deletes a directory and its subdirectories, retrying if necessary. + * + * @param dir the directory to delete + * + * @throws IOException + * If an I/O error occurs. Any such exceptions are caught + * internally. If only one is caught, then it is re-thrown. + * If more than one exception is caught, then the second and + * following exceptions are added as suppressed exceptions of the + * first one caught, which is then re-thrown. + */ + public static void deleteFileTreeWithRetry(Path dir) throws IOException { + IOException ioe = null; + final List 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 b7453e312305 -r 3b471ff2785c 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 Wed Jul 05 23:32:48 2017 +0200 @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package jdk.test.lib.util; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; +import java.util.jar.JarOutputStream; +import java.util.jar.Manifest; + +/** + * Common library for various test jar file utility functions. + */ +public final class JarUtils { + + /** + * Create jar file with specified files. If a specified file does not exist, + * a new jar entry will be created with the file name itself as the content. + */ + public static void createJar(String dest, String... files) + throws IOException { + try (JarOutputStream jos = new JarOutputStream( + new FileOutputStream(dest), new Manifest())) { + for (String file : files) { + System.out.println(String.format("Adding %s to %s", + file, dest)); + + // add an archive entry, and write a file + jos.putNextEntry(new JarEntry(file)); + try (FileInputStream fis = new FileInputStream(file)) { + fis.transferTo(jos); + } catch (FileNotFoundException e) { + jos.write(file.getBytes()); + } + } + } + System.out.println(); + } + + /** + * Add or remove specified files to existing jar file. If a specified file + * to be updated or added does not exist, the jar entry will be created + * with the file name itself as the content. + * + * @param src the original jar file name + * @param dest the new jar file name + * @param files the files to update. The list is broken into 2 groups + * by a "-" string. The files before in the 1st group will + * be either updated or added. The files in the 2nd group + * will be removed. If no "-" exists, all files belong to + * the 1st group. + */ + public static void updateJar(String src, String dest, String... files) + throws IOException { + try (JarOutputStream jos = new JarOutputStream( + new FileOutputStream(dest))) { + + // copy each old entry into destination unless the entry name + // is in the updated list + List 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 b7453e312305 -r 3b471ff2785c test/lib/jdk/test/lib/wrappers/InfiniteLoop.java --- a/test/lib/jdk/test/lib/wrappers/InfiniteLoop.java Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package jdk.test.lib.wrappers; - -import java.util.Objects; - -/** - * Class which runs another Runnable in infinite loop with certain pauses - * between cycles. - */ -public class InfiniteLoop implements Runnable { - private final Runnable target; - private final long mills; - - - /** - * @param target a target to run in a loop - * @param mills the length of pause time in milliseconds - * @throws NullPointerException if target is null - * @throws IllegalArgumentException if the value of millis is negative - */ - public InfiniteLoop(Runnable target, long mills) { - Objects.requireNonNull(target); - if (mills < 0) { - throw new IllegalArgumentException("mills < 0"); - } - this.target = target; - this.mills = mills; - } - - @Override - public void run() { - try { - while (true) { - target.run(); - if (mills > 0) { - Thread.sleep(mills); - } - } - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - throw new Error(e); - } - } -} diff -r b7453e312305 -r 3b471ff2785c test/lib/jdk/test/lib/wrappers/TimeLimitedRunner.java --- a/test/lib/jdk/test/lib/wrappers/TimeLimitedRunner.java Wed May 31 17:44:50 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,86 +0,0 @@ -/* - * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package jdk.test.lib.wrappers; - -import java.util.Objects; -import java.util.concurrent.Callable; - -/** - * Auxiliary class to run target w/ given timeout. - */ -public class TimeLimitedRunner implements Callable { - 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; - } - -}