You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by te...@apache.org on 2007/02/04 09:10:11 UTC

svn commit: r503371 [5/5] - in /harmony/enhanced/classlib/trunk/modules/x-net: ./ META-INF/ src/main/java/org/apache/harmony/xnet/provider/jsse/ src/test/api/java/org/apache/harmony/xnet/tests/javax/net/ssl/ src/test/impl/java.injected/org/apache/harmo...

Added: harmony/enhanced/classlib/trunk/modules/x-net/src/test/impl/java.injected/org/apache/harmony/xnet/provider/jsse/ServerHandshakeImplTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/x-net/src/test/impl/java.injected/org/apache/harmony/xnet/provider/jsse/ServerHandshakeImplTest.java?view=auto&rev=503371
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/x-net/src/test/impl/java.injected/org/apache/harmony/xnet/provider/jsse/ServerHandshakeImplTest.java (added)
+++ harmony/enhanced/classlib/trunk/modules/x-net/src/test/impl/java.injected/org/apache/harmony/xnet/provider/jsse/ServerHandshakeImplTest.java Sun Feb  4 00:10:09 2007
@@ -0,0 +1,139 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package org.apache.harmony.xnet.provider.jsse;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.security.KeyStore;
+import java.security.SecureRandom;
+
+import javax.net.ssl.KeyManagerFactory;
+import javax.net.ssl.TrustManagerFactory;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for <code>ServerHandshakeImpl</code> constructor and methods
+ *  
+ */
+public class ServerHandshakeImplTest extends TestCase {
+  // to store initialization Exception
+  private static Exception initException;
+
+  
+  private SSLParameters sslParameters;
+  private ServerHandshakeImpl server;
+
+  public void setUp() throws Exception {
+        char[] pwd = JSSETestData.KS_PASSWORD;
+        KeyStore ks = JSSETestData.getKeyStore();
+
+        KeyManagerFactory kmf = KeyManagerFactory.getInstance("X509");
+        kmf.init(ks, pwd);
+
+        TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");
+        tmf.init(ks);
+
+        sslParameters = new SSLParameters(kmf.getKeyManagers(), tmf
+                .getTrustManagers(), new SecureRandom(),
+                new SSLSessionContextImpl(), new SSLSessionContextImpl());
+
+        server = new ServerHandshakeImpl(new SSLEngineImpl(sslParameters));
+
+        SSLEngineAppData appData = new SSLEngineAppData();
+        AlertProtocol alertProtocol = new AlertProtocol();
+        SSLBufferedInput recProtIS = new SSLBufferedInput();
+        SSLRecordProtocol recordProtocol = new SSLRecordProtocol(server,
+                alertProtocol, recProtIS, appData);
+    }
+
+    public void testUnwrap() {
+        byte[] ses_id = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
+        byte[] version = new byte[] { 3, 1 };
+        CipherSuite[] cipher_suite = new CipherSuite[] { 
+                CipherSuite.TLS_RSA_WITH_RC4_128_MD5 };
+        ClientHello message = new ClientHello(new SecureRandom(), version,
+                ses_id, cipher_suite);
+        HandshakeIODataStream out = new HandshakeIODataStream();
+        out.writeUint8(message.getType());
+        out.writeUint24(message.length());
+        message.send(out);
+        byte[] encodedClientHello = out.getData(1000);
+        
+        // ----------------------------------------
+        // unwrap client hello (full handshake)
+        // precondition: session hash does not contains requested sesssion        
+        server.unwrap(encodedClientHello);
+        server.getTask().run(); // process client hello in delegated task
+        server.wrap(); // modelling of server respond sending
+        
+        assertFalse(server.isResuming);
+
+        // unwrap unexpected second client hello
+        try {
+            server.unwrap(encodedClientHello);
+            fail("No expected AlertException");
+        } catch (AlertException e) {
+        }
+        
+        // unexpected ChangeCipherSpec
+        try {
+            server.receiveChangeCipherSpec();
+            fail("No expected AlertException");
+        } catch (AlertException e) {
+        }
+        
+        // ----------------------------------------
+        // unwrap client hello (abbreviated handshake)
+        // precondition: session hash contains requested sesssion
+        clearServerData();
+        SSLSessionImpl session = new SSLSessionImpl(
+                CipherSuite.TLS_RSA_WITH_RC4_128_MD5, new SecureRandom());
+        session.id = ses_id;
+        // put session to hash
+        server.parameters.getServerSessionContext().putSession(session);
+        
+        server.unwrap(encodedClientHello);
+        server.getTask().run(); // process client hello in delegated task
+        server.wrap(); // modelling of server respond sending
+        
+        assertTrue(server.isResuming);
+        
+        server.makeFinished(); // complete handshake
+        
+        // expected ChangeCipherSpec
+        server.receiveChangeCipherSpec();      
+    }
+
+    public void testServerHandshakeImpl() {
+        assertEquals(server.status, HandshakeProtocol.NEED_UNWRAP);
+        assertTrue(server.nonBlocking);
+        assertSame(server.parameters.getKeyManager(), sslParameters
+                .getKeyManager());
+        assertSame(server.parameters.getTrustManager(), sslParameters
+                .getTrustManager());
+        assertNotNull(server.engineOwner);
+        assertNull(server.socketOwner);
+    }
+
+    private void clearServerData() {
+        server.clearMessages();
+        server.io_stream = new HandshakeIODataStream();
+        server.status = HandshakeProtocol.NEED_UNWRAP;
+    }
+}
\ No newline at end of file

Propchange: harmony/enhanced/classlib/trunk/modules/x-net/src/test/impl/java.injected/org/apache/harmony/xnet/provider/jsse/ServerHandshakeImplTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/classlib/trunk/modules/x-net/src/test/impl/java.injected/org/apache/harmony/xnet/provider/jsse/TrustManagerImplTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/x-net/src/test/impl/java.injected/org/apache/harmony/xnet/provider/jsse/TrustManagerImplTest.java?view=auto&rev=503371
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/x-net/src/test/impl/java.injected/org/apache/harmony/xnet/provider/jsse/TrustManagerImplTest.java (added)
+++ harmony/enhanced/classlib/trunk/modules/x-net/src/test/impl/java.injected/org/apache/harmony/xnet/provider/jsse/TrustManagerImplTest.java Sun Feb  4 00:10:09 2007
@@ -0,0 +1,127 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package org.apache.harmony.xnet.provider.jsse;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.security.KeyStore;
+import java.security.cert.CertificateException;
+import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for <code>TrustManagerImpl</code> constructor and methods
+ *  
+ */
+public class TrustManagerImplTest extends TestCase {
+
+    // Cert. encoding.was generated by using of classes
+    // from org.apache.harmony.security.asn1 package and encoded
+    // by org.apache.harmony.misc.Base64 class.
+    // Source:
+    // org.apache.harmony.security.tests.support.provider.cert.CertFactoryTestData
+    private static String base64certEncoding = 
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIC+jCCAragAwIBAgICAiswDAYHKoZIzjgEAwEBADAdMRswGQYDVQQKExJDZXJ0a" +
+        "WZpY2F0ZSBJc3N1ZXIwIhgPMTk3MDAxMTIxMzQ2NDBaGA8xOTcwMDEyNDAzMzMyMF" +
+        "owHzEdMBsGA1UEChMUU3ViamVjdCBPcmdhbml6YXRpb24wGTAMBgcqhkjOOAQDAQE" +
+        "AAwkAAQIDBAUGBwiBAgCqggIAVaOCAhQwggIQMA8GA1UdDwEB/wQFAwMBqoAwEgYD" +
+        "VR0TAQH/BAgwBgEB/wIBBTAUBgNVHSABAf8ECjAIMAYGBFUdIAAwZwYDVR0RAQH/B" +
+        "F0wW4EMcmZjQDgyMi5OYW1lggdkTlNOYW1lpBcxFTATBgNVBAoTDE9yZ2FuaXphdG" +
+        "lvboYaaHR0cDovL3VuaWZvcm0uUmVzb3VyY2UuSWSHBP///wCIByoDolyDsgMwDAY" +
+        "DVR0eAQH/BAIwADAMBgNVHSQBAf8EAjAAMIGZBgNVHSUBAf8EgY4wgYsGBFUdJQAG" +
+        "CCsGAQUFBwMBBggrBgEFBQcDAQYIKwYBBQUHAwIGCCsGAQUFBwMDBggrBgEFBQcDB" +
+        "AYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEFBQcDBwYIKwYBBQUHAwgGCCsGAQUFBw" +
+        "MJBggrBgEFBQgCAgYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GA1UdNgEB/wQDAgE" +
+        "BMA4GBCpNhgkBAf8EAwEBATBkBgNVHRIEXTBbgQxyZmNAODIyLk5hbWWCB2ROU05h" +
+        "bWWkFzEVMBMGA1UEChMMT3JnYW5pemF0aW9uhhpodHRwOi8vdW5pZm9ybS5SZXNvd" +
+        "XJjZS5JZIcE////AIgHKgOiXIOyAzAJBgNVHR8EAjAAMAoGA1UdIwQDAQEBMAoGA1" +
+        "UdDgQDAQEBMAoGA1UdIQQDAQEBMAwGByqGSM44BAMBAQADMAAwLQIUAL4QvoazNWP" +
+        "7jrj84/GZlhm09DsCFQCBKGKCGbrP64VtUt4JPmLjW1VxQA==\n" +
+        "-----END CERTIFICATE-----\n";
+
+    private X509Certificate[] untrustedChain;
+
+    protected void setUp() throws Exception {
+        super.setUp();
+        CertificateFactory certFactory = CertificateFactory.getInstance("X509");
+        ByteArrayInputStream bais = new ByteArrayInputStream(base64certEncoding
+                .getBytes());
+        X509Certificate cert = (X509Certificate) certFactory
+                .generateCertificate(bais);
+        untrustedChain = new X509Certificate[] { cert };
+    }
+
+    public void testTrustManagerImpl_1() throws Exception {
+        KeyStore ks =  KeyStore.getInstance("BKS");
+        ks.load(null, null);
+
+        TrustManagerImpl tm = new TrustManagerImpl(ks);
+        assertEquals(tm.getAcceptedIssuers().length, 0);
+        checkTrustManager(tm);
+    }
+
+    public void testTrustManagerImpl_2() throws Exception {
+        KeyStore ks = JSSETestData.getKeyStore();
+
+        TrustManagerImpl tm = new TrustManagerImpl(ks);
+        assertEquals(tm.getAcceptedIssuers().length, 1);
+        checkTrustManager(tm);
+    }
+
+    private void checkTrustManager(TrustManagerImpl tm) throws Exception {
+        try {
+            tm.checkClientTrusted(null, "RSA");
+            fail("No expected IllegalArgumentException ");
+        } catch (IllegalArgumentException e) {
+        }
+
+        try {
+            tm.checkClientTrusted(new X509Certificate[0], "RSA");
+            fail("No expected IllegalArgumentException ");
+        } catch (IllegalArgumentException e) {
+        }
+
+        try {
+            tm.checkClientTrusted(untrustedChain, "RSA");
+            fail("No expected CertificateException ");
+        } catch (CertificateException e) {
+        }
+
+        try {
+            tm.checkServerTrusted(null, "RSA");
+            fail("No expected IllegalArgumentException ");
+        } catch (IllegalArgumentException e) {
+        }
+
+        try {
+            tm.checkServerTrusted(new X509Certificate[0], "RSA");
+            fail("No expected IllegalArgumentException ");
+        } catch (IllegalArgumentException e) {
+        }
+
+        try {
+            tm.checkServerTrusted(untrustedChain, "RSA");
+            fail("No expected CertificateException ");
+        } catch (CertificateException e) {
+        }
+    }
+}
\ No newline at end of file

Propchange: harmony/enhanced/classlib/trunk/modules/x-net/src/test/impl/java.injected/org/apache/harmony/xnet/provider/jsse/TrustManagerImplTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/classlib/trunk/modules/x-net/src/test/impl/java/org/apache/harmony/xnet/tests/provider/jsse/KeyManagerFactoryImplTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/x-net/src/test/impl/java/org/apache/harmony/xnet/tests/provider/jsse/KeyManagerFactoryImplTest.java?view=auto&rev=503371
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/x-net/src/test/impl/java/org/apache/harmony/xnet/tests/provider/jsse/KeyManagerFactoryImplTest.java (added)
+++ harmony/enhanced/classlib/trunk/modules/x-net/src/test/impl/java/org/apache/harmony/xnet/tests/provider/jsse/KeyManagerFactoryImplTest.java Sun Feb  4 00:10:09 2007
@@ -0,0 +1,92 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package org.apache.harmony.xnet.tests.provider.jsse;
+
+import java.security.InvalidAlgorithmParameterException;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+
+import javax.net.ssl.KeyManager;
+
+import org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl;
+import org.apache.harmony.xnet.provider.jsse.KeyManagerImpl;
+import org.apache.harmony.xnet.provider.jsse.TrustManagerImpl;
+import junit.framework.TestCase;
+
+/**
+ * Tests for <code>KeyManagerFactoryImpl</code> constructor and methods
+ *  
+ */
+public class KeyManagerFactoryImplTest extends TestCase {
+
+    /*
+     * Class under test for void engineInit(KeyStore, char[])
+     */
+    public void testEngineInitKeyStorecharArray() throws Exception {
+        KeyManagerFactoryImpl kmf = new KeyManagerFactoryImpl();
+        kmf.engineInit(null, null);
+
+        String def_keystore = System.getProperty("javax.net.ssl.keyStore");
+        try {
+            System.setProperty("javax.net.ssl.keyStore", "abc");
+            kmf.engineInit(null, null);
+            fail("No expected KeyStoreException");
+        } catch (KeyStoreException e) {
+        } finally {
+            if (def_keystore == null) {
+                 System.clearProperty("javax.net.ssl.keyStore");
+            } else {
+                System.setProperty("javax.net.ssl.keyStore", def_keystore);
+            }
+        }
+      
+    }
+
+    /*
+     * Class under test for void engineInit(ManagerFactoryParameters)
+     */
+    public void testEngineInitManagerFactoryParameters() {
+        KeyManagerFactoryImpl kmf = new KeyManagerFactoryImpl();
+        try {
+            kmf.engineInit(null);
+            fail("No expected InvalidAlgorithmParameterException");
+        } catch (InvalidAlgorithmParameterException e) {
+            // expected
+        }
+    }
+
+    public void testEngineGetKeyManagers() throws Exception {
+        KeyManagerFactoryImpl kmf = new KeyManagerFactoryImpl();
+        try {
+            kmf.engineGetKeyManagers();
+            fail("No expected IllegalStateException");
+        } catch (IllegalStateException e) {
+            // expected
+        }
+        KeyStore ks;
+        ks = KeyStore.getInstance("BKS");
+        ks.load(null, null);
+        kmf.engineInit(ks, null);
+
+        KeyManager[] kma = kmf.engineGetKeyManagers();
+        assertTrue("Incorrect array length", kma.length == 1);
+        assertTrue("Incorrect KeyManager type",
+                kma[0] instanceof KeyManagerImpl);
+    }
+
+}
\ No newline at end of file

Propchange: harmony/enhanced/classlib/trunk/modules/x-net/src/test/impl/java/org/apache/harmony/xnet/tests/provider/jsse/KeyManagerFactoryImplTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/classlib/trunk/modules/x-net/src/test/impl/java/org/apache/harmony/xnet/tests/provider/jsse/ProtocolVersionTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/x-net/src/test/impl/java/org/apache/harmony/xnet/tests/provider/jsse/ProtocolVersionTest.java?view=auto&rev=503371
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/x-net/src/test/impl/java/org/apache/harmony/xnet/tests/provider/jsse/ProtocolVersionTest.java (added)
+++ harmony/enhanced/classlib/trunk/modules/x-net/src/test/impl/java/org/apache/harmony/xnet/tests/provider/jsse/ProtocolVersionTest.java Sun Feb  4 00:10:09 2007
@@ -0,0 +1,85 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package org.apache.harmony.xnet.tests.provider.jsse;
+
+import org.apache.harmony.xnet.provider.jsse.ProtocolVersion;
+import junit.framework.TestCase;
+
+/**
+ * Tests for <code>ProtocolVersion</code> constructor and methods
+ *  
+ */
+public class ProtocolVersionTest extends TestCase {
+
+    public void testEquals() {
+        assertEquals(ProtocolVersion.getByVersion(new byte[] { 3, 0 }),
+                ProtocolVersion.getByName("SSLv3"));
+        assertEquals(ProtocolVersion.getByVersion(new byte[] { 3, 1 }),
+                ProtocolVersion.getByName("TLSv1"));
+        assertFalse(ProtocolVersion.getByVersion(new byte[] { 3, 0 }).equals(
+                ProtocolVersion.getByName("TLSv1")));
+
+    }
+
+    /*
+     * Class under test for boolean isSupported(byte[])
+     */
+    public void testIsSupportedbyteArray() {
+        assertTrue(ProtocolVersion.isSupported(new byte[] { 3, 0 }));
+        assertTrue(ProtocolVersion.isSupported(new byte[] { 3, 1 }));
+        assertFalse(ProtocolVersion.isSupported(new byte[] { 3, 2 }));
+    }
+
+    public void testGetByVersion() {
+        assertEquals(ProtocolVersion.getByVersion(new byte[] { 2, 1 }), null);
+        assertEquals(ProtocolVersion.getByVersion(new byte[] { 3, 0 }).name,
+                "SSLv3");
+        assertEquals(ProtocolVersion.getByVersion(new byte[] { 3, 1 }).name,
+                "TLSv1");
+    }
+
+    /*
+     * Class under test for boolean isSupported(String)
+     */
+    public void testIsSupportedString() {
+        assertTrue(ProtocolVersion.isSupported("SSLv3"));
+        assertTrue(ProtocolVersion.isSupported("SSL"));
+        assertTrue(ProtocolVersion.isSupported("TLSv1"));
+        assertTrue(ProtocolVersion.isSupported("TLS"));
+        assertFalse(ProtocolVersion.isSupported("SSLv4"));
+    }
+
+    public void testGetByName() {
+        assertEquals(ProtocolVersion.getByName("SSLv2"), null);
+        assertEquals(ProtocolVersion.getByName("SSLv3").name, "SSLv3");
+        assertEquals(ProtocolVersion.getByName("TLSv1").name, "TLSv1");
+    }
+
+    public void testGetLatestVersion() {
+        ProtocolVersion ver = ProtocolVersion.getLatestVersion(new String[] {
+                "SSLv2", "TLSv1", "SSLv3" });
+        assertTrue("Incorrect protocol version " + ver.name, ver.name
+                .equals("TLSv1"));
+
+        ver = ProtocolVersion.getLatestVersion(new String[] {"SSLv3",
+                "unknown", "SSLv2" });
+        assertEquals("Incorrect protocol version " + ver.name, ver.name,
+                "SSLv3");
+    }
+
+}
\ No newline at end of file

Propchange: harmony/enhanced/classlib/trunk/modules/x-net/src/test/impl/java/org/apache/harmony/xnet/tests/provider/jsse/ProtocolVersionTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/classlib/trunk/modules/x-net/src/test/impl/java/org/apache/harmony/xnet/tests/provider/jsse/TrustManagerFactoryImplTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/x-net/src/test/impl/java/org/apache/harmony/xnet/tests/provider/jsse/TrustManagerFactoryImplTest.java?view=auto&rev=503371
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/x-net/src/test/impl/java/org/apache/harmony/xnet/tests/provider/jsse/TrustManagerFactoryImplTest.java (added)
+++ harmony/enhanced/classlib/trunk/modules/x-net/src/test/impl/java/org/apache/harmony/xnet/tests/provider/jsse/TrustManagerFactoryImplTest.java Sun Feb  4 00:10:09 2007
@@ -0,0 +1,94 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package org.apache.harmony.xnet.tests.provider.jsse;
+
+import java.security.InvalidAlgorithmParameterException;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+
+import javax.net.ssl.ManagerFactoryParameters;
+import javax.net.ssl.TrustManager;
+
+import org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl;
+import org.apache.harmony.xnet.provider.jsse.TrustManagerImpl;
+import junit.framework.TestCase;
+
+/**
+ * Tests for <code>TrustManagerFactoryImpl</code> constructor and methods
+ *  
+ */
+public class TrustManagerFactoryImplTest extends TestCase {
+
+    /*
+     * Class under test for void engineInit(KeyStore)
+     */
+    public void testEngineInitKeyStore() throws Exception {
+        TrustManagerFactoryImpl tmf = new TrustManagerFactoryImpl();
+        tmf.engineInit((KeyStore) null);
+
+        String def_keystore = System.getProperty("javax.net.ssl.trustStore");
+        System.setProperty("javax.net.ssl.trustStore", "abc");
+        try {
+            tmf.engineInit((KeyStore) null);
+            fail("No expected KeyStoreException");
+        } catch (KeyStoreException e) {
+        } finally {
+            if (def_keystore == null) {
+                System.clearProperty("javax.net.ssl.trustStore");
+            } else {
+                System.setProperty("javax.net.ssl.trustStore", def_keystore);
+            }
+        }
+    }
+
+    /*
+     * Class under test for void engineInit(ManagerFactoryParameters)
+     */
+    public void testEngineInitManagerFactoryParameters() {
+        TrustManagerFactoryImpl tmf = new TrustManagerFactoryImpl();
+
+        try {
+            tmf.engineInit((ManagerFactoryParameters) null);
+            fail("No expected InvalidAlgorithmParameterException");
+        } catch (InvalidAlgorithmParameterException e) {
+        }
+    }
+
+    public void testEngineGetTrustManagers() {
+        TrustManagerFactoryImpl tmf = new TrustManagerFactoryImpl();
+        try {
+            tmf.engineGetTrustManagers();
+            fail("No expected IllegalStateException");
+        } catch (IllegalStateException e) {
+            // expected
+        }
+        KeyStore ks;
+        try {
+            ks = KeyStore.getInstance("BKS");
+            ks.load(null, null);
+            tmf.engineInit(ks);
+        } catch (Exception e) {
+            fail(e.toString());
+        }
+        TrustManager[] tma = tmf.engineGetTrustManagers();
+        assertTrue("Incorrect array length", tma.length == 1);
+        assertTrue("Incorrect KeyManager type",
+                tma[0] instanceof TrustManagerImpl);
+    }
+
+}
\ No newline at end of file

Propchange: harmony/enhanced/classlib/trunk/modules/x-net/src/test/impl/java/org/apache/harmony/xnet/tests/provider/jsse/TrustManagerFactoryImplTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/classlib/trunk/modules/x-net/src/test/resources/key_store.bks
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/x-net/src/test/resources/key_store.bks?view=auto&rev=503371
==============================================================================
Binary file - no diff available.

Propchange: harmony/enhanced/classlib/trunk/modules/x-net/src/test/resources/key_store.bks
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: harmony/enhanced/classlib/trunk/modules/x-net/src/test/support/common/java/org/apache/harmony/xnet/provider/jsse/JSSETestData.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/x-net/src/test/support/common/java/org/apache/harmony/xnet/provider/jsse/JSSETestData.java?view=auto&rev=503371
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/x-net/src/test/support/common/java/org/apache/harmony/xnet/provider/jsse/JSSETestData.java (added)
+++ harmony/enhanced/classlib/trunk/modules/x-net/src/test/support/common/java/org/apache/harmony/xnet/provider/jsse/JSSETestData.java Sun Feb  4 00:10:09 2007
@@ -0,0 +1,92 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package org.apache.harmony.xnet.provider.jsse;
+
+import java.io.InputStream;
+import java.security.KeyStore;
+import java.security.SecureRandom;
+
+import javax.net.ssl.KeyManagerFactory;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManagerFactory;
+
+import tests.support.resource.Support_Resources;
+
+/**
+ * JSSETestData
+ */
+public class JSSETestData {
+
+    private static Exception initException;
+
+    // the password to the store
+    public static final char[] KS_PASSWORD = "password".toCharArray();
+
+    private static SSLContext context;
+    private static KeyStore keyStore;
+    private static SSLParameters sslParameters;
+
+    static {
+        try {
+            String ksDefaultType = KeyStore.getDefaultType();
+            InputStream is = Support_Resources.getResourceStream(
+                    "key_store." + ksDefaultType.toLowerCase());
+
+            keyStore = KeyStore.getInstance(ksDefaultType);
+            keyStore.load(is, KS_PASSWORD);
+
+            KeyManagerFactory kmf = KeyManagerFactory.getInstance("X509");
+            kmf.init(keyStore, KS_PASSWORD);
+
+            TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");
+            tmf.init(keyStore);
+
+            sslParameters = new SSLParameters(kmf.getKeyManagers(), tmf
+                    .getTrustManagers(), new SecureRandom(),
+                    new SSLSessionContextImpl(), new SSLSessionContextImpl());
+
+            context = SSLContext.getInstance("TLSv1");
+            context.init(kmf.getKeyManagers(),
+                    tmf.getTrustManagers(), new SecureRandom());
+        } catch (Exception e) {
+            e.printStackTrace();
+            initException = e;
+        }
+    }
+
+    public static SSLContext getContext() throws Exception {
+        if (initException != null) {
+            throw initException;
+        }
+        return context;
+    }
+
+    public static SSLParameters getSSLParameters() throws Exception {
+        if (initException != null) {
+            throw initException;
+        }
+        return sslParameters;
+    }
+
+    public static KeyStore getKeyStore() throws Exception {
+        if (initException != null) {
+            throw initException;
+        }
+        return keyStore;
+    }
+}

Propchange: harmony/enhanced/classlib/trunk/modules/x-net/src/test/support/common/java/org/apache/harmony/xnet/provider/jsse/JSSETestData.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/classlib/trunk/modules/x-net/src/test/support/common/java/org/apache/harmony/xnet/tests/support/MyKeyManagerFactorySpi.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/x-net/src/test/support/common/java/org/apache/harmony/xnet/tests/support/MyKeyManagerFactorySpi.java?view=auto&rev=503371
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/x-net/src/test/support/common/java/org/apache/harmony/xnet/tests/support/MyKeyManagerFactorySpi.java (added)
+++ harmony/enhanced/classlib/trunk/modules/x-net/src/test/support/common/java/org/apache/harmony/xnet/tests/support/MyKeyManagerFactorySpi.java Sun Feb  4 00:10:09 2007
@@ -0,0 +1,82 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package org.apache.harmony.xnet.tests.support;
+
+import java.security.InvalidAlgorithmParameterException;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.UnrecoverableKeyException;
+
+import javax.net.ssl.KeyManager;
+import javax.net.ssl.KeyManagerFactorySpi;
+import javax.net.ssl.ManagerFactoryParameters;
+
+/**
+ * Class for verification KeyManagerFactorySpi and KeyManagerFactory
+ * functionality
+ * 
+ */
+
+public class MyKeyManagerFactorySpi extends KeyManagerFactorySpi {
+    
+    protected void engineInit(KeyStore ks, char[] password)
+            throws KeyStoreException, NoSuchAlgorithmException,
+            UnrecoverableKeyException {
+        if (password == null) {
+            throw new KeyStoreException("Incorrect password");            
+        }
+        if (ks == null) {
+            throw new UnrecoverableKeyException("Incorrect keystore");
+        }
+    }
+
+    protected void engineInit(ManagerFactoryParameters spec)
+            throws InvalidAlgorithmParameterException {
+        if (spec == null) {
+            throw new InvalidAlgorithmParameterException("Incorrect parameter");
+        }
+        if (spec instanceof Parameters) {
+            try {
+                engineInit(((Parameters)spec).getKeyStore(),
+                        ((Parameters)spec).getPassword());
+            } catch (Exception e) {
+                throw new InvalidAlgorithmParameterException(e.toString()); 
+            }
+        } else {
+            throw new InvalidAlgorithmParameterException("Invalid parameter");
+        }
+    }
+
+    protected KeyManager[] engineGetKeyManagers() {
+        return null;
+    }
+    public static class Parameters implements ManagerFactoryParameters {
+        private KeyStore keyStore;
+        private char[] passWD;
+        public Parameters (KeyStore ks, char[] pass) {
+            this.keyStore = ks;
+            this.passWD = pass; 
+        }
+        public KeyStore getKeyStore() {
+            return keyStore;
+        }
+        public char[] getPassword() {
+            return passWD;
+        }
+    }}

Propchange: harmony/enhanced/classlib/trunk/modules/x-net/src/test/support/common/java/org/apache/harmony/xnet/tests/support/MyKeyManagerFactorySpi.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/classlib/trunk/modules/x-net/src/test/support/common/java/org/apache/harmony/xnet/tests/support/MySSLContextSpi.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/x-net/src/test/support/common/java/org/apache/harmony/xnet/tests/support/MySSLContextSpi.java?view=auto&rev=503371
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/x-net/src/test/support/common/java/org/apache/harmony/xnet/tests/support/MySSLContextSpi.java (added)
+++ harmony/enhanced/classlib/trunk/modules/x-net/src/test/support/common/java/org/apache/harmony/xnet/tests/support/MySSLContextSpi.java Sun Feb  4 00:10:09 2007
@@ -0,0 +1,145 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package org.apache.harmony.xnet.tests.support;
+
+import java.nio.ByteBuffer;
+import java.security.KeyManagementException;
+import java.security.SecureRandom;
+
+import javax.net.ssl.KeyManager;
+import javax.net.ssl.SSLContextSpi;
+import javax.net.ssl.SSLEngine;
+import javax.net.ssl.SSLEngineResult;
+import javax.net.ssl.SSLException;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.SSLSessionContext;
+import javax.net.ssl.SSLServerSocketFactory;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.TrustManager;
+
+/**
+ * Additional class for verification of SSLContextSpi and SSLContext
+ * functionality
+ * 
+ */
+
+public class MySSLContextSpi extends SSLContextSpi {
+    private boolean init = false;
+    protected void engineInit(KeyManager[] km, TrustManager[] tm,
+            SecureRandom sr) throws KeyManagementException {
+        if (sr == null) {
+            throw new KeyManagementException(
+                    "secureRandom is null");
+        }
+        init = true;
+    }
+
+    protected SSLSocketFactory engineGetSocketFactory() {
+        if (!init) {
+            throw new RuntimeException("Not initialiazed");
+        };   
+        return null;
+    }
+
+    protected SSLServerSocketFactory engineGetServerSocketFactory() {
+        if (!init) {
+            throw new RuntimeException("Not initialiazed");
+        }
+        return null;
+    }
+
+    protected SSLSessionContext engineGetServerSessionContext() {
+        if (!init) {
+            throw new RuntimeException("Not initialiazed");
+        }
+        return null;
+    }
+
+    protected SSLSessionContext engineGetClientSessionContext() {
+        if (!init) {
+            throw new RuntimeException("Not initialiazed");
+        }
+        return null;
+    }
+
+    /*
+     * FIXME: add these methods
+     */   
+    protected SSLEngine engineCreateSSLEngine(String host, int port) {
+        if (!init) {
+            throw new RuntimeException("Not initialiazed");
+        }
+        return new tmpSSLEngine(host, port);
+    }
+
+    protected SSLEngine engineCreateSSLEngine() {
+        if (!init) {
+            throw new RuntimeException("Not initialiazed");
+        }
+        return new tmpSSLEngine();
+    }
+    
+    public class tmpSSLEngine extends SSLEngine {
+        String tmpHost;
+        int tmpPort;
+        public tmpSSLEngine() {
+            tmpHost = null;
+            tmpPort = 0;        
+        }
+        public tmpSSLEngine(String host, int port) {
+            tmpHost = host;
+            tmpPort = port;        
+        }
+        public String getPeerHost() {
+            return tmpHost;        
+        }
+        public int getPeerPort() {
+            return tmpPort;
+        }
+        public void beginHandshake() throws SSLException { }
+        public void closeInbound() throws SSLException { }
+        public void closeOutbound() {}
+        public Runnable getDelegatedTask() { return null; }
+        public String[] getEnabledCipherSuites() { return null; }
+        public String[] getEnabledProtocols() {return null; }
+        public boolean getEnableSessionCreation() { return true; }
+        public SSLEngineResult.HandshakeStatus getHandshakeStatus() { return null; };
+        public boolean getNeedClientAuth() { return true; }
+        public SSLSession getSession() { return null; }
+        public String[] getSupportedCipherSuites()  { return null; }
+        public String[] getSupportedProtocols()  { return null; }
+        public boolean getUseClientMode()  { return true; }
+        public boolean getWantClientAuth()  { return true; }
+        public boolean isInboundDone()  { return true; }
+        public boolean isOutboundDone()  { return true; }
+        public void setEnabledCipherSuites(String[] suites) { }
+        public void setEnabledProtocols(String[] protocols) { }
+        public void setEnableSessionCreation(boolean flag) { }
+        public void setNeedClientAuth(boolean need) { }
+        public void setUseClientMode(boolean mode) { }
+        public void setWantClientAuth(boolean want) { }        
+        public SSLEngineResult unwrap(ByteBuffer src, ByteBuffer[] dsts,
+                int offset, int length) throws SSLException {
+            return null;
+        }        
+        public SSLEngineResult wrap(ByteBuffer[] srcs, int offset,
+                int length, ByteBuffer dst) throws SSLException { 
+            return null;
+        }
+    }
+}
\ No newline at end of file

Propchange: harmony/enhanced/classlib/trunk/modules/x-net/src/test/support/common/java/org/apache/harmony/xnet/tests/support/MySSLContextSpi.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/classlib/trunk/modules/x-net/src/test/support/common/java/org/apache/harmony/xnet/tests/support/MyTrustManagerFactorySpi.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/x-net/src/test/support/common/java/org/apache/harmony/xnet/tests/support/MyTrustManagerFactorySpi.java?view=auto&rev=503371
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/x-net/src/test/support/common/java/org/apache/harmony/xnet/tests/support/MyTrustManagerFactorySpi.java (added)
+++ harmony/enhanced/classlib/trunk/modules/x-net/src/test/support/common/java/org/apache/harmony/xnet/tests/support/MyTrustManagerFactorySpi.java Sun Feb  4 00:10:09 2007
@@ -0,0 +1,71 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package org.apache.harmony.xnet.tests.support;
+
+import java.security.InvalidAlgorithmParameterException;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+
+import javax.net.ssl.ManagerFactoryParameters;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.TrustManagerFactorySpi;
+
+/**
+ * Class for vertifying TrustManagerFactorySpi and TrustManagerFactory 
+ * functionality
+ * 
+ */
+
+public class MyTrustManagerFactorySpi extends TrustManagerFactorySpi {
+    protected void engineInit(KeyStore ks) throws KeyStoreException {
+        if (ks == null) {
+            throw new KeyStoreException("Not supported operation for null KeyStore");
+        }
+    }
+
+    protected void engineInit(ManagerFactoryParameters spec)
+            throws InvalidAlgorithmParameterException {
+        if (spec == null) {
+            throw new InvalidAlgorithmParameterException("Null parameter");
+        }
+        if (spec instanceof Parameters) {
+            try {
+                engineInit(((Parameters)spec).getKeyStore());
+            } catch (KeyStoreException e) {
+                throw new RuntimeException(e);
+            }
+        } else {
+            throw new InvalidAlgorithmParameterException("Invalid parameter");
+        }
+    }
+
+    protected TrustManager[] engineGetTrustManagers() {
+        return null;
+    }
+    
+    
+    public static class Parameters implements ManagerFactoryParameters {
+        private KeyStore keyStore;
+        public Parameters (KeyStore ks) {
+            this.keyStore = ks;
+        }
+        public KeyStore getKeyStore() {
+            return keyStore;
+        }
+    }
+}
\ No newline at end of file

Propchange: harmony/enhanced/classlib/trunk/modules/x-net/src/test/support/common/java/org/apache/harmony/xnet/tests/support/MyTrustManagerFactorySpi.java
------------------------------------------------------------------------------
    svn:eol-style = native