001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017:
018: package org.apache.harmony.xnet.provider.jsse;
019:
020: import java.io.File;
021: import java.io.FileInputStream;
022: import java.security.KeyStore;
023: import java.security.SecureRandom;
024:
025: import javax.net.ssl.KeyManagerFactory;
026: import javax.net.ssl.TrustManagerFactory;
027:
028: import junit.framework.TestCase;
029:
030: /**
031: * Tests for <code>ServerHandshakeImpl</code> constructor and methods
032: *
033: */
034: public class ServerHandshakeImplTest extends TestCase {
035: // to store initialization Exception
036: private static Exception initException;
037:
038: private SSLParameters sslParameters;
039: private ServerHandshakeImpl server;
040:
041: public void setUp() throws Exception {
042: char[] pwd = JSSETestData.KS_PASSWORD;
043: KeyStore ks = JSSETestData.getKeyStore();
044:
045: KeyManagerFactory kmf = KeyManagerFactory.getInstance("X509");
046: kmf.init(ks, pwd);
047:
048: TrustManagerFactory tmf = TrustManagerFactory
049: .getInstance("X509");
050: tmf.init(ks);
051:
052: sslParameters = new SSLParameters(kmf.getKeyManagers(), tmf
053: .getTrustManagers(), new SecureRandom(),
054: new SSLSessionContextImpl(),
055: new SSLSessionContextImpl());
056:
057: server = new ServerHandshakeImpl(new SSLEngineImpl(
058: sslParameters));
059:
060: SSLEngineAppData appData = new SSLEngineAppData();
061: AlertProtocol alertProtocol = new AlertProtocol();
062: SSLBufferedInput recProtIS = new SSLBufferedInput();
063: SSLRecordProtocol recordProtocol = new SSLRecordProtocol(
064: server, alertProtocol, recProtIS, appData);
065: }
066:
067: public void testUnwrap() {
068: byte[] ses_id = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
069: byte[] version = new byte[] { 3, 1 };
070: CipherSuite[] cipher_suite = new CipherSuite[] { CipherSuite.TLS_RSA_WITH_RC4_128_MD5 };
071: ClientHello message = new ClientHello(new SecureRandom(),
072: version, ses_id, cipher_suite);
073: HandshakeIODataStream out = new HandshakeIODataStream();
074: out.writeUint8(message.getType());
075: out.writeUint24(message.length());
076: message.send(out);
077: byte[] encodedClientHello = out.getData(1000);
078:
079: // ----------------------------------------
080: // unwrap client hello (full handshake)
081: // precondition: session hash does not contains requested sesssion
082: server.unwrap(encodedClientHello);
083: server.getTask().run(); // process client hello in delegated task
084: server.wrap(); // modelling of server respond sending
085:
086: assertFalse(server.isResuming);
087:
088: // unwrap unexpected second client hello
089: try {
090: server.unwrap(encodedClientHello);
091: fail("No expected AlertException");
092: } catch (AlertException e) {
093: }
094:
095: // unexpected ChangeCipherSpec
096: try {
097: server.receiveChangeCipherSpec();
098: fail("No expected AlertException");
099: } catch (AlertException e) {
100: }
101:
102: // ----------------------------------------
103: // unwrap client hello (abbreviated handshake)
104: // precondition: session hash contains requested sesssion
105: clearServerData();
106: SSLSessionImpl session = new SSLSessionImpl(
107: CipherSuite.TLS_RSA_WITH_RC4_128_MD5,
108: new SecureRandom());
109: session.id = ses_id;
110: // put session to hash
111: server.parameters.getServerSessionContext().putSession(session);
112:
113: server.unwrap(encodedClientHello);
114: server.getTask().run(); // process client hello in delegated task
115: server.wrap(); // modelling of server respond sending
116:
117: assertTrue(server.isResuming);
118:
119: server.makeFinished(); // complete handshake
120:
121: // expected ChangeCipherSpec
122: server.receiveChangeCipherSpec();
123: }
124:
125: public void testServerHandshakeImpl() {
126: assertEquals(server.status, HandshakeProtocol.NEED_UNWRAP);
127: assertTrue(server.nonBlocking);
128: assertSame(server.parameters.getKeyManager(), sslParameters
129: .getKeyManager());
130: assertSame(server.parameters.getTrustManager(), sslParameters
131: .getTrustManager());
132: assertNotNull(server.engineOwner);
133: assertNull(server.socketOwner);
134: }
135:
136: private void clearServerData() {
137: server.clearMessages();
138: server.io_stream = new HandshakeIODataStream();
139: server.status = HandshakeProtocol.NEED_UNWRAP;
140: }
141: }
|