--- a/jdk/src/java.base/share/classes/java/io/BufferedInputStream.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/io/BufferedInputStream.java Thu Jun 23 21:13:13 2016 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1994, 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
@@ -359,10 +359,10 @@
* See the general contract of the <code>skip</code>
* method of <code>InputStream</code>.
*
- * @exception IOException if the stream does not support seek,
- * or if this input stream has been closed by
- * invoking its {@link #close()} method, or an
- * I/O error occurs.
+ * @throws IOException if this input stream has been closed by
+ * invoking its {@link #close()} method,
+ * {@code in.skip(n)} throws an IOException,
+ * or an I/O error occurs.
*/
public synchronized long skip(long n) throws IOException {
getBufIfOpen(); // Check for closed stream
--- a/jdk/src/java.base/share/classes/java/io/FilterInputStream.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/io/FilterInputStream.java Thu Jun 23 21:13:13 2016 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1994, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1994, 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
@@ -144,8 +144,7 @@
*
* @param n the number of bytes to be skipped.
* @return the actual number of bytes skipped.
- * @exception IOException if the stream does not support seek,
- * or if some other I/O error occurs.
+ * @throws IOException if {@code in.skip(n)} throws an IOException.
*/
public long skip(long n) throws IOException {
return in.skip(n);
--- a/jdk/src/java.base/share/classes/java/io/InputStream.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/io/InputStream.java Thu Jun 23 21:13:13 2016 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1994, 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
@@ -325,7 +325,7 @@
* returns 0, and no bytes are skipped. Subclasses may handle the negative
* value differently.
*
- * <p> The <code>skip</code> method of this class creates a
+ * <p> The <code>skip</code> method implementation of this class creates a
* byte array and then repeatedly reads into it until <code>n</code> bytes
* have been read or the end of the stream has been reached. Subclasses are
* encouraged to provide a more efficient implementation of this method.
@@ -333,8 +333,7 @@
*
* @param n the number of bytes to be skipped.
* @return the actual number of bytes skipped.
- * @exception IOException if the stream does not support seek,
- * or if some other I/O error occurs.
+ * @throws IOException if an I/O error occurs.
*/
public long skip(long n) throws IOException {
--- a/jdk/src/java.base/share/classes/java/io/PushbackInputStream.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/io/PushbackInputStream.java Thu Jun 23 21:13:13 2016 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1994, 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
@@ -291,10 +291,10 @@
*
* @param n {@inheritDoc}
* @return {@inheritDoc}
- * @exception IOException if the stream does not support seek,
- * or the stream has been closed by
- * invoking its {@link #close()} method,
- * or an I/O error occurs.
+ * @throws IOException if the stream has been closed by
+ * invoking its {@link #close()} method,
+ * {@code in.skip(n)} throws an IOException,
+ * or an I/O error occurs.
* @see java.io.FilterInputStream#in
* @see java.io.InputStream#skip(long n)
* @since 1.2
--- a/jdk/src/java.base/share/classes/java/net/MulticastSocket.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/net/MulticastSocket.java Thu Jun 23 21:13:13 2016 +0000
@@ -300,8 +300,9 @@
*
* @param mcastaddr is the multicast address to join
*
- * @exception IOException if there is an error joining
- * or when the address is not a multicast address.
+ * @exception IOException if there is an error joining, or when the address
+ * is not a multicast address, or the platform does not support
+ * multicasting
* @exception SecurityException if a security manager exists and its
* {@code checkMulticast} method doesn't allow the join.
*
@@ -384,8 +385,9 @@
* {@link MulticastSocket#setInterface(InetAddress)} or
* {@link MulticastSocket#setNetworkInterface(NetworkInterface)}
*
- * @exception IOException if there is an error joining
- * or when the address is not a multicast address.
+ * @exception IOException if there is an error joining, or when the address
+ * is not a multicast address, or the platform does not support
+ * multicasting
* @exception SecurityException if a security manager exists and its
* {@code checkMulticast} method doesn't allow the join.
* @throws IllegalArgumentException if mcastaddr is null or is a
--- a/jdk/src/java.base/share/classes/java/net/URLPermission.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/net/URLPermission.java Thu Jun 23 21:13:13 2016 +0000
@@ -265,8 +265,14 @@
URLPermission that = (URLPermission)p;
- if (!this.methods.get(0).equals("*") &&
- Collections.indexOfSubList(this.methods, that.methods) == -1) {
+ if (this.methods.isEmpty() && !that.methods.isEmpty()) {
+ return false;
+ }
+
+ if (!this.methods.isEmpty() &&
+ !this.methods.get(0).equals("*") &&
+ Collections.indexOfSubList(this.methods,
+ that.methods) == -1) {
return false;
}
@@ -455,15 +461,11 @@
}
private String actions() {
- StringBuilder b = new StringBuilder();
- for (String s : methods) {
- b.append(s);
+ String b = String.join(",", methods);
+ if (!requestHeaders.isEmpty()) {
+ b += ":" + String.join(",", requestHeaders);
}
- b.append(":");
- for (String s : requestHeaders) {
- b.append(s);
- }
- return b.toString();
+ return b;
}
/**
--- a/jdk/src/java.base/share/classes/java/nio/channels/MulticastChannel.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/nio/channels/MulticastChannel.java Thu Jun 23 21:13:13 2016 +0000
@@ -40,10 +40,11 @@
* address.
*
* <p> In the case of a channel to an {@link StandardProtocolFamily#INET IPv4} socket,
- * the underlying operating system supports <a href="http://www.ietf.org/rfc/rfc2236.txt">
- * <i>RFC 2236: Internet Group Management Protocol, Version 2 (IGMPv2)</i></a>.
- * It may optionally support source filtering as specified by <a
- * href="http://www.ietf.org/rfc/rfc3376.txt"> <i>RFC 3376: Internet Group
+ * the underlying operating system optionally supports
+ * <a href="http://www.ietf.org/rfc/rfc2236.txt"> <i>RFC 2236: Internet Group
+ * Management Protocol, Version 2 (IGMPv2)</i></a>. When IGMPv2 is supported then
+ * the operating system may additionally support source filtering as specified by
+ * <a href="http://www.ietf.org/rfc/rfc3376.txt"> <i>RFC 3376: Internet Group
* Management Protocol, Version 3 (IGMPv3)</i></a>.
* For channels to an {@link StandardProtocolFamily#INET6 IPv6} socket, the equivalent
* standards are <a href="http://www.ietf.org/rfc/rfc2710.txt"> <i>RFC 2710:
@@ -167,7 +168,8 @@
* If the channel already has source-specific membership of the
* group on the interface
* @throws UnsupportedOperationException
- * If the channel's socket is not an Internet Protocol socket
+ * If the channel's socket is not an Internet Protocol socket, or
+ * the platform does not support multicasting
* @throws ClosedChannelException
* If this channel is closed
* @throws IOException
@@ -214,8 +216,9 @@
* If the channel is currently a member of the group on the given
* interface to receive all datagrams
* @throws UnsupportedOperationException
- * If the channel's socket is not an Internet Protocol socket or
- * source filtering is not supported
+ * If the channel's socket is not an Internet Protocol socket, or
+ * source filtering is not supported, or the platform does not
+ * support multicasting
* @throws ClosedChannelException
* If this channel is closed
* @throws IOException
--- a/jdk/src/java.base/share/classes/java/util/Formatter.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/util/Formatter.java Thu Jun 23 21:13:13 2016 +0000
@@ -3895,8 +3895,7 @@
TimeZone tz = t.getTimeZone();
sb.append(tz.getDisplayName((t.get(Calendar.DST_OFFSET) != 0),
TimeZone.SHORT,
- Objects.requireNonNullElse(l,
- Locale.getDefault(Locale.Category.FORMAT))));
+ Objects.requireNonNullElse(l, Locale.US)));
break;
}
@@ -3904,8 +3903,7 @@
case DateTime.NAME_OF_DAY_ABBREV: // 'a'
case DateTime.NAME_OF_DAY: { // 'A'
int i = t.get(Calendar.DAY_OF_WEEK);
- Locale lt = Objects.requireNonNullElse(l,
- Locale.getDefault(Locale.Category.FORMAT));
+ Locale lt = Objects.requireNonNullElse(l, Locale.US);
DateFormatSymbols dfs = DateFormatSymbols.getInstance(lt);
if (c == DateTime.NAME_OF_DAY)
sb.append(dfs.getWeekdays()[i]);
@@ -3917,8 +3915,7 @@
case DateTime.NAME_OF_MONTH_ABBREV_X: // 'h' -- same b
case DateTime.NAME_OF_MONTH: { // 'B'
int i = t.get(Calendar.MONTH);
- Locale lt = Objects.requireNonNullElse(l,
- Locale.getDefault(Locale.Category.FORMAT));
+ Locale lt = Objects.requireNonNullElse(l, Locale.US);
DateFormatSymbols dfs = DateFormatSymbols.getInstance(lt);
if (c == DateTime.NAME_OF_MONTH)
sb.append(dfs.getMonths()[i]);
--- a/jdk/src/java.base/share/classes/java/util/Scanner.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/java.base/share/classes/java/util/Scanner.java Thu Jun 23 21:13:13 2016 +0000
@@ -925,7 +925,6 @@
needInput = true;
return null;
}
-
// Must look for next delims. Simply attempting to match the
// pattern at this point may find a match but it might not be
// the first longest match because of missing input, or it might
@@ -941,16 +940,13 @@
foundNextDelim = matcher.find();
}
if (foundNextDelim) {
- // In two rare cases that more input might cause the match to be
- // lost or change.
- // (1) if requireEnd() is true, more input might cause the match
- // to be lost, we must wait for more input.
- // (2) while hitting the end is okay IF the match does not
- // go away AND the beginning of the next delims does not change
- // (we don't care if they potentially extend further). But it's
- // possible that more input could cause the beginning of the
- // delims change, so have to wait for more input as well.
- if ((matcher.requireEnd() || matcher.hitEnd()) && !sourceClosed) {
+ // In the rare case that more input could cause the match
+ // to be lost and there is more input coming we must wait
+ // for more input. Note that hitting the end is okay as long
+ // as the match cannot go away. It is the beginning of the
+ // next delims we want to be sure about, we don't care if
+ // they potentially extend further.
+ if (matcher.requireEnd() && !sourceClosed) {
needInput = true;
return null;
}
--- a/jdk/src/java.base/share/classes/sun/net/NetworkClient.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/java.base/share/classes/sun/net/NetworkClient.java Thu Jun 23 21:13:13 2016 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1994, 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
@@ -165,8 +165,10 @@
// server & port will be the proxy address and port
s = new Socket(Proxy.NO_PROXY);
}
- } else
+ } else {
s = createSocket();
+ }
+
// Instance specific timeouts do have priority, that means
// connectTimeout & readTimeout (-1 means not set)
// Then global default timeouts
@@ -194,7 +196,7 @@
* to create the socket.
*/
protected Socket createSocket() throws IOException {
- return new java.net.Socket();
+ return new java.net.Socket(Proxy.NO_PROXY); // direct connection
}
protected InetAddress getLocalAddress() throws IOException {
--- a/jdk/src/java.base/share/classes/sun/net/www/protocol/netdoc/Handler.java Thu Jun 23 20:35:15 2016 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,97 +0,0 @@
-/*
- * Copyright (c) 1996, 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. 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.
- */
-
-/*-
- * netdoc urls point either into the local filesystem or externally
- * through an http url, with network documents being preferred. Useful for
- * FAQs & other documents which are likely to be changing over time at the
- * central site, and where the user will want the most recent edition.
- *
- * @author Steven B. Byrne
- */
-
-package sun.net.www.protocol.netdoc;
-
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.MalformedURLException;
-import java.net.URLStreamHandler;
-import java.io.InputStream;
-import java.io.IOException;
-import sun.security.action.GetPropertyAction;
-
-public class Handler extends URLStreamHandler {
- static URL base;
-
- /*
- * Attempt to find a load the given url using the default (network)
- * documentation location. If that fails, use the local copy
- */
- public synchronized URLConnection openConnection(URL u)
- throws IOException
- {
- URLConnection uc = null;
- URL ru;
-
- boolean localonly = Boolean.parseBoolean(
- GetPropertyAction.privilegedGetProperty("newdoc.localonly"));
-
- String docurl = GetPropertyAction.privilegedGetProperty("doc.url");
-
- String file = u.getFile();
- if (!localonly) {
- try {
- if (base == null) {
- base = new URL(docurl);
- }
- ru = new URL(base, file);
- } catch (MalformedURLException e) {
- ru = null;
- }
- if (ru != null) {
- uc = ru.openConnection();
- }
- }
-
- if (uc == null) {
- try {
- ru = new URL("file", "~", file);
-
- uc = ru.openConnection();
- InputStream is = uc.getInputStream(); // Check for success.
- } catch (MalformedURLException e) {
- uc = null;
- } catch (IOException e) {
- uc = null;
- }
- }
-
- if (uc == null) {
- throw new IOException("Can't find file for URL: "
- +u.toExternalForm());
- }
- return uc;
- }
-}
--- a/jdk/src/java.base/share/classes/sun/security/provider/SeedGenerator.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/java.base/share/classes/sun/security/provider/SeedGenerator.java Thu Jun 23 21:13:13 2016 +0000
@@ -354,8 +354,8 @@
// We wait 250milli quanta, so the minimum wait time
// cannot be under 250milli.
int latch = 0;
- long l = System.currentTimeMillis() + 250;
- while (System.currentTimeMillis() < l) {
+ long startTime = System.nanoTime();
+ while (System.nanoTime() - startTime < 250000000) {
synchronized(this){};
latch++;
}
--- a/jdk/src/java.base/share/classes/sun/util/PropertyResourceBundleCharset.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/java.base/share/classes/sun/util/PropertyResourceBundleCharset.java Thu Jun 23 21:13:13 2016 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 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
@@ -34,7 +34,6 @@
import java.nio.charset.CodingErrorAction;
import java.nio.charset.StandardCharsets;
import java.util.Objects;
-import sun.util.logging.PlatformLogger;
/**
* A Charset implementation for reading PropertyResourceBundle, in order
@@ -94,12 +93,11 @@
return cr;
}
+ // Invalid or unmappable UTF-8 sequence detected.
+ // Switching to the ISO 8859-1 decorder.
+ assert cr.isMalformed() || cr.isUnmappable();
in.reset();
out.reset();
-
- PlatformLogger.getLogger(getClass().getCanonicalName()).info(
- "Invalid or unmappable UTF-8 sequence detected. " +
- "Switching encoding from UTF-8 to ISO-8859-1");
cdISO_8859_1 = StandardCharsets.ISO_8859_1.newDecoder();
return cdISO_8859_1.decode(in, out, false);
}
--- a/jdk/src/java.httpclient/share/classes/java/net/http/Stream.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/java.httpclient/share/classes/java/net/http/Stream.java Thu Jun 23 21:13:13 2016 +0000
@@ -617,6 +617,7 @@
void sendBodyImpl() throws IOException, InterruptedException {
if (requestContentLen == 0) {
// no body
+ requestSent();
return;
}
DataFrame df;
@@ -667,7 +668,7 @@
responseFlowController); // TODO: filter headers
if (body == null) {
receiveData();
- return processor.onResponseComplete();
+ body = processor.onResponseComplete();
} else
receiveDataAsync(processor);
responseReceived();
--- a/jdk/src/java.httpclient/share/classes/java/net/http/WS.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/java.httpclient/share/classes/java/net/http/WS.java Thu Jun 23 21:13:13 2016 +0000
@@ -34,7 +34,6 @@
import java.util.concurrent.Executor;
import java.util.function.Consumer;
import java.util.function.Supplier;
-import java.util.stream.Stream;
import static java.lang.System.Logger.Level.ERROR;
import static java.lang.System.Logger.Level.WARNING;
@@ -104,15 +103,6 @@
}
@Override
- public CompletableFuture<WebSocket> sendText(Stream<? extends CharSequence> message) {
- requireNonNull(message, "message");
- synchronized (stateLock) {
- checkState();
- return transmitter.sendText(message);
- }
- }
-
- @Override
public CompletableFuture<WebSocket> sendBinary(ByteBuffer message, boolean isLast) {
requireNonNull(message, "message");
synchronized (stateLock) {
@@ -179,11 +169,11 @@
}
@Override
- public long request(long n) {
+ public void request(long n) {
if (n < 0L) {
throw new IllegalArgumentException("The number must not be negative: " + n);
}
- return receiver.request(n);
+ receiver.request(n);
}
@Override
--- a/jdk/src/java.httpclient/share/classes/java/net/http/WSBuilder.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/java.httpclient/share/classes/java/net/http/WSBuilder.java Thu Jun 23 21:13:13 2016 +0000
@@ -25,6 +25,7 @@
package java.net.http;
import java.net.URI;
+import java.time.Duration;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -59,8 +60,7 @@
private final LinkedHashMap<String, List<String>> headers = new LinkedHashMap<>();
private final WebSocket.Listener listener;
private Collection<String> subprotocols = Collections.emptyList();
- private long timeout;
- private TimeUnit timeUnit;
+ private Duration timeout;
WSBuilder(URI uri, HttpClient client, WebSocket.Listener listener) {
checkURI(requireNonNull(uri, "uri"));
@@ -93,13 +93,8 @@
}
@Override
- public WebSocket.Builder connectTimeout(long timeout, TimeUnit unit) {
- if (timeout < 0) {
- throw new IllegalArgumentException("Negative timeout: " + timeout);
- }
- requireNonNull(unit, "unit");
- this.timeout = timeout;
- this.timeUnit = unit;
+ public WebSocket.Builder connectTimeout(Duration timeout) {
+ this.timeout = requireNonNull(timeout, "timeout");
return this;
}
@@ -139,9 +134,7 @@
return new ArrayList<>(subprotocols);
}
- long getTimeout() { return timeout; }
-
- TimeUnit getTimeUnit() { return timeUnit; }
+ Duration getConnectTimeout() { return timeout; }
private static Collection<String> checkSubprotocols(String mostPreferred,
String... lesserPreferred) {
--- a/jdk/src/java.httpclient/share/classes/java/net/http/WSFrameConsumer.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/java.httpclient/share/classes/java/net/http/WSFrameConsumer.java Thu Jun 23 21:13:13 2016 +0000
@@ -206,7 +206,7 @@
boolean binaryNonEmpty = data.hasRemaining();
WSShared<CharBuffer> textData;
try {
- textData = decoder.decode(data, part.isLast());
+ textData = decoder.decode(data, part == MessagePart.WHOLE || part == MessagePart.LAST);
} catch (CharacterCodingException e) {
throw new WSProtocolException
("5.6.", "Invalid UTF-8 sequence in frame " + opcode, NOT_CONSISTENT, e);
--- a/jdk/src/java.httpclient/share/classes/java/net/http/WSMessageSender.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/java.httpclient/share/classes/java/net/http/WSMessageSender.java Thu Jun 23 21:13:13 2016 +0000
@@ -30,7 +30,6 @@
import java.net.http.WSOutgoingMessage.Close;
import java.net.http.WSOutgoingMessage.Ping;
import java.net.http.WSOutgoingMessage.Pong;
-import java.net.http.WSOutgoingMessage.StreamedText;
import java.net.http.WSOutgoingMessage.Text;
import java.net.http.WSOutgoingMessage.Visitor;
import java.nio.ByteBuffer;
@@ -123,11 +122,6 @@
}
@Override
- public void visit(StreamedText streamedText) {
- throw new IllegalArgumentException("Not yet implemented");
- }
-
- @Override
public void visit(Binary message) {
buffers[1] = message.bytes;
int mask = random.nextInt();
--- a/jdk/src/java.httpclient/share/classes/java/net/http/WSOpeningHandshake.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/java.httpclient/share/classes/java/net/http/WSOpeningHandshake.java Thu Jun 23 21:13:13 2016 +0000
@@ -32,11 +32,14 @@
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
+import java.time.Duration;
+import java.time.temporal.ChronoUnit;
import java.util.Arrays;
import java.util.Base64;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.TimeUnit;
import java.util.function.Predicate;
import java.util.stream.Collectors;
@@ -77,8 +80,12 @@
WSOpeningHandshake(WSBuilder b) {
URI httpURI = createHttpUri(b.getUri());
HttpRequest.Builder requestBuilder = b.getClient().request(httpURI);
- if (b.getTimeUnit() != null) {
- requestBuilder.timeout(b.getTimeUnit(), b.getTimeout());
+ Duration connectTimeout = b.getConnectTimeout();
+ if (connectTimeout != null) {
+ requestBuilder.timeout(
+ TimeUnit.of(ChronoUnit.MILLIS),
+ connectTimeout.get(ChronoUnit.MILLIS)
+ );
}
Collection<String> s = b.getSubprotocols();
if (!s.isEmpty()) {
--- a/jdk/src/java.httpclient/share/classes/java/net/http/WSOutgoingMessage.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/java.httpclient/share/classes/java/net/http/WSOutgoingMessage.java Thu Jun 23 21:13:13 2016 +0000
@@ -25,13 +25,11 @@
package java.net.http;
import java.nio.ByteBuffer;
-import java.util.stream.Stream;
abstract class WSOutgoingMessage {
interface Visitor {
void visit(Text message);
- void visit(StreamedText message);
void visit(Binary message);
void visit(Ping message);
void visit(Pong message);
@@ -64,25 +62,6 @@
}
}
- static final class StreamedText extends WSOutgoingMessage {
-
- public final Stream<? extends CharSequence> characters;
-
- StreamedText(Stream<? extends CharSequence> characters) {
- this.characters = characters;
- }
-
- @Override
- void accept(Visitor visitor) {
- visitor.visit(this);
- }
-
- @Override
- public String toString() {
- return WSUtils.toStringSimple(this) + "[characters=" + characters + "]";
- }
- }
-
static final class Binary extends WSOutgoingMessage {
public final boolean isLast;
--- a/jdk/src/java.httpclient/share/classes/java/net/http/WSReceiver.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/java.httpclient/share/classes/java/net/http/WSReceiver.java Thu Jun 23 21:13:13 2016 +0000
@@ -101,11 +101,10 @@
}
}
- long request(long n) {
+ void request(long n) {
long newDemand = demand.accumulateAndGet(n, (p, i) -> p + i < 0 ? Long.MAX_VALUE : p + i);
handler.signal();
assert newDemand >= 0 : newDemand;
- return newDemand;
}
private boolean getData() throws IOException {
--- a/jdk/src/java.httpclient/share/classes/java/net/http/WSTransmitter.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/java.httpclient/share/classes/java/net/http/WSTransmitter.java Thu Jun 23 21:13:13 2016 +0000
@@ -28,7 +28,6 @@
import java.net.http.WSOutgoingMessage.Close;
import java.net.http.WSOutgoingMessage.Ping;
import java.net.http.WSOutgoingMessage.Pong;
-import java.net.http.WSOutgoingMessage.StreamedText;
import java.net.http.WSOutgoingMessage.Text;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
@@ -40,7 +39,6 @@
import java.util.concurrent.Executor;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.function.Consumer;
-import java.util.stream.Stream;
import static java.lang.String.format;
import static java.net.http.Pair.pair;
@@ -83,11 +81,6 @@
return acceptMessage(new Text(isLast, message));
}
- CompletableFuture<WebSocket> sendText(Stream<? extends CharSequence> message) {
- checkAndUpdateText(true);
- return acceptMessage(new StreamedText(message));
- }
-
CompletableFuture<WebSocket> sendBinary(ByteBuffer message, boolean isLast) {
checkAndUpdateBinary(isLast);
return acceptMessage(new Binary(isLast, message));
--- a/jdk/src/java.httpclient/share/classes/java/net/http/WebSocket.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/java.httpclient/share/classes/java/net/http/WebSocket.java Thu Jun 23 21:13:13 2016 +0000
@@ -28,13 +28,11 @@
import java.net.ProtocolException;
import java.net.URI;
import java.nio.ByteBuffer;
+import java.time.Duration;
import java.util.Map;
-import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
-import java.util.concurrent.TimeUnit;
-import java.util.stream.Stream;
/**
* A WebSocket client conforming to RFC 6455.
@@ -47,8 +45,9 @@
* receive messages. When the {@code WebSocket} is no longer
* needed it must be closed: a Close message must both be {@linkplain
* #sendClose() sent} and {@linkplain Listener#onClose(WebSocket, Optional,
- * String) received}. Or to close abruptly, {@link #abort()} is called. Once
- * closed it remains closed, cannot be reopened.
+ * String) received}. Otherwise, invoke {@link #abort() abort} to close abruptly.
+ *
+ * <p> Once closed the {@code WebSocket} remains closed and cannot be reopened.
*
* <p> Messages of type {@code X} are sent through the {@code WebSocket.sendX}
* methods and received through {@link WebSocket.Listener}{@code .onX} methods
@@ -71,10 +70,6 @@
* arranged from the {@code buffer}'s {@link ByteBuffer#position() position} to
* the {@code buffer}'s {@link ByteBuffer#limit() limit}.
*
- * <p> All message exchange is run by the threads belonging to the {@linkplain
- * HttpClient#executorService() executor service} of {@code WebSocket}'s {@link
- * HttpClient}.
- *
* <p> Unless otherwise noted, passing a {@code null} argument to a constructor
* or method of this type will cause a {@link NullPointerException
* NullPointerException} to be thrown.
@@ -217,22 +212,17 @@
* Sets a timeout for the opening handshake.
*
* <p> If the opening handshake is not finished within the specified
- * timeout then {@link #buildAsync()} completes exceptionally with a
- * {@code HttpTimeoutException}.
+ * amount of time then {@link #buildAsync()} completes exceptionally
+ * with a {@code HttpTimeoutException}.
*
- * <p> If the timeout is not specified then it's deemed infinite.
+ * <p> If this method is not invoked then the timeout is deemed infinite.
*
* @param timeout
- * the maximum time to wait
- * @param unit
- * the time unit of the timeout argument
+ * the timeout
*
* @return this builder
- *
- * @throws IllegalArgumentException
- * if the {@code timeout} is negative
*/
- Builder connectTimeout(long timeout, TimeUnit unit);
+ Builder connectTimeout(Duration timeout);
/**
* Builds a {@code WebSocket}.
@@ -506,7 +496,7 @@
* <p> Once a Close message is received, the server will not send any
* more messages.
*
- * <p> A Close message may consist of a close code and a reason for
+ * <p> A Close message may consist of a status code and a reason for
* closing. The reason will have a UTF-8 representation not longer than
* {@code 123} bytes. The reason may be useful for debugging or passing
* information relevant to the connection but is not necessarily human
@@ -545,12 +535,8 @@
* the time {@code onError} is invoked, no more messages can be sent on
* this {@code WebSocket}.
*
- * @apiNote Errors associated with send operations ({@link
- * WebSocket#sendText(CharSequence, boolean) sendText}, {@link
- * #sendBinary(ByteBuffer, boolean) sendBinary}, {@link
- * #sendPing(ByteBuffer) sendPing}, {@link #sendPong(ByteBuffer)
- * sendPong} and {@link #sendClose(CloseCode, CharSequence) sendClose})
- * are reported to the {@code CompletionStage} operations return.
+ * @apiNote Errors associated with {@code sendX} methods are reported to
+ * the {@code CompletableFuture} these methods return.
*
* @implSpec The default implementation does nothing.
*
@@ -563,8 +549,8 @@
}
/**
- * A marker used by {@link WebSocket.Listener} for partial message
- * receiving.
+ * A marker used by {@link WebSocket.Listener} in cases where a partial
+ * message may be received.
*
* @since 9
*/
@@ -586,19 +572,9 @@
LAST,
/**
- * A whole message. The message consists of a single part.
+ * A whole message consisting of a single part.
*/
- WHOLE;
-
- /**
- * Tells whether a part of a message received with this marker is the
- * last part.
- *
- * @return {@code true} if LAST or WHOLE, {@code false} otherwise
- */
- public boolean isLast() {
- return this == LAST || this == WHOLE;
- }
+ WHOLE
}
/**
@@ -630,7 +606,7 @@
* @param message
* the message
* @param isLast
- * {@code true} if this is the final part of the message,
+ * {@code true} if this is the last part of the message,
* {@code false} otherwise
*
* @return a CompletableFuture with this WebSocket
@@ -679,43 +655,6 @@
}
/**
- * Sends a whole Text message with characters from {@code
- * CharacterSequence}s provided by the given {@code Stream}.
- *
- * <p> This is a convenience method. For the general case use {@link
- * #sendText(CharSequence, boolean)}.
- *
- * <p> Returns a {@code CompletableFuture<WebSocket>} which completes
- * normally when the message has been sent or completes exceptionally if an
- * error occurs.
- *
- * <p> Streamed character sequences should not be modified until the
- * returned {@code CompletableFuture} completes (either normally or
- * exceptionally).
- *
- * <p> The returned {@code CompletableFuture} can complete exceptionally
- * with:
- * <ul>
- * <li> {@link IOException}
- * if an I/O error occurs during this operation
- * <li> {@link IllegalStateException}
- * if the {@code WebSocket} closes while this operation is in progress;
- * or if a Close message has been sent already;
- * or if there is an outstanding send operation;
- * or if a previous Binary message was not sent with {@code isLast == true}
- * </ul>
- *
- * @param message
- * the message
- *
- * @return a CompletableFuture with this WebSocket
- *
- * @throws IllegalArgumentException
- * if {@code message} is a malformed (or an incomplete) UTF-16 sequence
- */
- CompletableFuture<WebSocket> sendText(Stream<? extends CharSequence> message);
-
- /**
* Sends a Binary message with bytes from the given {@code ByteBuffer}.
*
* <p> Returns a {@code CompletableFuture<WebSocket>} which completes
@@ -737,7 +676,7 @@
* @param message
* the message
* @param isLast
- * {@code true} if this is the final part of the message,
+ * {@code true} if this is the last part of the message,
* {@code false} otherwise
*
* @return a CompletableFuture with this WebSocket
@@ -745,43 +684,6 @@
CompletableFuture<WebSocket> sendBinary(ByteBuffer message, boolean isLast);
/**
- * Sends a Binary message with bytes from the given {@code byte[]}.
- *
- * <p> Returns a {@code CompletableFuture<WebSocket>} which completes
- * normally when the message has been sent or completes exceptionally if an
- * error occurs.
- *
- * <p> The returned {@code CompletableFuture} can complete exceptionally
- * with:
- * <ul>
- * <li> {@link IOException}
- * if an I/O error occurs during this operation
- * <li> {@link IllegalStateException}
- * if the {@code WebSocket} closes while this operation is in progress;
- * or if a Close message has been sent already;
- * or if there is an outstanding send operation;
- * or if a previous Text message was not sent with {@code isLast == true}
- * </ul>
- *
- * @implSpec This is equivalent to:
- * <pre>{@code
- * sendBinary(ByteBuffer.wrap(message), isLast)
- * }</pre>
- *
- * @param message
- * the message
- * @param isLast
- * {@code true} if this is the final part of the message,
- * {@code false} otherwise
- *
- * @return a CompletableFuture with this WebSocket
- */
- default CompletableFuture<WebSocket> sendBinary(byte[] message, boolean isLast) {
- Objects.requireNonNull(message, "message");
- return sendBinary(ByteBuffer.wrap(message), isLast);
- }
-
- /**
* Sends a Ping message.
*
* <p> Returns a {@code CompletableFuture<WebSocket>} which completes
@@ -858,10 +760,11 @@
* normally when the message has been sent or completes exceptionally if an
* error occurs.
*
- * <p> A Close message may consist of a close code and a reason for closing.
- * The reason must have a valid UTF-8 representation not longer than {@code
- * 123} bytes. The reason may be useful for debugging or passing information
- * relevant to the connection but is not necessarily human readable.
+ * <p> A Close message may consist of a status code and a reason for
+ * closing. The reason must have a UTF-8 representation not longer than
+ * {@code 123} bytes. The reason may be useful for debugging or passing
+ * information relevant to the connection but is not necessarily human
+ * readable.
*
* <p> The returned {@code CompletableFuture} can complete exceptionally
* with:
@@ -910,24 +813,21 @@
CompletableFuture<WebSocket> sendClose();
/**
- * Requests {@code n} more messages to be received by the {@link Listener
+ * Allows {@code n} more messages to be received by the {@link Listener
* Listener}.
*
- * <p> The actual number might be fewer if either of the endpoints decide to
- * close the connection before that or an error occurs.
+ * <p> The actual number of received messages might be fewer if a Close
+ * message is received, the connection closes or an error occurs.
*
* <p> A {@code WebSocket} that has just been created, hasn't requested
* anything yet. Usually the initial request for messages is done in {@link
* Listener#onOpen(java.net.http.WebSocket) Listener.onOpen}.
*
- * If all requested messages have been received, and the server sends more,
- * then these messages are queued.
- *
* @implNote This implementation does not distinguish between partial and
* whole messages, because it's not known beforehand how a message will be
* received.
*
- * <p> If a server sends more messages than requested, the implementation
+ * <p> If a server sends more messages than requested, this implementation
* queues up these messages on the TCP connection and may eventually force
* the sender to stop sending through TCP flow control.
*
@@ -936,12 +836,8 @@
*
* @throws IllegalArgumentException
* if {@code n < 0}
- *
- * @return resulting unfulfilled demand with this request taken into account
*/
- // TODO return void as it's breaking encapsulation (leaking info when exactly something deemed delivered)
- // or demand behaves after LONG.MAX_VALUE
- long request(long n);
+ void request(long n);
/**
* Returns a {@linkplain Builder#subprotocols(String, String...) subprotocol}
--- a/jdk/src/java.naming/share/classes/com/sun/jndi/ldap/DigestClientId.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/java.naming/share/classes/com/sun/jndi/ldap/DigestClientId.java Thu Jun 23 21:13:13 2016 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 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
@@ -60,7 +60,6 @@
final private String[] propvals;
final private int myHash;
- private int pHash = 0;
DigestClientId(int version, String hostname, int port,
String protocol, Control[] bindCtls, OutputStream trace,
@@ -78,12 +77,9 @@
propvals = new String[SASL_PROPS.length];
for (int i = 0; i < SASL_PROPS.length; i++) {
propvals[i] = (String) env.get(SASL_PROPS[i]);
- if (propvals[i] != null) {
- pHash = pHash * 31 + propvals[i].hashCode();
- }
}
}
- myHash = super.hashCode() + pHash;
+ myHash = super.hashCode() ^ Arrays.hashCode(propvals);
}
public boolean equals(Object obj) {
@@ -92,7 +88,6 @@
}
DigestClientId other = (DigestClientId)obj;
return myHash == other.myHash
- && pHash == other.pHash
&& super.equals(obj)
&& Arrays.equals(propvals, other.propvals);
}
--- a/jdk/src/java.naming/share/classes/com/sun/jndi/ldap/SimpleClientId.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/java.naming/share/classes/com/sun/jndi/ldap/SimpleClientId.java Thu Jun 23 21:13:13 2016 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 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
@@ -49,21 +49,23 @@
socketFactory);
this.username = username;
+ int pwdHashCode = 0;
if (passwd == null) {
this.passwd = null;
- } else if (passwd instanceof String) {
- this.passwd = passwd;
} else if (passwd instanceof byte[]) {
this.passwd = ((byte[])passwd).clone();
+ pwdHashCode = Arrays.hashCode((byte[])passwd);
} else if (passwd instanceof char[]) {
this.passwd = ((char[])passwd).clone();
+ pwdHashCode = Arrays.hashCode((char[])passwd);
} else {
this.passwd = passwd;
+ pwdHashCode = passwd.hashCode();
}
myHash = super.hashCode()
- + (username != null ? username.hashCode() : 0)
- + (passwd != null ? passwd.hashCode() : 0);
+ ^ (username != null ? username.hashCode() : 0)
+ ^ pwdHashCode;
}
public boolean equals(Object obj) {
--- a/jdk/src/jdk.crypto.pkcs11/share/classes/sun/security/pkcs11/wrapper/PKCS11.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/jdk.crypto.pkcs11/share/classes/sun/security/pkcs11/wrapper/PKCS11.java Thu Jun 23 21:13:13 2016 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
*/
/* Copyright (c) 2002 Graz University of Technology. All rights reserved.
@@ -54,6 +54,8 @@
import java.security.AccessController;
import java.security.PrivilegedAction;
+import sun.security.util.Debug;
+
import static sun.security.pkcs11.wrapper.PKCS11Constants.*;
/**
@@ -85,7 +87,8 @@
return null;
}
});
- initializeLibrary();
+ boolean enableDebug = Debug.getInstance("sunpkcs11") != null;
+ initializeLibrary(enableDebug);
}
public static void loadNative() {
@@ -109,7 +112,7 @@
* @preconditions
* @postconditions
*/
- private static native void initializeLibrary();
+ private static native void initializeLibrary(boolean debug);
// XXX
/**
--- a/jdk/src/jdk.crypto.pkcs11/share/native/libj2pkcs11/p11_general.c Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/jdk.crypto.pkcs11/share/native/libj2pkcs11/p11_general.c Thu Jun 23 21:13:13 2016 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
*/
/* Copyright (c) 2002 Graz University of Technology. All rights reserved.
@@ -73,6 +73,8 @@
JavaVM* jvm = NULL;
+jboolean debug = 0;
+
JNIEXPORT jint JNICALL DEF_JNI_OnLoad(JavaVM *vm, void *reserved) {
jvm = vm;
return JNI_VERSION_1_4;
@@ -92,7 +94,7 @@
*/
JNIEXPORT void JNICALL
Java_sun_security_pkcs11_wrapper_PKCS11_initializeLibrary
-(JNIEnv *env, jclass thisClass)
+(JNIEnv *env, jclass thisClass, jboolean enableDebug)
{
#ifndef NO_CALLBACKS
if (notifyListLock == NULL) {
@@ -101,6 +103,7 @@
#endif
prefetchFields(env, thisClass);
+ debug = enableDebug;
}
jclass fetchClass(JNIEnv *env, const char *name) {
--- a/jdk/src/jdk.crypto.pkcs11/share/native/libj2pkcs11/p11_keymgmt.c Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/jdk.crypto.pkcs11/share/native/libj2pkcs11/p11_keymgmt.c Thu Jun 23 21:13:13 2016 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
*/
/* Copyright (c) 2002 Graz University of Technology. All rights reserved.
@@ -152,6 +152,8 @@
CK_OBJECT_HANDLE_PTR ckpKeyHandles; /* pointer to array with Public and Private Key */
jlongArray jKeyHandles = NULL;
CK_RV rv;
+ int attempts;
+ const int MAX_ATTEMPTS = 3;
CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
if (ckpFunctions == NULL) { return NULL; }
@@ -190,10 +192,35 @@
return NULL;
}
- rv = (*ckpFunctions->C_GenerateKeyPair)(ckSessionHandle, &ckMechanism,
- ckpPublicKeyAttributes, ckPublicKeyAttributesLength,
- ckpPrivateKeyAttributes, ckPrivateKeyAttributesLength,
- ckpPublicKeyHandle, ckpPrivateKeyHandle);
+ /*
+ * Workaround for NSS bug 1012786:
+ *
+ * Key generation may fail with CKR_FUNCTION_FAILED error
+ * if there is insufficient entropy to generate a random key.
+ *
+ * PKCS11 spec says the following about CKR_FUNCTION_FAILED error
+ * (see section 11.1.1):
+ *
+ * ... In any event, although the function call failed, the situation
+ * is not necessarily totally hopeless, as it is likely to be
+ * when CKR_GENERAL_ERROR is returned. Depending on what the root cause of
+ * the error actually was, it is possible that an attempt
+ * to make the exact same function call again would succeed.
+ *
+ * Call C_GenerateKeyPair() several times if CKR_FUNCTION_FAILED occurs.
+ */
+ for (attempts = 0; attempts < MAX_ATTEMPTS; attempts++) {
+ rv = (*ckpFunctions->C_GenerateKeyPair)(ckSessionHandle, &ckMechanism,
+ ckpPublicKeyAttributes, ckPublicKeyAttributesLength,
+ ckpPrivateKeyAttributes, ckPrivateKeyAttributesLength,
+ ckpPublicKeyHandle, ckpPrivateKeyHandle);
+ if (rv == CKR_FUNCTION_FAILED) {
+ printDebug("C_1GenerateKeyPair(): C_GenerateKeyPair() failed \
+ with CKR_FUNCTION_FAILED error, try again\n");
+ } else {
+ break;
+ }
+ }
if (ckAssertReturnValueOK(env, rv) == CK_ASSERT_OK) {
jKeyHandles = ckULongArrayToJLongArray(env, ckpKeyHandles, 2);
--- a/jdk/src/jdk.crypto.pkcs11/share/native/libj2pkcs11/p11_util.c Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/jdk.crypto.pkcs11/share/native/libj2pkcs11/p11_util.c Thu Jun 23 21:13:13 2016 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
*/
/* Copyright (c) 2002 Graz University of Technology. All rights reserved.
@@ -1143,3 +1143,15 @@
#endif
+// prints a message to stdout if debug output is enabled
+void printDebug(const char *format, ...) {
+ if (debug == JNI_TRUE) {
+ va_list args;
+ fprintf(stdout, "sunpkcs11: ");
+ va_start(args, format);
+ vfprintf(stdout, format, args);
+ va_end(args);
+ fflush(stdout);
+ }
+}
+
--- a/jdk/src/jdk.crypto.pkcs11/share/native/libj2pkcs11/pkcs11wrapper.h Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/jdk.crypto.pkcs11/share/native/libj2pkcs11/pkcs11wrapper.h Thu Jun 23 21:13:13 2016 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
*/
/* Copyright (c) 2002 Graz University of Technology. All rights reserved.
@@ -159,6 +159,7 @@
#include "pkcs-11v2-20a3.h"
#include <jni.h>
#include <jni_util.h>
+#include <stdarg.h>
#define MAX_STACK_BUFFER_LEN (4 * 1024)
#define MAX_HEAP_BUFFER_LEN (64 * 1024)
@@ -217,6 +218,10 @@
#define TRACE_UNINTEND
#endif
+/* debug output */
+extern jboolean debug;
+void printDebug(const char *format, ...);
+
#define CK_ASSERT_OK 0L
#define CLASS_INFO "sun/security/pkcs11/wrapper/CK_INFO"
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ImagePluginConfiguration.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ImagePluginConfiguration.java Thu Jun 23 21:13:13 2016 +0000
@@ -101,7 +101,7 @@
List<Plugin> orderedPlugins = PluginOrderingGraph.sort(entry.getValue());
Category category = entry.getKey();
for (Plugin p : orderedPlugins) {
- if (Utils.isPostProcessor(category)) {
+ if (category.isPostProcessor()) {
@SuppressWarnings("unchecked")
PostProcessorPlugin pp = (PostProcessorPlugin) p;
postProcessingPlugins.add(pp);
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/JlinkTask.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/JlinkTask.java Thu Jun 23 21:13:13 2016 +0000
@@ -39,15 +39,7 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
-import java.util.Date;
-import java.util.Formatter;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.Set;
+import java.util.*;
import java.util.stream.Collectors;
import jdk.internal.module.ConfigurableModuleFinder;
@@ -96,11 +88,9 @@
}, "--help"),
new Option<JlinkTask>(true, (task, opt, arg) -> {
String[] dirs = arg.split(File.pathSeparator);
- task.options.modulePath = new Path[dirs.length];
- int i = 0;
- for (String dir : dirs) {
- task.options.modulePath[i++] = Paths.get(dir);
- }
+ Arrays.stream(dirs)
+ .map(Paths::get)
+ .forEach(task.options.modulePath::add);
}, "--modulepath", "--mp"),
new Option<JlinkTask>(true, (task, opt, arg) -> {
for (String mn : arg.split(",")) {
@@ -176,7 +166,7 @@
String saveoptsfile;
boolean version;
boolean fullVersion;
- Path[] modulePath;
+ List<Path> modulePath = new ArrayList<>();
Set<String> limitMods = new HashSet<>();
Set<String> addMods = new HashSet<>();
Path output;
@@ -203,7 +193,7 @@
return EXIT_OK;
}
if (taskHelper.getExistingImage() == null) {
- if (options.modulePath == null || options.modulePath.length == 0) {
+ if (options.modulePath == null || options.modulePath.isEmpty()) {
throw taskHelper.newBadArgs("err.modulepath.must.be.specified").showUsage(true);
}
createImage();
@@ -245,7 +235,7 @@
* Jlink API entry point.
*/
public static void createImage(JlinkConfiguration config,
- PluginsConfiguration plugins)
+ PluginsConfiguration plugins)
throws Exception {
Objects.requireNonNull(config);
Objects.requireNonNull(config.getOutput());
@@ -254,10 +244,9 @@
if (config.getModulepaths().isEmpty()) {
throw new Exception("Empty module paths");
}
- Path[] arr = new Path[config.getModulepaths().size()];
- arr = config.getModulepaths().toArray(arr);
+
ModuleFinder finder
- = newModuleFinder(arr, config.getLimitmods(), config.getModules());
+ = newModuleFinder(config.getModulepaths(), config.getLimitmods(), config.getModules());
// First create the image provider
ImageProvider imageProvider
@@ -332,10 +321,12 @@
return addMods;
}
- private static ModuleFinder newModuleFinder(Path[] paths,
- Set<String> limitMods,
- Set<String> addMods) {
- ModuleFinder finder = ModuleFinder.of(paths);
+ public static ModuleFinder newModuleFinder(List<Path> paths,
+ Set<String> limitMods,
+ Set<String> addMods)
+ {
+
+ ModuleFinder finder = ModuleFinder.of(paths.toArray(new Path[0]));
// jmods are located at link-time
if (finder instanceof ConfigurableModuleFinder) {
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/Utils.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/Utils.java Thu Jun 23 21:13:13 2016 +0000
@@ -35,7 +35,6 @@
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
-import java.util.Set;
import java.util.stream.Collectors;
import jdk.tools.jlink.plugin.Plugin;
import jdk.tools.jlink.plugin.Plugin.Category;
@@ -57,46 +56,16 @@
.collect(Collectors.toList());
}
- public static boolean isPostProcessor(Category category) {
- return category.equals(Category.VERIFIER)
- || category.equals(Category.PROCESSOR)
- || category.equals(Category.PACKAGER);
- }
-
- public static boolean isPreProcessor(Category category) {
- return category.equals(Category.COMPRESSOR)
- || category.equals(Category.FILTER)
- || category.equals(Category.MODULEINFO_TRANSFORMER)
- || category.equals(Category.SORTER)
- || category.equals(Category.TRANSFORMER)
- || category.equals(Category.METAINFO_ADDER);
- }
-
public static boolean isPostProcessor(Plugin provider) {
- Set<Category> types = provider.getType();
- Objects.requireNonNull(types);
- for (Category pt : types) {
- return isPostProcessor(pt);
- }
- return false;
+ return provider.getType().isPostProcessor();
}
public static boolean isPreProcessor(Plugin provider) {
- Set<Category> types = provider.getType();
- Objects.requireNonNull(types);
- for (Category pt : types) {
- return isPreProcessor(pt);
- }
- return false;
+ return !isPostProcessor(provider);
}
public static Category getCategory(Plugin provider) {
- Set<Category> types = provider.getType();
- Objects.requireNonNull(types);
- for (Category t : types) {
- return t;
- }
- return null;
+ return provider.getType();
}
public static List<Plugin> getPreProcessors(List<Plugin> plugins) {
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/packager/AppRuntimeImageBuilder.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/packager/AppRuntimeImageBuilder.java Thu Jun 23 21:13:13 2016 +0000
@@ -27,36 +27,19 @@
import jdk.tools.jlink.Jlink;
-import jdk.tools.jlink.builder.ImageBuilder;
+import jdk.tools.jlink.builder.DefaultImageBuilder;
+import jdk.tools.jlink.internal.JlinkTask;
import jdk.tools.jlink.plugin.Plugin;
-import jdk.tools.jlink.builder.*;
-import jdk.tools.jlink.plugin.ModulePool;
-import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
-import java.io.InputStream;
-import java.io.PrintWriter;
-import java.io.StringReader;
+import java.lang.module.ModuleFinder;
import java.nio.file.Path;
-import java.nio.file.Paths;
import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
import java.util.Collections;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
-import java.util.Properties;
-import java.util.ResourceBundle;
import java.util.Set;
-import java.util.StringTokenizer;
-import java.util.TreeSet;
-import java.util.stream.Collectors;
/**
* AppRuntimeImageBuilder is a private API used only by the Java Packager to generate
@@ -143,4 +126,14 @@
Jlink jlink = new Jlink();
jlink.build(jlinkConfig, pluginConfig);
}
+
+ /**
+ * Returns a ModuleFinder that limits observability to the given root
+ * modules, their transitive dependences, plus a set of other modules.
+ */
+ public static ModuleFinder moduleFinder(List<Path> modulepaths,
+ Set<String> roots,
+ Set<String> otherModules) {
+ return JlinkTask.newModuleFinder(modulepaths, roots, otherModules);
+ }
}
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/DefaultCompressPlugin.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/DefaultCompressPlugin.java Thu Jun 23 21:13:13 2016 +0000
@@ -25,9 +25,7 @@
package jdk.tools.jlink.internal.plugins;
import java.util.Collections;
-import java.util.HashSet;
import java.util.Map;
-import java.util.Set;
import jdk.tools.jlink.internal.ModulePoolImpl;
import jdk.tools.jlink.plugin.ModulePool;
@@ -77,10 +75,8 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.COMPRESSOR);
- return Collections.unmodifiableSet(set);
+ public Category getType() {
+ return Category.COMPRESSOR;
}
@Override
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/ExcludeFilesPlugin.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/ExcludeFilesPlugin.java Thu Jun 23 21:13:13 2016 +0000
@@ -26,9 +26,7 @@
import java.io.UncheckedIOException;
import java.util.Collections;
-import java.util.HashSet;
import java.util.Map;
-import java.util.Set;
import java.util.function.Predicate;
import jdk.tools.jlink.plugin.TransformerPlugin;
import jdk.tools.jlink.plugin.ModulePool;
@@ -60,10 +58,8 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.FILTER);
- return Collections.unmodifiableSet(set);
+ public Category getType() {
+ return Category.FILTER;
}
@Override
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/ExcludePlugin.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/ExcludePlugin.java Thu Jun 23 21:13:13 2016 +0000
@@ -25,9 +25,7 @@
package jdk.tools.jlink.internal.plugins;
import java.util.Collections;
-import java.util.HashSet;
import java.util.Map;
-import java.util.Set;
import java.util.function.Predicate;
import jdk.tools.jlink.plugin.TransformerPlugin;
import jdk.tools.jlink.plugin.ModuleEntry;
@@ -73,10 +71,8 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.FILTER);
- return Collections.unmodifiableSet(set);
+ public Category getType() {
+ return Category.FILTER;
}
@Override
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/ExcludeVMPlugin.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/ExcludeVMPlugin.java Thu Jun 23 21:13:13 2016 +0000
@@ -32,10 +32,8 @@
import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.Comparator;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import java.util.TreeSet;
import java.util.function.Predicate;
import java.util.stream.Collectors;
@@ -159,10 +157,8 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.FILTER);
- return Collections.unmodifiableSet(set);
+ public Category getType() {
+ return Category.FILTER;
}
@Override
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/FileCopierPlugin.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/FileCopierPlugin.java Thu Jun 23 21:13:13 2016 +0000
@@ -36,11 +36,9 @@
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
-import java.util.Set;
import jdk.tools.jlink.internal.ModuleEntryImpl;
import jdk.tools.jlink.plugin.PluginException;
import jdk.tools.jlink.plugin.ModuleEntry;
@@ -188,13 +186,6 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.TRANSFORMER);
- return Collections.unmodifiableSet(set);
- }
-
- @Override
public void configure(Map<String, String> config) {
List<String> arguments = Utils.parseList(config.get(NAME));
if (arguments.isEmpty()) {
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/GenerateJLIClassesPlugin.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/GenerateJLIClassesPlugin.java Thu Jun 23 21:13:13 2016 +0000
@@ -61,11 +61,6 @@
}
@Override
- public Set<Category> getType() {
- return Collections.singleton(Category.TRANSFORMER);
- }
-
- @Override
public String getName() {
return NAME;
}
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/IncludeLocalesPlugin.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/IncludeLocalesPlugin.java Thu Jun 23 21:13:13 2016 +0000
@@ -25,9 +25,9 @@
package jdk.tools.jlink.internal.plugins;
import java.io.ByteArrayInputStream;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
-import java.util.HashSet;
import java.util.IllformedLocaleException;
import java.util.Locale;
import java.util.List;
@@ -82,15 +82,15 @@
"sun.util.resources.ext",
"sun.util.resources.provider");
private static final String METAINFONAME = "LocaleDataMetaInfo";
- private static final String META_FILES =
- "*module-info.class," +
- "*LocaleDataProvider.class," +
- "*" + METAINFONAME + ".class,";
- private static final String INCLUDE_LOCALE_FILES =
- "*sun/text/resources/ext/[^\\/]+_%%.class," +
- "*sun/util/resources/ext/[^\\/]+_%%.class," +
- "*sun/text/resources/cldr/ext/[^\\/]+_%%.class," +
- "*sun/util/resources/cldr/ext/[^\\/]+_%%.class,";
+ private static final List<String> META_FILES = List.of(
+ ".+module-info.class",
+ ".+LocaleDataProvider.class",
+ ".+" + METAINFONAME + ".class");
+ private static final List<String> INCLUDE_LOCALE_FILES = List.of(
+ ".+sun/text/resources/ext/[^_]+_",
+ ".+sun/util/resources/ext/[^_]+_",
+ ".+sun/text/resources/cldr/ext/[^_]+_",
+ ".+sun/util/resources/cldr/ext/[^_]+_");
private Predicate<String> predicate;
private String userParam;
private List<Locale.LanguageRange> priorityList;
@@ -134,10 +134,8 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.FILTER);
- return Collections.unmodifiableSet(set);
+ public Category getType() {
+ return Category.FILTER;
}
@Override
@@ -206,15 +204,17 @@
String.format(PluginsResourceBundle.getMessage(NAME + ".nomatchinglocales"), userParam));
}
- String value = META_FILES + filtered.stream()
- .map(s -> includeLocaleFilePatterns(s))
- .collect(Collectors.joining(","));
+ List<String> value = Stream.concat(
+ META_FILES.stream(),
+ filtered.stream().flatMap(s -> includeLocaleFilePatterns(s).stream()))
+ .map(s -> "regex:" + s)
+ .collect(Collectors.toList());
predicate = ResourceFilter.includeFilter(value);
}
- private String includeLocaleFilePatterns(String tag) {
+ private List<String> includeLocaleFilePatterns(String tag) {
+ List<String> files = new ArrayList<>();
String pTag = tag.replaceAll("-", "_");
- String files = "";
int lastDelimiter = tag.length();
String isoSpecial = pTag.matches("^(he|yi|id).*") ?
pTag.replaceFirst("he", "iw")
@@ -224,11 +224,11 @@
// Add tag patterns including parents
while (true) {
pTag = pTag.substring(0, lastDelimiter);
- files += INCLUDE_LOCALE_FILES.replaceAll("%%", pTag);
+ files.addAll(includeLocaleFiles(pTag));
if (!isoSpecial.isEmpty()) {
isoSpecial = isoSpecial.substring(0, lastDelimiter);
- files += INCLUDE_LOCALE_FILES.replaceAll("%%", isoSpecial);
+ files.addAll(includeLocaleFiles(isoSpecial));
}
lastDelimiter = pTag.lastIndexOf('_');
@@ -240,31 +240,37 @@
final String lang = pTag;
// Add possible special locales of the COMPAT provider
- files += Set.of(jaJPJPTag, noNONYTag, thTHTHTag).stream()
+ Set.of(jaJPJPTag, noNONYTag, thTHTHTag).stream()
.filter(stag -> lang.equals(stag.substring(0,2)))
- .map(t -> INCLUDE_LOCALE_FILES.replaceAll("%%", t.replaceAll("-", "_")))
- .collect(Collectors.joining(","));
+ .map(t -> includeLocaleFiles(t.replaceAll("-", "_")))
+ .forEach(files::addAll);
// Add possible UN.M49 files (unconditional for now) for each language
- files += INCLUDE_LOCALE_FILES.replaceAll("%%", lang + "_[0-9]{3}");
+ files.addAll(includeLocaleFiles(lang + "_[0-9]{3}"));
if (!isoSpecial.isEmpty()) {
- files += INCLUDE_LOCALE_FILES.replaceAll("%%", isoSpecial + "_[0-9]{3}");
+ files.addAll(includeLocaleFiles(isoSpecial + "_[0-9]{3}"));
}
// Add Thai BreakIterator related data files
if (lang.equals("th")) {
- files += "*sun/text/resources/thai_dict," +
- "*sun/text/resources/[^\\/]+BreakIteratorData_th,";
+ files.add(".+sun/text/resources/thai_dict");
+ files.add(".+sun/text/resources/[^_]+BreakIteratorData_th");
}
// Add Taiwan resource bundles for Hong Kong
if (tag.startsWith("zh-HK")) {
- files += INCLUDE_LOCALE_FILES.replaceAll("%%", "zh_TW");
+ files.addAll(includeLocaleFiles("zh_TW"));
}
return files;
}
+ private List<String> includeLocaleFiles(String localeStr) {
+ return INCLUDE_LOCALE_FILES.stream()
+ .map(s -> s + localeStr + ".class")
+ .collect(Collectors.toList());
+ }
+
private boolean stripUnsupportedLocales(byte[] bytes, ClassReader cr) {
char[] buf = new char[cr.getMaxStringLength()];
boolean[] modified = new boolean[1];
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/OptimizationPlugin.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/OptimizationPlugin.java Thu Jun 23 21:13:13 2016 +0000
@@ -31,7 +31,6 @@
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -284,11 +283,4 @@
}
}
}
-
- @Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.TRANSFORMER);
- return Collections.unmodifiableSet(set);
- }
}
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/OrderResourcesPlugin.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/OrderResourcesPlugin.java Thu Jun 23 21:13:13 2016 +0000
@@ -32,7 +32,6 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -143,11 +142,8 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.SORTER);
-
- return Collections.unmodifiableSet(set);
+ public Category getType() {
+ return Category.SORTER;
}
@Override
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/ReleaseInfoPlugin.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/ReleaseInfoPlugin.java Thu Jun 23 21:13:13 2016 +0000
@@ -49,8 +49,8 @@
private final Map<String, String> release = new HashMap<>();
@Override
- public Set<Category> getType() {
- return Collections.singleton(Category.METAINFO_ADDER);
+ public Category getType() {
+ return Category.METAINFO_ADDER;
}
@Override
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/StringSharingPlugin.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/StringSharingPlugin.java Thu Jun 23 21:13:13 2016 +0000
@@ -343,10 +343,8 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.COMPRESSOR);
- return Collections.unmodifiableSet(set);
+ public Category getType() {
+ return Category.COMPRESSOR;
}
@Override
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/StripDebugPlugin.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/StripDebugPlugin.java Thu Jun 23 21:13:13 2016 +0000
@@ -27,8 +27,6 @@
import java.io.ByteArrayInputStream;
import java.util.Arrays;
import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
import java.util.function.Predicate;
import jdk.internal.org.objectweb.asm.ClassReader;
import jdk.internal.org.objectweb.asm.ClassWriter;
@@ -58,13 +56,6 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.TRANSFORMER);
- return Collections.unmodifiableSet(set);
- }
-
- @Override
public String getDescription() {
return PluginsResourceBundle.getDescription(NAME);
}
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/StripNativeCommandsPlugin.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/StripNativeCommandsPlugin.java Thu Jun 23 21:13:13 2016 +0000
@@ -25,8 +25,6 @@
package jdk.tools.jlink.internal.plugins;
import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
import jdk.tools.jlink.plugin.ModuleEntry;
import jdk.tools.jlink.plugin.ModulePool;
import jdk.tools.jlink.plugin.TransformerPlugin;
@@ -45,10 +43,8 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.FILTER);
- return Collections.unmodifiableSet(set);
+ public Category getType() {
+ return Category.FILTER;
}
@Override
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/SystemModuleDescriptorPlugin.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/SystemModuleDescriptorPlugin.java Thu Jun 23 21:13:13 2016 +0000
@@ -83,11 +83,6 @@
}
@Override
- public Set<Category> getType() {
- return Collections.singleton(Category.TRANSFORMER);
- }
-
- @Override
public String getName() {
return NAME;
}
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/ZipPlugin.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/ZipPlugin.java Thu Jun 23 21:13:13 2016 +0000
@@ -29,9 +29,7 @@
import java.nio.ByteBuffer;
import java.util.Arrays;
import java.util.Collections;
-import java.util.HashSet;
import java.util.Map;
-import java.util.Set;
import java.util.function.Predicate;
import java.util.zip.Deflater;
import jdk.tools.jlink.internal.ModulePoolImpl;
@@ -66,10 +64,8 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.COMPRESSOR);
- return Collections.unmodifiableSet(set);
+ public Category getType() {
+ return Category.COMPRESSOR;
}
@Override
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/plugin/Plugin.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/plugin/Plugin.java Thu Jun 23 21:13:13 2016 +0000
@@ -57,19 +57,29 @@
SORTER("SORTER"),
COMPRESSOR("COMPRESSOR"),
METAINFO_ADDER("METAINFO_ADDER"),
- VERIFIER("VERIFIER"),
- PROCESSOR("PROCESSOR"),
- PACKAGER("PACKAGER");
+ VERIFIER("VERIFIER", true),
+ PROCESSOR("PROCESSOR", true),
+ PACKAGER("PACKAGER", true);
private final String name;
+ private final boolean postProcessor;
+
+ Category(String name, boolean postProcessor) {
+ this.name = name;
+ this.postProcessor = postProcessor;
+ }
Category(String name) {
- this.name = name;
+ this(name, false);
}
public String getName() {
return name;
}
+
+ public boolean isPostProcessor() {
+ return postProcessor;
+ }
}
/**
@@ -90,11 +100,12 @@
}
/**
- * The Plugin set of types.
- * @return The set of types.
+ * The type of this plugin.
+ *
+ * @return The type of this plugin
*/
- public default Set<Category> getType() {
- return Collections.emptySet();
+ public default Category getType() {
+ return Category.TRANSFORMER;
}
/**
--- a/jdk/test/ProblemList.txt Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/test/ProblemList.txt Thu Jun 23 21:13:13 2016 +0000
@@ -272,8 +272,6 @@
sun/security/pkcs11/tls/TestPRF.java 8077138,8023434 windows-all
sun/security/pkcs11/tls/TestPremaster.java 8077138,8023434 windows-all
-sun/security/pkcs11/rsa/TestKeyPairGenerator.java 8074580 generic-all
-
sun/security/krb5/auto/HttpNegotiateServer.java 8038079 generic-all
sun/security/tools/keytool/autotest.sh 8130302 generic-all
@@ -387,8 +385,6 @@
# core_tools
-tools/jlink/plugins/IncludeLocalesPluginTest.java 8159781 generic-all
-
tools/jlink/JLinkOptimTest.java 8159264 generic-all
############################################################################
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/com/sun/jndi/ldap/SimpleClientIdHashCode.java Thu Jun 23 21:13:13 2016 +0000
@@ -0,0 +1,73 @@
+/*
+ * 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.
+ */
+
+/**
+ * @test
+ * @bug 8158802
+ * @summary com.sun.jndi.ldap.SimpleClientId produces wrong hash code
+ * @modules java.naming/com.sun.jndi.ldap
+ */
+
+import java.io.OutputStream;
+import java.lang.reflect.Constructor;
+import javax.naming.ldap.Control;
+
+
+public class SimpleClientIdHashCode {
+ public static void main(String[] args) throws Throwable {
+ Class<?> simpleClientIdClass
+ = Class.forName("com.sun.jndi.ldap.SimpleClientId");
+ Constructor<?> init = simpleClientIdClass.getDeclaredConstructor(
+ int.class, String.class, int.class, String.class,
+ Control[].class, OutputStream.class, String.class,
+ String.class, Object.class);
+ init.setAccessible(true);
+
+ Object p1 = new byte[]{66,77};
+ Object p2 = new char[]{'w','d'};
+ Object p3 = "word";
+
+ test(init, new byte[]{65}, new byte[]{65});
+ test(init, new char[]{'p'}, new char[]{'p'});
+ test(init, "pass", "pass");
+ test(init, p1, p1);
+ test(init, p2, p2);
+ test(init, p3, p3);
+ test(init, null, null);
+ }
+
+ private static void test(Constructor<?> init, Object pass1, Object pass2)
+ throws Throwable {
+
+ Object o1 = init.newInstance(1, "host", 3, "", null, System.out,
+ null, null, pass1);
+ Object o2 = init.newInstance(1, "host", 3, "", null, System.out,
+ null, null, pass2);
+
+ if (!o1.equals(o2))
+ throw new RuntimeException("Objects not equal");
+
+ if (o1.hashCode() != o2.hashCode())
+ throw new RuntimeException("Inconsistent hash codes");
+ }
+}
--- a/jdk/test/java/lang/module/ConfigurationTest.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/test/java/lang/module/ConfigurationTest.java Thu Jun 23 21:13:13 2016 +0000
@@ -157,7 +157,7 @@
*
* The test consists of three configurations:
* - Configuration cf1: m1, m2 requires public m1
- * - Configuration cf2: m3 requires m1
+ * - Configuration cf2: m3 requires m2
*/
public void testRequiresPublic2() {
@@ -219,7 +219,7 @@
*
* The test consists of three configurations:
* - Configuration cf1: m1
- * - Configuration cf2: m2 requires public m3, m3 requires m2
+ * - Configuration cf2: m2 requires public m1, m3 requires m2
*/
public void testRequiresPublic3() {
@@ -283,7 +283,7 @@
* The test consists of three configurations:
* - Configuration cf1: m1
* - Configuration cf2: m2 requires public m1
- * - Configuraiton cf3: m3 requires m3
+ * - Configuraiton cf3: m3 requires m2
*/
public void testRequiresPublic4() {
@@ -657,8 +657,8 @@
* Basic test of binding services with configurations.
*
* Configuration cf1: p@1.0 provides p.S
+ * Test configuration cf2: m1 uses p.S, p@2.0 provides p.S
* Test configuration cf2: m1 uses p.S
- * Test configuration cf2: m1 uses p.S, p@2.0 uses p.S
*/
public void testServiceBindingWithConfigurations3() {
@@ -896,7 +896,7 @@
Configuration cf2 = resolveRequires(cf1, finder, "m1");
assertTrue(cf2.modules().size() == 1);
- assertTrue(cf1.findModule("m1").isPresent());
+ assertTrue(cf2.findModule("m1").isPresent());
}
@@ -1305,7 +1305,7 @@
/**
- * Test "provides p.S" where p is not local
+ * Test "provides p.S with q.T" where q.T is not local
*/
@Test(expectedExceptions = { ResolutionException.class })
public void testProviderPackageNotLocal() {
--- a/jdk/test/java/lang/module/ModuleReferenceTest.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/test/java/lang/module/ModuleReferenceTest.java Thu Jun 23 21:13:13 2016 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+ * 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
@@ -110,7 +110,7 @@
ModuleReference mref3 = new ModuleReference(descriptor1, null, supplier);
assertTrue(mref1.equals(mref1));
- assertTrue(mref1.equals(mref1));
+ assertTrue(mref1.equals(mref2));
assertTrue(mref2.equals(mref1));
assertTrue(mref1.hashCode() == mref2.hashCode());
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/net/HttpURLConnection/NoProxyTest.java Thu Jun 23 21:13:13 2016 +0000
@@ -0,0 +1,64 @@
+/*
+ * 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.
+ */
+
+ /*
+ * @test
+ * @bug 8144008
+ * @summary Setting NO_PROXY on HTTP URL connections does not stop proxying
+ * @run main/othervm NoProxyTest
+ */
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.Proxy;
+import java.net.ProxySelector;
+import java.net.SocketAddress;
+import java.net.URI;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.List;
+
+public class NoProxyTest {
+
+ static class NoProxyTestSelector extends ProxySelector {
+ @Override
+ public List<Proxy> select(URI uri) {
+ throw new RuntimeException("Should not reach here as proxy==Proxy.NO_PROXY");
+ }
+ @Override
+ public void connectFailed(URI u, SocketAddress s, IOException e) { }
+ }
+
+ public static void main(String args[]) throws MalformedURLException {
+ ProxySelector.setDefault(new NoProxyTestSelector());
+
+ URL url = URI.create("http://127.0.0.1/").toURL();
+ URLConnection connection;
+ try {
+ connection = url.openConnection(Proxy.NO_PROXY);
+ connection.connect();
+ } catch (IOException ignore) {
+ //ignore
+ }
+ }
+}
--- a/jdk/test/java/net/URLPermission/URLPermissionTest.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/test/java/net/URLPermission/URLPermissionTest.java Thu Jun 23 21:13:13 2016 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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
@@ -26,7 +26,7 @@
/**
* @test
- * @bug 8010464 8027570 8027687 8029354
+ * @bug 8010464 8027570 8027687 8029354 8114860 8071660
*/
public class URLPermissionTest {
@@ -110,6 +110,8 @@
static class ActionImpliesTest extends Test {
String arg1, arg2;
+ String url1 = "http://www.foo.com/-";
+ String url2 = "http://www.foo.com/a/b";
ActionImpliesTest(String arg1, String arg2, boolean expected) {
this.arg1 = arg1;
@@ -117,10 +119,17 @@
this.expected = expected;
}
+ ActionImpliesTest(String ur11, String url2, String arg1, String arg2,
+ boolean expected) {
+ this.url1 = ur11;
+ this.url2 = url2;
+ this.arg1 = arg1;
+ this.arg2 = arg2;
+ this.expected = expected;
+ }
+
@Override
boolean execute() {
- String url1 = "http://www.foo.com/-";
- String url2 = "http://www.foo.com/a/b";
URLPermission p1 = new URLPermission(url1, arg1);
URLPermission p2 = new URLPermission(url2, arg2);
boolean result = p1.implies(p2);
@@ -129,10 +138,37 @@
}
}
+ static ActionsStringTest actionstest(String arg, String expectedActions) {
+ return new ActionsStringTest(arg, expectedActions);
+ }
+
+ static class ActionsStringTest extends Test {
+
+ String expectedActions;
+ String arg;
+
+ public ActionsStringTest(String arg, String expectedActions) {
+ this.arg = arg;
+ this.expectedActions = expectedActions;
+ }
+
+ @Override
+ boolean execute() {
+ String url = "http://www.foo.com/";
+ URLPermission urlp = new URLPermission(url, arg);
+ return (expectedActions.equals(urlp.getActions()));
+ }
+ }
+
static ActionImpliesTest actest(String arg1, String arg2, boolean expected) {
return new ActionImpliesTest(arg1, arg2, expected);
}
+ static ActionImpliesTest actest(String url1, String url2, String arg1,
+ String arg2, boolean expected) {
+ return new ActionImpliesTest(url1, url2, arg1, arg2, expected);
+ }
+
static class HashCodeTest extends Test {
String arg1, arg2;
int hash;
@@ -292,6 +328,9 @@
imtest("https:*", "http:*", false)
};
+ static final String FOO_URL = "http://www.foo.com/";
+ static final String BAR_URL = "http://www.bar.com/";
+
static Test[] actionImplies = {
actest("GET", "GET", true),
actest("GET", "POST", false),
@@ -305,7 +344,28 @@
actest("GET:X-Foo,X-Bar", "GET:x-bar,x-foo", true),
actest("GET:X-Bar,X-Foo,X-Bar,Y-Foo", "GET:x-bar,x-foo", true),
actest("GET:*", "GET:x-bar,x-foo", true),
- actest("*:*", "GET:x-bar,x-foo", true)
+ actest("*:*", "GET:x-bar,x-foo", true),
+ actest("", "GET:x-bar,x-foo", false),
+ actest("GET:x-bar,x-foo", "", true),
+ actest("", "", true),
+ actest("GET,DELETE", "GET,DELETE:x-foo", false),
+ actest(FOO_URL, BAR_URL, "", "GET:x-bar,x-foo", false),
+ actest(FOO_URL, BAR_URL, "GET:x-bar,x-foo", "", false),
+ actest(FOO_URL, BAR_URL, "", "", false)
+ };
+
+ static Test[] actionsStringTest = {
+ actionstest("", ""),
+ actionstest(":X-Bar", ":X-Bar"),
+ actionstest("GET", "GET"),
+ actionstest("get", "GET"),
+ actionstest("GET,POST", "GET,POST"),
+ actionstest("GET,post", "GET,POST"),
+ actionstest("get,post", "GET,POST"),
+ actionstest("get,post,DELETE", "DELETE,GET,POST"),
+ actionstest("GET,POST:", "GET,POST"),
+ actionstest("GET:X-Foo,X-bar", "GET:X-Bar,X-Foo"),
+ actionstest("GET,POST,DELETE:X-Bar,X-Foo,X-Bar,Y-Foo", "DELETE,GET,POST:X-Bar,X-Bar,X-Foo,Y-Foo")
};
static Test[] equalityTests = {
@@ -449,6 +509,23 @@
System.out.println ("action test " + i + " OK");
}
+ for (int i = 0; i < actionsStringTest.length; i++) {
+ ActionsStringTest test = (ActionsStringTest) actionsStringTest[i];
+ Exception caught = null;
+ boolean result = false;
+ try {
+ result = test.execute();
+ } catch (Exception e) {
+ caught = e;
+ }
+ if (!result) {
+ failed = true;
+ System.out.println("test failed: " + test.arg + ": "
+ + test.expectedActions + " Exception: " + caught);
+ }
+ System.out.println("Actions String test " + i + " OK");
+ }
+
serializationTest("http://www.foo.com/-", "GET,DELETE:*");
serializationTest("https://www.foo.com/-", "POST:X-Foo");
serializationTest("https:*", "*:*");
--- a/jdk/test/java/net/httpclient/BasicWebSocketAPITest.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/test/java/net/httpclient/BasicWebSocketAPITest.java Thu Jun 23 21:13:13 2016 +0000
@@ -32,10 +32,9 @@
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.SocketChannel;
+import java.time.Duration;
import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
-import java.util.stream.Stream;
/*
* @test
@@ -83,13 +82,7 @@
(ws) ->
TestKit.assertThrows(NullPointerException.class,
"message",
- () -> ws.sendBinary((byte[]) null, true))
- );
- checkAndClose(
- (ws) ->
- TestKit.assertThrows(NullPointerException.class,
- "message",
- () -> ws.sendBinary((ByteBuffer) null, true))
+ () -> ws.sendBinary(null, true))
);
checkAndClose(
(ws) ->
@@ -125,13 +118,7 @@
(ws) ->
TestKit.assertThrows(NullPointerException.class,
"message",
- () -> ws.sendText((CharSequence) null))
- );
- checkAndClose(
- (ws) ->
- TestKit.assertThrows(NullPointerException.class,
- "message",
- () -> ws.sendText((Stream<? extends CharSequence>) null))
+ () -> ws.sendText(null))
);
checkAndClose(
(ws) ->
@@ -214,17 +201,7 @@
// FIXME: check timeout works
// (i.e. it directly influences the time WebSocket waits for connection + opening handshake)
TestKit.assertNotThrows(
- () -> WebSocket.newBuilder(ws, defaultListener()).connectTimeout(1, TimeUnit.SECONDS)
- );
- WebSocket.Builder builder = WebSocket.newBuilder(ws, defaultListener());
- TestKit.assertThrows(IllegalArgumentException.class,
- "(?i).*\\bnegative\\b.*",
- () -> builder.connectTimeout(-1, TimeUnit.SECONDS)
- );
- WebSocket.Builder builder1 = WebSocket.newBuilder(ws, defaultListener());
- TestKit.assertThrows(NullPointerException.class,
- "unit",
- () -> builder1.connectTimeout(1, null)
+ () -> WebSocket.newBuilder(ws, defaultListener()).connectTimeout(Duration.ofSeconds(1))
);
// FIXME: check these headers are actually received by the server
TestKit.assertNotThrows(
--- a/jdk/test/java/util/Formatter/FormatLocale.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/test/java/util/Formatter/FormatLocale.java Thu Jun 23 21:13:13 2016 +0000
@@ -23,17 +23,22 @@
/**
* @test
- * @bug 8146156
+ * @bug 8146156 8159548
* @summary test whether uppercasing follows Locale.Category.FORMAT locale.
* @run main/othervm FormatLocale
*/
import java.time.LocalDate;
+import java.time.ZonedDateTime;
+import java.time.ZoneId;
import java.time.Month;
+import java.util.Calendar;
import java.util.Formatter;
+import java.util.GregorianCalendar;
import java.util.List;
import java.util.Locale;
import java.util.Locale.Category;
+import java.util.TimeZone;
import java.util.stream.IntStream;
public class FormatLocale {
@@ -61,7 +66,7 @@
"N\u0130SAN",
"1,00000E+08");
- public static void main(String [] args) {
+ static void formatLocaleTest() {
StringBuilder sb = new StringBuilder();
IntStream.range(0, src.size()).forEach(i -> {
@@ -79,4 +84,44 @@
}
});
}
+
+ static void nullLocaleTest() {
+ String fmt = "%1$ta %1$tA %1$th %1$tB %1tZ";
+ String expected = "Fri Friday Jan January PST";
+ StringBuilder sb = new StringBuilder();
+ Locale orig = Locale.getDefault();
+
+ try {
+ Locale.setDefault(Locale.JAPAN);
+ Formatter f = new Formatter(sb, (Locale)null);
+ ZoneId zid = ZoneId.of("America/Los_Angeles");
+ Calendar c = new GregorianCalendar(TimeZone.getTimeZone(zid), Locale.US);
+ c.set(2016, 0, 1, 0, 0, 0);
+ f.format(fmt, c);
+ if (!sb.toString().equals(expected)) {
+ throw new RuntimeException(
+ "Localized text returned with null locale.\n" +
+ " expected: " + expected + "\n" +
+ " returned: " + sb.toString());
+ }
+
+ sb.setLength(0);
+ ZonedDateTime zdt = ZonedDateTime.of(2016, 1, 1, 0, 0, 0, 0, zid);
+ f.format(fmt, zdt);
+
+ if (!sb.toString().equals(expected)) {
+ throw new RuntimeException(
+ "Localized text returned with null locale.\n" +
+ " expected: " + expected + "\n" +
+ " returned: " + sb.toString());
+ }
+ } finally {
+ Locale.setDefault(orig);
+ }
+ }
+
+ public static void main(String [] args) {
+ formatLocaleTest();
+ nullLocaleTest();
+ }
}
--- a/jdk/test/java/util/Scanner/ScanTest.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/test/java/util/Scanner/ScanTest.java Thu Jun 23 21:13:13 2016 +0000
@@ -24,7 +24,7 @@
/**
* @test
* @bug 4313885 4926319 4927634 5032610 5032622 5049968 5059533 6223711 6277261 6269946 6288823
- * 8072722 8072582 8139414
+ * 8072722 8139414
* @summary Basic tests of java.util.Scanner methods
* @key randomness
* @modules jdk.localedata
@@ -512,27 +512,9 @@
}
public static void boundaryDelimTest() throws Exception {
- // 8072582
- StringBuilder sb = new StringBuilder();
- append(sb, 'a', 228); sb.append(",");
- append(sb, 'b', 293); sb.append("#,#");
- append(sb, 'c', 308); sb.append(",");
- append(sb, 'd', 188); sb.append("#,#");
- append(sb, 'e', 2);
- try (Scanner scanner = new Scanner(sb.toString())) {
- scanner.useDelimiter("(#,#)|(,)");
- while(scanner.hasNext()){
- String next = scanner.next();
- if(next.contains("#")){
- System.out.printf("[%s]%n", next);
- failCount++;
- }
- }
- }
-
// 8139414
int i = 1019;
- sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
sb.append("--;");
for (int j = 0; j < 1019; ++j) {
sb.append(j%10);
--- a/jdk/test/javax/net/ssl/DTLS/WeakCipherSuite.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/test/javax/net/ssl/DTLS/WeakCipherSuite.java Thu Jun 23 21:13:13 2016 +0000
@@ -27,7 +27,6 @@
/*
* @test
* @bug 8043758
- * @key intermittent
* @summary Datagram Transport Layer Security (DTLS)
* @modules java.base/sun.security.util
* @build DTLSOverDatagram
--- a/jdk/test/javax/net/ssl/TLS/CipherTestUtils.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/test/javax/net/ssl/TLS/CipherTestUtils.java Thu Jun 23 21:13:13 2016 +0000
@@ -1,4 +1,4 @@
-/**
+/*
* Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
@@ -73,6 +73,7 @@
private static final List<TestParameters> TESTS = new ArrayList<>(3);
private static final List<Exception> EXCEPTIONS
= Collections.synchronizedList(new ArrayList<>(1));
+
private static final String CLIENT_PUBLIC_KEY
= "-----BEGIN CERTIFICATE-----\n"
+ "MIICtTCCAh4CCQDkYJ46DMcGRjANBgkqhkiG9w0BAQUFADCBnDELMAkGA1UEBhMC\n"
@@ -191,7 +192,7 @@
private final X509TrustManager clientTrustManager;
private final X509TrustManager serverTrustManager;
- static abstract class Server implements Runnable {
+ static abstract class Server implements Runnable, AutoCloseable {
final CipherTestUtils cipherTest;
@@ -240,12 +241,11 @@
public static class TestParameters {
- String cipherSuite;
- String protocol;
- String clientAuth;
+ final String cipherSuite;
+ final String protocol;
+ final String clientAuth;
- TestParameters(String cipherSuite, String protocol,
- String clientAuth) {
+ TestParameters(String cipherSuite, String protocol, String clientAuth) {
this.cipherSuite = cipherSuite;
this.protocol = protocol;
this.clientAuth = clientAuth;
@@ -267,10 +267,7 @@
private static volatile CipherTestUtils instance = null;
- public static CipherTestUtils getInstance() throws IOException,
- FileNotFoundException, KeyStoreException,
- NoSuchAlgorithmException, CertificateException,
- UnrecoverableKeyException, InvalidKeySpecException {
+ public static CipherTestUtils getInstance() throws Exception {
if (instance == null) {
synchronized (CipherTestUtils.class) {
if (instance == null) {
@@ -281,21 +278,10 @@
return instance;
}
- public static void setTestedArguments(String testedProtocol,
- String testedCipherSuite) {
-
- TestParameters testedParams;
-
- String cipherSuite = testedCipherSuite.trim();
- if (cipherSuite.startsWith("SSL_")) {
- testedParams =
- new TestParameters(cipherSuite, testedProtocol, null);
- TESTS.add(testedParams);
-
- } else {
- System.out.println("Your input Cipher suites is not correct, "
- + "please try another one .");
- }
+ public static void setTestedArguments(String protocol, String ciphersuite) {
+ ciphersuite = ciphersuite.trim();
+ TestParameters params = new TestParameters(ciphersuite, protocol, null);
+ TESTS.add(params);
}
public X509ExtendedKeyManager getClientKeyManager() {
@@ -318,10 +304,7 @@
EXCEPTIONS.add(e);
}
- private CipherTestUtils()
- throws IOException, FileNotFoundException, KeyStoreException,
- NoSuchAlgorithmException, CertificateException,
- UnrecoverableKeyException, InvalidKeySpecException {
+ private CipherTestUtils() throws Exception {
factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
KeyStore serverKeyStore = createServerKeyStore(SERVER_PUBLIC_KEY,
SERVER_PRIVATE_KEY);
@@ -329,12 +312,11 @@
CA_PRIVATE_KEY);
if (serverKeyStore != null) {
- KeyManagerFactory keyFactory1
- = KeyManagerFactory.getInstance(
+ KeyManagerFactory keyFactory = KeyManagerFactory.getInstance(
KeyManagerFactory.getDefaultAlgorithm());
- keyFactory1.init(serverKeyStore, PASSWORD);
- serverKeyManager = (X509ExtendedKeyManager) keyFactory1.
- getKeyManagers()[0];
+ keyFactory.init(serverKeyStore, PASSWORD);
+ serverKeyManager = (X509ExtendedKeyManager)
+ keyFactory.getKeyManagers()[0];
} else {
serverKeyManager = null;
}
@@ -346,12 +328,11 @@
clientKeyStore =
createServerKeyStore(CLIENT_PUBLIC_KEY,CLIENT_PRIVATE_KEY);
if (clientKeyStore != null) {
- KeyManagerFactory keyFactory
- = KeyManagerFactory.getInstance(
+ KeyManagerFactory keyFactory = KeyManagerFactory.getInstance(
KeyManagerFactory.getDefaultAlgorithm());
keyFactory.init(clientKeyStore, PASSWORD);
- clientKeyManager = (X509ExtendedKeyManager) keyFactory.
- getKeyManagers()[0];
+ clientKeyManager = (X509ExtendedKeyManager)
+ keyFactory.getKeyManagers()[0];
} else {
clientKeyManager = null;
}
@@ -395,8 +376,8 @@
this.cipherTest = cipherTest;
}
- Client(CipherTestUtils cipherTest,
- String testedCipherSuite) throws Exception {
+ Client(CipherTestUtils cipherTest, String testedCipherSuite)
+ throws Exception {
this.cipherTest = cipherTest;
}
@@ -417,7 +398,7 @@
CipherTestUtils.addFailure(e);
System.out.println("** Failed " + params
+ "**, got exception:");
- e.printStackTrace(System.err);
+ e.printStackTrace(System.out);
}
});
}
@@ -448,11 +429,7 @@
}
public static void printStringArray(String[] stringArray) {
- System.out.print(stringArray.length + " : ");
- for (String stringArray1 : stringArray) {
- System.out.print(stringArray1);
- System.out.print(",");
- }
+ System.out.println(Arrays.toString(stringArray));
System.out.println();
}
@@ -496,15 +473,15 @@
System.out.println("-----------------------");
}
- private static KeyStore createServerKeyStore(String publicKeyStr,
+ private static KeyStore createServerKeyStore(String publicKey,
String keySpecStr) throws KeyStoreException, IOException,
NoSuchAlgorithmException, CertificateException,
InvalidKeySpecException {
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(null, null);
- if (publicKeyStr == null || keySpecStr == null) {
- throw new IllegalArgumentException("publicKeyStr or "
+ if (publicKey == null || keySpecStr == null) {
+ throw new IllegalArgumentException("publicKey or "
+ "keySpecStr cannot be null");
}
String strippedPrivateKey = keySpecStr.substring(
@@ -518,8 +495,7 @@
= (RSAPrivateKey) kf.generatePrivate(priKeySpec);
// generate certificate chain
- try (InputStream is =
- new ByteArrayInputStream(publicKeyStr.getBytes())) {
+ try (InputStream is = new ByteArrayInputStream(publicKey.getBytes())) {
// generate certificate from cert string
CertificateFactory cf = CertificateFactory.getInstance("X.509");
Certificate keyCert = cf.generateCertificate(is);
@@ -530,10 +506,9 @@
return ks;
}
- public static int mainServer(PeerFactory peerFactory,
+ public static Server mainServer(PeerFactory peerFactory,
String expectedException) throws Exception {
- long time = System.currentTimeMillis();
setTestedArguments(peerFactory.getTestedProtocol(),
peerFactory.getTestedCipher());
@@ -542,14 +517,11 @@
secureRandom.nextInt();
CipherTestUtils cipherTest = CipherTestUtils.getInstance();
- Server server = peerFactory.newServer(cipherTest, PeerFactory.FREE_PORT);
- Thread serverThread = new Thread(server, "Server");
+ Server srv = peerFactory.newServer(cipherTest, PeerFactory.FREE_PORT);
+ Thread serverThread = new Thread(srv, "Server");
serverThread.start();
- time = System.currentTimeMillis() - time;
- System.out.println("Elapsed time " + time);
-
- return server.getPort();
+ return srv;
}
public static void mainClient(PeerFactory peerFactory, int port,
@@ -566,7 +538,6 @@
CipherTestUtils cipherTest = CipherTestUtils.getInstance();
peerFactory.newClient(cipherTest, port).run();
cipherTest.checkResult(expectedException);
- JSSEServer.closeServer = true;
time = System.currentTimeMillis() - time;
System.out.println("Elapsed time " + time);
@@ -582,9 +553,11 @@
abstract String getTestedCipher();
- abstract Client newClient(CipherTestUtils cipherTest, int testPort) throws Exception;
+ abstract Client newClient(CipherTestUtils cipherTest, int testPort)
+ throws Exception;
- abstract Server newServer(CipherTestUtils cipherTest, int testPort) throws Exception;
+ abstract Server newServer(CipherTestUtils cipherTest, int testPort)
+ throws Exception;
boolean isSupported(String cipherSuite) {
return true;
@@ -618,7 +591,7 @@
try {
trustManager.checkClientTrusted(chain, authType);
} catch (CertificateException excep) {
- System.out.println("ERROR in client trust manager");
+ System.out.println("ERROR in client trust manager: " + excep);
}
}
@@ -628,7 +601,7 @@
try {
trustManager.checkServerTrusted(chain, authType);
} catch (CertificateException excep) {
- System.out.println("ERROR in server Trust manger");
+ System.out.println("ERROR in server trust manager: " + excep);
}
}
--- a/jdk/test/javax/net/ssl/TLS/JSSEClient.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/test/javax/net/ssl/TLS/JSSEClient.java Thu Jun 23 21:13:13 2016 +0000
@@ -1,5 +1,5 @@
-/**
- * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
+/*
+ * Copyright (c) 2010, 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
@@ -35,39 +35,37 @@
private static final String DEFAULT = "DEFAULT";
private static final String TLS = "TLS";
- private final SSLContext sslContext;
+ private final SSLContext context;
private final MyX509KeyManager keyManager;
- private final int serverPort;
- private final String serverHost;
- private final String testedProtocol;
+ private final int port;
+ private final String host;
+ private final String protocol;
- JSSEClient(CipherTestUtils cipherTest, String serverHost, int serverPort,
- String testedProtocols, String testedCipherSuite) throws Exception {
- super(cipherTest, testedCipherSuite);
- this.serverHost = serverHost;
- this.serverPort = serverPort;
- this.testedProtocol = testedProtocols;
- this.keyManager =
- new MyX509KeyManager(cipherTest.getClientKeyManager());
- sslContext = SSLContext.getInstance(TLS);
+ JSSEClient(CipherTestUtils cipherTest, String host, int port,
+ String protocols, String ciphersuite) throws Exception {
+ super(cipherTest, ciphersuite);
+ this.host = host;
+ this.port = port;
+ this.protocol = protocols;
+ this.keyManager = new MyX509KeyManager(
+ cipherTest.getClientKeyManager());
+ context = SSLContext.getInstance(TLS);
}
@Override
void runTest(CipherTestUtils.TestParameters params) throws Exception {
- SSLSocket socket = null;
- try {
- System.out.println("Connecting to server...");
- keyManager.setAuthType(params.clientAuth);
- sslContext.init(new KeyManager[]{keyManager},
- new TrustManager[]{cipherTest.getClientTrustManager()},
- CipherTestUtils.secureRandom);
- SSLSocketFactory factory = (SSLSocketFactory) sslContext.
- getSocketFactory();
- socket = (SSLSocket) factory.createSocket(serverHost,
- serverPort);
+ keyManager.setAuthType(params.clientAuth);
+ context.init(
+ new KeyManager[]{ keyManager },
+ new TrustManager[]{ cipherTest.getClientTrustManager() },
+ CipherTestUtils.secureRandom);
+ SSLSocketFactory factory = (SSLSocketFactory)context.getSocketFactory();
+
+ System.out.println("Connecting to server...");
+ try (SSLSocket socket = (SSLSocket) factory.createSocket(host, port)) {
socket.setSoTimeout(CipherTestUtils.TIMEOUT);
socket.setEnabledCipherSuites(params.cipherSuite.split(","));
- if (params.protocol != null && !params.protocol.trim().equals("")
+ if (params.protocol != null && !params.protocol.trim().isEmpty()
&& !params.protocol.trim().equals(DEFAULT)) {
socket.setEnabledProtocols(params.protocol.split(","));
}
@@ -105,16 +103,11 @@
if ("EC".equals(keyAlg)) {
keyAlg = "ECDSA";
}
- if (params.clientAuth == null ? keyAlg != null
- : !params.clientAuth.equals(keyAlg)) {
+ if (!params.clientAuth.equals(keyAlg)) {
throw new RuntimeException("Certificate type mismatch: "
+ keyAlg + " != " + params.clientAuth);
}
}
- } finally {
- if (socket != null) {
- socket.close();
- }
}
}
}
--- a/jdk/test/javax/net/ssl/TLS/JSSEServer.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/test/javax/net/ssl/TLS/JSSEServer.java Thu Jun 23 21:13:13 2016 +0000
@@ -1,4 +1,4 @@
-/**
+/*
* Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
@@ -33,13 +33,11 @@
public class JSSEServer extends CipherTestUtils.Server {
private final SSLServerSocket serverSocket;
- private final int serverPort;
- static volatile boolean closeServer = false;
+ private static volatile boolean closeServer = false;
JSSEServer(CipherTestUtils cipherTest, int serverPort,
String protocol, String cipherSuite) throws Exception {
super(cipherTest);
- this.serverPort = serverPort;
SSLContext serverContext = SSLContext.getInstance("TLS");
serverContext.init(new KeyManager[]{cipherTest.getServerKeyManager()},
new TrustManager[]{cipherTest.getServerTrustManager()},
@@ -56,7 +54,7 @@
@Override
public void run() {
- System.out.println("JSSE Server listening on port " + serverPort);
+ System.out.println("JSSE Server listening on port " + getPort());
while (!closeServer) {
try (final SSLSocket socket = (SSLSocket) serverSocket.accept()) {
socket.setSoTimeout(CipherTestUtils.TIMEOUT);
@@ -68,12 +66,12 @@
} catch (IOException e) {
CipherTestUtils.addFailure(e);
System.out.println("Got IOException:");
- e.printStackTrace(System.err);
+ e.printStackTrace(System.out);
}
} catch (Exception e) {
CipherTestUtils.addFailure(e);
System.out.println("Exception:");
- e.printStackTrace(System.err);
+ e.printStackTrace(System.out);
}
}
}
@@ -81,4 +79,12 @@
int getPort() {
return serverSocket.getLocalPort();
}
+
+ @Override
+ public void close() throws IOException {
+ closeServer = true;
+ if (serverSocket != null && !serverSocket.isClosed()) {
+ serverSocket.close();
+ }
+ }
}
--- a/jdk/test/javax/net/ssl/TLS/TestJSSE.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/test/javax/net/ssl/TLS/TestJSSE.java Thu Jun 23 21:13:13 2016 +0000
@@ -1,4 +1,4 @@
-/**
+/*
* Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
@@ -20,59 +20,9 @@
* questions.
*/
-import static java.lang.System.out;
import java.security.Provider;
import java.security.Security;
-/**
- * @test
- * @bug 8049429
- * @modules java.management
- * jdk.crypto.ec/sun.security.ec
- * @compile CipherTestUtils.java JSSEClient.java JSSEServer.java
- * @summary Test that all cipher suites work in all versions and all client
- * authentication types. The way this is setup the server is stateless and
- * all checking is done on the client side.
- * @run main/othervm -DSERVER_PROTOCOL=SSLv3
- * -DCLIENT_PROTOCOL=SSLv3
- * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5 TestJSSE
- * @run main/othervm -DSERVER_PROTOCOL=TLSv1
- * -DCLIENT_PROTOCOL=SSLv3,TLSv1,TLSv1.1,TLSv1.2
- * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5 TestJSSE
- * @run main/othervm -DSERVER_PROTOCOL=TLSv1.1
- * -DCLIENT_PROTOCOL=SSLv3,TLSv1,TLSv1.1,TLSv1.2
- * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5 TestJSSE
- * @run main/othervm -DSERVER_PROTOCOL=TLSv1.2
- * -DCLIENT_PROTOCOL=SSLv3,TLSv1,TLSv1.1,TLSv1.2
- * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5 TestJSSE
- * @run main/othervm -DSERVER_PROTOCOL=SSLv3,TLSv1
- * -DCLIENT_PROTOCOL=TLSv1 -DCIPHER=SSL_RSA_WITH_RC4_128_MD5 TestJSSE
- * @run main/othervm -DSERVER_PROTOCOL=SSLv3,TLSv1,TLSv1.1
- * -DCLIENT_PROTOCOL=TLSv1.1 -DCIPHER=SSL_RSA_WITH_RC4_128_MD5 TestJSSE
- * @run main/othervm -DSERVER_PROTOCOL=SSLv3
- * -DCLIENT_PROTOCOL=TLSv1.1,TLSv1.2
- * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
- * TestJSSE javax.net.ssl.SSLHandshakeException
- * @run main/othervm -DSERVER_PROTOCOL=TLSv1
- * -DCLIENT_PROTOCOL=TLSv1.1,TLSv1.2
- * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
- * TestJSSE javax.net.ssl.SSLHandshakeException
- * @run main/othervm -DSERVER_PROTOCOL=SSLv3,TLSv1,TLSv1.1,TLSv1.2
- * -DCLIENT_PROTOCOL=TLSv1.2 -DCIPHER=SSL_RSA_WITH_RC4_128_MD5 TestJSSE
- * @run main/othervm -DSERVER_PROTOCOL=SSLv2Hello,SSLv3,TLSv1
- * -DCLIENT_PROTOCOL=DEFAULT -DCIPHER=SSL_RSA_WITH_RC4_128_MD5 TestJSSE
- * @run main/othervm -DSERVER_PROTOCOL=SSLv2Hello,SSLv3,TLSv1,TLSv1.1,TLSv1.2
- * -DCLIENT_PROTOCOL=DEFAULT -DCIPHER=SSL_RSA_WITH_RC4_128_MD5 TestJSSE
- * @run main/othervm -DSERVER_PROTOCOL=SSLv2Hello,SSLv3,TLSv1,TLSv1.1,TLSv1.2
- * -DCLIENT_PROTOCOL=DEFAULT -Djdk.tls.client.protocols=TLSv1
- * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5 TestJSSE
- * @run main/othervm -DSERVER_PROTOCOL=SSLv2Hello,SSLv3,TLSv1
- * -DCLIENT_PROTOCOL=DEFAULT -Djdk.tls.client.protocols=TLSv1.2
- * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
- * TestJSSE javax.net.ssl.SSLHandshakeException
- *
- */
-
public class TestJSSE {
private static final String LOCAL_IP = "127.0.0.1";
@@ -82,72 +32,64 @@
// and keys used in this test are not disabled.
Security.setProperty("jdk.tls.disabledAlgorithms", "");
- String serverProtocol = System.getProperty("SERVER_PROTOCOL");
- String clientProtocol = System.getProperty("CLIENT_PROTOCOL");
- String cipher = System.getProperty("CIPHER");
- if (serverProtocol == null
- || clientProtocol == null
- || cipher == null) {
- throw new IllegalArgumentException("SERVER_PROTOCOL "
- + "or CLIENT_PROTOCOL or CIPHER is missing");
- }
- out.println("ServerProtocol =" + serverProtocol);
- out.println("ClientProtocol =" + clientProtocol);
- out.println("Cipher =" + cipher);
- int port = server(serverProtocol, cipher, args);
- client(port, clientProtocol, cipher, args);
+ // enable debug output
+ System.setProperty("javax.net.debug", "ssl,record");
- }
+ String srvProtocol = System.getProperty("SERVER_PROTOCOL");
+ String clnProtocol = System.getProperty("CLIENT_PROTOCOL");
+ String cipher = System.getProperty("CIPHER");
+ if (srvProtocol == null || clnProtocol == null || cipher == null) {
+ throw new IllegalArgumentException("Incorrect parameters");
+ }
- public static void client(int testPort,
- String testProtocols, String testCipher,
- String... exception) throws Exception {
- String expectedException = exception.length >= 1
- ? exception[0] : null;
- out.println("=========================================");
- out.println(" Testing - https://" + LOCAL_IP + ":" + testPort);
- out.println(" Testing - Protocol : " + testProtocols);
- out.println(" Testing - Cipher : " + testCipher);
- try {
- CipherTestUtils.mainClient(new JSSEFactory(LOCAL_IP, testProtocols,
- testCipher, "Client JSSE"),
- testPort, expectedException);
- } catch (Exception e) {
- throw new RuntimeException(e);
+ System.out.println("ServerProtocol = " + srvProtocol);
+ System.out.println("ClientProtocol = " + clnProtocol);
+ System.out.println("Cipher = " + cipher);
+
+ try (CipherTestUtils.Server srv = server(srvProtocol, cipher, args)) {
+ client(srv.getPort(), clnProtocol, cipher, args);
}
}
- public static int server(String testProtocol, String testCipher,
- String... exception) throws Exception {
+ public static void client(int port, String protocols, String cipher,
+ String... exceptions) throws Exception {
- String expectedException = exception.length >= 1
- ? exception[0] : null;
- out.println(" This is Server");
- out.println(" Testing Protocol: " + testProtocol);
- out.println(" Testing Cipher: " + testCipher);
+ String expectedExcp = exceptions.length >= 1 ? exceptions[0] : null;
+
+ System.out.println("This is client");
+ System.out.println("Testing protocol: " + protocols);
+ System.out.println("Testing cipher : " + cipher);
- try {
- int port = CipherTestUtils.mainServer(new JSSEFactory(
- null, testProtocol, testCipher, "Server JSSE"),
- expectedException);
+ CipherTestUtils.mainClient(
+ new JSSEFactory(LOCAL_IP, protocols, cipher, "Client JSSE"),
+ port, expectedExcp);
+ }
+
+ public static CipherTestUtils.Server server(String protocol,
+ String cipher, String... exceptions) throws Exception {
- out.println(" Testing Port: " + port);
- return port;
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
+ String expectedExcp = exceptions.length >= 1 ? exceptions[0] : null;
+
+ System.out.println("This is server");
+ System.out.println("Testing protocol: " + protocol);
+ System.out.println("Testing cipher : " + cipher);
+
+ return CipherTestUtils.mainServer(
+ new JSSEFactory(null, protocol, cipher, "Server JSSE"),
+ expectedExcp);
}
private static class JSSEFactory extends CipherTestUtils.PeerFactory {
- final String testedCipherSuite, testedProtocol, testHost;
- final String name;
+ private final String cipher;
+ private final String protocol;
+ private final String host;
+ private final String name;
- JSSEFactory(String testHost, String testedProtocol,
- String testedCipherSuite, String name) {
- this.testedCipherSuite = testedCipherSuite;
- this.testedProtocol = testedProtocol;
- this.testHost = testHost;
+ JSSEFactory(String host, String protocol, String cipher, String name) {
+ this.cipher = cipher;
+ this.protocol = protocol;
+ this.host = host;
this.name = name;
}
@@ -158,26 +100,24 @@
@Override
String getTestedCipher() {
- return testedCipherSuite;
+ return cipher;
}
@Override
String getTestedProtocol() {
- return testedProtocol;
+ return protocol;
}
@Override
- CipherTestUtils.Client newClient(CipherTestUtils cipherTest, int testPort)
+ CipherTestUtils.Client newClient(CipherTestUtils cipherTest, int port)
throws Exception {
- return new JSSEClient(cipherTest, testHost, testPort,
- testedProtocol, testedCipherSuite);
+ return new JSSEClient(cipherTest, host, port, protocol, cipher);
}
@Override
- CipherTestUtils.Server newServer(CipherTestUtils cipherTest, int testPort)
+ CipherTestUtils.Server newServer(CipherTestUtils cipherTest, int port)
throws Exception {
- return new JSSEServer(cipherTest, testPort,
- testedProtocol, testedCipherSuite);
+ return new JSSEServer(cipherTest, port, protocol, cipher);
}
}
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLS/TestJSSEClientDefaultProtocol.java Thu Jun 23 21:13:13 2016 +0000
@@ -0,0 +1,54 @@
+/*
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 8049429
+ * @modules java.management
+ * jdk.crypto.ec/sun.security.ec
+ * @summary Test that all cipher suites work in all versions and all client
+ * authentication types. The way this is setup the server is stateless
+ * and all checking is done on the client side.
+ * @compile CipherTestUtils.java JSSEClient.java JSSEServer.java
+ * @run main/othervm
+ * -DSERVER_PROTOCOL=SSLv2Hello,SSLv3,TLSv1
+ * -DCLIENT_PROTOCOL=DEFAULT
+ * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
+ * TestJSSE
+ * @run main/othervm
+ * -DSERVER_PROTOCOL=SSLv2Hello,SSLv3,TLSv1,TLSv1.1,TLSv1.2
+ * -DCLIENT_PROTOCOL=DEFAULT
+ * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
+ * TestJSSE
+ * @run main/othervm
+ * -DSERVER_PROTOCOL=SSLv2Hello,SSLv3,TLSv1,TLSv1.1,TLSv1.2
+ * -DCLIENT_PROTOCOL=DEFAULT
+ * -Djdk.tls.client.protocols=TLSv1
+ * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
+ * TestJSSE
+ * @run main/othervm
+ * -DSERVER_PROTOCOL=SSLv2Hello,SSLv3,TLSv1
+ * -DCLIENT_PROTOCOL=DEFAULT
+ * -Djdk.tls.client.protocols=TLSv1.2
+ * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
+ * TestJSSE javax.net.ssl.SSLHandshakeException
+ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLS/TestJSSEClientProtocol.java Thu Jun 23 21:13:13 2016 +0000
@@ -0,0 +1,52 @@
+/*
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 8049429
+ * @modules java.management
+ * jdk.crypto.ec/sun.security.ec
+ * @summary Test that all cipher suites work in all versions and all client
+ * authentication types. The way this is setup the server is stateless
+ * and all checking is done on the client side.
+ * @compile CipherTestUtils.java JSSEClient.java JSSEServer.java
+ * @run main/othervm
+ * -DSERVER_PROTOCOL=SSLv3
+ * -DCLIENT_PROTOCOL=SSLv3
+ * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
+ * TestJSSE
+ * @run main/othervm
+ * -DSERVER_PROTOCOL=SSLv3,TLSv1
+ * -DCLIENT_PROTOCOL=TLSv1
+ * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
+ * TestJSSE
+ * @run main/othervm
+ * -DSERVER_PROTOCOL=SSLv3,TLSv1,TLSv1.1
+ * -DCLIENT_PROTOCOL=TLSv1.1
+ * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
+ * TestJSSE
+ * @run main/othervm
+ * -DSERVER_PROTOCOL=SSLv3,TLSv1,TLSv1.1,TLSv1.2
+ * -DCLIENT_PROTOCOL=TLSv1.2
+ * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
+ * TestJSSE
+ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLS/TestJSSENoCommonProtocols.java Thu Jun 23 21:13:13 2016 +0000
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 8049429
+ * @modules java.management
+ * jdk.crypto.ec/sun.security.ec
+ * @summary Test that all cipher suites work in all versions and all client
+ * authentication types. The way this is setup the server is stateless
+ * and all checking is done on the client side.
+ * @compile CipherTestUtils.java JSSEClient.java JSSEServer.java
+ * @run main/othervm
+ * -DSERVER_PROTOCOL=TLSv1
+ * -DCLIENT_PROTOCOL=TLSv1.1,TLSv1.2
+ * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
+ * TestJSSE javax.net.ssl.SSLHandshakeException
+ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLS/TestJSSEServerProtocol.java Thu Jun 23 21:13:13 2016 +0000
@@ -0,0 +1,52 @@
+/*
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 8049429
+ * @modules java.management
+ * jdk.crypto.ec/sun.security.ec
+ * @summary Test that all cipher suites work in all versions and all client
+ * authentication types. The way this is setup the server is stateless
+ * and all checking is done on the client side.
+ * @compile CipherTestUtils.java JSSEClient.java JSSEServer.java
+ * @run main/othervm
+ * -DSERVER_PROTOCOL=SSLv3
+ * -DCLIENT_PROTOCOL=TLSv1.1,TLSv1.2
+ * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
+ * TestJSSE javax.net.ssl.SSLHandshakeException
+ * @run main/othervm
+ * -DSERVER_PROTOCOL=TLSv1
+ * -DCLIENT_PROTOCOL=SSLv3,TLSv1,TLSv1.1,TLSv1.2
+ * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
+ * TestJSSE
+ * @run main/othervm
+ * -DSERVER_PROTOCOL=TLSv1.1
+ * -DCLIENT_PROTOCOL=SSLv3,TLSv1,TLSv1.1,TLSv1.2
+ * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
+ * TestJSSE
+ * @run main/othervm
+ * -DSERVER_PROTOCOL=TLSv1.2
+ * -DCLIENT_PROTOCOL=SSLv3,TLSv1,TLSv1.1,TLSv1.2
+ * -DCIPHER=SSL_RSA_WITH_RC4_128_MD5
+ * TestJSSE
+ */
--- a/jdk/test/javax/net/ssl/templates/SSLSocketSSLEngineTemplate.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/test/javax/net/ssl/templates/SSLSocketSSLEngineTemplate.java Thu Jun 23 21:13:13 2016 +0000
@@ -178,8 +178,11 @@
char[] passphrase = "passphrase".toCharArray();
- ks.load(new FileInputStream(keyFilename), passphrase);
- ts.load(new FileInputStream(trustFilename), passphrase);
+ try (FileInputStream keyFile = new FileInputStream(keyFilename);
+ FileInputStream trustFile = new FileInputStream(trustFilename)) {
+ ks.load(keyFile, passphrase);
+ ts.load(trustFile, passphrase);
+ }
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, passphrase);
@@ -310,6 +313,7 @@
if (retry &&
serverIn.remaining() < clientMsg.length) {
log("Need to read more from client");
+ serverIn.compact();
retry = false;
continue;
} else {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/rmi/PortableRemoteObject/8146975/HelloClient.java Thu Jun 23 21:13:13 2016 +0000
@@ -0,0 +1,120 @@
+/*
+ * 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.
+ */
+
+import java.util.ArrayList;
+
+import javax.naming.InitialContext;
+import javax.naming.Context;
+import javax.naming.NameNotFoundException;
+
+import javax.rmi.PortableRemoteObject;
+
+
+
+public class HelloClient implements Runnable {
+ static final int MAX_RETRY = 10;
+ static final int ONE_SECOND = 1000;
+ private static boolean responseReceived;
+
+ public static void main(String args[]) throws Exception {
+ executeRmiClientCall();
+ }
+
+ @Override
+ public void run() {
+ try {
+ executeRmiClientCall();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException(e);
+ }
+ }
+
+
+ public static boolean isResponseReceived () {
+ return responseReceived;
+ }
+
+ public static void executeRmiClientCall() throws Exception {
+ Context ic;
+ Object objref;
+ HelloInterface helloSvc;
+ String response;
+ Object testResponse;
+ int retryCount = 0;
+
+ ArrayList<Test> listParam = new ArrayList<Test>();
+ listParam.add(null);
+ System.out.println("HelloClient.main: enter ...");
+ while (retryCount < MAX_RETRY) {
+ try {
+ ic = new InitialContext();
+ System.out.println("HelloClient.main: HelloService lookup ...");
+ // STEP 1: Get the Object reference from the Name Service
+ // using JNDI call.
+ objref = ic.lookup("HelloService");
+ System.out.println("HelloClient: Obtained a ref. to Hello server.");
+
+ // STEP 2: Narrow the object reference to the concrete type and
+ // invoke the method.
+ helloSvc = (HelloInterface) PortableRemoteObject.narrow(objref,
+ HelloInterface.class);
+
+ Test3 test3 = new Test3(listParam);
+ Test3 test3Response = helloSvc.sayHelloWithTest3(test3);
+ System.out.println("Server says: Test3 response == " + test3Response);
+
+ Test3 test3WithNullList = new Test3(null);
+ test3Response = helloSvc.sayHelloWithTest3(test3WithNullList);
+ System.out.println("Server says: Test3 response == "
+ + test3Response);
+
+ Test4 test4 = new Test4(listParam);
+ Test3 test4Response = helloSvc.sayHelloWithTest3(test4);
+ System.out.println("Server says: Test4 response == " + test4Response);
+
+ responseReceived = true;
+ break;
+ } catch (NameNotFoundException nnfEx) {
+ System.err.println("NameNotFoundException Caught .... try again");
+ retryCount++;
+ try {
+ Thread.sleep(ONE_SECOND);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ continue;
+ } catch (Throwable t) {
+ System.err.println("Exception " + t + "Caught");
+ t.printStackTrace();
+ throw new RuntimeException(t);
+ }
+ }
+ System.err.println("HelloClient terminating ");
+ try {
+ Thread.sleep(ONE_SECOND);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/rmi/PortableRemoteObject/8146975/HelloImpl.java Thu Jun 23 21:13:13 2016 +0000
@@ -0,0 +1,41 @@
+/*
+ * 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.
+ */
+
+import java.rmi.RemoteException;
+import javax.rmi.PortableRemoteObject;
+
+public class HelloImpl extends PortableRemoteObject implements HelloInterface {
+
+ public HelloImpl() throws java.rmi.RemoteException {
+ super(); // invoke rmi linking and remote object initialization
+ }
+
+
+ @Override
+ public Test3 sayHelloWithTest3(Test3 test) throws RemoteException {
+ System.out.println("sayHelloToTest3: ENTER " );
+
+ return test;
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/rmi/PortableRemoteObject/8146975/HelloInterface.java Thu Jun 23 21:13:13 2016 +0000
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ */
+
+import java.rmi.Remote;
+
+public interface HelloInterface extends Remote {
+ public Test3 sayHelloWithTest3( Test3 test ) throws java.rmi.RemoteException;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/rmi/PortableRemoteObject/8146975/HelloServer.java Thu Jun 23 21:13:13 2016 +0000
@@ -0,0 +1,58 @@
+/*
+ * 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.
+ */
+
+import javax.naming.InitialContext;
+import javax.naming.Context;
+
+public class HelloServer {
+
+ static final int MAX_RETRY = 10;
+ static final int ONE_SECOND = 1000;
+
+ public static void main(String[] args) {
+ int retryCount = 0;
+ while (retryCount < MAX_RETRY) {
+ try {
+ // Step 1: Instantiate the Hello servant
+ HelloImpl helloRef = new HelloImpl();
+
+ // Step 2: Publish the reference in the Naming Service
+ // using JNDI API
+ Context initialNamingContext = new InitialContext();
+ initialNamingContext.rebind("HelloService", helloRef);
+
+ System.out.println("Hello Server: Ready...");
+ break;
+ } catch (Exception e) {
+ System.out.println("Server initialization problem: " + e);
+ e.printStackTrace();
+ retryCount++;
+ try {
+ Thread.sleep(ONE_SECOND);
+ } catch (InterruptedException e1) {
+ e1.printStackTrace();
+ }
+ }
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/rmi/PortableRemoteObject/8146975/RmiIiopReturnValueTest.java Thu Jun 23 21:13:13 2016 +0000
@@ -0,0 +1,157 @@
+/*
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 8146975
+ * @summary test RMI-IIOP with value object return
+ * @library /lib/testlibrary
+ * @build jdk.testlibrary.*
+ * @compile -addmods java.corba Test.java Test3.java Test4.java
+ * HelloInterface.java HelloServer.java
+ * HelloClient.java HelloImpl.java _HelloImpl_Tie.java _HelloInterface_Stub.java
+ * RmiIiopReturnValueTest.java
+ * @run main/othervm -addmods java.corba
+ * -Djava.naming.provider.url=iiop://localhost:5050
+ * -Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory
+ * RmiIiopReturnValueTest -port 5049
+ * @run main/othervm/secure=java.lang.SecurityManager/policy=jtreg.test.policy
+ * -addmods java.corba -Djava.naming.provider.url=iiop://localhost:5050
+ * -Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory
+ * RmiIiopReturnValueTest -port 5049
+ */
+
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import jdk.testlibrary.JDKToolFinder;
+import jdk.testlibrary.JDKToolLauncher;
+
+public class RmiIiopReturnValueTest {
+
+ static final String ORBD = JDKToolFinder.getTestJDKTool("orbd");
+ static final String JAVA = JDKToolFinder.getTestJDKTool("java");
+ static final JDKToolLauncher orbdLauncher = JDKToolLauncher.createUsingTestJDK("orbd");
+ static final String CLASSPATH = System.getProperty("java.class.path");
+ static final int FIVE_SECONDS = 5000;
+
+ private static Throwable clientException;
+ private static boolean exceptionInClient;
+ private static Process orbdProcess;
+ private static Process rmiServerProcess;
+
+ public static void main(String[] args) throws Exception {
+ startTestComponents();
+ stopTestComponents();
+ System.err.println("Test completed OK ");
+ }
+
+ static void startTestComponents () throws Exception {
+ startOrbd();
+ Thread.sleep(FIVE_SECONDS);
+ startRmiIiopServer();
+ Thread.sleep(FIVE_SECONDS);
+ executeRmiIiopClient();
+ }
+
+ private static void stopTestComponents() throws Exception {
+ stopRmiIiopServer();
+ stopOrbd();
+ if (exceptionInClient) {
+ throw new RuntimeException(clientException);
+ } else if (!isResponseReceived()) {
+ throw new RuntimeException("Expected Response not received");
+ }
+ }
+
+ static void startOrbd() throws Exception {
+ System.out.println("\nStarting orbd with NS port 5050 and activation port 5049 ");
+
+ //orbd -ORBInitialHost localhost -ORBInitialPort 5050 -port 5049
+ orbdLauncher.addToolArg("-ORBInitialHost").addToolArg("localhost")
+ .addToolArg("-ORBInitialPort").addToolArg("5050")
+ .addToolArg("-port").addToolArg("5049");
+
+ System.out.println("RmiIiopReturnValueTest: Executing: " + Arrays.asList(orbdLauncher.getCommand()));
+ ProcessBuilder pb = new ProcessBuilder(orbdLauncher.getCommand());
+ pb.redirectError(ProcessBuilder.Redirect.INHERIT);
+ orbdProcess = pb.start();
+ }
+
+
+ static void startRmiIiopServer() throws Exception {
+ System.out.println("\nStarting RmiIiopServer");
+ // java -addmods java.corba -cp .
+ // -Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory
+ // -Djava.naming.provider.url=iiop://localhost:5050 HelloServer -port 5049
+ List<String> commands = new ArrayList<>();
+ commands.add(RmiIiopReturnValueTest.JAVA);
+ commands.add("-addmods");
+ commands.add("java.corba");
+ commands.add("-Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory");
+ commands.add("-Djava.naming.provider.url=iiop://localhost:5050");
+ commands.add("-cp");
+ commands.add(RmiIiopReturnValueTest.CLASSPATH);
+ commands.add("HelloServer");
+ commands.add("-port");
+ commands.add("5049");
+
+ System.out.println("RmiIiopReturnValueTest: Executing: " + commands);
+ ProcessBuilder pb = new ProcessBuilder(commands);
+ pb.redirectError(ProcessBuilder.Redirect.INHERIT);
+ rmiServerProcess = pb.start();
+ }
+
+ static boolean isResponseReceived() {
+ return HelloClient.isResponseReceived();
+ }
+
+ static void stopRmiIiopServer() throws Exception {
+ if (rmiServerProcess != null) {
+ System.out.println("RmiIiopReturnValueTest.stopRmiIiopServer: destroy rmiServerProcess");
+ rmiServerProcess.destroyForcibly();
+ rmiServerProcess.waitFor();
+ System.out.println("serverProcess exitCode:"
+ + rmiServerProcess.exitValue());
+ }
+ }
+
+ static void stopOrbd() throws Exception {
+ System.out.println("RmiIiopReturnValueTest.stopOrbd: destroy orbdProcess ");
+ orbdProcess.destroyForcibly();
+ orbdProcess.waitFor();
+ System.out.println("orbd exitCode:"
+ + orbdProcess.exitValue());
+ }
+
+ static void executeRmiIiopClient() throws Exception {
+ System.out.println("RmiIiopReturnValueTest.executeRmiIiopClient: HelloClient.executeRmiClientCall");
+ try {
+ HelloClient.executeRmiClientCall();
+ } catch (Throwable t) {
+ clientException = t;
+ exceptionInClient = true;
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/rmi/PortableRemoteObject/8146975/Test.java Thu Jun 23 21:13:13 2016 +0000
@@ -0,0 +1,29 @@
+/*
+ * 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.
+ */
+
+import java.io.Serializable;
+
+
+public class Test implements Serializable {
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/rmi/PortableRemoteObject/8146975/Test3.java Thu Jun 23 21:13:13 2016 +0000
@@ -0,0 +1,36 @@
+/*
+ * 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.
+ */
+
+import java.io.Serializable;
+import java.util.List;
+
+
+public class Test3 implements Serializable {
+
+ private List<Test> list;
+
+ public Test3(List<Test> list) {
+ this.list = list;
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/rmi/PortableRemoteObject/8146975/Test4.java Thu Jun 23 21:13:13 2016 +0000
@@ -0,0 +1,41 @@
+/*
+ * 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.
+ */
+
+import java.util.List;
+
+
+public class Test4 extends Test3 {
+
+ private int aNumber = 1;
+
+ public Test4(List<Test> list) {
+ super(list);
+ }
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/rmi/PortableRemoteObject/8146975/_HelloImpl_Tie.java Thu Jun 23 21:13:13 2016 +0000
@@ -0,0 +1,103 @@
+/*
+ * 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.
+ */
+
+// Tie class generated by rmic, do not edit.
+// Contents subject to change without notice.
+
+import java.io.Serializable;
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+import javax.rmi.CORBA.Tie;
+import javax.rmi.CORBA.Util;
+import org.omg.CORBA.BAD_OPERATION;
+import org.omg.CORBA.ORB;
+import org.omg.CORBA.SystemException;
+import org.omg.CORBA.portable.InputStream;
+import org.omg.CORBA.portable.OutputStream;
+import org.omg.CORBA.portable.ResponseHandler;
+import org.omg.CORBA.portable.UnknownException;
+import org.omg.CORBA_2_3.portable.ObjectImpl;
+
+
+public class _HelloImpl_Tie extends ObjectImpl implements Tie {
+
+ volatile private HelloImpl target = null;
+
+ private static final String[] _type_ids = {
+ "RMI:HelloInterface:0000000000000000"
+ };
+
+ public void setTarget(Remote target) {
+ this.target = (HelloImpl) target;
+ }
+
+ public Remote getTarget() {
+ return target;
+ }
+
+ public org.omg.CORBA.Object thisObject() {
+ return this;
+ }
+
+ public void deactivate() {
+ _orb().disconnect(this);
+ _set_delegate(null);
+ target = null;
+ }
+
+ public ORB orb() {
+ return _orb();
+ }
+
+ public void orb(ORB orb) {
+ orb.connect(this);
+ }
+
+ public String[] _ids() {
+ return (String[]) _type_ids.clone();
+ }
+
+ public OutputStream _invoke(String method, InputStream _in, ResponseHandler reply) throws SystemException {
+ try {
+ HelloImpl target = this.target;
+ if (target == null) {
+ throw new java.io.IOException();
+ }
+ org.omg.CORBA_2_3.portable.InputStream in =
+ (org.omg.CORBA_2_3.portable.InputStream) _in;
+ if (method.equals("sayHelloWithTest3")) {
+ Test3 arg0 = (Test3) in.read_value(Test3.class);
+ Test3 result = target.sayHelloWithTest3(arg0);
+ org.omg.CORBA_2_3.portable.OutputStream out =
+ (org.omg.CORBA_2_3.portable.OutputStream) reply.createReply();
+ out.write_value(result,Test3.class);
+ return out;
+ }
+ throw new BAD_OPERATION();
+ } catch (SystemException ex) {
+ throw ex;
+ } catch (Throwable ex) {
+ throw new UnknownException(ex);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/rmi/PortableRemoteObject/8146975/_HelloInterface_Stub.java Thu Jun 23 21:13:13 2016 +0000
@@ -0,0 +1,93 @@
+/*
+ * 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.
+ */
+
+// Stub class generated by rmic, do not edit.
+// Contents subject to change without notice.
+
+import java.io.Serializable;
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+import java.rmi.UnexpectedException;
+import javax.rmi.CORBA.Stub;
+import javax.rmi.CORBA.Util;
+import org.omg.CORBA.ORB;
+import org.omg.CORBA.SystemException;
+import org.omg.CORBA.portable.ApplicationException;
+import org.omg.CORBA.portable.InputStream;
+import org.omg.CORBA.portable.OutputStream;
+import org.omg.CORBA.portable.RemarshalException;
+import org.omg.CORBA.portable.ResponseHandler;
+import org.omg.CORBA.portable.ServantObject;
+
+
+public class _HelloInterface_Stub extends Stub implements HelloInterface {
+
+ private static final String[] _type_ids = {
+ "RMI:HelloInterface:0000000000000000"
+ };
+
+ public String[] _ids() {
+ return (String[]) _type_ids.clone();
+ }
+
+ public Test3 sayHelloWithTest3(Test3 arg0) throws java.rmi.RemoteException {
+ if (!Util.isLocal(this)) {
+ try {
+ org.omg.CORBA_2_3.portable.InputStream in = null;
+ try {
+ org.omg.CORBA_2_3.portable.OutputStream out =
+ (org.omg.CORBA_2_3.portable.OutputStream)
+ _request("sayHelloWithTest3", true);
+ out.write_value(arg0,Test3.class);
+ in = (org.omg.CORBA_2_3.portable.InputStream)_invoke(out);
+ return (Test3) in.read_value(Test3.class);
+ } catch (ApplicationException ex) {
+ in = (org.omg.CORBA_2_3.portable.InputStream) ex.getInputStream();
+ String $_id = in.read_string();
+ throw new UnexpectedException($_id);
+ } catch (RemarshalException ex) {
+ return sayHelloWithTest3(arg0);
+ } finally {
+ _releaseReply(in);
+ }
+ } catch (SystemException ex) {
+ throw Util.mapSystemException(ex);
+ }
+ } else {
+ ServantObject so = _servant_preinvoke("sayHelloWithTest3",HelloInterface.class);
+ if (so == null) {
+ return sayHelloWithTest3(arg0);
+ }
+ try {
+ Test3 arg0Copy = (Test3) Util.copyObject(arg0,_orb());
+ Test3 result = ((HelloInterface)so.servant).sayHelloWithTest3(arg0Copy);
+ return (Test3)Util.copyObject(result,_orb());
+ } catch (Throwable ex) {
+ Throwable exCopy = (Throwable)Util.copyObject(ex,_orb());
+ throw Util.wrapException(exCopy);
+ } finally {
+ _servant_postinvoke(so);
+ }
+ }
+ }
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/rmi/PortableRemoteObject/8146975/jtreg.test.policy Thu Jun 23 21:13:13 2016 +0000
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ */
+
+grant codeBase "jrt:/java.corba" {
+ permission java.security.AllPermission;
+};
+
+
+
+grant {
+ permission java.io.FilePermission "./-", "read,write,execute";
+ permission java.io.FilePermission "*", "read";
+ permission java.net.SocketPermission "*:*", "connect, accept, listen, resolve";
+ permission java.util.PropertyPermission "*", "read, write";
+ permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
+ permission java.io.SerializablePermission "enableSubclassImplementation";
+ permission java.lang.RuntimePermission "accessClassInPackage.jdk.internal.misc";
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.corba";
+ permission java.lang.RuntimePermission "defineClassInPackage.sun.corba";
+ permission java.lang.RuntimePermission "reflectionFactoryAccess";
+ permission sun.corba.BridgePermission "getBridge";
+ permission java.lang.RuntimePermission "accessClassInPackage.jdk.internal.reflect";
+ permission java.util.PropertyPermission "*", "read, write";
+ permission java.io.FilePermission "<<ALL FILES>>", "read,write,execute";
+};
--- a/jdk/test/javax/rmi/PortableRemoteObject/ConcurrentHashMapTest.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/test/javax/rmi/PortableRemoteObject/ConcurrentHashMapTest.java Thu Jun 23 21:13:13 2016 +0000
@@ -31,17 +31,16 @@
* HelloImpl.java _HelloImpl_Tie.java _HelloInterface_Stub.java ConcurrentHashMapTest.java
* @run main/othervm -addmods java.corba -Djava.naming.provider.url=iiop://localhost:1050
* -Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory ConcurrentHashMapTest
+ * @run main/othervm/secure=java.lang.SecurityManager/policy=jtreg.test.policy
+ * -addmods java.corba -Djava.naming.provider.url=iiop://localhost:1050
+ * -Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory ConcurrentHashMapTest
* @key intermittent
*/
-import java.io.DataInputStream;
-import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.CountDownLatch;
import jdk.testlibrary.JDKToolFinder;
import jdk.testlibrary.JDKToolLauncher;
@@ -83,7 +82,7 @@
}
static void startOrbd() throws Exception {
- System.out.println("\nStarting orbd on port 1050 ");
+ System.out.println("\nStarting orbd with NS port 1050 ");
//orbd -ORBInitialHost localhost -ORBInitialPort 1050
orbdLauncher.addToolArg("-ORBInitialHost").addToolArg("localhost")
@@ -98,7 +97,7 @@
static void startRmiIiopServer() throws Exception {
System.out.println("\nStarting RmiServer");
- // java -cp .
+ // java -cp . -addmods java.corba
// -Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory
// -Djava.naming.provider.url=iiop://localhost:1050 HelloServer
List<String> commands = new ArrayList<>();
@@ -122,17 +121,15 @@
}
static void stopRmiIiopServer() throws Exception {
- rmiServerProcess.destroy();
+ rmiServerProcess.destroyForcibly();
rmiServerProcess.waitFor();
- //rmiServerProcess.waitFor(30, TimeUnit.SECONDS);
System.out.println("serverProcess exitCode:"
+ rmiServerProcess.exitValue());
}
static void stopOrbd() throws Exception {
- orbdProcess.destroy();
+ orbdProcess.destroyForcibly();
orbdProcess.waitFor();
- //orbdProcess.waitFor(30, TimeUnit.SECONDS);
System.out.println("orbd exitCode:"
+ orbdProcess.exitValue());
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/rmi/PortableRemoteObject/jtreg.test.policy Thu Jun 23 21:13:13 2016 +0000
@@ -0,0 +1,43 @@
+/*
+ * 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.
+ */
+
+grant codeBase "jrt:/java.corba" {
+ permission java.security.AllPermission;
+};
+
+grant {
+ permission java.io.FilePermission "./-", "read,write,execute";
+ permission java.io.FilePermission "*", "read";
+ permission java.net.SocketPermission "*:*", "connect, accept, listen, resolve";
+ permission java.util.PropertyPermission "*", "read, write";
+ permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
+ permission java.io.SerializablePermission "enableSubclassImplementation";
+ permission java.lang.RuntimePermission "accessClassInPackage.jdk.internal.misc";
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.corba";
+ permission java.lang.RuntimePermission "defineClassInPackage.sun.corba";
+ permission java.lang.RuntimePermission "reflectionFactoryAccess";
+ permission sun.corba.BridgePermission "getBridge";
+ permission java.lang.RuntimePermission "accessClassInPackage.jdk.internal.reflect";
+ permission java.util.PropertyPermission "*", "read, write";
+ permission java.io.FilePermission "<<ALL FILES>>", "read,write,execute";
+};
--- a/jdk/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java Thu Jun 23 21:13:13 2016 +0000
@@ -29,8 +29,9 @@
* @library ..
* @library /lib/testlibrary
* @build jdk.testlibrary.*
- * @run main/othervm TestKeyPairGenerator
- * @run main/othervm TestKeyPairGenerator sm TestKeyPairGenerator.policy
+ * @run main/othervm -Djava.security.debug=sunpkcs11 TestKeyPairGenerator
+ * @run main/othervm -Djava.security.debug=sunpkcs11 TestKeyPairGenerator
+ * sm TestKeyPairGenerator.policy
* @key intermittent randomness
*/
--- a/jdk/test/tools/jlink/DefaultProviderTest.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/test/tools/jlink/DefaultProviderTest.java Thu Jun 23 21:13:13 2016 +0000
@@ -26,7 +26,6 @@
import java.util.Collections;
import java.util.EnumSet;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -65,13 +64,6 @@
private boolean enabled = true;
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.TRANSFORMER);
- return Collections.unmodifiableSet(set);
- }
-
- @Override
public Set<State> getState() {
return enabled ? EnumSet.of(State.AUTO_ENABLED, State.FUNCTIONAL)
: EnumSet.of(State.DISABLED);
--- a/jdk/test/tools/jlink/IntegrationTest.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/test/tools/jlink/IntegrationTest.java Thu Jun 23 21:13:13 2016 +0000
@@ -90,10 +90,8 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.PROCESSOR);
- return Collections.unmodifiableSet(set);
+ public Category getType() {
+ return Category.PROCESSOR;
}
@Override
@@ -139,13 +137,6 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.TRANSFORMER);
- return Collections.unmodifiableSet(set);
- }
-
- @Override
public String getDescription() {
return null;
}
--- a/jdk/test/tools/jlink/JLinkOptimTest.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/test/tools/jlink/JLinkOptimTest.java Thu Jun 23 21:13:13 2016 +0000
@@ -9,11 +9,9 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import java.util.stream.Stream;
import jdk.internal.org.objectweb.asm.ClassReader;
import jdk.internal.org.objectweb.asm.Opcodes;
@@ -132,13 +130,6 @@
public String getName() {
return NAME;
}
-
- @Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.TRANSFORMER);
- return Collections.unmodifiableSet(set);
- }
}
private static void testForName() throws Exception {
--- a/jdk/test/tools/jlink/JLinkPostProcessingTest.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/test/tools/jlink/JLinkPostProcessingTest.java Thu Jun 23 21:13:13 2016 +0000
@@ -26,10 +26,8 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Collections;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import jdk.tools.jlink.internal.PluginRepository;
import jdk.tools.jlink.plugin.ExecutableImage;
@@ -75,10 +73,8 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.PROCESSOR);
- return Collections.unmodifiableSet(set);
+ public Category getType() {
+ return Category.PROCESSOR;
}
@Override
--- a/jdk/test/tools/jlink/customplugin/plugin/CustomPlugin.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/test/tools/jlink/customplugin/plugin/CustomPlugin.java Thu Jun 23 21:13:13 2016 +0000
@@ -23,9 +23,7 @@
package plugin;
import java.util.Collections;
-import java.util.HashSet;
import java.util.Map;
-import java.util.Set;
import java.util.function.Function;
import jdk.tools.jlink.plugin.ModuleEntry;
import jdk.tools.jlink.plugin.ModulePool;
@@ -58,9 +56,7 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.PROCESSOR);
- return Collections.unmodifiableSet(set);
+ public Category getType() {
+ return Category.PROCESSOR;
}
}
--- a/jdk/test/tools/jlink/customplugin/plugin/HelloPlugin.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/test/tools/jlink/customplugin/plugin/HelloPlugin.java Thu Jun 23 21:13:13 2016 +0000
@@ -26,9 +26,7 @@
import java.io.IOException;
import java.io.UncheckedIOException;
import java.util.Collections;
-import java.util.HashSet;
import java.util.Map;
-import java.util.Set;
import jdk.tools.jlink.plugin.ModuleEntry;
import jdk.tools.jlink.plugin.ModulePool;
import jdk.tools.jlink.plugin.TransformerPlugin;
@@ -63,13 +61,6 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.TRANSFORMER);
- return Collections.unmodifiableSet(set);
- }
-
- @Override
public String getDescription() {
return NAME + "-description";
}
--- a/jdk/test/tools/jlink/plugins/LastSorterTest.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/test/tools/jlink/plugins/LastSorterTest.java Thu Jun 23 21:13:13 2016 +0000
@@ -33,10 +33,8 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import jdk.tools.jlink.internal.ImagePluginConfiguration;
import jdk.tools.jlink.internal.PluginRepository;
@@ -200,13 +198,6 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.TRANSFORMER);
- return Collections.unmodifiableSet(set);
- }
-
- @Override
public void configure(Map<String, String> config) {
String arguments = config.get(name);
this.starts = arguments;
--- a/jdk/test/tools/jlink/plugins/PluginOrderTest.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/test/tools/jlink/plugins/PluginOrderTest.java Thu Jun 23 21:13:13 2016 +0000
@@ -260,8 +260,8 @@
}
@Override
- public Set<Category> getType() {
- return Collections.singleton(category);
+ public Category getType() {
+ return category;
}
@Override
--- a/jdk/test/tools/jlink/plugins/PluginsNegativeTest.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/test/tools/jlink/plugins/PluginsNegativeTest.java Thu Jun 23 21:13:13 2016 +0000
@@ -32,10 +32,8 @@
import java.lang.reflect.Layer;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import jdk.tools.jlink.internal.ImagePluginConfiguration;
import jdk.tools.jlink.internal.PluginRepository;
@@ -138,13 +136,6 @@
}
@Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.TRANSFORMER);
- return Collections.unmodifiableSet(set);
- }
-
- @Override
public String getDescription() {
return null;
}
--- a/jdk/test/tools/jlink/plugins/PrevisitorTest.java Thu Jun 23 20:35:15 2016 +0000
+++ b/jdk/test/tools/jlink/plugins/PrevisitorTest.java Thu Jun 23 21:13:13 2016 +0000
@@ -34,11 +34,9 @@
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
-import java.util.Set;
import java.util.stream.Collectors;
import jdk.tools.jlink.internal.ImagePluginConfiguration;
@@ -160,12 +158,5 @@
}
});
}
-
- @Override
- public Set<Category> getType() {
- Set<Category> set = new HashSet<>();
- set.add(Category.TRANSFORMER);
- return Collections.unmodifiableSet(set);
- }
}
}