提交 38e2740c 编写于 作者: D duke

Merge

...@@ -78,3 +78,4 @@ b218a53ec7d3d42be61d31d6917a6c5c037b6f56 jdk7-b100 ...@@ -78,3 +78,4 @@ b218a53ec7d3d42be61d31d6917a6c5c037b6f56 jdk7-b100
4193eaf5f1b82794c6a0fb1a8d11af43d1b1d611 jdk7-b101 4193eaf5f1b82794c6a0fb1a8d11af43d1b1d611 jdk7-b101
a136a51f5113da4dad3853b74a8536ab583ab112 jdk7-b102 a136a51f5113da4dad3853b74a8536ab583ab112 jdk7-b102
be2aedc4e3b1751c1310f334242ba69e90867f38 jdk7-b103 be2aedc4e3b1751c1310f334242ba69e90867f38 jdk7-b103
f8be576feefce0c6695f188ef97ec16b73ad9cfd jdk7-b104
...@@ -109,3 +109,4 @@ ad1977f08c4d69162a0775fe3f9576b9fd521d10 hs19-b03 ...@@ -109,3 +109,4 @@ ad1977f08c4d69162a0775fe3f9576b9fd521d10 hs19-b03
c5cadf1a07717955cf60dbaec16e35b529fd2cb0 jdk7-b102 c5cadf1a07717955cf60dbaec16e35b529fd2cb0 jdk7-b102
cb4250ef73b21de6c487ea14e2b0b99eed67b4b6 jdk7-b103 cb4250ef73b21de6c487ea14e2b0b99eed67b4b6 jdk7-b103
e55900b5c1b865cac17e18abc639c7dc50de7fd8 hs19-b04 e55900b5c1b865cac17e18abc639c7dc50de7fd8 hs19-b04
b4acf10eb134fe930802c97e36db65e7ccb544b5 jdk7-b104
...@@ -78,3 +78,4 @@ b1903d7528d33b521df42bc9291bdcdd2f444a29 jdk7-b97 ...@@ -78,3 +78,4 @@ b1903d7528d33b521df42bc9291bdcdd2f444a29 jdk7-b97
d58354a69011f3d3354765fa3167567c4c4a9612 jdk7-b101 d58354a69011f3d3354765fa3167567c4c4a9612 jdk7-b101
13029a61b16bec06535d4f0aa98229b358684128 jdk7-b102 13029a61b16bec06535d4f0aa98229b358684128 jdk7-b102
6488b70a23cc6dc4b7e00809bc503c2884bafb28 jdk7-b103 6488b70a23cc6dc4b7e00809bc503c2884bafb28 jdk7-b103
1a92820132a0221c5bdedd42d0888c57ce4cbb34 jdk7-b104
...@@ -571,6 +571,16 @@ $(NOT_RT_JAR_LIST): FRC ...@@ -571,6 +571,16 @@ $(NOT_RT_JAR_LIST): FRC
$(ECHO) "META-INF/services/com.sun.tools.xjc.Plugin" >> $@ $(ECHO) "META-INF/services/com.sun.tools.xjc.Plugin" >> $@
$(ECHO) "com/sun/tools/" >> $@ $(ECHO) "com/sun/tools/" >> $@
$(ECHO) "sun/jvmstat/" >> $@ $(ECHO) "sun/jvmstat/" >> $@
$(ECHO) "sun/nio/cs/ext/" >> $@
$(ECHO) "sun/awt/HKSCS.class" >> $@
$(ECHO) "sun/awt/motif/X11GB2312$Decoder.class" >> $@
$(ECHO) "sun/awt/motif/X11GB2312$Encoder.class" >> $@
$(ECHO) "sun/awt/motif/X11GB2312.class" >> $@
$(ECHO) "sun/awt/motif/X11GBK$Encoder.class" >> $@
$(ECHO) "sun/awt/motif/X11GBK.class" >> $@
$(ECHO) "sun/awt/motif/X11KSC5601$Decoder.class" >> $@
$(ECHO) "sun/awt/motif/X11KSC5601$Encoder.class" >> $@
$(ECHO) "sun/awt/motif/X11KSC5601.class" >> $@
$(ECHO) "sun/rmi/rmic/" >> $@ $(ECHO) "sun/rmi/rmic/" >> $@
$(ECHO) "sun/tools/asm/" >> $@ $(ECHO) "sun/tools/asm/" >> $@
$(ECHO) "sun/tools/java/" >> $@ $(ECHO) "sun/tools/java/" >> $@
......
...@@ -119,6 +119,7 @@ SUNWprivate_1.1 { ...@@ -119,6 +119,7 @@ SUNWprivate_1.1 {
Java_sun_nio_ch_ServerSocketChannelImpl_accept0; Java_sun_nio_ch_ServerSocketChannelImpl_accept0;
Java_sun_nio_ch_ServerSocketChannelImpl_initIDs; Java_sun_nio_ch_ServerSocketChannelImpl_initIDs;
Java_sun_nio_ch_SocketChannelImpl_checkConnect; Java_sun_nio_ch_SocketChannelImpl_checkConnect;
Java_sun_nio_ch_SocketChannelImpl_sendOutOfBandData;
Java_sun_nio_ch_UnixAsynchronousServerSocketChannelImpl_accept0; Java_sun_nio_ch_UnixAsynchronousServerSocketChannelImpl_accept0;
Java_sun_nio_ch_UnixAsynchronousServerSocketChannelImpl_initIDs; Java_sun_nio_ch_UnixAsynchronousServerSocketChannelImpl_initIDs;
Java_sun_nio_ch_UnixAsynchronousSocketChannelImpl_checkConnect; Java_sun_nio_ch_UnixAsynchronousSocketChannelImpl_checkConnect;
......
...@@ -106,6 +106,7 @@ SUNWprivate_1.1 { ...@@ -106,6 +106,7 @@ SUNWprivate_1.1 {
Java_sun_nio_ch_ServerSocketChannelImpl_accept0; Java_sun_nio_ch_ServerSocketChannelImpl_accept0;
Java_sun_nio_ch_ServerSocketChannelImpl_initIDs; Java_sun_nio_ch_ServerSocketChannelImpl_initIDs;
Java_sun_nio_ch_SocketChannelImpl_checkConnect; Java_sun_nio_ch_SocketChannelImpl_checkConnect;
Java_sun_nio_ch_SocketChannelImpl_sendOutOfBandData;
Java_sun_nio_ch_UnixAsynchronousServerSocketChannelImpl_accept0; Java_sun_nio_ch_UnixAsynchronousServerSocketChannelImpl_accept0;
Java_sun_nio_ch_UnixAsynchronousServerSocketChannelImpl_initIDs; Java_sun_nio_ch_UnixAsynchronousServerSocketChannelImpl_initIDs;
Java_sun_nio_ch_UnixAsynchronousSocketChannelImpl_checkConnect; Java_sun_nio_ch_UnixAsynchronousSocketChannelImpl_checkConnect;
......
...@@ -57,6 +57,25 @@ CHARSETS_JAR = $(LIBDIR)/charsets.jar ...@@ -57,6 +57,25 @@ CHARSETS_JAR = $(LIBDIR)/charsets.jar
# extcs # extcs
FILES_genout_extcs = $(FILES_gen_extcs:%.java=$(GENSRCDIR)/%.java) FILES_genout_extcs = $(FILES_gen_extcs:%.java=$(GENSRCDIR)/%.java)
#
# These sun.awt charsets use sun/nio/cs/ext charsets that only exist
# in JDK7 charsets.jar, which causes problem when build the symbol
# table for rt.jar in Release.gmk. They are now removed from the
# rt.jar when building jdk/jre image (in Release.gmk), so add them
# into charsets.jar here
#
ifeq ($(PLATFORM), windows)
FILES_src += \
sun/awt/HKSCS.java
else
# Solaris/Linux
FILES_src += \
sun/awt/HKSCS.java \
sun/awt/motif/X11GB2312.java \
sun/awt/motif/X11GBK.java \
sun/awt/motif/X11KSC5601.java
endif # PLATFORM
# #
# Rules # Rules
# #
......
/* /*
* Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -132,7 +132,7 @@ public class DnsContextFactory implements InitialContextFactory { ...@@ -132,7 +132,7 @@ public class DnsContextFactory implements InitialContextFactory {
throw new ConfigurationException("DNS pseudo-URL required"); throw new ConfigurationException("DNS pseudo-URL required");
} }
List servers = new ArrayList(); List<String> servers = new ArrayList<>();
for (int i = 0; i < urls.length; i++) { for (int i = 0; i < urls.length; i++) {
String server = urls[i].getHost(); String server = urls[i].getHost();
...@@ -142,7 +142,7 @@ public class DnsContextFactory implements InitialContextFactory { ...@@ -142,7 +142,7 @@ public class DnsContextFactory implements InitialContextFactory {
// No server or port given, so look to underlying platform. // No server or port given, so look to underlying platform.
// ResolverConfiguration does some limited caching, so the // ResolverConfiguration does some limited caching, so the
// following is reasonably efficient even if called rapid-fire. // following is reasonably efficient even if called rapid-fire.
List platformServers = List<String> platformServers =
ResolverConfiguration.open().nameservers(); ResolverConfiguration.open().nameservers();
if (!platformServers.isEmpty()) { if (!platformServers.isEmpty()) {
servers.addAll(platformServers); servers.addAll(platformServers);
...@@ -157,8 +157,7 @@ public class DnsContextFactory implements InitialContextFactory { ...@@ -157,8 +157,7 @@ public class DnsContextFactory implements InitialContextFactory {
? server ? server
: server + ":" + port); : server + ":" + port);
} }
return (String[]) servers.toArray( return servers.toArray(new String[servers.size()]);
new String[servers.size()]);
} }
/* /*
......
/* /*
* Copyright (c) 1999, 2009, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -658,6 +658,11 @@ public final class Connection implements Runnable { ...@@ -658,6 +658,11 @@ public final class Connection implements Runnable {
} }
} }
if (nparent) { if (nparent) {
LdapRequest ldr = pendingRequests;
while (ldr != null) {
ldr.notify();
ldr = ldr.next;
}
parent.processConnectionClosure(); parent.processConnectionClosure();
} }
} }
......
...@@ -803,8 +803,7 @@ final class Filter { ...@@ -803,8 +803,7 @@ final class Filter {
// //
//////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////
// private static final boolean dbg = false; private static final boolean dbg = false;
private static final boolean dbg = true;
private static int dbgIndent = 0; private static int dbgIndent = 0;
private static void dprint(String msg) { private static void dprint(String msg) {
......
...@@ -81,7 +81,7 @@ public class RegistryContext implements Context, Referenceable { ...@@ -81,7 +81,7 @@ public class RegistryContext implements Context, Referenceable {
} }
RMIClientSocketFactory socketFactory = RMIClientSocketFactory socketFactory =
(RMIClientSocketFactory) env.get(SOCKET_FACTORY); (RMIClientSocketFactory) environment.get(SOCKET_FACTORY);
registry = getRegistry(host, port, socketFactory); registry = getRegistry(host, port, socketFactory);
this.host = host; this.host = host;
this.port = port; this.port = port;
......
...@@ -41,6 +41,13 @@ public interface AutoCloseable { ...@@ -41,6 +41,13 @@ public interface AutoCloseable {
* be declared to throw more specific exceptions (or no exception * be declared to throw more specific exceptions (or no exception
* at all, if the close cannot fail). * at all, if the close cannot fail).
* *
* <p>Note that unlike the {@link java.io.Closeable#close close}
* method of {@link java.io.Closeable}, this {@code close} method
* is <em>not</em> required to be idempotent. In other words,
* calling this {@code close} method more than once may have some
* visible side effect, unlike {@code Closeable.close} which is
* required to have no effect if called more than once.
*
* @throws Exception if this resource cannot be closed * @throws Exception if this resource cannot be closed
*/ */
void close() throws Exception; void close() throws Exception;
......
...@@ -28,12 +28,12 @@ import java.io.*; ...@@ -28,12 +28,12 @@ import java.io.*;
import java.util.*; import java.util.*;
/** /**
* The <code>Throwable</code> class is the superclass of all errors and * The {@code Throwable} class is the superclass of all errors and
* exceptions in the Java language. Only objects that are instances of this * exceptions in the Java language. Only objects that are instances of this
* class (or one of its subclasses) are thrown by the Java Virtual Machine or * class (or one of its subclasses) are thrown by the Java Virtual Machine or
* can be thrown by the Java <code>throw</code> statement. Similarly, only * can be thrown by the Java {@code throw} statement. Similarly, only
* this class or one of its subclasses can be the argument type in a * this class or one of its subclasses can be the argument type in a
* <code>catch</code> clause. * {@code catch} clause.
* *
* For the purposes of compile-time checking of exceptions, {@code * For the purposes of compile-time checking of exceptions, {@code
* Throwable} and any subclass of {@code Throwable} that is not also a * Throwable} and any subclass of {@code Throwable} that is not also a
...@@ -73,11 +73,11 @@ import java.util.*; ...@@ -73,11 +73,11 @@ import java.util.*;
* permit the method to throw the cause directly. For example, suppose * permit the method to throw the cause directly. For example, suppose
* a persistent collection conforms to the {@link java.util.Collection * a persistent collection conforms to the {@link java.util.Collection
* Collection} interface, and that its persistence is implemented atop * Collection} interface, and that its persistence is implemented atop
* <tt>java.io</tt>. Suppose the internals of the <tt>add</tt> method * {@code java.io}. Suppose the internals of the {@code add} method
* can throw an {@link java.io.IOException IOException}. The implementation * can throw an {@link java.io.IOException IOException}. The implementation
* can communicate the details of the <tt>IOException</tt> to its caller * can communicate the details of the {@code IOException} to its caller
* while conforming to the <tt>Collection</tt> interface by wrapping the * while conforming to the {@code Collection} interface by wrapping the
* <tt>IOException</tt> in an appropriate unchecked exception. (The * {@code IOException} in an appropriate unchecked exception. (The
* specification for the persistent collection should indicate that it is * specification for the persistent collection should indicate that it is
* capable of throwing such exceptions.) * capable of throwing such exceptions.)
* *
...@@ -86,7 +86,7 @@ import java.util.*; ...@@ -86,7 +86,7 @@ import java.util.*;
* {@link #initCause(Throwable)} method. New throwable classes that * {@link #initCause(Throwable)} method. New throwable classes that
* wish to allow causes to be associated with them should provide constructors * wish to allow causes to be associated with them should provide constructors
* that take a cause and delegate (perhaps indirectly) to one of the * that take a cause and delegate (perhaps indirectly) to one of the
* <tt>Throwable</tt> constructors that takes a cause. For example: * {@code Throwable} constructors that takes a cause. For example:
* <pre> * <pre>
* try { * try {
* lowLevelOp(); * lowLevelOp();
...@@ -94,10 +94,10 @@ import java.util.*; ...@@ -94,10 +94,10 @@ import java.util.*;
* throw new HighLevelException(le); // Chaining-aware constructor * throw new HighLevelException(le); // Chaining-aware constructor
* } * }
* </pre> * </pre>
* Because the <tt>initCause</tt> method is public, it allows a cause to be * Because the {@code initCause} method is public, it allows a cause to be
* associated with any throwable, even a "legacy throwable" whose * associated with any throwable, even a "legacy throwable" whose
* implementation predates the addition of the exception chaining mechanism to * implementation predates the addition of the exception chaining mechanism to
* <tt>Throwable</tt>. For example: * {@code Throwable}. For example:
* <pre> * <pre>
* try { * try {
* lowLevelOp(); * lowLevelOp();
...@@ -121,28 +121,28 @@ import java.util.*; ...@@ -121,28 +121,28 @@ import java.util.*;
* use the standard exception chaining mechanism, while continuing to * use the standard exception chaining mechanism, while continuing to
* implement their "legacy" chaining mechanisms for compatibility. * implement their "legacy" chaining mechanisms for compatibility.
* *
* <p>Further, as of release 1.4, many general purpose <tt>Throwable</tt> * <p>Further, as of release 1.4, many general purpose {@code Throwable}
* classes (for example {@link Exception}, {@link RuntimeException}, * classes (for example {@link Exception}, {@link RuntimeException},
* {@link Error}) have been retrofitted with constructors that take * {@link Error}) have been retrofitted with constructors that take
* a cause. This was not strictly necessary, due to the existence of the * a cause. This was not strictly necessary, due to the existence of the
* <tt>initCause</tt> method, but it is more convenient and expressive to * {@code initCause} method, but it is more convenient and expressive to
* delegate to a constructor that takes a cause. * delegate to a constructor that takes a cause.
* *
* <p>By convention, class <code>Throwable</code> and its subclasses have two * <p>By convention, class {@code Throwable} and its subclasses have two
* constructors, one that takes no arguments and one that takes a * constructors, one that takes no arguments and one that takes a
* <code>String</code> argument that can be used to produce a detail message. * {@code String} argument that can be used to produce a detail message.
* Further, those subclasses that might likely have a cause associated with * Further, those subclasses that might likely have a cause associated with
* them should have two more constructors, one that takes a * them should have two more constructors, one that takes a
* <code>Throwable</code> (the cause), and one that takes a * {@code Throwable} (the cause), and one that takes a
* <code>String</code> (the detail message) and a <code>Throwable</code> (the * {@code String} (the detail message) and a {@code Throwable} (the
* cause). * cause).
* *
* <p>Also introduced in release 1.4 is the {@link #getStackTrace()} method, * <p>Also introduced in release 1.4 is the {@link #getStackTrace()} method,
* which allows programmatic access to the stack trace information that was * which allows programmatic access to the stack trace information that was
* previously available only in text form, via the various forms of the * previously available only in text form, via the various forms of the
* {@link #printStackTrace()} method. This information has been added to the * {@link #printStackTrace()} method. This information has been added to the
* <i>serialized representation</i> of this class so <tt>getStackTrace</tt> * <i>serialized representation</i> of this class so {@code getStackTrace}
* and <tt>printStackTrace</tt> will operate properly on a throwable that * and {@code printStackTrace} will operate properly on a throwable that
* was obtained by deserialization. * was obtained by deserialization.
* *
* @author unascribed * @author unascribed
...@@ -162,7 +162,7 @@ public class Throwable implements Serializable { ...@@ -162,7 +162,7 @@ public class Throwable implements Serializable {
/** /**
* Specific details about the Throwable. For example, for * Specific details about the Throwable. For example, for
* <tt>FileNotFoundException</tt>, this contains the name of * {@code FileNotFoundException}, this contains the name of
* the file that could not be found. * the file that could not be found.
* *
* @serial * @serial
...@@ -212,7 +212,7 @@ public class Throwable implements Serializable { ...@@ -212,7 +212,7 @@ public class Throwable implements Serializable {
private static final String SUPPRESSED_CAPTION = "Suppressed: "; private static final String SUPPRESSED_CAPTION = "Suppressed: ";
/** /**
* Constructs a new throwable with <code>null</code> as its detail message. * Constructs a new throwable with {@code null} as its detail message.
* The cause is not initialized, and may subsequently be initialized by a * The cause is not initialized, and may subsequently be initialized by a
* call to {@link #initCause}. * call to {@link #initCause}.
* *
...@@ -242,7 +242,7 @@ public class Throwable implements Serializable { ...@@ -242,7 +242,7 @@ public class Throwable implements Serializable {
/** /**
* Constructs a new throwable with the specified detail message and * Constructs a new throwable with the specified detail message and
* cause. <p>Note that the detail message associated with * cause. <p>Note that the detail message associated with
* <code>cause</code> is <i>not</i> automatically incorporated in * {@code cause} is <i>not</i> automatically incorporated in
* this throwable's detail message. * this throwable's detail message.
* *
* <p>The {@link #fillInStackTrace()} method is called to initialize * <p>The {@link #fillInStackTrace()} method is called to initialize
...@@ -251,7 +251,7 @@ public class Throwable implements Serializable { ...@@ -251,7 +251,7 @@ public class Throwable implements Serializable {
* @param message the detail message (which is saved for later retrieval * @param message the detail message (which is saved for later retrieval
* by the {@link #getMessage()} method). * by the {@link #getMessage()} method).
* @param cause the cause (which is saved for later retrieval by the * @param cause the cause (which is saved for later retrieval by the
* {@link #getCause()} method). (A <tt>null</tt> value is * {@link #getCause()} method). (A {@code null} value is
* permitted, and indicates that the cause is nonexistent or * permitted, and indicates that the cause is nonexistent or
* unknown.) * unknown.)
* @since 1.4 * @since 1.4
...@@ -264,8 +264,8 @@ public class Throwable implements Serializable { ...@@ -264,8 +264,8 @@ public class Throwable implements Serializable {
/** /**
* Constructs a new throwable with the specified cause and a detail * Constructs a new throwable with the specified cause and a detail
* message of <tt>(cause==null ? null : cause.toString())</tt> (which * message of {@code (cause==null ? null : cause.toString())} (which
* typically contains the class and detail message of <tt>cause</tt>). * typically contains the class and detail message of {@code cause}).
* This constructor is useful for throwables that are little more than * This constructor is useful for throwables that are little more than
* wrappers for other throwables (for example, {@link * wrappers for other throwables (for example, {@link
* java.security.PrivilegedActionException}). * java.security.PrivilegedActionException}).
...@@ -274,7 +274,7 @@ public class Throwable implements Serializable { ...@@ -274,7 +274,7 @@ public class Throwable implements Serializable {
* the stack trace data in the newly created throwable. * the stack trace data in the newly created throwable.
* *
* @param cause the cause (which is saved for later retrieval by the * @param cause the cause (which is saved for later retrieval by the
* {@link #getCause()} method). (A <tt>null</tt> value is * {@link #getCause()} method). (A {@code null} value is
* permitted, and indicates that the cause is nonexistent or * permitted, and indicates that the cause is nonexistent or
* unknown.) * unknown.)
* @since 1.4 * @since 1.4
...@@ -288,8 +288,8 @@ public class Throwable implements Serializable { ...@@ -288,8 +288,8 @@ public class Throwable implements Serializable {
/** /**
* Returns the detail message string of this throwable. * Returns the detail message string of this throwable.
* *
* @return the detail message string of this <tt>Throwable</tt> instance * @return the detail message string of this {@code Throwable} instance
* (which may be <tt>null</tt>). * (which may be {@code null}).
*/ */
public String getMessage() { public String getMessage() {
return detailMessage; return detailMessage;
...@@ -300,7 +300,7 @@ public class Throwable implements Serializable { ...@@ -300,7 +300,7 @@ public class Throwable implements Serializable {
* Subclasses may override this method in order to produce a * Subclasses may override this method in order to produce a
* locale-specific message. For subclasses that do not override this * locale-specific message. For subclasses that do not override this
* method, the default implementation returns the same result as * method, the default implementation returns the same result as
* <code>getMessage()</code>. * {@code getMessage()}.
* *
* @return The localized description of this throwable. * @return The localized description of this throwable.
* @since JDK1.1 * @since JDK1.1
...@@ -310,22 +310,22 @@ public class Throwable implements Serializable { ...@@ -310,22 +310,22 @@ public class Throwable implements Serializable {
} }
/** /**
* Returns the cause of this throwable or <code>null</code> if the * Returns the cause of this throwable or {@code null} if the
* cause is nonexistent or unknown. (The cause is the throwable that * cause is nonexistent or unknown. (The cause is the throwable that
* caused this throwable to get thrown.) * caused this throwable to get thrown.)
* *
* <p>This implementation returns the cause that was supplied via one of * <p>This implementation returns the cause that was supplied via one of
* the constructors requiring a <tt>Throwable</tt>, or that was set after * the constructors requiring a {@code Throwable}, or that was set after
* creation with the {@link #initCause(Throwable)} method. While it is * creation with the {@link #initCause(Throwable)} method. While it is
* typically unnecessary to override this method, a subclass can override * typically unnecessary to override this method, a subclass can override
* it to return a cause set by some other means. This is appropriate for * it to return a cause set by some other means. This is appropriate for
* a "legacy chained throwable" that predates the addition of chained * a "legacy chained throwable" that predates the addition of chained
* exceptions to <tt>Throwable</tt>. Note that it is <i>not</i> * exceptions to {@code Throwable}. Note that it is <i>not</i>
* necessary to override any of the <tt>PrintStackTrace</tt> methods, * necessary to override any of the {@code PrintStackTrace} methods,
* all of which invoke the <tt>getCause</tt> method to determine the * all of which invoke the {@code getCause} method to determine the
* cause of a throwable. * cause of a throwable.
* *
* @return the cause of this throwable or <code>null</code> if the * @return the cause of this throwable or {@code null} if the
* cause is nonexistent or unknown. * cause is nonexistent or unknown.
* @since 1.4 * @since 1.4
*/ */
...@@ -345,11 +345,11 @@ public class Throwable implements Serializable { ...@@ -345,11 +345,11 @@ public class Throwable implements Serializable {
* even once. * even once.
* *
* @param cause the cause (which is saved for later retrieval by the * @param cause the cause (which is saved for later retrieval by the
* {@link #getCause()} method). (A <tt>null</tt> value is * {@link #getCause()} method). (A {@code null} value is
* permitted, and indicates that the cause is nonexistent or * permitted, and indicates that the cause is nonexistent or
* unknown.) * unknown.)
* @return a reference to this <code>Throwable</code> instance. * @return a reference to this {@code Throwable} instance.
* @throws IllegalArgumentException if <code>cause</code> is this * @throws IllegalArgumentException if {@code cause} is this
* throwable. (A throwable cannot be its own cause.) * throwable. (A throwable cannot be its own cause.)
* @throws IllegalStateException if this throwable was * @throws IllegalStateException if this throwable was
* created with {@link #Throwable(Throwable)} or * created with {@link #Throwable(Throwable)} or
...@@ -375,7 +375,7 @@ public class Throwable implements Serializable { ...@@ -375,7 +375,7 @@ public class Throwable implements Serializable {
* <li> the result of invoking this object's {@link #getLocalizedMessage} * <li> the result of invoking this object's {@link #getLocalizedMessage}
* method * method
* </ul> * </ul>
* If <tt>getLocalizedMessage</tt> returns <tt>null</tt>, then just * If {@code getLocalizedMessage} returns {@code null}, then just
* the class name is returned. * the class name is returned.
* *
* @return a string representation of this throwable. * @return a string representation of this throwable.
...@@ -389,8 +389,8 @@ public class Throwable implements Serializable { ...@@ -389,8 +389,8 @@ public class Throwable implements Serializable {
/** /**
* Prints this throwable and its backtrace to the * Prints this throwable and its backtrace to the
* standard error stream. This method prints a stack trace for this * standard error stream. This method prints a stack trace for this
* <code>Throwable</code> object on the error output stream that is * {@code Throwable} object on the error output stream that is
* the value of the field <code>System.err</code>. The first line of * the value of the field {@code System.err}. The first line of
* output contains the result of the {@link #toString()} method for * output contains the result of the {@link #toString()} method for
* this object. Remaining lines represent data previously recorded by * this object. Remaining lines represent data previously recorded by
* the method {@link #fillInStackTrace()}. The format of this * the method {@link #fillInStackTrace()}. The format of this
...@@ -435,7 +435,7 @@ public class Throwable implements Serializable { ...@@ -435,7 +435,7 @@ public class Throwable implements Serializable {
* at Junk.c(Junk.java:21) * at Junk.c(Junk.java:21)
* ... 3 more * ... 3 more
* </pre> * </pre>
* Note the presence of lines containing the characters <tt>"..."</tt>. * Note the presence of lines containing the characters {@code "..."}.
* These lines indicate that the remainder of the stack trace for this * These lines indicate that the remainder of the stack trace for this
* exception matches the indicated number of frames from the bottom of the * exception matches the indicated number of frames from the bottom of the
* stack trace of the exception that was caused by this exception (the * stack trace of the exception that was caused by this exception (the
...@@ -542,14 +542,17 @@ public class Throwable implements Serializable { ...@@ -542,14 +542,17 @@ public class Throwable implements Serializable {
/** /**
* Prints this throwable and its backtrace to the specified print stream. * Prints this throwable and its backtrace to the specified print stream.
* *
* @param s <code>PrintStream</code> to use for output * @param s {@code PrintStream} to use for output
*/ */
public void printStackTrace(PrintStream s) { public void printStackTrace(PrintStream s) {
printStackTrace(new WrappedPrintStream(s)); printStackTrace(new WrappedPrintStream(s));
} }
private void printStackTrace(PrintStreamOrWriter s) { private void printStackTrace(PrintStreamOrWriter s) {
Set<Throwable> dejaVu = new HashSet<Throwable>(); // Guard against malicious overrides of Throwable.equals by
// using a Set with identity equality semantics.
Set<Throwable> dejaVu =
Collections.newSetFromMap(new IdentityHashMap<Throwable, Boolean>());
dejaVu.add(this); dejaVu.add(this);
synchronized (s.lock()) { synchronized (s.lock()) {
...@@ -616,7 +619,7 @@ public class Throwable implements Serializable { ...@@ -616,7 +619,7 @@ public class Throwable implements Serializable {
* Prints this throwable and its backtrace to the specified * Prints this throwable and its backtrace to the specified
* print writer. * print writer.
* *
* @param s <code>PrintWriter</code> to use for output * @param s {@code PrintWriter} to use for output
* @since JDK1.1 * @since JDK1.1
*/ */
public void printStackTrace(PrintWriter s) { public void printStackTrace(PrintWriter s) {
...@@ -669,10 +672,10 @@ public class Throwable implements Serializable { ...@@ -669,10 +672,10 @@ public class Throwable implements Serializable {
/** /**
* Fills in the execution stack trace. This method records within this * Fills in the execution stack trace. This method records within this
* <code>Throwable</code> object information about the current state of * {@code Throwable} object information about the current state of
* the stack frames for the current thread. * the stack frames for the current thread.
* *
* @return a reference to this <code>Throwable</code> instance. * @return a reference to this {@code Throwable} instance.
* @see java.lang.Throwable#printStackTrace() * @see java.lang.Throwable#printStackTrace()
*/ */
public synchronized native Throwable fillInStackTrace(); public synchronized native Throwable fillInStackTrace();
...@@ -694,7 +697,7 @@ public class Throwable implements Serializable { ...@@ -694,7 +697,7 @@ public class Throwable implements Serializable {
* this throwable is permitted to return a zero-length array from this * this throwable is permitted to return a zero-length array from this
* method. Generally speaking, the array returned by this method will * method. Generally speaking, the array returned by this method will
* contain one element for every frame that would be printed by * contain one element for every frame that would be printed by
* <tt>printStackTrace</tt>. * {@code printStackTrace}.
* *
* @return an array of stack trace elements representing the stack trace * @return an array of stack trace elements representing the stack trace
* pertaining to this throwable. * pertaining to this throwable.
...@@ -727,14 +730,14 @@ public class Throwable implements Serializable { ...@@ -727,14 +730,14 @@ public class Throwable implements Serializable {
* read from a serialization stream. * read from a serialization stream.
* *
* @param stackTrace the stack trace elements to be associated with * @param stackTrace the stack trace elements to be associated with
* this <code>Throwable</code>. The specified array is copied by this * this {@code Throwable}. The specified array is copied by this
* call; changes in the specified array after the method invocation * call; changes in the specified array after the method invocation
* returns will have no affect on this <code>Throwable</code>'s stack * returns will have no affect on this {@code Throwable}'s stack
* trace. * trace.
* *
* @throws NullPointerException if <code>stackTrace</code> is * @throws NullPointerException if {@code stackTrace} is
* <code>null</code>, or if any of the elements of * {@code null}, or if any of the elements of
* <code>stackTrace</code> are <code>null</code> * {@code stackTrace} are {@code null}
* *
* @since 1.4 * @since 1.4
*/ */
...@@ -761,8 +764,8 @@ public class Throwable implements Serializable { ...@@ -761,8 +764,8 @@ public class Throwable implements Serializable {
* package-protection for use by SharedSecrets. * package-protection for use by SharedSecrets.
* *
* @param index index of the element to return. * @param index index of the element to return.
* @throws IndexOutOfBoundsException if <tt>index &lt; 0 || * @throws IndexOutOfBoundsException if {@code index < 0 ||
* index &gt;= getStackTraceDepth() </tt> * index >= getStackTraceDepth() }
*/ */
native StackTraceElement getStackTraceElement(int index); native StackTraceElement getStackTraceElement(int index);
...@@ -794,14 +797,27 @@ public class Throwable implements Serializable { ...@@ -794,14 +797,27 @@ public class Throwable implements Serializable {
* were suppressed, typically by the automatic resource management * were suppressed, typically by the automatic resource management
* statement, in order to deliver this exception. * statement, in order to deliver this exception.
* *
* <p>Note that when one exception {@linkplain
* #initCause(Throwable) causes} another exception, the first
* exception is usually caught and then the second exception is
* thrown in response. In contrast, when one exception suppresses
* another, two exceptions are thrown in sibling code blocks, such
* as in a {@code try} block and in its {@code finally} block, and
* control flow can only continue with one exception so the second
* is recorded as a suppressed exception of the first.
*
* @param exception the exception to be added to the list of * @param exception the exception to be added to the list of
* suppressed exceptions * suppressed exceptions
* @throws NullPointerException if {@code exception} is null * @throws NullPointerException if {@code exception} is null
* @throws IllegalArgumentException if {@code exception} is this
* throwable; a throwable cannot suppress itself.
* @since 1.7 * @since 1.7
*/ */
public synchronized void addSuppressedException(Throwable exception) { public synchronized void addSuppressedException(Throwable exception) {
if (exception == null) if (exception == null)
throw new NullPointerException(NULL_CAUSE_MESSAGE); throw new NullPointerException(NULL_CAUSE_MESSAGE);
if (exception == this)
throw new IllegalArgumentException("Self-suppression not permitted");
if (suppressedExceptions.size() == 0) if (suppressedExceptions.size() == 0)
suppressedExceptions = new ArrayList<Throwable>(); suppressedExceptions = new ArrayList<Throwable>();
......
...@@ -596,6 +596,9 @@ class Bits { // package-private ...@@ -596,6 +596,9 @@ class Bits { // package-private
return pageSize; return pageSize;
} }
static int pageCount(long size) {
return (int)(size + (long)pageSize() - 1L) / pageSize();
}
private static boolean unaligned; private static boolean unaligned;
private static boolean unalignedKnown = false; private static boolean unalignedKnown = false;
......
...@@ -25,6 +25,8 @@ ...@@ -25,6 +25,8 @@
package java.nio; package java.nio;
import sun.misc.Unsafe;
/** /**
* A direct byte buffer whose content is a memory-mapped region of a file. * A direct byte buffer whose content is a memory-mapped region of a file.
...@@ -93,6 +95,22 @@ public abstract class MappedByteBuffer ...@@ -93,6 +95,22 @@ public abstract class MappedByteBuffer
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
} }
// Returns the distance (in bytes) of the buffer from the page aligned address
// of the mapping. Computed each time to avoid storing in every direct buffer.
private long mappingOffset() {
int ps = Bits.pageSize();
long offset = address % ps;
return (offset >= 0) ? offset : (ps + offset);
}
private long mappingAddress(long mappingOffset) {
return address - mappingOffset;
}
private long mappingLength(long mappingOffset) {
return (long)capacity() + mappingOffset;
}
/** /**
* Tells whether or not this buffer's content is resident in physical * Tells whether or not this buffer's content is resident in physical
* memory. * memory.
...@@ -115,7 +133,9 @@ public abstract class MappedByteBuffer ...@@ -115,7 +133,9 @@ public abstract class MappedByteBuffer
checkMapped(); checkMapped();
if ((address == 0) || (capacity() == 0)) if ((address == 0) || (capacity() == 0))
return true; return true;
return isLoaded0(((DirectByteBuffer)this).address(), capacity()); long offset = mappingOffset();
long length = mappingLength(offset);
return isLoaded0(mappingAddress(offset), length, Bits.pageCount(length));
} }
/** /**
...@@ -132,7 +152,20 @@ public abstract class MappedByteBuffer ...@@ -132,7 +152,20 @@ public abstract class MappedByteBuffer
checkMapped(); checkMapped();
if ((address == 0) || (capacity() == 0)) if ((address == 0) || (capacity() == 0))
return this; return this;
load0(((DirectByteBuffer)this).address(), capacity(), Bits.pageSize()); long offset = mappingOffset();
long length = mappingLength(offset);
load0(mappingAddress(offset), length);
// touch each page
Unsafe unsafe = Unsafe.getUnsafe();
int ps = Bits.pageSize();
int count = Bits.pageCount(length);
long a = mappingAddress(offset);
for (int i=0; i<count; i++) {
unsafe.getByte(a);
a += ps;
}
return this; return this;
} }
...@@ -156,14 +189,15 @@ public abstract class MappedByteBuffer ...@@ -156,14 +189,15 @@ public abstract class MappedByteBuffer
*/ */
public final MappedByteBuffer force() { public final MappedByteBuffer force() {
checkMapped(); checkMapped();
if ((address == 0) || (capacity() == 0)) if ((address != 0) && (capacity() != 0)) {
return this; long offset = mappingOffset();
force0(((DirectByteBuffer)this).address(), capacity()); force0(mappingAddress(offset), mappingLength(offset));
}
return this; return this;
} }
private native boolean isLoaded0(long address, long length); private native boolean isLoaded0(long address, long length, int pageCount);
private native int load0(long address, long length, int pageSize); private native void load0(long address, long length);
private native void force0(long address, long length); private native void force0(long address, long length);
} }
/* /*
* Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -387,7 +387,7 @@ public abstract class X509CRL extends CRL implements X509Extension { ...@@ -387,7 +387,7 @@ public abstract class X509CRL extends CRL implements X509Extension {
/** /**
* Gets the signature algorithm name for the CRL * Gets the signature algorithm name for the CRL
* signature algorithm. An example is the string "SHA-1/DSA". * signature algorithm. An example is the string "SHA256withRSA".
* The ASN.1 definition for this is: * The ASN.1 definition for this is:
* <pre> * <pre>
* signatureAlgorithm AlgorithmIdentifier<p> * signatureAlgorithm AlgorithmIdentifier<p>
......
/* /*
* Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -352,7 +352,7 @@ implements X509Extension { ...@@ -352,7 +352,7 @@ implements X509Extension {
/** /**
* Gets the signature algorithm name for the certificate * Gets the signature algorithm name for the certificate
* signature algorithm. An example is the string "SHA-1/DSA". * signature algorithm. An example is the string "SHA256withRSA".
* The ASN.1 definition for this is: * The ASN.1 definition for this is:
* <pre> * <pre>
* signatureAlgorithm AlgorithmIdentifier<p> * signatureAlgorithm AlgorithmIdentifier<p>
......
...@@ -26,18 +26,9 @@ ...@@ -26,18 +26,9 @@
package java.util; package java.util;
/** /**
* Linked list implementation of the {@code List} interface. Implements all * Linked list implementation of the {@link List} and {@link Deque} interfaces.
* optional list operations, and permits all elements (including * Implements all optional operations, and permits all elements (including
* {@code null}). In addition to implementing the {@code List} interface, * {@code null}).
* the {@code LinkedList} class provides uniformly named methods to
* {@code get}, {@code remove} and {@code insert} an element at the
* beginning and end of the list. These operations allow linked lists to be
* used as a stack, {@linkplain Queue queue}, or {@linkplain Deque
* double-ended queue}.
*
* <p>The class implements the {@code Deque} interface, providing
* first-in-first-out queue operations for {@code add},
* {@code poll}, along with other stack and deque operations.
* *
* <p>All of the operations perform as could be expected for a doubly-linked * <p>All of the operations perform as could be expected for a doubly-linked
* list. Operations that index into the list will traverse the list from * list. Operations that index into the list will traverse the list from
......
/* /*
* Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -113,7 +113,6 @@ public class BasicColorChooserUI extends ColorChooserUI ...@@ -113,7 +113,6 @@ public class BasicColorChooserUI extends ColorChooserUI
previewPanelHolder.setBorder(new TitledBorder(previewString)); previewPanelHolder.setBorder(new TitledBorder(previewString));
} }
previewPanelHolder.setInheritsPopupMenu(true); previewPanelHolder.setInheritsPopupMenu(true);
chooser.add(previewPanelHolder, BorderLayout.SOUTH);
installPreviewPanel(); installPreviewPanel();
chooser.applyComponentOrientation(c.getComponentOrientation()); chooser.applyComponentOrientation(c.getComponentOrientation());
...@@ -126,13 +125,9 @@ public class BasicColorChooserUI extends ColorChooserUI ...@@ -126,13 +125,9 @@ public class BasicColorChooserUI extends ColorChooserUI
uninstallDefaultChoosers(); uninstallDefaultChoosers();
uninstallListeners(); uninstallListeners();
uninstallPreviewPanel();
uninstallDefaults(); uninstallDefaults();
previewPanelHolder.remove(previewPanel);
if (previewPanel instanceof UIResource) {
chooser.setPreviewPanel(null);
}
previewPanelHolder = null; previewPanelHolder = null;
previewPanel = null; previewPanel = null;
defaultChoosers = null; defaultChoosers = null;
...@@ -143,29 +138,37 @@ public class BasicColorChooserUI extends ColorChooserUI ...@@ -143,29 +138,37 @@ public class BasicColorChooserUI extends ColorChooserUI
} }
protected void installPreviewPanel() { protected void installPreviewPanel() {
if (previewPanel != null) { JComponent previewPanel = this.chooser.getPreviewPanel();
previewPanelHolder.remove(previewPanel); if (previewPanel == null) {
previewPanel.removeMouseListener(getHandler()); previewPanel = ColorChooserComponentFactory.getPreviewPanel();
} }
else {
previewPanel = chooser.getPreviewPanel(); Dimension size = new BorderLayout().minimumLayoutSize(previewPanel);
Dimension layoutSize = new Dimension(); // fix for bug 4759306 if ((size.width == 0) && (size.height == 0)) {
if (previewPanel != null) { previewPanel = null;
layoutSize = new BorderLayout().minimumLayoutSize(previewPanel);
if ((previewPanelHolder != null) && (chooser != null) &&
(layoutSize.getWidth() + layoutSize.getHeight() == 0)) {
chooser.remove(previewPanelHolder);
return;
} }
} }
if (previewPanel == null || previewPanel instanceof UIResource) { this.previewPanel = previewPanel;
previewPanel = ColorChooserComponentFactory.getPreviewPanel(); // get from table? if (previewPanel != null) {
chooser.setPreviewPanel(previewPanel); chooser.add(previewPanelHolder, BorderLayout.SOUTH);
previewPanel.setForeground(chooser.getColor());
previewPanelHolder.add(previewPanel);
previewPanel.addMouseListener(getHandler());
previewPanel.setInheritsPopupMenu(true);
} }
previewPanel.setForeground(chooser.getColor()); }
previewPanelHolder.add(previewPanel);
previewPanel.addMouseListener(getHandler()); /**
previewPanel.setInheritsPopupMenu(true); * Removes installed preview panel from the UI delegate.
*
* @since 1.7
*/
protected void uninstallPreviewPanel() {
if (this.previewPanel != null) {
this.previewPanel.removeMouseListener(getHandler());
this.previewPanelHolder.remove(this.previewPanel);
}
this.chooser.remove(this.previewPanelHolder);
} }
protected void installDefaults() { protected void installDefaults() {
...@@ -209,7 +212,6 @@ public class BasicColorChooserUI extends ColorChooserUI ...@@ -209,7 +212,6 @@ public class BasicColorChooserUI extends ColorChooserUI
chooser.removePropertyChangeListener( propertyChangeListener ); chooser.removePropertyChangeListener( propertyChangeListener );
chooser.getSelectionModel().removeChangeListener(previewListener); chooser.getSelectionModel().removeChangeListener(previewListener);
previewListener = null; previewListener = null;
previewPanel.removeMouseListener(getHandler());
} }
private void selectionChanged(ColorSelectionModel model) { private void selectionChanged(ColorSelectionModel model) {
...@@ -312,9 +314,8 @@ public class BasicColorChooserUI extends ColorChooserUI ...@@ -312,9 +314,8 @@ public class BasicColorChooserUI extends ColorChooserUI
} }
} }
else if (prop == JColorChooser.PREVIEW_PANEL_PROPERTY) { else if (prop == JColorChooser.PREVIEW_PANEL_PROPERTY) {
if (evt.getNewValue() != previewPanel) { uninstallPreviewPanel();
installPreviewPanel(); installPreviewPanel();
}
} }
else if (prop == JColorChooser.SELECTION_MODEL_PROPERTY) { else if (prop == JColorChooser.SELECTION_MODEL_PROPERTY) {
ColorSelectionModel oldModel = (ColorSelectionModel) evt.getOldValue(); ColorSelectionModel oldModel = (ColorSelectionModel) evt.getOldValue();
...@@ -352,5 +353,4 @@ public class BasicColorChooserUI extends ColorChooserUI ...@@ -352,5 +353,4 @@ public class BasicColorChooserUI extends ColorChooserUI
super("color"); super("color");
} }
} }
} }
...@@ -202,8 +202,8 @@ public class BasicComboPopup extends JPopupMenu implements ComboPopup { ...@@ -202,8 +202,8 @@ public class BasicComboPopup extends JPopupMenu implements ComboPopup {
* Implementation of ComboPopup.show(). * Implementation of ComboPopup.show().
*/ */
public void show() { public void show() {
comboBox.firePopupMenuWillBecomeVisible();
setListSelection(comboBox.getSelectedIndex()); setListSelection(comboBox.getSelectedIndex());
Point location = getPopupLocation(); Point location = getPopupLocation();
show( comboBox, location.x, location.y ); show( comboBox, location.x, location.y );
} }
...@@ -344,7 +344,8 @@ public class BasicComboPopup extends JPopupMenu implements ComboPopup { ...@@ -344,7 +344,8 @@ public class BasicComboPopup extends JPopupMenu implements ComboPopup {
protected void firePopupMenuWillBecomeVisible() { protected void firePopupMenuWillBecomeVisible() {
super.firePopupMenuWillBecomeVisible(); super.firePopupMenuWillBecomeVisible();
comboBox.firePopupMenuWillBecomeVisible(); // comboBox.firePopupMenuWillBecomeVisible() is called from BasicComboPopup.show() method
// to let the user change the popup menu from the PopupMenuListener.popupMenuWillBecomeVisible()
} }
protected void firePopupMenuWillBecomeInvisible() { protected void firePopupMenuWillBecomeInvisible() {
......
...@@ -570,7 +570,9 @@ public class DefaultFormatter extends JFormattedTextField.AbstractFormatter ...@@ -570,7 +570,9 @@ public class DefaultFormatter extends JFormattedTextField.AbstractFormatter
direction = -1; direction = -1;
} }
if (getOverwriteMode() && rh.text != null) { if (getOverwriteMode() && rh.text != null &&
getFormattedTextField().getSelectedText() == null)
{
rh.length = Math.min(Math.max(rh.length, rh.text.length()), rh.length = Math.min(Math.max(rh.length, rh.text.length()),
rh.fb.getDocument().getLength() - rh.offset); rh.fb.getDocument().getLength() - rh.offset);
} }
......
...@@ -622,18 +622,8 @@ public class InternationalFormatter extends DefaultFormatter { ...@@ -622,18 +622,8 @@ public class InternationalFormatter extends DefaultFormatter {
/** /**
* Overriden in an attempt to honor the literals. * Overriden in an attempt to honor the literals.
* <p> * <p>If we do not allow invalid values and are in overwrite mode, this
* If we do * {@code rh.length} is corrected as to preserve trailing literals.
* not allow invalid values and are in overwrite mode, this does the
* following for each character in the replacement range:
* <ol>
* <li>If the character is a literal, add it to the string to replace
* with. If there is text to insert and it doesn't match the
* literal, then insert the literal in the the middle of the insert
* text. This allows you to either paste in literals or not and
* get the same behavior.
* <li>If there is no text to insert, replace it with ' '.
* </ol>
* If not in overwrite mode, and there is text to insert it is * If not in overwrite mode, and there is text to insert it is
* inserted at the next non literal index going forward. If there * inserted at the next non literal index going forward. If there
* is only text to remove, it is removed from the next non literal * is only text to remove, it is removed from the next non literal
...@@ -643,61 +633,27 @@ public class InternationalFormatter extends DefaultFormatter { ...@@ -643,61 +633,27 @@ public class InternationalFormatter extends DefaultFormatter {
if (!getAllowsInvalid()) { if (!getAllowsInvalid()) {
String text = rh.text; String text = rh.text;
int tl = (text != null) ? text.length() : 0; int tl = (text != null) ? text.length() : 0;
JTextComponent c = getFormattedTextField();
if (tl == 0 && rh.length == 1 && getFormattedTextField(). if (tl == 0 && rh.length == 1 && c.getSelectionStart() != rh.offset) {
getSelectionStart() != rh.offset) {
// Backspace, adjust to actually delete next non-literal. // Backspace, adjust to actually delete next non-literal.
rh.offset = getNextNonliteralIndex(rh.offset, -1); rh.offset = getNextNonliteralIndex(rh.offset, -1);
} } else if (getOverwriteMode()) {
if (getOverwriteMode()) { int pos = rh.offset;
StringBuffer replace = null; int textPos = pos;
boolean overflown = false;
for (int counter = 0, textIndex = 0,
max = Math.max(tl, rh.length); counter < max; for (int i = 0; i < rh.length; i++) {
counter++) { while (isLiteral(pos)) pos++;
if (isLiteral(rh.offset + counter)) { if (pos >= string.length()) {
if (replace != null) { pos = textPos;
replace.append(getLiteral(rh.offset + overflown = true;
counter)); break;
}
if (textIndex < tl && text.charAt(textIndex) ==
getLiteral(rh.offset + counter)) {
textIndex++;
}
else if (textIndex == 0) {
rh.offset++;
rh.length--;
counter--;
max--;
}
else if (replace == null) {
replace = new StringBuffer(max);
replace.append(text.substring(0, textIndex));
replace.append(getLiteral(rh.offset +
counter));
}
}
else if (textIndex < tl) {
if (replace != null) {
replace.append(text.charAt(textIndex));
}
textIndex++;
}
else {
// Nothing to replace it with, assume ' '
if (replace == null) {
replace = new StringBuffer(max);
if (textIndex > 0) {
replace.append(text.substring(0, textIndex));
}
}
if (replace != null) {
replace.append(' ');
}
} }
textPos = ++pos;
} }
if (replace != null) { if (overflown || c.getSelectedText() == null) {
rh.text = replace.toString(); rh.length = pos - rh.offset;
} }
} }
else if (tl > 0) { else if (tl > 0) {
......
/* /*
* Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -26,7 +26,6 @@ ...@@ -26,7 +26,6 @@
package sun.net.dns; package sun.net.dns;
import java.util.List; import java.util.List;
import java.io.IOException;
/** /**
* The configuration of the client resolver. * The configuration of the client resolver.
...@@ -68,7 +67,7 @@ public abstract class ResolverConfiguration { ...@@ -68,7 +67,7 @@ public abstract class ResolverConfiguration {
* *
* @return list of domain names * @return list of domain names
*/ */
public abstract List searchlist(); public abstract List<String> searchlist();
/** /**
* Returns a list of name servers used for host name lookup. * Returns a list of name servers used for host name lookup.
...@@ -78,7 +77,7 @@ public abstract class ResolverConfiguration { ...@@ -78,7 +77,7 @@ public abstract class ResolverConfiguration {
* *
* @return list of the name servers * @return list of the name servers
*/ */
public abstract List nameservers(); public abstract List<String> nameservers();
/** /**
......
/* /*
* Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -45,20 +45,21 @@ import sun.security.action.*; ...@@ -45,20 +45,21 @@ import sun.security.action.*;
public final class DNSNameService implements NameService { public final class DNSNameService implements NameService {
// List of domains specified by property // List of domains specified by property
private LinkedList domainList = null; private LinkedList<String> domainList = null;
// JNDI-DNS URL for name servers specified via property // JNDI-DNS URL for name servers specified via property
private String nameProviderUrl = null; private String nameProviderUrl = null;
// Per-thread soft cache of the last temporary context // Per-thread soft cache of the last temporary context
private static ThreadLocal contextRef = new ThreadLocal(); private static ThreadLocal<SoftReference<ThreadContext>> contextRef =
new ThreadLocal<>();
// Simple class to encapsulate the temporary context // Simple class to encapsulate the temporary context
private static class ThreadContext { private static class ThreadContext {
private DirContext dirCtxt; private DirContext dirCtxt;
private List nsList; private List<String> nsList;
public ThreadContext(DirContext dirCtxt, List nsList) { public ThreadContext(DirContext dirCtxt, List<String> nsList) {
this.dirCtxt = dirCtxt; this.dirCtxt = dirCtxt;
this.nsList = nsList; this.nsList = nsList;
} }
...@@ -67,16 +68,16 @@ public final class DNSNameService implements NameService { ...@@ -67,16 +68,16 @@ public final class DNSNameService implements NameService {
return dirCtxt; return dirCtxt;
} }
public List nameservers() { public List<String> nameservers() {
return nsList; return nsList;
} }
} }
// Returns a per-thread DirContext // Returns a per-thread DirContext
private DirContext getTemporaryContext() throws NamingException { private DirContext getTemporaryContext() throws NamingException {
SoftReference ref = (SoftReference)contextRef.get(); SoftReference<ThreadContext> ref = contextRef.get();
ThreadContext thrCtxt = null; ThreadContext thrCtxt = null;
List nsList = null; List<String> nsList = null;
// if no property specified we need to obtain the list of servers // if no property specified we need to obtain the list of servers
// //
...@@ -87,7 +88,7 @@ public final class DNSNameService implements NameService { ...@@ -87,7 +88,7 @@ public final class DNSNameService implements NameService {
// specified then we need to check if the DNS configuration // specified then we need to check if the DNS configuration
// has changed. // has changed.
// //
if ((ref != null) && ((thrCtxt = (ThreadContext)ref.get()) != null)) { if ((ref != null) && ((thrCtxt = ref.get()) != null)) {
if (nameProviderUrl == null) { if (nameProviderUrl == null) {
if (!thrCtxt.nameservers().equals(nsList)) { if (!thrCtxt.nameservers().equals(nsList)) {
// DNS configuration has changed // DNS configuration has changed
...@@ -98,7 +99,7 @@ public final class DNSNameService implements NameService { ...@@ -98,7 +99,7 @@ public final class DNSNameService implements NameService {
// new thread context needs to be created // new thread context needs to be created
if (thrCtxt == null) { if (thrCtxt == null) {
final Hashtable<String,Object> env = new Hashtable<String,Object>(); final Hashtable<String,Object> env = new Hashtable<>();
env.put("java.naming.factory.initial", env.put("java.naming.factory.initial",
"com.sun.jndi.dns.DnsContextFactory"); "com.sun.jndi.dns.DnsContextFactory");
...@@ -119,10 +120,9 @@ public final class DNSNameService implements NameService { ...@@ -119,10 +120,9 @@ public final class DNSNameService implements NameService {
// //
DirContext dirCtxt; DirContext dirCtxt;
try { try {
dirCtxt = (DirContext) dirCtxt = java.security.AccessController.doPrivileged(
java.security.AccessController.doPrivileged( new java.security.PrivilegedExceptionAction<DirContext>() {
new java.security.PrivilegedExceptionAction() { public DirContext run() throws NamingException {
public Object run() throws NamingException {
// Create the DNS context using NamingManager rather than using // Create the DNS context using NamingManager rather than using
// the initial context constructor. This avoids having the initial // the initial context constructor. This avoids having the initial
// context constructor call itself. // context constructor call itself.
...@@ -130,7 +130,7 @@ public final class DNSNameService implements NameService { ...@@ -130,7 +130,7 @@ public final class DNSNameService implements NameService {
if (!(ctx instanceof DirContext)) { if (!(ctx instanceof DirContext)) {
return null; // cannot create a DNS context return null; // cannot create a DNS context
} }
return ctx; return (DirContext)ctx;
} }
}); });
} catch (java.security.PrivilegedActionException pae) { } catch (java.security.PrivilegedActionException pae) {
...@@ -161,18 +161,18 @@ public final class DNSNameService implements NameService { ...@@ -161,18 +161,18 @@ public final class DNSNameService implements NameService {
* *
* @throws UnknownHostException if lookup fails or other error. * @throws UnknownHostException if lookup fails or other error.
*/ */
private ArrayList resolve(final DirContext ctx, final String name, final String[] ids, private ArrayList<String> resolve(final DirContext ctx, final String name,
int depth) throws UnknownHostException final String[] ids, int depth)
throws UnknownHostException
{ {
ArrayList results = new ArrayList(); ArrayList<String> results = new ArrayList<>();
Attributes attrs; Attributes attrs;
// do the query // do the query
try { try {
attrs = (Attributes) attrs = java.security.AccessController.doPrivileged(
java.security.AccessController.doPrivileged( new java.security.PrivilegedExceptionAction<Attributes>() {
new java.security.PrivilegedExceptionAction() { public Attributes run() throws NamingException {
public Object run() throws NamingException {
return ctx.getAttributes(name, ids); return ctx.getAttributes(name, ids);
} }
}); });
...@@ -181,7 +181,7 @@ public final class DNSNameService implements NameService { ...@@ -181,7 +181,7 @@ public final class DNSNameService implements NameService {
} }
// non-requested type returned so enumeration is empty // non-requested type returned so enumeration is empty
NamingEnumeration ne = attrs.getAll(); NamingEnumeration<? extends Attribute> ne = attrs.getAll();
if (!ne.hasMoreElements()) { if (!ne.hasMoreElements()) {
throw new UnknownHostException("DNS record not found"); throw new UnknownHostException("DNS record not found");
} }
...@@ -190,7 +190,7 @@ public final class DNSNameService implements NameService { ...@@ -190,7 +190,7 @@ public final class DNSNameService implements NameService {
UnknownHostException uhe = null; UnknownHostException uhe = null;
try { try {
while (ne.hasMoreElements()) { while (ne.hasMoreElements()) {
Attribute attr = (Attribute)ne.next(); Attribute attr = ne.next();
String attrID = attr.getID(); String attrID = attr.getID();
for (NamingEnumeration e = attr.getAll(); e.hasMoreElements();) { for (NamingEnumeration e = attr.getAll(); e.hasMoreElements();) {
...@@ -251,13 +251,12 @@ public final class DNSNameService implements NameService { ...@@ -251,13 +251,12 @@ public final class DNSNameService implements NameService {
// no property specified so check host DNS resolver configured // no property specified so check host DNS resolver configured
// with at least one nameserver in dotted notation. // with at least one nameserver in dotted notation.
// //
List nsList = ResolverConfiguration.open().nameservers(); List<String> nsList = ResolverConfiguration.open().nameservers();
if (nsList.size() == 0) if (nsList.isEmpty()) {
throw new RuntimeException("no nameservers provided"); throw new RuntimeException("no nameservers provided");
}
boolean found = false; boolean found = false;
Iterator i = nsList.iterator(); for (String addr: nsList) {
while (i.hasNext()) {
String addr = (String)i.next();
if (IPAddressUtil.isIPv4LiteralAddress(addr) || if (IPAddressUtil.isIPv4LiteralAddress(addr) ||
IPAddressUtil.isIPv6LiteralAddress(addr)) { IPAddressUtil.isIPv6LiteralAddress(addr)) {
found = true; found = true;
...@@ -308,8 +307,8 @@ public final class DNSNameService implements NameService { ...@@ -308,8 +307,8 @@ public final class DNSNameService implements NameService {
// suffix if the list has one entry. // suffix if the list has one entry.
if (results == null) { if (results == null) {
List searchList = null; List<String> searchList = null;
Iterator i; Iterator<String> i;
boolean usingSearchList = false; boolean usingSearchList = false;
if (domainList != null) { if (domainList != null) {
...@@ -324,7 +323,7 @@ public final class DNSNameService implements NameService { ...@@ -324,7 +323,7 @@ public final class DNSNameService implements NameService {
// iterator through each domain suffix // iterator through each domain suffix
while (i.hasNext()) { while (i.hasNext()) {
String parentDomain = (String)i.next(); String parentDomain = i.next();
int start = 0; int start = 0;
while ((start = parentDomain.indexOf(".")) != -1 while ((start = parentDomain.indexOf(".")) != -1
&& start < parentDomain.length() -1) { && start < parentDomain.length() -1) {
...@@ -407,7 +406,7 @@ public final class DNSNameService implements NameService { ...@@ -407,7 +406,7 @@ public final class DNSNameService implements NameService {
String literalip = ""; String literalip = "";
String[] ids = { "PTR" }; String[] ids = { "PTR" };
DirContext ctx; DirContext ctx;
ArrayList results = null; ArrayList<String> results = null;
try { try {
ctx = getTemporaryContext(); ctx = getTemporaryContext();
} catch (NamingException nx) { } catch (NamingException nx) {
...@@ -420,7 +419,7 @@ public final class DNSNameService implements NameService { ...@@ -420,7 +419,7 @@ public final class DNSNameService implements NameService {
literalip += "IN-ADDR.ARPA."; literalip += "IN-ADDR.ARPA.";
results = resolve(ctx, literalip, ids, 0); results = resolve(ctx, literalip, ids, 0);
host = (String)results.get(0); host = results.get(0);
} else if (addr.length == 16) { // IPv6 Address } else if (addr.length == 16) { // IPv6 Address
/** /**
* Because RFC 3152 changed the root domain name for reverse * Because RFC 3152 changed the root domain name for reverse
...@@ -437,7 +436,7 @@ public final class DNSNameService implements NameService { ...@@ -437,7 +436,7 @@ public final class DNSNameService implements NameService {
try { try {
results = resolve(ctx, ip6lit, ids, 0); results = resolve(ctx, ip6lit, ids, 0);
host = (String)results.get(0); host = results.get(0);
} catch (UnknownHostException e) { } catch (UnknownHostException e) {
host = null; host = null;
} }
...@@ -445,7 +444,7 @@ public final class DNSNameService implements NameService { ...@@ -445,7 +444,7 @@ public final class DNSNameService implements NameService {
// IP6.ARPA lookup failed, let's try the older IP6.INT // IP6.ARPA lookup failed, let's try the older IP6.INT
ip6lit = literalip + "IP6.INT."; ip6lit = literalip + "IP6.INT.";
results = resolve(ctx, ip6lit, ids, 0); results = resolve(ctx, ip6lit, ids, 0);
host = (String)results.get(0); host = results.get(0);
} }
} }
} catch (Exception e) { } catch (Exception e) {
...@@ -478,11 +477,10 @@ public final class DNSNameService implements NameService { ...@@ -478,11 +477,10 @@ public final class DNSNameService implements NameService {
* @return String containing the JNDI-DNS provider URL * @return String containing the JNDI-DNS provider URL
* corresponding to the supplied List of nameservers. * corresponding to the supplied List of nameservers.
*/ */
private static String createProviderURL(List nsList) { private static String createProviderURL(List<String> nsList) {
Iterator i = nsList.iterator();
StringBuffer sb = new StringBuffer(); StringBuffer sb = new StringBuffer();
while (i.hasNext()) { for (String s: nsList) {
appendIfLiteralAddress((String)i.next(), sb); appendIfLiteralAddress(s, sb);
} }
return sb.toString(); return sb.toString();
} }
......
...@@ -336,7 +336,12 @@ public class SocketAdaptor ...@@ -336,7 +336,12 @@ public class SocketAdaptor
} }
public void sendUrgentData(int data) throws IOException { public void sendUrgentData(int data) throws IOException {
throw new SocketException("Urgent data not supported"); synchronized (sc.blockingLock()) {
if (!sc.isBlocking())
throw new IllegalBlockingModeException();
int n = sc.sendOutOfBandData((byte)data);
assert n == 1;
}
} }
public void setOOBInline(boolean on) throws SocketException { public void setOOBInline(boolean on) throws SocketException {
......
...@@ -498,6 +498,36 @@ class SocketChannelImpl ...@@ -498,6 +498,36 @@ class SocketChannelImpl
return write0(Util.subsequence(srcs, offset, length)); return write0(Util.subsequence(srcs, offset, length));
} }
// package-private
int sendOutOfBandData(byte b) throws IOException {
synchronized (writeLock) {
ensureWriteOpen();
int n = 0;
try {
begin();
synchronized (stateLock) {
if (!isOpen())
return 0;
writerThread = NativeThread.current();
}
for (;;) {
n = sendOutOfBandData(fd, b);
if ((n == IOStatus.INTERRUPTED) && isOpen())
continue;
return IOStatus.normalize(n);
}
} finally {
writerCleanup();
end((n > 0) || (n == IOStatus.UNAVAILABLE));
synchronized (stateLock) {
if ((n <= 0) && (!isOutputOpen))
throw new AsynchronousCloseException();
}
assert IOStatus.check(n);
}
}
}
protected void implConfigureBlocking(boolean block) throws IOException { protected void implConfigureBlocking(boolean block) throws IOException {
IOUtil.configureBlocking(fd, block); IOUtil.configureBlocking(fd, block);
} }
...@@ -957,6 +987,9 @@ class SocketChannelImpl ...@@ -957,6 +987,9 @@ class SocketChannelImpl
boolean block, boolean ready) boolean block, boolean ready)
throws IOException; throws IOException;
private static native int sendOutOfBandData(FileDescriptor fd, byte data)
throws IOException;
static { static {
Util.load(); Util.load();
nd = new SocketDispatcher(); nd = new SocketDispatcher();
......
...@@ -42,6 +42,8 @@ import java.util.Enumeration; ...@@ -42,6 +42,8 @@ import java.util.Enumeration;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.util.List;
import sun.net.dns.ResolverConfiguration;
import sun.security.krb5.internal.crypto.EType; import sun.security.krb5.internal.crypto.EType;
import sun.security.krb5.internal.ktab.*; import sun.security.krb5.internal.ktab.*;
import sun.security.krb5.internal.Krb5; import sun.security.krb5.internal.Krb5;
...@@ -1180,6 +1182,33 @@ public class Config { ...@@ -1180,6 +1182,33 @@ public class Config {
} }
// get the domain realm mapping from the configuration // get the domain realm mapping from the configuration
String mapRealm = PrincipalName.mapHostToRealm(hostName); String mapRealm = PrincipalName.mapHostToRealm(hostName);
if (mapRealm == null) {
// No match. Try search and/or domain in /etc/resolv.conf
List<String> srchlist = ResolverConfiguration.open().searchlist();
for (String domain: srchlist) {
realm = checkRealm(domain);
if (realm != null) {
break;
}
}
} else {
realm = checkRealm(mapRealm);
}
if (realm == null) {
throw new KrbException(Krb5.KRB_ERR_GENERIC,
"Unable to locate Kerberos realm");
}
return realm;
}
/**
* Check if the provided realm is the correct realm
* @return the realm if correct, or null otherwise
*/
private static String checkRealm(String mapRealm) {
if (DEBUG) {
System.out.println("getRealmFromDNS: trying " + mapRealm);
}
String[] records = null; String[] records = null;
String newRealm = mapRealm; String newRealm = mapRealm;
while ((records == null) && (newRealm != null)) { while ((records == null) && (newRealm != null)) {
...@@ -1188,23 +1217,14 @@ public class Config { ...@@ -1188,23 +1217,14 @@ public class Config {
newRealm = Realm.parseRealmComponent(newRealm); newRealm = Realm.parseRealmComponent(newRealm);
// if no DNS TXT records found, try again using sub-realm // if no DNS TXT records found, try again using sub-realm
} }
if (records == null) { if (records != null) {
// no DNS TXT records for (int i = 0; i < records.length; i++) {
throw new KrbException(Krb5.KRB_ERR_GENERIC, if (records[i].equalsIgnoreCase(mapRealm)) {
"Unable to locate Kerberos realm"); return records[i];
} }
boolean found = false;
for (int i = 0; i < records.length; i++) {
if (records[i].equals(mapRealm)) {
found = true;
realm = records[i];
} }
} }
if (found == false) { return null;
throw new KrbException(Krb5.KRB_ERR_GENERIC,
"Unable to locate Kerberos realm");
}
return realm;
} }
/** /**
...@@ -1218,10 +1238,16 @@ public class Config { ...@@ -1218,10 +1238,16 @@ public class Config {
String kdcs = null; String kdcs = null;
String[] srvs = null; String[] srvs = null;
// locate DNS SRV record using UDP // locate DNS SRV record using UDP
srvs = KrbServiceLocator.getKerberosService(realm, "_udp."); if (DEBUG) {
System.out.println("getKDCFromDNS using UDP");
}
srvs = KrbServiceLocator.getKerberosService(realm, "_udp");
if (srvs == null) { if (srvs == null) {
// locate DNS SRV record using TCP // locate DNS SRV record using TCP
srvs = KrbServiceLocator.getKerberosService(realm, "_tcp."); if (DEBUG) {
System.out.println("getKDCFromDNS using UDP");
}
srvs = KrbServiceLocator.getKerberosService(realm, "_tcp");
} }
if (srvs == null) { if (srvs == null) {
// no DNS SRV records // no DNS SRV records
......
...@@ -36,6 +36,7 @@ import sun.security.krb5.internal.ccache.CredentialsCache; ...@@ -36,6 +36,7 @@ import sun.security.krb5.internal.ccache.CredentialsCache;
import sun.security.krb5.internal.crypto.EType; import sun.security.krb5.internal.crypto.EType;
import java.io.IOException; import java.io.IOException;
import java.util.Date; import java.util.Date;
import java.util.Locale;
import java.net.InetAddress; import java.net.InetAddress;
/** /**
...@@ -287,7 +288,7 @@ public class Credentials { ...@@ -287,7 +288,7 @@ public class Credentials {
// The default ticket cache on Windows is not a file. // The default ticket cache on Windows is not a file.
String os = java.security.AccessController.doPrivileged( String os = java.security.AccessController.doPrivileged(
new sun.security.action.GetPropertyAction("os.name")); new sun.security.action.GetPropertyAction("os.name"));
if (os.toUpperCase().startsWith("WINDOWS")) { if (os.toUpperCase(Locale.ENGLISH).startsWith("WINDOWS")) {
Credentials creds = acquireDefaultCreds(); Credentials creds = acquireDefaultCreds();
if (creds == null) { if (creds == null) {
if (DEBUG) { if (DEBUG) {
......
/* /*
* Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -28,6 +28,7 @@ package sun.security.pkcs; ...@@ -28,6 +28,7 @@ package sun.security.pkcs;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import java.security.cert.CertificateException; import java.security.cert.CertificateException;
import java.util.Locale;
import java.util.Date; import java.util.Date;
import java.util.Hashtable; import java.util.Hashtable;
import sun.security.x509.CertificateExtensions; import sun.security.x509.CertificateExtensions;
...@@ -742,7 +743,7 @@ public class PKCS9Attribute implements DerEncoder { ...@@ -742,7 +743,7 @@ public class PKCS9Attribute implements DerEncoder {
* the name. * the name.
*/ */
public static ObjectIdentifier getOID(String name) { public static ObjectIdentifier getOID(String name) {
return NAME_OID_TABLE.get(name.toLowerCase()); return NAME_OID_TABLE.get(name.toLowerCase(Locale.ENGLISH));
} }
/** /**
......
...@@ -26,6 +26,7 @@ package sun.security.pkcs11; ...@@ -26,6 +26,7 @@ package sun.security.pkcs11;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.util.Arrays; import java.util.Arrays;
import java.util.Locale;
import java.security.*; import java.security.*;
import java.security.spec.*; import java.security.spec.*;
...@@ -201,7 +202,7 @@ final class P11Cipher extends CipherSpi { ...@@ -201,7 +202,7 @@ final class P11Cipher extends CipherSpi {
} }
private int parseMode(String mode) throws NoSuchAlgorithmException { private int parseMode(String mode) throws NoSuchAlgorithmException {
mode = mode.toUpperCase(); mode = mode.toUpperCase(Locale.ENGLISH);
int result; int result;
if (mode.equals("ECB")) { if (mode.equals("ECB")) {
result = MODE_ECB; result = MODE_ECB;
...@@ -222,7 +223,7 @@ final class P11Cipher extends CipherSpi { ...@@ -222,7 +223,7 @@ final class P11Cipher extends CipherSpi {
throws NoSuchPaddingException { throws NoSuchPaddingException {
paddingObj = null; paddingObj = null;
padBuffer = null; padBuffer = null;
padding = padding.toUpperCase(); padding = padding.toUpperCase(Locale.ENGLISH);
if (padding.equals("NOPADDING")) { if (padding.equals("NOPADDING")) {
paddingType = PAD_NONE; paddingType = PAD_NONE;
} else if (padding.equals("PKCS5PADDING")) { } else if (padding.equals("PKCS5PADDING")) {
......
...@@ -29,6 +29,8 @@ import java.security.*; ...@@ -29,6 +29,8 @@ import java.security.*;
import java.security.spec.AlgorithmParameterSpec; import java.security.spec.AlgorithmParameterSpec;
import java.security.spec.*; import java.security.spec.*;
import java.util.Locale;
import javax.crypto.*; import javax.crypto.*;
import javax.crypto.spec.*; import javax.crypto.spec.*;
...@@ -110,7 +112,7 @@ final class P11RSACipher extends CipherSpi { ...@@ -110,7 +112,7 @@ final class P11RSACipher extends CipherSpi {
protected void engineSetPadding(String padding) protected void engineSetPadding(String padding)
throws NoSuchPaddingException { throws NoSuchPaddingException {
String lowerPadding = padding.toLowerCase(); String lowerPadding = padding.toLowerCase(Locale.ENGLISH);
if (lowerPadding.equals("pkcs1Padding")) { if (lowerPadding.equals("pkcs1Padding")) {
// empty // empty
} else { } else {
......
/* /*
* Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2006, 2010 Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -52,6 +52,7 @@ import java.util.ArrayList; ...@@ -52,6 +52,7 @@ import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Locale;
import sun.security.x509.AccessDescription; import sun.security.x509.AccessDescription;
import sun.security.x509.GeneralNameInterface; import sun.security.x509.GeneralNameInterface;
import sun.security.x509.URIName; import sun.security.x509.URIName;
...@@ -162,7 +163,7 @@ class URICertStore extends CertStoreSpi { ...@@ -162,7 +163,7 @@ class URICertStore extends CertStoreSpi {
} }
this.uri = ((URICertStoreParameters) params).uri; this.uri = ((URICertStoreParameters) params).uri;
// if ldap URI, use an LDAPCertStore to fetch certs and CRLs // if ldap URI, use an LDAPCertStore to fetch certs and CRLs
if (uri.getScheme().toLowerCase().equals("ldap")) { if (uri.getScheme().toLowerCase(Locale.ENGLISH).equals("ldap")) {
if (LDAP.helper() == null) if (LDAP.helper() == null)
throw new NoSuchAlgorithmException("LDAP not present"); throw new NoSuchAlgorithmException("LDAP not present");
ldap = true; ldap = true;
......
/* /*
* Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -28,6 +28,7 @@ package sun.security.util; ...@@ -28,6 +28,7 @@ package sun.security.util;
import java.math.BigInteger; import java.math.BigInteger;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.Locale;
/** /**
* A utility class for debuging. * A utility class for debuging.
...@@ -262,7 +263,7 @@ public class Debug { ...@@ -262,7 +263,7 @@ public class Debug {
source = left; source = left;
// convert the rest to lower-case characters // convert the rest to lower-case characters
target.append(source.toString().toLowerCase()); target.append(source.toString().toLowerCase(Locale.ENGLISH));
return target.toString(); return target.toString();
} }
......
/* /*
* Copyright (c) 1996, 2009, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -25,17 +25,16 @@ ...@@ -25,17 +25,16 @@
package sun.security.util; package sun.security.util;
import java.io.FilterOutputStream;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.io.IOException; import java.io.IOException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.TimeZone; import java.util.TimeZone;
import java.util.Vector;
import java.util.Comparator; import java.util.Comparator;
import java.util.Arrays; import java.util.Arrays;
import java.math.BigInteger; import java.math.BigInteger;
import java.util.Locale;
/** /**
...@@ -501,7 +500,7 @@ extends ByteArrayOutputStream implements DerEncoder { ...@@ -501,7 +500,7 @@ extends ByteArrayOutputStream implements DerEncoder {
pattern = "yyyyMMddHHmmss'Z'"; pattern = "yyyyMMddHHmmss'Z'";
} }
SimpleDateFormat sdf = new SimpleDateFormat(pattern); SimpleDateFormat sdf = new SimpleDateFormat(pattern, Locale.US);
sdf.setTimeZone(tz); sdf.setTimeZone(tz);
byte[] time = (sdf.format(d)).getBytes("ISO-8859-1"); byte[] time = (sdf.format(d)).getBytes("ISO-8859-1");
......
/* /*
* Copyright (c) 1996, 2008, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -1227,7 +1227,7 @@ class AVAKeyword { ...@@ -1227,7 +1227,7 @@ class AVAKeyword {
(String keyword, int standard, Map<String, String> extraKeywordMap) (String keyword, int standard, Map<String, String> extraKeywordMap)
throws IOException { throws IOException {
keyword = keyword.toUpperCase(); keyword = keyword.toUpperCase(Locale.ENGLISH);
if (standard == AVA.RFC2253) { if (standard == AVA.RFC2253) {
if (keyword.startsWith(" ") || keyword.endsWith(" ")) { if (keyword.startsWith(" ") || keyword.endsWith(" ")) {
throw new IOException("Invalid leading or trailing space " + throw new IOException("Invalid leading or trailing space " +
......
/* /*
* Copyright (c) 1996, 2009, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -553,9 +553,10 @@ public class AlgorithmId implements Serializable, DerEncoder { ...@@ -553,9 +553,10 @@ public class AlgorithmId implements Serializable, DerEncoder {
for (Enumeration<Object> enum_ = provs[i].keys(); for (Enumeration<Object> enum_ = provs[i].keys();
enum_.hasMoreElements(); ) { enum_.hasMoreElements(); ) {
String alias = (String)enum_.nextElement(); String alias = (String)enum_.nextElement();
String upperCaseAlias = alias.toUpperCase(Locale.ENGLISH);
int index; int index;
if (alias.toUpperCase().startsWith("ALG.ALIAS") && if (upperCaseAlias.startsWith("ALG.ALIAS") &&
(index=alias.toUpperCase().indexOf("OID.", 0)) != -1) { (index=upperCaseAlias.indexOf("OID.", 0)) != -1) {
index += "OID.".length(); index += "OID.".length();
if (index == alias.length()) { if (index == alias.length()) {
// invalid alias entry // invalid alias entry
...@@ -565,19 +566,26 @@ public class AlgorithmId implements Serializable, DerEncoder { ...@@ -565,19 +566,26 @@ public class AlgorithmId implements Serializable, DerEncoder {
oidTable = new HashMap<String,ObjectIdentifier>(); oidTable = new HashMap<String,ObjectIdentifier>();
} }
oidString = alias.substring(index); oidString = alias.substring(index);
String stdAlgName String stdAlgName = provs[i].getProperty(alias);
= provs[i].getProperty(alias).toUpperCase(); if (stdAlgName != null) {
if (oidTable.get(stdAlgName) == null) { stdAlgName = stdAlgName.toUpperCase(Locale.ENGLISH);
}
if (stdAlgName != null &&
oidTable.get(stdAlgName) == null) {
oidTable.put(stdAlgName, oidTable.put(stdAlgName,
new ObjectIdentifier(oidString)); new ObjectIdentifier(oidString));
} }
} }
} }
} }
if (oidTable == null) {
oidTable = new HashMap<String,ObjectIdentifier>(1);
}
initOidTable = true; initOidTable = true;
} }
return oidTable.get(name.toUpperCase()); return oidTable.get(name.toUpperCase(Locale.ENGLISH));
} }
private static ObjectIdentifier oid(int ... values) { private static ObjectIdentifier oid(int ... values) {
......
/* /*
* Copyright (c) 1997, 2000, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
package sun.security.x509; package sun.security.x509;
import java.io.IOException; import java.io.IOException;
import java.util.Locale;
import sun.security.util.*; import sun.security.util.*;
...@@ -198,8 +199,9 @@ public class DNSName implements GeneralNameInterface { ...@@ -198,8 +199,9 @@ public class DNSName implements GeneralNameInterface {
else if (inputName.getType() != NAME_DNS) else if (inputName.getType() != NAME_DNS)
constraintType = NAME_DIFF_TYPE; constraintType = NAME_DIFF_TYPE;
else { else {
String inName = (((DNSName)inputName).getName()).toLowerCase(); String inName =
String thisName = name.toLowerCase(); (((DNSName)inputName).getName()).toLowerCase(Locale.ENGLISH);
String thisName = name.toLowerCase(Locale.ENGLISH);
if (inName.equals(thisName)) if (inName.equals(thisName))
constraintType = NAME_MATCH; constraintType = NAME_MATCH;
else if (thisName.endsWith(inName)) { else if (thisName.endsWith(inName)) {
......
/* /*
* Copyright (c) 1997, 2000, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
package sun.security.x509; package sun.security.x509;
import java.io.IOException; import java.io.IOException;
import java.util.Locale;
import sun.security.util.*; import sun.security.util.*;
...@@ -187,8 +188,9 @@ public class RFC822Name implements GeneralNameInterface ...@@ -187,8 +188,9 @@ public class RFC822Name implements GeneralNameInterface
constraintType = NAME_DIFF_TYPE; constraintType = NAME_DIFF_TYPE;
} else { } else {
//RFC2459 specifies that case is not significant in RFC822Names //RFC2459 specifies that case is not significant in RFC822Names
String inName = (((RFC822Name)inputName).getName()).toLowerCase(); String inName =
String thisName = name.toLowerCase(); (((RFC822Name)inputName).getName()).toLowerCase(Locale.ENGLISH);
String thisName = name.toLowerCase(Locale.ENGLISH);
if (inName.equals(thisName)) { if (inName.equals(thisName)) {
constraintType = NAME_MATCH; constraintType = NAME_MATCH;
} else if (thisName.endsWith(inName)) { } else if (thisName.endsWith(inName)) {
......
/* /*
* Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -56,8 +56,11 @@ public class ResolverConfigurationImpl ...@@ -56,8 +56,11 @@ public class ResolverConfigurationImpl
// Parse /etc/resolv.conf to get the values for a particular // Parse /etc/resolv.conf to get the values for a particular
// keyword. // keyword.
// //
private LinkedList resolvconf(String keyword, int maxperkeyword, int maxkeywords) { private LinkedList<String> resolvconf(String keyword,
LinkedList ll = new LinkedList(); int maxperkeyword,
int maxkeywords)
{
LinkedList<String> ll = new LinkedList<>();
try { try {
BufferedReader in = BufferedReader in =
...@@ -99,8 +102,8 @@ public class ResolverConfigurationImpl ...@@ -99,8 +102,8 @@ public class ResolverConfigurationImpl
return ll; return ll;
} }
private LinkedList searchlist; private LinkedList<String> searchlist;
private LinkedList nameservers; private LinkedList<String> nameservers;
// Load DNS configuration from OS // Load DNS configuration from OS
...@@ -118,9 +121,9 @@ public class ResolverConfigurationImpl ...@@ -118,9 +121,9 @@ public class ResolverConfigurationImpl
// get the name servers from /etc/resolv.conf // get the name servers from /etc/resolv.conf
nameservers = nameservers =
(LinkedList)java.security.AccessController.doPrivileged( java.security.AccessController.doPrivileged(
new java.security.PrivilegedAction() { new java.security.PrivilegedAction<LinkedList<String>>() {
public Object run() { public LinkedList<String> run() {
// typically MAXNS is 3 but we've picked 5 here // typically MAXNS is 3 but we've picked 5 here
// to allow for additional servers if required. // to allow for additional servers if required.
return resolvconf("nameserver", 1, 5); return resolvconf("nameserver", 1, 5);
...@@ -137,15 +140,15 @@ public class ResolverConfigurationImpl ...@@ -137,15 +140,15 @@ public class ResolverConfigurationImpl
// obtain search list or local domain // obtain search list or local domain
private LinkedList getSearchList() { private LinkedList<String> getSearchList() {
LinkedList sl; LinkedList<String> sl;
// first try the search keyword in /etc/resolv.conf // first try the search keyword in /etc/resolv.conf
sl = (LinkedList)java.security.AccessController.doPrivileged( sl = java.security.AccessController.doPrivileged(
new java.security.PrivilegedAction() { new java.security.PrivilegedAction<LinkedList<String>>() {
public Object run() { public LinkedList<String> run() {
LinkedList ll; LinkedList ll;
// first try search keyword (max 6 domains) // first try search keyword (max 6 domains)
...@@ -177,10 +180,10 @@ public class ResolverConfigurationImpl ...@@ -177,10 +180,10 @@ public class ResolverConfigurationImpl
// try domain keyword in /etc/resolv.conf // try domain keyword in /etc/resolv.conf
sl = (LinkedList)java.security.AccessController.doPrivileged( sl = java.security.AccessController.doPrivileged(
new java.security.PrivilegedAction() { new java.security.PrivilegedAction<LinkedList<String>>() {
public Object run() { public LinkedList<String> run() {
LinkedList ll; LinkedList<String> ll;
ll = resolvconf("domain", 1, 1); ll = resolvconf("domain", 1, 1);
if (ll.size() > 0) { if (ll.size() > 0) {
...@@ -197,7 +200,7 @@ public class ResolverConfigurationImpl ...@@ -197,7 +200,7 @@ public class ResolverConfigurationImpl
// no local domain so try fallback (RPC) domain or // no local domain so try fallback (RPC) domain or
// hostname // hostname
sl = new LinkedList(); sl = new LinkedList<>();
String domain = fallbackDomain0(); String domain = fallbackDomain0();
if (domain != null && domain.length() > 0) { if (domain != null && domain.length() > 0) {
sl.add(domain); sl.add(domain);
...@@ -213,7 +216,7 @@ public class ResolverConfigurationImpl ...@@ -213,7 +216,7 @@ public class ResolverConfigurationImpl
opts = new OptionsImpl(); opts = new OptionsImpl();
} }
public List searchlist() { public List<String> searchlist() {
synchronized (lock) { synchronized (lock) {
loadConfig(); loadConfig();
...@@ -222,7 +225,7 @@ public class ResolverConfigurationImpl ...@@ -222,7 +225,7 @@ public class ResolverConfigurationImpl
} }
} }
public List nameservers() { public List<String> nameservers() {
synchronized (lock) { synchronized (lock) {
loadConfig(); loadConfig();
......
...@@ -131,7 +131,7 @@ static struct sockaddr *getBroadcast(JNIEnv *env, int sock, const char *name, s ...@@ -131,7 +131,7 @@ static struct sockaddr *getBroadcast(JNIEnv *env, int sock, const char *name, s
static short getSubnet(JNIEnv *env, int sock, const char *ifname); static short getSubnet(JNIEnv *env, int sock, const char *ifname);
static int getIndex(int sock, const char *ifname); static int getIndex(int sock, const char *ifname);
static int getFlags(JNIEnv *env, int sock, const char *ifname); static int getFlags(int sock, const char *ifname);
static int getMacAddress(JNIEnv *env, int sock, const char* ifname, const struct in_addr* addr, unsigned char *buf); static int getMacAddress(JNIEnv *env, int sock, const char* ifname, const struct in_addr* addr, unsigned char *buf);
static int getMTU(JNIEnv *env, int sock, const char *ifname); static int getMTU(JNIEnv *env, int sock, const char *ifname);
...@@ -550,7 +550,7 @@ static int getFlags0(JNIEnv *env, jstring name) { ...@@ -550,7 +550,7 @@ static int getFlags0(JNIEnv *env, jstring name) {
name_utf = (*env)->GetStringUTFChars(env, name, &isCopy); name_utf = (*env)->GetStringUTFChars(env, name, &isCopy);
ret = getFlags(env, sock, name_utf); ret = getFlags(sock, name_utf);
close(sock); close(sock);
(*env)->ReleaseStringUTFChars(env, name, name_utf); (*env)->ReleaseStringUTFChars(env, name, name_utf);
...@@ -753,19 +753,27 @@ static netif *enumInterfaces(JNIEnv *env) { ...@@ -753,19 +753,27 @@ static netif *enumInterfaces(JNIEnv *env) {
* If IPv6 is available then enumerate IPv6 addresses. * If IPv6 is available then enumerate IPv6 addresses.
*/ */
#ifdef AF_INET6 #ifdef AF_INET6
sock = openSocket(env, AF_INET6);
if (sock < 0 && (*env)->ExceptionOccurred(env)) {
freeif(ifs);
return NULL;
}
ifs = enumIPv6Interfaces(env, sock, ifs); /* User can disable ipv6 expicitly by -Djava.net.preferIPv4Stack=true,
close(sock); * so we have to call ipv6_available()
*/
if (ipv6_available()) {
if ((*env)->ExceptionOccurred(env)) { sock = openSocket(env, AF_INET6);
freeif(ifs); if (sock < 0 && (*env)->ExceptionOccurred(env)) {
return NULL; freeif(ifs);
} return NULL;
}
ifs = enumIPv6Interfaces(env, sock, ifs);
close(sock);
if ((*env)->ExceptionOccurred(env)) {
freeif(ifs);
return NULL;
}
}
#endif #endif
return ifs; return ifs;
...@@ -877,7 +885,7 @@ netif *addif(JNIEnv *env, int sock, const char * if_name, netif *ifs, struct soc ...@@ -877,7 +885,7 @@ netif *addif(JNIEnv *env, int sock, const char * if_name, netif *ifs, struct soc
* the 'parent' interface with the new records. * the 'parent' interface with the new records.
*/ */
*name_colonP = 0; *name_colonP = 0;
if (getFlags(env,sock,name) < 0) { if (getFlags(sock, name) < 0) {
// failed to access parent interface do not create parent. // failed to access parent interface do not create parent.
// We are a virtual interface with no parent. // We are a virtual interface with no parent.
isVirtual = 1; isVirtual = 1;
...@@ -1249,7 +1257,7 @@ static int getMTU(JNIEnv *env, int sock, const char *ifname) { ...@@ -1249,7 +1257,7 @@ static int getMTU(JNIEnv *env, int sock, const char *ifname) {
return if2.ifr_mtu; return if2.ifr_mtu;
} }
static int getFlags(JNIEnv *env, int sock, const char *ifname) { static int getFlags(int sock, const char *ifname) {
struct ifreq if2; struct ifreq if2;
int ret = -1; int ret = -1;
...@@ -1625,13 +1633,12 @@ static int getMTU(JNIEnv *env, int sock, const char *ifname) { ...@@ -1625,13 +1633,12 @@ static int getMTU(JNIEnv *env, int sock, const char *ifname) {
} }
static int getFlags(JNIEnv *env, int sock, const char *ifname) { static int getFlags(int sock, const char *ifname) {
struct lifreq lifr; struct lifreq lifr;
memset((caddr_t)&lifr, 0, sizeof(lifr)); memset((caddr_t)&lifr, 0, sizeof(lifr));
strcpy((caddr_t)&(lifr.lifr_name), ifname); strcpy((caddr_t)&(lifr.lifr_name), ifname);
if (ioctl(sock, SIOCGLIFFLAGS, (char *)&lifr) < 0) { if (ioctl(sock, SIOCGLIFFLAGS, (char *)&lifr) < 0) {
NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGLIFFLAGS failed");
return -1; return -1;
} }
......
...@@ -32,14 +32,11 @@ ...@@ -32,14 +32,11 @@
#include <stddef.h> #include <stddef.h>
#include <stdlib.h> #include <stdlib.h>
JNIEXPORT jboolean JNICALL JNIEXPORT jboolean JNICALL
Java_java_nio_MappedByteBuffer_isLoaded0(JNIEnv *env, jobject obj, Java_java_nio_MappedByteBuffer_isLoaded0(JNIEnv *env, jobject obj, jlong address,
jlong address, jlong len) jlong len, jint numPages)
{ {
jboolean loaded = JNI_TRUE; jboolean loaded = JNI_TRUE;
jint pageSize = sysconf(_SC_PAGESIZE);
jint numPages = (len + pageSize - 1) / pageSize;
int result = 0; int result = 0;
int i = 0; int i = 0;
void *a = (void *) jlong_to_ptr(address); void *a = (void *) jlong_to_ptr(address);
...@@ -55,9 +52,9 @@ Java_java_nio_MappedByteBuffer_isLoaded0(JNIEnv *env, jobject obj, ...@@ -55,9 +52,9 @@ Java_java_nio_MappedByteBuffer_isLoaded0(JNIEnv *env, jobject obj,
} }
result = mincore(a, (size_t)len, vec); result = mincore(a, (size_t)len, vec);
if (result != 0) { if (result == -1) {
free(vec);
JNU_ThrowIOExceptionWithLastError(env, "mincore failed"); JNU_ThrowIOExceptionWithLastError(env, "mincore failed");
free(vec);
return JNI_FALSE; return JNI_FALSE;
} }
...@@ -72,23 +69,15 @@ Java_java_nio_MappedByteBuffer_isLoaded0(JNIEnv *env, jobject obj, ...@@ -72,23 +69,15 @@ Java_java_nio_MappedByteBuffer_isLoaded0(JNIEnv *env, jobject obj,
} }
JNIEXPORT jint JNICALL JNIEXPORT void JNICALL
Java_java_nio_MappedByteBuffer_load0(JNIEnv *env, jobject obj, jlong address, Java_java_nio_MappedByteBuffer_load0(JNIEnv *env, jobject obj, jlong address,
jlong len, jint pageSize) jlong len)
{ {
int pageIncrement = pageSize / sizeof(int); char *a = (char *)jlong_to_ptr(address);
int numPages = (len + pageSize - 1) / pageSize; int result = madvise((caddr_t)a, (size_t)len, MADV_WILLNEED);
int *ptr = (int *)jlong_to_ptr(address); if (result == -1) {
int i = 0; JNU_ThrowIOExceptionWithLastError(env, "madvise failed");
int j = 0;
int result = madvise((caddr_t)ptr, len, MADV_WILLNEED);
/* touch every page */
for (i=0; i<numPages; i++) {
j += *((volatile int *)ptr);
ptr += pageIncrement;
} }
return j;
} }
...@@ -96,13 +85,9 @@ JNIEXPORT void JNICALL ...@@ -96,13 +85,9 @@ JNIEXPORT void JNICALL
Java_java_nio_MappedByteBuffer_force0(JNIEnv *env, jobject obj, jlong address, Java_java_nio_MappedByteBuffer_force0(JNIEnv *env, jobject obj, jlong address,
jlong len) jlong len)
{ {
jlong pageSize = sysconf(_SC_PAGESIZE); void* a = (void *)jlong_to_ptr(address);
unsigned long lAddress = address; int result = msync(a, (size_t)len, MS_SYNC);
if (result == -1) {
jlong offset = lAddress % pageSize;
void *a = (void *) jlong_to_ptr(lAddress - offset);
int result = msync(a, (size_t)(len + offset), MS_SYNC);
if (result != 0) {
JNU_ThrowIOExceptionWithLastError(env, "msync failed"); JNU_ThrowIOExceptionWithLastError(env, "msync failed");
} }
} }
...@@ -84,3 +84,11 @@ Java_sun_nio_ch_SocketChannelImpl_checkConnect(JNIEnv *env, jobject this, ...@@ -84,3 +84,11 @@ Java_sun_nio_ch_SocketChannelImpl_checkConnect(JNIEnv *env, jobject this,
} }
return 0; return 0;
} }
JNIEXPORT jint JNICALL
Java_sun_nio_ch_SocketChannelImpl_sendOutOfBandData(JNIEnv* env, jclass this,
jobject fdo, jbyte b)
{
int n = send(fdval(env, fdo), (const void*)&b, 1, MSG_OOB);
return convertReturnVal(env, n, JNI_FALSE);
}
/* /*
* Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -28,7 +28,6 @@ package sun.net.dns; ...@@ -28,7 +28,6 @@ package sun.net.dns;
import java.util.List; import java.util.List;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import java.io.IOException;
/* /*
* An implementation of sun.net.ResolverConfiguration for Windows. * An implementation of sun.net.ResolverConfiguration for Windows.
...@@ -63,8 +62,8 @@ public class ResolverConfigurationImpl ...@@ -63,8 +62,8 @@ public class ResolverConfigurationImpl
// Parse string that consists of token delimited by space or commas // Parse string that consists of token delimited by space or commas
// and return LinkedHashMap // and return LinkedHashMap
private LinkedList stringToList(String str) { private LinkedList<String> stringToList(String str) {
LinkedList ll = new LinkedList(); LinkedList<String> ll = new LinkedList<>();
// comma and space are valid delimites // comma and space are valid delimites
StringTokenizer st = new StringTokenizer(str, ", "); StringTokenizer st = new StringTokenizer(str, ", ");
...@@ -112,7 +111,7 @@ public class ResolverConfigurationImpl ...@@ -112,7 +111,7 @@ public class ResolverConfigurationImpl
opts = new OptionsImpl(); opts = new OptionsImpl();
} }
public List searchlist() { public List<String> searchlist() {
synchronized (lock) { synchronized (lock) {
loadConfig(); loadConfig();
...@@ -121,7 +120,7 @@ public class ResolverConfigurationImpl ...@@ -121,7 +120,7 @@ public class ResolverConfigurationImpl
} }
} }
public List nameservers() { public List<String> nameservers() {
synchronized (lock) { synchronized (lock) {
loadConfig(); loadConfig();
......
...@@ -31,8 +31,8 @@ ...@@ -31,8 +31,8 @@
#include <stdlib.h> #include <stdlib.h>
JNIEXPORT jboolean JNICALL JNIEXPORT jboolean JNICALL
Java_java_nio_MappedByteBuffer_isLoaded0(JNIEnv *env, jobject obj, Java_java_nio_MappedByteBuffer_isLoaded0(JNIEnv *env, jobject obj, jlong address,
jlong address, jlong len) jlong len, jint numPages)
{ {
jboolean loaded = JNI_FALSE; jboolean loaded = JNI_FALSE;
/* Information not available? /* Information not available?
...@@ -43,22 +43,11 @@ Java_java_nio_MappedByteBuffer_isLoaded0(JNIEnv *env, jobject obj, ...@@ -43,22 +43,11 @@ Java_java_nio_MappedByteBuffer_isLoaded0(JNIEnv *env, jobject obj,
return loaded; return loaded;
} }
JNIEXPORT jint JNICALL JNIEXPORT void JNICALL
Java_java_nio_MappedByteBuffer_load0(JNIEnv *env, jobject obj, jlong address, Java_java_nio_MappedByteBuffer_load0(JNIEnv *env, jobject obj, jlong address,
jlong len, jint pageSize) jlong len)
{ {
int *ptr = (int *) jlong_to_ptr(address); // no madvise available
int pageIncrement = pageSize / sizeof(int);
jlong numPages = (len + pageSize - 1) / pageSize;
int i = 0;
int j = 0;
/* touch every page */
for (i=0; i<numPages; i++) {
j += *((volatile int *)ptr);
ptr += pageIncrement;
}
return j;
} }
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
......
...@@ -139,3 +139,16 @@ Java_sun_nio_ch_SocketChannelImpl_checkConnect(JNIEnv *env, jobject this, ...@@ -139,3 +139,16 @@ Java_sun_nio_ch_SocketChannelImpl_checkConnect(JNIEnv *env, jobject this,
return 0; return 0;
} }
JNIEXPORT jint JNICALL
Java_sun_nio_ch_SocketChannelImpl_sendOutOfBandData(JNIEnv* env, jclass this,
jobject fdo, jbyte b)
{
int n = send(fdval(env, fdo), (const char*)&b, 1, MSG_OOB);
if (n == SOCKET_ERROR) {
handleSocketError(env, WSAGetLastError());
return IOS_THROWN;
} else {
return n;
}
}
...@@ -310,24 +310,32 @@ typedef JLocalRef<jclass> JLClass; ...@@ -310,24 +310,32 @@ typedef JLocalRef<jclass> JLClass;
* Class to encapsulate the extraction of the java string contents * Class to encapsulate the extraction of the java string contents
* into a buffer and the cleanup of the buffer * into a buffer and the cleanup of the buffer
*/ */
class JavaStringBuffer class JavaStringBuffer
{ {
protected: protected:
LPWSTR m_pStr; LPWSTR m_pStr;
jsize m_dwSize; jsize m_dwSize;
LPWSTR getNonEmptyString() {
return (NULL==m_pStr)
? L""
: m_pStr;
}
public: public:
JavaStringBuffer(jsize cbTCharCount) { JavaStringBuffer(jsize cbTCharCount) {
m_dwSize = cbTCharCount; m_dwSize = cbTCharCount;
m_pStr = (LPWSTR)safe_Malloc( (m_dwSize+1)*sizeof(WCHAR) ); m_pStr = (0 == m_dwSize)
? NULL
: (LPWSTR)safe_Malloc( (m_dwSize+1)*sizeof(WCHAR) );
} }
JavaStringBuffer(JNIEnv *env, jstring text) { JavaStringBuffer(JNIEnv *env, jstring text) {
if (NULL == text) { m_dwSize = (NULL == text)
m_pStr = L""; ? 0
m_dwSize = 0; : env->GetStringLength(text);
if (0 == m_dwSize) {
m_pStr = NULL;
} else { } else {
m_dwSize = env->GetStringLength(text);
m_pStr = (LPWSTR)safe_Malloc( (m_dwSize+1)*sizeof(WCHAR) ); m_pStr = (LPWSTR)safe_Malloc( (m_dwSize+1)*sizeof(WCHAR) );
env->GetStringRegion(text, 0, m_dwSize, reinterpret_cast<jchar *>(m_pStr)); env->GetStringRegion(text, 0, m_dwSize, reinterpret_cast<jchar *>(m_pStr));
m_pStr[m_dwSize] = 0; m_pStr[m_dwSize] = 0;
...@@ -341,12 +349,16 @@ public: ...@@ -341,12 +349,16 @@ public:
void Resize(jsize cbTCharCount) { void Resize(jsize cbTCharCount) {
m_dwSize = cbTCharCount; m_dwSize = cbTCharCount;
//It is ok to have non-null terminated string here.
//The function is used only for space reservation in staff buffer for
//followed data copying process. And that is the reason why we ignore
//the special case m_dwSize==0 here.
m_pStr = (LPWSTR)safe_Realloc(m_pStr, (m_dwSize+1)*sizeof(WCHAR) ); m_pStr = (LPWSTR)safe_Realloc(m_pStr, (m_dwSize+1)*sizeof(WCHAR) );
} }
//we are in UNICODE now, so LPWSTR:=:LPTSTR //we are in UNICODE now, so LPWSTR:=:LPTSTR
operator LPWSTR() { return m_pStr; } operator LPWSTR() { return getNonEmptyString(); }
operator LPARAM() { return (LPARAM)m_pStr; } operator LPARAM() { return (LPARAM)getNonEmptyString(); }
void *GetData() { return (void *)m_pStr; } void *GetData() { return (void *)getNonEmptyString(); }
jsize GetSize() { return m_dwSize; } jsize GetSize() { return m_dwSize; }
}; };
......
...@@ -366,139 +366,6 @@ javax/print/attribute/MediaMappingsTest.java generic-all ...@@ -366,139 +366,6 @@ javax/print/attribute/MediaMappingsTest.java generic-all
# jdk_net # jdk_net
# Suspect many of these tests auffer from using fixed ports, no concrete
# evidence.
# Times out on Windows X64
sun/net/www/http/KeepAliveStream/KeepAliveStreamCloseWithWrongContentLength.java generic-all
# Dies on Solaris 10 sparc and sparcv9, Linux -ea -esa with
# Interrupted or IO exception, maybe writing to non-unique named file?
com/sun/net/httpserver/bugs/B6373555.java generic-all
# Fails on OpenSolaris, times out
java/net/MulticastSocket/SetOutgoingIf.java generic-all
# Timed out on Solaris 10 X86.
com/sun/net/httpserver/Test3.java generic-all
# Exception in test on windows
com/sun/net/httpserver/bugs/B6373555.java windows-all
# One of these pollutes the samevm on Linux, too many open files, kills jtreg
com/sun/net/httpserver/bugs/B6339483.java generic-all
com/sun/net/httpserver/bugs/B6341616.java generic-all
# Suspects in cascading samevm problem, solaris 11 i586 (needs othervm?)
# Suspect use of setHttps*()?
com/sun/net/httpserver/SelCacheTest.java generic-all
com/sun/net/httpserver/Test1.java generic-all
com/sun/net/httpserver/Test12.java generic-all
com/sun/net/httpserver/Test13.java generic-all
com/sun/net/httpserver/Test6a.java generic-all
com/sun/net/httpserver/Test7a.java generic-all
com/sun/net/httpserver/Test8a.java generic-all
com/sun/net/httpserver/Test9.java generic-all
com/sun/net/httpserver/Test9a.java generic-all
# 10,000 connections, fails on Linux and makes tests&jtreg fail with samevm
com/sun/net/httpserver/bugs/B6361557.java generic-all
# Address already in use with samevm? Always? Solaris sparc, probably ports
java/net/Authenticator/B4933582.sh generic-all
java/net/DatagramSocket/SendSize.java generic-all
# Solaris 11: exception wrong address???
java/net/Inet6Address/B6558853.java generic-all
# Not closing stream on file i6a1, windows samevm problem
java/net/Inet6Address/serialize/Serialize.java generic-all
# Linux x64 fails "network unreachable"?
java/net/ipv6tests/TcpTest.java generic-all
# Linux i586, fails with unexpected output
java/net/MulticastSocket/NoLoopbackPackets.java linux-i586
# Address already in use
java/net/DatagramSocket/DatagramTimeout.java generic-all
# Fails on windows, takes too long and fails
# Solaris 10 sparcv9, samevm, java.lang.Exception: Takes too long. Dead lock
java/net/Socket/DeadlockTest.java generic-all
# Linux i586 address already in use or connection error, samevm issues
java/net/Socket/AccurateTimeout.java generic-all
java/net/Socket/asyncClose/BrokenPipe.java generic-all
java/net/Socket/CloseAvailable.java generic-all
# Linux X64 address already in use, samevm issues
java/net/Socket/LingerTest.java generic-all
java/net/Socket/LinkLocal.java generic-all
java/net/Socket/NullHost.java generic-all
java/net/Socket/ProxyCons.java generic-all
java/net/Socket/ReadTimeout.java generic-all
# Linux X64 address already in use, samevm issues
java/net/Socket/SetReceiveBufferSize.java generic-all
# Linux i586 address already in use or connection error, samevm issues
java/net/Socket/setReuseAddress/Basic.java generic-all
java/net/Socket/setReuseAddress/Restart.java generic-all
# Linux X64 address already in use, samevm issues
java/net/Socket/SetSoLinger.java generic-all
# Address already in use, windows samevm
java/net/Socket/Timeout.java generic-all
# Linux X64 address already in use, samevm issues
java/net/Socket/ShutdownBoth.java generic-all
java/net/Socket/SoTimeout.java generic-all
java/net/Socket/TestClose.java generic-all
java/net/Socket/UrgentDataTest.java generic-all
java/net/SocketInputStream/SocketClosedException.java generic-all
java/net/SocketInputStream/SocketTimeout.java generic-all
# Linux i586, address already in use or timeout, samevm issues
java/net/URLConnection/DisconnectAfterEOF.java generic-all
java/net/URLConnection/HandleContentTypeWithAttrs.java generic-all
java/net/URLConnection/Responses.java generic-all
java/net/URLConnection/TimeoutTest.java generic-all
java/net/URLConnection/ZeroContentLength.java generic-all
# Solaris 11 i586 fails with samevm, not sure why
java/net/ResponseCache/B6181108.java generic-all
java/net/ResponseCache/ResponseCacheTest.java generic-all
java/net/URL/GetContent.java generic-all
java/net/URLConnection/HttpContinueStackOverflow.java generic-all
java/net/URLConnection/Redirect307Test.java generic-all
java/net/URLConnection/RedirectLimit.java generic-all
java/net/URLConnection/ResendPostBody.java generic-all
java/net/URL/OpenStream.java generic-all
java/net/URLClassLoader/ClassLoad.java generic-all
java/net/URLConnection/SetIfModifiedSince.java generic-all
java/net/URLConnection/URLConnectionHeaders.java generic-all
# Linux i586 Connection refused or address already in use, samevm issues
sun/net/ftp/B6427768.java generic-all
sun/net/ftp/FtpGetContent.java generic-all
sun/net/ftp/FtpURL.java generic-all
# Failed on solaris 10 i586, Exception: should have gotten HttpRetryException?
sun/net/www/http/ChunkedOutputStream/Test.java generic-all
# Trouble cleaning up threads in samevm mode on solaris 11 i586
sun/net/www/http/HttpClient/ProxyTest.java generic-all
sun/net/www/http/ChunkedInputStream/ChunkedEncodingTest.java generic-all
sun/net/www/http/ChunkedInputStream/ChunkedEncodingWithProgressMonitorTest.java generic-all
sun/net/www/http/HttpClient/B6726695.java generic-all
sun/net/www/http/HttpClient/MultiThreadTest.java generic-all
sun/net/www/http/KeepAliveCache/KeepAliveTimerThread.java generic-all
# Connection refused, windows samevm
sun/net/www/protocol/http/DigestTest.java generic-all
############################################################################ ############################################################################
# jdk_io # jdk_io
......
#!/bin/sh #!/bin/sh
# #
# Copyright (c) 2002, 2009, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
...@@ -141,7 +141,10 @@ topPid=$$ ...@@ -141,7 +141,10 @@ topPid=$$
cleanup() cleanup()
{ {
if [ -r "$failFile" ] ; then if [ -r "$failFile" ] ; then
cat $failFile >& 2 ls -l "$failFile" >&2
echo "<cleanup:_begin_failFile_contents>" >&2
cat "$failFile" >&2
echo "<cleanup:_end_failFile_contents>" >&2
fi fi
# Kill all processes that have our special # Kill all processes that have our special
...@@ -337,6 +340,10 @@ EOF ...@@ -337,6 +340,10 @@ EOF
failFile=$tmpFileDir/testFailed failFile=$tmpFileDir/testFailed
debuggeepidFile=$tmpFileDir/debuggeepid debuggeepidFile=$tmpFileDir/debuggeepid
rm -f $failFile $debuggeepidFile rm -f $failFile $debuggeepidFile
if [ -f "$failFile" ]; then
echo "ERROR: unable to delete existing failFile:" >&2
ls -l "$failFile" >&2
fi
if [ -z "$pkg" ] ; then if [ -z "$pkg" ] ; then
pkgSlash= pkgSlash=
...@@ -524,6 +531,10 @@ cmd() ...@@ -524,6 +531,10 @@ cmd()
# See 6562090. Maybe there is a way that the exit # See 6562090. Maybe there is a way that the exit
# can cause jdb to not get the quit. # can cause jdb to not get the quit.
sleep 5 sleep 5
# The exit code value here doesn't matter since this function
# is called as part of a pipeline and it is not the last command
# in the pipeline.
exit 1 exit 1
fi fi
...@@ -938,6 +949,10 @@ waitForFinish() ...@@ -938,6 +949,10 @@ waitForFinish()
done done
if [ -r "$failFile" ] ; then if [ -r "$failFile" ] ; then
ls -l "$failFile" >&2
echo "<waitForFinish:_begin_failFile_contents>" >&2
cat "$failFile" >&2
echo "<waitForFinish:_end_failFile_contents>" >&2
exit 1 exit 1
fi fi
} }
...@@ -946,33 +961,45 @@ waitForFinish() ...@@ -946,33 +961,45 @@ waitForFinish()
# $3 is the number of lines to search (from the end) # $3 is the number of lines to search (from the end)
grepForString() grepForString()
{ {
# See bug 6220903. Sometimes the jdb '> ' prompt chars
# get inserted into the string we are searching for
# so ignore those chars.
if [ -z "$3" ] ; then if [ -z "$3" ] ; then
theCmd=cat theCmd=cat
else else
theCmd="tail -$3" theCmd="tail -$3"
fi fi
case "$2" in case "$2" in
*\>*) *\>*)
# Target string contains a > so we better # Target string contains a '>' so we better not ignore it
# not ignore it
$theCmd $1 | $grep -s "$2" > $devnull 2>&1 $theCmd $1 | $grep -s "$2" > $devnull 2>&1
return $? stat="$?"
;; ;;
*)
# Target string does not contain a '>'.
# NOTE: if $1 does not end with a new line, piping it to sed
# doesn't include the chars on the last line. Detect this
# case, and add a new line.
theFile="$1"
if [ `tail -1 "$theFile" | wc -l | sed -e 's@ @@g'` = 0 ] ; then
# The target file doesn't end with a new line so we have
# add one to a copy of the target file so the sed command
# below can filter that last line.
cp "$theFile" "$theFile.tmp"
theFile="$theFile.tmp"
echo >> "$theFile"
fi
# See bug 6220903. Sometimes the jdb prompt chars ('> ') can
# get interleaved in the target file which can keep us from
# matching the target string.
$theCmd "$theFile" | sed -e 's@> @@g' -e 's@>@@g' \
| $grep -s "$2" > $devnull 2>&1
stat=$?
if [ "$theFile" != "$1" ]; then
# remove the copy of the target file
rm -f "$theFile"
fi
unset theFile
esac esac
# Target string does not contain a >.
# Ignore > and '> ' in the file.
# NOTE: if $1 does not end with a new line, piping it to sed doesn't include the
# chars on the last line. Detect this case, and add a new line.
cp $1 $1.tmp
if [ `tail -1 $1.tmp | wc -l | sed -e 's@ @@g'` = 0 ] ; then
echo >> $1.tmp
fi
$theCmd $1.tmp | sed -e 's@> @@g' -e 's@>@@g' | $grep -s "$2" > $devnull 2>&1
stat=$?
rm -f $1.tmp
return $stat return $stat
} }
...@@ -1037,6 +1064,11 @@ pass() ...@@ -1037,6 +1064,11 @@ pass()
echo echo
echo "--Done: test passed" echo "--Done: test passed"
exit 0 exit 0
else
ls -l "$failFile" >&2
echo "<pass:_begin_failFile_contents>" >&2
cat "$failFile" >&2
echo "<pass:_end_failFile_contents>" >&2
fi fi
} }
......
/*
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 6676075
* @summary RegistryContext (com.sun.jndi.url.rmi.rmiURLContext) coding problem
*/
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import com.sun.jndi.rmi.registry.*;
public class ContextWithNullProperties {
public static void main(String[] args) throws Exception {
// Create registry on port 1099 if one is not already running.
try {
LocateRegistry.createRegistry(1099);
} catch (RemoteException e) {
}
System.out.println("Connecting to the default Registry...");
// Connect to the default Registry.
// Pass null as the JNDI environment properties (see final argument)
RegistryContext ctx = new RegistryContext(null, -1, null);
}
}
...@@ -24,17 +24,15 @@ ...@@ -24,17 +24,15 @@
/** /**
* @test * @test
* @bug 6270015 * @bug 6270015
* @run main/othervm Test1
* @summary Light weight HTTP server * @summary Light weight HTTP server
*/ */
import com.sun.net.httpserver.*; import com.sun.net.httpserver.*;
import java.util.*;
import java.util.concurrent.*; import java.util.concurrent.*;
import java.io.*; import java.io.*;
import java.net.*; import java.net.*;
import java.security.*;
import java.security.cert.*;
import javax.net.ssl.*; import javax.net.ssl.*;
/* basic http/s connectivity test /* basic http/s connectivity test
......
...@@ -28,7 +28,6 @@ ...@@ -28,7 +28,6 @@
*/ */
import java.net.*; import java.net.*;
import java.util.*;
import java.util.concurrent.*; import java.util.concurrent.*;
import java.io.*; import java.io.*;
import com.sun.net.httpserver.*; import com.sun.net.httpserver.*;
...@@ -52,22 +51,25 @@ public class Test11 { ...@@ -52,22 +51,25 @@ public class Test11 {
public static void main (String[] args) throws Exception { public static void main (String[] args) throws Exception {
System.out.print ("Test 11: "); System.out.print ("Test 11: ");
HttpServer server = HttpServer.create (new InetSocketAddress(0), 0); HttpServer server = HttpServer.create(new InetSocketAddress(0), 0);
HttpContext ctx = server.createContext ( ExecutorService s = Executors.newCachedThreadPool();
"/foo/bar/", new Handler () try {
); HttpContext ctx = server.createContext (
ExecutorService s = Executors.newCachedThreadPool(); "/foo/bar/", new Handler ()
server.setExecutor (s); );
server.start (); s = Executors.newCachedThreadPool();
URL url = new URL ("http://localhost:" + server.getAddress().getPort()+ server.start ();
"/Foo/bar/test.html"); URL url = new URL ("http://localhost:" + server.getAddress().getPort()+
HttpURLConnection urlc = (HttpURLConnection)url.openConnection(); "/Foo/bar/test.html");
int r = urlc.getResponseCode(); HttpURLConnection urlc = (HttpURLConnection)url.openConnection();
System.out.println ("OK"); int r = urlc.getResponseCode();
s.shutdown(); if (r == 200) {
server.stop(5); throw new RuntimeException ("wrong response received");
if (r == 200) { }
throw new RuntimeException ("wrong response received"); System.out.println ("OK");
} finally {
s.shutdown();
server.stop(2);
} }
} }
} }
...@@ -24,17 +24,15 @@ ...@@ -24,17 +24,15 @@
/** /**
* @test * @test
* @bug 6270015 * @bug 6270015
* @run main/othervm Test12
* @summary Light weight HTTP server * @summary Light weight HTTP server
*/ */
import com.sun.net.httpserver.*; import com.sun.net.httpserver.*;
import java.util.*;
import java.util.concurrent.*; import java.util.concurrent.*;
import java.io.*; import java.io.*;
import java.net.*; import java.net.*;
import java.security.*;
import java.security.cert.*;
import javax.net.ssl.*; import javax.net.ssl.*;
/* basic http/s connectivity test /* basic http/s connectivity test
......
...@@ -24,17 +24,16 @@ ...@@ -24,17 +24,16 @@
/** /**
* @test * @test
* @bug 6270015 * @bug 6270015
* @run main/othervm Test13
* @summary Light weight HTTP server * @summary Light weight HTTP server
*/ */
import com.sun.net.httpserver.*; import com.sun.net.httpserver.*;
import java.util.*;
import java.util.concurrent.*; import java.util.concurrent.*;
import java.io.*; import java.io.*;
import java.net.*; import java.net.*;
import java.security.*;
import java.security.cert.*;
import javax.net.ssl.*; import javax.net.ssl.*;
/* basic http/s connectivity test /* basic http/s connectivity test
......
...@@ -24,17 +24,15 @@ ...@@ -24,17 +24,15 @@
/** /**
* @test * @test
* @bug 6270015 * @bug 6270015
* @run main/othervm Test6a
* @summary Light weight HTTP server * @summary Light weight HTTP server
*/ */
import com.sun.net.httpserver.*; import com.sun.net.httpserver.*;
import java.util.*;
import java.util.concurrent.*; import java.util.concurrent.*;
import java.io.*; import java.io.*;
import java.net.*; import java.net.*;
import java.security.*;
import javax.security.auth.callback.*;
import javax.net.ssl.*; import javax.net.ssl.*;
/** /**
......
...@@ -24,18 +24,15 @@ ...@@ -24,18 +24,15 @@
/** /**
* @test * @test
* @bug 6270015 * @bug 6270015
* @run main/othervm Test7a
* @summary Light weight HTTP server * @summary Light weight HTTP server
*/ */
import com.sun.net.httpserver.*; import com.sun.net.httpserver.*;
import java.util.*;
import java.util.concurrent.*; import java.util.concurrent.*;
import java.util.logging.*;
import java.io.*; import java.io.*;
import java.net.*; import java.net.*;
import java.security.*;
import javax.security.auth.callback.*;
import javax.net.ssl.*; import javax.net.ssl.*;
/** /**
......
...@@ -24,18 +24,15 @@ ...@@ -24,18 +24,15 @@
/** /**
* @test * @test
* @bug 6270015 * @bug 6270015
* @run main/othervm Test8a
* @summary Light weight HTTP server * @summary Light weight HTTP server
*/ */
import com.sun.net.httpserver.*; import com.sun.net.httpserver.*;
import java.util.*;
import java.util.concurrent.*; import java.util.concurrent.*;
import java.util.logging.*;
import java.io.*; import java.io.*;
import java.net.*; import java.net.*;
import java.security.*;
import javax.security.auth.callback.*;
import javax.net.ssl.*; import javax.net.ssl.*;
/** /**
...@@ -50,46 +47,50 @@ public class Test8a extends Test { ...@@ -50,46 +47,50 @@ public class Test8a extends Test {
//h.setLevel (Level.INFO); //h.setLevel (Level.INFO);
//log.addHandler (h); //log.addHandler (h);
//log.setLevel (Level.INFO); //log.setLevel (Level.INFO);
Handler handler = new Handler(); HttpsServer server = null;
InetSocketAddress addr = new InetSocketAddress (0); ExecutorService executor = null;
HttpsServer server = HttpsServer.create (addr, 0); try {
HttpContext ctx = server.createContext ("/test", handler); Handler handler = new Handler();
ExecutorService executor = Executors.newCachedThreadPool(); InetSocketAddress addr = new InetSocketAddress (0);
SSLContext ssl = new SimpleSSLContext(System.getProperty("test.src")).get(); server = HttpsServer.create (addr, 0);
server.setHttpsConfigurator(new HttpsConfigurator (ssl)); HttpContext ctx = server.createContext ("/test", handler);
server.setExecutor (executor); executor = Executors.newCachedThreadPool();
server.start (); SSLContext ssl = new SimpleSSLContext(System.getProperty("test.src")).get();
server.setHttpsConfigurator(new HttpsConfigurator (ssl));
server.setExecutor (executor);
server.start ();
URL url = new URL ("https://localhost:"+server.getAddress().getPort()+"/test/foo.html"); URL url = new URL ("https://localhost:"+server.getAddress().getPort()+"/test/foo.html");
System.out.print ("Test8a: " ); System.out.print ("Test8a: " );
HttpsURLConnection urlc = (HttpsURLConnection)url.openConnection (); HttpsURLConnection urlc = (HttpsURLConnection)url.openConnection ();
urlc.setDoOutput (true); urlc.setDoOutput (true);
urlc.setRequestMethod ("POST"); urlc.setRequestMethod ("POST");
urlc.setHostnameVerifier (new DummyVerifier()); urlc.setHostnameVerifier (new DummyVerifier());
urlc.setSSLSocketFactory (ssl.getSocketFactory()); urlc.setSSLSocketFactory (ssl.getSocketFactory());
OutputStream os = new BufferedOutputStream (urlc.getOutputStream(), 8000); OutputStream os = new BufferedOutputStream (urlc.getOutputStream(), 8000);
for (int i=0; i<SIZE; i++) { for (int i=0; i<SIZE; i++) {
os.write (i % 250); os.write (i % 250);
} }
os.close(); os.close();
int resp = urlc.getResponseCode(); int resp = urlc.getResponseCode();
if (resp != 200) { if (resp != 200) {
throw new RuntimeException ("test failed response code"); throw new RuntimeException ("test failed response code");
}
InputStream is = urlc.getInputStream ();
for (int i=0; i<SIZE; i++) {
int f = is.read();
if (f != (i % 250)) {
System.out.println ("Setting error(" +f +")("+i+")" );
error = true;
break;
} }
InputStream is = urlc.getInputStream ();
for (int i=0; i<SIZE; i++) {
int f = is.read();
if (f != (i % 250)) {
System.out.println ("Setting error(" +f +")("+i+")" );
error = true;
break;
}
}
is.close();
} finally {
delay();
if (server != null) server.stop(2);
if (executor != null) executor.shutdown();
} }
is.close();
delay();
server.stop(2);
executor.shutdown();
if (error) { if (error) {
throw new RuntimeException ("test failed error"); throw new RuntimeException ("test failed error");
} }
......
...@@ -24,17 +24,15 @@ ...@@ -24,17 +24,15 @@
/** /**
* @test * @test
* @bug 6270015 * @bug 6270015
* @run main/othervm Test9
* @summary Light weight HTTP server * @summary Light weight HTTP server
*/ */
import com.sun.net.httpserver.*; import com.sun.net.httpserver.*;
import java.util.*;
import java.util.concurrent.*; import java.util.concurrent.*;
import java.io.*; import java.io.*;
import java.net.*; import java.net.*;
import java.security.*;
import java.security.cert.*;
import javax.net.ssl.*; import javax.net.ssl.*;
/* Same as Test1 but requests run in parallel. /* Same as Test1 but requests run in parallel.
......
...@@ -24,17 +24,15 @@ ...@@ -24,17 +24,15 @@
/** /**
* @test * @test
* @bug 6270015 * @bug 6270015
* @run main/othervm Test9a
* @summary Light weight HTTP server * @summary Light weight HTTP server
*/ */
import com.sun.net.httpserver.*; import com.sun.net.httpserver.*;
import java.util.*;
import java.util.concurrent.*; import java.util.concurrent.*;
import java.io.*; import java.io.*;
import java.net.*; import java.net.*;
import java.security.*;
import java.security.cert.*;
import javax.net.ssl.*; import javax.net.ssl.*;
/* Same as Test1 but requests run in parallel. /* Same as Test1 but requests run in parallel.
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
/** /**
* @test * @test
* @bug 6361557 * @bug 6361557
* @run main/othervm B6361557
* @summary Lightweight HTTP server quickly runs out of file descriptors on Linux * @summary Lightweight HTTP server quickly runs out of file descriptors on Linux
*/ */
...@@ -35,12 +36,9 @@ import java.io.*; ...@@ -35,12 +36,9 @@ import java.io.*;
import java.nio.*; import java.nio.*;
import java.nio.channels.*; import java.nio.channels.*;
import java.net.*; import java.net.*;
import java.security.*;
import java.security.cert.*;
import javax.net.ssl.*;
/** /**
* The test simply opens 10,000 separate connections * The test simply opens 1,000 separate connections
* and invokes one http request on each. The client does * and invokes one http request on each. The client does
* not close any sockets until after they are closed * not close any sockets until after they are closed
* by the server. This verifies the basic ability * by the server. This verifies the basic ability
...@@ -49,6 +47,7 @@ import javax.net.ssl.*; ...@@ -49,6 +47,7 @@ import javax.net.ssl.*;
public class B6361557 { public class B6361557 {
public static boolean error = false; public static boolean error = false;
static final int NUM = 1000;
static class Handler implements HttpHandler { static class Handler implements HttpHandler {
int invocation = 1; int invocation = 1;
...@@ -65,6 +64,9 @@ public class B6361557 { ...@@ -65,6 +64,9 @@ public class B6361557 {
} }
} }
final static String request = "GET /test/foo.html HTTP/1.1\r\nContent-length: 0\r\n\r\n";
final static ByteBuffer requestBuf = ByteBuffer.allocate(64).put(request.getBytes());
public static void main (String[] args) throws Exception { public static void main (String[] args) throws Exception {
Handler handler = new Handler(); Handler handler = new Handler();
InetSocketAddress addr = new InetSocketAddress (0); InetSocketAddress addr = new InetSocketAddress (0);
...@@ -75,49 +77,72 @@ public class B6361557 { ...@@ -75,49 +77,72 @@ public class B6361557 {
server.setExecutor (executor); server.setExecutor (executor);
server.start (); server.start ();
final int NUM = 10000;
ByteBuffer buf = ByteBuffer.allocate (4096);
InetSocketAddress destaddr = new InetSocketAddress ( InetSocketAddress destaddr = new InetSocketAddress (
"127.0.0.1", server.getAddress().getPort() "127.0.0.1", server.getAddress().getPort()
); );
System.out.println ("destaddr " + destaddr); System.out.println ("destaddr " + destaddr);
Selector selector = Selector.open (); Selector selector = Selector.open ();
int i = 0; int requests = 0;
int responses = 0;
while (true) { while (true) {
i ++;
int selres = selector.select (1); int selres = selector.select (1);
Set<SelectionKey> selkeys = selector.selectedKeys(); Set<SelectionKey> selkeys = selector.selectedKeys();
for (SelectionKey key : selkeys) { for (SelectionKey key : selkeys) {
if (key.isReadable()) { if (key.isReadable()) {
SocketChannel chan = (SocketChannel)key.channel(); SocketChannel chan = (SocketChannel)key.channel();
buf.clear(); ByteBuffer buf = (ByteBuffer)key.attachment();
try { try {
int x = chan.read (buf); int x = chan.read(buf);
if (x == -1) { if (x == -1 || responseComplete(buf)) {
key.attach(null);
chan.close(); chan.close();
responses++;
} }
} catch (IOException e) {} } catch (IOException e) {}
} }
} }
if (i< NUM) { if (requests < NUM) {
SocketChannel schan = SocketChannel.open (destaddr); SocketChannel schan = SocketChannel.open(destaddr);
String cmd = "GET /test/foo.html HTTP/1.1\r\nContent-length: 0\r\n\r\n"; requestBuf.rewind();
buf.rewind ();
buf.put (cmd.getBytes());
buf.flip();
int c = 0; int c = 0;
while (buf.remaining() > 0) { while (requestBuf.remaining() > 0) {
c += schan.write (buf); c += schan.write(requestBuf);
} }
schan.configureBlocking (false); schan.configureBlocking(false);
schan.register (selector, SelectionKey.OP_READ, null); schan.register(selector, SelectionKey.OP_READ, ByteBuffer.allocate(100));
} else { requests++;
}
if (responses == NUM) {
System.out.println ("Finished clients"); System.out.println ("Finished clients");
server.stop (1); break;
executor.shutdown (); }
return; }
server.stop (1);
selector.close();
executor.shutdown ();
}
/* Look for CR LF CR LF */
static boolean responseComplete(ByteBuffer buf) {
int pos = buf.position();
buf.flip();
byte[] lookingFor = new byte[] {'\r', '\n', '\r', '\n' };
int lookingForCount = 0;
while (buf.hasRemaining()) {
byte b = buf.get();
if (b == lookingFor[lookingForCount]) {
lookingForCount++;
if (lookingForCount == 4) {
return true;
}
} else {
lookingForCount = 0;
} }
} }
buf.position(pos);
buf.limit(buf.capacity());
return false;
} }
} }
...@@ -46,7 +46,7 @@ public class B6373555 { ...@@ -46,7 +46,7 @@ public class B6373555 {
private static Object lock; private static Object lock;
static HttpServer httpServer; static HttpServer httpServer;
static ExecutorService pool, execs; static ExecutorService pool, execs;
static int NUM = 4000; static int NUM = 1000;
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
try { try {
...@@ -125,7 +125,7 @@ public class B6373555 { ...@@ -125,7 +125,7 @@ public class B6373555 {
} }
} }
catch(Exception e) { catch(Exception e) {
//e.printStackTrace(); e.printStackTrace();
System.out.print ("."); System.out.print (".");
error = true; error = true;
} }
......
/* /*
* Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
/* /*
* @test * @test
* @bug 4631471 * @bug 4631471 6972468
* @summary Tests DefaultTreeModel encoding * @summary Tests DefaultTreeModel encoding
* @author Sergey Malenkov, Mark Davidson * @author Sergey Malenkov, Mark Davidson
*/ */
...@@ -37,6 +37,12 @@ import javax.swing.tree.TreeNode; ...@@ -37,6 +37,12 @@ import javax.swing.tree.TreeNode;
public abstract class Test4631471 extends AbstractTest { public abstract class Test4631471 extends AbstractTest {
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
main();
System.setSecurityManager(new SecurityManager());
main();
}
private static void main() throws Exception {
// the DefaultMutableTreeNode will archive correctly // the DefaultMutableTreeNode will archive correctly
new Test4631471() { new Test4631471() {
protected Object getObject() { protected Object getObject() {
......
/* /*
* Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
/* /*
* @test * @test
* @bug 4903007 * @bug 4903007 6972468
* @summary Tests encoding of container with boxes and BoxLayout * @summary Tests encoding of container with boxes and BoxLayout
* @author Sergey Malenkov, Mark Davidson * @author Sergey Malenkov, Mark Davidson
*/ */
...@@ -36,7 +36,7 @@ import javax.swing.JPanel; ...@@ -36,7 +36,7 @@ import javax.swing.JPanel;
public class Test4903007 extends AbstractTest<JPanel> { public class Test4903007 extends AbstractTest<JPanel> {
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
new Test4903007().test(false); // TODO: could not encode with security manager new Test4903007().test(true);
} }
protected JPanel getObject() { protected JPanel getObject() {
......
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
/* /*
* @test * @test
* @bug 5023552 * @bug 5023552 6972468
* @summary Tests JLayeredPane encoding * @summary Tests JLayeredPane encoding
* @author Sergey Malenkov * @author Sergey Malenkov
*/ */
...@@ -35,7 +35,7 @@ import javax.swing.JPanel; ...@@ -35,7 +35,7 @@ import javax.swing.JPanel;
public final class javax_swing_JLayeredPane extends AbstractTest<JLayeredPane> { public final class javax_swing_JLayeredPane extends AbstractTest<JLayeredPane> {
public static void main(String[] args) { public static void main(String[] args) {
new javax_swing_JLayeredPane().test(false); // TODO: could not encode with security manager new javax_swing_JLayeredPane().test(true);
} }
private static void init(JLayeredPane pane, int layer, int x, int y, int w, int h, Color color) { private static void init(JLayeredPane pane, int layer, int x, int y, int w, int h, Color color) {
......
...@@ -26,7 +26,7 @@ import java.util.*; ...@@ -26,7 +26,7 @@ import java.util.*;
/* /*
* @test * @test
* @bug 6911258 6962571 * @bug 6911258 6962571 6963622
* @summary Basic tests of suppressed exceptions * @summary Basic tests of suppressed exceptions
* @author Joseph D. Darcy * @author Joseph D. Darcy
*/ */
...@@ -35,11 +35,22 @@ public class SuppressedExceptions { ...@@ -35,11 +35,22 @@ public class SuppressedExceptions {
private static String message = "Bad suppressed exception information"; private static String message = "Bad suppressed exception information";
public static void main(String... args) throws Exception { public static void main(String... args) throws Exception {
noSelfSuppression();
basicSupressionTest(); basicSupressionTest();
serializationTest(); serializationTest();
selfReference(); selfReference();
} }
private static void noSelfSuppression() {
Throwable throwable = new Throwable();
try {
throwable.addSuppressedException(throwable);
throw new RuntimeException("IllegalArgumentException for self-suppresion not thrown.");
} catch (IllegalArgumentException iae) {
; // Expected
}
}
private static void basicSupressionTest() { private static void basicSupressionTest() {
Throwable throwable = new Throwable(); Throwable throwable = new Throwable();
RuntimeException suppressed = new RuntimeException("A suppressed exception."); RuntimeException suppressed = new RuntimeException("A suppressed exception.");
...@@ -156,9 +167,8 @@ public class SuppressedExceptions { ...@@ -156,9 +167,8 @@ public class SuppressedExceptions {
throwable1.printStackTrace(); throwable1.printStackTrace();
throwable1.addSuppressedException(throwable1);
throwable1.addSuppressedException(throwable2); throwable1.addSuppressedException(throwable2);
throwable2.addSuppressedException(throwable1);
throwable1.printStackTrace(); throwable1.printStackTrace();
} }
......
...@@ -27,25 +27,25 @@ ...@@ -27,25 +27,25 @@
* @summary test to see if timeout hangs * @summary test to see if timeout hangs
* @run main/timeout=15 DatagramTimeout * @run main/timeout=15 DatagramTimeout
*/ */
import java.net.*; import java.net.DatagramPacket;
import java.io.*; import java.net.DatagramSocket;
import java.net.SocketTimeoutException;
public class DatagramTimeout { public class DatagramTimeout {
public static ServerSocket sock;
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
boolean success = false; boolean success = false;
DatagramSocket sock = new DatagramSocket();
try { try {
DatagramSocket sock;
DatagramPacket p; DatagramPacket p;
byte[] buffer = new byte[50]; byte[] buffer = new byte[50];
p = new DatagramPacket(buffer, buffer.length); p = new DatagramPacket(buffer, buffer.length);
sock = new DatagramSocket(2333);
sock.setSoTimeout(2); sock.setSoTimeout(2);
sock.receive(p); sock.receive(p);
} catch (SocketTimeoutException e) { } catch (SocketTimeoutException e) {
success = true; success = true;
} finally {
sock.close();
} }
if (!success) if (!success)
throw new RuntimeException("Socket timeout failure."); throw new RuntimeException("Socket timeout failure.");
......
...@@ -32,35 +32,26 @@ ...@@ -32,35 +32,26 @@
* @author Benjamin Renaud * @author Benjamin Renaud
*/ */
import java.io.*; import java.io.IOException;
import java.net.*; import java.net.DatagramPacket;
import java.util.*; import java.net.DatagramSocket;
import java.net.InetAddress;
public class SendSize { public class SendSize {
static final int clientPort = 8989;
static final int serverPort = 9999;
static final int bufferLength = 512; static final int bufferLength = 512;
static final int packetLength = 256; static final int packetLength = 256;
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
new ServerThread().start(); DatagramSocket serverSocket = new DatagramSocket();
new ClientThread().start(); new ServerThread(serverSocket).start();
new ClientThread(serverSocket.getLocalPort()).start();
} }
static class ServerThread extends Thread { static class ServerThread extends Thread {
int port;
DatagramSocket server; DatagramSocket server;
ServerThread(int port) throws IOException { ServerThread(DatagramSocket server) {
this.port = port; this.server = server;
this.server = new DatagramSocket(port);
}
ServerThread() throws IOException {
this(SendSize.serverPort);
} }
public void run() { public void run() {
...@@ -85,33 +76,22 @@ public class SendSize { ...@@ -85,33 +76,22 @@ public class SendSize {
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
throw new RuntimeException("caugth: " + e); throw new RuntimeException("caugth: " + e);
} finally {
if (server != null) { server.close(); }
} }
} }
} }
static class ClientThread extends Thread { static class ClientThread extends Thread {
int port;
int serverPort; int serverPort;
int bufferLength;
int packetLength;
DatagramSocket client; DatagramSocket client;
InetAddress host; InetAddress host;
ClientThread(int port, int serverPort, ClientThread(int serverPort)throws IOException {
int bufferLength, int packetLength) throws IOException {
this.port = port;
this.serverPort = serverPort; this.serverPort = serverPort;
this.host = InetAddress.getLocalHost(); this.host = InetAddress.getLocalHost();
this.bufferLength = bufferLength; this.client = new DatagramSocket();
this.packetLength = packetLength;
this.client = new DatagramSocket(port, host);
}
ClientThread() throws IOException {
this(SendSize.clientPort, SendSize.serverPort,
SendSize.bufferLength, SendSize.packetLength);
} }
public void run() { public void run() {
...@@ -129,6 +109,8 @@ public class SendSize { ...@@ -129,6 +109,8 @@ public class SendSize {
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
throw new RuntimeException("caught: " + e); throw new RuntimeException("caught: " + e);
} finally {
if (client != null) { client.close(); }
} }
} }
} }
......
...@@ -43,6 +43,9 @@ public class B6558853 implements Runnable { ...@@ -43,6 +43,9 @@ public class B6558853 implements Runnable {
InetAddress dest = null; InetAddress dest = null;
while (l.hasMoreElements() && dest == null) { while (l.hasMoreElements() && dest == null) {
NetworkInterface nif = l.nextElement(); NetworkInterface nif = l.nextElement();
if (!nif.isUp())
continue;
for (InterfaceAddress a : nif.getInterfaceAddresses()) { for (InterfaceAddress a : nif.getInterfaceAddresses()) {
if (a.getAddress() instanceof Inet6Address) { if (a.getAddress() instanceof Inet6Address) {
Inet6Address a6 = (Inet6Address) a.getAddress(); Inet6Address a6 = (Inet6Address) a.getAddress();
...@@ -53,6 +56,7 @@ public class B6558853 implements Runnable { ...@@ -53,6 +56,7 @@ public class B6558853 implements Runnable {
} }
} }
} }
System.out.println("Using " + dest);
if (dest != null) { if (dest != null) {
B6558853 test = new B6558853(dest, port); B6558853 test = new B6558853(dest, port);
Thread thread = new Thread(test); Thread thread = new Thread(test);
......
...@@ -72,6 +72,7 @@ public class Serialize { ...@@ -72,6 +72,7 @@ public class Serialize {
File file = new File (System.getProperty("test.src"), "serial1.4.2.ser"); File file = new File (System.getProperty("test.src"), "serial1.4.2.ser");
ois = new ObjectInputStream(new FileInputStream(file)); ois = new ObjectInputStream(new FileInputStream(file));
nobj = (Inet6Address) ois.readObject(); nobj = (Inet6Address) ois.readObject();
ois.close();
if (!nobj.equals (InetAddress.getByName ("::1"))) { if (!nobj.equals (InetAddress.getByName ("::1"))) {
throw new RuntimeException ("old ::1 not deserialized right"); throw new RuntimeException ("old ::1 not deserialized right");
} }
...@@ -90,6 +91,8 @@ public class Serialize { ...@@ -90,6 +91,8 @@ public class Serialize {
nobj = (Inet6Address) ois.readObject(); nobj = (Inet6Address) ois.readObject();
} catch (NullPointerException e) { } catch (NullPointerException e) {
throw new RuntimeException("6656849 Not fixed: NullPointer when deserializing"); throw new RuntimeException("6656849 Not fixed: NullPointer when deserializing");
} finally {
ois.close();
} }
System.out.println(nobj); System.out.println(nobj);
System.out.println("All tests passed"); System.out.println("All tests passed");
...@@ -102,6 +105,7 @@ public class Serialize { ...@@ -102,6 +105,7 @@ public class Serialize {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("i6a1.ser")); ObjectInputStream ois = new ObjectInputStream(new FileInputStream("i6a1.ser"));
Inet6Address nobj = (Inet6Address) ois.readObject(); Inet6Address nobj = (Inet6Address) ois.readObject();
ois.close();
if (nobj.equals(obj)) { if (nobj.equals(obj)) {
return true; return true;
......
...@@ -56,6 +56,8 @@ public class CheckJNI { ...@@ -56,6 +56,8 @@ public class CheckJNI {
while (ifs.hasMoreElements()) { while (ifs.hasMoreElements()) {
NetworkInterface nif = (NetworkInterface)ifs.nextElement(); NetworkInterface nif = (NetworkInterface)ifs.nextElement();
if (!nif.isUp())
continue;
Enumeration addrs = nif.getInetAddresses(); Enumeration addrs = nif.getInetAddresses();
while (addrs.hasMoreElements()) { while (addrs.hasMoreElements()) {
InetAddress addr = (InetAddress) addrs.nextElement(); InetAddress addr = (InetAddress) addrs.nextElement();
......
...@@ -76,6 +76,10 @@ public class SetOutgoingIf { ...@@ -76,6 +76,10 @@ public class SetOutgoingIf {
// now determine what (if any) type of addresses are assigned to this interface // now determine what (if any) type of addresses are assigned to this interface
for (InetAddress addr : Collections.list(nic.getInetAddresses())) { for (InetAddress addr : Collections.list(nic.getInetAddresses())) {
if (addr.isAnyLocalAddress())
continue;
System.out.println(" addr " + addr);
if (addr instanceof Inet4Address) { if (addr instanceof Inet4Address) {
netIf.ipv4Address(true); netIf.ipv4Address(true);
} else if (addr instanceof Inet6Address) { } else if (addr instanceof Inet6Address) {
......
/*
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/* @test
* @bug 6964714
* @run main/othervm IPv4Only
* @summary Test the networkinterface listing with java.net.preferIPv4Stack=true.
*/
import java.net.*;
import java.util.*;
public class IPv4Only {
public static void main(String[] args) throws Exception {
System.setProperty("java.net.preferIPv4Stack","true");
Enumeration<NetworkInterface> nifs = NetworkInterface.getNetworkInterfaces();
while (nifs.hasMoreElements()) {
NetworkInterface nif = nifs.nextElement();
Enumeration<InetAddress> addrs = nif.getInetAddresses();
while (addrs.hasMoreElements()) {
InetAddress hostAddr = addrs.nextElement();
if ( hostAddr instanceof Inet6Address ){
throw new RuntimeException( "NetworkInterfaceV6List failed - found v6 address " + hostAddr.getHostAddress() );
}
}
}
}
}
...@@ -67,9 +67,10 @@ public class B6181108 implements Runnable { ...@@ -67,9 +67,10 @@ public class B6181108 implements Runnable {
out.flush(); out.flush();
s.close(); s.close();
ss.close();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} finally {
try { ss.close(); } catch (IOException unused) {}
} }
} }
...@@ -100,6 +101,7 @@ public class B6181108 implements Runnable { ...@@ -100,6 +101,7 @@ public class B6181108 implements Runnable {
URLConnection urlc = url.openConnection(); URLConnection urlc = url.openConnection();
int i = ((HttpURLConnection)(urlc)).getResponseCode(); int i = ((HttpURLConnection)(urlc)).getResponseCode();
System.out.println ("response code = " + i); System.out.println ("response code = " + i);
ResponseCache.setDefault(null);
} }
public static void main(String args[]) throws Exception { public static void main(String args[]) throws Exception {
......
...@@ -30,7 +30,6 @@ ...@@ -30,7 +30,6 @@
import java.net.*; import java.net.*;
import java.util.*; import java.util.*;
import java.io.*; import java.io.*;
import java.nio.*;
import sun.net.www.ParseUtil; import sun.net.www.ParseUtil;
import javax.net.ssl.*; import javax.net.ssl.*;
...@@ -43,11 +42,16 @@ public class ResponseCacheTest implements Runnable { ...@@ -43,11 +42,16 @@ public class ResponseCacheTest implements Runnable {
static URL url1; static URL url1;
static URL url2; static URL url2;
static String FNPrefix, OutFNPrefix; static String FNPrefix, OutFNPrefix;
static List<Closeable> streams = new ArrayList<>();
static List<File> files = new ArrayList<>();
/* /*
* Our "http" server to return a 404 */ * Our "http" server to return a 404 */
public void run() { public void run() {
Socket s = null;
FileInputStream fis = null;
try { try {
Socket s = ss.accept(); s = ss.accept();
InputStream is = s.getInputStream (); InputStream is = s.getInputStream ();
BufferedReader r = new BufferedReader(new InputStreamReader(is)); BufferedReader r = new BufferedReader(new InputStreamReader(is));
...@@ -68,7 +72,7 @@ public class ResponseCacheTest implements Runnable { ...@@ -68,7 +72,7 @@ public class ResponseCacheTest implements Runnable {
out.print("Content-Length: "+file2.length()+"\r\n"); out.print("Content-Length: "+file2.length()+"\r\n");
out.print("Connection: close\r\n"); out.print("Connection: close\r\n");
out.print("\r\n"); out.print("\r\n");
FileInputStream fis = new FileInputStream(file2); fis = new FileInputStream(file2);
byte[] buf = new byte[(int)file2.length()]; byte[] buf = new byte[(int)file2.length()];
int len; int len;
while ((len = fis.read(buf)) != -1) { while ((len = fis.read(buf)) != -1) {
...@@ -81,6 +85,10 @@ public class ResponseCacheTest implements Runnable { ...@@ -81,6 +85,10 @@ public class ResponseCacheTest implements Runnable {
ss.close(); ss.close();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} finally {
try { ss.close(); } catch (IOException unused) {}
try { s.close(); } catch (IOException unused) {}
try { fis.close(); } catch (IOException unused) {}
} }
} }
static class NameVerifier implements HostnameVerifier { static class NameVerifier implements HostnameVerifier {
...@@ -144,11 +152,14 @@ static class NameVerifier implements HostnameVerifier { ...@@ -144,11 +152,14 @@ static class NameVerifier implements HostnameVerifier {
// assert (headers1 == headers2 && file1 == file2.2) // assert (headers1 == headers2 && file1 == file2.2)
File file1 = new File(OutFNPrefix+"file1"); File file1 = new File(OutFNPrefix+"file1");
File file2 = new File(OutFNPrefix+"file2.2"); File file2 = new File(OutFNPrefix+"file2.2");
files.add(file1);
files.add(file2);
System.out.println("headers1"+headers1+"\nheaders2="+headers2); System.out.println("headers1"+headers1+"\nheaders2="+headers2);
if (!headers1.equals(headers2) || file1.length() != file2.length()) { if (!headers1.equals(headers2) || file1.length() != file2.length()) {
throw new RuntimeException("test failed"); throw new RuntimeException("test failed");
} }
} }
public static void main(String args[]) throws Exception { public static void main(String args[]) throws Exception {
try { try {
ResponseCache.setDefault(new MyResponseCache()); ResponseCache.setDefault(new MyResponseCache());
...@@ -157,6 +168,12 @@ static class NameVerifier implements HostnameVerifier { ...@@ -157,6 +168,12 @@ static class NameVerifier implements HostnameVerifier {
new ResponseCacheTest(); new ResponseCacheTest();
} finally{ } finally{
ResponseCache.setDefault(null); ResponseCache.setDefault(null);
for (Closeable c: streams) {
try { c.close(); } catch (IOException unused) {}
}
for (File f: files) {
f.delete();
}
} }
} }
...@@ -184,6 +201,7 @@ static class NameVerifier implements HostnameVerifier { ...@@ -184,6 +201,7 @@ static class NameVerifier implements HostnameVerifier {
public MyCacheResponse(String filename) { public MyCacheResponse(String filename) {
try { try {
fis = new FileInputStream(new File(filename)); fis = new FileInputStream(new File(filename));
streams.add(fis);
ObjectInputStream ois = new ObjectInputStream(fis); ObjectInputStream ois = new ObjectInputStream(fis);
headers = (Map<String,List<String>>)ois.readObject(); headers = (Map<String,List<String>>)ois.readObject();
} catch (Exception ex) { } catch (Exception ex) {
...@@ -206,6 +224,8 @@ static class NameVerifier implements HostnameVerifier { ...@@ -206,6 +224,8 @@ static class NameVerifier implements HostnameVerifier {
try { try {
File file = new File(filename); File file = new File(filename);
fos = new FileOutputStream(file); fos = new FileOutputStream(file);
streams.add(fos);
files.add(file);
ObjectOutputStream oos = new ObjectOutputStream(fos); ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(rspHeaders); oos.writeObject(rspHeaders);
} catch (Exception ex) { } catch (Exception ex) {
......
...@@ -39,6 +39,7 @@ import java.io.*; ...@@ -39,6 +39,7 @@ import java.io.*;
public class getResponseCode { public class getResponseCode {
static URL url; static URL url;
static String FNPrefix; static String FNPrefix;
static List<Closeable> resources = new ArrayList<>();
getResponseCode() throws Exception { getResponseCode() throws Exception {
url = new URL("http://localhost/file1.cache"); url = new URL("http://localhost/file1.cache");
...@@ -57,6 +58,9 @@ public class getResponseCode { ...@@ -57,6 +58,9 @@ public class getResponseCode {
new getResponseCode(); new getResponseCode();
} finally{ } finally{
ResponseCache.setDefault(null); ResponseCache.setDefault(null);
for (Closeable c : resources) {
try { c.close(); } catch (IOException unused) {}
}
} }
} }
...@@ -77,6 +81,7 @@ public class getResponseCode { ...@@ -77,6 +81,7 @@ public class getResponseCode {
public MyResponse(String filename) { public MyResponse(String filename) {
try { try {
fis = new FileInputStream(new File(filename)); fis = new FileInputStream(new File(filename));
resources.add(fis);
headers = (Map<String,List<String>>)new ObjectInputStream(fis).readObject(); headers = (Map<String,List<String>>)new ObjectInputStream(fis).readObject();
} catch (Exception ex) { } catch (Exception ex) {
throw new RuntimeException(ex.getMessage()); throw new RuntimeException(ex.getMessage());
......
/*
* Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/* @test
* @bug 4512028
* @summary Check the tolerance on read timeouts.
*/
import java.net.*;
import java.io.*;
public class AccurateTimeout {
static final int TOLERANCE = 100;
static boolean skipTest() {
String os = System.getProperty("os.name");
if (os.equals("Windows 95") ||
os.equals("Windows 98") ||
os.equals("Windows Me")) {
System.out.println("Due to an OS bug timeout tolerance cannot be tested on this OS");
return true;
}
return false;
}
public static void main(String args[]) throws Exception {
if (skipTest()) {
return;
}
int failures = 0;
int timeout;
System.out.println("");
System.out.println("Testing Socket.getInputStream().read() ...");
System.out.println("");
ServerSocket ss = new ServerSocket(0);
Socket s1 = new Socket(InetAddress.getLocalHost(), ss.getLocalPort());
Socket s2 = ss.accept();
InputStream in = s1.getInputStream();
timeout = 100;
while (timeout < 2500) {
s1.setSoTimeout(timeout);
long startTime = System.currentTimeMillis();
try {
in.read();
} catch (SocketTimeoutException e) {
}
long actual = System.currentTimeMillis() - startTime;
System.out.print("excepted: " + timeout + " actual: " + actual);
if (Math.abs(actual-timeout) > TOLERANCE) {
System.out.print(" *** FAIL: outside tolerance");
failures++;
} else {
System.out.print(" PASS.");
}
System.out.println("");
timeout += 200;
}
s1.close();
s2.close();
ss.close();
// ----------
System.out.println("");
System.out.println("Testing DatagramSocket.receive ...");
System.out.println("");
byte b[] = new byte[8];
DatagramPacket p = new DatagramPacket(b, b.length);
DatagramSocket ds = new DatagramSocket();
timeout = 100;
while (timeout < 2500) {
ds.setSoTimeout(timeout);
long startTime = System.currentTimeMillis();
try {
ds.receive(p);
} catch (SocketTimeoutException e) {
}
long actual = System.currentTimeMillis() - startTime;
System.out.print("excepted: " + timeout + " actual: " + actual);
if (Math.abs(actual-timeout) > TOLERANCE) {
System.out.print(" *** FAIL: outside tolerance");
failures++;
} else {
System.out.print(" PASS.");
}
System.out.println("");
timeout += 200;
}
ds.close();
System.out.println("");
// ---------
if (failures > 0) {
throw new Exception("Test failed: " + failures +
" test(s) outside tolerance");
}
}
}
...@@ -47,6 +47,7 @@ public class CloseAvailable implements Runnable { ...@@ -47,6 +47,7 @@ public class CloseAvailable implements Runnable {
t.start(); t.start();
Socket soc = ss.accept(); Socket soc = ss.accept();
ss.close();
DataInputStream is = new DataInputStream(soc.getInputStream()); DataInputStream is = new DataInputStream(soc.getInputStream());
is.close(); is.close();
...@@ -64,7 +65,7 @@ public class CloseAvailable implements Runnable { ...@@ -64,7 +65,7 @@ public class CloseAvailable implements Runnable {
public void run() { public void run() {
try { try {
Socket s = new Socket(addr, port); Socket s = new Socket(addr, port);
s.close();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
......
...@@ -33,29 +33,32 @@ import java.io.*; ...@@ -33,29 +33,32 @@ import java.io.*;
public class DeadlockTest { public class DeadlockTest {
public static void main(String [] argv) throws Exception { public static void main(String [] argv) throws Exception {
ServerSocket ss = new ServerSocket(0);
Socket clientSocket = new Socket();
// Start the server thread try {
Thread s1 = new Thread(new ServerThread()); // Start the server thread
s1.start(); Thread s1 = new Thread(new ServerThread(ss));
s1.start();
// Sleep to make sure s1 has created a server socket
Thread.sleep(1000); // Start the client thread
ClientThread ct = new ClientThread(clientSocket, ss.getLocalPort());
// Start the client thread Thread c1 = new Thread(ct);
ClientThread ct = new ClientThread(); c1.start();
Thread c1 = new Thread(ct);
c1.start(); // Wait for the client thread to finish
c1.join(20000);
// Wait for the client thread to finish
c1.join(40000); // If timeout, we assume there is a deadlock
if (c1.isAlive() == true) {
// If timeout, we assume there is a deadlock // Close the socket to force the server thread
if (c1.isAlive() == true) { // terminate too
// Close the socket to force the server thread s1.stop();
// terminate too throw new Exception("Takes too long. Dead lock");
s1.stop(); }
ct.getSock().close(); } finally {
throw new Exception("Takes too long. Dead lock"); ss.close();
clientSocket.close();
} }
} }
} }
...@@ -71,8 +74,8 @@ class ServerThread implements Runnable { ...@@ -71,8 +74,8 @@ class ServerThread implements Runnable {
Socket sock; Socket sock;
public ServerThread() throws Exception { public ServerThread(ServerSocket serverSocket) throws Exception {
this.server = serverSocket;
} }
public void ping(int cnt) { public void ping(int cnt) {
...@@ -85,7 +88,6 @@ class ServerThread implements Runnable { ...@@ -85,7 +88,6 @@ class ServerThread implements Runnable {
try { try {
if (Thread.currentThread().getName().startsWith("child") == false) { if (Thread.currentThread().getName().startsWith("child") == false) {
server = new ServerSocket(4711);
sock = server.accept(); sock = server.accept();
new Thread(this, "child").start(); new Thread(this, "child").start();
...@@ -107,6 +109,7 @@ class ServerThread implements Runnable { ...@@ -107,6 +109,7 @@ class ServerThread implements Runnable {
} }
} catch (Throwable e) { } catch (Throwable e) {
System.out.println(e);
// If anything goes wrong, just quit. // If anything goes wrong, just quit.
} }
...@@ -141,10 +144,11 @@ class ClientThread implements Runnable { ...@@ -141,10 +144,11 @@ class ClientThread implements Runnable {
Socket sock; Socket sock;
public ClientThread() throws Exception { public ClientThread(Socket sock, int serverPort) throws Exception {
try { try {
System.out.println("About to create a socket"); System.out.println("About to connect the client socket");
sock = new Socket(InetAddress.getLocalHost().getHostName(), 4711); this.sock = sock;
this.sock.connect(new InetSocketAddress("localhost", serverPort));
System.out.println("connected"); System.out.println("connected");
out = new ObjectOutputStream(sock.getOutputStream()); out = new ObjectOutputStream(sock.getOutputStream());
...@@ -156,10 +160,6 @@ class ClientThread implements Runnable { ...@@ -156,10 +160,6 @@ class ClientThread implements Runnable {
} }
} }
public Socket getSock() {
return sock;
}
private int cnt = 1; private int cnt = 1;
public void run() { public void run() {
...@@ -213,6 +213,7 @@ class Message implements java.io.Serializable { ...@@ -213,6 +213,7 @@ class Message implements java.io.Serializable {
System.out.println("write message done " + cnt++); System.out.println("write message done " + cnt++);
} catch (IOException ioe) { } catch (IOException ioe) {
// Ignore the exception // Ignore the exception
System.out.println(ioe);
} }
} }
} }
......
...@@ -81,7 +81,7 @@ public class LingerTest { ...@@ -81,7 +81,7 @@ public class LingerTest {
public void run() { public void run() {
System.out.println ("Another starts"); System.out.println ("Another starts");
try { try {
Thread.currentThread().sleep(delay); Thread.sleep(delay);
Socket s = new Socket("localhost", port); Socket s = new Socket("localhost", port);
synchronized (this) { synchronized (this) {
connected = true; connected = true;
...@@ -105,7 +105,6 @@ public class LingerTest { ...@@ -105,7 +105,6 @@ public class LingerTest {
Socket s1 = new Socket("localhost", ss.getLocalPort()); Socket s1 = new Socket("localhost", ss.getLocalPort());
Socket s2 = ss.accept(); Socket s2 = ss.accept();
// setup conditions for untransmitted data and lengthy // setup conditions for untransmitted data and lengthy
// linger interval // linger interval
s1.setSendBufferSize(128*1024); s1.setSendBufferSize(128*1024);
...@@ -122,14 +121,15 @@ public class LingerTest { ...@@ -122,14 +121,15 @@ public class LingerTest {
thr.start(); thr.start();
// give sender time to queue the data // give sender time to queue the data
Thread.currentThread().sleep(1000); Thread.sleep(1000);
// close the socket asynchronously // close the socket asynchronously
(new Thread(new Closer(s1))).start(); (new Thread(new Closer(s1))).start();
// give another time to run // give another time to run
Thread.currentThread().sleep(10000); Thread.sleep(10000);
ss.close();
// check that another is done // check that another is done
if (!another.connected()) { if (!another.connected()) {
throw new RuntimeException("Another thread is blocked"); throw new RuntimeException("Another thread is blocked");
......
...@@ -58,11 +58,10 @@ public class LinkLocal { ...@@ -58,11 +58,10 @@ public class LinkLocal {
} catch (SocketException e) { } catch (SocketException e) {
failed++; failed++;
System.out.println("Test failed: " + e); System.out.println("Test failed: " + e);
} finally {
s.close();
ss.close();
} }
// clean up
s.close();
ss.close();
} }
static void UdpTest(InetAddress ia, boolean connected) throws Exception { static void UdpTest(InetAddress ia, boolean connected) throws Exception {
...@@ -93,16 +92,16 @@ public class LinkLocal { ...@@ -93,16 +92,16 @@ public class LinkLocal {
ds1.send(p); ds1.send(p);
System.out.println("Packet has been sent."); System.out.println("Packet has been sent.");
ds2.setSoTimeout(1000); ds2.setSoTimeout(5000);
ds2.receive(p); ds2.receive(p);
System.out.println("Test passed - packet received."); System.out.println("Test passed - packet received.");
} catch (SocketException e) { } catch (SocketException e) {
failed++; failed++;
System.out.println("Test failed: " + e); System.out.println("Test failed: " + e);
} finally {
ds1.close();
ds2.close();
} }
ds1.close();
ds2.close();
} }
static void TestAddress(InetAddress ia) throws Exception { static void TestAddress(InetAddress ia) throws Exception {
...@@ -138,6 +137,9 @@ public class LinkLocal { ...@@ -138,6 +137,9 @@ public class LinkLocal {
Enumeration nifs = NetworkInterface.getNetworkInterfaces(); Enumeration nifs = NetworkInterface.getNetworkInterfaces();
while (nifs.hasMoreElements()) { while (nifs.hasMoreElements()) {
NetworkInterface ni = (NetworkInterface)nifs.nextElement(); NetworkInterface ni = (NetworkInterface)nifs.nextElement();
if (!ni.isUp())
continue;
Enumeration addrs = ni.getInetAddresses(); Enumeration addrs = ni.getInetAddresses();
while (addrs.hasMoreElements()) { while (addrs.hasMoreElements()) {
InetAddress addr = (InetAddress)addrs.nextElement(); InetAddress addr = (InetAddress)addrs.nextElement();
......
...@@ -39,6 +39,7 @@ public class ProxyCons { ...@@ -39,6 +39,7 @@ public class ProxyCons {
public void run () { public void run () {
try { try {
Socket s = server.accept (); Socket s = server.accept ();
s.close();
while (!finished ()) { while (!finished ()) {
Thread.sleep (500); Thread.sleep (500);
} }
...@@ -58,10 +59,9 @@ public class ProxyCons { ...@@ -58,10 +59,9 @@ public class ProxyCons {
public ProxyCons() { public ProxyCons() {
} }
void test() { void test() throws Exception {
ServerSocket ss = new ServerSocket(0);
try { try {
ServerSocket ss = new ServerSocket();
ss.bind(new InetSocketAddress(0));
Server s = new Server(ss); Server s = new Server(ss);
s.start(); s.start();
Socket sock = new Socket(Proxy.NO_PROXY); Socket sock = new Socket(Proxy.NO_PROXY);
...@@ -70,10 +70,12 @@ public class ProxyCons { ...@@ -70,10 +70,12 @@ public class ProxyCons {
sock.close(); sock.close();
} catch (java.io.IOException e) { } catch (java.io.IOException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} finally {
ss.close();
} }
} }
public static void main(String[] args) { public static void main(String[] args) throws Exception {
ProxyCons c = new ProxyCons(); ProxyCons c = new ProxyCons();
c.test(); c.test();
} }
......
...@@ -44,7 +44,7 @@ public class ReadTimeout { ...@@ -44,7 +44,7 @@ public class ReadTimeout {
sin = InetAddress.getLocalHost(); sin = InetAddress.getLocalHost();
srv = new ServerSocket(port); srv = new ServerSocket(port);
port = srv.getLocalPort(); port = srv.getLocalPort();
soc = new Socket(sin, port, true); soc = new Socket(sin, port);
soc1 = srv.accept(); soc1 = srv.accept();
soc.setSoTimeout(tout); soc.setSoTimeout(tout);
...@@ -53,10 +53,10 @@ public class ReadTimeout { ...@@ -53,10 +53,10 @@ public class ReadTimeout {
os = soc1.getOutputStream(); os = soc1.getOutputStream();
is.read(); is.read();
} catch(InterruptedIOException e) { } catch(InterruptedIOException e) {
} finally {
soc.close();
soc1.close();
srv.close();
} }
soc.close();
soc1.close();
srv.close();
} }
} }
...@@ -32,29 +32,14 @@ import java.net.Socket; ...@@ -32,29 +32,14 @@ import java.net.Socket;
import java.net.ServerSocket; import java.net.ServerSocket;
public class SetReceiveBufferSize { public class SetReceiveBufferSize {
class Server extends Thread {
private ServerSocket ss;
public Server(ServerSocket ss) {
this.ss = ss;
}
public void run() {
try {
ss.accept();
} catch (Exception e) {
}
}
}
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
SetReceiveBufferSize s = new SetReceiveBufferSize(); SetReceiveBufferSize s = new SetReceiveBufferSize();
} }
public SetReceiveBufferSize() throws Exception { public SetReceiveBufferSize() throws Exception {
ServerSocket ss = new ServerSocket(0); ServerSocket ss = new ServerSocket(0);
Server serv = new Server(ss);
serv.start();
Socket s = new Socket("localhost", ss.getLocalPort()); Socket s = new Socket("localhost", ss.getLocalPort());
Socket accepted = ss.accept();
try { try {
s.setReceiveBufferSize(0); s.setReceiveBufferSize(0);
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
...@@ -62,6 +47,8 @@ public class SetReceiveBufferSize { ...@@ -62,6 +47,8 @@ public class SetReceiveBufferSize {
} catch (Exception ex) { } catch (Exception ex) {
} finally { } finally {
ss.close(); ss.close();
s.close();
accepted.close();
} }
throw new RuntimeException("IllegalArgumentException not thrown!"); throw new RuntimeException("IllegalArgumentException not thrown!");
} }
......
...@@ -30,36 +30,24 @@ ...@@ -30,36 +30,24 @@
import java.net.*; import java.net.*;
public class SetSoLinger implements Runnable { public class SetSoLinger {
static ServerSocket ss; static final int LINGER = 65546;
static InetAddress addr;
static int port;
public static void main(String args[]) throws Exception { public static void main(String args[]) throws Exception {
boolean error = true; int value;
int linger = 65546; InetAddress addr = InetAddress.getLocalHost();
int value = 0; ServerSocket ss = new ServerSocket(0);
addr = InetAddress.getLocalHost(); int port = ss.getLocalPort();
ss = new ServerSocket(0);
port = ss.getLocalPort();
Thread t = new Thread(new SetSoLinger()); Socket s = new Socket(addr, port);
t.start();
Socket soc = ss.accept(); Socket soc = ss.accept();
soc.setSoLinger(true, linger); soc.setSoLinger(true, LINGER);
value = soc.getSoLinger(); value = soc.getSoLinger();
soc.close(); soc.close();
s.close();
ss.close();
if(value != 65535) if(value != 65535)
throw new RuntimeException("Failed. Value not properly reduced."); throw new RuntimeException("Failed. Value not properly reduced.");
} }
public void run() {
try {
Socket s = new Socket(addr, port);
} catch (Exception e) {
e.printStackTrace();
}
}
} }
...@@ -36,12 +36,14 @@ public class ShutdownBoth { ...@@ -36,12 +36,14 @@ public class ShutdownBoth {
Socket s1 = new Socket(ss.getInetAddress(), ss.getLocalPort()); Socket s1 = new Socket(ss.getInetAddress(), ss.getLocalPort());
Socket s2 = ss.accept(); Socket s2 = ss.accept();
s1.shutdownInput(); try {
s1.shutdownOutput(); // failed b55 s1.shutdownInput();
s1.shutdownOutput(); // failed b55
s1.close(); } finally {
s2.close(); s1.close();
ss.close(); s2.close();
ss.close();
}
} }
} }
...@@ -52,9 +52,10 @@ public class SoTimeout implements Runnable { ...@@ -52,9 +52,10 @@ public class SoTimeout implements Runnable {
t.start(); t.start();
Socket s = serverSocket.accept(); Socket s = serverSocket.accept();
serverSocket.close();
// set a 1 second timeout on the socket // set a 5 second timeout on the socket
s.setSoTimeout(1000); s.setSoTimeout(5000);
s.getInputStream().read(b, 0, b.length); s.getInputStream().read(b, 0, b.length);
s.close(); s.close();
...@@ -64,7 +65,7 @@ public class SoTimeout implements Runnable { ...@@ -64,7 +65,7 @@ public class SoTimeout implements Runnable {
// this sequence should complete fairly quickly and if it // this sequence should complete fairly quickly and if it
// takes something resembling the the SoTimeout value then // takes something resembling the the SoTimeout value then
// we are probably incorrectly blocking and not waking up // we are probably incorrectly blocking and not waking up
if (waited > 500) { if (waited > 2000) {
throw new Exception("shouldn't take " + waited + " to complete"); throw new Exception("shouldn't take " + waited + " to complete");
} }
} }
......
...@@ -31,18 +31,16 @@ import java.net.*; ...@@ -31,18 +31,16 @@ import java.net.*;
import java.io.*; import java.io.*;
public class Timeout { public class Timeout {
public static ServerSocket sock;
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
boolean success = false; boolean success = false;
ServerSocket sock = new ServerSocket(0);
try { try {
ServerSocket sock;
sock = new ServerSocket(2333);
sock.setSoTimeout(2); sock.setSoTimeout(2);
sock.accept(); sock.accept();
} catch (InterruptedIOException e) { } catch (InterruptedIOException e) {
success = true; success = true;
} finally {
sock.close();
} }
if (!success) if (!success)
throw new RuntimeException("Socket timeout failure."); throw new RuntimeException("Socket timeout failure.");
......
...@@ -90,63 +90,64 @@ public class UrgentDataTest { ...@@ -90,63 +90,64 @@ public class UrgentDataTest {
} }
public void run () throws Exception { public void run () throws Exception {
if (isClient) { try {
client = new Socket (clHost, clPort); if (isClient) {
clis = client.getInputStream(); client = new Socket (clHost, clPort);
clos = client.getOutputStream(); clis = client.getInputStream();
client.setOOBInline (true); clos = client.getOutputStream();
if (client.getOOBInline() != true) { client.setOOBInline (true);
throw new RuntimeException ("Setting OOBINLINE failed"); if (client.getOOBInline() != true) {
} throw new RuntimeException ("Setting OOBINLINE failed");
}
if (isServer) {
server = listener.accept ();
sis = server.getInputStream();
sos = server.getOutputStream();
}
if (isClient) {
clos.write ("Hello".getBytes ());
client.sendUrgentData (100);
clos.write ("world".getBytes ());
}
// read Hello world from server (during which oob byte must have been dropped)
String s = "Helloworld";
if (isServer) {
for (int y=0; y<s.length(); y++) {
int c = sis.read ();
if (c != (int)s.charAt (y)) {
throw new RuntimeException ("Unexpected character read");
} }
} }
// Do the same from server to client if (isServer) {
sos.write ("Hello".getBytes ()); server = listener.accept ();
server.sendUrgentData (101); sis = server.getInputStream();
sos.write ("World".getBytes ()); sos = server.getOutputStream();
} }
if (isClient) { if (isClient) {
// read Hello world from client (during which oob byte must have been read) clos.write ("Hello".getBytes ());
s="Hello"; client.sendUrgentData (100);
for (int y=0; y<s.length(); y++) { clos.write ("world".getBytes ());
int c = clis.read ();
if (c != (int)s.charAt (y)) {
throw new RuntimeException ("Unexpected character read");
}
} }
if (clis.read() != 101) { // read Hello world from server (during which oob byte must have been dropped)
throw new RuntimeException ("OOB byte not received"); String s = "Helloworld";
if (isServer) {
for (int y=0; y<s.length(); y++) {
int c = sis.read ();
if (c != (int)s.charAt (y)) {
throw new RuntimeException ("Unexpected character read");
}
}
// Do the same from server to client
sos.write ("Hello".getBytes ());
server.sendUrgentData (101);
sos.write ("World".getBytes ());
} }
s="World"; if (isClient) {
for (int y=0; y<s.length(); y++) { // read Hello world from client (during which oob byte must have been read)
int c = clis.read (); s="Hello";
if (c != (int)s.charAt (y)) { for (int y=0; y<s.length(); y++) {
throw new RuntimeException ("Unexpected character read"); int c = clis.read ();
if (c != (int)s.charAt (y)) {
throw new RuntimeException ("Unexpected character read");
}
}
if (clis.read() != 101) {
throw new RuntimeException ("OOB byte not received");
}
s="World";
for (int y=0; y<s.length(); y++) {
int c = clis.read ();
if (c != (int)s.charAt (y)) {
throw new RuntimeException ("Unexpected character read");
}
} }
} }
} finally {
if (listener != null) listener.close();
if (client != null) client.close ();
if (server != null) server.close ();
} }
if (isClient)
client.close ();
if (isServer)
server.close ();
} }
} }
...@@ -61,7 +61,6 @@ public class BrokenPipe { ...@@ -61,7 +61,6 @@ public class BrokenPipe {
try { try {
client.getOutputStream().write(new byte[1000000]); client.getOutputStream().write(new byte[1000000]);
} catch (IOException ioe) { } catch (IOException ioe) {
/* /*
* Check that the exception text doesn't indicate the * Check that the exception text doesn't indicate the
* socket is closed. In tiger we should be able to * socket is closed. In tiger we should be able to
...@@ -71,8 +70,9 @@ public class BrokenPipe { ...@@ -71,8 +70,9 @@ public class BrokenPipe {
if (text.toLowerCase().indexOf("closed") >= 0) { if (text.toLowerCase().indexOf("closed") >= 0) {
throw ioe; throw ioe;
} }
} finally {
server.close();
} }
server.close();
} }
} }
...@@ -39,27 +39,28 @@ public class Restart { ...@@ -39,27 +39,28 @@ public class Restart {
*/ */
public static void main(String args[]) throws Exception { public static void main(String args[]) throws Exception {
ServerSocket ss = new ServerSocket(0);
Socket s1 = null, s2 = null;
try {
int port = ss.getLocalPort();
InetSocketAddress isa = new InetSocketAddress(0); s1 = new Socket(InetAddress.getLocalHost(), port);
ServerSocket ss = new ServerSocket(); s2 = ss.accept();
ss.bind(isa);
int port = ss.getLocalPort(); // close server socket and the accepted connection
ss.close();
s2.close();
Socket s1 = new Socket(InetAddress.getLocalHost(), port); ss = new ServerSocket();
Socket s2 = ss.accept(); ss.bind( new InetSocketAddress(port) );
ss.close();
// close server socket and the accepted connection // close the client socket
ss.close(); s1.close();
s2.close(); } finally {
if (ss != null) ss.close();
boolean failed = false; if (s1 != null) s1.close();
if (s2 != null) s2.close();
ss = new ServerSocket(); }
ss.bind( new InetSocketAddress(port) );
ss.close();
// close the client socket
s1.close();
} }
} }
...@@ -32,68 +32,37 @@ import java.io.*; ...@@ -32,68 +32,37 @@ import java.io.*;
import java.net.*; import java.net.*;
public class SocketClosedException { public class SocketClosedException {
/*
* Is the server ready to serve?
*/
volatile static boolean serverReady = false;
/*
* Define the server side of the test.
*
* If the server prematurely exits, serverReady will be set to true
* to avoid infinite hangs.
*/
static void doServerSide() throws Exception { static void doServerSide() throws Exception {
ServerSocket serverSocket = new ServerSocket(serverPort); try {
serverPort = serverSocket.getLocalPort(); Socket socket = serverSocket.accept();
/*
* Signal Client, we're ready for a connect.
*/
serverReady = true;
Socket socket = serverSocket.accept();
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
os.write(85);
os.flush();
socket.close();
}
/* OutputStream os = socket.getOutputStream();
* Define the client side of the test.
*
* If the server prematurely exits, serverReady will be set to true
* to avoid infinite hangs.
*/
static void doClientSide() throws Exception {
/* os.write(85);
* Wait for server to get started. os.flush();
*/ socket.close();
while (!serverReady) { } finally {
Thread.sleep(5000); serverSocket.close();
} }
}
Socket socket = new Socket("localhost", serverPort); static void doClientSide(int port) throws Exception {
Socket socket = new Socket("localhost", port);
InputStream is = socket.getInputStream(); InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
int read = is.read(); is.read();
socket.close(); socket.close();
read = is.read(); is.read();
} }
static int serverPort = 0; static ServerSocket serverSocket;
static Exception serverException = null; static Exception serverException = null;
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
serverSocket = new ServerSocket(0);
startServer(); startServer();
try { try {
doClientSide(); doClientSide(serverSocket.getLocalPort());
} catch (SocketException e) { } catch (SocketException e) {
if (!e.getMessage().equalsIgnoreCase("Socket closed")) { if (!e.getMessage().equalsIgnoreCase("Socket closed")) {
throw new Exception("Received a wrong exception message: " + throw new Exception("Received a wrong exception message: " +
...@@ -108,21 +77,14 @@ public class SocketClosedException { ...@@ -108,21 +77,14 @@ public class SocketClosedException {
} }
static void startServer() { static void startServer() {
Thread serverThread = new Thread() { (new Thread() {
public void run() { public void run() {
try { try {
doServerSide(); doServerSide();
} catch (Exception e) { } catch (Exception e) {
/* e.printStackTrace();
* server thread just died.
* Release the client, if not active already...
*/
System.err.println("Server died...");
serverReady = true;
serverException = e;
} }
} }
}; }).start();
serverThread.start();
} }
} }
...@@ -31,26 +31,24 @@ import java.net.*; ...@@ -31,26 +31,24 @@ import java.net.*;
import java.io.*; import java.io.*;
public class SocketTimeout { public class SocketTimeout {
static final int TIMEOUT = 1000;
public static void main(String args[]) throws Exception { public static void main(String args[]) throws Exception {
InetAddress sin = null; InetAddress sin = InetAddress.getLocalHost();
Socket soc = null,soc1 = null; Socket soc = null,soc1 = null;
InputStream is = null; InputStream is = null;
OutputStream os = null;
ServerSocket srv = null; ServerSocket srv = null;
int port = 0; int port = 0;
int tout = 1000;
sin = InetAddress.getLocalHost(); srv = new ServerSocket(0);
srv = new ServerSocket(port);
port = srv.getLocalPort(); port = srv.getLocalPort();
soc = new Socket(sin, port); soc = new Socket(sin, port);
soc1 = srv.accept(); soc1 = srv.accept();
soc.setSoTimeout(tout); soc.setSoTimeout(TIMEOUT);
srv.setSoTimeout(tout); srv.setSoTimeout(TIMEOUT);
try { try {
is = soc.getInputStream(); is = soc.getInputStream();
os = soc1.getOutputStream();
is.read(); is.read();
} catch(InterruptedIOException e) { } catch(InterruptedIOException e) {
try { try {
...@@ -59,6 +57,9 @@ public class SocketTimeout { ...@@ -59,6 +57,9 @@ public class SocketTimeout {
} catch(NoClassDefFoundError e1) { } catch(NoClassDefFoundError e1) {
throw new Exception ("SocketTimeoutException: not found"); throw new Exception ("SocketTimeoutException: not found");
} }
} finally {
soc.close();
soc1.close();
} }
// now check accept // now check accept
...@@ -72,12 +73,14 @@ public class SocketTimeout { ...@@ -72,12 +73,14 @@ public class SocketTimeout {
} catch(NoClassDefFoundError e1) { } catch(NoClassDefFoundError e1) {
throw new Exception ("SocketTimeoutException: not found"); throw new Exception ("SocketTimeoutException: not found");
} }
} finally {
srv.close();
} }
// Now check DatagramSocket.receive() // Now check DatagramSocket.receive()
DatagramSocket dg = new DatagramSocket (); DatagramSocket dg = new DatagramSocket ();
dg.setSoTimeout (tout); dg.setSoTimeout (TIMEOUT);
try { try {
dg.receive (new DatagramPacket (new byte [64], 64)); dg.receive (new DatagramPacket (new byte [64], 64));
...@@ -88,11 +91,8 @@ public class SocketTimeout { ...@@ -88,11 +91,8 @@ public class SocketTimeout {
} catch(NoClassDefFoundError e1) { } catch(NoClassDefFoundError e1) {
throw new Exception ("SocketTimeoutException: not found"); throw new Exception ("SocketTimeoutException: not found");
} }
} finally {
dg.close();
} }
soc.close();
soc1.close();
srv.close();
dg.close();
} }
} }
...@@ -53,11 +53,13 @@ public class GetContent implements Runnable { ...@@ -53,11 +53,13 @@ public class GetContent implements Runnable {
// wait for client to read response - otherwise http // wait for client to read response - otherwise http
// client get error and re-establish connection // client get error and re-establish connection
Thread.currentThread().sleep(2000); Thread.sleep(2000);
s.close(); s.close();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} finally {
try { ss.close(); } catch (IOException unused) {}
} }
} }
...@@ -81,8 +83,6 @@ public class GetContent implements Runnable { ...@@ -81,8 +83,6 @@ public class GetContent implements Runnable {
error = false; error = false;
} }
ss.close();
if (error) if (error)
throw new RuntimeException("No IOException generated."); throw new RuntimeException("No IOException generated.");
} }
......
...@@ -27,20 +27,45 @@ ...@@ -27,20 +27,45 @@
* @summary Test for FileNotFoundException when loading bogus class * @summary Test for FileNotFoundException when loading bogus class
*/ */
import java.net.*; import java.io.InputStream;
import java.io.*; import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.URL;
import java.net.URLClassLoader;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
public class ClassLoad { public class ClassLoad {
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
boolean error = true; boolean error = true;
// Start a dummy server to return 404
HttpServer server = HttpServer.create(new InetSocketAddress(0), 0);
HttpHandler handler = new HttpHandler() {
public void handle(HttpExchange t) throws IOException {
InputStream is = t.getRequestBody();
while (is.read() != -1);
t.sendResponseHeaders (404, -1);
t.close();
}
};
server.createContext("/", handler);
server.start();
// Client request
try { try {
URL url = new URL(args.length >= 1 ? args[0] : "http://jini.east/"); URL url = new URL("http://localhost:" + server.getAddress().getPort());
String name = args.length >= 2 ? args[1] : "foo.bar.Baz"; String name = args.length >= 2 ? args[1] : "foo.bar.Baz";
ClassLoader loader = new URLClassLoader(new URL[] { url }); ClassLoader loader = new URLClassLoader(new URL[] { url });
System.out.println(url);
Class c = loader.loadClass(name); Class c = loader.loadClass(name);
System.out.println("Loaded class \"" + c.getName() + "\"."); System.out.println("Loaded class \"" + c.getName() + "\".");
} catch (ClassNotFoundException ex) { } catch (ClassNotFoundException ex) {
System.out.println(ex);
error = false; error = false;
} finally {
server.stop(0);
} }
if (error) if (error)
throw new RuntimeException("No ClassNotFoundException generated"); throw new RuntimeException("No ClassNotFoundException generated");
......
...@@ -56,7 +56,6 @@ public class DisconnectAfterEOF { ...@@ -56,7 +56,6 @@ public class DisconnectAfterEOF {
int cl = -1; int cl = -1;
int remaining = -1; int remaining = -1;
StringBuffer sb = new StringBuffer(); StringBuffer sb = new StringBuffer();
Random r = new Random();
boolean close = false; boolean close = false;
boolean inBody = false; boolean inBody = false;
...@@ -239,8 +238,6 @@ public class DisconnectAfterEOF { ...@@ -239,8 +238,6 @@ public class DisconnectAfterEOF {
} }
public static void main(String args[]) throws Exception { public static void main(String args[]) throws Exception {
Random r = new Random();
// start server // start server
ServerSocket ss = new ServerSocket(0); ServerSocket ss = new ServerSocket(0);
Server svr = new Server(ss); Server svr = new Server(ss);
...@@ -273,7 +270,7 @@ public class DisconnectAfterEOF { ...@@ -273,7 +270,7 @@ public class DisconnectAfterEOF {
URLConnection uc1 = doRequest(uri); URLConnection uc1 = doRequest(uri);
doResponse(uc1); doResponse(uc1);
Thread.currentThread().sleep(2000); Thread.sleep(2000);
URLConnection uc2 = doRequest(uri); URLConnection uc2 = doRequest(uri);
......
...@@ -111,9 +111,8 @@ class myHttpServer implements Runnable, Cloneable { ...@@ -111,9 +111,8 @@ class myHttpServer implements Runnable, Cloneable {
} catch(Exception e) { } catch(Exception e) {
System.out.print("Server failure\n"); System.out.print("Server failure\n");
e.printStackTrace(); e.printStackTrace();
try { } finally {
serverSocket.close(); try { serverSocket.close(); } catch(IOException unused) {}
} catch(IOException e2) {}
} }
} else { } else {
try { try {
...@@ -127,10 +126,9 @@ class myHttpServer implements Runnable, Cloneable { ...@@ -127,10 +126,9 @@ class myHttpServer implements Runnable, Cloneable {
} catch(Exception e) { } catch(Exception e) {
// System.out.print("Service handler failure\n"); // System.out.print("Service handler failure\n");
// e.printStackTrace(); // e.printStackTrace();
} finally {
try { close(); } catch(IOException unused) {}
} }
try {
close();
} catch(IOException e2) {}
} }
} }
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
*/ */
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.OutputStreamWriter; import java.io.IOException;
import java.io.PrintStream; import java.io.PrintStream;
import java.net.ServerSocket; import java.net.ServerSocket;
import java.net.Socket; import java.net.Socket;
...@@ -41,61 +41,56 @@ public class HttpContinueStackOverflow { ...@@ -41,61 +41,56 @@ public class HttpContinueStackOverflow {
static class Server implements Runnable { static class Server implements Runnable {
int port; int port;
ServerSocket serverSock ;
Server(int port) { Server() throws IOException {
this.port = port; serverSock = new ServerSocket(0);
}
int getLocalPort() {
return serverSock.getLocalPort();
} }
public void run() { public void run() {
Socket sock = null;
try { try {
/* bind to port and wait for connection */
ServerSocket serverSock = new ServerSocket( port );
serverSock.setSoTimeout(10000); serverSock.setSoTimeout(10000);
Socket sock = serverSock.accept(); sock = serverSock.accept();
/* setup streams and read http request */ /* setup streams and read http request */
BufferedReader in = new BufferedReader( BufferedReader in = new BufferedReader(
new InputStreamReader(sock.getInputStream())); new InputStreamReader(sock.getInputStream()));
PrintStream out = new PrintStream( sock.getOutputStream() ); PrintStream out = new PrintStream( sock.getOutputStream() );
String request = in.readLine(); in.readLine();
/* send continue followed by invalid response */ /* send continue followed by invalid response */
out.println("HTTP/1.1 100 Continue\r"); out.println("HTTP/1.1 100 Continue\r");
out.println("\r"); out.println("\r");
out.println("junk junk junk"); out.println("junk junk junk");
out.flush(); out.flush();
sock.close();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} finally {
try { serverSock.close(); } catch (IOException unused) {}
try { sock.close(); } catch (IOException unused) {}
} }
} }
} }
HttpContinueStackOverflow(int port) throws Exception { HttpContinueStackOverflow() throws Exception {
/* create the server */ /* create the server */
Server s = new Server(port); Server s = new Server();
Thread thr = new Thread(s); (new Thread(s)).start();
thr.start();
/* wait for server to bind to port */
try {
Thread.currentThread().sleep(2000);
} catch (Exception e) { }
/* connect to server, connect to server and get response code */ /* connect to server, connect to server and get response code */
URL url = new URL("http", "localhost", port, "anything.html"); URL url = new URL("http", "localhost", s.getLocalPort(), "anything.html");
HttpURLConnection conn = (HttpURLConnection)url.openConnection(); HttpURLConnection conn = (HttpURLConnection)url.openConnection();
int respCode = conn.getResponseCode(); conn.getResponseCode();
System.out.println("TEST PASSED"); System.out.println("TEST PASSED");
} }
public static void main(String args[]) throws Exception { public static void main(String args[]) throws Exception {
int port = 4090;
if (args.length > 0) {
port = Integer.parseInt(args[0]);
}
System.out.println("Testing 100-Continue"); System.out.println("Testing 100-Continue");
new HttpContinueStackOverflow(port); new HttpContinueStackOverflow();
} }
} }
...@@ -37,11 +37,11 @@ class RedirServer extends Thread { ...@@ -37,11 +37,11 @@ class RedirServer extends Thread {
OutputStream os; OutputStream os;
int port; int port;
String reply1 = "HTTP/1.1 307 Temporary Redirect\r\n" + String reply1Part1 = "HTTP/1.1 307 Temporary Redirect\r\n" +
"Date: Mon, 15 Jan 2001 12:18:21 GMT\r\n" + "Date: Mon, 15 Jan 2001 12:18:21 GMT\r\n" +
"Server: Apache/1.3.14 (Unix)\r\n" + "Server: Apache/1.3.14 (Unix)\r\n" +
"Location: http://localhost:"; "Location: http://localhost:";
String reply2 = "/redirected.html\r\n" + String reply1Part2 = "/redirected.html\r\n" +
"Connection: close\r\n" + "Connection: close\r\n" +
"Content-Type: text/html; charset=iso-8859-1\r\n\r\n" + "Content-Type: text/html; charset=iso-8859-1\r\n\r\n" +
"<html>Hello</html>"; "<html>Hello</html>";
...@@ -49,9 +49,10 @@ class RedirServer extends Thread { ...@@ -49,9 +49,10 @@ class RedirServer extends Thread {
RedirServer (ServerSocket y) { RedirServer (ServerSocket y) {
s = y; s = y;
port = s.getLocalPort(); port = s.getLocalPort();
System.out.println("Server created listening on " + port);
} }
String reply3 = "HTTP/1.1 200 Ok\r\n" + String reply2 = "HTTP/1.1 200 Ok\r\n" +
"Date: Mon, 15 Jan 2001 12:18:21 GMT\r\n" + "Date: Mon, 15 Jan 2001 12:18:21 GMT\r\n" +
"Server: Apache/1.3.14 (Unix)\r\n" + "Server: Apache/1.3.14 (Unix)\r\n" +
"Connection: close\r\n" + "Connection: close\r\n" +
...@@ -64,16 +65,24 @@ class RedirServer extends Thread { ...@@ -64,16 +65,24 @@ class RedirServer extends Thread {
is = s1.getInputStream (); is = s1.getInputStream ();
os = s1.getOutputStream (); os = s1.getOutputStream ();
is.read (); is.read ();
String reply = reply1 + port + reply2; String reply = reply1Part1 + port + reply1Part2;
os.write (reply.getBytes()); os.write (reply.getBytes());
os.close();
/* wait for redirected connection */ /* wait for redirected connection */
s.setSoTimeout (5000); s.setSoTimeout (5000);
s1 = s.accept (); s1 = s.accept ();
is = s1.getInputStream ();
os = s1.getOutputStream (); os = s1.getOutputStream ();
os.write (reply3.getBytes()); is.read();
os.write (reply2.getBytes());
os.close();
} }
catch (Exception e) { catch (Exception e) {
/* Just need thread to terminate */ /* Just need thread to terminate */
System.out.println("Server: caught " + e);
e.printStackTrace();
} finally {
try { s.close(); } catch (IOException unused) {}
} }
} }
}; };
...@@ -84,10 +93,7 @@ public class Redirect307Test { ...@@ -84,10 +93,7 @@ public class Redirect307Test {
public static final int DELAY = 10; public static final int DELAY = 10;
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
int nLoops = 1; int port;
int nSize = 10;
int port, n =0;
byte b[] = new byte[nSize];
RedirServer server; RedirServer server;
ServerSocket sock; ServerSocket sock;
...@@ -119,7 +125,8 @@ public class Redirect307Test { ...@@ -119,7 +125,8 @@ public class Redirect307Test {
} }
} }
catch(IOException e) { catch(IOException e) {
throw new RuntimeException ("Exception caught"); e.printStackTrace();
throw new RuntimeException ("Exception caught + " + e);
} }
} }
} }
...@@ -76,15 +76,19 @@ class RedirLimitServer extends Thread { ...@@ -76,15 +76,19 @@ class RedirLimitServer extends Thread {
is.read (); is.read ();
String reply = reply1 + port + "/redirect" + i + reply2; String reply = reply1 + port + "/redirect" + i + reply2;
os.write (reply.getBytes()); os.write (reply.getBytes());
os.close();
} }
s1 = s.accept (); s1 = s.accept ();
is = s1.getInputStream (); is = s1.getInputStream ();
os = s1.getOutputStream (); os = s1.getOutputStream ();
is.read (); is.read ();
os.write (reply3.getBytes()); os.write (reply3.getBytes());
os.close();
} }
catch (Exception e) { catch (Exception e) {
/* Just need thread to terminate */ /* Just need thread to terminate */
} finally {
try { s.close(); } catch (IOException unused) {}
} }
} }
}; };
......
...@@ -109,8 +109,11 @@ public class ResendPostBody { ...@@ -109,8 +109,11 @@ public class ResendPostBody {
while (!finished()) { while (!finished()) {
Thread.sleep (1000); Thread.sleep (1000);
} }
out.close();
} catch (Exception e) { } catch (Exception e) {
System.err.println ("Server Exception: " + e); System.err.println ("Server Exception: " + e);
} finally {
try { server.close(); } catch (IOException unused) {}
} }
} }
} }
...@@ -134,7 +137,7 @@ public class ResendPostBody { ...@@ -134,7 +137,7 @@ public class ResendPostBody {
public void execute () throws Exception { public void execute () throws Exception {
byte b[] = "X=ABCDEFGHZZZ".getBytes(); byte b[] = "X=ABCDEFGHZZZ".getBytes();
ss = new ServerSocket (0); ss = new ServerSocket (0);
server = new Server (ss); server = new Server (ss);
...@@ -163,8 +166,9 @@ public class ResendPostBody { ...@@ -163,8 +166,9 @@ public class ResendPostBody {
/* Read the response */ /* Read the response */
int resp = conURL.getResponseCode (); int resp = conURL.getResponseCode ();
server.setFinished (true);
if (resp != 200) if (resp != 200)
throw new RuntimeException ("Response code was not 200: " + resp); throw new RuntimeException ("Response code was not 200: " + resp);
server.setFinished (true);
} }
} }
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
/* @test /* @test
* @bug 4397096 * @bug 4397096
* @run main SetIfModifiedSince * @run main/othervm SetIfModifiedSince
* @summary setIfModifiedSince() of HttpURLConnection sets invalid date of default locale * @summary setIfModifiedSince() of HttpURLConnection sets invalid date of default locale
*/ */
......
...@@ -43,8 +43,9 @@ public class TimeoutTest { ...@@ -43,8 +43,9 @@ public class TimeoutTest {
try { try {
Socket s = server.accept (); Socket s = server.accept ();
while (!finished ()) { while (!finished ()) {
Thread.sleep (2000); Thread.sleep (1000);
} }
s.close();
} catch (Exception e) { } catch (Exception e) {
} }
} }
...@@ -70,9 +71,12 @@ public class TimeoutTest { ...@@ -70,9 +71,12 @@ public class TimeoutTest {
URL url = new URL ("http://127.0.0.1:"+ss.getLocalPort()); URL url = new URL ("http://127.0.0.1:"+ss.getLocalPort());
URLConnection urlc = url.openConnection (); URLConnection urlc = url.openConnection ();
InputStream is = urlc.getInputStream (); InputStream is = urlc.getInputStream ();
throw new RuntimeException("Should have received timeout");
} catch (SocketTimeoutException e) { } catch (SocketTimeoutException e) {
s.done ();
return; return;
} finally {
s.done();
ss.close();
} }
} }
} }
...@@ -70,8 +70,10 @@ public class URLConnectionHeaders { ...@@ -70,8 +70,10 @@ public class URLConnectionHeaders {
w.newLine(); w.newLine();
w.flush(); w.flush();
s.close (); s.close ();
srv.close (); // or else the HTTPURLConnection will retry } catch (IOException e) { e.printStackTrace();
} catch (IOException e) { e.printStackTrace();} } finally {
try { srv.close(); } catch (IOException unused) {}
}
} }
} }
......
...@@ -58,6 +58,14 @@ public class ZeroContentLength { ...@@ -58,6 +58,14 @@ public class ZeroContentLength {
contentLength = cl; contentLength = cl;
} }
static synchronized String getResponse() {
return response;
}
static synchronized int getContentLength() {
return contentLength;
}
/* /*
* Worker thread to service single connection - can service * Worker thread to service single connection - can service
* multiple http requests on same connection. * multiple http requests on same connection.
...@@ -71,25 +79,44 @@ public class ZeroContentLength { ...@@ -71,25 +79,44 @@ public class ZeroContentLength {
this.id = id; this.id = id;
} }
final int CR = '\r';
final int LF = '\n';
public void run() { public void run() {
try { try {
s.setSoTimeout(2000); s.setSoTimeout(2000);
int max = 100; int max = 20; // there should only be 20 connections
InputStream in = new BufferedInputStream(s.getInputStream());
for (;;) { for (;;) {
// read entire request from client, until CR LF CR LF
// read entire request from client int c, total=0;
byte b[] = new byte[100];
InputStream in = s.getInputStream();
int n, total=0;
try { try {
do { while ((c = in.read()) > 0) {
n = in.read(b); total++;
if (n > 0) total += n; if (c == CR) {
} while (n > 0); if ((c = in.read()) > 0) {
} catch (SocketTimeoutException e) { } total++;
if (c == LF) {
if ((c = in.read()) > 0) {
total++;
if (c == CR) {
if ((c = in.read()) > 0) {
total++;
if (c == LF) {
break;
}
}
}
}
}
}
}
}
} catch (SocketTimeoutException e) {}
debug("worker " + id + debug("worker " + id +
": Read request from client " + ": Read request from client " +
...@@ -105,19 +132,20 @@ public class ZeroContentLength { ...@@ -105,19 +132,20 @@ public class ZeroContentLength {
new BufferedOutputStream( new BufferedOutputStream(
s.getOutputStream() )); s.getOutputStream() ));
out.print("HTTP/1.1 " + response + "\r\n"); out.print("HTTP/1.1 " + getResponse() + "\r\n");
if (contentLength >= 0) { int clen = getContentLength();
out.print("Content-Length: " + contentLength + if (clen >= 0) {
out.print("Content-Length: " + clen +
"\r\n"); "\r\n");
} }
out.print("\r\n"); out.print("\r\n");
for (int i=0; i<contentLength; i++) { for (int i=0; i<clen; i++) {
out.write( (byte)'.' ); out.write( (byte)'.' );
} }
out.flush(); out.flush();
debug("worked " + id + debug("worked " + id +
": Sent response to client, length: " + contentLength); ": Sent response to client, length: " + clen);
if (--max == 0) { if (--max == 0) {
s.close(); s.close();
......
...@@ -58,6 +58,8 @@ public class B6521014 { ...@@ -58,6 +58,8 @@ public class B6521014 {
Enumeration e = NetworkInterface.getNetworkInterfaces(); Enumeration e = NetworkInterface.getNetworkInterfaces();
while (e.hasMoreElements()) { while (e.hasMoreElements()) {
NetworkInterface ifc = (NetworkInterface) e.nextElement(); NetworkInterface ifc = (NetworkInterface) e.nextElement();
if (!ifc.isUp())
continue;
Enumeration addrs = ifc.getInetAddresses(); Enumeration addrs = ifc.getInetAddresses();
while (addrs.hasMoreElements()) { while (addrs.hasMoreElements()) {
InetAddress a = (InetAddress)addrs.nextElement(); InetAddress a = (InetAddress)addrs.nextElement();
......
...@@ -38,7 +38,6 @@ public class TcpTest extends Tests { ...@@ -38,7 +38,6 @@ public class TcpTest extends Tests {
static InetAddress ia4any; static InetAddress ia4any;
static InetAddress ia6any; static InetAddress ia6any;
static Inet6Address ia6addr; static Inet6Address ia6addr;
static InetAddress ia6bad; /* a global 6to4 IPv6 address, which cant be connected to */
static Inet4Address ia4addr; static Inet4Address ia4addr;
static { static {
...@@ -47,14 +46,6 @@ public class TcpTest extends Tests { ...@@ -47,14 +46,6 @@ public class TcpTest extends Tests {
try { try {
ia4any = InetAddress.getByName ("0.0.0.0"); ia4any = InetAddress.getByName ("0.0.0.0");
ia6any = InetAddress.getByName ("::0"); ia6any = InetAddress.getByName ("::0");
if (ia6addr != null) {
int scope = ia6addr.getScopeId();
if (scope != 0) {
ia6bad = InetAddress.getByName ("fe80::1:2:3:4:5:6%"+scope);
}
} else {
ia6bad = InetAddress.getByName ("fe80::1:2:3:4:5:6");
}
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
...@@ -69,7 +60,6 @@ public class TcpTest extends Tests { ...@@ -69,7 +60,6 @@ public class TcpTest extends Tests {
dprintln ("Local Addresses"); dprintln ("Local Addresses");
dprintln (ia4addr.toString()); dprintln (ia4addr.toString());
dprintln (ia6addr.toString()); dprintln (ia6addr.toString());
dprintln ("Bad address: " + ia6bad);
test1 (0); test1 (0);
test1 (5100); test1 (5100);
test2(); test2();
...@@ -224,19 +214,6 @@ public class TcpTest extends Tests { ...@@ -224,19 +214,6 @@ public class TcpTest extends Tests {
c1.close (); c2.close(); c1.close (); c2.close();
s1.close (); s2.close(); s1.close (); s2.close();
/* check if connect() timesout when connecting to unknown dest. */
c1 = new Socket();
t1 = System.currentTimeMillis();
InetSocketAddress ad1 = new InetSocketAddress (ia6bad, 2500);
try {
c1.connect (ad1, 5000);
throw new RuntimeException ("timeout exception was expected");
} catch (SocketTimeoutException e) {
t1 = System.currentTimeMillis() - t1;
checkTime (t1, 5000);
} catch (NoRouteToHostException e1) {
}
System.out.println ("Test3: OK"); System.out.println ("Test3: OK");
} }
......
...@@ -134,11 +134,11 @@ public class Tests { ...@@ -134,11 +134,11 @@ public class Tests {
} }
} }
/* check the time got is within 20% of the time expected */ /* check the time got is within 50% of the time expected */
public static void checkTime (long got, long expected) { public static void checkTime (long got, long expected) {
dprintln ("checkTime: got " + got + " expected " + expected); dprintln ("checkTime: got " + got + " expected " + expected);
long upper = expected + (expected / 5); long upper = expected + (expected / 2);
long lower = expected - (expected / 5); long lower = expected - (expected / 2);
if (got > upper || got < lower) { if (got > upper || got < lower) {
throw new RuntimeException ("checkTime failed: got " + got + " expected " + expected); throw new RuntimeException ("checkTime failed: got " + got + " expected " + expected);
} }
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
*/ */
/* @test /* @test
* @bug 4462336 * @bug 4462336 6799037
* @summary Simple MappedByteBuffer tests * @summary Simple MappedByteBuffer tests
* @run main/othervm Basic * @run main/othervm Basic
*/ */
...@@ -52,6 +52,12 @@ public class Basic { ...@@ -52,6 +52,12 @@ public class Basic {
mbb.force(); mbb.force();
if (!mbb.isReadOnly()) if (!mbb.isReadOnly())
throw new RuntimeException("Incorrect isReadOnly"); throw new RuntimeException("Incorrect isReadOnly");
// repeat with unaligned position in file
mbb = fc.map(FileChannel.MapMode.READ_ONLY, 1, 10);
mbb.load();
mbb.isLoaded();
mbb.force();
fc.close(); fc.close();
fis.close(); fis.close();
......
/*
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/* @test
* @bug 6934977
* @summary Test MappedByteBuffer operations after mapped bye buffer becomes
* inaccessible
* @run main/othervm Truncate
*/
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
import java.util.concurrent.Callable;
public class Truncate {
static final long INITIAL_FILE_SIZE = 32000L;
static final long TRUNCATED_FILE_SIZE = 512L;
public static void main(String[] args) throws Exception {
File blah = File.createTempFile("blah", null);
blah.deleteOnExit();
final FileChannel fc = new RandomAccessFile(blah, "rw").getChannel();
fc.position(INITIAL_FILE_SIZE).write(ByteBuffer.wrap("THE END".getBytes()));
final MappedByteBuffer mbb =
fc.map(FileChannel.MapMode.READ_WRITE, 0, fc.size());
boolean truncated;
try {
fc.truncate(TRUNCATED_FILE_SIZE);
truncated = true;
} catch (IOException ioe) {
// probably on Windows where a file cannot be truncated when
// there is a file mapping.
truncated = false;
}
if (truncated) {
// Test 1: access region that is no longer accessible
execute(new Callable<Void>() {
public Void call() {
mbb.get((int)TRUNCATED_FILE_SIZE + 1);
mbb.put((int)TRUNCATED_FILE_SIZE + 2, (byte)123);
return null;
}
});
// Test 2: load buffer into memory
execute(new Callable<Void>() {
public Void call() throws IOException {
mbb.load();
return null;
}
});
}
fc.close();
}
// Runs the given task in its own thread. If operating correcting the
// the thread will terminate with an InternalError as the mapped buffer
// is inaccessible.
static void execute(final Callable<?> c) {
Runnable r = new Runnable() {
public void run() {
try {
Object ignore = c.call();
} catch (Exception ignore) {
}
}
};
Thread t = new Thread(r);
t.start();
try { t.join(); } catch (InterruptedException ignore) { }
}
}
/*
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/* @test
* @summary Test socket adapter sendUrgentData method
* @bug 6963907
*/
import java.net.*;
import java.nio.ByteBuffer;
import java.nio.channels.*;
import java.io.IOException;
import java.util.Random;
public class OutOfBand {
private static final Random rand = new Random();
public static void main(String[] args) throws Exception {
ServerSocketChannel ssc = null;
SocketChannel sc1 = null;
SocketChannel sc2 = null;
try {
// establish loopback connection
ssc = ServerSocketChannel.open().bind(new InetSocketAddress(0));
InetAddress lh = InetAddress.getLocalHost();
SocketAddress remote =
new InetSocketAddress(lh, ssc.socket().getLocalPort());
sc1 = SocketChannel.open(remote);
sc2 = ssc.accept();
// enable SO_OOBLINE on server side
sc2.socket().setOOBInline(true);
// run tests
test1(sc1, sc2);
test2(sc1, sc2);
test3(sc1, sc2);
test4(sc1);
} finally {
if (sc1 != null) sc1.close();
if (sc2 != null) sc2.close();
if (ssc != null) ssc.close();
}
}
/**
* Basic test to check that OOB/TCP urgent byte is received.
*/
static void test1(SocketChannel client, SocketChannel server)
throws Exception
{
assert server.socket().getOOBInline();
ByteBuffer bb = ByteBuffer.allocate(100);
for (int i=0; i<1000; i++) {
int b1 = -127 + rand.nextInt(384);
client.socket().sendUrgentData(b1);
bb.clear();
if (server.read(bb) != 1)
throw new RuntimeException("One byte expected");
bb.flip();
byte b2 = bb.get();
if ((byte)b1 != b2)
throw new RuntimeException("Unexpected byte");
}
}
/**
* Basic test to check that OOB/TCP urgent byte is received, maybe with
* OOB mark changing.
*/
static void test2(final SocketChannel client, SocketChannel server)
throws Exception
{
assert server.socket().getOOBInline();
Runnable sender = new Runnable() {
public void run() {
try {
for (int i=0; i<256; i++)
client.socket().sendUrgentData(i);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
};
Thread thr = new Thread(sender);
thr.start();
ByteBuffer bb = ByteBuffer.allocate(256);
while (bb.hasRemaining()) {
if (server.read(bb) < 0)
throw new RuntimeException("Unexpected EOF");
}
bb.flip();
byte expect = 0;
while (bb.hasRemaining()) {
if (bb.get() != expect)
throw new RuntimeException("Unexpected byte");
expect++;
}
thr.join();
}
/**
* Test that is close to some real world examples where an urgent byte is
* used to "cancel" a long running query or transaction on the server.
*/
static void test3(SocketChannel client, final SocketChannel server)
throws Exception
{
final int STOP = rand.nextInt(256);
assert server.socket().getOOBInline();
Runnable reader = new Runnable() {
public void run() {
ByteBuffer bb = ByteBuffer.allocate(100);
try {
int n = server.read(bb);
if (n != 1) {
String msg = (n < 0) ? "Unexpected EOF" :
"One byte expected";
throw new RuntimeException(msg);
}
bb.flip();
if (bb.get() != (byte)STOP)
throw new RuntimeException("Unexpected byte");
bb.flip();
server.write(bb);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
};
Thread thr = new Thread(reader);
thr.start();
// "stop" server
client.socket().sendUrgentData(STOP);
// wait for server reply
ByteBuffer bb = ByteBuffer.allocate(100);
int n = client.read(bb);
if (n != 1)
throw new RuntimeException("Unexpected number of bytes");
bb.flip();
if (bb.get() != (byte)STOP)
throw new RuntimeException("Unexpected reply");
thr.join();
}
static void test4(SocketChannel sc) throws IOException {
boolean blocking = sc.isBlocking();
sc.configureBlocking(false);
try {
sc.socket().sendUrgentData(0);
throw new RuntimeException("IllegalBlockingModeException expected");
} catch (IllegalBlockingModeException x) {
// expected
} finally {
sc.configureBlocking(blocking);
}
}
}
...@@ -23,24 +23,32 @@ ...@@ -23,24 +23,32 @@
import java.util.logging.*; import java.util.logging.*;
public class AnonLoggerWeakRefLeak { public class AnonLoggerWeakRefLeak extends SimpleApplication {
public static int DEFAULT_LOOP_TIME = 60; // time is in seconds // The test driver script will allow this program to run until we
// reach DEFAULT_LOOP_TIME or a decrease in instance counts is
// observed. For this particular WeakReference leak, the count
// was always observed to be increasing so if we get a decreasing
// count, then the leak is fixed in the bits being tested.
// Two minutes has been enough time to observe a decrease in
// fixed bits on overloaded systems, but the test will likely
// finish more quickly.
public static int DEFAULT_LOOP_TIME = 120; // time is in seconds
public static void main(String[] args) { // execute the AnonLoggerWeakRefLeak app work
public void doMyAppWork(String[] args) throws Exception {
int loop_time = 0; int loop_time = 0;
int max_loop_time = DEFAULT_LOOP_TIME; int max_loop_time = DEFAULT_LOOP_TIME;
if (args.length == 0) { // args[0] is the port-file
if (args.length < 2) {
System.out.println("INFO: using default time of " System.out.println("INFO: using default time of "
+ max_loop_time + " seconds."); + max_loop_time + " seconds.");
} else { } else {
try { try {
max_loop_time = Integer.parseInt(args[0]); max_loop_time = Integer.parseInt(args[1]);
} catch (NumberFormatException nfe) { } catch (NumberFormatException nfe) {
System.err.println("Error: '" + args[0] throw new RuntimeException("Error: '" + args[1]
+ "': is not a valid seconds value."); + "': is not a valid seconds value.");
System.err.println("Usage: AnonLoggerWeakRefLeak [seconds]");
System.exit(1);
} }
} }
...@@ -73,4 +81,12 @@ public class AnonLoggerWeakRefLeak { ...@@ -73,4 +81,12 @@ public class AnonLoggerWeakRefLeak {
System.out.println("INFO: final loop count = " + count); System.out.println("INFO: final loop count = " + count);
} }
public static void main(String[] args) throws Exception {
AnonLoggerWeakRefLeak myApp = new AnonLoggerWeakRefLeak();
SimpleApplication.setMyApp(myApp);
SimpleApplication.main(args);
}
} }
#!/bin/sh
# #
# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
...@@ -23,76 +25,24 @@ ...@@ -23,76 +25,24 @@
# @test # @test
# @bug 6942989 # @bug 6942989
# @ignore until 6964018 is fixed
# @summary Check for WeakReference leak in anonymous Logger objects # @summary Check for WeakReference leak in anonymous Logger objects
# @author Daniel D. Daugherty # @author Daniel D. Daugherty
# #
# @run build AnonLoggerWeakRefLeak # @library ../../../sun/tools/common
# @run shell/timeout=180 AnonLoggerWeakRefLeak.sh # @build SimpleApplication ShutdownSimpleApplication
# @build AnonLoggerWeakRefLeak
# @run shell/timeout=240 AnonLoggerWeakRefLeak.sh
# The timeout is: 2 minutes for infrastructure and 1 minute for the test # The timeout is: 2 minutes for infrastructure and 2 minutes for the test
# #
if [ "${TESTJAVA}" = "" ] . ${TESTSRC}/../../../sun/tools/common/CommonSetup.sh
then . ${TESTSRC}/../../../sun/tools/common/ApplicationSetup.sh
echo "TESTJAVA not set. Test cannot execute. Failed."
exit 1
fi
if [ "${TESTSRC}" = "" ]
then
echo "TESTSRC not set. Test cannot execute. Failed."
exit 1
fi
if [ "${TESTCLASSES}" = "" ]
then
echo "TESTCLASSES not set. Test cannot execute. Failed."
exit 1
fi
JAVA="${TESTJAVA}"/bin/java
JMAP="${TESTJAVA}"/bin/jmap
JPS="${TESTJAVA}"/bin/jps
set -eu
TEST_NAME="AnonLoggerWeakRefLeak" TEST_NAME="AnonLoggerWeakRefLeak"
TARGET_CLASS="java\.lang\.ref\.WeakReference" TARGET_CLASS="java\.lang\.ref\.WeakReference"
is_cygwin=false
is_mks=false
is_windows=false
case `uname -s` in
CYGWIN*)
is_cygwin=true
is_windows=true
;;
Windows_*)
is_mks=true
is_windows=true
;;
*)
;;
esac
# wrapper for grep
#
grep_cmd() {
set +e
if $is_windows; then
# need dos2unix to get rid of CTRL-M chars from java output
dos2unix | grep "$@"
status="$?"
else
grep "$@"
status="$?"
fi
set -e
}
# MAIN begins here # MAIN begins here
# #
...@@ -105,62 +55,64 @@ fi ...@@ -105,62 +55,64 @@ fi
# see if this version of jmap supports the '-histo:live' option # see if this version of jmap supports the '-histo:live' option
jmap_option="-histo:live" jmap_option="-histo:live"
set +e set +e
"${JMAP}" "$jmap_option" 0 > "$TEST_NAME.jmap" 2>&1 "${JMAP}" 2>&1 | grep ':live' > /dev/null 2>&1
grep '^Usage: ' "$TEST_NAME.jmap" > /dev/null 2>&1
status="$?" status="$?"
set -e set -e
if [ "$status" = 0 ]; then if [ "$status" != 0 ]; then
echo "INFO: switching jmap option from '$jmap_option'\c" # usage message doesn't show ':live' option
jmap_option="-histo"
echo " to '$jmap_option'." if $isWindows; then
fi # If SA isn't present, then jmap gives a different usage message
# that doesn't show the ':live' option. However, that's a bug that
"${JAVA}" ${TESTVMOPTS} -classpath "${TESTCLASSES}" \ # is covered by 6971851 so we try using the option just to be sure.
"$TEST_NAME" $seconds > "$TEST_NAME.log" 2>&1 & # For some reason, this problem has only been seen on OpenJDK6 on
test_pid="$!" # Windows. Not sure why.
echo "INFO: starting $TEST_NAME as pid = $test_pid" set +e
# Note: Don't copy this code to try probing process 0 on Linux; it
# wait for test program to get going # will kill the process group in strange ways.
count=0 "${JMAP}" "$jmap_option" 0 2>&1 | grep 'Usage' > /dev/null 2>&1
while [ "$count" -lt 30 ]; do status="$?"
sleep 2 set -e
grep_cmd '^INFO: call count = 0$' < "$TEST_NAME.log" > /dev/null 2>&1 if [ "$status" = 0 ]; then
if [ "$status" = 0 ]; then # Usage message generated so flag the problem.
break status=1
else
# No usage message so clear the flag.
status=0
fi
fi fi
count=`expr $count + 1`
done
if [ "$count" -ge 30 ]; then if [ "$status" != 0 ]; then
echo "ERROR: $TEST_NAME failed to get going." >&2 echo "ERROR: 'jmap $jmap_option' is not supported so this test"
echo "INFO: killing $test_pid" echo "ERROR: cannot work reliably. Aborting!"
kill "$test_pid"
exit 1
elif [ "$count" -gt 1 ]; then
echo "INFO: $TEST_NAME took $count loops to start."
fi
if $is_cygwin; then
# We need the Windows pid for jmap and not the Cygwin pid.
# Note: '\t' works on Cygwin, but doesn't seem to work on Solaris.
jmap_pid=`"${JPS}"| grep_cmd "[ \t]$TEST_NAME$" | sed 's/[ \t].*//'`
if [ -z "$jmap_pid" ]; then
echo "FAIL: jps could not map Cygwin pid to Windows pid." >&2
echo "INFO: killing $test_pid"
kill "$test_pid"
exit 2 exit 2
fi fi
echo "INFO: pid = $test_pid maps to Windows pid = $jmap_pid"
else
jmap_pid="$test_pid"
fi fi
# Start application and use TEST_NAME.port for coordination
startApplication "$TEST_NAME" "$TEST_NAME.port" $seconds
finished_early=false
decreasing_cnt=0 decreasing_cnt=0
increasing_cnt=0 increasing_cnt=0
loop_cnt=0 loop_cnt=0
prev_instance_cnt=0 prev_instance_cnt=0
MAX_JMAP_TRY_CNT=10
jmap_retry_cnt=0
loop_cnt_on_retry=0
while true; do while true; do
# see if the target process has finished its run and bail if it has
set +e
grep "^INFO: final loop count = " "$appOutput" > /dev/null 2>&1
status="$?"
set -e
if [ "$status" = 0 ]; then
break
fi
# Output format for 'jmap -histo' in JDK1.5.0: # Output format for 'jmap -histo' in JDK1.5.0:
# #
# <#bytes> <#instances> <class_name> # <#bytes> <#instances> <class_name>
...@@ -170,38 +122,70 @@ while true; do ...@@ -170,38 +122,70 @@ while true; do
# <num>: <#instances> <#bytes> <class_name> # <num>: <#instances> <#bytes> <class_name>
# #
set +e set +e
"${JMAP}" "$jmap_option" "$jmap_pid" > "$TEST_NAME.jmap" 2>&1 "${JMAP}" "$jmap_option" "$appJavaPid" > "$TEST_NAME.jmap" 2>&1
status="$?" status="$?"
set -e set -e
if [ "$status" != 0 ]; then if [ "$status" != 0 ]; then
echo "INFO: jmap exited with exit code = $status" echo "INFO: jmap exited with exit code = $status"
if [ "$loop_cnt" = 0 ]; then
echo "INFO: on the first iteration so no samples were taken." # There are intermittent jmap failures; see 6498448.
echo "INFO: start of jmap output:" #
cat "$TEST_NAME.jmap" # So far the following have been observed in a jmap call
echo "INFO: end of jmap output." # that was not in a race with target process termination:
#
# (Solaris specific, 2nd sample)
# <pid>: Unable to open door: target process not responding or HotSpot VM not loaded
# The -F option can be used when the target process is not responding
#
# (on Solaris so far)
# java.io.IOException
#
# (on Solaris so far, 1st sample)
# <pid>: Permission denied
#
sed 's/^/INFO: /' "$TEST_NAME.jmap"
if [ "$loop_cnt" = "$loop_cnt_on_retry" ]; then
# loop count hasn't changed
jmap_retry_cnt=`expr $jmap_retry_cnt + 1`
else
# loop count has changed so remember it
jmap_retry_cnt=1
loop_cnt_on_retry="$loop_cnt"
fi
# This is '-ge' because we have the original attempt plus
# MAX_JMAP_TRY_CNT - 1 retries.
if [ "$jmap_retry_cnt" -ge "$MAX_JMAP_TRY_CNT" ]; then
echo "INFO: jmap failed $MAX_JMAP_TRY_CNT times in a row" \
"without making any progress."
echo "FAIL: jmap is unable to take any samples." >&2 echo "FAIL: jmap is unable to take any samples." >&2
echo "INFO: killing $test_pid" killApplication
kill "$test_pid"
exit 2 exit 2
fi fi
echo "INFO: The likely reason is that $TEST_NAME has finished running."
break # short delay and try again
# Note: sleep 1 didn't help with "<pid>: Permission denied"
sleep 2
echo "INFO: retrying jmap (retry=$jmap_retry_cnt, loop=$loop_cnt)."
continue
fi fi
instance_cnt=`grep_cmd "[ ]$TARGET_CLASS$" \ set +e
< "$TEST_NAME.jmap" \ instance_cnt=`grep "${PATTERN_WS}${TARGET_CLASS}${PATTERN_EOL}" \
"$TEST_NAME.jmap" \
| sed ' | sed '
# strip leading whitespace; does nothing in JDK1.5.0 # strip leading whitespace; does nothing in JDK1.5.0
s/^[ ][ ]*// s/^'"${PATTERN_WS}${PATTERN_WS}"'*//
# strip <#bytes> in JDK1.5.0; does nothing otherwise # strip <#bytes> in JDK1.5.0; does nothing otherwise
s/^[1-9][0-9]*[ ][ ]*// s/^[1-9][0-9]*'"${PATTERN_WS}${PATTERN_WS}"'*//
# strip <num>: field; does nothing in JDK1.5.0 # strip <num>: field; does nothing in JDK1.5.0
s/^[1-9][0-9]*:[ ][ ]*// s/^[1-9][0-9]*:'"${PATTERN_WS}${PATTERN_WS}"'*//
# strip <class_name> field # strip <class_name> field
s/[ ].*// s/'"${PATTERN_WS}"'.*//
'` '`
set -e
if [ -z "$instance_cnt" ]; then if [ -z "$instance_cnt" ]; then
echo "INFO: instance count is unexpectedly empty" echo "INFO: instance count is unexpectedly empty"
if [ "$loop_cnt" = 0 ]; then if [ "$loop_cnt" = 0 ]; then
...@@ -211,8 +195,7 @@ while true; do ...@@ -211,8 +195,7 @@ while true; do
cat "$TEST_NAME.jmap" cat "$TEST_NAME.jmap"
echo "INFO: end of jmap output." echo "INFO: end of jmap output."
echo "FAIL: cannot find the instance count value." >&2 echo "FAIL: cannot find the instance count value." >&2
echo "INFO: killing $test_pid" killApplication
kill "$test_pid"
exit 2 exit 2
fi fi
else else
...@@ -221,7 +204,17 @@ while true; do ...@@ -221,7 +204,17 @@ while true; do
if [ "$instance_cnt" -gt "$prev_instance_cnt" ]; then if [ "$instance_cnt" -gt "$prev_instance_cnt" ]; then
increasing_cnt=`expr $increasing_cnt + 1` increasing_cnt=`expr $increasing_cnt + 1`
else else
# actually decreasing or the same
decreasing_cnt=`expr $decreasing_cnt + 1` decreasing_cnt=`expr $decreasing_cnt + 1`
# For this particular WeakReference leak, the count was
# always observed to be increasing so if we get a decreasing
# or the same count, then the leak is fixed in the bits
# being tested.
echo "INFO: finishing early due to non-increasing instance count."
finished_early=true
killApplication
break
fi fi
prev_instance_cnt="$instance_cnt" prev_instance_cnt="$instance_cnt"
fi fi
...@@ -232,8 +225,22 @@ while true; do ...@@ -232,8 +225,22 @@ while true; do
loop_cnt=`expr $loop_cnt + 1` loop_cnt=`expr $loop_cnt + 1`
done done
if [ $finished_early = false ]; then
stopApplication "$TEST_NAME.port"
waitForApplication
fi
echo "INFO: $TEST_NAME has finished running."
echo "INFO: increasing_cnt = $increasing_cnt" echo "INFO: increasing_cnt = $increasing_cnt"
echo "INFO: decreasing_cnt = $decreasing_cnt" echo "INFO: decreasing_cnt = $decreasing_cnt"
if [ "$jmap_retry_cnt" -gt 0 ]; then
echo "INFO: jmap_retry_cnt = $jmap_retry_cnt (in $loop_cnt iterations)"
fi
if [ "$loop_cnt" = 0 ]; then
echo "FAIL: jmap is unable to take any samples." >&2
exit 2
fi
echo "INFO: The instance count of" `eval echo $TARGET_CLASS` "objects" echo "INFO: The instance count of" `eval echo $TARGET_CLASS` "objects"
if [ "$decreasing_cnt" = 0 ]; then if [ "$decreasing_cnt" = 0 ]; then
...@@ -242,6 +249,6 @@ if [ "$decreasing_cnt" = 0 ]; then ...@@ -242,6 +249,6 @@ if [ "$decreasing_cnt" = 0 ]; then
exit 2 exit 2
fi fi
echo "INFO: is both increasing and decreasing." echo "INFO: is not always increasing."
echo "PASS: This indicates that there is not a memory leak." echo "PASS: This indicates that there is not a memory leak."
exit 0 exit 0
...@@ -23,27 +23,32 @@ ...@@ -23,27 +23,32 @@
import java.util.logging.*; import java.util.logging.*;
public class LoggerWeakRefLeak { public class LoggerWeakRefLeak extends SimpleApplication {
// AnonLoggerWeakRefLeak checks for one weak reference leak. // The test driver script will allow this program to run until we
// LoggerWeakRefLeak checks for two weak reference leaks so // reach DEFAULT_LOOP_TIME or a decrease in instance counts is
// this test runs twice as long, by default. // observed. For these particular WeakReference leaks, the count
// was always observed to be increasing so if we get a decreasing
// count, then the leaks are fixed in the bits being tested.
// Two minutes has been enough time to observe a decrease in
// fixed bits on overloaded systems, but the test will likely
// finish more quickly.
public static int DEFAULT_LOOP_TIME = 120; // time is in seconds public static int DEFAULT_LOOP_TIME = 120; // time is in seconds
public static void main(String[] args) { // execute the LoggerWeakRefLeak app work
public void doMyAppWork(String[] args) throws Exception {
int loop_time = 0; int loop_time = 0;
int max_loop_time = DEFAULT_LOOP_TIME; int max_loop_time = DEFAULT_LOOP_TIME;
if (args.length == 0) { // args[0] is the port-file
if (args.length < 2) {
System.out.println("INFO: using default time of " System.out.println("INFO: using default time of "
+ max_loop_time + " seconds."); + max_loop_time + " seconds.");
} else { } else {
try { try {
max_loop_time = Integer.parseInt(args[0]); max_loop_time = Integer.parseInt(args[1]);
} catch (NumberFormatException nfe) { } catch (NumberFormatException nfe) {
System.err.println("Error: '" + args[0] throw new RuntimeException("Error: '" + args[1]
+ "': is not a valid seconds value."); + "': is not a valid seconds value.");
System.err.println("Usage: LoggerWeakRefLeak [seconds]");
System.exit(1);
} }
} }
...@@ -86,4 +91,12 @@ public class LoggerWeakRefLeak { ...@@ -86,4 +91,12 @@ public class LoggerWeakRefLeak {
System.out.println("INFO: final loop count = " + count); System.out.println("INFO: final loop count = " + count);
} }
public static void main(String[] args) throws Exception {
AnonLoggerWeakRefLeak myApp = new AnonLoggerWeakRefLeak();
SimpleApplication.setMyApp(myApp);
SimpleApplication.main(args);
}
} }
#!/bin/sh
# #
# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
...@@ -23,76 +25,24 @@ ...@@ -23,76 +25,24 @@
# @test # @test
# @bug 6942989 # @bug 6942989
# @ignore until 6964018 is fixed
# @summary Check for WeakReference leak in Logger objects # @summary Check for WeakReference leak in Logger objects
# @author Daniel D. Daugherty # @author Daniel D. Daugherty
# #
# @run build LoggerWeakRefLeak # @library ../../../sun/tools/common
# @build SimpleApplication ShutdownSimpleApplication
# @build LoggerWeakRefLeak
# @run shell/timeout=240 LoggerWeakRefLeak.sh # @run shell/timeout=240 LoggerWeakRefLeak.sh
# The timeout is: 2 minutes for infrastructure and 1 minute for the test # The timeout is: 2 minutes for infrastructure and 2 minutes for the test
# #
if [ "${TESTJAVA}" = "" ] . ${TESTSRC}/../../../sun/tools/common/CommonSetup.sh
then . ${TESTSRC}/../../../sun/tools/common/ApplicationSetup.sh
echo "TESTJAVA not set. Test cannot execute. Failed."
exit 1
fi
if [ "${TESTSRC}" = "" ]
then
echo "TESTSRC not set. Test cannot execute. Failed."
exit 1
fi
if [ "${TESTCLASSES}" = "" ]
then
echo "TESTCLASSES not set. Test cannot execute. Failed."
exit 1
fi
JAVA="${TESTJAVA}"/bin/java
JMAP="${TESTJAVA}"/bin/jmap
JPS="${TESTJAVA}"/bin/jps
set -eu
TEST_NAME="LoggerWeakRefLeak" TEST_NAME="LoggerWeakRefLeak"
TARGET_CLASS="java\.lang\.ref\.WeakReference" TARGET_CLASS="java\.lang\.ref\.WeakReference"
is_cygwin=false
is_mks=false
is_windows=false
case `uname -s` in
CYGWIN*)
is_cygwin=true
is_windows=true
;;
Windows_*)
is_mks=true
is_windows=true
;;
*)
;;
esac
# wrapper for grep
#
grep_cmd() {
set +e
if $is_windows; then
# need dos2unix to get rid of CTRL-M chars from java output
dos2unix | grep "$@"
status="$?"
else
grep "$@"
status="$?"
fi
set -e
}
# MAIN begins here # MAIN begins here
# #
...@@ -105,62 +55,64 @@ fi ...@@ -105,62 +55,64 @@ fi
# see if this version of jmap supports the '-histo:live' option # see if this version of jmap supports the '-histo:live' option
jmap_option="-histo:live" jmap_option="-histo:live"
set +e set +e
"${JMAP}" "$jmap_option" 0 > "$TEST_NAME.jmap" 2>&1 "${JMAP}" 2>&1 | grep ':live' > /dev/null 2>&1
grep '^Usage: ' "$TEST_NAME.jmap" > /dev/null 2>&1
status="$?" status="$?"
set -e set -e
if [ "$status" = 0 ]; then if [ "$status" != 0 ]; then
echo "INFO: switching jmap option from '$jmap_option'\c" # usage message doesn't show ':live' option
jmap_option="-histo"
echo " to '$jmap_option'." if $isWindows; then
fi # If SA isn't present, then jmap gives a different usage message
# that doesn't show the ':live' option. However, that's a bug that
"${JAVA}" ${TESTVMOPTS} -classpath "${TESTCLASSES}" \ # is covered by 6971851 so we try using the option just to be sure.
"$TEST_NAME" $seconds > "$TEST_NAME.log" 2>&1 & # For some reason, this problem has only been seen on OpenJDK6 on
test_pid="$!" # Windows. Not sure why.
echo "INFO: starting $TEST_NAME as pid = $test_pid" set +e
# Note: Don't copy this code to try probing process 0 on Linux; it
# wait for test program to get going # will kill the process group in strange ways.
count=0 "${JMAP}" "$jmap_option" 0 2>&1 | grep 'Usage' > /dev/null 2>&1
while [ "$count" -lt 30 ]; do status="$?"
sleep 2 set -e
grep_cmd '^INFO: call count = 0$' < "$TEST_NAME.log" > /dev/null 2>&1 if [ "$status" = 0 ]; then
if [ "$status" = 0 ]; then # Usage message generated so flag the problem.
break status=1
else
# No usage message so clear the flag.
status=0
fi
fi fi
count=`expr $count + 1`
done
if [ "$count" -ge 30 ]; then if [ "$status" != 0 ]; then
echo "ERROR: $TEST_NAME failed to get going." >&2 echo "ERROR: 'jmap $jmap_option' is not supported so this test"
echo "INFO: killing $test_pid" echo "ERROR: cannot work reliably. Aborting!"
kill "$test_pid"
exit 1
elif [ "$count" -gt 1 ]; then
echo "INFO: $TEST_NAME took $count loops to start."
fi
if $is_cygwin; then
# We need the Windows pid for jmap and not the Cygwin pid.
# Note: '\t' works on Cygwin, but doesn't seem to work on Solaris.
jmap_pid=`"${JPS}"| grep_cmd "[ \t]$TEST_NAME$" | sed 's/[ \t].*//'`
if [ -z "$jmap_pid" ]; then
echo "FAIL: jps could not map Cygwin pid to Windows pid." >&2
echo "INFO: killing $test_pid"
kill "$test_pid"
exit 2 exit 2
fi fi
echo "INFO: pid = $test_pid maps to Windows pid = $jmap_pid"
else
jmap_pid="$test_pid"
fi fi
# Start application and use TEST_NAME.port for coordination
startApplication "$TEST_NAME" "$TEST_NAME.port" $seconds
finished_early=false
decreasing_cnt=0 decreasing_cnt=0
increasing_cnt=0 increasing_cnt=0
loop_cnt=0 loop_cnt=0
prev_instance_cnt=0 prev_instance_cnt=0
MAX_JMAP_TRY_CNT=10
jmap_retry_cnt=0
loop_cnt_on_retry=0
while true; do while true; do
# see if the target process has finished its run and bail if it has
set +e
grep "^INFO: final loop count = " "$appOutput" > /dev/null 2>&1
status="$?"
set -e
if [ "$status" = 0 ]; then
break
fi
# Output format for 'jmap -histo' in JDK1.5.0: # Output format for 'jmap -histo' in JDK1.5.0:
# #
# <#bytes> <#instances> <class_name> # <#bytes> <#instances> <class_name>
...@@ -170,38 +122,70 @@ while true; do ...@@ -170,38 +122,70 @@ while true; do
# <num>: <#instances> <#bytes> <class_name> # <num>: <#instances> <#bytes> <class_name>
# #
set +e set +e
"${JMAP}" "$jmap_option" "$jmap_pid" > "$TEST_NAME.jmap" 2>&1 "${JMAP}" "$jmap_option" "$appJavaPid" > "$TEST_NAME.jmap" 2>&1
status="$?" status="$?"
set -e set -e
if [ "$status" != 0 ]; then if [ "$status" != 0 ]; then
echo "INFO: jmap exited with exit code = $status" echo "INFO: jmap exited with exit code = $status"
if [ "$loop_cnt" = 0 ]; then
echo "INFO: on the first iteration so no samples were taken." # There are intermittent jmap failures; see 6498448.
echo "INFO: start of jmap output:" #
cat "$TEST_NAME.jmap" # So far the following have been observed in a jmap call
echo "INFO: end of jmap output." # that was not in a race with target process termination:
#
# (Solaris specific, 2nd sample)
# <pid>: Unable to open door: target process not responding or HotSpot VM not loaded
# The -F option can be used when the target process is not responding
#
# (on Solaris so far)
# java.io.IOException
#
# (on Solaris so far, 1st sample)
# <pid>: Permission denied
#
sed 's/^/INFO: /' "$TEST_NAME.jmap"
if [ "$loop_cnt" = "$loop_cnt_on_retry" ]; then
# loop count hasn't changed
jmap_retry_cnt=`expr $jmap_retry_cnt + 1`
else
# loop count has changed so remember it
jmap_retry_cnt=1
loop_cnt_on_retry="$loop_cnt"
fi
# This is '-ge' because we have the original attempt plus
# MAX_JMAP_TRY_CNT - 1 retries.
if [ "$jmap_retry_cnt" -ge "$MAX_JMAP_TRY_CNT" ]; then
echo "INFO: jmap failed $MAX_JMAP_TRY_CNT times in a row" \
"without making any progress."
echo "FAIL: jmap is unable to take any samples." >&2 echo "FAIL: jmap is unable to take any samples." >&2
echo "INFO: killing $test_pid" killApplication
kill "$test_pid"
exit 2 exit 2
fi fi
echo "INFO: The likely reason is that $TEST_NAME has finished running."
break # short delay and try again
# Note: sleep 1 didn't help with "<pid>: Permission denied"
sleep 2
echo "INFO: retrying jmap (retry=$jmap_retry_cnt, loop=$loop_cnt)."
continue
fi fi
instance_cnt=`grep_cmd "[ ]$TARGET_CLASS$" \ set +e
< "$TEST_NAME.jmap" \ instance_cnt=`grep "${PATTERN_WS}${TARGET_CLASS}${PATTERN_EOL}" \
"$TEST_NAME.jmap" \
| sed ' | sed '
# strip leading whitespace; does nothing in JDK1.5.0 # strip leading whitespace; does nothing in JDK1.5.0
s/^[ ][ ]*// s/^'"${PATTERN_WS}${PATTERN_WS}"'*//
# strip <#bytes> in JDK1.5.0; does nothing otherwise # strip <#bytes> in JDK1.5.0; does nothing otherwise
s/^[1-9][0-9]*[ ][ ]*// s/^[1-9][0-9]*'"${PATTERN_WS}${PATTERN_WS}"'*//
# strip <num>: field; does nothing in JDK1.5.0 # strip <num>: field; does nothing in JDK1.5.0
s/^[1-9][0-9]*:[ ][ ]*// s/^[1-9][0-9]*:'"${PATTERN_WS}${PATTERN_WS}"'*//
# strip <class_name> field # strip <class_name> field
s/[ ].*// s/'"${PATTERN_WS}"'.*//
'` '`
set -e
if [ -z "$instance_cnt" ]; then if [ -z "$instance_cnt" ]; then
echo "INFO: instance count is unexpectedly empty" echo "INFO: instance count is unexpectedly empty"
if [ "$loop_cnt" = 0 ]; then if [ "$loop_cnt" = 0 ]; then
...@@ -211,8 +195,7 @@ while true; do ...@@ -211,8 +195,7 @@ while true; do
cat "$TEST_NAME.jmap" cat "$TEST_NAME.jmap"
echo "INFO: end of jmap output." echo "INFO: end of jmap output."
echo "FAIL: cannot find the instance count value." >&2 echo "FAIL: cannot find the instance count value." >&2
echo "INFO: killing $test_pid" killApplication
kill "$test_pid"
exit 2 exit 2
fi fi
else else
...@@ -221,7 +204,17 @@ while true; do ...@@ -221,7 +204,17 @@ while true; do
if [ "$instance_cnt" -gt "$prev_instance_cnt" ]; then if [ "$instance_cnt" -gt "$prev_instance_cnt" ]; then
increasing_cnt=`expr $increasing_cnt + 1` increasing_cnt=`expr $increasing_cnt + 1`
else else
# actually decreasing or the same
decreasing_cnt=`expr $decreasing_cnt + 1` decreasing_cnt=`expr $decreasing_cnt + 1`
# For these particular WeakReference leaks, the count was
# always observed to be increasing so if we get a decreasing
# or the same count, then the leaks are fixed in the bits
# being tested.
echo "INFO: finishing early due to non-increasing instance count."
finished_early=true
killApplication
break
fi fi
prev_instance_cnt="$instance_cnt" prev_instance_cnt="$instance_cnt"
fi fi
...@@ -232,8 +225,22 @@ while true; do ...@@ -232,8 +225,22 @@ while true; do
loop_cnt=`expr $loop_cnt + 1` loop_cnt=`expr $loop_cnt + 1`
done done
if [ $finished_early = false ]; then
stopApplication "$TEST_NAME.port"
waitForApplication
fi
echo "INFO: $TEST_NAME has finished running."
echo "INFO: increasing_cnt = $increasing_cnt" echo "INFO: increasing_cnt = $increasing_cnt"
echo "INFO: decreasing_cnt = $decreasing_cnt" echo "INFO: decreasing_cnt = $decreasing_cnt"
if [ "$jmap_retry_cnt" -gt 0 ]; then
echo "INFO: jmap_retry_cnt = $jmap_retry_cnt (in $loop_cnt iterations)"
fi
if [ "$loop_cnt" = 0 ]; then
echo "FAIL: jmap is unable to take any samples." >&2
exit 2
fi
echo "INFO: The instance count of" `eval echo $TARGET_CLASS` "objects" echo "INFO: The instance count of" `eval echo $TARGET_CLASS` "objects"
if [ "$decreasing_cnt" = 0 ]; then if [ "$decreasing_cnt" = 0 ]; then
...@@ -242,6 +249,6 @@ if [ "$decreasing_cnt" = 0 ]; then ...@@ -242,6 +249,6 @@ if [ "$decreasing_cnt" = 0 ]; then
exit 2 exit 2
fi fi
echo "INFO: is both increasing and decreasing." echo "INFO: is not always increasing."
echo "PASS: This indicates that there is not a memory leak." echo "PASS: This indicates that there is not a memory leak."
exit 0 exit 0
/*
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 6199676
* @summary Tests preview panel after L&F changing
* @author Sergey Malenkov
*/
import java.awt.Component;
import java.awt.Container;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;
public class Test6199676 implements Runnable {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Test6199676());
}
private static void exit(String error) {
if (error != null) {
System.err.println(error);
System.exit(1);
}
else {
System.exit(0);
}
}
private static Component getPreview(Container container) {
String name = "ColorChooser.previewPanelHolder";
for (Component component : container.getComponents()) {
if (!name.equals(component.getName())) {
component = (component instanceof Container)
? getPreview((Container) component)
: null;
}
if (component instanceof Container) {
container = (Container) component;
return 1 == container.getComponentCount()
? container.getComponent(0)
: null;
}
}
return null;
}
private static boolean isShowing(Component component) {
return (component != null) && component.isShowing();
}
private int index;
private boolean updated;
private JColorChooser chooser;
public synchronized void run() {
if (this.chooser == null) {
this.chooser = new JColorChooser();
JFrame frame = new JFrame(getClass().getName());
frame.add(this.chooser);
frame.setVisible(true);
}
else if (this.updated) {
if (isShowing(this.chooser.getPreviewPanel())) {
exit("custom preview panel is showing");
}
exit(null);
}
else {
Component component = this.chooser.getPreviewPanel();
if (component == null) {
component = getPreview(this.chooser);
}
if (!isShowing(component)) {
exit("default preview panel is not showing");
}
this.updated = true;
this.chooser.setPreviewPanel(new JPanel());
}
LookAndFeelInfo[] infos = UIManager.getInstalledLookAndFeels();
LookAndFeelInfo info = infos[++this.index % infos.length];
try {
UIManager.setLookAndFeel(info.getClassName());
}
catch (Exception exception) {
exit("could not change L&F");
}
SwingUtilities.updateComponentTreeUI(this.chooser);
SwingUtilities.invokeLater(this);
}
}
/*
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/* @test
* @bug 4743225
* @summary Size of JComboBox list is wrong when list is populated via PopupMenuListener
* @author Alexander Potochkin
*/
import sun.awt.SunToolkit;
import javax.accessibility.AccessibleContext;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
import javax.swing.plaf.basic.BasicComboPopup;
import java.awt.FlowLayout;
import java.awt.Point;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.InputEvent;
public class bug4743225 extends JFrame {
private static JComboBox cb;
private static volatile boolean flag;
public bug4743225() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout());
cb = new JComboBox(new Object[] {"one", "two", "three"});
cb.addPopupMenuListener(new PopupMenuListener() {
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
cb.addItem("Test");
}
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
}
public void popupMenuCanceled(PopupMenuEvent e) {
}
});
add(cb);
pack();
}
public static BasicComboPopup getPopup() {
AccessibleContext c = cb.getAccessibleContext();
for(int i = 0; i < c.getAccessibleChildrenCount(); i ++) {
if (c.getAccessibleChild(i) instanceof BasicComboPopup) {
return (BasicComboPopup) c.getAccessibleChild(i);
}
}
throw new AssertionError("No BasicComboPopup found");
}
public static void main(String... args) throws Exception {
Robot robot = new Robot();
robot.setAutoDelay(20);
SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
new bug4743225().setVisible(true);
}
});
toolkit.realSync();
// calling this method from main thread is ok
Point point = cb.getLocationOnScreen();
robot.mouseMove(point.x + 10, point.y + 10);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
toolkit.realSync();
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
if(getPopup().getList().getLastVisibleIndex() == 3) {
flag = true;
}
}
});
if (!flag) {
throw new RuntimeException("The ComboBox popup wasn't correctly updated");
}
}
}
/*
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/* @test
@bug 6462562
@summary Tests text input into JFormattedTextField
with an InternationalFormatter
@author Peter Zhelezniakov
@run main Test6462562
*/
import java.awt.event.ActionEvent;
import java.text.DateFormat;
import java.text.NumberFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import javax.swing.Action;
import javax.swing.JFormattedTextField;
import javax.swing.SwingUtilities;
import javax.swing.text.Caret;
import javax.swing.text.DateFormatter;
import javax.swing.text.DefaultEditorKit;
import javax.swing.text.InternationalFormatter;
import javax.swing.text.NumberFormatter;
public class Test6462562
{
static final String BACKSPACE = new String("backspace");
static final String DELETE = new String("delete");
boolean failed = false;
void test() {
testPercentFormat();
testCurrencyFormat();
testIntegerFormat();
testDateFormat();
if (failed) {
throw new RuntimeException("Some testcases failed, see output above");
}
System.err.println("(-; All testcases passed ;-)");
}
TestFormattedTextField create(NumberFormat format) {
format.setMaximumFractionDigits(0);
NumberFormatter fmt = new NumberFormatter(format);
return new TestFormattedTextField(fmt);
}
TestFormattedTextField create(DateFormat format) {
DateFormatter fmt = new DateFormatter(format);
return new TestFormattedTextField(fmt);
}
public static void main(String[] args) throws Exception {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
new Test6462562().test();
}
});
}
class TestFormattedTextField extends JFormattedTextField
{
final Action backspace;
final Action delete;
final Action insert;
final ActionEvent dummyEvent;
public TestFormattedTextField(InternationalFormatter fmt) {
super(fmt);
fmt.setAllowsInvalid(false);
fmt.setOverwriteMode(true);
backspace = getActionMap().get(DefaultEditorKit.deletePrevCharAction);
delete = getActionMap().get(DefaultEditorKit.deleteNextCharAction);
insert = getActionMap().get(DefaultEditorKit.insertContentAction);
dummyEvent = new ActionEvent(this, 0, null);
}
public boolean test(int pos, int selectionLength, String todo, Object expectedResult) {
Object v0 = getValue();
Caret caret = getCaret();
caret.setDot(pos);
if (selectionLength > 0) {
caret.moveDot(pos + selectionLength);
}
String desc = todo;
if (todo == BACKSPACE) {
backspace.actionPerformed(dummyEvent);
} else if (todo == DELETE) {
delete.actionPerformed(dummyEvent);
} else {
desc = "insert('" + todo + "')";
insert.actionPerformed(new ActionEvent(this, 0, todo));
}
try {
commitEdit();
} catch (ParseException e) {
e.printStackTrace();
failed = true;
return false;
}
Object v1 = getValue();
if (! v1.equals(expectedResult)) {
System.err.printf("Failure: value='%s', mark=%d, dot=%d, action=%s\n",
v0, pos, pos + selectionLength, desc);
System.err.printf(" Result: '%s', expected: '%s'\n", v1, expectedResult);
failed = true;
return false;
}
return true;
}
}
void testPercentFormat() {
NumberFormat format = NumberFormat.getPercentInstance(Locale.US);
TestFormattedTextField ftf = create(format);
ftf.setValue(.34);
System.err.println("Testing NumberFormat.getPercentInstance(Locale.US)");
// test inserting individual characters
ftf.test(0, 0, "1", .14);
ftf.test(2, 0, "2", 1.42);
ftf.test(1, 0, "0", 1.02);
// test inserting several characters at once - e.g. from clipboard
ftf.test(0, 0, "1024", 10.24);
ftf.test(3, 0, "333", 103.33);
ftf.test(6, 0, "77", 10333.77);
ftf.test(4, 0, "99", 10399.77);
ftf.test(6, 0, "00", 10390.07);
// test inserting strings that contain some formatting
ftf.test(0, 0, "2,2", 2290.07);
ftf.test(2, 0, "2,2", 222.27);
ftf.test(4, 0, "2,2", 222.22);
ftf.test(6, 0, "33,33", 2222233.33);
// test delete
ftf.test(0, 0, DELETE, 222233.33);
ftf.test(10, 0, DELETE, 222233.33);
ftf.test(5, 0, DELETE, 22223.33);
ftf.test(6, 0, DELETE, 2222.33);
// test backspace
ftf.test(0, 0, BACKSPACE, 2222.33);
ftf.test(7, 0, BACKSPACE, 222.23);
ftf.test(4, 0, BACKSPACE, 22.23);
ftf.test(2, 0, BACKSPACE, 2.23);
// test replacing selection
ftf.test(0, 1, "555", 555.23);
ftf.test(4, 2, "555", 5555.55);
ftf.test(2, 3, "1", 551.55);
ftf.test(3, 2, "6", 55.65);
ftf.test(4, 2, "12", 556.12);
ftf.test(3, 4, "0", 5.5);
ftf.test(0, 3, "111222333444555", 1112223334445.55);
// test deleting selection
ftf.test(0, 2, DELETE, 12223334445.55);
ftf.test(0, 3, BACKSPACE, 223334445.55);
ftf.test(12, 2, DELETE, 2233344.45);
ftf.test(9, 2, BACKSPACE, 22333.44);
ftf.test(4, 3, DELETE, 223.44);
ftf.test(1, 2, BACKSPACE, 23.44);
ftf.test(3, 3, DELETE, .23);
ftf.test(1, 2, BACKSPACE, .02);
}
void testCurrencyFormat() {
NumberFormat format = NumberFormat.getCurrencyInstance(Locale.US);
TestFormattedTextField ftf = create(format);
ftf.setValue(56L);
System.err.println("Testing NumberFormat.getCurrencyInstance(Locale.US)");
// test inserting individual characters
ftf.test(1, 0, "1", 16L);
ftf.test(3, 0, "2", 162L);
ftf.test(2, 0, "0", 102L);
// test inserting several characters at once - e.g. from clipboard
ftf.test(1, 0, "1024", 1024L);
ftf.test(4, 0, "333", 10333L);
ftf.test(7, 0, "77", 1033377L);
ftf.test(5, 0, "99", 1039977L);
ftf.test(7, 0, "00", 1039007L);
// test inserting strings that contain some formatting
ftf.test(1, 0, "2,2", 229007L);
ftf.test(3, 0, "2,2", 22227L);
ftf.test(4, 0, "2,2", 2222L);
ftf.test(6, 0, "33,33", 22223333L);
// test delete
ftf.test(1, 0, DELETE, 2223333L);
ftf.test(10, 0, DELETE, 2223333L);
ftf.test(5, 0, DELETE, 222333L);
ftf.test(5, 0, DELETE, 22233L);
// test backspace
ftf.test(1, 0, BACKSPACE, 22233L);
ftf.test(7, 0, BACKSPACE, 2223L);
ftf.test(4, 0, BACKSPACE, 223L);
ftf.test(2, 0, BACKSPACE, 23L);
// test replacing selection
ftf.test(1, 1, "555", 5553L);
ftf.test(4, 2, "555", 55555L);
ftf.test(2, 3, "1", 5155L);
ftf.test(3, 2, "6", 565L);
ftf.test(1, 3, "111222333444555", 111222333444555L);
// test deleting selection
ftf.test(1, 2, DELETE, 1222333444555L);
ftf.test(1, 3, BACKSPACE, 22333444555L);
ftf.test(13, 2, DELETE, 223334445L);
ftf.test(10, 2, BACKSPACE, 2233344L);
ftf.test(4, 4, DELETE, 2244L);
ftf.test(1, 4, BACKSPACE, 4L);
}
void testIntegerFormat() {
NumberFormat format = NumberFormat.getIntegerInstance(Locale.US);
TestFormattedTextField ftf = create(format);
ftf.setValue(56L);
System.err.println("Testing NumberFormat.getIntegerInstance(Locale.US)");
// test inserting individual characters
ftf.test(0, 0, "1", 16L);
ftf.test(2, 0, "2", 162L);
ftf.test(1, 0, "0", 102L);
// test inserting several characters at once - e.g. from clipboard
ftf.test(0, 0, "1024", 1024L);
ftf.test(3, 0, "333", 10333L);
ftf.test(6, 0, "77", 1033377L);
ftf.test(4, 0, "99", 1039977L);
ftf.test(6, 0, "00", 1039007L);
// test inserting strings that contain some formatting
ftf.test(0, 0, "2,2", 229007L);
ftf.test(2, 0, "2,2", 22227L);
ftf.test(3, 0, "2,2", 2222L);
ftf.test(5, 0, "33,33", 22223333L);
// test delete
ftf.test(0, 0, DELETE, 2223333L);
ftf.test(9, 0, DELETE, 2223333L);
ftf.test(4, 0, DELETE, 222333L);
ftf.test(4, 0, DELETE, 22233L);
// test backspace
ftf.test(0, 0, BACKSPACE, 22233L);
ftf.test(6, 0, BACKSPACE, 2223L);
ftf.test(2, 0, BACKSPACE, 223L);
ftf.test(2, 0, BACKSPACE, 23L);
// test replacing selection
ftf.test(0, 1, "555", 5553L);
ftf.test(3, 2, "555", 55555L);
ftf.test(1, 3, "1", 5155L);
ftf.test(2, 2, "6", 565L);
ftf.test(0, 3, "111222333444555", 111222333444555L);
// test deleting selection
ftf.test(0, 2, DELETE, 1222333444555L);
ftf.test(0, 3, BACKSPACE, 22333444555L);
ftf.test(12, 2, DELETE, 223334445L);
ftf.test(9, 2, BACKSPACE, 2233344L);
ftf.test(3, 4, DELETE, 2244L);
ftf.test(0, 4, BACKSPACE, 4L);
}
Date date(DateFormat format, String spec) {
try {
return format.parse(spec);
} catch (ParseException e) {
throw new Error("Error in test");
}
}
void testDateFormat() {
DateFormat format = new SimpleDateFormat("MM/dd/yyyy", Locale.US);
TestFormattedTextField ftf = create(format);
ftf.setValue(date(format, "12/05/2005"));
System.err.println("Testing SimpleDateFormat(\"MM/dd/yyyy\", Locale.US)");
// test inserting individual characters
ftf.test(0, 0, "0", date(format, "02/05/2005"));
ftf.test(4, 0, "4", date(format, "02/04/2005"));
ftf.test(6, 0, "1", date(format, "02/04/1005"));
ftf.test(9, 0, "9", date(format, "02/04/1009"));
// test inserting several characters at once - e.g. from clipboard
ftf.test(0, 0, "11", date(format, "11/04/1009"));
ftf.test(3, 0, "23", date(format, "11/23/1009"));
ftf.test(6, 0, "191", date(format, "11/23/1919"));
// test delete
ftf.test(0, 0, DELETE, date(format, "01/23/1919"));
ftf.test(3, 0, DELETE, date(format, "01/03/1919"));
ftf.test(10, 0, DELETE, date(format, "01/03/1919"));
ftf.test(1, 0, DELETE, date(format, "12/03/1918"));
ftf.test(4, 0, DELETE, date(format, "11/30/1918"));
// test backspace
ftf.test(0, 0, BACKSPACE, date(format, "11/30/1918"));
ftf.test(1, 0, BACKSPACE, date(format, "01/30/1918"));
ftf.test(4, 0, BACKSPACE, date(format, "12/31/1917"));
ftf.test(10, 0, BACKSPACE, date(format, "12/31/0191"));
ftf.test(3, 0, BACKSPACE, date(format, "01/31/0191"));
ftf.test(5, 0, BACKSPACE, date(format, "01/03/0191"));
// test replacing selection
ftf.test(0, 1, "1", date(format, "11/03/0191"));
ftf.test(3, 1, "2", date(format, "11/23/0191"));
ftf.test(6, 2, "20", date(format, "11/23/2091"));
// test deleting selection
ftf.test(0, 1, BACKSPACE, date(format, "01/23/2091"));
ftf.test(3, 1, DELETE, date(format, "01/03/2091"));
ftf.test(6, 2, BACKSPACE, date(format, "01/03/0091"));
ftf.test(8, 1, DELETE, date(format, "01/03/0001"));
}
}
...@@ -391,6 +391,10 @@ public class FtpGetContent { ...@@ -391,6 +391,10 @@ public class FtpGetContent {
done = true; done = true;
} }
synchronized boolean done() {
return done;
}
synchronized public void setPortEnabled(boolean ok) { synchronized public void setPortEnabled(boolean ok) {
portEnabled = ok; portEnabled = ok;
} }
...@@ -431,12 +435,13 @@ public class FtpGetContent { ...@@ -431,12 +435,13 @@ public class FtpGetContent {
public void run() { public void run() {
try { try {
Socket client; Socket client;
while (!done) { while (!done()) {
client = server.accept(); client = server.accept();
(new FtpServerHandler(client)).start(); (new FtpServerHandler(client)).start();
} }
server.close();
} catch(Exception e) { } catch(Exception e) {
} finally {
try { server.close(); } catch (IOException unused) {}
} }
} }
} }
...@@ -463,18 +468,13 @@ public class FtpGetContent { ...@@ -463,18 +468,13 @@ public class FtpGetContent {
bytesRead = stream.read(buffer); bytesRead = stream.read(buffer);
} }
stream.close(); stream.close();
server.terminate();
server.interrupt();
if (totalBytes != filesize) if (totalBytes != filesize)
throw new RuntimeException("wrong file size!"); throw new RuntimeException("wrong file size!");
} catch (IOException e) { } catch (IOException e) {
try {
server.terminate();
server.interrupt();
} catch (Exception e2) {
}
throw new RuntimeException(e.getMessage()); throw new RuntimeException(e.getMessage());
} finally {
server.terminate();
server.server.close();
} }
} }
} }
...@@ -438,8 +438,9 @@ public class FtpURL { ...@@ -438,8 +438,9 @@ public class FtpURL {
client = server.accept(); client = server.accept();
(new FtpServerHandler(client)).run(); (new FtpServerHandler(client)).run();
} }
server.close();
} catch(Exception e) { } catch(Exception e) {
} finally {
try { server.close(); } catch (IOException unused) {}
} }
} }
} }
...@@ -448,10 +449,9 @@ public class FtpURL { ...@@ -448,10 +449,9 @@ public class FtpURL {
} }
public FtpURL() throws Exception { public FtpURL() throws Exception {
FtpServer server = null; FtpServer server = new FtpServer(0);
BufferedReader in = null; BufferedReader in = null;
try { try {
server = new FtpServer(0);
server.start(); server.start();
int port = server.getPort(); int port = server.getPort();
...@@ -497,17 +497,14 @@ public class FtpURL { ...@@ -497,17 +497,14 @@ public class FtpURL {
throw new RuntimeException("Incorrect filename received"); throw new RuntimeException("Incorrect filename received");
if (! "/usr".equals(server.pwd())) if (! "/usr".equals(server.pwd()))
throw new RuntimeException("Incorrect pwd received"); throw new RuntimeException("Incorrect pwd received");
in.close();
// We're done! // We're done!
} catch (Exception e) { } catch (Exception e) {
try {
in.close();
server.terminate();
server.interrupt();
} catch(Exception ex) {
}
throw new RuntimeException("FTP support error: " + e.getMessage()); throw new RuntimeException("FTP support error: " + e.getMessage());
} finally {
try { in.close(); } catch (IOException unused) {}
server.terminate();
server.server.close();
} }
} }
} }
...@@ -30,9 +30,7 @@ ...@@ -30,9 +30,7 @@
* @summary ChunkedEncoding unit test; MeteredStream/ProgressData problem * @summary ChunkedEncoding unit test; MeteredStream/ProgressData problem
*/ */
import java.io.*;
import java.net.*; import java.net.*;
import java.security.*;
import java.util.BitSet; import java.util.BitSet;
import sun.net.ProgressMeteringPolicy; import sun.net.ProgressMeteringPolicy;
import sun.net.ProgressMonitor; import sun.net.ProgressMonitor;
...@@ -42,8 +40,10 @@ import sun.net.ProgressEvent; ...@@ -42,8 +40,10 @@ import sun.net.ProgressEvent;
public class ChunkedEncodingWithProgressMonitorTest { public class ChunkedEncodingWithProgressMonitorTest {
public static void main (String[] args) throws Exception { public static void main (String[] args) throws Exception {
ProgressMonitor.setMeteringPolicy(new MyProgressMeteringPolicy()); ProgressMonitor.setMeteringPolicy(new MyProgressMeteringPolicy());
ProgressMonitor.getDefault().addProgressListener(new MyProgressListener()); ProgressListener listener = new MyProgressListener();
ProgressMonitor.getDefault().addProgressListener(listener);
ChunkedEncodingTest.test(); ChunkedEncodingTest.test();
ProgressMonitor.getDefault().removeProgressListener(listener);
if (flag.cardinality() != 3) { if (flag.cardinality() != 3) {
throw new RuntimeException("All three methods in ProgressListener"+ throw new RuntimeException("All three methods in ProgressListener"+
......
...@@ -34,7 +34,7 @@ import com.sun.net.httpserver.*; ...@@ -34,7 +34,7 @@ import com.sun.net.httpserver.*;
public class Test implements HttpHandler { public class Test implements HttpHandler {
static int count = 0; static volatile int count = 0;
static final String str1 = "Helloworld1234567890abcdefghijklmnopqrstuvwxyz"+ static final String str1 = "Helloworld1234567890abcdefghijklmnopqrstuvwxyz"+
"1234567890abcdefkjsdlkjflkjsldkfjlsdkjflkj"+ "1234567890abcdefkjsdlkjflkjsldkfjlsdkjflkj"+
...@@ -46,9 +46,9 @@ public class Test implements HttpHandler { ...@@ -46,9 +46,9 @@ public class Test implements HttpHandler {
public void handle(HttpExchange exchange) { public void handle(HttpExchange exchange) {
String reqbody; String reqbody;
try { try {
switch (count) { switch (exchange.getRequestURI().toString()) {
case 0: /* test1 -- keeps conn alive */ case "/test/test1": /* test1 -- keeps conn alive */
case 1: /* test2 -- closes conn */ case "/test/test2": /* test2 -- closes conn */
printRequestURI(exchange); printRequestURI(exchange);
reqbody = read(exchange.getRequestBody()); reqbody = read(exchange.getRequestBody());
if (!reqbody.equals(str1)) { if (!reqbody.equals(str1)) {
...@@ -72,7 +72,7 @@ public class Test implements HttpHandler { ...@@ -72,7 +72,7 @@ public class Test implements HttpHandler {
resHeaders.set("Connection", "close"); resHeaders.set("Connection", "close");
} }
break; break;
case 2: /* test 3 */ case "/test/test3": /* test 3 */
printRequestURI(exchange); printRequestURI(exchange);
reqbody = read(exchange.getRequestBody()); reqbody = read(exchange.getRequestBody());
...@@ -93,19 +93,19 @@ public class Test implements HttpHandler { ...@@ -93,19 +93,19 @@ public class Test implements HttpHandler {
exchange.sendResponseHeaders(200, reqbody.length()); exchange.sendResponseHeaders(200, reqbody.length());
write(exchange.getResponseBody(), reqbody); write(exchange.getResponseBody(), reqbody);
break; break;
case 3: /* test 4 */ case "/test/test4": /* test 4 */
case 4: /* test 5 */ case "/test/test5": /* test 5 */
printRequestURI(exchange); printRequestURI(exchange);
break; break;
case 5: /* test 6 */ case "/test/test6": /* test 6 */
printRequestURI(exchange); printRequestURI(exchange);
resHeaders = exchange.getResponseHeaders() ; resHeaders = exchange.getResponseHeaders() ;
resHeaders.set("Location", "http://foo.bar/"); resHeaders.set("Location", "http://foo.bar/");
resHeaders.set("Connection", "close"); resHeaders.set("Connection", "close");
exchange.sendResponseHeaders(307, 0); exchange.sendResponseHeaders(307, 0);
break; break;
case 6: /* test 7 */ case "/test/test7": /* test 7 */
case 7: /* test 8 */ case "/test/test8": /* test 8 */
printRequestURI(exchange); printRequestURI(exchange);
reqbody = read(exchange.getRequestBody()); reqbody = read(exchange.getRequestBody());
if (reqbody != null && !"".equals(reqbody)) { if (reqbody != null && !"".equals(reqbody)) {
...@@ -116,7 +116,7 @@ public class Test implements HttpHandler { ...@@ -116,7 +116,7 @@ public class Test implements HttpHandler {
resHeaders.set("Connection", "close"); resHeaders.set("Connection", "close");
exchange.sendResponseHeaders(200, 0); exchange.sendResponseHeaders(200, 0);
break; break;
case 8: /* test 9 */ case "/test/test9": /* test 9 */
printRequestURI(exchange); printRequestURI(exchange);
reqbody = read(exchange.getRequestBody()); reqbody = read(exchange.getRequestBody());
if (!reqbody.equals(str1)) { if (!reqbody.equals(str1)) {
...@@ -134,7 +134,7 @@ public class Test implements HttpHandler { ...@@ -134,7 +134,7 @@ public class Test implements HttpHandler {
exchange.sendResponseHeaders(200, reqbody.length()); exchange.sendResponseHeaders(200, reqbody.length());
write(exchange.getResponseBody(), reqbody); write(exchange.getResponseBody(), reqbody);
break; break;
case 9: /* test10 */ case "/test/test10": /* test10 */
printRequestURI(exchange); printRequestURI(exchange);
InputStream is = exchange.getRequestBody(); InputStream is = exchange.getRequestBody();
String s = read (is, str1.length()); String s = read (is, str1.length());
...@@ -158,7 +158,7 @@ public class Test implements HttpHandler { ...@@ -158,7 +158,7 @@ public class Test implements HttpHandler {
exchange.sendResponseHeaders(200, 0); exchange.sendResponseHeaders(200, 0);
} }
break; break;
case 10: /* test11 */ case "/test/test11": /* test11 */
printRequestURI(exchange); printRequestURI(exchange);
is = exchange.getRequestBody(); is = exchange.getRequestBody();
s = read (is, str1.length()); s = read (is, str1.length());
...@@ -182,7 +182,7 @@ public class Test implements HttpHandler { ...@@ -182,7 +182,7 @@ public class Test implements HttpHandler {
exchange.sendResponseHeaders(200, 0); exchange.sendResponseHeaders(200, 0);
} }
break; break;
case 11: /* test12 */ case "/test/test12": /* test12 */
printRequestURI(exchange); printRequestURI(exchange);
is = exchange.getRequestBody(); is = exchange.getRequestBody();
...@@ -203,8 +203,8 @@ public class Test implements HttpHandler { ...@@ -203,8 +203,8 @@ public class Test implements HttpHandler {
} }
break; break;
} }
exchange.close();
count ++; count ++;
exchange.close();
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
......
...@@ -147,6 +147,8 @@ public class B6726695 extends Thread { ...@@ -147,6 +147,8 @@ public class B6726695 extends Thread {
serverIgnore(s); serverIgnore(s);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} finally {
try { server.close(); } catch (IOException unused) {}
} }
} }
......
...@@ -100,11 +100,12 @@ public class MultiThreadTest extends Thread { ...@@ -100,11 +100,12 @@ public class MultiThreadTest extends Thread {
} }
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException (e.getMessage()); throw new RuntimeException (e.getMessage());
} } finally {
synchronized (threadlock) { synchronized (threadlock) {
threadCounter --; threadCounter --;
if (threadCounter == 0) { if (threadCounter == 0) {
threadlock.notifyAll(); threadlock.notifyAll();
}
} }
} }
} }
......
...@@ -47,7 +47,7 @@ public class ProxyTest { ...@@ -47,7 +47,7 @@ public class ProxyTest {
private class HttpProxyServer extends Thread { private class HttpProxyServer extends Thread {
private ServerSocket server; private ServerSocket server;
private int port; private int port;
private boolean done = false; private volatile boolean done = false;
private String askedUrl; private String askedUrl;
/** /**
...@@ -125,12 +125,8 @@ public class ProxyTest { ...@@ -125,12 +125,8 @@ public class ProxyTest {
} }
} }
public HttpProxyServer(int port) { public HttpProxyServer() throws IOException {
this.port = port; server = new ServerSocket(0);
}
public HttpProxyServer() {
this(0);
} }
public int getPort() { public int getPort() {
...@@ -148,51 +144,49 @@ public class ProxyTest { ...@@ -148,51 +144,49 @@ public class ProxyTest {
*/ */
synchronized public void terminate() { synchronized public void terminate() {
done = true; done = true;
try { server.close(); } catch (IOException unused) {}
} }
public void run() { public void run() {
try { try {
server = new ServerSocket(port);
Socket client; Socket client;
while (!done) { while (!done) {
client = server.accept(); client = server.accept();
(new HttpProxyHandler(client)).start(); (new HttpProxyHandler(client)).start();
} }
server.close();
} catch (Exception e) { } catch (Exception e) {
} finally {
try { server.close(); } catch (IOException unused) {}
} }
} }
} }
public static void main(String[] args) { public static void main(String[] args) throws Exception {
ProxyTest test = new ProxyTest(); ProxyTest test = new ProxyTest();
} }
public ProxyTest() { public ProxyTest() throws Exception {
BufferedReader in = null;
String testURL = "ftp://anonymous:password@myhost.mydomain/index.html"; String testURL = "ftp://anonymous:password@myhost.mydomain/index.html";
HttpProxyServer server = new HttpProxyServer(); HttpProxyServer server = new HttpProxyServer();
try { try {
server.start(); server.start();
int port = 0; int port = server.getPort();
while (port == 0) {
Thread.sleep(500); Proxy ftpProxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("localhost", port));
port = server.getPort(); URL url = new URL(testURL);
} InputStream ins = (url.openConnection(ftpProxy)).getInputStream();
in = new BufferedReader(new InputStreamReader(ins));
System.setProperty("ftp.proxyHost","localhost"); String line;
System.setProperty("ftp.proxyPort", String.valueOf(port)); do {
URL url = new URL(testURL); line = in.readLine();
InputStream ins = url.openStream(); } while (line != null);
BufferedReader in = new BufferedReader(new InputStreamReader(ins)); in.close();
String line;
do {
line = in.readLine();
} while (line != null);
in.close();
server.terminate();
server.interrupt();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} finally {
server.terminate();
try { in.close(); } catch (IOException unused) {}
} }
/* /*
* If the URLs don't match, we've got a bug! * If the URLs don't match, we've got a bug!
......
...@@ -91,9 +91,10 @@ public class KeepAliveTimerThread { ...@@ -91,9 +91,10 @@ public class KeepAliveTimerThread {
out.flush(); out.flush();
s.close(); s.close();
server.close();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} finally {
try { server.close(); } catch (IOException unused) {}
} }
} }
} }
...@@ -118,6 +119,8 @@ public class KeepAliveTimerThread { ...@@ -118,6 +119,8 @@ public class KeepAliveTimerThread {
if (grp.activeCount() > 0) { if (grp.activeCount() > 0) {
throw new RuntimeException("Keep-alive thread started in wrong thread group"); throw new RuntimeException("Keep-alive thread started in wrong thread group");
} }
grp.destroy();
} }
} }
...@@ -43,10 +43,6 @@ public class KeepAliveStreamCloseWithWrongContentLength { ...@@ -43,10 +43,6 @@ public class KeepAliveStreamCloseWithWrongContentLength {
srv = s; srv = s;
} }
Socket getSocket () {
return (s);
}
public void run() { public void run() {
try { try {
s = srv.accept (); s = srv.accept ();
...@@ -57,7 +53,7 @@ public class KeepAliveStreamCloseWithWrongContentLength { ...@@ -57,7 +53,7 @@ public class KeepAliveStreamCloseWithWrongContentLength {
is.read(); is.read();
} }
OutputStreamWriter ow = OutputStreamWriter ow =
new OutputStreamWriter(s.getOutputStream()); new OutputStreamWriter((os = s.getOutputStream()));
ow.write("HTTP/1.0 200 OK\n"); ow.write("HTTP/1.0 200 OK\n");
// Note: The client expects 10 bytes. // Note: The client expects 10 bytes.
...@@ -71,19 +67,16 @@ public class KeepAliveStreamCloseWithWrongContentLength { ...@@ -71,19 +67,16 @@ public class KeepAliveStreamCloseWithWrongContentLength {
// Note: The (buggy) server only sends 9 bytes. // Note: The (buggy) server only sends 9 bytes.
ow.write("123456789"); ow.write("123456789");
ow.flush(); ow.flush();
ow.close();
} catch (Exception e) { } catch (Exception e) {
} finally {
try {if (os != null) { os.close(); }} catch (IOException e) {}
} }
} }
} }
/* public static void main (String[] args) throws Exception {
* ServerSocket serversocket = new ServerSocket (0);
*/
public static void main (String[] args) {
try { try {
ServerSocket serversocket = new ServerSocket (0);
int port = serversocket.getLocalPort (); int port = serversocket.getLocalPort ();
XServer server = new XServer (serversocket); XServer server = new XServer (serversocket);
server.start (); server.start ();
...@@ -100,11 +93,12 @@ public class KeepAliveStreamCloseWithWrongContentLength { ...@@ -100,11 +93,12 @@ public class KeepAliveStreamCloseWithWrongContentLength {
} }
} }
is.close(); is.close();
server.getSocket().close ();
} catch (IOException e) { } catch (IOException e) {
return; return;
} catch (NullPointerException e) { } catch (NullPointerException e) {
throw new RuntimeException (e); throw new RuntimeException (e);
} finally {
if (serversocket != null) serversocket.close();
} }
} }
} }
...@@ -188,6 +188,7 @@ public class HttpServer { ...@@ -188,6 +188,7 @@ public class HttpServer {
sock.configureBlocking (false); sock.configureBlocking (false);
sock.register (selector, SelectionKey.OP_READ); sock.register (selector, SelectionKey.OP_READ);
nconn ++; nconn ++;
System.out.println("SERVER: new connection. chan[" + sock + "]");
if (nconn == maxconn) { if (nconn == maxconn) {
/* deregister */ /* deregister */
listenerKey.cancel (); listenerKey.cancel ();
...@@ -197,7 +198,9 @@ public class HttpServer { ...@@ -197,7 +198,9 @@ public class HttpServer {
if (key.isReadable()) { if (key.isReadable()) {
boolean closed; boolean closed;
SocketChannel chan = (SocketChannel) key.channel(); SocketChannel chan = (SocketChannel) key.channel();
System.out.println("SERVER: connection readable. chan[" + chan + "]");
if (key.attachment() != null) { if (key.attachment() != null) {
System.out.println("Server: comsume");
closed = consume (chan); closed = consume (chan);
} else { } else {
closed = read (chan, key); closed = read (chan, key);
...@@ -375,6 +378,7 @@ public class HttpServer { ...@@ -375,6 +378,7 @@ public class HttpServer {
synchronized void orderlyCloseChannel (SelectionKey key) throws IOException { synchronized void orderlyCloseChannel (SelectionKey key) throws IOException {
SocketChannel ch = (SocketChannel)key.channel (); SocketChannel ch = (SocketChannel)key.channel ();
System.out.println("SERVER: orderlyCloseChannel chan[" + ch + "]");
ch.socket().shutdownOutput(); ch.socket().shutdownOutput();
key.attach (this); key.attach (this);
clist.add (key); clist.add (key);
...@@ -382,6 +386,8 @@ public class HttpServer { ...@@ -382,6 +386,8 @@ public class HttpServer {
synchronized void abortiveCloseChannel (SelectionKey key) throws IOException { synchronized void abortiveCloseChannel (SelectionKey key) throws IOException {
SocketChannel ch = (SocketChannel)key.channel (); SocketChannel ch = (SocketChannel)key.channel ();
System.out.println("SERVER: abortiveCloseChannel chan[" + ch + "]");
Socket s = ch.socket (); Socket s = ch.socket ();
s.setSoLinger (true, 0); s.setSoLinger (true, 0);
ch.close(); ch.close();
......
...@@ -95,10 +95,11 @@ class DigestServer extends Thread { ...@@ -95,10 +95,11 @@ class DigestServer extends Thread {
os.write (reply.getBytes()); os.write (reply.getBytes());
Thread.sleep (2000); Thread.sleep (2000);
s1.close (); s1.close ();
} } catch (Exception e) {
catch (Exception e) {
System.out.println (e); System.out.println (e);
e.printStackTrace(); e.printStackTrace();
} finally {
try { s.close(); } catch (IOException unused) {}
} }
} }
...@@ -204,15 +205,12 @@ public class DigestTest { ...@@ -204,15 +205,12 @@ public class DigestTest {
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
int nLoops = 1; int port;
int nSize = 10;
int port, n =0;
byte b[] = new byte[nSize];
DigestServer server; DigestServer server;
ServerSocket sock; ServerSocket sock;
try { try {
sock = new ServerSocket (5000); sock = new ServerSocket (0);
port = sock.getLocalPort (); port = sock.getLocalPort ();
} }
catch (Exception e) { catch (Exception e) {
...@@ -225,21 +223,18 @@ public class DigestTest { ...@@ -225,21 +223,18 @@ public class DigestTest {
boolean passed = false; boolean passed = false;
try { try {
Authenticator.setDefault (new MyAuthenticator ()); Authenticator.setDefault (new MyAuthenticator ());
String s = "http://localhost:" + port + DigestServer.uri; String s = "http://localhost:" + port + DigestServer.uri;
URL url = new URL(s); URL url = new URL(s);
java.net.URLConnection conURL = url.openConnection(); java.net.URLConnection conURL = url.openConnection();
InputStream in = conURL.getInputStream(); InputStream in = conURL.getInputStream();
int c; while (in.read () != -1) {}
while ((c = in.read ()) != -1) {
}
in.close (); in.close ();
} } catch(ProtocolException e) {
catch(ProtocolException e) {
passed = true; passed = true;
} }
if (!passed) { if (!passed) {
throw new RuntimeException ("Expected a ProtocolException from wrong password"); throw new RuntimeException ("Expected a ProtocolException from wrong password");
} }
......
/* /*
* Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
* @test * @test
* @bug 6857795 * @bug 6857795
* @bug 6858589 * @bug 6858589
* @bug 6972005
* @summary krb5.conf ignored if system properties on realm and kdc are provided * @summary krb5.conf ignored if system properties on realm and kdc are provided
*/ */
...@@ -96,7 +97,8 @@ public class ConfPlusProp { ...@@ -96,7 +97,8 @@ public class ConfPlusProp {
System.setProperty("java.security.krb5.conf", "i-am-not-a file"); System.setProperty("java.security.krb5.conf", "i-am-not-a file");
refresh(); refresh();
checkDefaultRealm(null); // Default realm might come from DNS
//checkDefaultRealm(null);
check("R1", null); check("R1", null);
check("R2", null); check("R2", null);
check("R3", null); check("R3", null);
......
[libdefaults] [libdefaults]
default_realm = R1 default_realm = R1
forwardable = well forwardable = well
dns_lookup_realm = false
[realms] [realms]
R1 = { R1 = {
......
[libdefaults]
dns_lookup_realm = false
[realms] [realms]
R1 = { R1 = {
kdc = k12 kdc = k12
......
/*
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 6670889
* @summary Keystore created under Hindi Locale causing ArrayIndexOutOfBoundsException
* @run main/othervm -Duser.language=hi -Duser.region=IN LocaleInTime
*/
import java.util.Date;
import sun.security.util.DerOutputStream;
import sun.security.util.DerValue;
public class LocaleInTime {
public static void main(String args[]) throws Exception {
DerOutputStream out = new DerOutputStream();
out.putUTCTime(new Date());
DerValue val = new DerValue(out.toByteArray());
System.out.println(val.getUTCTime());
}
}
/*
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 6867345
* @summary Turkish regional options cause NPE in
* sun.security.x509.AlgorithmId.algOID
* @run main/othervm -Duser.language=tr -Duser.region=TR TurkishRegion
* @author Xuelei Fan
*/
import sun.security.x509.*;
public class TurkishRegion {
public static void main(String[] args) throws Exception {
AlgorithmId algId = AlgorithmId.get("PBEWITHMD5ANDDES");
}
}
#!/bin/sh #!/bin/sh
# #
# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
...@@ -24,54 +24,187 @@ ...@@ -24,54 +24,187 @@
# #
# Support function to start and stop a given application # Support functions to start, stop, wait for or kill a given SimpleApplication
# Starts a given application as background process, usage: # Starts a given app as background process, usage:
# startApplication <class> [args...] # startApplication <class> port-file [args...]
#
# The following variables are set:
#
# appJavaPid - application's Java pid
# appOtherPid - pid associated with the app other than appJavaPid
# appPidList - all pids associated with the app
# appOutput - file containing stdout and stderr from the app
#
# Waits for at least one line of output from the app to indicate
# that it is up and running.
# #
# Waits for application to print something to indicate it is running
# (and initialized). Output is directed to ${TESTCLASSES}/Application.out.
# Sets $pid to be the process-id of the application.
startApplication() startApplication()
{ {
OUTPUTFILE=${TESTCLASSES}/Application.out appOutput="${TESTCLASSES}/Application.out"
${JAVA} $1 $2 $3 $4 $5 $6 > ${OUTPUTFILE} &
pid="$!" ${JAVA} -classpath "${TESTCLASSES}" "$@" > "$appOutput" 2>&1 &
appJavaPid="$!"
# MKS creates an intermediate shell to launch ${JAVA} so appOtherPid=
# ${pid} is not the actual pid. We have put in a small sleep appPidList="$appJavaPid"
# to give the intermediate shell process time to launch the
# "java" process. echo "INFO: waiting for $1 to initialize..."
if [ "$OS" = "Windows" ]; then _cnt=0
sleep 2
if [ "${isCygwin}" = "true" ] ; then
realpid=`ps -p ${pid} | tail -1 | awk '{print $4;}'`
else
realpid=`ps -o pid,ppid,comm|grep ${pid}|grep "java"|cut -c1-6`
fi
pid=${realpid}
fi
echo "Waiting for Application to initialize..."
attempts=0
while true; do while true; do
# if the app doesn't start then the JavaTest/JTREG timeout will
# kick in so this isn't really a endless loop
sleep 1 sleep 1
out=`tail -1 ${OUTPUTFILE}` out=`tail -1 "$appOutput"`
if [ ! -z "$out" ]; then if [ -n "$out" ]; then
# we got some output from the app so it's running
break break
fi fi
attempts=`expr $attempts + 1` _cnt=`expr $_cnt + 1`
echo "Waiting $attempts second(s) ..." echo "INFO: waited $_cnt second(s) ..."
done done
unset _cnt
echo "Application is process $pid" if $isWindows; then
# Windows requires special handling
appOtherPid="$appJavaPid"
if $isCygwin; then
appJavaPid=`ps -p "$appOtherPid" \
| sed -n '
# See if $appOtherPid is in PID column; there are sometimes
# non-blanks in column 1 (I and S observed so far)
/^.'"${PATTERN_WS}${PATTERN_WS}*${appOtherPid}${PATTERN_WS}"'/{
# strip PID column
s/^.'"${PATTERN_WS}${PATTERN_WS}*${appOtherPid}${PATTERN_WS}${PATTERN_WS}"'*//
# strip PPID column
s/^[1-9][0-9]*'"${PATTERN_WS}${PATTERN_WS}"'*//
# strip PGID column
s/^[1-9][0-9]*'"${PATTERN_WS}${PATTERN_WS}"'*//
# strip everything after WINPID column
s/'"${PATTERN_WS}"'.*//
p
q
}
'`
echo "INFO: Cygwin pid=$appOtherPid maps to Windows pid=$appJavaPid"
else
# show PID, PPID and COMM columns only
appJavaPid=`ps -o pid,ppid,comm \
| sed -n '
# see if appOtherPid is in either PID or PPID columns
/'"${PATTERN_WS}${appOtherPid}${PATTERN_WS}"'/{
# see if this is a java command
/java'"${PATTERN_EOL}"'/{
# strip leading white space
s/^'"${PATTERN_WS}${PATTERN_WS}"'*//
# strip everything after the first word
s/'"${PATTERN_WS}"'.*//
# print the pid and we are done
p
q
}
}
'`
echo "INFO: MKS shell pid=$appOtherPid; Java pid=$appJavaPid"
fi
if [ -z "$appJavaPid" ]; then
echo "ERROR: could not find app's Java pid." >&2
killApplication
exit 2
fi
appPidList="$appOtherPid $appJavaPid"
fi
echo "INFO: $1 is process $appJavaPid"
echo "INFO: $1 output is in $appOutput"
} }
# Stops an application by invoking the given class and argument, usage:
# stopApplication <class> <argument> # Stops a simple application by invoking ShutdownSimpleApplication
# class with a specific port-file, usage:
# stopApplication port-file
#
# Note: When this function returns, the SimpleApplication (or a subclass)
# may still be running because the application has not yet reached the
# shutdown check.
#
stopApplication() stopApplication()
{ {
$JAVA -classpath "${TESTCLASSES}" $1 $2 $JAVA -classpath "${TESTCLASSES}" ShutdownSimpleApplication $1
} }
# Wait for a simple application to stop running.
#
waitForApplication() {
if [ $isWindows = false ]; then
# non-Windows is easy; just one process
echo "INFO: waiting for $appJavaPid"
set +e
wait "$appJavaPid"
set -e
elif $isCygwin; then
# Cygwin pid and not the Windows pid
echo "INFO: waiting for $appOtherPid"
set +e
wait "$appOtherPid"
set -e
else # implied isMKS
# MKS has intermediate shell and Java process
echo "INFO: waiting for $appJavaPid"
# appJavaPid can be empty if pid search in startApplication() failed
if [ -n "$appJavaPid" ]; then
# only need to wait for the Java process
set +e
wait "$appJavaPid"
set -e
fi
fi
}
# Kills a simple application by sending a SIGTERM to the appropriate
# process(es); on Windows SIGQUIT (-9) is used.
#
killApplication()
{
if [ $isWindows = false ]; then
# non-Windows is easy; just one process
echo "INFO: killing $appJavaPid"
set +e
kill -TERM "$appJavaPid" # try a polite SIGTERM first
sleep 2
# send SIGQUIT (-9) just in case SIGTERM didn't do it
# but don't show any complaints
kill -QUIT "$appJavaPid" > /dev/null 2>&1
wait "$appJavaPid"
set -e
elif $isCygwin; then
# Cygwin pid and not the Windows pid
echo "INFO: killing $appOtherPid"
set +e
kill -9 "$appOtherPid"
wait "$appOtherPid"
set -e
else # implied isMKS
# MKS has intermediate shell and Java process
echo "INFO: killing $appPidList"
set +e
kill -9 $appPidList
set -e
# appJavaPid can be empty if pid search in startApplication() failed
if [ -n "$appJavaPid" ]; then
# only need to wait for the Java process
set +e
wait "$appJavaPid"
set -e
fi
fi
}
#!/bin/sh #!/bin/sh
# #
# Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
...@@ -24,56 +24,94 @@ ...@@ -24,56 +24,94 @@
# #
# Common setup for tool tests. # Common setup for tool tests and other tests that use jtools.
# Checks that TESTJAVA, TESTSRC, and TESTCLASSES environment variables are set. # Checks that TESTJAVA, TESTSRC, and TESTCLASSES environment variables are set.
# Creates the following for use by the tool tests #
# JAVA java launcher # Creates the following constants for use by the caller:
# JSTACK jstack utility # JAVA - java launcher
# JMAP jmap utility # JHAT - jhat utility
# JINFO jinfo utility # JINFO - jinfo utility
# JHAT jhat utility # JMAP - jmap utility
# PS path separator (";" or ":") # JPS - jps utility
# OS operating system # JSTACK - jstack utility
# OS - operating system name
# PATTERN_EOL - grep or sed end-of-line pattern
# PATTERN_WS - grep or sed whitespace pattern
# PS - path separator (";" or ":")
#
# Sets the following variables:
#
# isCygwin - true if environment is Cygwin
# isMKS - true if environment is MKS
# isLinux - true if OS is Linux
# isSolaris - true if OS is Solaris
# isWindows - true if OS is Windows
if [ "${TESTJAVA}" = "" ] if [ -z "${TESTJAVA}" ]; then
then echo "ERROR: TESTJAVA not set. Test cannot execute. Failed."
echo "TESTJAVA not set. Test cannot execute. Failed."
exit 1 exit 1
fi fi
if [ "${TESTSRC}" = "" ] if [ -z "${TESTSRC}" ]; then
then echo "ERROR: TESTSRC not set. Test cannot execute. Failed."
echo "TESTSRC not set. Test cannot execute. Failed."
exit 1 exit 1
fi fi
if [ "${TESTCLASSES}" = "" ] if [ -z "${TESTCLASSES}" ]; then
then echo "ERROR: TESTCLASSES not set. Test cannot execute. Failed."
echo "TESTCLASSES not set. Test cannot execute. Failed."
exit 1 exit 1
fi fi
# only enable these after checking the expected incoming env variables
set -eu
JAVA="${TESTJAVA}/bin/java" JAVA="${TESTJAVA}/bin/java"
JSTACK="${TESTJAVA}/bin/jstack"
JMAP="${TESTJAVA}/bin/jmap"
JINFO="${TESTJAVA}/bin/jinfo"
JHAT="${TESTJAVA}/bin/jhat" JHAT="${TESTJAVA}/bin/jhat"
JINFO="${TESTJAVA}/bin/jinfo"
JMAP="${TESTJAVA}/bin/jmap"
JPS="${TESTJAVA}/bin/jps"
JSTACK="${TESTJAVA}/bin/jstack"
isCygwin=false
isMKS=false
isLinux=false
isSolaris=false
isUnknownOS=false
isWindows=false
OS=`uname -s` OS=`uname -s`
# start with some UNIX like defaults
PATTERN_EOL='$'
# blank and tab
PATTERN_WS='[ ]'
PS=":"
case "$OS" in case "$OS" in
Windows* )
PS=";"
OS="Windows"
;;
CYGWIN* ) CYGWIN* )
PS=";"
OS="Windows" OS="Windows"
PATTERN_EOL='[ ]*$'
# blank and tab
PATTERN_WS='[ \t]'
isCygwin=true isCygwin=true
isWindows=true
;;
Linux )
OS="Linux"
isLinux=true
;;
SunOS )
OS="Solaris"
isSolaris=true
;;
Windows* )
OS="Windows"
PATTERN_EOL='[ ]*$'
PS=";"
isWindows=true
;; ;;
* ) * )
PS=":" isUnknownOS=true
;; ;;
esac esac
......
#!/bin/sh
#
# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
# @test
# @bug 6964018
# @summary Unit test for common tools infrastructure.
#
# @build SimpleApplication SleeperApplication ShutdownSimpleApplication
# @run shell CommonTests.sh
. ${TESTSRC}/CommonSetup.sh
. ${TESTSRC}/ApplicationSetup.sh
# hope for the best:
status=0
# Test program path constants from CommonSetup.sh:
#
for name in JAVA JHAT JINFO JMAP JPS JSTACK; do
eval value=$`echo $name`
echo "INFO: $name=$value"
if [ -x "$value" ]; then
echo "INFO: '$value' is executable."
else
echo "ERROR: '$value' is not executable." >&2
status=1
fi
done
# Display flag values from CommonSetup.sh:
#
for name in isCygwin isMKS isLinux isSolaris isUnknownOS isWindows; do
eval value=$`echo $name`
echo "INFO: flag $name=$value"
done
# Test OS constant from CommonSetup.sh:
#
if [ -z "$OS" ]; then
echo "ERROR: OS constant cannot be empty." >&2
status=1
fi
# Display the PATTERN_EOL value:
#
echo "INFO: PATTERN_EOL="`echo "$PATTERN_EOL" | od -c`
# Test PATTERN_EOL with 'grep' for a regular line.
#
TESTOUT="${TESTCLASSES}/testout.grep_reg_line_eol"
set +e
echo 'regular line' | grep "line${PATTERN_EOL}" > "$TESTOUT"
set -e
if [ -s "$TESTOUT" ]; then
echo "INFO: PATTERN_EOL works for regular line with grep."
else
echo "ERROR: PATTERN_EOL does not work for regular line with grep." >&2
status=1
fi
if $isWindows; then
# Test PATTERN_EOL with 'grep' for a CR line.
#
TESTOUT="${TESTCLASSES}/testout.grep_cr_line_eol"
set +e
echo 'CR line ' | grep "line${PATTERN_EOL}" > "$TESTOUT"
set -e
if [ -s "$TESTOUT" ]; then
echo "INFO: PATTERN_EOL works for CR line with grep."
else
echo "ERROR: PATTERN_EOL does not work for CR line with grep." >&2
status=1
fi
fi
# Test PATTERN_EOL with 'sed' for a regular line.
#
TESTOUT="${TESTCLASSES}/testout.sed_reg_line_eol"
echo 'regular line' | sed -n "/line${PATTERN_EOL}/p" > "$TESTOUT"
if [ -s "$TESTOUT" ]; then
echo "INFO: PATTERN_EOL works for regular line with sed."
else
echo "ERROR: PATTERN_EOL does not work for regular line with sed." >&2
status=1
fi
if $isWindows; then
# Test PATTERN_EOL with 'sed' for a CR line.
#
TESTOUT="${TESTCLASSES}/testout.sed_cr_line_eol"
echo 'CR line ' | sed -n "/line${PATTERN_EOL}/p" > "$TESTOUT"
if [ -s "$TESTOUT" ]; then
echo "INFO: PATTERN_EOL works for CR line with sed."
else
echo "ERROR: PATTERN_EOL does not work for CR line with sed." >&2
status=1
fi
fi
# Display the PATTERN_WS value:
#
echo "INFO: PATTERN_WS="`echo "$PATTERN_WS" | od -c`
# Test PATTERN_WS with 'grep' for a blank.
#
TESTOUT="${TESTCLASSES}/testout.grep_blank"
set +e
echo 'blank: ' | grep "$PATTERN_WS" > "$TESTOUT"
set -e
if [ -s "$TESTOUT" ]; then
echo "INFO: PATTERN_WS works for blanks with grep."
else
echo "ERROR: PATTERN_WS does not work for blanks with grep." >&2
status=1
fi
# Test PATTERN_WS with 'grep' for a tab.
#
TESTOUT="${TESTCLASSES}/testout.grep_tab"
set +e
echo 'tab: ' | grep "$PATTERN_WS" > "$TESTOUT"
set -e
if [ -s "$TESTOUT" ]; then
echo "INFO: PATTERN_WS works for tabs with grep."
else
echo "ERROR: PATTERN_WS does not work for tabs with grep." >&2
status=1
fi
# Test PATTERN_WS with 'sed' for a blank.
#
TESTOUT="${TESTCLASSES}/testout.sed_blank"
echo 'blank: ' | sed -n "/$PATTERN_WS/p" > "$TESTOUT"
if [ -s "$TESTOUT" ]; then
echo "INFO: PATTERN_WS works for blanks with sed."
else
echo "ERROR: PATTERN_WS does not work for blanks with sed." >&2
status=1
fi
# Test PATTERN_WS with 'sed' for a tab.
#
TESTOUT="${TESTCLASSES}/testout.sed_tab"
echo 'tab: ' | sed -n "/$PATTERN_WS/p" > "$TESTOUT"
if [ -s "$TESTOUT" ]; then
echo "INFO: PATTERN_WS works for tabs with sed."
else
echo "ERROR: PATTERN_WS does not work for tabs with sed." >&2
status=1
fi
# Test startApplication and use PORTFILE for coordination
# The app sleeps for 30 seconds.
#
PORTFILE="${TESTCLASSES}"/shutdown.port
startApplication SleeperApplication "${PORTFILE}" 30
# Test appJavaPid in "ps" cmd output.
#
TESTOUT="${TESTCLASSES}/testout.ps_app"
set +e
if $isCygwin; then
# On Cygwin, appJavaPid is the Windows pid for the Java process
# and appOtherPid is the Cygwin pid for the Java process.
ps -p "$appOtherPid" \
| grep "${PATTERN_WS}${appJavaPid}${PATTERN_WS}" > "$TESTOUT"
else
# output only pid and comm columns to avoid mismatches
ps -eo pid,comm \
| grep "^${PATTERN_WS}*${appJavaPid}${PATTERN_WS}" > "$TESTOUT"
fi
set -e
if [ -s "$TESTOUT" ]; then
echo "INFO: begin appJavaPid=$appJavaPid in 'ps' cmd output:"
cat "$TESTOUT"
echo "INFO: end appJavaPid=$appJavaPid in 'ps' cmd output."
else
echo "ERROR: 'ps' cmd should show appJavaPid=$appJavaPid." >&2
status=1
fi
if [ -n "$appOtherPid" ]; then
# Test appOtherPid in "ps" cmd output, if we have one.
#
TESTOUT="${TESTCLASSES}/testout.ps_other"
set +e
if $isCygwin; then
ps -p "$appOtherPid" \
| grep "${PATTERN_WS}${appOtherPid}${PATTERN_WS}" > "$TESTOUT"
else
# output only pid and comm columns to avoid mismatches
ps -eo pid,comm \
| grep "^${PATTERN_WS}*${appOtherPid}${PATTERN_WS}" > "$TESTOUT"
fi
set -e
if [ -s "$TESTOUT" ]; then
echo "INFO: begin appOtherPid=$appOtherPid in 'ps' cmd output:"
cat "$TESTOUT"
echo "INFO: end appOtherPid=$appOtherPid in 'ps' cmd output."
else
echo "ERROR: 'ps' cmd should show appOtherPid=$appOtherPid." >&2
status=1
fi
fi
# Test stopApplication and PORTFILE for coordination
#
stopApplication "${PORTFILE}"
# Test application still running after stopApplication.
#
# stopApplication just lets the app know that it can stop, but the
# app might still be doing work. This test just demonstrates that
# fact and doesn't fail if the app is already done.
#
TESTOUT="${TESTCLASSES}/testout.after_stop"
set +e
if $isCygwin; then
# On Cygwin, appJavaPid is the Windows pid for the Java process
# and appOtherPid is the Cygwin pid for the Java process.
ps -p "$appOtherPid" \
| grep "${PATTERN_WS}${appJavaPid}${PATTERN_WS}" > "$TESTOUT"
else
# output only pid and comm columns to avoid mismatches
ps -eo pid,comm \
| grep "^${PATTERN_WS}*${appJavaPid}${PATTERN_WS}" > "$TESTOUT"
fi
set -e
if [ -s "$TESTOUT" ]; then
echo "INFO: it is okay for appJavaPid=$appJavaPid to still be running" \
"after stopApplication() is called."
echo "INFO: begin 'after_stop' output:"
cat "$TESTOUT"
echo "INFO: end 'after_stop' output."
fi
# Test waitForApplication
#
# The app might already be gone so this function shouldn't generate
# a fatal error in either call.
#
waitForApplication
if [ $isWindows = false ]; then
# Windows can recycle pids quickly so we can't use this test there
TESTOUT="${TESTCLASSES}/testout.after_kill"
set +e
# output only pid and comm columns to avoid mismatches
ps -eo pid,comm \
| grep "^${PATTERN_WS}*${appJavaPid}${PATTERN_WS}" > "$TESTOUT"
set -e
if [ -s "$TESTOUT" ]; then
echo "ERROR: 'ps' cmd should not show appJavaPid." >&2
echo "ERROR: begin 'after_kill' output:" >&2
cat "$TESTOUT" >&2
echo "ERROR: end 'after_kill' output." >&2
status=1
else
echo "INFO: 'ps' cmd does not show appJavaPid after" \
"waitForApplication() is called."
fi
fi
# Test killApplication
#
# The app is already be gone so this function shouldn't generate
# a fatal error.
#
killApplication
exit $status
/* /*
* Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -22,10 +22,13 @@ ...@@ -22,10 +22,13 @@
*/ */
/* /*
* Used to shutdown SimpleApplication (or a subclass). The argument to
* this class is the name of a file that contains the TCP port number
* on which SimpleApplication (or a subclass) is listening.
* *
* * Note: When this program returns, the SimpleApplication (or a subclass)
* Used to shutdown SimpleApplication. The argument to this class is * may still be running because the application has not yet reached the
* the TCP port number where SimpleApplication is listening. * shutdown check.
*/ */
import java.net.Socket; import java.net.Socket;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
...@@ -35,6 +38,11 @@ import java.io.FileInputStream; ...@@ -35,6 +38,11 @@ import java.io.FileInputStream;
public class ShutdownSimpleApplication { public class ShutdownSimpleApplication {
public static void main(String args[]) throws Exception { public static void main(String args[]) throws Exception {
if (args.length != 1) {
throw new RuntimeException("Usage: ShutdownSimpleApplication" +
" port-file");
}
// read the (TCP) port number from the given file // read the (TCP) port number from the given file
File f = new File(args[0]); File f = new File(args[0]);
...@@ -42,21 +50,27 @@ public class ShutdownSimpleApplication { ...@@ -42,21 +50,27 @@ public class ShutdownSimpleApplication {
byte b[] = new byte[8]; byte b[] = new byte[8];
int n = fis.read(b); int n = fis.read(b);
if (n < 1) { if (n < 1) {
throw new RuntimeException("Empty file"); throw new RuntimeException("Empty port-file");
} }
fis.close(); fis.close();
String str = new String(b, 0, n, "UTF-8"); String str = new String(b, 0, n, "UTF-8");
System.out.println("Port number of application is: " + str); System.out.println("INFO: Port number of SimpleApplication: " + str);
int port = Integer.parseInt(str); int port = Integer.parseInt(str);
// Now connect to the port (which will shutdown application) // Now connect to the port (which will shutdown application)
System.out.println("Connecting to port " + port + System.out.println("INFO: Connecting to port " + port +
" to shutdown Application ..."); " to shutdown SimpleApplication ...");
System.out.flush();
Socket s = new Socket(); Socket s = new Socket();
s.connect( new InetSocketAddress(port) ); s.connect( new InetSocketAddress(port) );
s.close(); s.close();
System.out.println("INFO: done connecting to SimpleApplication.");
System.out.flush();
System.exit(0);
} }
} }
/* /*
* Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -22,10 +22,12 @@ ...@@ -22,10 +22,12 @@
*/ */
/* /*
* A simple application used by unit tests. The first argument to this
* class is the name of a file to which a TCP port number can be written.
* *
* * By default, this class does nothing other than bind to a TCP port,
* A simple application used for tool unit tests. It does nothing else * write the TCP port number to a file, and wait for an incoming connection
* bind to a TCP port and wait for a shutdown message. * in order to complete the application shutdown protocol.
*/ */
import java.net.Socket; import java.net.Socket;
import java.net.ServerSocket; import java.net.ServerSocket;
...@@ -33,25 +35,86 @@ import java.io.File; ...@@ -33,25 +35,86 @@ import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
public class SimpleApplication { public class SimpleApplication {
public static void main(String args[]) throws Exception { private static SimpleApplication myApp; // simple app or a subclass
private static String myAppName; // simple app name
private static int myPort; // coordination port #
private static ServerSocket mySS; // coordination socket
// protected so a subclass can extend it; not public so creation is
// limited.
protected SimpleApplication() {
// save simple app (or subclass) name for messages
myAppName = getClass().getName();
}
// return the simple application (or a subclass)
final public static SimpleApplication getMyApp() {
return myApp;
}
// set the simple application (for use by a subclass)
final public static void setMyApp(SimpleApplication _myApp) {
myApp = _myApp;
}
// execute the application finish protocol
final public void doMyAppFinish(String[] args) throws Exception {
System.out.println("INFO: " + myAppName + " is waiting on port: " +
myPort);
System.out.flush();
// wait for test harness to connect
Socket s = mySS.accept();
s.close();
mySS.close();
System.out.println("INFO: " + myAppName + " is shutting down.");
System.out.flush();
}
// execute the application start protocol
final public void doMyAppStart(String[] args) throws Exception {
if (args.length < 1) {
throw new RuntimeException("Usage: " + myAppName +
" port-file [arg(s)]");
}
// bind to a random port // bind to a random port
ServerSocket ss = new ServerSocket(0); mySS = new ServerSocket(0);
int port = ss.getLocalPort(); myPort = mySS.getLocalPort();
// Write the port number to the given file // Write the port number to the given file
File f = new File(args[0]); File f = new File(args[0]);
FileOutputStream fos = new FileOutputStream(f); FileOutputStream fos = new FileOutputStream(f);
fos.write( Integer.toString(port).getBytes("UTF-8") ); fos.write( Integer.toString(myPort).getBytes("UTF-8") );
fos.close(); fos.close();
System.out.println("Application waiting on port: " + port); System.out.println("INFO: " + myAppName + " created socket on port: " +
myPort);
System.out.flush(); System.out.flush();
}
// wait for test harness to connect // execute the app work (subclass can override this)
Socket s = ss.accept(); public void doMyAppWork(String[] args) throws Exception {
s.close(); }
ss.close();
public static void main(String[] args) throws Exception {
if (myApp == null) {
// create myApp since a subclass hasn't done so
myApp = new SimpleApplication();
}
myApp.doMyAppStart(args); // do the app start protocol
System.out.println("INFO: " + myAppName + " is calling doMyAppWork()");
System.out.flush();
myApp.doMyAppWork(args); // do the app work
System.out.println("INFO: " + myAppName + " returned from" +
" doMyAppWork()");
System.out.flush();
myApp.doMyAppFinish(args); // do the app finish protocol
System.out.println("Application shutdown."); System.exit(0);
} }
} }
/*
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* An example subclass of SimpleApplication that illustrates how to
* override the doMyAppWork() method.
*/
public class SleeperApplication extends SimpleApplication {
public static int DEFAULT_SLEEP_TIME = 60; // time is in seconds
// execute the sleeper app work
public void doMyAppWork(String[] args) throws Exception {
int sleep_time = DEFAULT_SLEEP_TIME;
// args[0] is the port-file
if (args.length < 2) {
System.out.println("INFO: using default sleep time of "
+ sleep_time + " seconds.");
} else {
try {
sleep_time = Integer.parseInt(args[1]);
} catch (NumberFormatException nfe) {
throw new RuntimeException("Error: '" + args[1] +
"': is not a valid seconds value.");
}
}
Thread.sleep(sleep_time * 1000); // our "work" is to sleep
}
public static void main(String[] args) throws Exception {
SleeperApplication myApp = new SleeperApplication();
SimpleApplication.setMyApp(myApp);
SimpleApplication.main(args);
}
}
#!/bin/sh #!/bin/sh
# #
# Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
...@@ -32,7 +32,11 @@ ...@@ -32,7 +32,11 @@
# @run shell ParseTest.sh # @run shell ParseTest.sh
. ${TESTSRC}/../common/CommonSetup.sh . ${TESTSRC}/../common/CommonSetup.sh
. ${TESTSRC}/../common/ApplicationSetup.sh
# all return statuses are checked in this test
set +e
failed=0
DUMPFILE="minimal.bin" DUMPFILE="minimal.bin"
......
#!/bin/sh #!/bin/sh
# #
# Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
...@@ -35,53 +35,57 @@ ...@@ -35,53 +35,57 @@
. ${TESTSRC}/../common/CommonSetup.sh . ${TESTSRC}/../common/CommonSetup.sh
. ${TESTSRC}/../common/ApplicationSetup.sh . ${TESTSRC}/../common/ApplicationSetup.sh
# Start application (send output to shutdown.port) # Start application and use PORTFILE for coordination
PORTFILE="${TESTCLASSES}"/shutdown.port PORTFILE="${TESTCLASSES}"/shutdown.port
startApplication \ startApplication SimpleApplication "${PORTFILE}"
-classpath "${TESTCLASSES}" SimpleApplication "${PORTFILE}"
# all return statuses are checked in this test
set +e
failed=0 failed=0
if [ "$OS" != "Windows" ]; then if [ $isWindows = false ]; then
# -sysprops option # -sysprops option
${JINFO} -sysprops $pid ${JINFO} -sysprops $appJavaPid
if [ $? != 0 ]; then failed=1; fi if [ $? != 0 ]; then failed=1; fi
# -flags option # -flags option
${JINFO} -flags $pid ${JINFO} -flags $appJavaPid
if [ $? != 0 ]; then failed=1; fi if [ $? != 0 ]; then failed=1; fi
# no option # no option
${JINFO} $pid ${JINFO} $appJavaPid
if [ $? != 0 ]; then failed=1; fi if [ $? != 0 ]; then failed=1; fi
fi fi
# -flag option # -flag option
${JINFO} -flag +PrintGC $pid ${JINFO} -flag +PrintGC $appJavaPid
if [ $? != 0 ]; then failed=1; fi if [ $? != 0 ]; then failed=1; fi
${JINFO} -flag -PrintGC $pid ${JINFO} -flag -PrintGC $appJavaPid
if [ $? != 0 ]; then failed=1; fi if [ $? != 0 ]; then failed=1; fi
${JINFO} -flag PrintGC $pid ${JINFO} -flag PrintGC $appJavaPid
if [ $? != 0 ]; then failed=1; fi if [ $? != 0 ]; then failed=1; fi
if [ "$OS" = "SunOS" ]; then if $isSolaris; then
${JINFO} -flag +ExtendedDTraceProbes $pid ${JINFO} -flag +ExtendedDTraceProbes $appJavaPid
if [ $? != 0 ]; then failed=1; fi if [ $? != 0 ]; then failed=1; fi
${JINFO} -flag -ExtendedDTraceProbes $pid ${JINFO} -flag -ExtendedDTraceProbes $appJavaPid
if [ $? != 0 ]; then failed=1; fi if [ $? != 0 ]; then failed=1; fi
${JINFO} -flag ExtendedDTraceProbes $pid ${JINFO} -flag ExtendedDTraceProbes $appJavaPid
if [ $? != 0 ]; then failed=1; fi if [ $? != 0 ]; then failed=1; fi
fi fi
stopApplication ShutdownSimpleApplication "${PORTFILE}" set -e
exit $failed stopApplication "${PORTFILE}"
waitForApplication
exit $failed
#!/bin/sh #!/bin/sh
# #
# Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
...@@ -35,24 +35,25 @@ ...@@ -35,24 +35,25 @@
. ${TESTSRC}/../common/CommonSetup.sh . ${TESTSRC}/../common/CommonSetup.sh
. ${TESTSRC}/../common/ApplicationSetup.sh . ${TESTSRC}/../common/ApplicationSetup.sh
# Start application (send output to shutdown.port) # Start application and use PORTFILE for coordination
PORTFILE="${TESTCLASSES}"/shutdown.port PORTFILE="${TESTCLASSES}"/shutdown.port
startApplication \ startApplication SimpleApplication "${PORTFILE}"
-classpath "${TESTCLASSES}" SimpleApplication "${PORTFILE}"
# all return statuses are checked in this test
set +e
failed=0 failed=0
# -histo[:live] option # -histo[:live] option
${JMAP} -histo $pid ${JMAP} -histo $appJavaPid
if [ $? != 0 ]; then failed=1; fi if [ $? != 0 ]; then failed=1; fi
${JMAP} -histo:live $pid ${JMAP} -histo:live $appJavaPid
if [ $? != 0 ]; then failed=1; fi if [ $? != 0 ]; then failed=1; fi
# -dump option # -dump option
p=`expr $pid` DUMPFILE="java_pid${appJavaPid}.hprof"
DUMPFILE="java_pid${p}.hprof" ${JMAP} -dump:format=b,file=${DUMPFILE} $appJavaPid
${JMAP} -dump:format=b,file=${DUMPFILE} $pid
if [ $? != 0 ]; then failed=1; fi if [ $? != 0 ]; then failed=1; fi
# check that heap dump is parsable # check that heap dump is parsable
...@@ -63,7 +64,7 @@ if [ $? != 0 ]; then failed=1; fi ...@@ -63,7 +64,7 @@ if [ $? != 0 ]; then failed=1; fi
rm ${DUMPFILE} rm ${DUMPFILE}
# -dump:live option # -dump:live option
${JMAP} -dump:live,format=b,file=${DUMPFILE} $pid ${JMAP} -dump:live,format=b,file=${DUMPFILE} $appJavaPid
if [ $? != 0 ]; then failed=1; fi if [ $? != 0 ]; then failed=1; fi
# check that heap dump is parsable # check that heap dump is parsable
...@@ -71,9 +72,11 @@ ${JHAT} -parseonly true ${DUMPFILE} ...@@ -71,9 +72,11 @@ ${JHAT} -parseonly true ${DUMPFILE}
if [ $? != 0 ]; then failed=1; fi if [ $? != 0 ]; then failed=1; fi
# dump file is large so remove it # dump file is large so remove it
rm ${DUMPFILE} rm -f ${DUMPFILE}
stopApplication ShutdownSimpleApplication "${PORTFILE}" set -e
exit $failed stopApplication "${PORTFILE}"
waitForApplication
exit $failed
# #
# Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
...@@ -43,10 +43,20 @@ setup() { ...@@ -43,10 +43,20 @@ setup() {
Windows_*) Windows_*)
PS=";" PS=";"
FS="\\" FS="\\"
# MKS diff deals with trailing CRs automatically
golden_diff="diff"
;;
CYGWIN*)
PS=":"
FS="/"
# Cygwin diff needs to be told to ignore trailing CRs
golden_diff="diff --strip-trailing-cr"
;; ;;
*) *)
PS=":" PS=":"
FS="/" FS="/"
# Assume any other platform doesn't have the trailing CR stuff
golden_diff="diff"
;; ;;
esac esac
......
#!/bin/sh #!/bin/sh
# #
# Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
...@@ -42,7 +42,7 @@ fi ...@@ -42,7 +42,7 @@ fi
rm -f jrunscript-eTest.out 2>/dev/null rm -f jrunscript-eTest.out 2>/dev/null
${JRUNSCRIPT} -e "println('hello')" > jrunscript-eTest.out 2>&1 ${JRUNSCRIPT} -e "println('hello')" > jrunscript-eTest.out 2>&1
diff jrunscript-eTest.out ${TESTSRC}/dash-e.out $golden_diff jrunscript-eTest.out ${TESTSRC}/dash-e.out
if [ $? != 0 ] if [ $? != 0 ]
then then
echo "Output of jrunscript -e differ from expected output. Failed." echo "Output of jrunscript -e differ from expected output. Failed."
...@@ -55,7 +55,7 @@ fi ...@@ -55,7 +55,7 @@ fi
rm -f jrunscript-eTest.out 2>/dev/null rm -f jrunscript-eTest.out 2>/dev/null
${JRUNSCRIPT} -l js -e "println('hello')" > jrunscript-eTest.out 2>&1 ${JRUNSCRIPT} -l js -e "println('hello')" > jrunscript-eTest.out 2>&1
diff jrunscript-eTest.out ${TESTSRC}/dash-e.out $golden_diff jrunscript-eTest.out ${TESTSRC}/dash-e.out
if [ $? != 0 ] if [ $? != 0 ]
then then
echo "Output of jrunscript -e differ from expected output. Failed." echo "Output of jrunscript -e differ from expected output. Failed."
......
#!/bin/sh #!/bin/sh
# #
# Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
...@@ -42,7 +42,7 @@ fi ...@@ -42,7 +42,7 @@ fi
rm -f jrunscript-fTest.out 2>/dev/null rm -f jrunscript-fTest.out 2>/dev/null
${JRUNSCRIPT} -f ${TESTSRC}/hello.js > jrunscript-fTest.out 2>&1 ${JRUNSCRIPT} -f ${TESTSRC}/hello.js > jrunscript-fTest.out 2>&1
diff jrunscript-fTest.out ${TESTSRC}/dash-f.out $golden_diff jrunscript-fTest.out ${TESTSRC}/dash-f.out
if [ $? != 0 ] if [ $? != 0 ]
then then
echo "Output of jrunscript -f differ from expected output. Failed." echo "Output of jrunscript -f differ from expected output. Failed."
...@@ -56,7 +56,7 @@ fi ...@@ -56,7 +56,7 @@ fi
rm -f jrunscript-fTest.out 2>/dev/null rm -f jrunscript-fTest.out 2>/dev/null
${JRUNSCRIPT} -l js -f ${TESTSRC}/hello.js > jrunscript-fTest.out 2>&1 ${JRUNSCRIPT} -l js -f ${TESTSRC}/hello.js > jrunscript-fTest.out 2>&1
diff jrunscript-fTest.out ${TESTSRC}/dash-f.out $golden_diff jrunscript-fTest.out ${TESTSRC}/dash-f.out
if [ $? != 0 ] if [ $? != 0 ]
then then
echo "Output of jrunscript -f differ from expected output. Failed." echo "Output of jrunscript -f differ from expected output. Failed."
......
#!/bin/sh #!/bin/sh
# #
# Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
...@@ -49,7 +49,7 @@ java.lang.System.out.println('hello world from script'); ...@@ -49,7 +49,7 @@ java.lang.System.out.println('hello world from script');
new java.lang.Runnable() { run: function() { println('I am runnable'); }}.run(); new java.lang.Runnable() { run: function() { println('I am runnable'); }}.run();
EOF EOF
diff jrunscriptTest.out ${TESTSRC}/repl.out $golden_diff jrunscriptTest.out ${TESTSRC}/repl.out
if [ $? != 0 ] if [ $? != 0 ]
then then
echo "Output of jrunscript session differ from expected output. Failed." echo "Output of jrunscript session differ from expected output. Failed."
...@@ -67,7 +67,7 @@ java.lang.System.out.println('hello world from script'); ...@@ -67,7 +67,7 @@ java.lang.System.out.println('hello world from script');
new java.lang.Runnable() { run: function() { println('I am runnable'); }}.run(); new java.lang.Runnable() { run: function() { println('I am runnable'); }}.run();
EOF EOF
diff jrunscriptTest.out ${TESTSRC}/repl.out $golden_diff jrunscriptTest.out ${TESTSRC}/repl.out
if [ $? != 0 ] if [ $? != 0 ]
then then
echo "Output of jrunscript -l js differ from expected output. Failed." echo "Output of jrunscript -l js differ from expected output. Failed."
......
#!/bin/sh #!/bin/sh
# #
# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
...@@ -35,22 +35,26 @@ ...@@ -35,22 +35,26 @@
. ${TESTSRC}/../common/CommonSetup.sh . ${TESTSRC}/../common/CommonSetup.sh
. ${TESTSRC}/../common/ApplicationSetup.sh . ${TESTSRC}/../common/ApplicationSetup.sh
# Start application (send output to shutdown.port) # Start application and use PORTFILE for coordination
PORTFILE="${TESTCLASSES}"/shutdown.port PORTFILE="${TESTCLASSES}"/shutdown.port
startApplication \ startApplication SimpleApplication "${PORTFILE}"
-classpath "${TESTCLASSES}" SimpleApplication "${PORTFILE}"
# all return statuses are checked in this test
set +e
failed=0 failed=0
# normal # normal
$JSTACK $pid 2>&1 $JSTACK $appJavaPid 2>&1
if [ $? != 0 ]; then failed=1; fi if [ $? != 0 ]; then failed=1; fi
# long # long
$JSTACK -l $pid 2>&1 $JSTACK -l $appJavaPid 2>&1
if [ $? != 0 ]; then failed=1; fi if [ $? != 0 ]; then failed=1; fi
stopApplication ShutdownSimpleApplication "${PORTFILE}" set -e
stopApplication "${PORTFILE}"
waitForApplication
exit $failed exit $failed
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册