/*
* Copyright ( c ) 2002 , 2011 , Oracle and / or its affiliates . All rights reserved .
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER .
*
* This code is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License version 2 only , as
* published by the Free Software Foundation .
*
* This code is distributed in the hope that it will be useful , but WITHOUT
* ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE . See the GNU General Public License
* version 2 for more details ( a copy is included in the LICENSE file that
* accompanied this code ) .
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work ; if not , write to the Free Software Foundation ,
* Inc . , 51 Franklin St , Fifth Floor , Boston , MA 02110 - 1301 USA .
*
* Please contact Oracle , 500 Oracle Parkway , Redwood Shores , CA 94065 USA
* or visit www . oracle . com if you need additional information or have any
* questions .
*/
/*
* @ test 1 . 3 01 / 03 / 08
* @ bug 4522550
* @ summary SSLContext TrustMananagerFactory and KeyManagerFactory
* should throw if not init
* @ run main / othervm ProviderInit
*
* SunJSSE does not support dynamic system properties , no way to re - use
* system properties in samevm / agentvm mode .
* @ author Jaya Hangal
*/
/**
* This test case makes sure that the providers throw
* IllegalStateException when used without getting initialized .
* The relevant tests are in doClientSide method .
*/
import java.io.*;
import java.net.*;
import javax.net.ssl.*;
public class ProviderInit {
/*
* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
* Set the various variables needed for the tests , then
* specify what tests to run on each side .
*/
/*
* Should we run the client or server in a separate thread ?
* Both sides can throw exceptions , but do you have a preference
* as to which side should be the main thread .
*/
static boolean separateServerThread = true ;
/*
* Where do we find the keystores ?
*/
static String pathToStores = "../../../../javax/net/ssl/etc" ;
static String keyStoreFile = "keystore" ;
static String trustStoreFile = "truststore" ;
static String passwd = "passphrase" ;
/*
* Is the server ready to serve ?
*/
volatile static boolean serverReady = false ;
/*
* Turn on SSL debugging ?
*/
static boolean debug = false ;
/*
* If the client or server is doing some kind of object creation
* that the other side depends on , and that thread prematurely
* exits , you may experience a hang . The test harness will
* terminate all hung threads after its timeout has expired ,
* currently 3 minutes by default , but you might try to be
* smart about it . . . .
*/
/*
* Define the server side of the test .
*
* If the server prematurely exits , serverReady will be set to true
* to avoid infinite hangs .
*/
void doServerSide() throws Exception {
SSLContext context = SSLContext.getInstance("TLS" );
SSLServerSocketFactory sslssf =
(SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
SSLServerSocket sslServerSocket =
(SSLServerSocket) sslssf.createServerSocket(serverPort);
serverPort = sslServerSocket.getLocalPort();
/*
* Signal Client , we ' re ready for his connect .
*/
serverReady = true ;
SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept();
sslSocket.setNeedClientAuth(true );
InputStream sslIS = sslSocket.getInputStream();
OutputStream sslOS = sslSocket.getOutputStream();
sslIS.read();
sslOS.write(85 );
sslOS.flush();
sslSocket.close();
}
/*
* Define the client side of the test .
*
* If the server prematurely exits , serverReady will be set to true
* to avoid infinite hangs .
*/
void doClientSide() throws Exception {
/*
* Wait for server to get started .
*/
while (!serverReady) {
Thread .sleep(50 );
}
SSLContext context = SSLContext.getInstance("TLS" );
SSLSocketFactory sslsf = null ;
/*
* Try using SSLContext without calling init ( )
* A call to getSocketFactory ( ) will throw an exception
*/
try {
sslsf =
(SSLSocketFactory) context.getSocketFactory();
communicate(sslsf, false );
} catch (IllegalStateException e) {
System.out.println("Caught the right exception" + e);
}
/*
* Try using TrustManagerFactory without calling init ( )
* A call to getTrustManagers ( ) will throw an exception
*/
try {
TrustManagerFactory tmf = TrustManagerFactory.getInstance(
"sunX509" );
TrustManager[] tms = tmf.getTrustManagers();
context.init(null , tms, null );
sslsf =
(SSLSocketFactory) context.getSocketFactory();
communicate(sslsf, false );
} catch (IllegalStateException e) {
System.out.println("Caught the right exception" + e);
}
/*
* Try using KeyManagerFactory without calling init ( )
* A call to getKeyManagers ( ) will throw an exception
*/
try {
KeyManagerFactory kmf = KeyManagerFactory.getInstance("sunX509" );
KeyManager kms[] = kmf.getKeyManagers();
context.init(kms, null , null );
sslsf =
(SSLSocketFactory) context.getSocketFactory();
communicate(sslsf, true );
} catch (Exception e) {
System.out.println("Caught the right exception" + e);
sslsf = (SSLSocketFactory) SSLSocketFactory.getDefault();
communicate(sslsf, false );
}
}
void communicate(SSLSocketFactory sslsf, boolean needClientAuth)
throws Exception {
SSLSocket sslSocket = (SSLSocket) sslsf.createSocket(
"localhost" , serverPort);
sslSocket.setNeedClientAuth(needClientAuth);
InputStream sslIS = sslSocket.getInputStream();
OutputStream sslOS = sslSocket.getOutputStream();
sslOS.write(280 );
sslOS.flush();
sslIS.read();
sslSocket.close();
}
/*
* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
* The remainder is just support stuff
*/
// use any free port by default
volatile int serverPort = 0 ;
volatile Exception serverException = null ;
volatile Exception clientException = null ;
public static void main(String[] args) throws Exception {
String keyFilename =
System.getProperty("test.src" , "./" ) + "/" + pathToStores +
"/" + keyStoreFile;
String trustFilename =
System.getProperty("test.src" , "./" ) + "/" + pathToStores +
"/" + trustStoreFile;
System.setProperty("javax.net.ssl.keyStore" , keyFilename);
System.setProperty("javax.net.ssl.keyStorePassword" , passwd);
System.setProperty("javax.net.ssl.trustStore" , trustFilename);
System.setProperty("javax.net.ssl.trustStorePassword" , passwd);
if (debug)
System.setProperty("javax.net.debug" , "all" );
/*
* Start the tests .
*/
new ProviderInit();
}
Thread clientThread = null ;
Thread serverThread = null ;
/*
* Primary constructor , used to drive remainder of the test .
*
* Fork off the other side , then do your work .
*/
ProviderInit() throws Exception {
if (separateServerThread) {
startServer(true );
startClient(false );
} else {
startClient(true );
startServer(false );
}
/*
* Wait for other side to close down .
*/
if (separateServerThread) {
serverThread.join();
} else {
clientThread.join();
}
/*
* When we get here , the test is pretty much over .
*
* If the main thread excepted , that propagates back
* immediately . If the other thread threw an exception , we
* should report back .
*/
if (serverException != null )
throw serverException;
if (clientException != null )
throw clientException;
}
void startServer(boolean newThread) throws Exception {
if (newThread) {
serverThread = new Thread () {
public void run() {
try {
doServerSide();
} catch (Exception e) {
/*
* Our server thread just died .
*
* Release the client , if not active already . . .
*/
System.err.println("Server died..." + e);
e.printStackTrace();
serverReady = true ;
serverException = e;
}
}
};
serverThread.start();
} else {
doServerSide();
}
}
void startClient(boolean newThread) throws Exception {
if (newThread) {
clientThread = new Thread () {
public void run() {
try {
doClientSide();
} catch (Exception e) {
/*
* Our client thread just died .
*/
System.err.println("Client died..." );
clientException = e;
}
}
};
clientThread.start();
} else {
doClientSide();
}
}
}
Messung V0.5 in Prozent C=94 H=86 G=89
¤ Dauer der Verarbeitung: 0.14 Sekunden
(vorverarbeitet am 2026-06-10)
¤
*© Formatika GbR, Deutschland