auto import from //branches/cupcake/...@125939
diff --git a/x-net/src/test/java/tests/api/javax/net/AllTests.java b/x-net/src/test/java/tests/api/javax/net/AllTests.java
index fabe97d..90c2a6a 100644
--- a/x-net/src/test/java/tests/api/javax/net/AllTests.java
+++ b/x-net/src/test/java/tests/api/javax/net/AllTests.java
@@ -5,7 +5,7 @@
  * 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
+ *     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,
@@ -30,7 +30,7 @@
     }
 
     public static Test suite() {
-        TestSuite suite = new TestSuite("All tests for package tests.api.javax.net;");
+        TestSuite suite = tests.TestSuiteFactory.createTestSuite("All tests for package tests.api.javax.net;");
         // $JUnit-BEGIN$
 
         suite.addTestSuite(ServerSocketFactoryTest.class);
diff --git a/x-net/src/test/java/tests/api/javax/net/ServerSocketFactoryTest.java b/x-net/src/test/java/tests/api/javax/net/ServerSocketFactoryTest.java
index 5a5c201..6044e2d 100644
--- a/x-net/src/test/java/tests/api/javax/net/ServerSocketFactoryTest.java
+++ b/x-net/src/test/java/tests/api/javax/net/ServerSocketFactoryTest.java
@@ -23,20 +23,19 @@
 package tests.api.javax.net;
 
 import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestInfo;
 import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTarget;
+import dalvik.annotation.TestTargetNew;
 
 import java.io.IOException;
 import java.net.InetAddress;
 import java.net.ServerSocket;
 import java.net.SocketException;
-import java.net.UnknownHostException;
-
 import javax.net.ServerSocketFactory;
 
 import junit.framework.TestCase;
 
+import tests.support.Support_PortManager;
+
  
 /**
  * Tests for <code>ServerSocketFactory</code> class constructors and methods.
@@ -47,18 +46,17 @@
     /**
      * @tests javax.net.SocketFactory#SocketFactory()
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "ServerSocketFactory",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "ServerSocketFactory",
+        args = {}
+    )
     public void test_Constructor() {
         try {
-            new MyServerSocketFactory();
+            MyServerSocketFactory mssf = new MyServerSocketFactory();
+            assertNotNull(mssf);
+            assertTrue(mssf instanceof ServerSocketFactory);
         } catch (Exception e) {
             fail("Unexpected exception " + e.toString());
         }
@@ -67,38 +65,170 @@
     /**
      * @tests javax.net.ServerSocketFactory#createServerSocket()
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "IOException checking missed",
-      targets = {
-        @TestTarget(
-          methodName = "createServerSocket",
-          methodArgs = {}
-        )
-    })
-    public final void test_createServerSocket() {
+    @TestTargetNew(
+        level = TestLevel.SUFFICIENT,
+        notes = "IOException checking missed",
+        method = "createServerSocket",
+        args = {}
+    )
+    public final void test_createServerSocket_01() {
         ServerSocketFactory sf = new MyServerSocketFactory();
         try {
-            sf.createServerSocket();
+            ServerSocket ss = sf.createServerSocket();
+            assertNotNull(ss);
             fail("No expected SocketException");
         } catch (SocketException e) {        
-        } catch (IOException e) {
+        } catch (Exception e) {
             fail(e.toString());
         }
     }
+    
+    /**
+     * @tests javax.net.ServerSocketFactory#createServerSocket(int port)
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "createServerSocket",
+        args = {int.class}
+    )
+    public final void test_createServerSocket_02() {
+        MyServerSocketFactory sf = new MyServerSocketFactory();
+        int portNumber = Support_PortManager.getNextPort();
+        
+        try {
+            ServerSocket ss = sf.createServerSocket(portNumber);
+            assertNotNull(ss);
+        } catch (Exception ex) {
+            fail("Unexpected exception: " + ex);
+        }
+        
+        try {
+            sf.createServerSocket(portNumber);
+            fail("IOException wasn't thrown");
+        } catch (IOException ioe) {
+            //expected
+        } catch (Exception ex) {
+            fail(ex + " was thrown instead of IOException");
+        }
+        
+        try {
+            sf.createServerSocket(-1);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException ioe) {
+            //expected
+        } catch (Exception ex) {
+            fail(ex + " was thrown instead of IllegalArgumentException");
+        }
+    }
+    
+    /**
+     * @tests javax.net.ServerSocketFactory#createServerSocket(int port, int backlog)
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "createServerSocket",
+        args = {int.class, int.class}
+    )
+    public final void test_createServerSocket_03() {
+        MyServerSocketFactory sf = new MyServerSocketFactory();
+        int portNumber = Support_PortManager.getNextPort();
+        
+        try {
+            ServerSocket ss = sf.createServerSocket(portNumber, 0);
+            assertNotNull(ss);
+        } catch (Exception ex) {
+            fail("Unexpected exception: " + ex);
+        }
+        
+        try {
+            sf.createServerSocket(portNumber, 0);
+            fail("IOException wasn't thrown");
+        } catch (IOException ioe) {
+            //expected
+        } catch (Exception ex) {
+            fail(ex + " was thrown instead of IOException");
+        }
+        
+        portNumber = Support_PortManager.getNextPort();
+        try {
+            sf.createServerSocket(portNumber, -1);
+            fail("IOException wasn't thrown");
+        } catch (IOException ioe) {
+            //expected
+        } catch (Exception ex) {
+            fail(ex + " was thrown instead of IOException");
+        }
+        
+        try {
+            sf.createServerSocket(65536, 0);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException ioe) {
+            //expected
+        } catch (Exception ex) {
+            fail(ex + " was thrown instead of IllegalArgumentException");
+        }
+    }
+    
+    /**
+     * @tests javax.net.ServerSocketFactory#createServerSocket(int port, int backlog, InetAddress ifAddress)
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "createServerSocket",
+        args = {int.class, int.class, InetAddress.class}
+    )
+    public final void test_createServerSocket_04() {
+        MyServerSocketFactory sf = new MyServerSocketFactory();
+        int portNumber = Support_PortManager.getNextPort();
+        
+        try {
+            ServerSocket ss = sf.createServerSocket(portNumber, 0, InetAddress.getLocalHost());
+            assertNotNull(ss);
+        } catch (Exception ex) {
+            fail("Unexpected exception: " + ex);
+        }
+        
+        try {
+            sf.createServerSocket(portNumber, 0, InetAddress.getLocalHost());
+            fail("IOException wasn't thrown");
+        } catch (IOException ioe) {
+            //expected
+        } catch (Exception ex) {
+            fail(ex + " was thrown instead of IOException");
+        }
+        
+        portNumber = Support_PortManager.getNextPort();
+        try {
+            sf.createServerSocket(portNumber, -1, InetAddress.getLocalHost());
+            fail("IOException wasn't thrown");
+        } catch (IOException ioe) {
+            //expected
+        } catch (Exception ex) {
+            fail(ex + " was thrown instead of IOException");
+        }
+        
+        try {
+            sf.createServerSocket(Integer.MAX_VALUE, 0, InetAddress.getLocalHost());
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException ioe) {
+            //expected
+        } catch (Exception ex) {
+            fail(ex + " was thrown instead of IllegalArgumentException");
+        }
+    }
 
     /**
      * @tests javax.net.ServerSocketFactory#getDefault()
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getDefault",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getDefault",
+        args = {}
+    )
     public final void test_getDefault() {
         ServerSocketFactory sf = ServerSocketFactory.getDefault();
         ServerSocket s;
@@ -126,16 +256,46 @@
         super();
     }
     
-    public ServerSocket createServerSocket(int port) throws IOException, UnknownHostException {
-        throw new IOException();
+    public ServerSocket createServerSocket(int port) throws IOException {
+        ServerSocket ss = null;
+        try {
+            ss = new ServerSocket(port);
+        } catch (java.net.BindException be) {
+            throw new IOException("error occurs");
+        } catch (IllegalArgumentException iae) {
+            throw iae;
+        }
+        return ss;
     }
     
-    public ServerSocket createServerSocket(int port, int backlog)
-            throws IOException, UnknownHostException {
-        throw new IOException();
+    public ServerSocket createServerSocket(int port, int backlog) throws IOException {
+        ServerSocket ss = null;
+        if (backlog < 0) {
+            throw new IOException("negative backlog parameter");
+        }
+        try {
+            ss = new ServerSocket(port, backlog);
+        } catch (java.net.BindException be) {
+            throw new IOException("error occurs");
+        } catch (IllegalArgumentException iae) {
+            throw iae;
+        }
+        return ss;
     }
     
-    public ServerSocket createServerSocket(int port, int backlog, InetAddress ifAddress) throws IOException {
-        throw new IOException();
+    public ServerSocket createServerSocket(int port, int backlog, InetAddress ifAddress) 
+                                           throws IOException {
+        ServerSocket ss = null;
+        if (backlog < 0) {
+            throw new IOException("negative backlog parameter");
+        }
+        try {
+            ss = new ServerSocket(port, backlog, ifAddress);
+        } catch (java.net.BindException be) {
+            throw new IOException("error occurs");
+        } catch (IllegalArgumentException iae) {
+            throw iae;
+        }
+        return ss;
      }
 }
diff --git a/x-net/src/test/java/tests/api/javax/net/SocketFactoryTest.java b/x-net/src/test/java/tests/api/javax/net/SocketFactoryTest.java
index e894a46..1d39a0c 100644
--- a/x-net/src/test/java/tests/api/javax/net/SocketFactoryTest.java
+++ b/x-net/src/test/java/tests/api/javax/net/SocketFactoryTest.java
@@ -23,12 +23,12 @@
 package tests.api.javax.net;
 
 import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestInfo;
 import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTarget;
+import dalvik.annotation.TestTargetNew;
 
 import java.io.IOException;
 import java.net.InetAddress;
+import java.net.ServerSocket;
 import java.net.Socket;
 import java.net.SocketException;
 import java.net.UnknownHostException;
@@ -37,28 +37,29 @@
 
 import junit.framework.TestCase;
 
+import tests.support.Support_PortManager;
+
 
 /**
  * Tests for <code>SocketFactory</code> class methods.
  */
 @TestTargetClass(SocketFactory.class) 
 public class SocketFactoryTest extends TestCase {
-
+    
     /**
      * @tests javax.net.SocketFactory#SocketFactory()
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "SocketFactory",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "SocketFactory",
+        args = {}
+    )
     public void test_Constructor() {
         try {
-            new MySocketFactory();
+            MySocketFactory sf = new MySocketFactory();
+            assertNotNull(sf);
+            assertTrue(sf instanceof SocketFactory);
         } catch (Exception e) {
             fail("Unexpected exception " + e.toString());
         }
@@ -67,38 +68,280 @@
     /**
      * @tests javax.net.SocketFactory#createSocket()
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "Exceptions cases are not tested",
-      targets = {
-        @TestTarget(
-          methodName = "createSocket",
-          methodArgs = {}
-        )
-    })
-    public final void test_createSocket() {
-        SocketFactory sf = new MySocketFactory();
+    @TestTargetNew(
+        level = TestLevel.SUFFICIENT,
+        notes = "IOException check missed",
+        method = "createSocket",
+        args = {}
+    )
+    public final void test_createSocket_01() {
+        SocketFactory sf = SocketFactory.getDefault();
+        
         try {
-            sf.createSocket();
+            Socket s = sf.createSocket();
+            assertNotNull(s);
+            assertEquals(-1, s.getLocalPort());
+            assertEquals(0, s.getPort());
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e);
+        }
+        
+        MySocketFactory msf = new MySocketFactory();
+        try {
+            msf.createSocket();
             fail("No expected SocketException");
         } catch (SocketException e) {        
         } catch (IOException e) {
             fail(e.toString());
         }
     }
+    
+    /**
+     * @tests javax.net.SocketFactory#createSocket(String host, int port)
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "createSocket",
+        args = {String.class, int.class}
+    )
+    public final void test_createSocket_02() {
+        MySocketFactory sf = new MySocketFactory();
+        int portNumber = Support_PortManager.getNextPort();
+        int sport = startServer("Cons String,I");
+        int[] invalidPorts = {Integer.MIN_VALUE, -1, 65536, Integer.MAX_VALUE};
+        
+        try {
+            Socket s = sf.createSocket(InetAddress.getLocalHost().getHostName(), sport);
+            assertNotNull(s);
+            assertTrue("Failed to create socket", s.getPort() == sport);
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e);
+        }
+        
+        try {
+            Socket s = sf.createSocket("bla-bla", sport);
+            fail("UnknownHostException wasn't thrown");
+        } catch (UnknownHostException uhe) {
+            //expected
+        } catch (Exception e) {
+            fail(e + " was thrown instead of UnknownHostException");
+        }
+        
+        for (int i = 0; i < invalidPorts.length; i++) {
+            try {
+                Socket s = sf.createSocket(InetAddress.getLocalHost().getHostName(), invalidPorts[i]);
+                fail("IllegalArgumentException wasn't thrown for " + invalidPorts[i]);
+            } catch (IllegalArgumentException iae) {
+                //expected
+            } catch (Exception e) {
+                fail(e + " was thrown instead of IllegalArgumentException for " + invalidPorts[i]);
+            }
+        }
 
+        try {
+            Socket s = sf.createSocket(InetAddress.getLocalHost().getHostName(), portNumber);
+            fail("IOException wasn't thrown");
+        } catch (IOException ioe) {
+            //expected
+        }
+        
+        SocketFactory f = SocketFactory.getDefault();
+        try {
+            Socket s = f.createSocket("localhost", 8082);
+            fail("IOException wasn't thrown ...");
+        } catch (IOException e) {
+        }
+    }
+    
+    /**
+     * @tests javax.net.SocketFactory#createSocket(InetAddress host, int port)
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "createSocket",
+        args = {InetAddress.class, int.class}
+    )
+    public final void test_createSocket_03() {
+        MySocketFactory sf = new MySocketFactory();
+        int portNumber = Support_PortManager.getNextPort();
+        int sport = startServer("Cons InetAddress,I");
+        int[] invalidPorts = {Integer.MIN_VALUE, -1, 65536, Integer.MAX_VALUE};
+        
+        try {
+            Socket s = sf.createSocket(InetAddress.getLocalHost(), sport);
+            assertNotNull(s);
+            assertTrue("Failed to create socket", s.getPort() == sport);
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e);
+        }
+        
+        for (int i = 0; i < invalidPorts.length; i++) {
+            try {
+                Socket s = sf.createSocket(InetAddress.getLocalHost(), invalidPorts[i]);
+                fail("IllegalArgumentException wasn't thrown for " + invalidPorts[i]);
+            } catch (IllegalArgumentException iae) {
+                //expected
+            } catch (Exception e) {
+                fail(e + " was thrown instead of IllegalArgumentException for " + invalidPorts[i]);
+            }
+        }
+
+        try {
+            Socket s = sf.createSocket(InetAddress.getLocalHost(), portNumber);
+            fail("IOException wasn't thrown");
+        } catch (IOException ioe) {
+            //expected
+        }
+        
+        SocketFactory f = SocketFactory.getDefault();
+        try {
+            Socket s = f.createSocket(InetAddress.getLocalHost(), 8081);
+            fail("IOException wasn't thrown ...");
+        } catch (IOException e) {
+        } 
+    }
+    
+    /**
+     * @tests javax.net.SocketFactory#createSocket(InetAddress address, int port,
+     *                                             InetAddress localAddress, int localPort)
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "createSocket",
+        args = {InetAddress.class, int.class, InetAddress.class, int.class}
+    )
+    public final void test_createSocket_04() {
+        MySocketFactory sf = new MySocketFactory();
+        int portNumber = Support_PortManager.getNextPort();
+        int sport = startServer("Cons InetAddress,I,InetAddress,I");
+        int[] invalidPorts = {Integer.MIN_VALUE, -1, 65536, Integer.MAX_VALUE};
+        
+        try {
+            Socket s = sf.createSocket(InetAddress.getLocalHost(), sport,
+                                       InetAddress.getLocalHost(), portNumber);
+            assertNotNull(s);
+            assertTrue("1: Failed to create socket", s.getPort() == sport);
+            assertTrue("2: Failed to create socket", s.getLocalPort() == portNumber);
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e);
+        }
+        
+        for (int i = 0; i < invalidPorts.length; i++) {
+            try {
+                Socket s = sf.createSocket(InetAddress.getLocalHost(), invalidPorts[i],
+                                           InetAddress.getLocalHost(), portNumber);
+                fail("IllegalArgumentException wasn't thrown for " + invalidPorts[i]);
+            } catch (IllegalArgumentException iae) {
+                //expected
+            } catch (Exception e) {
+                fail(e + " was thrown instead of IllegalArgumentException for " + invalidPorts[i]);
+            }
+            
+            try {
+                Socket s = sf.createSocket(InetAddress.getLocalHost(), sport,
+                                           InetAddress.getLocalHost(), invalidPorts[i]);
+                fail("IllegalArgumentException wasn't thrown for " + invalidPorts[i]);
+            } catch (IllegalArgumentException iae) {
+                //expected
+            } catch (Exception e) {
+                fail(e + " was thrown instead of IllegalArgumentException for " + invalidPorts[i]);
+            }
+        }
+
+        try {
+            Socket s = sf.createSocket(InetAddress.getLocalHost(), sport,
+                                       InetAddress.getLocalHost(), portNumber);
+            fail("IOException wasn't thrown");
+        } catch (IOException ioe) {
+            //expected
+        }
+        
+        SocketFactory f = SocketFactory.getDefault();
+        try {
+            Socket s = f.createSocket(InetAddress.getLocalHost(), 8081, InetAddress.getLocalHost(), 8082);
+            fail("IOException wasn't thrown ...");
+        } catch (IOException e) {
+        }     
+    }
+    
+    /**
+     * @tests javax.net.SocketFactory#createSocket(String host, int port,
+     *                                             InetAddress localHost, int localPort)
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "createSocket",
+        args = {String.class, int.class, InetAddress.class, int.class}
+    )
+    public final void test_createSocket_05() {
+        MySocketFactory sf = new MySocketFactory();
+        int portNumber = Support_PortManager.getNextPort();
+        int sport = startServer("Cons String,I,InetAddress,I");
+        int[] invalidPorts = {Integer.MIN_VALUE, -1, 65536, Integer.MAX_VALUE};
+        
+        try {
+            Socket s = sf.createSocket(InetAddress.getLocalHost().getHostName(), sport,
+                                       InetAddress.getLocalHost(), portNumber);
+            assertNotNull(s);
+            assertTrue("1: Failed to create socket", s.getPort() == sport);
+            assertTrue("2: Failed to create socket", s.getLocalPort() == portNumber);
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e);
+        }
+        
+        portNumber = Support_PortManager.getNextPort();
+        try {
+            Socket s = sf.createSocket("bla-bla", sport, InetAddress.getLocalHost(), portNumber);
+            fail("UnknownHostException wasn't thrown");
+        } catch (UnknownHostException uhe) {
+            //expected
+        } catch (Exception e) {
+            fail(e + " was thrown instead of UnknownHostException");
+        }
+        
+        for (int i = 0; i < invalidPorts.length; i++) {
+            portNumber = Support_PortManager.getNextPort();
+            try {
+                Socket s = sf.createSocket(InetAddress.getLocalHost().getHostName(), invalidPorts[i],
+                                           InetAddress.getLocalHost(), portNumber);
+                fail("IllegalArgumentException wasn't thrown for " + invalidPorts[i]);
+            } catch (IllegalArgumentException iae) {
+                //expected
+            } catch (Exception e) {
+                fail(e + " was thrown instead of IllegalArgumentException for " + invalidPorts[i]);
+            }
+            try {
+                Socket s = sf.createSocket(InetAddress.getLocalHost().getHostName(), sport,
+                                           InetAddress.getLocalHost(), invalidPorts[i]);
+                fail("IllegalArgumentException wasn't thrown for " + invalidPorts[i]);
+            } catch (IllegalArgumentException iae) {
+                //expected
+            } catch (Exception e) {
+                fail(e + " was thrown instead of IllegalArgumentException for " + invalidPorts[i]);
+            }
+        }
+
+        SocketFactory f = SocketFactory.getDefault();
+        try {
+            Socket s = f.createSocket("localhost", 8081, InetAddress.getLocalHost(), 8082);
+            fail("IOException wasn't thrown ...");
+        } catch (IOException e) {
+        }
+    }
+    
     /**
      * @tests javax.net.SocketFactory#getDefault()
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getDefault",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getDefault",
+        args = {}
+    )
     public final void test_getDefault() {
         SocketFactory sf = SocketFactory.getDefault();
         Socket s;
@@ -123,6 +366,17 @@
         } catch (IOException e) {
         }     
     }
+    
+    protected int startServer(String name) {
+        int portNumber = Support_PortManager.getNextPort();
+        ServerSocket ss = null;
+        try {
+            ss = new ServerSocket(portNumber);
+        } catch (IOException e) {
+            fail(name + ": " + e);
+        }
+        return ss.getLocalPort();
+    }
 }
 
 class MySocketFactory extends SocketFactory {
@@ -132,21 +386,45 @@
     }
     
     public Socket createSocket(String host, int port) throws IOException, UnknownHostException {
-        throw new IOException();
+        Socket s = null;
+        try {
+            s = new Socket(host, port);
+        } catch (java.net.ConnectException ce) {
+            throw new IOException("error occurs");
+        }
+        return s;
     }
     
     public Socket createSocket(String host, int port, InetAddress localHost, int localPort)
             throws IOException, UnknownHostException {
-        throw new IOException();
+        Socket s = null;
+        try {
+            s = new Socket(host, port, localHost, localPort);
+        } catch (java.net.ConnectException ce) {
+            throw new IOException("error occurs");
+        }
+        return s;
     }
     
     public Socket createSocket(InetAddress host, int port) throws IOException {
-        throw new IOException();
+        Socket s = null;
+        try {
+            s = new Socket(host, port);
+        } catch (java.net.ConnectException ce) {
+            throw new IOException("error occurs");
+        }
+        return s;
      }
     
-    public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort)
-            throws IOException {
-        throw new IOException();
+    public Socket createSocket(InetAddress address, int port, 
+                               InetAddress localAddress, int localPort) throws IOException {
+        Socket s = null;
+        try {
+            s = new Socket(address, port, localAddress, localPort);
+        } catch (java.net.ConnectException ce) {
+            throw new IOException("error occurs");
+        }
+        return s;
      }
 
 }
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/AllTests.java b/x-net/src/test/java/tests/api/javax/net/ssl/AllTests.java
index 8846b06..69e75c6 100644
--- a/x-net/src/test/java/tests/api/javax/net/ssl/AllTests.java
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/AllTests.java
@@ -5,7 +5,7 @@
  * 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
+ *     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,
@@ -30,14 +30,12 @@
     }
 
     public static Test suite() {
-        TestSuite suite = new TestSuite("All tests for package tests.api.javax.net.ssl;");
+        TestSuite suite = tests.TestSuiteFactory.createTestSuite("All tests for package tests.api.javax.net.ssl;");
         // $JUnit-BEGIN$
 
         suite.addTestSuite(CertPathTrustManagerParametersTest.class);
-//        suite.addTestSuite(HandshakeCompletedEventTest.class);
+        suite.addTestSuite(HandshakeCompletedEventTest.class);
         suite.addTestSuite(HttpsURLConnectionTest.class);
-//	  suite.addTestSuite(HttpsURLConnectionTest1.class);
-//	  suite.addTestSuite(HttpURLConnectionTest.class);
         suite.addTestSuite(KeyManagerFactory1Test.class);
         suite.addTestSuite(KeyManagerFactory2Test.class);
         suite.addTestSuite(KeyManagerFactorySpiTest.class);
@@ -54,6 +52,24 @@
         suite.addTestSuite(TrustManagerFactory2Test.class);
         suite.addTestSuite(TrustManagerFactorySpiTest.class);
         suite.addTestSuite(X509ExtendedKeyManagerTest.class);
+        suite.addTestSuite(SSLSocketTest.class);
+        suite.addTestSuite(SSLServerSocketTest.class);
+        suite.addTestSuite(SSLProtocolExceptionTest.class);
+        suite.addTestSuite(SSLPeerUnverifiedExceptionTest.class);
+        suite.addTestSuite(SSLKeyExceptionTest.class);
+        suite.addTestSuite(SSLHandshakeExceptionTest.class);
+        suite.addTestSuite(SSLExceptionTest.class);
+        suite.addTestSuite(SSLEngineResultStatusTest.class);
+        suite.addTestSuite(SSLEngineResultHandshakeStatusTest.class);
+        suite.addTestSuite(SSLEngineResultTest.class);
+        suite.addTestSuite(KeyStoreBuilderParametersTest.class);
+        suite.addTestSuite(SSLSessionContextTest.class);
+        suite.addTestSuite(X509TrustManagerTest.class);
+        suite.addTestSuite(X509KeyManagerTest.class);
+        suite.addTestSuite(SSLSessionTest.class);
+        suite.addTestSuite(SSLSessionBindingListenerTest.class);
+        suite.addTestSuite(HandshakeCompletedListenerTest.class);
+        suite.addTestSuite(HostnameVerifierTest.class);
 
         // $JUnit-END$
         return suite;
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/CertPathTrustManagerParametersTest.java b/x-net/src/test/java/tests/api/javax/net/ssl/CertPathTrustManagerParametersTest.java
index 25a5df2..45c8d73 100644
--- a/x-net/src/test/java/tests/api/javax/net/ssl/CertPathTrustManagerParametersTest.java
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/CertPathTrustManagerParametersTest.java
@@ -18,9 +18,9 @@
 package tests.api.javax.net.ssl;
 
 import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestInfo;
+import dalvik.annotation.TestTargets;
 import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTarget;
+import dalvik.annotation.TestTargetNew;
 
 import java.security.cert.CertPathParameters;
 import javax.net.ssl.CertPathTrustManagerParameters;
@@ -41,15 +41,12 @@
      * Case 1: Try to construct object.
      * Case 2: Check NullPointerException.
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "CertPathTrustManagerParameters",
-          methodArgs = {CertPathParameters.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "CertPathTrustManagerParameters",
+        args = {java.security.cert.CertPathParameters.class}
+    )
     public void test_ConstructorLjava_security_cert_CertPathParameters() {
         // case 1: Try to construct object.
         try {
@@ -74,15 +71,12 @@
     /**
      * @tests javax.net.ssl.CertPathTrustManagerParameters#getParameters()
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getParameters",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getParameters",
+        args = {}
+    )
     public void test_getParameters() {
         CertPathParameters parameters = new MyCertPathParameters();
         CertPathTrustManagerParameters p = new CertPathTrustManagerParameters(
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/HandshakeCompletedEventTest.java b/x-net/src/test/java/tests/api/javax/net/ssl/HandshakeCompletedEventTest.java
index 6f301da..1b3c9d7 100644
--- a/x-net/src/test/java/tests/api/javax/net/ssl/HandshakeCompletedEventTest.java
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/HandshakeCompletedEventTest.java
@@ -18,23 +18,23 @@
 package tests.api.javax.net.ssl;
 
 import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestInfo;
 import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTarget;
+import dalvik.annotation.TestTargetNew;
 
-import java.io.IOException;
-import java.net.ServerSocket;
-import java.security.Principal;
+import java.io.ByteArrayInputStream;
 import java.security.cert.Certificate;
 
 import javax.net.ssl.HandshakeCompletedEvent;
 import javax.net.ssl.SSLPeerUnverifiedException;
 import javax.net.ssl.SSLSession;
 import javax.net.ssl.SSLSocket;
-import javax.net.ssl.SSLSocketFactory;
+import javax.security.cert.X509Certificate;
 
 import junit.framework.TestCase;
 
+import org.apache.harmony.xnet.tests.support.mySSLSession;
+import org.apache.harmony.xnet.tests.support.mySSLSocket;
+
 
 /**
  * Tests for <code>HandshakeCompletedEvent</code> class constructors and methods.
@@ -42,259 +42,238 @@
  */
 @TestTargetClass(HandshakeCompletedEvent.class) 
 public class HandshakeCompletedEventTest extends TestCase {
+    
+    String certificate = "-----BEGIN CERTIFICATE-----\n"
+        + "MIICZTCCAdICBQL3AAC2MA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMSAw\n"
+        + "HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjEuMCwGA1UECxMlU2VjdXJl\n"
+        + "IFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NzAyMjAwMDAwMDBa\n"
+        + "Fw05ODAyMjAyMzU5NTlaMIGWMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZv\n"
+        + "cm5pYTESMBAGA1UEBxMJUGFsbyBBbHRvMR8wHQYDVQQKExZTdW4gTWljcm9zeXN0\n"
+        + "ZW1zLCBJbmMuMSEwHwYDVQQLExhUZXN0IGFuZCBFdmFsdWF0aW9uIE9ubHkxGjAY\n"
+        + "BgNVBAMTEWFyZ29uLmVuZy5zdW4uY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB\n"
+        + "iQKBgQCofmdY+PiUWN01FOzEewf+GaG+lFf132UpzATmYJkA4AEA/juW7jSi+LJk\n"
+        + "wJKi5GO4RyZoyimAL/5yIWDV6l1KlvxyKslr0REhMBaD/3Z3EsLTTEf5gVrQS6sT\n"
+        + "WMoSZAyzB39kFfsB6oUXNtV8+UKKxSxKbxvhQn267PeCz5VX2QIDAQABMA0GCSqG\n"
+        + "SIb3DQEBAgUAA34AXl3at6luiV/7I9MN5CXYoPJYI8Bcdc1hBagJvTMcmlqL2uOZ\n"
+        + "H9T5hNMEL9Tk6aI7yZPXcw/xI2K6pOR/FrMp0UwJmdxX7ljV6ZtUZf7pY492UqwC\n"
+        + "1777XQ9UEZyrKJvF5ntleeO0ayBqLGVKCWzWZX9YsXCpv47FNLZbupE=\n"
+        + "-----END CERTIFICATE-----\n";
 
-    int port;
-
-    ServerSocket ss;
-
-    SSLSocket soc;
-
-    boolean noFreePort = false;
-    boolean noSocket = false;
-
-    /*
-     * @see TestCase#setUp()
-     */
-    protected void setUp() throws Exception {
-        super.setUp();
-        SSLSocketFactory sf = (SSLSocketFactory) SSLSocketFactory.getDefault();
-        try {
-            ss = new ServerSocket(0);
-            port = ss.getLocalPort();
-        } catch (Exception e) {
-            e.printStackTrace();
-            noFreePort = true;
-            return;
-        }
-        try {
-            soc = (SSLSocket) sf.createSocket("localhost", port);
-        } catch (IOException e) {
-            noSocket = true;
-        }
-
-    }
-
-    /*
-     * @see TestCase#tearDown()
-     */
-    protected void tearDown() throws Exception {
-        super.tearDown();
-        if (ss != null) {
-            ss.close();
-        }
-        if (soc != null) {
-            soc.close();
-        }
-    }
-
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "Verification with null/incorrect parameters missed",
-      targets = {
-        @TestTarget(
-          methodName = "HandshakeCompletedEvent",
-          methodArgs = {SSLSocket.class, SSLSession.class}
-        )
-    })
-    public final void _test_Constructor() {
-        if (noFreePort || noSocket) {
-            return;
-        }
-        SSLSession ses = new MySSLSession();
-        HandshakeCompletedEvent event = new HandshakeCompletedEvent(soc, ses);
-        if (!ses.equals(event.getSession())) {
-            fail("incorrect session");
-        }
-        if (!soc.equals(event.getSocket())) {
-            fail("incorrect socket");
-        }
-    }
-
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getCipherSuite",
-          methodArgs = {}
-        )
-    })
-    public final void _test_getCipherSuite() {
-        if (noFreePort || noSocket) {
-            return;
-        }
-        SSLSession ses = new MySSLSession();
-
-        HandshakeCompletedEvent event = new HandshakeCompletedEvent(soc, ses);
-        String name = event.getCipherSuite();
-        String name_ses = ses.getCipherSuite();
-        if (name == null && name_ses != null) {
-            fail("incorrect null CipherCuite");
-        }
-        if (!name.equals(name_ses)) {
-            fail("incorrect CipherCuite");
-        }
-    }
 
     /**
-     * @tests javax.net.ssl.HandshakeCompletedEvent#getLocalPrincipal()
+     * @tests javax.net.ssl.HandshakeCompletedEvent#HandshakeCompletedEvent(SSLSocket sock, SSLSession s) 
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getLocalPrincipal",
-          methodArgs = {}
-        )
-    })
-    public void _test_getLocalPrincipal() {
-        if (noFreePort || noSocket) return;
-        SSLSession ses = new MySSLSession();
-        HandshakeCompletedEvent event = new HandshakeCompletedEvent(soc, ses);
-        Principal lp     = event.getLocalPrincipal();
-        Principal ses_lp = ses.getLocalPrincipal(); 
-        assertEquals("Incorrect value of local principal",
-                lp, ses_lp);
+    @TestTargetNew(
+        level = TestLevel.SUFFICIENT,
+        notes = "Exceptions for null/incorrect parameters are not provided",
+        method = "HandshakeCompletedEvent",
+        args = {javax.net.ssl.SSLSocket.class, javax.net.ssl.SSLSession.class}
+    )
+    public final void test_Constructor() {
+        mySSLSession session = new mySSLSession("localhost", 1080, null);
+        mySSLSocket socket = new mySSLSocket();
+        try {
+            HandshakeCompletedEvent event = new HandshakeCompletedEvent(socket, session);
+            assertNotNull(event);
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e);
+        }
+        try {
+            HandshakeCompletedEvent event = new HandshakeCompletedEvent(null, null);
+            fail("Any exception wasn't thrown for null parameters");
+        } catch (Exception e) {
+            //expected
+        }
     }
     
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getLocalCertificates",
-          methodArgs = {}
-        )
-    })
-    public final void _test_getLocalCertificates() {
-        if (noFreePort || noSocket) {
-            return;
-        }
-        SSLSession ses = new MySSLSession();
-        HandshakeCompletedEvent event = new HandshakeCompletedEvent(soc, ses);
-
-        Certificate[] certs = event.getLocalCertificates();
-        Certificate[] ses_certs = ses.getLocalCertificates();
-        if (certs == null && ses_certs == null) {
-            return;
-        }
-        if (certs == null || ses_certs == null) {
-            fail("incorrect LocalCertificates");
-        }
-        for (int i = 0; i < certs.length; i++) {
-            if (certs[i] != ses_certs[i]) {
-                fail("incorrect LocalCertificates");
-            }
-        }
-    }
-
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "Just SSLPeerUnverifiedException case was tested",
-      targets = {
-        @TestTarget(
-          methodName = "getPeerCertificateChain",
-          methodArgs = {}
-        )
-    })
-    public final void _test_getPeerCertificateChain() {
-        if (noFreePort || noSocket) {
-            return;
-        }
-        SSLSession ses = new MySSLSession();
-        HandshakeCompletedEvent event = new HandshakeCompletedEvent(soc, ses);
+    /**
+     * @tests javax.net.ssl.HandshakeCompletedEvent#getCipherSuite() 
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getCipherSuite",
+        args = {}
+    )
+    public final void test_getCipherSuite() {
+        mySSLSession session = new mySSLSession("localhost", 1080, null);
+        mySSLSocket socket = new mySSLSocket();
+        HandshakeCompletedEvent event = new HandshakeCompletedEvent(socket, session);
         try {
-            event.getPeerCertificateChain();
-            fail("No excpected SSLPeerUnverifiedException");
-        } catch (SSLPeerUnverifiedException e) {
+            String name = event.getCipherSuite();
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e);
         }
     }
-
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "Just SSLPeerUnverifiedException case was tested",
-      targets = {
-        @TestTarget(
-          methodName = "getPeerCertificates",
-          methodArgs = {}
-        )
-    })
-    public final void _test_getPeerCertificates() {
-        if (noFreePort || noSocket) {
-            return;
-        }
-        SSLSession ses = new MySSLSession();
-        HandshakeCompletedEvent event = new HandshakeCompletedEvent(soc, ses);
+    
+    /**
+     * @tests javax.net.ssl.HandshakeCompletedEvent#getLocalCertificates() 
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getLocalCertificates",
+        args = {}
+    )
+    public final void test_getLocalCertificates() {
+        mySSLSession session = new mySSLSession("localhost", 1080, null);
+        mySSLSocket socket = new mySSLSocket();
+        HandshakeCompletedEvent event = new HandshakeCompletedEvent(socket, session);
         try {
-            event.getPeerCertificates();
-            fail("No excpected SSLPeerUnverifiedException");
-        } catch (SSLPeerUnverifiedException e) {
+            assertNull(event.getLocalCertificates());
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e);
         }
     }
-
+    
     /**
-     * @tests javax.net.ssl.HandshakeCompletedEvent#getPeerPrincipal()
+     * @tests javax.net.ssl.HandshakeCompletedEvent#getLocalPrincipal() 
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "Just SSLPeerUnverifiedException case was tested",
-      targets = {
-        @TestTarget(
-          methodName = "getPeerPrincipal",
-          methodArgs = {}
-        )
-    })
-    public void _test_getPeerPrincipal()
-        throws SSLPeerUnverifiedException {
-        if (noFreePort || noSocket) return;
-        SSLSession ses = new MySSLSession();
-        HandshakeCompletedEvent event = new HandshakeCompletedEvent(soc, ses);
-        Principal pp     = event.getPeerPrincipal();
-        Principal ses_pp = ses.getPeerPrincipal(); 
-        assertEquals("Incorrect value of peer principal",
-                pp, ses_pp);
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getLocalPrincipal",
+        args = {}
+    )
+    public final void test_getLocalPrincipal() {
+        mySSLSession session = new mySSLSession("localhost", 1080, null);
+        mySSLSocket socket = new mySSLSocket();
+        HandshakeCompletedEvent event = new HandshakeCompletedEvent(socket, session);
+        try {
+            assertNull(event.getLocalPrincipal());
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e);
+        }
     }
-
+    
     /**
-     * @tests javax.net.ssl.HandshakeCompletedEvent#getSession()
+     * @tests javax.net.ssl.HandshakeCompletedEvent#getPeerCertificateChain() 
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getSession",
-          methodArgs = {}
-        )
-    })
-    public void _test_getSession() {
-        if (noFreePort || noSocket) return;
-        SSLSession ses = new MySSLSession();
-        HandshakeCompletedEvent event = new HandshakeCompletedEvent(soc, ses);
-        SSLSession s = event.getSession();
-        assertEquals("Incorrect value of session", s, ses);
-        assertNull("Session value is not null",
-                new HandshakeCompletedEvent(soc, null).getSession());
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getPeerCertificateChain",
+        args = {}
+    )
+    public final void test_getPeerCertificateChain() {
+        ByteArrayInputStream bis = new ByteArrayInputStream(certificate.getBytes());
+        mySSLSession session = new mySSLSession(null);
+        mySSLSocket socket = new mySSLSocket();
+        HandshakeCompletedEvent event = new HandshakeCompletedEvent(socket, session);
+        try {
+            X509Certificate[] res = event.getPeerCertificateChain();
+            fail("SSLPeerUnverifiedException wasn't thrown");
+        } catch (SSLPeerUnverifiedException spue) {
+            //expected
+        }
+        
+        try {
+            X509Certificate xc = X509Certificate.getInstance(bis);
+            X509Certificate[] xcs = {xc};
+            session = new mySSLSession(xcs);
+            event = new HandshakeCompletedEvent(socket, session);
+        } catch (Exception e) {
+            fail(e + " was thrown for configuration");
+        }
+        try {
+            X509Certificate[] res = event.getPeerCertificateChain();
+            assertEquals(res.length, 1);
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e);
+        }
     }
-
+    
     /**
-     * @tests javax.net.ssl.HandshakeCompletedEvent#getSocket()
+     * @tests javax.net.ssl.HandshakeCompletedEvent#getPeerCertificates() 
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getSocket",
-          methodArgs = {}
-        )
-    })
-    public void _test_getSocket() {
-        if (noFreePort || noSocket) return;
-        SSLSession ses = new MySSLSession();
-        HandshakeCompletedEvent event = new HandshakeCompletedEvent(soc, ses);
-        SSLSocket socket = event.getSocket();
-        assertEquals("Incorrect value of socket", socket, soc);
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getPeerCertificates",
+        args = {}
+    )
+    public final void test_getPeerCertificates() {
+        mySSLSession session = new mySSLSession("localhost", 1080, null);
+        mySSLSocket socket = new mySSLSocket();
+        HandshakeCompletedEvent event = new HandshakeCompletedEvent(socket, session);
+        try {
+            Certificate[] res = event.getPeerCertificates();
+            fail("SSLPeerUnverifiedException wasn't thrown");
+        } catch (SSLPeerUnverifiedException spue) {
+            //expected
+        }
+        
+        session = new mySSLSession(null);
+        event = new HandshakeCompletedEvent(socket, session);
+        try {
+            Certificate[] res = event.getPeerCertificates();
+            assertEquals(res.length, 3);
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.HandshakeCompletedEvent#getPeerPrincipal() 
+     */
+    @TestTargetNew(
+        level = TestLevel.SUFFICIENT,
+        notes = "",
+        method = "getPeerPrincipal",
+        args = {}
+    )
+    public final void test_getPeerPrincipal() {
+        mySSLSession session = new mySSLSession("localhost", 1080, null);
+        mySSLSocket socket = new mySSLSocket();
+        HandshakeCompletedEvent event = new HandshakeCompletedEvent(socket, session);
+        try {
+            assertNull(event.getPeerPrincipal());
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.HandshakeCompletedEvent#getSession() 
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getSession",
+        args = {}
+    )
+    public final void test_getSession() {
+        mySSLSession session = new mySSLSession("localhost", 1080, null);
+        mySSLSocket socket = new mySSLSocket();
+        HandshakeCompletedEvent event = new HandshakeCompletedEvent(socket, session);
+        try {
+            SSLSession ss = event.getSession();
+            assertNotNull(ss);
+            assertEquals(session, ss);
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.HandshakeCompletedEvent#getSocket() 
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getSocket",
+        args = {}
+    )
+    public final void test_getSocket() {
+        mySSLSession session = new mySSLSession("localhost", 1080, null);
+        mySSLSocket socket = new mySSLSocket();
+        HandshakeCompletedEvent event = new HandshakeCompletedEvent(socket, session);
+        try {
+            SSLSocket ss = event.getSocket();
+            assertNotNull(ss);
+            assertEquals(socket, ss);
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e);
+        }
     }
 }
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/HandshakeCompletedListenerTest.java b/x-net/src/test/java/tests/api/javax/net/ssl/HandshakeCompletedListenerTest.java
new file mode 100644
index 0000000..83d63e3
--- /dev/null
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/HandshakeCompletedListenerTest.java
@@ -0,0 +1,74 @@
+/*
+ *  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 tests.api.javax.net.ssl;
+
+import dalvik.annotation.TestTargetClass;
+import dalvik.annotation.TestLevel;
+import dalvik.annotation.TestTargetNew;
+
+import javax.net.ssl.HandshakeCompletedEvent;
+import javax.net.ssl.HandshakeCompletedListener;
+
+import junit.framework.TestCase;
+
+import org.apache.harmony.xnet.tests.support.mySSLSession;
+import org.apache.harmony.xnet.tests.support.mySSLSocket;
+
+
+/**
+ * Tests for <code>HandshakeCompletedListener</code> class constructors and methods.
+ * 
+ */
+@TestTargetClass(HandshakeCompletedListener.class) 
+public class HandshakeCompletedListenerTest extends TestCase {
+    
+    class myHandshakeCompletedListener implements HandshakeCompletedListener {
+        
+        private boolean completeDone;
+        
+        myHandshakeCompletedListener() {
+            completeDone = false;
+        }
+        
+        public void handshakeCompleted(HandshakeCompletedEvent event) {
+            if (event != null)  completeDone = true;
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.HandshakeCompletedListener#handshakeCompleted(HandshakeCompletedEvent event) 
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "handshakeCompleted",
+        args = {HandshakeCompletedEvent.class}
+    )
+    public final void test_handshakeCompleted() {
+        mySSLSession session = new mySSLSession("localhost", 1080, null);
+        mySSLSocket socket = new mySSLSocket();
+        HandshakeCompletedEvent event = new HandshakeCompletedEvent(socket, session);
+        myHandshakeCompletedListener hcl = new myHandshakeCompletedListener(); 
+        try {
+            hcl.handshakeCompleted(event);
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e);
+        }
+    }
+
+}
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/HostnameVerifierTest.java b/x-net/src/test/java/tests/api/javax/net/ssl/HostnameVerifierTest.java
new file mode 100644
index 0000000..b9a7487
--- /dev/null
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/HostnameVerifierTest.java
@@ -0,0 +1,70 @@
+/*
+ *  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 tests.api.javax.net.ssl;
+
+import dalvik.annotation.TestTargetClass;
+import dalvik.annotation.TestLevel;
+import dalvik.annotation.TestTargetNew;
+
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.HostnameVerifier;
+
+import junit.framework.TestCase;
+
+import org.apache.harmony.xnet.tests.support.mySSLSession;
+
+
+/**
+ * Tests for <code>HostnameVerifier</code> class constructors and methods.
+ * 
+ */
+@TestTargetClass(HostnameVerifier.class) 
+public class HostnameVerifierTest extends TestCase {
+    
+    class myHostnameVerifier implements HostnameVerifier {
+        
+        myHostnameVerifier() {
+        }
+        
+        public boolean verify(String hostname, SSLSession session) {
+            if (hostname == session.getPeerHost()) {
+                return true;
+            } else return false;
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.HostnameVerifier#verify(String hostname, SSLSession session) 
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "verify",
+        args = {String.class, SSLSession.class}
+    )
+    public final void test_verify() {
+        mySSLSession session = new mySSLSession("localhost", 1080, null);
+        myHostnameVerifier hv = new myHostnameVerifier(); 
+        try {
+            assertFalse(hv.verify("hostname", session));
+            assertTrue(hv.verify("localhost", session));
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e);
+        }
+    }
+}
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/HttpsURLConnectionTest.java b/x-net/src/test/java/tests/api/javax/net/ssl/HttpsURLConnectionTest.java
index 83953a2..58177d7 100644
--- a/x-net/src/test/java/tests/api/javax/net/ssl/HttpsURLConnectionTest.java
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/HttpsURLConnectionTest.java
@@ -19,12 +19,10 @@
 package tests.api.javax.net.ssl;
 
 import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestInfo;
 import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTarget;
+import dalvik.annotation.TestTargetNew;
 
 import java.io.ByteArrayInputStream;
-import java.io.IOException;
 import java.net.URL;
 import java.security.Principal;
 import java.security.cert.Certificate;
@@ -34,9 +32,11 @@
 import javax.net.ssl.HostnameVerifier;
 import javax.net.ssl.HttpsURLConnection;
 import javax.net.ssl.SSLPeerUnverifiedException;
+import javax.net.ssl.SSLSession;
 import javax.net.ssl.SSLSocketFactory;
 
 import org.apache.harmony.security.tests.support.cert.TestUtils;
+import org.apache.harmony.xnet.tests.support.SSLSocketFactoryImpl;
 
 import junit.framework.TestCase;
 
@@ -52,40 +52,103 @@
     /**
      * @tests javax.net.ssl.HttpsURLConnection#HttpsURLConnection(java_net_URL) 
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "HttpsURLConnection",
-          methodArgs = {URL.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "HttpsURLConnection",
+        args = {java.net.URL.class}
+    )
     public final void test_Constructor() {
         try {
-            new MyHttpsURLConnection(new URL("https://www.fortify.net"));
+            MyHttpsURLConnection huc = new MyHttpsURLConnection(new URL("https://www.fortify.net/"));
+            assertNotNull(huc);
+            assertTrue(huc instanceof HttpsURLConnection);
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e.toString());
+        }
+        try {
+            MyHttpsURLConnection huc = new MyHttpsURLConnection(null);
+            assertNotNull(huc);
         } catch (Exception e) {
             fail("Unexpected exception " + e.toString());
         }
+    }
+    
+    /**
+     * @tests javax.net.ssl.HttpsURLConnection#getCipherSuite() 
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getCipherSuite",
+        args = {}
+    )
+    public final void test_getCipherSuite() {
         try {
-            new MyHttpsURLConnection(null);
+            URL url = new URL("https://localhost:55555");
+            HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
+            try {
+                connection.getCipherSuite();
+                fail("IllegalStateException wasn't thrown");
+            } catch (IllegalStateException ise) {
+                //expected
+            }
         } catch (Exception e) {
-            fail("Unexpected exception " + e.toString());
+            fail("Unexpected exception " + e + " for exception case");
+        }
+        
+        try {
+            HttpsURLConnection con = new MyHttpsURLConnection(new URL("https://www.fortify.net/"));
+            assertEquals("CipherSuite", con.getCipherSuite());
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.HttpsURLConnection#getLocalCertificates() 
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getLocalCertificates",
+        args = {}
+    )
+    public final void test_getLocalCertificates() {
+        try {
+            URL url = new URL("https://localhost:55555");
+            HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
+            try {
+                connection.getLocalCertificates();
+                fail("IllegalStateException wasn't thrown");
+            } catch (IllegalStateException ise) {
+                //expected
+            }
+        } catch (Exception e) {
+            fail("Unexpected exception " + e + " for exception case");
+        }
+        
+        try {
+            HttpsURLConnection con = new MyHttpsURLConnection(new URL("https://www.fortify.net/"), "X.508");
+            assertNull(con.getLocalCertificates());
+            con = new MyHttpsURLConnection(new URL("https://www.fortify.net/"), "X.509");
+            Certificate[] cert = con.getLocalCertificates();
+            assertNotNull(cert);
+            assertEquals(1, cert.length);
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
         }
     }
 
     /**
      * @tests javax.net.ssl.HttpsURLConnection#getDefaultHostnameVerifier() 
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getDefaultHostnameVerifier",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getDefaultHostnameVerifier",
+        args = {}
+    )
     public final void test_getDefaultHostnameVerifier() {
         HostnameVerifier verifyer =
             HttpsURLConnection.getDefaultHostnameVerifier();
@@ -95,15 +158,12 @@
     /**
      * @tests javax.net.ssl.HttpsURLConnection#getDefaultSSLSocketFactory() 
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getDefaultSSLSocketFactory",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getDefaultSSLSocketFactory",
+        args = {}
+    )
     public final void test_getDefaultSSLSocketFactory() {
         SSLSocketFactory sf = HttpsURLConnection.getDefaultSSLSocketFactory();
         if (!sf.equals(SSLSocketFactory.getDefault())) {
@@ -114,19 +174,16 @@
     /**
      * @tests javax.net.ssl.HttpsURLConnection#getHostnameVerifier()
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getHostnameVerifier",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getHostnameVerifier",
+        args = {}
+    )
     public final void test_getHostnameVerifier()
         throws Exception {
         HttpsURLConnection con = new MyHttpsURLConnection(
-                new URL("https://www.fortify.net"));
+                new URL("https://www.fortify.net/"));
         HostnameVerifier verifyer = con.getHostnameVerifier();
         assertNotNull("Hostname verifyer is null", verifyer);
         assertEquals("Incorrect value of hostname verirfyer", 
@@ -136,55 +193,125 @@
     /**
      * @tests javax.net.ssl.HttpsURLConnection#getLocalPrincipal()
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "IllegalStateException checking missed",
-      targets = {
-        @TestTarget(
-          methodName = "getLocalPrincipal",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getLocalPrincipal",
+        args = {}
+    )
     public final void test_getLocalPrincipal() {
-        HttpsURLConnection con = new MyHttpsURLConnection(null);
-        assertNotNull("Local principal is null", con.getLocalPrincipal());
+        try {
+            URL url = new URL("https://localhost:55555");
+            HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
+            try {
+                connection.getLocalPrincipal();
+                fail("IllegalStateException wasn't thrown");
+            } catch (IllegalStateException ise) {
+                //expected
+            }
+        } catch (Exception e) {
+            fail("Unexpected exception " + e + " for exception case");
+        }
+        
+        try {
+            HttpsURLConnection con = new MyHttpsURLConnection(new URL("https://www.fortify.net/"), "X.508");
+            assertNull(con.getLocalPrincipal());
+            con = new MyHttpsURLConnection(new URL("https://www.fortify.net/"), "X.509");
+            assertNotNull("Local principal is null", con.getLocalPrincipal());
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
     }
 
     /**
      * @tests javax.net.ssl.HttpsURLConnection#getPeerPrincipal()
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "IllegalStateException checking missed",
-      targets = {
-        @TestTarget(
-          methodName = "getPeerPrincipal",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getPeerPrincipal",
+        args = {}
+    )
     public final void test_getPeerPrincipal() throws Exception {
-        HttpsURLConnection con = new MyHttpsURLConnection(
-                new URL("https://www.fortify.net"));
+        try {
+            URL url = new URL("https://localhost:55555");
+            HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
+            try {
+                connection.getPeerPrincipal();
+                fail("IllegalStateException wasn't thrown");
+            } catch (IllegalStateException ise) {
+                //expected
+            }
+        } catch (Exception e) {
+            fail("Unexpected exception " + e + " for exception case");
+        }
+        HttpsURLConnection con = new MyHttpsURLConnection(new URL("https://www.fortify.net/"), "X.508");
         try {
             Principal p = con.getPeerPrincipal();
-            assertNotNull("Principal is null", p);
+            fail("SSLPeerUnverifiedException wasn't thrown");
         } catch (SSLPeerUnverifiedException e) {
-            fail("Unexpected SSLPeerUnverifiedException " + e.toString());
+            //expected
+        }
+        
+        con = new MyHttpsURLConnection(new URL("https://www.fortify.net/"), "X.509");
+        try {
+            Principal p = con.getPeerPrincipal();
+            assertNotNull(p);
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.HttpsURLConnection#getServerCertificates()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getServerCertificates",
+        args = {}
+    )
+    public final void test_getServerCertificates() throws Exception {
+        try {
+            URL url = new URL("https://localhost:55555");
+            HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
+            try {
+                connection.getServerCertificates();
+                fail("IllegalStateException wasn't thrown");
+            } catch (IllegalStateException ise) {
+                //expected
+            }
+        } catch (Exception e) {
+            fail("Unexpected exception " + e + " for exception case");
+        }
+        
+        HttpsURLConnection con = new MyHttpsURLConnection(new URL("https://www.fortify.net/"), "X.508");
+        try {
+            Certificate[] cert = con.getServerCertificates();
+            fail("SSLPeerUnverifiedException wasn't thrown");
+        } catch (SSLPeerUnverifiedException e) {
+            //expected
+        }
+        
+        con = new MyHttpsURLConnection(new URL("https://www.fortify.net/"), "X.509");
+        try {
+            Certificate[] cert = con.getServerCertificates();
+            assertNotNull(cert);
+            assertEquals(1, cert.length);
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
         }
     }
 
     /**
      * @tests javax.net.ssl.HttpsURLConnection#getSSLSocketFactory()
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getSSLSocketFactory",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getSSLSocketFactory",
+        args = {}
+    )
     public final void test_getSSLSocketFactory() {
         HttpsURLConnection con = new MyHttpsURLConnection(null);
         SSLSocketFactory sf = con.getSSLSocketFactory();
@@ -196,15 +323,12 @@
     /**
      * @tests javax.net.ssl.HttpsURLConnection#setDefaultHostnameVerifier()
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "Not null parameter checking missed",
-      targets = {
-        @TestTarget(
-          methodName = "setDefaultHostnameVerifier",
-          methodArgs = {HostnameVerifier.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "setDefaultHostnameVerifier",
+        args = {javax.net.ssl.HostnameVerifier.class}
+    )
     public final void test_setDefaultHostnameVerifier() {
         try {
             HttpsURLConnection.setDefaultHostnameVerifier(null);
@@ -212,20 +336,23 @@
         } catch (IllegalArgumentException e) {
             // expected
         }
+        try {
+            myHostnameVerifier hnv = new myHostnameVerifier();
+            HttpsURLConnection.setDefaultHostnameVerifier(hnv);
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
     }
 
     /**
      * @tests javax.net.ssl.HttpsURLConnection#setHostnameVerifier()
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "Not null parameter checking missed",
-      targets = {
-        @TestTarget(
-          methodName = "setHostnameVerifier",
-          methodArgs = {HostnameVerifier.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "setHostnameVerifier",
+        args = {javax.net.ssl.HostnameVerifier.class}
+    )
     public final void test_setHostnameVerifier() {
         HttpsURLConnection con = new MyHttpsURLConnection(null);
         try {
@@ -233,40 +360,46 @@
             fail("No expected IllegalArgumentException");
         } catch (IllegalArgumentException e) {
         }
+        try {
+            myHostnameVerifier hnv = new myHostnameVerifier();
+            con.setHostnameVerifier(hnv);
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
     }
 
     /**
      * @tests javax.net.ssl.HttpsURLConnection#setDefaultSSLSocketFactory()
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "Not null checking missed",
-      targets = {
-        @TestTarget(
-          methodName = "setDefaultSSLSocketFactory",
-          methodArgs = {SSLSocketFactory.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "setDefaultSSLSocketFactory",
+        args = {javax.net.ssl.SSLSocketFactory.class}
+    )
     public final void test_setDefaultSSLSocketFactory() {
         try {
             HttpsURLConnection.setDefaultSSLSocketFactory(null);
             fail("No expected IllegalArgumentException");
         } catch (IllegalArgumentException e) {
         }
+        try {
+            SSLSocketFactoryImpl ssf = new SSLSocketFactoryImpl();
+            HttpsURLConnection.setDefaultSSLSocketFactory(ssf);
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
     }
 
     /**
      * @tests javax.net.ssl.HttpsURLConnection#setSSLSocketFactory()
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "Not null checking missed",
-      targets = {
-        @TestTarget(
-          methodName = "setSSLSocketFactory",
-          methodArgs = {SSLSocketFactory.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "setSSLSocketFactory",
+        args = {javax.net.ssl.SSLSocketFactory.class}
+    )
     public final void test_setSSLSocketFactory() {
         HttpsURLConnection con = new MyHttpsURLConnection(null);
         try {
@@ -274,20 +407,33 @@
             fail("No expected IllegalArgumentException");
         } catch (IllegalArgumentException e) {
         }
+        try {
+            SSLSocketFactoryImpl ssf = new SSLSocketFactoryImpl();
+            con.setSSLSocketFactory(ssf);
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
     }
 }
 
-class MyHttpsURLConnection extends HttpsURLConnection {
-
+class MyHttpsURLConnection extends javax.net.ssl.HttpsURLConnection {
+    
+    private String typeDone;
+    
     public MyHttpsURLConnection(URL url) {
         super(url);
     }
+    
+    public MyHttpsURLConnection(URL url, String type) {
+        super(url);
+        typeDone = type;
+    }
 
     /*
      * @see javax.net.ssl.HttpsURLConnection#getCipherSuite()
      */
     public String getCipherSuite() {
-        return null;
+        return "CipherSuite";
     }
 
     /*
@@ -296,7 +442,7 @@
     public Certificate[] getLocalCertificates() {
         Certificate cert = null;
         try {
-            CertificateFactory cf = CertificateFactory.getInstance("X.509");
+            CertificateFactory cf = CertificateFactory.getInstance(typeDone);
             byte[] barr = TestUtils.getX509Certificate_v1();
             ByteArrayInputStream bis = new ByteArrayInputStream(barr);
             cert = cf.generateCertificate(bis);
@@ -305,20 +451,19 @@
         }
         return cert == null ? null : new Certificate[]{cert};
     }
-
+    
     /*
      * @see javax.net.ssl.HttpsURLConnection#getServerCertificates()
      */
-    public Certificate[] getServerCertificates()
-            throws SSLPeerUnverifiedException {
+    public Certificate[] getServerCertificates() throws SSLPeerUnverifiedException {
         Certificate cert = null;
         try {
-            CertificateFactory cf = CertificateFactory.getInstance("X.509");
+            CertificateFactory cf = CertificateFactory.getInstance(typeDone);
             byte[] barr = TestUtils.getX509Certificate_v3();
             ByteArrayInputStream bis = new ByteArrayInputStream(barr);
             cert = cf.generateCertificate(bis);
         } catch (CertificateException se) {
-            cert = null;
+            throw new SSLPeerUnverifiedException("No server's end-entity certificate");
         }
         return cert == null ? null : new Certificate[]{cert};
     }
@@ -336,11 +481,20 @@
         return false;
     }
 
-    /*
-     * @see java.net.URLConnection#connect()
-     */
-    public void connect() throws IOException {
+    public void connect() {
     }
 
 }
 
+class myHostnameVerifier implements HostnameVerifier {
+    
+    myHostnameVerifier() {
+    }
+    
+    public boolean verify(String hostname, SSLSession session) {
+        if (hostname == session.getPeerHost()) {
+            return true;
+        } else return false;
+    }
+}
+
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/KeyManagerFactory1Test.java b/x-net/src/test/java/tests/api/javax/net/ssl/KeyManagerFactory1Test.java
index 62d1c91..2777a4a 100644
--- a/x-net/src/test/java/tests/api/javax/net/ssl/KeyManagerFactory1Test.java
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/KeyManagerFactory1Test.java
@@ -18,13 +18,11 @@
 package tests.api.javax.net.ssl;
 
 import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestInfo;
 import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTarget;
+import dalvik.annotation.TestTargetNew;
+import dalvik.annotation.KnownFailure;
 
-import java.io.FileInputStream;
 import java.io.IOException;
-import java.io.InputStream;
 import java.security.InvalidAlgorithmParameterException;
 import java.security.KeyStore;
 import java.security.KeyStoreException;
@@ -35,6 +33,7 @@
 import java.security.UnrecoverableKeyException;
 import java.security.cert.CertificateException;
 
+import javax.net.ssl.KeyStoreBuilderParameters;
 import javax.net.ssl.ManagerFactoryParameters;
 import javax.net.ssl.KeyManager;
 import javax.net.ssl.KeyManagerFactory;
@@ -42,6 +41,7 @@
 
 import org.apache.harmony.security.tests.support.SpiEngUtils;
 import org.apache.harmony.xnet.tests.support.MyKeyManagerFactorySpi;
+
 import junit.framework.TestCase;
 
 /**
@@ -103,15 +103,12 @@
     /**
      * @tests avax.net.ssl.KeyManagerFactory#getAlgorithm() 
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getAlgorithm",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getAlgorithm",
+        args = {}
+    )
     public void test_getAlgorithm()
         throws NoSuchAlgorithmException, NoSuchProviderException {
         if (!DEFSupported) fail(NotSupportedMsg);
@@ -134,15 +131,12 @@
      *  Test for <code>getDefaultAlgorithm()</code> method
      * Assertion: returns value which is specifoed in security property
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getDefaultAlgorithm",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getDefaultAlgorithm",
+        args = {}
+    )
     public void test_getDefaultAlgorithm() {
         if (!DEFSupported) {
             fail(NotSupportedMsg);
@@ -172,15 +166,12 @@
      * returns security property "ssl.KeyManagerFactory.algorithm";
      * returns instance of KeyManagerFactory
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL_OK,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class}
+    )
     public void test_getInstanceLjava_lang_String01() throws NoSuchAlgorithmException {
         if (!DEFSupported) {
             fail(NotSupportedMsg);
@@ -202,15 +193,12 @@
      * throws NullPointerException when algorithm is null;
      * throws NoSuchAlgorithmException when algorithm is not correct;
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL_OK,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class}
+    )
     public void test_getInstanceLjava_lang_String02() {
         try {
             KeyManagerFactory.getInstance(null);
@@ -233,15 +221,12 @@
      * method 
      * Assertion: throws IllegalArgumentException when provider is null or empty
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL_OK,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class, String.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class, java.lang.String.class}
+    )
     public void test_getInstanceLjava_lang_StringLjava_lang_String01() throws NoSuchProviderException,
             NoSuchAlgorithmException {
         if (!DEFSupported) {
@@ -270,15 +255,12 @@
      * throws NullPointerException when algorithm is null;
      * throws NoSuchAlgorithmException when algorithm is not correct;
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL_OK,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class, String.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class, java.lang.String.class}
+    )
     public void test_getInstanceLjava_lang_StringLjava_lang_String02() throws NoSuchProviderException {
         if (!DEFSupported) {
             fail(NotSupportedMsg);
@@ -307,15 +289,12 @@
      * Assertion: throws NoSuchProviderException when provider has
      * invalid value
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL_OK,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class, String.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class, java.lang.String.class}
+    )
     public void test_getInstanceLjava_lang_StringLjava_lang_String03()
         throws NoSuchAlgorithmException {
         if (!DEFSupported) {
@@ -340,15 +319,12 @@
      * Test for <code>getInstance(String algorithm, String provider)</code>
      * method Assertion: returns instance of KeyManagerFactory
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL_OK,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class, String.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class, java.lang.String.class}
+    )
     public void test_getInstanceLjava_lang_StringLjava_lang_String04()
         throws NoSuchProviderException,
             NoSuchAlgorithmException {
@@ -374,15 +350,12 @@
      * method 
      * Assertion: throws IllegalArgumentException when provider is null
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL_OK,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class, Provider.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class, java.security.Provider.class}
+    )
     public void test_getInstanceLjava_lang_StringLjava_security_Provider01()
         throws NoSuchAlgorithmException {
         if (!DEFSupported) {
@@ -406,15 +379,12 @@
      * throws NullPointerException when algorithm is null;
      * throws NoSuchAlgorithmException when algorithm is not correct;
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL_OK,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class, Provider.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class, java.security.Provider.class}
+    )
     public void test_getInstanceLjava_lang_StringLjava_security_Provider02() {
         if (!DEFSupported) {
             fail(NotSupportedMsg);
@@ -441,15 +411,12 @@
      * method 
      * Assertion: returns instance of KeyManagerFactory
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL_OK,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class, Provider.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class, java.security.Provider.class}
+    )
     public void test_getInstanceLjava_lang_StringLjava_security_Provider03()
         throws NoSuchAlgorithmException,
             IllegalArgumentException {
@@ -471,15 +438,12 @@
      * Test for <code>KeyManagerFactory</code> constructor 
      * Assertion: returns KeyManagerFactory object
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "KeyManagerFactory",
-          methodArgs = {KeyManagerFactorySpi.class, Provider.class, String.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "KeyManagerFactory",
+        args = {javax.net.ssl.KeyManagerFactorySpi.class, java.security.Provider.class, java.lang.String.class}
+    )
     public void test_Constructor() throws NoSuchAlgorithmException {
         if (!DEFSupported) {
             fail(NotSupportedMsg);
@@ -517,26 +481,18 @@
      * @throws CertificateException 
      * @throws UnrecoverableKeyException
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getKeyManagers",
-          methodArgs = {}
-        )
-    })
-    public void _test_getKeyManagers()
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getKeyManagers",
+        args = {}
+    )
+    public void test_getKeyManagers()
         throws Exception {
         if (!DEFSupported) fail(NotSupportedMsg);
         KeyManagerFactory kmf = KeyManagerFactory.getInstance(defaultAlgorithm);
-        KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
-        InputStream v1in = new FileInputStream(ClassLoader
-                .getSystemClassLoader().getResource("keystore.jks").getFile());
         char[] pass = "password".toCharArray();
-        keyStore.load(v1in, pass);
-        v1in.close();
-        kmf.init(keyStore, pass);
+        kmf.init(null, pass);
         assertNotNull("Key manager array is null", kmf.getKeyManagers());
         assertEquals("Incorrect size of array",
                 1, kmf.getKeyManagers().length);
@@ -545,15 +501,12 @@
     /**
      * @tests avax.net.ssl.KeyManagerFactory#getProvider()
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getProvider",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getProvider",
+        args = {}
+    )
     public void test_getProvider()
         throws Exception {
         if (!DEFSupported) fail(NotSupportedMsg);
@@ -577,15 +530,12 @@
      * <code>getKeyManagers()</code> 
      * Assertion: returns not empty KeyManager array
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException checking missed",
-      targets = {
-        @TestTarget(
-          methodName = "init",
-          methodArgs = {KeyStore.class, char[].class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.SUFFICIENT,
+        notes = "KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException checking missed",
+        method = "init",
+        args = {java.security.KeyStore.class, char[].class}
+    )
     public void test_initLjava_security_KeyStore$C()
         throws NoSuchAlgorithmException,
         KeyStoreException, UnrecoverableKeyException {
@@ -625,6 +575,7 @@
             assertTrue("Length of result KeyManager array should not be 0",
                     (km.length > 0));
         }
+      
     }
 
     /**
@@ -632,17 +583,18 @@
      * Assertion:
      * throws InvalidAlgorithmParameterException when params is null
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "Exception case was checked only",
-      targets = {
-        @TestTarget(
-          methodName = "init",
-          methodArgs = {ManagerFactoryParameters.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "functionality is not implemented in org.apache.harmony.xnet.provider.jsse.engineInit(ManagerFactoryParameters)",
+        method = "init",
+        args = {javax.net.ssl.ManagerFactoryParameters.class}
+    )
+    @KnownFailure("ManagerFactoryParameters object is not supported " + 
+                  "and InvalidAlgorithmParameterException was thrown." +
+                  "RI: functionality is not implemented, just exception.")
     public void test_initLjavax_net_ssl_ManagerFactoryParameters()
         throws NoSuchAlgorithmException {
+
         if (!DEFSupported) {
             fail(NotSupportedMsg);
             return;
@@ -657,6 +609,19 @@
             } catch (InvalidAlgorithmParameterException e) {
             }
         }
+        
+        KeyStore.ProtectionParameter pp = new ProtectionParameterImpl();
+        KeyStore.Builder bld = KeyStore.Builder.newInstance("testType", null, pp);
+        assertNotNull("Null object KeyStore.Builder", bld);
+        
+        try {
+            KeyManagerFactory kmf = KeyManagerFactory.getInstance(defaultAlgorithm);
+            KeyStoreBuilderParameters ksp = new KeyStoreBuilderParameters(bld);
+            assertNotNull(ksp.getParameters());
+            kmf.init(ksp);
+            fail("InvalidAlgorithmParameterException must be thrown");
+        } catch (InvalidAlgorithmParameterException e) {
+        }
     }
     
 }
@@ -670,3 +635,7 @@
         super(spi, prov, alg);
     }
 }
+
+class ProtectionParameterImpl implements KeyStore.ProtectionParameter {
+    ProtectionParameterImpl(){}
+}
\ No newline at end of file
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/KeyManagerFactory2Test.java b/x-net/src/test/java/tests/api/javax/net/ssl/KeyManagerFactory2Test.java
index f186923..104b30b 100644
--- a/x-net/src/test/java/tests/api/javax/net/ssl/KeyManagerFactory2Test.java
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/KeyManagerFactory2Test.java
@@ -18,9 +18,9 @@
 package tests.api.javax.net.ssl;
 
 import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestInfo;
+import dalvik.annotation.TestTargets;
 import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTarget;
+import dalvik.annotation.TestTargetNew;
 
 import java.security.InvalidAlgorithmParameterException;
 import java.security.KeyStore;
@@ -130,15 +130,12 @@
      * throws NoSuchAlgorithmException when algorithm is not correct;
      * returns KeyManagerFactory object
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class}
+    )
     public void test_getInstanceLjava_lang_String() throws Exception {
         try {
             KeyManagerFactory.getInstance(null);
@@ -176,15 +173,12 @@
      * throws NoSuchProviderException when provider is available;
      * returns KeyManagerFactory object
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class, String.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class, java.lang.String.class}
+    )
     public void test_getInstanceLjava_lang_StringLjava_lang_String()
         throws Exception
     {
@@ -253,15 +247,12 @@
      * throws IllegalArgumentException when provider is null;
      * returns KeyManagerFactory object
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class, Provider.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class, java.security.Provider.class}
+    )
     public void test_getInstanceLjava_lang_StringLjava_security_Provider()
         throws Exception
     {
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/KeyManagerFactorySpiTest.java b/x-net/src/test/java/tests/api/javax/net/ssl/KeyManagerFactorySpiTest.java
index f6a2e96..2319769 100644
--- a/x-net/src/test/java/tests/api/javax/net/ssl/KeyManagerFactorySpiTest.java
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/KeyManagerFactorySpiTest.java
@@ -5,7 +5,7 @@
  * 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
+ *     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,
@@ -13,77 +13,168 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package tests.api.javax.net.ssl;
 
 import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestInfo;
 import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTarget;
+import dalvik.annotation.TestTargetNew;
 
 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;
 
 import junit.framework.TestCase;
 
+import org.apache.harmony.xnet.tests.support.KeyManagerFactorySpiImpl;
+
 @TestTargetClass(KeyManagerFactorySpi.class) 
 public class KeyManagerFactorySpiTest extends TestCase {
 
-    private class MockKeyManagerFactorySpi extends KeyManagerFactorySpi {
-        public MockKeyManagerFactorySpi() {
-            super();
-        }
-
-        /** 
-         * @see javax.net.ssl.KeyManagerFactorySpi#engineGetKeyManagers()
-         */
-        @Override
-        protected KeyManager[] engineGetKeyManagers() {
-            // it is a fake
-            return null;
-        }
-
-        /**
-         * @see javax.net.ssl.KeyManagerFactorySpi#engineInit(javax.net.ssl.ManagerFactoryParameters)
-         */
-        @Override
-        protected void engineInit(ManagerFactoryParameters arg0) throws InvalidAlgorithmParameterException {
-            // it is a fake
-        }
-
-        /**
-         * @see javax.net.ssl.KeyManagerFactorySpi#engineInit(java.security.KeyStore, char[])
-         */
-        @Override
-        protected void engineInit(KeyStore arg0, char[] arg1) throws KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException {
-            // it is a fake
-        }
-    } 
-    
     /**
      * @tests javax.net.ssl.KeyManagerFactorySpi#KeyManagerFactorySpi()
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "KeyManagerFactorySpi",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "KeyManagerFactorySpi",
+        args = {}
+    )
     public void test_Constructor() {
         try {
-            new MockKeyManagerFactorySpi();
+            KeyManagerFactorySpiImpl kmf = new KeyManagerFactorySpiImpl();
+            assertTrue(kmf instanceof KeyManagerFactorySpi);
         } catch (Exception e) {
             fail("Unexpected Exception " + e.toString());
         }
     }
+    
+    /**
+     * @tests javax.net.ssl.KeyManagerFactorySpi#KengineInit(KeyStore ks, char[] password)
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "engineInit",
+        args = {java.security.KeyStore.class, char[].class}
+    )
+    public void test_engineInit_01() {
+        KeyManagerFactorySpiImpl kmf = new KeyManagerFactorySpiImpl();
+        KeyStore ks;
+        char[] psw = "password".toCharArray();
+        
+        try {
+            kmf.engineInit(null, null);
+            fail("NoSuchAlgorithmException wasn't thrown");
+        } catch (NoSuchAlgorithmException kse) {
+            //expected
+        } catch (Exception e) {
+            fail(e + " was thrown instead of NoSuchAlgorithmException");
+        }
+        
+        try {
+            kmf.engineInit(null, psw);
+            fail("KeyStoreException wasn't thrown");
+        } catch (KeyStoreException uke) {
+            //expected
+        } catch (Exception e) {
+            fail(e + " was thrown instead of KeyStoreException");
+        }
+        
+        try {
+            ks = KeyStore.getInstance(KeyStore.getDefaultType());
+            kmf.engineInit(ks, null);
+            fail("UnrecoverableKeyException wasn't thrown");
+        } catch (UnrecoverableKeyException uke) {
+            //expected
+        } catch (Exception e) {
+            fail(e + " was thrown instead of UnrecoverableKeyException");
+        }
+        
+        try {
+            KeyStore kst = KeyStore.getInstance(KeyStore.getDefaultType());
+            kst.load(null, null);
+            kmf.engineInit(kst, psw);
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.KeyManagerFactorySpi#KengineInit(ManagerFactoryParameters spec)
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "engineInit",
+        args = {javax.net.ssl.ManagerFactoryParameters.class}
+    )
+    public void test_engineInit_02() {
+        KeyManagerFactorySpiImpl kmf = new KeyManagerFactorySpiImpl();
+        
+        try {
+            kmf.engineInit(null);
+            fail("InvalidAlgorithmParameterException wasn't thrown");
+        } catch (InvalidAlgorithmParameterException iape) {
+            //expected
+        } catch (Exception e) {
+            fail(e + " was thrown instead of InvalidAlgorithmParameterException");
+        }
+        
+        try {
+            char[] psw = "password".toCharArray();
+            Parameters pr = new Parameters(psw);
+            kmf.engineInit(pr);
+        } catch (Exception e) {
+            fail(e + " unexpected exception was thrown");
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.KeyManagerFactorySpi#engineGetKeyManagers()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "engineGetKeyManagers",
+        args = {}
+    )
+    public void test_engineGetKeyManagers() {
+        KeyManagerFactorySpiImpl kmf = new KeyManagerFactorySpiImpl();
+        
+        try {
+            KeyManager[] km = kmf.engineGetKeyManagers();
+            fail("IllegalStateException wasn't thrown");
+        } catch (IllegalStateException ise) {
+            //expected
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalStateException");
+        }
+        
+        try {
+            char[] psw = "password".toCharArray();
+            Parameters pr = new Parameters(psw);
+            kmf.engineInit(pr);
+            KeyManager[] km = kmf.engineGetKeyManagers();
+            assertNull("Object is not NULL", km);
+        } catch (Exception e) {
+            fail(e + " unexpected exception was thrown");
+        }
+    }
+    
+    public class Parameters implements ManagerFactoryParameters {
+        private char[] passWD;
+        
+        public Parameters (char[] pass) {
+            this.passWD = pass;
+        }
+        public char[] getPassword() {
+            return passWD;
+        }
+    }
+    
 }
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/KeyStoreBuilderParametersTest.java b/x-net/src/test/java/tests/api/javax/net/ssl/KeyStoreBuilderParametersTest.java
new file mode 100644
index 0000000..6e1af6b
--- /dev/null
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/KeyStoreBuilderParametersTest.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed 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 tests.api.javax.net.ssl;
+
+import dalvik.annotation.TestTargetClass;
+import dalvik.annotation.TestTargets;
+import dalvik.annotation.TestLevel;
+import dalvik.annotation.TestTargetNew;
+
+import javax.net.ssl.KeyManagerFactorySpi;
+import javax.net.ssl.KeyStoreBuilderParameters;
+import java.security.KeyStore;
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+@TestTargetClass(KeyStoreBuilderParameters.class) 
+public class KeyStoreBuilderParametersTest extends TestCase {
+    
+    /**
+     * @tests javax.net.ssl.KeyStoreBuilderParameters#KeyStoreBuilderParameters(KeyStore.Builder builder)
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "KeyStoreBuilderParameters",
+        args = {java.security.KeyStore.Builder.class}
+    )
+    public void test_Constructor01() {
+        KeyStore.Builder bld = null;
+        
+        //Null parameter
+        try {
+            KeyStoreBuilderParameters ksp = new KeyStoreBuilderParameters(bld);
+            assertNotNull(ksp.getParameters());
+        } catch (NullPointerException npe) {
+            fail("NullPointerException should not be thrown");
+        }
+        
+        //Not null parameter
+        KeyStore.ProtectionParameter pp = new ProtectionParameterImpl();
+        bld = KeyStore.Builder.newInstance("testType", null, pp);
+        assertNotNull("Null object KeyStore.Builder", bld);
+        try {
+            KeyStoreBuilderParameters ksp = new KeyStoreBuilderParameters(bld);
+            assertNotNull(ksp.getParameters());
+        } catch (Exception e) {
+            fail("Unexpected exception was thrown");
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.KeyStoreBuilderParameters#KeyStoreBuilderParameters(List parameters)
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "KeyStoreBuilderParameters",
+        args = {java.util.List.class}
+    )
+    public void test_Constructor02() {
+               
+        //Null parameter
+        List ls = null;
+        try {
+            KeyStoreBuilderParameters ksp = new KeyStoreBuilderParameters(ls);
+            fail("NullPointerException should be thrown");
+        } catch (NullPointerException npe) {
+            //expected
+        }
+        
+        //Empty parameter
+        List lsEmpty = new ArrayList();
+        try {
+            KeyStoreBuilderParameters ksp = new KeyStoreBuilderParameters(lsEmpty);
+            fail("IllegalArgumentException should be thrown");
+        } catch (IllegalArgumentException iae) {
+            //expected
+        }
+        
+        //Not null parameter
+        List lsFiled = new ArrayList();;
+        lsFiled.add("Parameter1");
+        lsFiled.add("Parameter2");
+        try {
+            KeyStoreBuilderParameters ksp = new KeyStoreBuilderParameters(lsFiled);
+            assertTrue("Not instanceof KeyStoreBuilderParameters object", 
+                       ksp instanceof KeyStoreBuilderParameters); 
+        } catch (Exception e) {
+            fail("Unexpected exception was thrown");
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.KeyStoreBuilderParameters#getParameters()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getParameters",
+        args = {}
+    )
+    public void test_getParameters() {
+        String[] param = {"Parameter1", "Parameter2", "Parameter3"};
+        List ls = new ArrayList();
+        for (int i = 0; i < param.length; i++) {
+            ls.add(param[i]);
+        }
+        KeyStoreBuilderParameters ksp = new KeyStoreBuilderParameters(ls);
+        try {
+            List res_list = ksp.getParameters();
+            Object[] res = res_list.toArray(); 
+            if (res.length == param.length) {
+                for (int i = 0; i < res.length; i++) {
+                    if (!param[i].equals(res[i])) {
+                        fail("Parameters not equal");
+                    }
+                }
+            } else {
+                fail("Incorrect number of parameters");
+            }
+        } catch (Exception e) {
+            fail("Unexpected exception was thrown");
+        }
+    }
+    
+    class ProtectionParameterImpl implements KeyStore.ProtectionParameter {
+        ProtectionParameterImpl(){}
+    }
+}
+
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/SSLContext1Test.java b/x-net/src/test/java/tests/api/javax/net/ssl/SSLContext1Test.java
index be3b6d1..1315b69 100644
--- a/x-net/src/test/java/tests/api/javax/net/ssl/SSLContext1Test.java
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/SSLContext1Test.java
@@ -18,9 +18,9 @@
 package tests.api.javax.net.ssl;
 
 import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestInfo;
+import dalvik.annotation.TestTargets;
 import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTarget;
+import dalvik.annotation.TestTargetNew;
 
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
@@ -100,15 +100,12 @@
      * Test for <code>SSLContext</code> constructor Assertion: returns
      * SSLContext object
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "SSLContext",
-          methodArgs = {SSLContextSpi.class, Provider.class, String.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "SSLContext",
+        args = {javax.net.ssl.SSLContextSpi.class, java.security.Provider.class, java.lang.String.class}
+    )
     public void test_ConstructorLjavax_net_ssl_SSLContextSpiLjava_security_ProviderLjava_lang_String()
         throws NoSuchAlgorithmException,
             KeyManagementException {
@@ -155,15 +152,12 @@
      * @throws KeyManagementException 
      * @tests javax.net.ssl.SSLContext#createSSLEngine()
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "UnsupportedOperationException checking missed",
-      targets = {
-        @TestTarget(
-          methodName = "createSSLEngine",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.SUFFICIENT,
+        notes = "UnsupportedOperationException checking missed",
+        method = "createSSLEngine",
+        args = {}
+    )
     public void test_createSSLEngine() throws KeyManagementException {
         if (!DEFSupported) fail(NotSupportMsg);
         SSLContextSpi spi = new MySSLContextSpi();
@@ -178,15 +172,12 @@
      * @throws KeyManagementException 
      * @tests javax.net.ssl.SSLContext#createSSLEngine(java.lang.String, int)
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "UnsupportedOperationException checking missed",
-      targets = {
-        @TestTarget(
-          methodName = "createSSLEngine",
-          methodArgs = {String.class, int.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.SUFFICIENT,
+        notes = "UnsupportedOperationException checking missed",
+        method = "createSSLEngine",
+        args = {java.lang.String.class, int.class}
+    )
     public void test_createSSLEngineLjava_lang_StringI()
         throws KeyManagementException {
         if (!DEFSupported) fail(NotSupportMsg);
@@ -203,15 +194,12 @@
      * <code>getServiceSessionContext()</code>
      * methods Assertion: returns correspondent object
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getClientSessionContext",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getClientSessionContext",
+        args = {}
+    )
     public void test_getClientSessionContext() throws NoSuchAlgorithmException {
         if (!DEFSupported) {
             fail(NotSupportMsg);
@@ -231,15 +219,12 @@
      * Test for <code>getInstance(String protocol)</code> method Assertion:
      * returns SSLContext object
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL_OK,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class}
+    )
     public void test_getInstanceLjava_lang_String01() throws NoSuchAlgorithmException {
         if (!DEFSupported) {
             fail(NotSupportMsg);
@@ -260,15 +245,12 @@
      * throws NullPointerException when protocol is null; throws
      * NoSuchAlgorithmException when protocol is not correct;
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL_OK,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class}
+    )
     public void test_getInstanceLjava_lang_String02() {
         try {
             SSLContext.getInstance(null);
@@ -291,15 +273,12 @@
      * method Assertion: throws IllegalArgumentException when provider is null
      * or empty
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL_OK,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class, String.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class, java.lang.String.class}
+    )
     public void test_getInstanceLjava_lang_StringLjava_lang_String01() throws NoSuchProviderException,
             NoSuchAlgorithmException {
         if (!DEFSupported) {
@@ -326,15 +305,12 @@
      * method Assertion: throws NullPointerException when protocol is null;
      * throws NoSuchAlgorithmException when protocol is not correct;
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL_OK,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class, String.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class, java.lang.String.class}
+    )
     public void test_getInstanceLjava_lang_StringLjava_lang_String02() throws NoSuchProviderException {
         if (!DEFSupported) {
             fail(NotSupportMsg);
@@ -361,15 +337,12 @@
      * method Assertion: throws NoSuchProviderException when provider has
      * invalid value
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL_OK,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class, String.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class, java.lang.String.class}
+    )
     public void test_getInstanceLjava_lang_StringLjava_lang_String03() throws NoSuchAlgorithmException {
         if (!DEFSupported) {
             fail(NotSupportMsg);
@@ -392,15 +365,12 @@
      * Test for <code>getInstance(String protocol, String provider)</code>
      * method Assertion: returns instance of SSLContext
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL_OK,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class, String.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class, java.lang.String.class}
+    )
     public void test_getInstanceLjava_lang_StringLjava_lang_String04() throws NoSuchAlgorithmException,
             NoSuchProviderException {
         if (!DEFSupported) {
@@ -424,15 +394,12 @@
      * Test for <code>getInstance(String protocol, Provider provider)</code>
      * method Assertion: throws IllegalArgumentException when provider is null
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL_OK,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class, Provider.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class, java.security.Provider.class}
+    )
     public void test_getInstanceLjava_lang_StringLjava_security_Provider01() throws NoSuchAlgorithmException {
         if (!DEFSupported) {
             fail(NotSupportMsg);
@@ -453,15 +420,12 @@
      * method Assertion: throws NullPointerException when protocol is null;
      * throws NoSuchAlgorithmException when protocol is not correct;
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL_OK,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class, Provider.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class, java.security.Provider.class}
+    )
     public void test_getInstanceLjava_lang_StringLjava_security_Provider02() {
         if (!DEFSupported) {
             fail(NotSupportMsg);
@@ -486,15 +450,12 @@
      * Test for <code>getInstance(String protocol, Provider provider)</code>
      * method Assertion: returns instance of SSLContext
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL_OK,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class, Provider.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class, java.security.Provider.class}
+    )
     public void test_getInstanceLjava_lang_StringLjava_security_Provider03() throws NoSuchAlgorithmException {
         if (!DEFSupported) {
             fail(NotSupportMsg);
@@ -518,15 +479,12 @@
      * @throws NoSuchProviderException 
      * @tests javax.net.ssl.SSLContext#getProtocol()
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getProtocol",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getProtocol",
+        args = {}
+    )
     public void test_getProtocol()
         throws NoSuchAlgorithmException, NoSuchProviderException {
         if (!DEFSupported) fail(NotSupportMsg);
@@ -554,15 +512,12 @@
      * @throws NoSuchProviderException 
      * @tests javax.net.ssl.SSLContext#getProvider()
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getProvider",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getProvider",
+        args = {}
+    )
     public void test_getProvider() 
         throws NoSuchAlgorithmException, NoSuchProviderException {
         if (!DEFSupported) fail(NotSupportMsg);
@@ -582,16 +537,13 @@
     /**
      * @tests javax.net.ssl.SSLContext#getServletSessionContext()
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getServerSessionContext",
-          methodArgs = {}
-        )
-    })
-    public void _test_getServletSessionContext() throws NoSuchAlgorithmException,
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getServerSessionContext",
+        args = {}
+    )
+    public void test_getServerSessionContext() throws NoSuchAlgorithmException,
         KeyManagementException, KeyStoreException,
         UnrecoverableKeyException {
         if (!DEFSupported) fail(NotSupportMsg);
@@ -606,12 +558,14 @@
         KeyManagerFactory kmf = KeyManagerFactory.getInstance(kAlg);
         kmf.init(null, new char[11]);
         TrustManagerFactory tmf = TrustManagerFactory.getInstance(tAlg);
-        tmf.init((KeyStore)null);
+        KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
+        tmf.init(ks);
         TrustManager[] tms = tmf.getTrustManagers();
         for (SSLContext sslCi : sslC) {
             sslCi.init(kmf.getKeyManagers(), tms, new SecureRandom());
             assertTrue("Server context is incorrectly instantiated",
                     sslCi.getServerSessionContext() instanceof SSLSessionContext);
+            assertNotNull("Null object returned", sslCi.getServerSessionContext());
         }
     }
 
@@ -622,16 +576,13 @@
      * methods Assertion: returns correspondent object
      * 
      */
-     @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getServerSocketFactory",
-          methodArgs = {}
-        )
-    })
-     public void _test_getServerSocketFactory() throws NoSuchAlgorithmException,
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getServerSocketFactory",
+        args = {}
+    )
+     public void test_getServerSocketFactory() throws NoSuchAlgorithmException,
             KeyManagementException, KeyStoreException,
             UnrecoverableKeyException {
         if (!DEFSupported) {
@@ -651,7 +602,12 @@
             return;
         }
         KeyManagerFactory kmf = KeyManagerFactory.getInstance(kAlg);
-        KeyStore ks = null;
+        KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
+        try {
+            ks.load(null, null);
+        } catch (Exception e) {
+            fail(e + " was thrown for method load(null, null)");
+        }
         kmf.init(ks, new char[10]);
         KeyManager[] kms = kmf.getKeyManagers();
         TrustManagerFactory tmf = TrustManagerFactory.getInstance(tAlg);
@@ -661,22 +617,20 @@
             sslC[i].init(kms, tms, new SecureRandom());
             assertTrue(sslC[i].getServerSocketFactory() instanceof SSLServerSocketFactory);
             assertTrue(sslC[i].getSocketFactory() instanceof SSLSocketFactory);
+            assertNotNull("Null object returned", sslC[i].getServerSocketFactory());
         }
     }
 
      /**
       * @tests javax.net.ssl.SSLContext#getSocketFactory()
       */
-     @TestInfo(
-       level = TestLevel.COMPLETE,
-       purpose = "",
-       targets = {
-         @TestTarget(
-           methodName = "getSocketFactory",
-           methodArgs = {}
-         )
-     })
-     public void _test_getSocketFactory() throws NoSuchAlgorithmException,
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getSocketFactory",
+        args = {}
+    )
+     public void test_getSocketFactory() throws NoSuchAlgorithmException,
          KeyManagementException, KeyStoreException,
          UnrecoverableKeyException {
          if (!DEFSupported) fail(NotSupportMsg);
@@ -691,12 +645,14 @@
          KeyManagerFactory kmf = KeyManagerFactory.getInstance(kAlg);
          kmf.init(null, new char[11]);
          TrustManagerFactory tmf = TrustManagerFactory.getInstance(tAlg);
-         tmf.init((KeyStore)null);
+         KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
+         tmf.init(ks);
          TrustManager[] tms = tmf.getTrustManagers();
          for (SSLContext sslCi : sslC) {
              sslCi.init(kmf.getKeyManagers(), tms, new SecureRandom());
              assertTrue("Socket factory is incorrectly instantiated",
                      sslCi.getSocketFactory() instanceof SSLSocketFactory);
+             assertNotNull("Null object returned", sslCi.getSocketFactory());
          }
      }
 
@@ -709,16 +665,13 @@
       *     init(javax.net.ssl.KeyManager[], javax.net.ssl.TrustManager[],
       *     java.security.SecureRandom)
       */
-     @TestInfo(
-       level = TestLevel.PARTIAL,
-       purpose = "KeyManagementException checking missed",
-       targets = {
-         @TestTarget(
-           methodName = "init",
-           methodArgs = {KeyManager[].class, TrustManager[].class, SecureRandom.class}
-         )
-     })
-     public void _test_init$Ljavax_net_ssl_KeyManager$Ljavax_net_ssl_TrustManagerLjava_security_SecureRandom()
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "init",
+        args = {javax.net.ssl.KeyManager[].class, javax.net.ssl.TrustManager[].class, java.security.SecureRandom.class}
+    )
+     public void test_init$Ljavax_net_ssl_KeyManager$Ljavax_net_ssl_TrustManagerLjava_security_SecureRandom()
          throws Exception {
          if (!DEFSupported) fail(NotSupportMsg);
          SSLContextSpi spi = new MySSLContextSpi();
@@ -732,27 +685,28 @@
          }
          
          try {
-             sslContext.init(null, null, new SecureRandom());
-
-             KeyManagerFactory kmf = KeyManagerFactory.getInstance(
-                     KeyManagerFactory.getDefaultAlgorithm());
-             KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
-             InputStream v1in = new FileInputStream(ClassLoader
-                     .getSystemClassLoader().getResource("keystore.jks").getFile());
-             char[] password = "password".toCharArray();
-             ks.load(v1in, password);
-             v1in.close();
-             kmf.init(ks, password);
-             KeyManager[] km = kmf.getKeyManagers();
-             sslContext.init(km, null, new SecureRandom());
-             
-             TrustManagerFactory tmf = TrustManagerFactory.getInstance(
-                     TrustManagerFactory.getDefaultAlgorithm());
-             tmf.init(ks);
-             TrustManager[] tm = tmf.getTrustManagers();
-             sslContext.init(null, tm, new SecureRandom());
+             sslContext.init(null, null, null);
+             fail("KeyManagementException wasn't thrown");
          } catch (KeyManagementException kme) {
-             fail("Unexpected KeyManagementException " + kme.toString());
+             //expected
+         }
+         
+         try {
+             String tAlg = TrustManagerFactory.getDefaultAlgorithm();
+             String kAlg = KeyManagerFactory.getDefaultAlgorithm();
+             if (tAlg == null)
+                 fail("TrustManagerFactory default algorithm is not defined");
+             if (kAlg == null)
+                 fail("KeyManagerFactory default algorithm is not defined");
+             KeyManagerFactory kmf = KeyManagerFactory.getInstance(kAlg);
+             kmf.init(null, new char[11]);
+             TrustManagerFactory tmf = TrustManagerFactory.getInstance(tAlg);
+             KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
+             tmf.init(ks);
+             TrustManager[] tms = tmf.getTrustManagers();
+             sslContext.init(kmf.getKeyManagers(), tms, new SecureRandom());
+         } catch (Exception e) {
+             System.out.println("EE = " + e);
          }
      }
 }
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/SSLContext2Test.java b/x-net/src/test/java/tests/api/javax/net/ssl/SSLContext2Test.java
index 8dd4c25..2ddb1ed 100644
--- a/x-net/src/test/java/tests/api/javax/net/ssl/SSLContext2Test.java
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/SSLContext2Test.java
@@ -18,9 +18,9 @@
 package tests.api.javax.net.ssl;
 
 import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestInfo;
+import dalvik.annotation.TestTargets;
 import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTarget;
+import dalvik.annotation.TestTargetNew;
 
 import java.security.KeyManagementException;
 import java.security.NoSuchAlgorithmException;
@@ -155,15 +155,12 @@
      * throws NoSuchAlgorithmException when protocol is not correct;
      * returns SSLContext object
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class}
+    )
     public void test_getInstanceLjava_lang_String() throws NoSuchAlgorithmException, 
             KeyManagementException {
         try {
@@ -202,15 +199,12 @@
      * throws NoSuchProviderException when provider is available;
      * returns SSLContext object
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class, String.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class, java.lang.String.class}
+    )
     public void test_getInstanceLjava_lang_StringLjava_lang_String() throws NoSuchAlgorithmException,
             NoSuchProviderException, IllegalArgumentException, 
             KeyManagementException {
@@ -276,15 +270,12 @@
      * throws IllegalArgumentException when provider is null;
      * returns SSLContext object
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class, Provider.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class, java.security.Provider.class}
+    )
     public void test_getInstanceLjava_lang_StringLjava_security_Provider()
         throws NoSuchAlgorithmException,
         IllegalArgumentException, KeyManagementException {
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/SSLContextSpiTest.java b/x-net/src/test/java/tests/api/javax/net/ssl/SSLContextSpiTest.java
index bc08e64..cf3123a 100644
--- a/x-net/src/test/java/tests/api/javax/net/ssl/SSLContextSpiTest.java
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/SSLContextSpiTest.java
@@ -5,7 +5,7 @@
  * 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
+ *     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,
@@ -13,115 +13,311 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package tests.api.javax.net.ssl;
 
 import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestInfo;
+import dalvik.annotation.TestTargets;
 import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTarget;
+import dalvik.annotation.TestTargetNew;
 
-import java.security.KeyManagementException;
-import java.security.SecureRandom;
-
-import javax.net.ssl.KeyManager;
+import javax.net.ssl.KeyManagerFactory;
 import javax.net.ssl.SSLContextSpi;
 import javax.net.ssl.SSLEngine;
 import javax.net.ssl.SSLServerSocketFactory;
 import javax.net.ssl.SSLSessionContext;
 import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.KeyManager;
 import javax.net.ssl.TrustManager;
+import javax.net.ssl.TrustManagerFactory;
+import java.security.KeyManagementException;
+
+import java.security.KeyStore;
+import java.security.SecureRandom;
+import java.security.Security;
 
 import junit.framework.TestCase;
 
+import org.apache.harmony.xnet.tests.support.SSLContextSpiImpl;
+
 @TestTargetClass(SSLContextSpi.class) 
 public class SSLContextSpiTest extends TestCase {
-
-    private class MockSSLContextSpi extends SSLContextSpi {
-        public MockSSLContextSpi() {
-            super();
-        }
-
-        /**
-         * @see javax.net.ssl.SSLContextSpi#engineCreateSSLEngine()
-         */
-        @Override
-        protected SSLEngine engineCreateSSLEngine() {
-            // it is a fake
-            return null;
-        }
-
-        /**
-         * @see javax.net.ssl.SSLContextSpi#engineCreateSSLEngine(java.lang.String, int)
-         */
-        @Override
-        protected SSLEngine engineCreateSSLEngine(String host, int port) {
-            // it is a fake
-            return null;
-        }
-
-        /**
-         * @see javax.net.ssl.SSLContextSpi#engineGetClientSessionContext()
-         */
-        @Override
-        protected SSLSessionContext engineGetClientSessionContext() {
-            // it is a fake
-            return null;
-        }
-
-        /**
-         * @see javax.net.ssl.SSLContextSpi#engineGetServerSessionContext()
-         */
-        @Override
-        protected SSLSessionContext engineGetServerSessionContext() {
-            // it is a fake
-            return null;
-        }
-
-        /**
-         * @see javax.net.ssl.SSLContextSpi#engineGetServerSocketFactory()
-         */
-        @Override
-        protected SSLServerSocketFactory engineGetServerSocketFactory() {
-            // it is a fake
-            return null;
-        }
-
-        /**
-         * @see javax.net.ssl.SSLContextSpi#engineGetSocketFactory()
-         */
-        @Override
-        protected SSLSocketFactory engineGetSocketFactory() {
-            // it is a fake
-            return null;
-        }
-
-        /**
-         * @see javax.net.ssl.SSLContextSpi#engineInit(javax.net.ssl.KeyManager[], javax.net.ssl.TrustManager[], java.security.SecureRandom)
-         */
-        @Override
-        protected void engineInit(KeyManager[] km, TrustManager[] tm, SecureRandom sr) throws KeyManagementException {
-            // it is a fake
-        }
-    }
     
     /**
      * @tests javax.net.ssl.SSLContextSpi#SSLContextSpi()
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "SSLContextSpi",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "SSLContextSpi",
+        args = {}
+    )
     public void test_Constructor() {
         try {
-            new MockSSLContextSpi();
+            SSLContextSpiImpl ssl = new SSLContextSpiImpl();
+            assertTrue(ssl instanceof SSLContextSpi);
         } catch (Exception e) {
             fail("Unexpected exception " + e.toString());
         }
     }
+    
+    /**
+     * @tests javax.net.ssl.SSLContextSpi#engineCreateSSLEngine()
+     * Verify exception when SSLContextSpi object wasn't initialiazed. 
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "engineCreateSSLEngine",
+        args = {}
+    )
+    public void test_engineCreateSSLEngine_01() {
+        SSLContextSpiImpl ssl = new SSLContextSpiImpl();
+        try {
+            SSLEngine sleng = ssl.engineCreateSSLEngine();
+            fail("RuntimeException wasn't thrown");
+        } catch (RuntimeException re) {
+            String str = re.getMessage();
+            if (!str.equals("Not initialiazed")) 
+                fail("Incorrect exception message: " + str);
+        } catch (Exception e) {
+            fail("Incorrect exception " + e + " was thrown");
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLContextSpi#engineCreateSSLEngine(String host, int port)
+     * Verify exception when SSLContextSpi object wasn't initialiazed.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "engineCreateSSLEngine",
+        args = {java.lang.String.class, int.class}
+    )
+    public void test_engineCreateSSLEngine_02() {
+        int[] invalid_port = {Integer.MIN_VALUE, -65535, -1, 65536, Integer.MAX_VALUE};
+        SSLContextSpiImpl ssl = new SSLContextSpiImpl();
+        try {
+            SSLEngine sleng = ssl.engineCreateSSLEngine("localhost", 1080);
+            fail("RuntimeException wasn't thrown");
+        } catch (RuntimeException re) {
+            String str = re.getMessage();
+            if (!str.equals("Not initialiazed")) 
+                fail("Incorrect exception message: " + str);
+        } catch (Exception e) {
+            fail("Incorrect exception " + e + " was thrown");
+        }
+        
+        for (int i = 0; i < invalid_port.length; i++) {
+            try {
+                SSLEngine sleng = ssl.engineCreateSSLEngine("localhost", invalid_port[i]);
+                fail("IllegalArgumentException wasn't thrown");
+            } catch (IllegalArgumentException iae) {
+                //expected
+            }            
+        }
+    }
+    
+    /**
+     * @tests SSLContextSpi#engineGetClientSessionContext()
+     * @tests SSLContextSpi#engineGetServerSessionContext()
+     * @tests SSLContextSpi#engineGetServerSocketFactory()
+     * @tests SSLContextSpi#engineGetSocketFactory()
+     * Verify exception when SSLContextSpi object wasn't initialiazed.
+     */
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.PARTIAL_COMPLETE,
+            notes = "",
+            method = "engineGetClientSessionContext",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.PARTIAL_COMPLETE,
+            notes = "",
+            method = "engineGetServerSessionContext",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.PARTIAL_COMPLETE,
+            notes = "",
+            method = "engineGetServerSocketFactory",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.PARTIAL_COMPLETE,
+            notes = "",
+            method = "engineGetSocketFactory",
+            args = {}
+        )
+    })
+    public void test_commonTest_01() {
+        SSLContextSpiImpl ssl = new SSLContextSpiImpl();
+        
+        try {
+            SSLSessionContext slsc = ssl.engineGetClientSessionContext();
+            fail("RuntimeException wasn't thrown");
+        } catch (RuntimeException re) {
+            String str = re.getMessage();
+            if (!str.equals("Not initialiazed")) 
+                fail("Incorrect exception message: " + str);
+        } catch (Exception e) {
+            fail("Incorrect exception " + e + " was thrown");
+        }
+        
+        try {
+            SSLSessionContext slsc = ssl.engineGetServerSessionContext();
+            fail("RuntimeException wasn't thrown");
+        } catch (RuntimeException re) {
+            String str = re.getMessage();
+            if (!str.equals("Not initialiazed")) 
+                fail("Incorrect exception message: " + str);
+        } catch (Exception e) {
+            fail("Incorrect exception " + e + " was thrown");
+        }
+        
+        try {
+            SSLServerSocketFactory sssf = ssl.engineGetServerSocketFactory();
+            fail("RuntimeException wasn't thrown");
+        } catch (RuntimeException re) {
+            String str = re.getMessage();
+            if (!str.equals("Not initialiazed")) 
+                fail("Incorrect exception message: " + str);
+        } catch (Exception e) {
+            fail("Incorrect exception " + e + " was thrown");
+        }
+        
+        try {
+            SSLSocketFactory ssf = ssl.engineGetSocketFactory();
+            fail("RuntimeException wasn't thrown");
+        } catch (RuntimeException re) {
+            String str = re.getMessage();
+            if (!str.equals("Not initialiazed")) 
+                fail("Incorrect exception message: " + str);
+        } catch (Exception e) {
+            fail("Incorrect exception " + e + " was thrown");
+        }        
+    }
+    
+    /**
+     * @tests SSLContextSpi#engineInit(KeyManager[] km, TrustManager[] tm, SecureRandom sr)
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "engineInit",
+        args = {javax.net.ssl.KeyManager[].class, javax.net.ssl.TrustManager[].class, java.security.SecureRandom.class}
+    )
+    public void test_engineInit() {
+        SSLContextSpiImpl ssl = new SSLContextSpiImpl();
+        String defaultAlgorithm = Security.getProperty("ssl.KeyManagerFactory.algorithm");
+        try {
+            KeyManagerFactory kmf = KeyManagerFactory.getInstance(defaultAlgorithm);
+            char[] pass = "password".toCharArray();
+            kmf.init(null, pass);
+            KeyManager[] km = kmf.getKeyManagers();
+            defaultAlgorithm = Security.getProperty("ssl.TrustManagerFactory.algorithm");
+            TrustManagerFactory trustMF = TrustManagerFactory.getInstance(defaultAlgorithm);
+            KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
+            ks.load(null, null);
+            trustMF.init(ks);
+            TrustManager[] tm = trustMF.getTrustManagers();
+            SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
+            try {
+                ssl.engineInit(km, tm, sr);
+            } catch (KeyManagementException kme) {
+                fail(kme + " was throw for engineInit method");
+            }
+            try {
+                ssl.engineInit(km, tm, null);
+                fail("KeyManagementException wasn't thrown");
+            } catch (KeyManagementException kme) {
+                //expected
+            }
+        } catch (Exception ex) {
+            fail(ex + " unexpected exception");
+        }
+    }
+    
+    /**
+     * @tests SSLContextSpi#engineCreateSSLEngine()
+     * @tests SSLContextSpi#engineCreateSSLEngine(String host, int port)
+     * @tests SSLContextSpi#engineGetClientSessionContext()
+     * @tests SSLContextSpi#engineGetServerSessionContext()
+     * @tests SSLContextSpi#engineGetServerSocketFactory()
+     * @tests SSLContextSpi#engineGetSocketFactory()
+     */
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.PARTIAL_COMPLETE,
+            notes = "",
+            method = "engineCreateSSLEngine",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.PARTIAL_COMPLETE,
+            notes = "",
+            method = "engineCreateSSLEngine",
+            args = {java.lang.String.class, int.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.PARTIAL_COMPLETE,
+            notes = "",
+            method = "engineGetClientSessionContext",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.PARTIAL_COMPLETE,
+            notes = "",
+            method = "engineGetServerSessionContext",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.PARTIAL_COMPLETE,
+            notes = "",
+            method = "engineGetServerSocketFactory",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.PARTIAL_COMPLETE,
+            notes = "",
+            method = "engineGetSocketFactory",
+            args = {}
+        )
+    })
+    public void test_commonTest_02() {
+        SSLContextSpiImpl ssl = new SSLContextSpiImpl();
+        String defaultAlgorithm = Security.getProperty("ssl.KeyManagerFactory.algorithm");
+        try {
+            KeyManagerFactory kmf = KeyManagerFactory.getInstance(defaultAlgorithm);
+            char[] pass = "password".toCharArray();
+            kmf.init(null, pass);
+            KeyManager[] km = kmf.getKeyManagers();
+            defaultAlgorithm = Security.getProperty("ssl.TrustManagerFactory.algorithm");
+            TrustManagerFactory trustMF = TrustManagerFactory.getInstance(defaultAlgorithm);
+            KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
+            ks.load(null, null);
+            trustMF.init(ks);
+            TrustManager[] tm = trustMF.getTrustManagers();
+            SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
+            ssl.engineInit(km, tm, sr);
+        } catch (Exception ex) {
+            fail(ex + " unexpected exception");
+        }
+        
+        try {
+            assertNotNull("Subtest_01: Object is NULL", ssl.engineCreateSSLEngine());
+            SSLEngine sleng = ssl.engineCreateSSLEngine("localhost", 1080);
+            assertNotNull("Subtest_02: Object is NULL", sleng);
+            assertEquals(sleng.getPeerPort(), 1080);
+            assertEquals(sleng.getPeerHost(), "localhost");
+            assertNull("Subtest_03: Object not NULL", ssl.engineGetClientSessionContext());
+            assertNull("Subtest_04: Object not NULL", ssl.engineGetServerSessionContext());
+            assertNull("Subtest_05: Object not NULL", ssl.engineGetServerSocketFactory());
+            assertNull("Subtest_06: Object not NULL", ssl.engineGetSocketFactory());
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+    }
+    
 }
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/SSLEngineResultHandshakeStatusTest.java b/x-net/src/test/java/tests/api/javax/net/ssl/SSLEngineResultHandshakeStatusTest.java
new file mode 100644
index 0000000..22af271
--- /dev/null
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/SSLEngineResultHandshakeStatusTest.java
@@ -0,0 +1,100 @@
+/*
+ *  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 tests.api.javax.net.ssl;
+
+import dalvik.annotation.TestTargetClass;
+import dalvik.annotation.TestLevel;
+import dalvik.annotation.TestTargetNew;
+
+import javax.net.ssl.SSLEngineResult;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for SSLEngineResult.Status class
+ * 
+ */
+@TestTargetClass(SSLEngineResult.HandshakeStatus.class) 
+public class SSLEngineResultHandshakeStatusTest extends TestCase {
+    
+    /**
+     * Test for <code> SSLEngineResult.HandshakeStatus.values() </code>
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "values",
+        args = {}
+    )
+    public void test_SSLEngineResultHandshakeStatus_values() {
+        String[] str = {"NOT_HANDSHAKING", "FINISHED", "NEED_TASK", "NEED_WRAP", "NEED_UNWRAP"};
+        SSLEngineResult.HandshakeStatus[] enS = SSLEngineResult.HandshakeStatus.values();
+        if (enS.length == str.length) {
+            for (int i = 0; i < enS.length; i++) {
+                //System.out.println("enS[" + i + "] = " + enS[i]);
+                assertEquals("Incorrect Status", enS[i].toString(), str[i]);
+            }
+        } else {
+            fail("Incorrect number of enum constant was returned");
+        }
+    }
+    
+    /**
+     * Test for <code> SSLEngineResult.HandshakeStatus.valueOf(String name) </code>
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "valueOf",
+        args = {String.class}
+    )
+    public void test_SSLEngineResultStatus_valueOf() {
+        String[] str = {"FINISHED", "NEED_TASK", "NEED_UNWRAP", "NEED_WRAP", "NOT_HANDSHAKING"};
+        String[] str_invalid = {"", "FINISHED1", "NEED_task", "NEED_UN",
+                "NEED_WRAP_WRAP", "not_HANDSHAKING", "Bad string for verification valueOf method"};
+        SSLEngineResult.HandshakeStatus enS;
+        
+        //Correct parameter
+        for (int i = 0; i < str.length; i++) {
+            try {
+                enS = SSLEngineResult.HandshakeStatus.valueOf(str[i]);
+                assertEquals("Incorrect Status", enS.toString(), str[i]);
+            } catch (Exception e) {
+                fail("Unexpected exception " + e + " was thrown for " + str[i]);
+            }
+        }
+        
+       //Incorrect parameter
+        for (int i = 0; i < str_invalid.length; i++) {
+            try {
+                enS = SSLEngineResult.HandshakeStatus.valueOf(str_invalid[i]);
+                fail("IllegalArgumentException should be thrown for " + str_invalid[i]);
+            } catch (IllegalArgumentException iae) {
+                //expected
+            }
+        }
+        
+        //Null parameter
+        try {
+            enS = SSLEngineResult.HandshakeStatus.valueOf(null);
+            fail("NullPointerException/IllegalArgumentException should be thrown for NULL parameter");
+        } catch (NullPointerException npe) {
+            //expected
+        } catch (IllegalArgumentException iae) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/SSLEngineResultStatusTest.java b/x-net/src/test/java/tests/api/javax/net/ssl/SSLEngineResultStatusTest.java
new file mode 100644
index 0000000..652b384
--- /dev/null
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/SSLEngineResultStatusTest.java
@@ -0,0 +1,107 @@
+/*
+ *  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 tests.api.javax.net.ssl;
+
+import dalvik.annotation.TestTargetClass;
+import dalvik.annotation.TestLevel;
+import dalvik.annotation.TestTargetNew;
+
+import javax.net.ssl.SSLEngineResult;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for SSLEngineResult.Status class
+ * 
+ */
+@TestTargetClass(SSLEngineResult.Status.class) 
+public class SSLEngineResultStatusTest extends TestCase {
+    
+    /**
+     * Test for <code> SSLEngineResult.Status.values() </code>
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "values",
+        args = {}
+    )
+    public void test_SSLEngineResultStatus_values() {
+        boolean flag = false;
+        String[] str = {"BUFFER_OVERFLOW", "BUFFER_UNDERFLOW", "CLOSED", "OK"};
+        SSLEngineResult.Status[] enS = SSLEngineResult.Status.values();
+        if (enS.length == str.length) {
+            for (int i = 0; i < enS.length; i++) {
+                flag = false;
+                for (int j = 0; j < str.length; j++) {
+                    if (enS[i].toString() == str[j]) {
+                        flag = true;
+                        break;
+                    }
+                }
+            }
+            assertTrue("Incorrect Status", flag);
+        } else {
+            fail("Incorrect number of enum constant was returned");
+        }
+    }
+    
+    /**
+     * Test for <code> SSLEngineResult.Status.valueOf(String name) </code>
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "valueOf",
+        args = {String.class}
+    )
+    public void test_SSLEngineResultStatus_valueOf() {
+        String[] str = {"BUFFER_OVERFLOW", "BUFFER_UNDERFLOW", "CLOSED", "OK"};
+        String[] str_invalid = {"", "OK1", "BUFFER_overflow", "BUFFER_UND",
+                "CLOSED_CLOSED", "Bad string for verification valueOf method"};
+        SSLEngineResult.Status enS;
+        
+        //Correct parameter
+        for (int i = 0; i < str.length; i++) {
+            try {
+                enS = SSLEngineResult.Status.valueOf(str[i]);
+                assertEquals("Incorrect Status", enS.toString(), str[i]);
+            } catch (Exception e) {
+                fail("Unexpected exception " + e + " was thrown for " + str[i]);
+            }
+        }
+        
+       //Incorrect parameter
+        for (int i = 0; i < str_invalid.length; i++) {
+            try {
+                enS = SSLEngineResult.Status.valueOf(str_invalid[i]);
+                fail("IllegalArgumentException should be thrown for " + str_invalid[i]);
+            } catch (IllegalArgumentException iae) {
+                //expected
+            }
+        }
+        
+        //Null parameter
+        try {
+            enS = SSLEngineResult.Status.valueOf(null);
+            fail("NullPointerException/IllegalArgumentException should be thrown for NULL parameter");
+        } catch (NullPointerException npe) {
+            //expected
+        } catch (IllegalArgumentException iae) {
+        }
+    }
+}
\ No newline at end of file
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/SSLEngineResultTest.java b/x-net/src/test/java/tests/api/javax/net/ssl/SSLEngineResultTest.java
index dbffed6..4878df8 100644
--- a/x-net/src/test/java/tests/api/javax/net/ssl/SSLEngineResultTest.java
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/SSLEngineResultTest.java
@@ -18,9 +18,9 @@
 package tests.api.javax.net.ssl;
 
 import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestInfo;
+import dalvik.annotation.TestTargets;
 import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTarget;
+import dalvik.annotation.TestTargetNew;
 
 import javax.net.ssl.SSLEngineResult;
 import junit.framework.TestCase;
@@ -50,15 +50,12 @@
      * is null  
      *
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "Exception cases were tested only",
-      targets = {
-        @TestTarget(
-          methodName = "SSLEngineResult",
-          methodArgs = {SSLEngineResult.Status.class, SSLEngineResult.HandshakeStatus.class, int.class, int.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "SSLEngineResult",
+        args = {javax.net.ssl.SSLEngineResult.Status.class, javax.net.ssl.SSLEngineResult.HandshakeStatus.class, int.class, int.class}
+    )
     public void test_ConstructorLjavax_net_ssl_SSLEngineResult_StatusLjavax_net_ssl_SSLEngineResult_HandshakeStatusII() {
     
         int[] neg = { -1, -10, -1000, Integer.MIN_VALUE,
@@ -91,20 +88,27 @@
             } catch (IllegalArgumentException e) {
             }
         }
+        
+        try {
+            SSLEngineResult res = new SSLEngineResult(SSLEngineResult.Status.BUFFER_OVERFLOW,
+                    SSLEngineResult.HandshakeStatus.FINISHED, 1, 2);
+            assertNotNull("Null object", res);
+            assertEquals(1, res.bytesConsumed());
+            assertEquals(2, res.bytesProduced());
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e);
+        }
     }
     
     /**
      * Test for <code>bytesConsumed()</code> method
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "bytesConsumed",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "bytesConsumed",
+        args = {}
+    )
     public void test_bytesConsumed() {
         int[] pos = { 0, 1, 1000, Integer.MAX_VALUE, (Integer.MAX_VALUE - 1) };
         SSLEngineResult.Status [] enS =
@@ -128,15 +132,12 @@
     /**
      * Test for <code>bytesProduced()</code> method
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "bytesProduced",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "bytesProduced",
+        args = {}
+    )
     public void test_bytesProduced() {
         int[] pos = { 0, 1, 1000, Integer.MAX_VALUE, (Integer.MAX_VALUE - 1) };
         SSLEngineResult.Status [] enS =
@@ -160,15 +161,12 @@
     /**
      * Test for <code>getHandshakeStatus()</code> method
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getHandshakeStatus",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getHandshakeStatus",
+        args = {}
+    )
     public void test_getHandshakeStatus() {
         int[] pos = { 0, 1, 1000, Integer.MAX_VALUE, (Integer.MAX_VALUE - 1) };
         SSLEngineResult.Status [] enS =
@@ -192,15 +190,12 @@
     /**
      * Test for <code>getStatus()</code> method
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getStatus",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getStatus",
+        args = {}
+    )
     public void test_getStatus() {
         int[] pos = { 0, 1, 1000, Integer.MAX_VALUE, (Integer.MAX_VALUE - 1) };
         SSLEngineResult.Status [] enS =
@@ -224,15 +219,12 @@
     /**
      * Test for <code>toString()</code> method
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "toString",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "toString",
+        args = {}
+    )
     public void test_toString() {
         int[] pos = { 0, 1, 1000, Integer.MAX_VALUE, (Integer.MAX_VALUE - 1) };
         SSLEngineResult.Status [] enS =
@@ -253,135 +245,6 @@
         }
     }
 
-    /**
-     * Test for <code>SSLEngineResult.Status.values()</code> method
-     */
-    @TestInfo(
-      level = TestLevel.TODO,
-      purpose = "Status class includes values() method.",
-      targets = {
-        @TestTarget(
-          methodName = "values",
-          methodArgs = {}
-        )
-    })
-    public void test_SSLEngineResult_Status01() {
-        SSLEngineResult.Status [] enS = SSLEngineResult.Status.values();
-        assertTrue("Incorrect array of Status objects", enS.length > 0);
-        assertTrue("OK object does not define", findEl(enS,
-                SSLEngineResult.Status.OK));
-        assertTrue("CLOSED object does not define", findEl(enS,
-                SSLEngineResult.Status.CLOSED));
-        assertTrue("BUFFER_OVERFLOW object does not define", findEl(enS,
-                SSLEngineResult.Status.BUFFER_OVERFLOW));
-        assertTrue("BUFFER_UNDERFLOW object does not define", findEl(enS,
-                SSLEngineResult.Status.BUFFER_UNDERFLOW));
-    }
-    
-    /**
-     * Test for <code>SSLEngineResult.Status.valueOf(String name)</code> method
-     * Assertion: 
-     * throws IllegalArgumentException when there is no constan with specified
-     * name 
-     */
-    @TestInfo(
-      level = TestLevel.TODO,
-      purpose = "Status class includes valueOf method. Null parameter checking missed.",
-      targets = {
-        @TestTarget(
-          methodName = "valueOf",
-          methodArgs = {String.class}
-        )
-    })
-    public void test_SSLEngineResult_Status02() {
-        String [] invalid = {"", "OK1", "BUFFER_overflow", "BUFFER_UND",
-                "CLOSED_CLOSED", "Bad string for verification valueOf method"
-        };
-        assertEquals(SSLEngineResult.Status.valueOf("BUFFER_OVERFLOW"),
-                SSLEngineResult.Status.BUFFER_OVERFLOW);
-        assertEquals(SSLEngineResult.Status.valueOf("BUFFER_UNDERFLOW"),
-                SSLEngineResult.Status.BUFFER_UNDERFLOW);
-        assertEquals(SSLEngineResult.Status.valueOf("CLOSED"),
-                SSLEngineResult.Status.CLOSED);
-        assertEquals(SSLEngineResult.Status.valueOf("OK"),
-                SSLEngineResult.Status.OK);
-        for (int i = 0; i < invalid.length; i++) {
-            try {
-                SSLEngineResult.Status.valueOf(invalid[i]);
-                fail("IllegalArgumentException must be thrown for name: " + invalid[i]);
-            } catch (IllegalArgumentException e) {                
-            }
-        }                 
-    }
-    
-    /**
-     * Test for <code>SSLEngineResult.HandshakeStatus.values()</code> method
-     */
-    @TestInfo(
-      level = TestLevel.TODO,
-      purpose = "HandshakeStatus class includes values method.",
-      targets = {
-        @TestTarget(
-          methodName = "values",
-          methodArgs = {}
-        )
-    })
-    public void test_SSLEngineResult_HandshakeStatus01() {
-        SSLEngineResult.HandshakeStatus [] enHS = SSLEngineResult.HandshakeStatus
-                .values();
-        assertTrue("Incorrect array of HandshakeStatus objects",
-                enHS.length > 0);
-        assertTrue("FINISHED object does not define", findEl(enHS,
-                SSLEngineResult.HandshakeStatus.FINISHED));
-        assertTrue("NEED_UNWRAP object does not define", findEl(enHS,
-                SSLEngineResult.HandshakeStatus.NEED_UNWRAP));
-        assertTrue("NEED_WRAP object does not define", findEl(enHS,
-                SSLEngineResult.HandshakeStatus.NEED_WRAP));
-        assertTrue("NEED_TASK object does not define", findEl(enHS,
-                SSLEngineResult.HandshakeStatus.NEED_TASK));
-        assertTrue("NOT_HANDSHAKING object does not define", findEl(enHS,
-                SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING));
-    }
-    
-    /**
-     * Test for <code>SSLEngineResult.HandshakeStatus.valueOf(String name)</code> method
-     * Assertion: 
-     * throws IllegalArgumentException when there is no constan with specified
-     * name 
-     */
-
-    @TestInfo(
-      level = TestLevel.TODO,
-      purpose = "HandshakeStatus class includes valueOf method. Null parameter checking missed.",
-      targets = {
-        @TestTarget(
-          methodName = "valueOf",
-          methodArgs = {String.class}
-        )
-    })
-    public void test_SSLEngineResult_HandshakeStatus02() {
-        String [] invalid = {"", "FINISHED1", "NEED_task", "NEED_UN",
-                "NEED_WRAP_WRAP", "not_HANDSHAKING", "Bad string for verification valueOf method"
-        };
-        assertEquals(SSLEngineResult.HandshakeStatus.valueOf("NOT_HANDSHAKING"),
-                SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING);
-        assertEquals(SSLEngineResult.HandshakeStatus.valueOf("NEED_WRAP"),
-                SSLEngineResult.HandshakeStatus.NEED_WRAP);
-        assertEquals(SSLEngineResult.HandshakeStatus.valueOf("NEED_UNWRAP"),
-                SSLEngineResult.HandshakeStatus.NEED_UNWRAP);
-        assertEquals(SSLEngineResult.HandshakeStatus.valueOf("FINISHED"),
-                SSLEngineResult.HandshakeStatus.FINISHED);
-        assertEquals(SSLEngineResult.HandshakeStatus.valueOf("NEED_TASK"),
-                SSLEngineResult.HandshakeStatus.NEED_TASK);
-        for (int i = 0; i < invalid.length; i++) {
-            try {
-                SSLEngineResult.HandshakeStatus.valueOf(invalid[i]);
-                fail("IllegalArgumentException must be thrown for name: " + invalid[i]);
-            } catch (IllegalArgumentException e) {                
-            }
-        }
-    } 
-    
     private boolean findEl(Object[] arr, Object el) {
         boolean ok = false;
         for (int i = 0; i < arr.length; i++) {
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/SSLEngineTest.java b/x-net/src/test/java/tests/api/javax/net/ssl/SSLEngineTest.java
index 8368391..94e384d 100644
--- a/x-net/src/test/java/tests/api/javax/net/ssl/SSLEngineTest.java
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/SSLEngineTest.java
@@ -18,9 +18,10 @@
 package tests.api.javax.net.ssl;
 
 import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestInfo;
+import dalvik.annotation.TestTargets;
 import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTarget;
+import dalvik.annotation.TestTargetNew;
+import dalvik.annotation.AndroidOnly;
 
 import java.nio.ByteBuffer;
 
@@ -28,11 +29,11 @@
 import javax.net.ssl.SSLException;
 import javax.net.ssl.SSLSession;
 import javax.net.ssl.SSLEngineResult;
+import java.nio.ReadOnlyBufferException;
 
 import junit.framework.TestCase;
 
 
-
 /**
  * Tests for SSLEngine class
  * 
@@ -48,15 +49,12 @@
      * Test for <code>SSLEngine()</code> constructor Assertion: creates
      * SSLEngine object with null host and -1 port
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "SSLEngine",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "SSLEngine",
+        args = {}
+    )
     public void test_Constructor() {
         SSLEngine e = new mySSLEngine();
         assertNull(e.getPeerHost());
@@ -69,15 +67,12 @@
     /**
      * Test for <code>SSLEngine(String host, int port)</code> constructor
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL_OK,
-      purpose = "Verification with incorrect parameters missed",
-      targets = {
-        @TestTarget(
-          methodName = "SSLEngine",
-          methodArgs = {String.class, int.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "Verification with incorrect parameters missed",
+        method = "SSLEngine",
+        args = {java.lang.String.class, int.class}
+    )
     public void test_ConstructorLjava_lang_StringI01() throws SSLException {
         int port = 1010;
         SSLEngine e = new mySSLEngine(null, port);
@@ -92,15 +87,12 @@
     /**
      * Test for <code>SSLEngine(String host, int port)</code> constructor
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL_OK,
-      purpose = "Verification with incorrect parameters missed",
-      targets = {
-        @TestTarget(
-          methodName = "SSLEngine",
-          methodArgs = {String.class, int.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "Verification with incorrect parameters missed",
+        method = "SSLEngine",
+        args = {java.lang.String.class, int.class}
+    )
     public void test_ConstructorLjava_lang_StringI02() {
         String host = "new host";
         int port = 8080;
@@ -117,34 +109,28 @@
     /**
      * Test for <code>getPeerHost()</code> method
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "Verification of real host name missed",
-      targets = {
-        @TestTarget(
-          methodName = "getPeerHost",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getPeerHost",
+        args = {}
+    )
     public void test_getPeerHost() {
         SSLEngine e = new mySSLEngine();
         assertNull(e.getPeerHost());
         e = new mySSLEngine("www.fortify.net", 80);
-        assertEquals("Incorrect host name",    "www.fortify.net", e.getPeerHost());
+        assertEquals("Incorrect host name", "www.fortify.net", e.getPeerHost());
     }
     
     /**
      * Test for <code>getPeerPort()</code> method
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "Verification of real port number missed",
-      targets = {
-        @TestTarget(
-          methodName = "getPeerPort",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getPeerPort",
+        args = {}
+    )
     public void test_getPeerPort() {
         SSLEngine e = new mySSLEngine();
         assertEquals("Incorrect default value of peer port",
@@ -154,366 +140,1454 @@
     }
 
     /**
-     * Test for <code>wrap(ByteBuffer src, ByteBuffer dst)</code> method
-     * Assertions: 
-     * throws IllegalArgumentException when src or dst is null 
-     * throws ReadOnlyBufferException when dst is ReadOnly byte buffer
-     * 
-     * Check that implementation behavior follows RI:
-     * jdk 1.5 does not throw IllegalArgumentException when parameters are null
-     * and does not throw ReadOnlyBufferException if dst is read only byte buffer
+     * @tests javax.net.ssl.SSLEngine#getSupportedProtocols()
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "IllegalStateException checking missed",
-      targets = {
-        @TestTarget(
-          methodName = "wrap",
-          methodArgs = {ByteBuffer.class, ByteBuffer.class}
-        )
-    })
-    public void test_wrapLjava_nio_ByteBufferLjava_nio_ByteBuffer01() throws SSLException {
-        String host = "new host";
-        int port = 8080;
-        ByteBuffer bbN = null;
-        ByteBuffer bb = ByteBuffer.allocate(10);
-        SSLEngine e = new mySSLEngine(host, port);
-
-        e.wrap(bbN, bb);
-        e.wrap(bb, bbN);
-
-        ByteBuffer roBb = bb.asReadOnlyBuffer();
-        assertTrue("Not read only byte buffer", roBb.isReadOnly());
-        e.wrap(bb, roBb);
-
-    }
-
-    /**
-     * Test for <code>wrap(ByteBuffer src, ByteBuffer dst)</code> method
-     * 
-     * Assertion: encodes a buffer data into network data.
-     *  
-     */
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "IllegalStateException checking missed",
-      targets = {
-        @TestTarget(
-          methodName = "wrap",
-          methodArgs = {ByteBuffer.class, ByteBuffer.class}
-        )
-    })
-    public void test_wrapLjava_nio_ByteBufferLjava_nio_ByteBuffer02() throws SSLException {
-        String host = "new host";
-        int port = 8080;
-        ByteBuffer bb = ByteBuffer.allocate(10);
-        SSLEngine e = new mySSLEngine(host, port);
-        
-        SSLEngineResult res = e.wrap(bb, ByteBuffer.allocate(10));
-        assertEquals(10, res.bytesConsumed());
-        assertEquals(20, res.bytesProduced());
-    }
-    
-    /**
-     * Test for <code>wrap(ByteBuffer[] srcs, ByteBuffer dst)</code> method
-     * 
-     * Assertions: throws IllegalArgumentException when srcs or dst is null or
-     * srcs contains null byte buffer; throws ReadOnlyBufferException when dst
-     * is read only byte buffer
-     * 
-     * Check that implementation behavior follows RI:
-     * jdk 1.5 does not throw IllegalArgumentException when dst is null or
-     * if srcs contains null elements It does not throw ReadOnlyBufferException
-     * for read only dst
-     */
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "IllegalStateException checking missed",
-      targets = {
-        @TestTarget(
-          methodName = "wrap",
-          methodArgs = {ByteBuffer[].class, ByteBuffer.class}
-        )
-    })
-    public void test_wrap$Ljava_nio_ByteBufferLjava_nio_ByteBuffer01() throws SSLException {
-        String host = "new host";
-        int port = 8080;
-        ByteBuffer[] bbNA = null;
-        ByteBuffer[] bbA = { null, ByteBuffer.allocate(10), null };
-
-        ByteBuffer bb = ByteBuffer.allocate(10);
-        ByteBuffer bbN = null;
-        SSLEngine e = new mySSLEngine(host, port);
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getSupportedProtocols",
+        args = {}
+    )
+    public void test_getSupportedProtocols() {
+        mySSLEngine sse = new mySSLEngine();
         try {
-            e.wrap(bbNA, bb);
-            fail("IllegalArgumentException must be thrown for null srcs byte buffer array");
-        } catch (IllegalArgumentException ex) {
+            String[] res = sse.getSupportedProtocols();
+            assertNotNull(res);
+            assertEquals(res.length, 0);
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex);
         }
-
-        e.wrap(bbA, bb);
-        e.wrap(bbA, bbN);
-
-        ByteBuffer roBb = bb.asReadOnlyBuffer();
-        bbA[0] = ByteBuffer.allocate(100);
-        bbA[2] = ByteBuffer.allocate(20);
-        assertTrue("Not read only byte buffer", roBb.isReadOnly());
-
-        e.wrap(bbA, roBb);
-
-    }
-
-    /**
-     * Test for <code>wrap(ByteBuffer[] srcs, ByteBuffer dst)</code> method
-     * 
-     * Assertion: encodes datas from buffers into network data.
-     */
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "IllegalStateException checking missed",
-      targets = {
-        @TestTarget(
-          methodName = "wrap",
-          methodArgs = {ByteBuffer[].class, ByteBuffer.class}
-        )
-    })
-    public void test_wrap$Ljava_nio_ByteBufferLjava_nio_ByteBuffer02() throws SSLException {
-        String host = "new host";
-        int port = 8080;
-
-        ByteBuffer bb = ByteBuffer.allocate(10);
-        ByteBuffer[] bbA = { ByteBuffer.allocate(5), ByteBuffer.allocate(10), ByteBuffer.allocate(5) };
-
-        SSLEngine e = new mySSLEngine(host, port);
-
-        SSLEngineResult res = e.wrap(bbA, bb);
-        assertEquals(10, res.bytesConsumed());
-        assertEquals(20, res.bytesProduced());
     }
     
     /**
-     * Test for <code>wrap(ByteBuffer src, ByteBuffer dst)</code> and
-     * <code>wrap(ByteBuffer[] srcs, ByteBuffer dst)</code> methods
-     * 
-     * Assertion: these methods throw SSLException
+     * @tests javax.net.ssl.SSLEngine#setEnabledProtocols(String[] protocols)
+     * @tests javax.net.ssl.SSLEngine#getEnabledProtocols()
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "IllegalStateException checking missed",
-      targets = {
-        @TestTarget(
-          methodName = "wrap",
-          methodArgs = {ByteBuffer.class, ByteBuffer.class}
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "getEnabledProtocols",
+            args = {}
         ),
-        @TestTarget(
-          methodName = "wrap",
-          methodArgs = {ByteBuffer[].class, ByteBuffer.class}
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "setEnabledProtocols",
+            args = {String[].class}
         )
-
     })
-    public void test_wrap() throws SSLException {
-        String host = "new host";
-        int port = 8080;
+    public void test_EnabledProtocols() {
+        mySSLEngine sse = new mySSLEngine();
+        String[] pr = {"Protocil_01", "Protocol_02"};
+        try {
+            sse.setEnabledProtocols(pr);
+            String[] res = sse.getEnabledProtocols();
+            assertNotNull("Null array was returned", res);
+            assertEquals("Incorrect array length", res.length, pr.length);
+            assertEquals("Incorrect array was returned", res, pr);
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex);
+        }
+        try {
+            sse.setEnabledProtocols(null);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iae) {
+            //expected
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#getSupportedCipherSuites()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getSupportedCipherSuites",
+        args = {}
+    )
+    public void test_getSupportedCipherSuites() {
+        mySSLEngine sse = new mySSLEngine();
+        try {
+            String[] res = sse.getSupportedCipherSuites();
+            assertNotNull(res);
+            assertEquals(res.length, 0);
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#setEnabledCipherSuites(String[] suites)
+     * @tests javax.net.ssl.SSLEngine#getEnabledCipherSuites()
+     */
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "setEnabledCipherSuites",
+            args = {String[].class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "getEnabledCipherSuites",
+            args = {}
+        )
+    })
+    public void test_EnabledCipherSuites() {
+        mySSLEngine sse = new mySSLEngine();
+        String[] st = {"Suite_01", "Suite_02"};
+        try {
+            sse.setEnabledCipherSuites(st);
+            String[] res = sse.getEnabledCipherSuites();
+            assertNotNull("Null array was returned", res);
+            assertEquals("Incorrect array length", res.length, st.length);
+            assertEquals("Incorrect array was returned", res, st);
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex);
+        }
+        try {
+            sse.setEnabledCipherSuites(null);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iae) {
+            //expected
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#setEnableSessionCreation(boolean flag)
+     * @tests javax.net.ssl.SSLEngine#getEnableSessionCreation()
+     */
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "setEnableSessionCreation",
+            args = {boolean.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "getEnableSessionCreation",
+            args = {}
+        )
+    })
+    public void test_EnableSessionCreation() {
+        mySSLEngine sse = new mySSLEngine();
+        try {
+            assertTrue(sse.getEnableSessionCreation());
+            sse.setEnableSessionCreation(false);
+            assertFalse(sse.getEnableSessionCreation());
+            sse.setEnableSessionCreation(true);
+            assertTrue(sse.getEnableSessionCreation());
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#setNeedClientAuth(boolean need)
+     * @tests javax.net.ssl.SSLEngine#getNeedClientAuth()
+     */
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "setNeedClientAuth",
+            args = {boolean.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "getNeedClientAuth",
+            args = {}
+        )
+    })
+    public void test_NeedClientAuth() {
+        mySSLEngine sse = new mySSLEngine();
+        try {
+            sse.setNeedClientAuth(false);
+            assertFalse(sse.getNeedClientAuth());
+            sse.setNeedClientAuth(true);
+            assertTrue(sse.getNeedClientAuth());
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#setWantClientAuth(boolean want)
+     * @tests javax.net.ssl.SSLEngine#getWantClientAuth()
+     */
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "setWantClientAuth",
+            args = {boolean.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "getWantClientAuth",
+            args = {}
+        )
+    })
+    public void test_WantClientAuth() {
+        mySSLEngine sse = new mySSLEngine();
+        try {
+            sse.setWantClientAuth(false);
+            assertFalse(sse.getWantClientAuth());
+            sse.setWantClientAuth(true);
+            assertTrue(sse.getWantClientAuth());
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#beginHandshake()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "beginHandshake",
+        args = {}
+    )
+    public void test_beginHandshake() {
+        mySSLEngine sse = new mySSLEngine();
+        try {
+            sse.beginHandshake();
+            fail("SSLException wasn't thrown");
+        } catch (SSLException se) {
+            //expected
+        }
+        sse = new mySSLEngine("new host", 1080);
+        try {
+            sse.beginHandshake();
+            fail("IllegalStateException wasn't thrown");
+        } catch (IllegalStateException ise) {
+            //expected
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalStateException");
+        }
+        try {
+            sse.setUseClientMode(true);
+            System.out.println("<--- Client mode was set");
+            sse.beginHandshake();
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#setUseClientMode(boolean mode)
+     * @tests javax.net.ssl.SSLEngine#getUseClientMode()
+     */
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "setUseClientMode",
+            args = {boolean.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "getUseClientMode",
+            args = {}
+        )
+    })
+    public void test_UseClientMode() {
+        mySSLEngine sse = new mySSLEngine();
+        try {
+            sse.setUseClientMode(false);
+            assertFalse(sse.getUseClientMode());
+            sse.setUseClientMode(true);
+            assertTrue(sse.getUseClientMode());
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex);
+        }
+        
+        try {
+            sse = new mySSLEngine("new host", 1080);
+            sse.setUseClientMode(true);
+            sse.beginHandshake();
+            try {
+                sse.setUseClientMode(false);
+                fail("IllegalArgumentException was not thrown");
+            } catch (IllegalArgumentException iae) {
+                //expected
+            }
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#getSession()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getSession",
+        args = {}
+    )
+    public void test_getSession() {
+        mySSLEngine sse = new mySSLEngine();
+        try {
+            assertNull(sse.getSession());
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#getHandshakeStatus()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getHandshakeStatus",
+        args = {}
+    )
+    public void test_getHandshakeStatus() {
+        mySSLEngine sse = new mySSLEngine();
+        try {
+            assertEquals(sse.getHandshakeStatus().toString(), "FINISHED");
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#getDelegatedTask()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getDelegatedTask",
+        args = {}
+    )
+    public void test_getDelegatedTask() {
+        mySSLEngine sse = new mySSLEngine();
+        try {
+            assertNull(sse.getDelegatedTask());
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer[] dsts,
+     *                                       int offset, int length)
+     * Exception case: SSLException should be thrown.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "unwrap",
+        args = {ByteBuffer.class, ByteBuffer[].class, int.class, int.class}
+    )
+    public void test_unwrap_01() {
         ByteBuffer bbs = ByteBuffer.allocate(100);
         ByteBuffer bbd = ByteBuffer.allocate(10);
-        SSLEngine e = new mySSLEngine1(host, port);
-        try {
-            e.wrap(bbs, bbd);
-            fail("SSLException must be thrown");
-        } catch (SSLException ex) {
-        }
-        SSLEngineResult res = e.wrap(bbd, bbs);
-        assertEquals(10, res.bytesConsumed());
-        assertEquals(20, res.bytesProduced());
-
-        try {
-            e.wrap(new ByteBuffer[] { bbs }, bbd);
-            fail("SSLException must be thrown");
-        } catch (SSLException ex) {
-        }
-        res = e.wrap(new ByteBuffer[] { bbd }, bbs);
-        assertEquals(10, res.bytesConsumed());
-        assertEquals(20, res.bytesProduced());
-    }
-
-    /**
-     * Test for <code>unwrap(ByteBuffer src, ByteBuffer dst)</code> method
-     * 
-     * Assertions: 
-     * throws IllegalArgumentException when src or dst is null
-     * throws ReadOnlyBufferException when dst is read only byte buffer
-     * 
-     * Check that implementation behavior follows RI:
-     * jdk 1.5 does not throw IllegalArgumentException when parameters are null
-     * and does not throw ReadOnlyBufferException if dst is read only byte buffer
-     */
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "IllegalStateException checking missed",
-      targets = {
-        @TestTarget(
-          methodName = "unwrap",
-          methodArgs = {ByteBuffer.class, ByteBuffer.class}
-        )
-    })
-    public void test_unwrapLjava_nio_ByteBufferLjava_nio_ByteBuffer01() throws SSLException {
-        String host = "new host";
-        int port = 8080;
-        ByteBuffer bbN = null;
-        ByteBuffer bb = ByteBuffer.allocate(10);
-        SSLEngine e = new mySSLEngine(host, port);
-
-        e.unwrap(bbN, bb);
-        e.unwrap(bb, bbN);
-
-        ByteBuffer roBb = bb.asReadOnlyBuffer();
-        assertTrue("Not read only byte buffer", roBb.isReadOnly());
-
-        e.unwrap(bb, roBb);
-    }
-
-    /**
-     * Test for <code>unwrap(ByteBuffersrc, ByteBuffer dst)</code> and
-     * <code>unwrap(ByteBuffer src, ByteBuffer[] dsts)</code> methods
-     * 
-     * Assertion: these methods throw SSLException
-     */
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "IllegalStateException checking missed",
-      targets = {
-        @TestTarget(
-          methodName = "unwrap",
-          methodArgs = {ByteBuffer.class, ByteBuffer.class}
-        ),
-        @TestTarget(
-          methodName = "unwrap",
-          methodArgs = {ByteBuffer.class, ByteBuffer[].class}
-        )
-
-    })
-    public void test_unwrapLjava_nio_ByteBufferLjava_nio_ByteBuffer02() throws SSLException {
-        ByteBuffer bbs = ByteBuffer.allocate(100);
-        ByteBuffer bbd = ByteBuffer.allocate(10);
-        SSLEngine e = new mySSLEngine1();
-        try {
-            e.unwrap(bbs, bbd);
-            fail("SSLException must be thrown");
-        } catch (SSLException ex) {
-        }
-        SSLEngineResult res = e.unwrap(bbd, bbs);
-        assertEquals(1, res.bytesConsumed());
-        assertEquals(2, res.bytesProduced());
-
-        try {
-            e.unwrap(bbs, new ByteBuffer[] { bbd });
-            fail("SSLException must be thrown");
-        } catch (SSLException ex) {
-        }
-        res = e.unwrap(bbd, new ByteBuffer[] { bbs });
-        assertEquals(1, res.bytesConsumed());
-        assertEquals(2, res.bytesProduced());
-    }
-    
-    /**
-     * Test for <code>unwrap(ByteBuffer src, ByteBuffer dst)</code> method
-     * 
-     * Assertion: decodes  network data into a data buffer. 
-     */
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "IllegalStateException checking missed",
-      targets = {
-        @TestTarget(
-          methodName = "unwrap",
-          methodArgs = {ByteBuffer.class, ByteBuffer.class}
-        )
-    })
-    public void test_unwrapLjava_nio_ByteBufferLjava_nio_ByteBuffer03() throws SSLException {
-        String host = "new host";
-        int port = 8080;
-        ByteBuffer bb = ByteBuffer.allocate(10);
-        SSLEngine e = new mySSLEngine(host, port);
-        SSLEngineResult res = e.unwrap(bb, ByteBuffer.allocate(10));
+        SSLEngine sse = new mySSLEngine1();
+        sse.setUseClientMode(true);
         
-        assertEquals(1, res.bytesConsumed());
-        assertEquals(2, res.bytesProduced());
+        try {
+            sse.unwrap(bbs, new ByteBuffer[] { bbd }, 0, 10);
+            fail("SSLException wasn't thrown");
+        } catch (SSLException ex) {
+            //expected
+        }
     }
     
     /**
-     * Test for <code>unwrap(ByteBuffer src, ByteBuffer[] dsts)</code> method
-     * 
-     * Assertions: throws IllegalArgumentException if parameters are null or
-     * when dsts contains null elements throws ReadOnlyBufferException when dsts
-     * contains read only elements
-     * 
-     * Check that implementation behavior follows RI:
-     * jdk 1.5 does not throw IllegalArgumentException when src is null or
-     * if dsts contains null elements It does not throw ReadOnlyBufferException
-     * when dsts contains read only elements
+     * @tests javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer[] dsts,
+     *                                       int offset, int length)
+     * Exception case: IndexOutOfBoundsException should be thrown.
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "IllegalStateException checking missed",
-      targets = {
-        @TestTarget(
-          methodName = "unwrap",
-          methodArgs = {ByteBuffer.class, ByteBuffer[].class}
-        )
-    })
-    public void test_unwrapLjava_nio_ByteBuffer$Ljava_nio_ByteBuffer01() throws SSLException {
-        String host = "new host";
-        int port = 8080;
-        ByteBuffer[] bbNA = null;
-        ByteBuffer[] bbA = { null, ByteBuffer.allocate(10), null };
-
-        ByteBuffer bb = ByteBuffer.allocate(10);
-        ByteBuffer bbN = null;
-        SSLEngine e = new mySSLEngine(host, port);
-        try {
-            e.unwrap(bb, bbNA);
-            fail("IllegalArgumentException must be thrown for null dsts byte buffer array");
-        } catch (IllegalArgumentException ex) {
-        }
-
-        e.unwrap(bb, bbA);
-        e.unwrap(bbN, bbA);
-
-        ByteBuffer bb1 = ByteBuffer.allocate(100);
-        ByteBuffer roBb = bb1.asReadOnlyBuffer();
-        bbA[0] = bb1;
-        bbA[2] = roBb;
-        assertTrue("Not read only byte buffer", bbA[2].isReadOnly());
-
-        e.unwrap(bb, bbA);
-
-    }
-
-    /**
-     * Test for <code>unwrap(ByteBuffer src, ByteBuffer[] dsts)</code> method
-     * 
-     * Assertion: 
-     * decode network data into data buffers.
-     */
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "IllegalStateException checking missed",
-      targets = {
-        @TestTarget(
-          methodName = "unwrap",
-          methodArgs = {ByteBuffer.class, ByteBuffer[].class}
-        )
-    })
-    public void test_unwrapLjava_nio_ByteBuffer$Ljava_nio_ByteBuffer02() throws SSLException {
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "unwrap",
+        args = {ByteBuffer.class, ByteBuffer[].class, int.class, int.class}
+    )
+    public void test_unwrap_02() throws SSLException {
         String host = "new host";
         int port = 8080;
         ByteBuffer[] bbA = { ByteBuffer.allocate(100), ByteBuffer.allocate(10), ByteBuffer.allocate(100) };
 
         ByteBuffer bb = ByteBuffer.allocate(10);
-        SSLEngine e = new mySSLEngine(host, port);
+        SSLEngine sse = new mySSLEngine1(host, port);
+        sse.setUseClientMode(true);
+        
+        try {
+            SSLEngineResult res = sse.unwrap(bb, bbA, -1, 3);
+            fail("IndexOutOfBoundsException wasn't thrown");
+        } catch (IndexOutOfBoundsException iobe) {
+            //expected
+        }
+        try {
+            SSLEngineResult res = sse.unwrap(bb, bbA, 0, -3);
+            fail("IndexOutOfBoundsException wasn't thrown");
+        } catch (IndexOutOfBoundsException iobe) {
+            //expected
+        }
+        try {
+            SSLEngineResult res = sse.unwrap(bb, bbA, bbA.length + 1, bbA.length);
+            fail("IndexOutOfBoundsException wasn't thrown");
+        } catch (IndexOutOfBoundsException iobe) {
+            //expected
+        }
+        try {
+            SSLEngineResult res = sse.unwrap(bb, bbA, 0, bbA.length + 1);
+            fail("IndexOutOfBoundsException wasn't thrown");
+        } catch (IndexOutOfBoundsException iobe) {
+            //expected
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer[] dsts,
+     *                                       int offset, int length)
+     * Exception case: ReadOnlyBufferException should be thrown.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "unwrap",
+        args = {ByteBuffer.class, ByteBuffer[].class, int.class, int.class}
+    )
+    public void test_unwrap_03() {
+        String host = "new host";
+        int port = 8080;
+        ByteBuffer bbR = ByteBuffer.allocate(100).asReadOnlyBuffer();
+        ByteBuffer[] bbA = { bbR, ByteBuffer.allocate(10), ByteBuffer.allocate(100) };
 
-        SSLEngineResult res = e.unwrap(bb, bbA);
-        assertEquals(1, res.bytesConsumed());
-        assertEquals(2, res.bytesProduced());
+        ByteBuffer bb = ByteBuffer.allocate(10);
+        SSLEngine sse = new mySSLEngine1(host, port);
+        sse.setUseClientMode(true);
+        
+        try {
+            SSLEngineResult res = sse.unwrap(bb, bbA, 0, bbA.length);
+            fail("ReadOnlyBufferException wasn't thrown");
+        } catch (ReadOnlyBufferException iobe) {
+            //expected
+        } catch (Exception e) {
+            fail(e + " was thrown instead of ReadOnlyBufferException");
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer[] dsts,
+     *                                       int offset, int length)
+     * Exception case: IllegalArgumentException should be thrown.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "IllegalArgumentException should be thrown",
+        method = "unwrap",
+        args = {ByteBuffer.class, ByteBuffer[].class, int.class, int.class}
+    )
+    @AndroidOnly("NullPointerException was thrown instead of IllegalArgumentException for null parameter.")
+    public void test_unwrap_04() {
+        String host = "new host";
+        int port = 8080;
+        ByteBuffer[] bbA = {ByteBuffer.allocate(100), ByteBuffer.allocate(10), ByteBuffer.allocate(100)};
+        ByteBuffer[] bbAN = {ByteBuffer.allocate(100), null, ByteBuffer.allocate(100)};
+        ByteBuffer[] bbN = null;
+        ByteBuffer bb = ByteBuffer.allocate(10);
+        ByteBuffer bN = null;
+        SSLEngine sse = new mySSLEngine1(host, port);
+        sse.setUseClientMode(true);
+        
+        try {
+            SSLEngineResult res = sse.unwrap(bN, bbA, 0, 3);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iobe) {
+            //expected
+        } catch (NullPointerException npe) {
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalArgumentException");
+        }
+        try {
+            SSLEngineResult res = sse.unwrap(bb, bbAN, 0, 3);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iobe) {
+            //expected
+        } catch (NullPointerException npe) {
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalArgumentException");
+        }
+        try {
+            SSLEngineResult res = sse.unwrap(bb, bbN, 0, 0);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iobe) {
+            //expected
+        } catch (NullPointerException npe) {
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalArgumentException");
+        }
+        try {
+            SSLEngineResult res = sse.unwrap(bN, bbN, 0, 0);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iobe) {
+            //expected
+        } catch (NullPointerException npe) {
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalArgumentException");
+        }
+
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer[] dsts,
+     *                                       int offset, int length)
+     * Exception case: IllegalStateException should be thrown.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "unwrap",
+        args = {ByteBuffer.class, ByteBuffer[].class, int.class, int.class}
+    )
+    public void test_unwrap_05() {
+        String host = "new host";
+        int port = 8080;
+        ByteBuffer[] bbA = { ByteBuffer.allocate(100), ByteBuffer.allocate(10), ByteBuffer.allocate(100) };
+
+        ByteBuffer bb = ByteBuffer.allocate(10);
+        SSLEngine sse = new mySSLEngine1(host, port);
+        
+        try {
+            SSLEngineResult res = sse.unwrap(bb, bbA, 0, bbA.length);
+            fail("IllegalStateException wasn't thrown");
+        } catch (IllegalStateException iobe) {
+            //expected
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalStateException");
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer[] dsts,
+     *                                       int offset, int length)
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "unwrap",
+        args = {ByteBuffer.class, ByteBuffer[].class, int.class, int.class}
+    )
+    public void test_unwrap_06() {
+        String host = "new host";
+        int port = 8080;
+        ByteBuffer[] bbA = { ByteBuffer.allocate(100), ByteBuffer.allocate(10), ByteBuffer.allocate(100) };
+
+        ByteBuffer bb = ByteBuffer.allocate(10);
+        SSLEngine sse = new mySSLEngine1(host, port);
+        sse.setUseClientMode(true);
+        
+        try {
+            SSLEngineResult res = sse.unwrap(bb, bbA, 0, bbA.length);
+            assertEquals(1, res.bytesConsumed());
+            assertEquals(2, res.bytesProduced());
+        } catch (Exception ex) {
+            fail("Unexpected exception: " + ex);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#wrap(ByteBuffer[] srcs, int offset,
+     *                                     int length, ByteBuffer dst)
+     * Exception case: SSLException should be thrown.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "wrap",
+        args = {ByteBuffer[].class, int.class, int.class, ByteBuffer.class}
+    )
+    public void test_wrap_01() {
+        ByteBuffer bbs = ByteBuffer.allocate(100);
+        ByteBuffer bbd = ByteBuffer.allocate(10);
+        SSLEngine sse = new mySSLEngine1();
+        sse.setUseClientMode(true);
+        
+        try {
+            sse.wrap(new ByteBuffer[] { bbs }, 0, 100, bbd);
+            fail("SSLException wasn't thrown");
+        } catch (SSLException ex) {
+            //expected
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#wrap(ByteBuffer[] srcs, int offset,
+     *                                     int length, ByteBuffer dst)
+     * Exception case: IndexOutOfBoundsException should be thrown.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "wrap",
+        args = {ByteBuffer[].class, int.class, int.class, ByteBuffer.class}
+    )
+    public void test_wrap_02() throws SSLException {
+        String host = "new host";
+        int port = 8080;
+        ByteBuffer bb = ByteBuffer.allocate(10);
+        ByteBuffer[] bbA = {ByteBuffer.allocate(5), ByteBuffer.allocate(10), ByteBuffer.allocate(5)};
+        SSLEngine sse = new mySSLEngine1(host, port);
+        sse.setUseClientMode(true);
+        
+        try {
+            SSLEngineResult res = sse.wrap(bbA, -1, 3, bb);
+            fail("IndexOutOfBoundsException wasn't thrown");
+        } catch (IndexOutOfBoundsException iobe) {
+            //expected
+        }
+        try {
+            SSLEngineResult res = sse.wrap(bbA, 0, -3, bb);
+            fail("IndexOutOfBoundsException wasn't thrown");
+        } catch (IndexOutOfBoundsException iobe) {
+            //expected
+        }
+        try {
+            SSLEngineResult res = sse.wrap(bbA, bbA.length + 1, bbA.length, bb);
+            fail("IndexOutOfBoundsException wasn't thrown");
+        } catch (IndexOutOfBoundsException iobe) {
+            //expected
+        }
+        try {
+            SSLEngineResult res = sse.wrap(bbA, 0, bbA.length + 1, bb);
+            fail("IndexOutOfBoundsException wasn't thrown");
+        } catch (IndexOutOfBoundsException iobe) {
+            //expected
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#wrap(ByteBuffer[] srcs, int offset,
+     *                                     int length, ByteBuffer dst)
+     * Exception case: ReadOnlyBufferException should be thrown.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "wrap",
+        args = {ByteBuffer[].class, int.class, int.class, ByteBuffer.class}
+    )
+    public void test_wrap_03() throws SSLException {
+        String host = "new host";
+        int port = 8080;
+        ByteBuffer bb = ByteBuffer.allocate(10).asReadOnlyBuffer();
+        ByteBuffer[] bbA = {ByteBuffer.allocate(5), ByteBuffer.allocate(10), ByteBuffer.allocate(5)};
+        SSLEngine sse = new mySSLEngine1(host, port);
+        sse.setUseClientMode(true);
+        
+        try {
+            SSLEngineResult res = sse.wrap(bbA, 0, bbA.length, bb);
+            fail("ReadOnlyBufferException wasn't thrown");
+        } catch (ReadOnlyBufferException iobe) {
+            //expected
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#wrap(ByteBuffer[] srcs, int offset,
+     *                                     int length, ByteBuffer dst)
+     * Exception case: IllegalArgumentException should be thrown.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "IllegalArgumentException must be thrown",
+        method = "wrap",
+        args = {ByteBuffer[].class, int.class, int.class, ByteBuffer.class}
+    )
+    @AndroidOnly("NullPointerException was thrown instead of IllegalArgumentException for null parameter.")
+    public void test_wrap_04() {
+        String host = "new host";
+        int port = 8080;
+        ByteBuffer[] bbA = {ByteBuffer.allocate(100), ByteBuffer.allocate(10), ByteBuffer.allocate(100)};
+        ByteBuffer[] bbAN = {ByteBuffer.allocate(100), null, ByteBuffer.allocate(100)};
+        ByteBuffer[] bbN = null;
+        ByteBuffer bb = ByteBuffer.allocate(10);
+        ByteBuffer bN = null;
+        SSLEngine e = new mySSLEngine1(host, port);
+        e.setUseClientMode(true);
+        
+        try {
+            e.wrap(bbA, 0, 3, bN);
+            fail("IllegalArgumentException must be thrown for null srcs byte buffer array");
+        } catch (NullPointerException npe) {
+        } catch (IllegalArgumentException ex) {
+        } catch (Exception ex) {
+            fail(ex + " was thrown instead of IllegalArgumentException");
+        }
+        
+        try {
+            e.wrap(bbN, 0, 0, bN);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException ex) {
+        } catch (NullPointerException npe) {
+        } catch (Exception ex) {
+            fail(ex + " was thrown instead of IllegalArgumentException");
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#wrap(ByteBuffer[] srcs, int offset,
+     *                                     int length, ByteBuffer dst)
+     * Exception case: IllegalStateException should be thrown.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "wrap",
+        args = {ByteBuffer[].class, int.class, int.class, ByteBuffer.class}
+    )
+    public void test_wrap_05() throws SSLException {
+        String host = "new host";
+        int port = 8080;
+        ByteBuffer bb = ByteBuffer.allocate(10);
+        ByteBuffer[] bbA = {ByteBuffer.allocate(5), ByteBuffer.allocate(10), ByteBuffer.allocate(5)};
+        SSLEngine sse = new mySSLEngine1(host, port);
+        
+        try {
+            SSLEngineResult res = sse.wrap(bbA, 0, bbA.length, bb);
+            fail("IllegalStateException wasn't thrown");
+        } catch (IllegalStateException iobe) {
+            //expected
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#wrap(ByteBuffer[] srcs, int offset,
+     *                                     int length, ByteBuffer dst)
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "wrap",
+        args = {ByteBuffer[].class, int.class, int.class, ByteBuffer.class}
+    )
+    public void test_wrap_06() {
+        String host = "new host";
+        int port = 8080;
+        ByteBuffer bb = ByteBuffer.allocate(10);
+        ByteBuffer[] bbA = {ByteBuffer.allocate(5), ByteBuffer.allocate(10), ByteBuffer.allocate(5)};
+        SSLEngine sse = new mySSLEngine1(host, port);
+        sse.setUseClientMode(true);        
+        
+        try {
+            SSLEngineResult res = sse.wrap(bbA, 0, bbA.length, bb);
+        } catch (Exception ex) {
+            fail("Unexpected exception: " + ex);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#closeOutbound()
+     * @tests javax.net.ssl.SSLEngine#isOutboundDone()
+     */
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "closeOutbound",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "isOutboundDone",
+            args = {}
+        )
+    })
+    public void test_closeOutbound() {
+        SSLEngine sse = new mySSLEngine();
+        
+        try {
+            assertFalse(sse.isOutboundDone());
+            sse.closeOutbound();
+            assertTrue(sse.isOutboundDone());
+        } catch (Exception ex) {
+            fail("Unexpected exception: " + ex);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#closeInbound()
+     * @tests javax.net.ssl.SSLEngine#isInboundDone()
+     */
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.SUFFICIENT,
+            notes = "",
+            method = "closeInbound",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "isInboundDone",
+            args = {}
+        )
+    })
+    public void test_closeInbound() {
+        SSLEngine sse = new mySSLEngine();
+ 
+        try {
+            assertFalse(sse.isInboundDone());
+            sse.closeInbound();
+            assertTrue(sse.isInboundDone());
+        } catch (Exception ex) {
+            fail("Unexpected exception: " + ex);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer dst)
+     * SSLException should be thrown.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "unwrap",
+        args = {ByteBuffer.class, ByteBuffer.class}
+    )
+    public void test_unwrap_ByteBuffer_ByteBuffer_01() {
+        ByteBuffer bbs = ByteBuffer.allocate(100);
+        ByteBuffer bbd = ByteBuffer.allocate(10);
+        SSLEngine sse = new mySSLEngine1();
+        sse.setUseClientMode(true);
+        
+        try {
+            sse.unwrap(bbs, bbd);
+            fail("SSLException wasn't thrown");
+        } catch (SSLException ex) {
+            //expected
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer dst)
+     * ReadOnlyBufferException should be thrown.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "unwrap",
+        args = {ByteBuffer.class, ByteBuffer.class}
+    )
+    public void test_unwrap_ByteBuffer_ByteBuffer_02() {
+        String host = "new host";
+        int port = 8080;
+        ByteBuffer bbs = ByteBuffer.allocate(10);
+        ByteBuffer bbd = ByteBuffer.allocate(100).asReadOnlyBuffer();
+        SSLEngine sse = new mySSLEngine1(host, port);
+        sse.setUseClientMode(true);
+        
+        try {
+            SSLEngineResult res = sse.unwrap(bbs, bbd);
+            fail("ReadOnlyBufferException wasn't thrown");
+        } catch (ReadOnlyBufferException iobe) {
+            //expected
+        } catch (Exception e) {
+            fail(e + " was thrown instead of ReadOnlyBufferException");
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer dst)
+     * IllegalArgumentException should be thrown.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "unwrap",
+        args = {ByteBuffer.class, ByteBuffer.class}
+    )
+    @AndroidOnly("NullPointerException was thrown instead of IllegalArgumentException for null parameter.")
+    public void test_unwrap_ByteBuffer_ByteBuffer_03() {
+        String host = "new host";
+        int port = 8080;
+        ByteBuffer bbsN = null;
+        ByteBuffer bbdN = null;
+        ByteBuffer bbs = ByteBuffer.allocate(10);
+        ByteBuffer bbd = ByteBuffer.allocate(100);
+        SSLEngine sse = new mySSLEngine1(host, port);
+        sse.setUseClientMode(true);
+        
+        try {
+            SSLEngineResult res = sse.unwrap(bbsN, bbd);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iae) {
+            //expected
+        } catch (NullPointerException npe) {
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalArgumentException");
+        }
+        
+        try {
+            SSLEngineResult res = sse.unwrap(bbs, bbdN);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iae) {
+            //expected
+        } catch (NullPointerException npe) {
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalArgumentException");
+        }
+        
+        try {
+            SSLEngineResult res = sse.unwrap(bbsN, bbdN);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iae) {
+            //expected
+        } catch (NullPointerException npe) {
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalArgumentException");
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer dst)
+     * IllegalStateException should be thrown.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "unwrap",
+        args = {ByteBuffer.class, ByteBuffer.class}
+    )
+    public void test_unwrap_ByteBuffer_ByteBuffer_04() {
+        String host = "new host";
+        int port = 8080;
+        ByteBuffer bbs = ByteBuffer.allocate(10);
+        ByteBuffer bbd = ByteBuffer.allocate(100);
+        SSLEngine sse = new mySSLEngine1(host, port);
+        
+        try {
+            SSLEngineResult res = sse.unwrap(bbs, bbd);
+            fail("IllegalStateException wasn't thrown");
+        } catch (IllegalStateException iobe) {
+            //expected
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalStateException");
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer dst)
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "unwrap",
+        args = {ByteBuffer.class, ByteBuffer.class}
+    )
+    public void test_unwrap_ByteBuffer_ByteBuffer_05() {
+        String host = "new host";
+        int port = 8080;
+        ByteBuffer bbs = ByteBuffer.allocate(10);
+        ByteBuffer bbd = ByteBuffer.allocate(100);
+        SSLEngine sse = new mySSLEngine1(host, port);
+        sse.setUseClientMode(true);
+        
+        try {
+            SSLEngineResult res = sse.unwrap(bbs, bbd);
+            assertEquals(1, res.bytesConsumed());
+            assertEquals(2, res.bytesProduced());
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer[] dsts)
+     * SSLException should be thrown.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "unwrap",
+        args = {ByteBuffer.class, ByteBuffer[].class}
+    )
+    public void test_unwrap_ByteBuffer$ByteBuffer_01() {
+        ByteBuffer bbs = ByteBuffer.allocate(100);
+        ByteBuffer bbd = ByteBuffer.allocate(10);
+        SSLEngine sse = new mySSLEngine1();
+        sse.setUseClientMode(true);
+        
+        try {
+            sse.unwrap(bbs, new ByteBuffer[] { bbd });
+            fail("SSLException wasn't thrown");
+        } catch (SSLException ex) {
+            //expected
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer[] dsts)
+     * ReadOnlyBufferException should be thrown.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "unwrap",
+        args = {ByteBuffer.class, ByteBuffer[].class}
+    )
+    public void test_unwrap_ByteBuffer$ByteBuffer_02() {
+        String host = "new host";
+        int port = 8080;
+        ByteBuffer bbs = ByteBuffer.allocate(10);
+        ByteBuffer bbR = ByteBuffer.allocate(100).asReadOnlyBuffer();
+        ByteBuffer[] bbA = { bbR, ByteBuffer.allocate(10), ByteBuffer.allocate(100) };
+        SSLEngine sse = new mySSLEngine1(host, port);
+        sse.setUseClientMode(true);
+        
+        try {
+            SSLEngineResult res = sse.unwrap(bbs, bbA);
+            fail("ReadOnlyBufferException wasn't thrown");
+        } catch (ReadOnlyBufferException iobe) {
+            //expected
+        } catch (Exception e) {
+            fail(e + " was thrown instead of ReadOnlyBufferException");
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer[] dsts)
+     * IllegalArgumentException should be thrown.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "unwrap",
+        args = {ByteBuffer.class, ByteBuffer[].class}
+    )
+    @AndroidOnly("NullPointerException was thrown instead of IllegalArgumentException for null parameter.")
+    public void test_unwrap_ByteBuffer$ByteBuffer_03() {
+        String host = "new host";
+        int port = 8080;
+        ByteBuffer[] bbA = { ByteBuffer.allocate(100), ByteBuffer.allocate(10), ByteBuffer.allocate(100) };
+        ByteBuffer[] bbN = { ByteBuffer.allocate(100), null, ByteBuffer.allocate(100) };
+        ByteBuffer[] bbAN = null;
+        ByteBuffer bb = ByteBuffer.allocate(10);
+        ByteBuffer bN = null;
+        SSLEngine sse = new mySSLEngine1(host, port);
+        sse.setUseClientMode(true);
+        
+        try {
+            SSLEngineResult res = sse.unwrap(bN, bbA);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iobe) {
+            //expected
+        } catch (NullPointerException npe) {
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalArgumentException");
+        }
+        
+        try {
+            SSLEngineResult res = sse.unwrap(bb, bbAN);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iobe) {
+            //expected
+        } catch (NullPointerException npe) {
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalArgumentException");
+        }
+        
+        try {
+            SSLEngineResult res = sse.unwrap(bb, bbN);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iobe) {
+            //expected
+        } catch (NullPointerException npe) {
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalArgumentException");
+        }
+        
+        try {
+            SSLEngineResult res = sse.unwrap(bN, bbAN);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iobe) {
+            //expected
+        } catch (NullPointerException npe) {
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalArgumentException");
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer[] dsts)
+     * IllegalStateException should be thrown.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "unwrap",
+        args = {ByteBuffer.class, ByteBuffer[].class}
+    )
+    public void test_unwrap_ByteBuffer$ByteBuffer_04() {
+        String host = "new host";
+        int port = 8080;
+        ByteBuffer bbs = ByteBuffer.allocate(10);
+        ByteBuffer[] bbd = {ByteBuffer.allocate(100), ByteBuffer.allocate(10), ByteBuffer.allocate(100) };
+        SSLEngine sse = new mySSLEngine1(host, port);
+        
+        try {
+            SSLEngineResult res = sse.unwrap(bbs, bbd);
+            fail("IllegalStateException wasn't thrown");
+        } catch (IllegalStateException iobe) {
+            //expected
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalStateException");
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer[] dsts)
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "unwrap",
+        args = {ByteBuffer.class, ByteBuffer[].class}
+    )
+    public void test_unwrap_ByteBuffer$ByteBuffer_05() {
+        String host = "new host";
+        int port = 8080;
+        ByteBuffer bbs = ByteBuffer.allocate(10);
+        ByteBuffer[] bbd = {ByteBuffer.allocate(100), ByteBuffer.allocate(10), ByteBuffer.allocate(100) };
+        SSLEngine sse = new mySSLEngine1(host, port);
+        sse.setUseClientMode(true);
+        
+        try {
+            SSLEngineResult res = sse.unwrap(bbs, bbd);
+            assertEquals(1, res.bytesConsumed());
+            assertEquals(2, res.bytesProduced());
+        } catch (Exception ex) {
+            fail("Unexpected exception: " + ex);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#wrap(ByteBuffer src, ByteBuffer dst)
+     * SSLException should be thrown.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "wrap",
+        args = {ByteBuffer.class, ByteBuffer.class}
+    )
+    public void test_wrap_ByteBuffer_ByteBuffer_01() {
+        ByteBuffer bbs = ByteBuffer.allocate(100);
+        ByteBuffer bbd = ByteBuffer.allocate(10);
+        SSLEngine sse = new mySSLEngine1();
+        sse.setUseClientMode(true);
+        
+        try {
+            sse.wrap(bbs, bbd);
+            fail("SSLException wasn't thrown");
+        } catch (SSLException ex) {
+            //expected
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#wrap(ByteBuffer src, ByteBuffer dst)
+     * ReadOnlyBufferException should be thrown.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "wrap",
+        args = {ByteBuffer.class, ByteBuffer.class}
+    )
+    public void test_wrap_ByteBuffer_ByteBuffer_02() {
+        String host = "new host";
+        int port = 8080;
+        ByteBuffer bbs = ByteBuffer.allocate(10);
+        ByteBuffer bbd = ByteBuffer.allocate(100).asReadOnlyBuffer();
+        SSLEngine sse = new mySSLEngine1(host, port);
+        sse.setUseClientMode(true);
+        
+        try {
+            SSLEngineResult res = sse.wrap(bbs, bbd);
+            fail("ReadOnlyBufferException wasn't thrown");
+        } catch (ReadOnlyBufferException iobe) {
+            //expected
+        } catch (Exception e) {
+            fail(e + " was thrown instead of ReadOnlyBufferException");
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#wrap(ByteBuffer src, ByteBuffer dst)
+     * IllegalArgumentException should be thrown.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "wrap",
+        args = {ByteBuffer.class, ByteBuffer.class}
+    )
+    @AndroidOnly("NullPointerException was thrown instead of IllegalArgumentException for null parameter.")
+    public void test_wrap_ByteBuffer_ByteBuffer_03() {
+        String host = "new host";
+        int port = 8080;
+        ByteBuffer bbsN = null;
+        ByteBuffer bbdN = null;
+        ByteBuffer bbs = ByteBuffer.allocate(10);
+        ByteBuffer bbd = ByteBuffer.allocate(100);
+        SSLEngine sse = new mySSLEngine1(host, port);
+        sse.setUseClientMode(true);
+        
+        try {
+            SSLEngineResult res = sse.wrap(bbsN, bbd);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iae) {
+            //expected
+        } catch (NullPointerException npe) {
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalArgumentException");
+        }
+        
+        try {
+            SSLEngineResult res = sse.wrap(bbs, bbdN);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iae) {
+            //expected
+        } catch (NullPointerException npe) {
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalArgumentException");
+        }
+        
+        try {
+            SSLEngineResult res = sse.wrap(bbsN, bbdN);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iae) {
+            //expected
+        } catch (NullPointerException npe) {
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalArgumentException");
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#wrap(ByteBuffer src, ByteBuffer dst)
+     * IllegalStateException should be thrown.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "wrap",
+        args = {ByteBuffer.class, ByteBuffer.class}
+    )
+    public void test_wrap_ByteBuffer_ByteBuffer_04() {
+        String host = "new host";
+        int port = 8080;
+        ByteBuffer bbs = ByteBuffer.allocate(10);
+        ByteBuffer bbd = ByteBuffer.allocate(10);
+        SSLEngine sse = new mySSLEngine1(host, port);
+        
+        try {
+            SSLEngineResult res = sse.wrap(bbs, bbd);
+            fail("IllegalStateException wasn't thrown");
+        } catch (IllegalStateException iobe) {
+            //expected
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalStateException");
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#wrap(ByteBuffer src, ByteBuffer dst)
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "wrap",
+        args = {ByteBuffer.class, ByteBuffer.class}
+    )
+    public void test_wrap_ByteBuffer_ByteBuffer_05() {
+        String host = "new host";
+        int port = 8080;
+        ByteBuffer bb = ByteBuffer.allocate(10);
+        SSLEngine sse = new mySSLEngine1(host, port);
+        sse.setUseClientMode(true);
+        
+        try {
+            SSLEngineResult res = sse.wrap(bb, ByteBuffer.allocate(10));
+            assertEquals(10, res.bytesConsumed());
+            assertEquals(20, res.bytesProduced());
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#wrap(ByteBuffer[] srcs, ByteBuffer dst)
+     * SSLException should be thrown.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "wrap",
+        args = {ByteBuffer[].class, ByteBuffer.class}
+    )
+    public void test_wrap_ByteBuffer$ByteBuffer_01() {
+        ByteBuffer bbs = ByteBuffer.allocate(100);
+        ByteBuffer bbd = ByteBuffer.allocate(10);
+        SSLEngine sse = new mySSLEngine1();
+        sse.setUseClientMode(true);
+        
+        try {
+            sse.wrap(new ByteBuffer[] { bbs }, bbd);
+            fail("SSLException wasn't thrown");
+        } catch (SSLException ex) {
+            //expected
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#wrap(ByteBuffer[] srcs, ByteBuffer dst)
+     * ReadOnlyBufferException should be thrown.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "wrap",
+        args = {ByteBuffer[].class, ByteBuffer.class}
+    )
+    public void test_wrap_ByteBuffer$ByteBuffer_02() {
+        String host = "new host";
+        int port = 8080;
+        ByteBuffer bb = ByteBuffer.allocate(10).asReadOnlyBuffer();
+        ByteBuffer[] bbA = {ByteBuffer.allocate(5), ByteBuffer.allocate(10), ByteBuffer.allocate(5)};
+        SSLEngine sse = new mySSLEngine1(host, port);
+        sse.setUseClientMode(true);
+        
+        try {
+            SSLEngineResult res = sse.wrap(bbA, bb);
+            fail("ReadOnlyBufferException wasn't thrown");
+        } catch (ReadOnlyBufferException iobe) {
+            //expected
+        } catch (Exception e) {
+            fail(e + " was thrown instead of ReadOnlyBufferException");
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#wrap(ByteBuffer[] srcs, ByteBuffer dst)
+     * IllegalArgumentException should be thrown.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "wrap",
+        args = {ByteBuffer[].class, ByteBuffer.class}
+    )
+    @AndroidOnly("NullPointerException was thrown instead of IllegalArgumentException for null parameter.")
+    public void test_wrap_ByteBuffer$ByteBuffer_03() {
+        String host = "new host";
+        int port = 8080;
+        ByteBuffer[] bbA = {ByteBuffer.allocate(100), ByteBuffer.allocate(10), ByteBuffer.allocate(100)};
+        ByteBuffer[] bbN = {ByteBuffer.allocate(100), null, ByteBuffer.allocate(100)};
+        ByteBuffer[] bbAN = null;
+        ByteBuffer bb = ByteBuffer.allocate(10);
+        ByteBuffer bN = null;
+        SSLEngine sse = new mySSLEngine1(host, port);
+        sse.setUseClientMode(true);
+        
+        try {
+            SSLEngineResult res = sse.wrap(bbA, bN);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iobe) {
+            //expected
+        } catch (NullPointerException npe) {
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalArgumentException");
+        }
+        
+        try {
+            SSLEngineResult res = sse.wrap(bbAN, bb);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iobe) {
+            //expected
+        } catch (NullPointerException npe) {
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalArgumentException");
+        }
+        
+        try {
+            SSLEngineResult res = sse.wrap(bbAN, bN);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iobe) {
+            //expected
+        } catch (NullPointerException npe) {
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalArgumentException");
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#wrap(ByteBuffer[] srcs, ByteBuffer dst)
+     * IllegalStateException should be thrown.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "wrap",
+        args = {ByteBuffer[].class, ByteBuffer.class}
+    )
+    public void test_wrap_ByteBuffer$ByteBuffer_04() {
+        String host = "new host";
+        int port = 8080;
+        ByteBuffer bb = ByteBuffer.allocate(10);
+        ByteBuffer[] bbA = { ByteBuffer.allocate(5), ByteBuffer.allocate(10), ByteBuffer.allocate(5) };
+        SSLEngine sse = new mySSLEngine1(host, port);
+        
+        try {
+            SSLEngineResult res = sse.wrap(bbA, bb);
+            fail("IllegalStateException wasn't thrown");
+        } catch (IllegalStateException iobe) {
+            //expected
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalStateException");
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLEngine#wrap(ByteBuffer[] srcs, ByteBuffer dst)
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "wrap",
+        args = {ByteBuffer[].class, ByteBuffer.class}
+    )
+    public void test_wrap_ByteBuffer$ByteBuffer_05() {
+        String host = "new host";
+        int port = 8080;
+        ByteBuffer bb = ByteBuffer.allocate(10);
+        ByteBuffer[] bbA = { ByteBuffer.allocate(5), ByteBuffer.allocate(10), ByteBuffer.allocate(5) };
+        SSLEngine sse = new mySSLEngine1(host, port);
+        sse.setUseClientMode(true);
+        
+        try {
+            SSLEngineResult res = sse.wrap(bbA, bb);
+            assertEquals(10, res.bytesConsumed());
+            assertEquals(20, res.bytesProduced());
+        } catch (Exception ex) {
+            fail("Unexpected exception: " + ex);
+        }
     }
 }
 
@@ -527,13 +1601,18 @@
 
     private boolean needClientAuth;
 
-    private boolean enableSessionCreation;
+    private boolean enableSessionCreation = true;
 
     private boolean wantClientAuth;
 
     private String[] enabledProtocols;
 
     private String[] enabledCipherSuites;
+    
+    public int mode = -1;
+    private boolean init = false;
+    private boolean inboundDone = false;
+    private boolean outboundDone = false;
 
     public mySSLEngine() {
         super();
@@ -548,12 +1627,18 @@
         if ((host == null) || (host.length() == 0)) {
             throw new SSLException("");
         }
+        if (mode == -1) {
+            throw new IllegalStateException();
+        }
+        init = true;
     }
 
     public void closeInbound() throws SSLException {
+        inboundDone = true;
     }
 
     public void closeOutbound() {
+        outboundDone = true;
     }
 
     public Runnable getDelegatedTask() {
@@ -601,18 +1686,24 @@
     }
 
     public boolean isInboundDone() {
-        return false;
+        return inboundDone;
     }
 
     public boolean isOutboundDone() {
-        return false;
+        return outboundDone;
     }
 
     public void setEnabledCipherSuites(String[] suites) {
+        if (suites == null) {
+            throw new IllegalArgumentException();
+        }
         enabledCipherSuites = suites;
     }
 
     public void setEnabledProtocols(String[] protocols) {
+        if (protocols == null) {
+            throw new IllegalArgumentException();
+        }
         enabledProtocols = protocols;
     }
 
@@ -625,7 +1716,15 @@
     }
 
     public void setUseClientMode(boolean mode) {
+        if (init) {
+            throw new IllegalArgumentException();
+        }
         useClientMode = mode;
+        if (useClientMode) {
+            this.mode = 1;
+        } else {
+            this.mode = 0;
+        }
     }
 
     public void setWantClientAuth(boolean want) {
@@ -646,14 +1745,14 @@
 }
 
 class mySSLEngine1 extends mySSLEngine {
-
+    
     public mySSLEngine1() {
     }
 
     public mySSLEngine1(String host, int port) {
         super(host, port);
     }
-
+    
     public SSLEngineResult unwrap(ByteBuffer src, ByteBuffer dst)
             throws SSLException {
         if (src.limit() > dst.limit()) {
@@ -685,5 +1784,59 @@
         }
         return super.wrap(src, dst);
     }
-
+    
+    public SSLEngineResult unwrap(ByteBuffer src, ByteBuffer[] dsts,
+            int offset, int length) throws SSLException {
+        if (super.mode == -1) {
+            throw new IllegalStateException("client/server mode has not yet been set");
+        }
+        if (src.limit() > dsts[0].limit()) {
+            throw new SSLException("incorrect limits");
+        }
+        if (offset < 0 || length < 0) {
+            throw new IndexOutOfBoundsException("negative parameter");
+        }
+        if (offset > length || length > dsts.length - offset) {
+            throw new IndexOutOfBoundsException("negative parameter");
+        }
+        if (src.equals(null) || dsts.equals(null)) {
+            throw new IllegalArgumentException("null parameter");
+        }
+        for (int i = 0; i < dsts.length; i++) {
+            if (dsts[i].isReadOnly()) {
+                throw new ReadOnlyBufferException();
+            } else if (dsts[i].equals(null)) {
+                throw new IllegalArgumentException("null parameter");
+            }
+        }
+        return super.unwrap(src, dsts, offset, length);
+    }
+    
+    public SSLEngineResult wrap(ByteBuffer[] srcs, int offset, int length, ByteBuffer dst)
+                                throws SSLException {
+        if (super.mode == -1) {
+            throw new IllegalStateException("client/server mode has not yet been set");
+        }
+        if (srcs[0].limit() > dst.limit()) {
+            throw new SSLException("incorrect limits");
+        }
+        if (offset < 0 || length < 0) {
+            throw new IndexOutOfBoundsException("negative parameter");
+        }
+        if (offset > length || length > srcs.length - offset) {
+            throw new IndexOutOfBoundsException("negative parameter");
+        }
+        if (srcs.equals(null) || dst.equals(null)) {
+            throw new IllegalArgumentException("null parameter");
+        }
+        for (int i = 0; i < srcs.length; i++) {
+            if (srcs[i].equals(null)) {
+                throw new IllegalArgumentException("null parameter");
+            }
+        }
+        if (dst.isReadOnly()) {
+            throw new ReadOnlyBufferException();
+        }
+        return super.wrap(srcs, offset, length, dst);
+    }
 }
\ No newline at end of file
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/SSLExceptionTest.java b/x-net/src/test/java/tests/api/javax/net/ssl/SSLExceptionTest.java
new file mode 100644
index 0000000..fe0d056
--- /dev/null
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/SSLExceptionTest.java
@@ -0,0 +1,223 @@
+/*
+ *  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 tests.api.javax.net.ssl;
+
+import dalvik.annotation.TestTargetClass;
+import dalvik.annotation.TestTargets;
+import dalvik.annotation.TestLevel;
+import dalvik.annotation.TestTargetNew;
+
+import javax.net.ssl.SSLException;
+
+import junit.framework.TestCase;
+@TestTargetClass(SSLException.class)
+/**
+ * Tests for <code>SSLException</code> class constructors and methods.
+ * 
+ */
+public class SSLExceptionTest extends TestCase {
+
+    public static void main(String[] args) {
+    }
+
+    /**
+     * Constructor for SSLExceptionTests.
+     * 
+     * @param arg0
+     */
+    public SSLExceptionTest(String arg0) {
+        super(arg0);
+    }
+
+    private static String[] msgs = {
+            "",
+            "Check new message",
+            "Check new message Check new message Check new message Check new message Check new message" };
+
+    private static Throwable tCause = new Throwable("Throwable for exception");
+
+    /**
+     * Test for <code>SSLException(String)</code> constructor Assertion:
+     * constructs SSLException with detail message msg. Parameter
+     * <code>msg</code> is not null.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "SSLException",
+        args = {java.lang.String.class}
+    )
+    public void testSSLException01() {
+        SSLException sE;
+        for (int i = 0; i < msgs.length; i++) {
+            sE = new SSLException(msgs[i]);
+            assertEquals("getMessage() must return: ".concat(msgs[i]), sE.getMessage(), msgs[i]);
+            assertNull("getCause() must return null", sE.getCause());
+        }
+    }
+
+    /**
+     * Test for <code>SSLException(String)</code> constructor Assertion:
+     * constructs SSLException when <code>msg</code> is null
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "SSLException",
+        args = {java.lang.String.class}
+    )
+    public void testSSLException02() {
+        String msg = null;
+        SSLException sE = new SSLException(msg);
+        assertNull("getMessage() must return null.", sE.getMessage());
+        assertNull("getCause() must return null", sE.getCause());
+    }
+
+    /**
+     * Test for <code>SSLException(Throwable)</code> constructor
+     * Assertion: constructs SSLException when <code>cause</code> is null
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "SSLException",
+        args = {java.lang.Throwable.class}
+    )
+    public void testSSLException03() {
+        Throwable cause = null;
+        SSLException sE = new SSLException(cause);
+        assertNull("getMessage() must return null.", sE.getMessage());
+        assertNull("getCause() must return null", sE.getCause());
+    }
+
+    /**
+     * Test for <code>SSLException(Throwable)</code> constructor
+     * Assertion: constructs SSLException when <code>cause</code> is not
+     * null
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "SSLException",
+        args = {java.lang.Throwable.class}
+    )
+    public void testSSLException04() {
+        SSLException sE = new SSLException(tCause);
+        if (sE.getMessage() != null) {
+            String toS = tCause.toString();
+            String getM = sE.getMessage();
+            assertTrue("getMessage() should contain ".concat(toS), (getM
+                    .indexOf(toS) != -1));
+        }
+        assertNotNull("getCause() must not return null", sE.getCause());
+        assertEquals("getCause() must return ".concat(tCause.toString()), sE.getCause(), tCause);
+    }
+
+    /**
+     * Test for <code>SSLException(String, Throwable)</code> constructor
+     * Assertion: constructs SSLException when <code>cause</code> is null
+     * <code>msg</code> is null
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "SSLException",
+        args = {java.lang.String.class, java.lang.Throwable.class}
+    )
+    public void testSSLException05() {
+        SSLException sE = new SSLException(null, null);
+        assertNull("getMessage() must return null", sE.getMessage());
+        assertNull("getCause() must return null", sE.getCause());
+    }
+
+    /**
+     * Test for <code>SSLException(String, Throwable)</code> constructor
+     * Assertion: constructs SSLException when <code>cause</code> is null
+     * <code>msg</code> is not null
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "SSLException",
+        args = {java.lang.String.class, java.lang.Throwable.class}
+    )
+    public void testSSLException06() {
+        SSLException sE;
+        for (int i = 0; i < msgs.length; i++) {
+            sE = new SSLException(msgs[i], null);
+            assertEquals("getMessage() must return: ".concat(msgs[i]), sE
+                    .getMessage(), msgs[i]);
+            assertNull("getCause() must return null", sE.getCause());
+        }
+    }
+
+    /**
+     * Test for <code>SSLException(String, Throwable)</code> constructor
+     * Assertion: constructs SSLException when <code>cause</code> is not
+     * null <code>msg</code> is null
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "SSLException",
+        args = {java.lang.String.class, java.lang.Throwable.class}
+    )
+    public void testSSLException07() {
+        SSLException sE = new SSLException(null, tCause);
+        if (sE.getMessage() != null) {
+            String toS = tCause.toString();
+            String getM = sE.getMessage();
+            assertTrue("getMessage() must should ".concat(toS), (getM
+                    .indexOf(toS) != -1));
+        }
+        assertNotNull("getCause() must not return null", sE.getCause());
+        assertEquals("getCause() must return ".concat(tCause.toString()), sE
+                .getCause(), tCause);
+    }
+
+    /**
+     * Test for <code>SSLException(String, Throwable)</code> constructor
+     * Assertion: constructs SSLException when <code>cause</code> is not
+     * null <code>msg</code> is not null
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "SSLException",
+        args = {java.lang.String.class, java.lang.Throwable.class}
+    )
+    public void testSSLException08() {
+        SSLException sE;
+        for (int i = 0; i < msgs.length; i++) {
+            sE = new SSLException(msgs[i], tCause);
+            String getM = sE.getMessage();
+            String toS = tCause.toString();
+            if (msgs[i].length() > 0) {
+                assertTrue("getMessage() must contain ".concat(msgs[i]), getM
+                        .indexOf(msgs[i]) != -1);
+                if (!getM.equals(msgs[i])) {
+                    assertTrue("getMessage() should contain ".concat(toS), getM
+                            .indexOf(toS) != -1);
+                }
+            }
+            assertNotNull("getCause() must not return null", sE.getCause());
+            assertEquals("getCause() must return ".concat(tCause.toString()),
+                    sE.getCause(), tCause);
+        }
+    }
+}
\ No newline at end of file
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/SSLHandshakeExceptionTest.java b/x-net/src/test/java/tests/api/javax/net/ssl/SSLHandshakeExceptionTest.java
new file mode 100644
index 0000000..ffc0105
--- /dev/null
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/SSLHandshakeExceptionTest.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed 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 tests.api.javax.net.ssl;
+
+import dalvik.annotation.TestTargetClass;
+import dalvik.annotation.TestTargets;
+import dalvik.annotation.TestLevel;
+import dalvik.annotation.TestTargetNew;
+
+import javax.net.ssl.SSLHandshakeException;
+
+import junit.framework.TestCase;
+
+@TestTargetClass(SSLHandshakeException.class) 
+public class SSLHandshakeExceptionTest extends TestCase {
+    
+    public static void main(String[] args) {
+    }
+
+    /**
+     * Constructor for SSLHandshakeExceptionTest.
+     * 
+     * @param arg0
+     */
+    public SSLHandshakeExceptionTest(String arg0) {
+        super(arg0);
+    }
+
+    private static String[] msgs = {
+            "",
+            "Check new message",
+            "Check new message Check new message Check new message Check new message Check new message" };
+    
+    
+    /**
+     * Test for <code>SSLHandshakeException(String)</code> constructor Assertion:
+     * constructs SSLHandshakeException with detail message msg. Parameter
+     * <code>msg</code> is not null.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "SSLHandshakeException",
+        args = {java.lang.String.class}
+    )
+    public void test_Constructor01() {
+        SSLHandshakeException sslE;
+        for (int i = 0; i < msgs.length; i++) {
+            sslE = new SSLHandshakeException(msgs[i]);
+            assertEquals("getMessage() must return: ".concat(msgs[i]), sslE.getMessage(), msgs[i]);
+            assertNull("getCause() must return null", sslE.getCause());
+        }
+    }
+    
+    /**
+     * Test for <code>SSLHandshakeException(String)</code> constructor Assertion:
+     * constructs SSLHandshakeException with detail message msg. Parameter
+     * <code>msg</code> is null.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "SSLHandshakeException",
+        args = {java.lang.String.class}
+    )
+    public void test_Constructor02() {
+        String msg = null;
+        SSLHandshakeException sslE = new SSLHandshakeException(msg);
+        assertNull("getMessage() must return null.", sslE.getMessage());
+        assertNull("getCause() must return null", sslE.getCause());
+    }
+}
\ No newline at end of file
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/SSLKeyExceptionTest.java b/x-net/src/test/java/tests/api/javax/net/ssl/SSLKeyExceptionTest.java
new file mode 100644
index 0000000..a890dbd
--- /dev/null
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/SSLKeyExceptionTest.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed 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 tests.api.javax.net.ssl;
+
+import dalvik.annotation.TestTargetClass;
+import dalvik.annotation.TestTargets;
+import dalvik.annotation.TestLevel;
+import dalvik.annotation.TestTargetNew;
+
+import javax.net.ssl.SSLKeyException;
+
+import junit.framework.TestCase;
+
+@TestTargetClass(SSLKeyException.class) 
+public class SSLKeyExceptionTest extends TestCase {
+    
+    public static void main(String[] args) {
+    }
+
+    /**
+     * Constructor for SSLKeyExceptionTest.
+     * 
+     * @param arg0
+     */
+    public SSLKeyExceptionTest(String arg0) {
+        super(arg0);
+    }
+
+    private static String[] msgs = {
+            "",
+            "Check new message",
+            "Check new message Check new message Check new message Check new message Check new message" };
+    
+    
+    /**
+     * Test for <code>SSLKeyException(String)</code> constructor Assertion:
+     * constructs SSLKeyException with detail message msg. Parameter
+     * <code>msg</code> is not null.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "SSLKeyException",
+        args = {java.lang.String.class}
+    )
+    public void test_Constructor01() {
+        SSLKeyException skE;
+        for (int i = 0; i < msgs.length; i++) {
+            skE = new SSLKeyException(msgs[i]);
+            assertEquals("getMessage() must return: ".concat(msgs[i]), skE.getMessage(), msgs[i]);
+            assertNull("getCause() must return null", skE.getCause());
+        }
+    }
+    
+    /**
+     * Test for <code>SSLPeerUnverifiedException(String)</code> constructor Assertion:
+     * constructs SSLPeerUnverifiedException with detail message msg. Parameter
+     * <code>msg</code> is null.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "SSLKeyException",
+        args = {java.lang.String.class}
+    )
+    public void test_Constructor02() {
+        String msg = null;
+        SSLKeyException skE = new SSLKeyException(msg);
+        assertNull("getMessage() must return null.", skE.getMessage());
+        assertNull("getCause() must return null", skE.getCause());
+    }
+}
\ No newline at end of file
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/SSLPeerUnverifiedExceptionTest.java b/x-net/src/test/java/tests/api/javax/net/ssl/SSLPeerUnverifiedExceptionTest.java
new file mode 100644
index 0000000..7fdd0b7
--- /dev/null
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/SSLPeerUnverifiedExceptionTest.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed 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 tests.api.javax.net.ssl;
+
+import dalvik.annotation.TestTargetClass;
+import dalvik.annotation.TestTargets;
+import dalvik.annotation.TestLevel;
+import dalvik.annotation.TestTargetNew;
+
+import javax.net.ssl.SSLPeerUnverifiedException;
+
+import junit.framework.TestCase;
+
+@TestTargetClass(SSLPeerUnverifiedException.class) 
+public class SSLPeerUnverifiedExceptionTest extends TestCase {
+    
+    public static void main(String[] args) {
+    }
+
+    /**
+     * Constructor for SSLPeerUnverifiedExceptionTest.
+     * 
+     * @param arg0
+     */
+    public SSLPeerUnverifiedExceptionTest(String arg0) {
+        super(arg0);
+    }
+
+    private static String[] msgs = {
+            "",
+            "Check new message",
+            "Check new message Check new message Check new message Check new message Check new message" };
+    
+    
+    /**
+     * Test for <code>SSLPeerUnverifiedException(String)</code> constructor Assertion:
+     * constructs SSLPeerUnverifiedException with detail message msg. Parameter
+     * <code>msg</code> is not null.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "SSLPeerUnverifiedException",
+        args = {java.lang.String.class}
+    )
+    public void test_Constructor01() {
+        SSLPeerUnverifiedException sslE;
+        for (int i = 0; i < msgs.length; i++) {
+            sslE = new SSLPeerUnverifiedException(msgs[i]);
+            assertEquals("getMessage() must return: ".concat(msgs[i]), sslE.getMessage(), msgs[i]);
+            assertNull("getCause() must return null", sslE.getCause());
+        }
+    }
+    
+    /**
+     * Test for <code>SSLPeerUnverifiedException(String)</code> constructor Assertion:
+     * constructs SSLPeerUnverifiedException with detail message msg. Parameter
+     * <code>msg</code> is null.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "SSLPeerUnverifiedException",
+        args = {java.lang.String.class}
+    )
+    public void test_Constructor02() {
+        String msg = null;
+        SSLPeerUnverifiedException sslE = new SSLPeerUnverifiedException(msg);
+        assertNull("getMessage() must return null.", sslE.getMessage());
+        assertNull("getCause() must return null", sslE.getCause());
+    }
+}
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/SSLPermissionTest.java b/x-net/src/test/java/tests/api/javax/net/ssl/SSLPermissionTest.java
index 79eca96..4da9553 100644
--- a/x-net/src/test/java/tests/api/javax/net/ssl/SSLPermissionTest.java
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/SSLPermissionTest.java
@@ -18,9 +18,8 @@
 package tests.api.javax.net.ssl;
 
 import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestInfo;
 import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTarget;
+import dalvik.annotation.TestTargetNew;
 
 import javax.net.ssl.SSLPermission;
 import junit.framework.TestCase;
@@ -36,19 +35,21 @@
     /*
      * Class under test for void SSLPermission(String)
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "Null parameter checking missed",
-      targets = {
-        @TestTarget(
-          methodName = "SSLPermission",
-          methodArgs = {String.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "SSLPermission",
+        args = {String.class}
+    )
     public void test_ConstructorLjava_lang_String() {
         try {
             SSLPermission p = new SSLPermission("name");
             assertEquals("Incorrect permission name", "name", p.getName());
+            try {
+                p = new SSLPermission(null);
+            } catch (NullPointerException npe) {
+                //expected
+            }
         } catch (Exception e) {
             fail("Unexpected exception " + e.toString());
         }
@@ -57,21 +58,33 @@
     /*
      * Class under test for void SSLPermission(String, String)
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "Null parameters checking missed",
-      targets = {
-        @TestTarget(
-          methodName = "SSLPermission",
-          methodArgs = {String.class, String.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "SSLPermission",
+        args = {String.class, String.class}
+    )
     public void test_ConstructorLjava_lang_StringLjava_lang_String() {
         try {
             SSLPermission p = new SSLPermission("name", "value");
             assertEquals("Incorrect permission name", "name", p.getName());
             assertEquals("Incorrect default permission actions",
                     "", p.getActions());
+            try {
+                p = new SSLPermission(null, "value");
+            } catch (NullPointerException npe) {
+                //expected
+            }
+            try {
+                p = new SSLPermission("name", null);
+            } catch (NullPointerException npe) {
+                //expected
+            }
+            try {
+                p = new SSLPermission(null, null);
+            } catch (NullPointerException npe) {
+                //expected
+            }
         } catch (Exception e) {
             fail("Unexpected exception " + e.toString());
         }
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/SSLProtocolExceptionTest.java b/x-net/src/test/java/tests/api/javax/net/ssl/SSLProtocolExceptionTest.java
new file mode 100644
index 0000000..e73a525
--- /dev/null
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/SSLProtocolExceptionTest.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed 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 tests.api.javax.net.ssl;
+
+import dalvik.annotation.TestTargetClass;
+import dalvik.annotation.TestTargets;
+import dalvik.annotation.TestLevel;
+import dalvik.annotation.TestTargetNew;
+
+import javax.net.ssl.SSLProtocolException;
+
+import junit.framework.TestCase;
+
+@TestTargetClass(SSLProtocolException.class) 
+public class SSLProtocolExceptionTest extends TestCase {
+    
+    public static void main(String[] args) {
+    }
+
+    /**
+     * Constructor for SSLProtocolExceptionTest.
+     * 
+     * @param arg0
+     */
+    public SSLProtocolExceptionTest(String arg0) {
+        super(arg0);
+    }
+
+    private static String[] msgs = {
+            "",
+            "Check new message",
+            "Check new message Check new message Check new message Check new message Check new message" };
+    
+    
+    /**
+     * Test for <code>SSLProtocolException(String)</code> constructor Assertion:
+     * constructs SSLProtocolException with detail message msg. Parameter
+     * <code>msg</code> is not null.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "SSLProtocolException",
+        args = {java.lang.String.class}
+    )
+    public void test_Constructor01() {
+        SSLProtocolException sslE;
+        for (int i = 0; i < msgs.length; i++) {
+            sslE = new SSLProtocolException(msgs[i]);
+            assertEquals("getMessage() must return: ".concat(msgs[i]), sslE.getMessage(), msgs[i]);
+            assertNull("getCause() must return null", sslE.getCause());
+        }
+    }
+    
+    /**
+     * Test for <code>SSLProtocolException(String)</code> constructor Assertion:
+     * constructs SSLProtocolException with detail message msg. Parameter
+     * <code>msg</code> is null.
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "SSLProtocolException",
+        args = {java.lang.String.class}
+    )
+    public void test_Constructor02() {
+        String msg = null;
+        SSLProtocolException sslE = new SSLProtocolException(msg);
+        assertNull("getMessage() must return null.", sslE.getMessage());
+        assertNull("getCause() must return null", sslE.getCause());
+    }
+}
\ No newline at end of file
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/SSLServerSocketFactoryTest.java b/x-net/src/test/java/tests/api/javax/net/ssl/SSLServerSocketFactoryTest.java
index e823410..a702d56 100644
--- a/x-net/src/test/java/tests/api/javax/net/ssl/SSLServerSocketFactoryTest.java
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/SSLServerSocketFactoryTest.java
@@ -5,7 +5,7 @@
  * 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
+ *     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,
@@ -13,13 +13,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package tests.api.javax.net.ssl;
 
 import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestInfo;
+import dalvik.annotation.TestTargets;
 import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTarget;
+import dalvik.annotation.TestTargetNew;
 
 import java.io.IOException;
 import java.net.InetAddress;
@@ -86,18 +85,16 @@
     /**
      * @tests javax.net.ssl.SSLServerSocketFactory#SSLServerSocketFactory()
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "SSLServerSocketFactory",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "SSLServerSocketFactory",
+        args = {}
+    )
     public void test_Constructor() {
         try {
-            new MockSSLServerSocketFactory();
+            MockSSLServerSocketFactory ssf = new MockSSLServerSocketFactory();
+            assertTrue(ssf instanceof SSLServerSocketFactory);
         } catch (Exception e) {
             fail("Unexpected exception " + e.toString());
         }
@@ -106,17 +103,50 @@
     /**
      * @tests javax.net.ssl.SSLServerSocketFactory#getDefault()
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getDefault",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getDefault",
+        args = {}
+    )
     public void test_getDefault() {
         assertNotNull("Incorrect default socket factory",
                 SSLServerSocketFactory.getDefault());
     }
+    
+    /**
+     * @tests javax.net.ssl.SSLServerSocketFactory#getDefaultCipherSuites()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getDefaultCipherSuites",
+        args = {}
+    )
+    public void test_getDefaultCipherSuites() {
+        MockSSLServerSocketFactory ssf = new MockSSLServerSocketFactory();
+        try {
+             assertNull(ssf.getDefaultCipherSuites());
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLServerSocketFactory#getSupportedCipherSuites()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getSupportedCipherSuites",
+        args = {}
+    )
+    public void test_getSupportedCipherSuites() {
+        MockSSLServerSocketFactory ssf = new MockSSLServerSocketFactory();
+        try {
+             assertNull(ssf.getSupportedCipherSuites());
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+    }
 }
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/SSLServerSocketTest.java b/x-net/src/test/java/tests/api/javax/net/ssl/SSLServerSocketTest.java
new file mode 100644
index 0000000..4007d92
--- /dev/null
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/SSLServerSocketTest.java
@@ -0,0 +1,570 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed 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 tests.api.javax.net.ssl;
+
+import dalvik.annotation.TestTargetClass;
+import dalvik.annotation.TestLevel;
+import dalvik.annotation.TestTargetNew;
+import dalvik.annotation.TestTargets;
+
+import javax.net.ssl.*;
+
+import java.net.*;
+import java.io.*;
+import java.lang.String;
+
+import junit.framework.TestCase;
+
+import tests.support.Support_PortManager;
+
+@TestTargetClass(SSLServerSocket.class) 
+public class SSLServerSocketTest extends TestCase {
+
+    /**
+     * Additional class for SSLServerSocket constructor verification
+     */
+    class mySSLServerSocket extends SSLServerSocket {
+
+        private boolean sslFlag = true;
+        private boolean sslNeed = false;
+        private boolean sslWant = false;
+        private boolean sslMode = true;
+        private String[] supportProtocol = null;
+        private String[] supportSuites = null;
+        
+        public mySSLServerSocket(String[] protocols, String[] suites) throws IOException {
+            super();
+            supportProtocol = protocols;
+            supportSuites = suites;            
+        }
+        public mySSLServerSocket() throws IOException{
+            super();
+        }
+        public mySSLServerSocket(int port) throws IOException{
+            super(port);
+        }
+        public mySSLServerSocket(int port, int backlog) throws IOException{
+            super(port, backlog);
+        }
+        public mySSLServerSocket(int port, int backlog, InetAddress address) throws IOException{
+            super(port, backlog, address);
+        }
+        
+        public String[] getSupportedCipherSuites() {
+            if (supportSuites == null) {
+                throw new NullPointerException();
+            }
+            if (supportSuites.length == 0) {
+                return null;
+            } else return supportSuites;
+        }
+        public void setEnabledCipherSuites(String[] suites) {
+            if (suites == null) {
+                throw new IllegalArgumentException("null parameter");
+            }
+            if (!suites.equals(supportSuites)) {
+                throw new IllegalArgumentException("incorrect suite");
+            }
+        }
+        public String[] getEnabledCipherSuites() {
+            return supportSuites;
+        }
+        
+        public String[] getSupportedProtocols() {
+            if (supportProtocol == null) {
+                throw new NullPointerException();
+            }
+            if (supportProtocol.length == 0) {
+                return null;
+            } else return supportProtocol;
+        }
+        public String[] getEnabledProtocols() {
+            return supportProtocol;
+        }
+        public void setEnabledProtocols(String[] protocols) {
+            if (protocols == null) {
+                throw new IllegalArgumentException("null protocol");
+            }
+            if (!protocols.equals(supportProtocol)) {
+                throw new IllegalArgumentException("incorrect protocol");
+            }
+        }
+        
+        public void setEnableSessionCreation(boolean flag) {
+            sslFlag = flag;
+        }
+        public boolean getEnableSessionCreation() {
+            return sslFlag;
+        }
+        
+        public void setNeedClientAuth(boolean need) {
+            sslNeed = need;
+        }
+        public boolean getNeedClientAuth() {
+            return sslNeed;
+        }
+        
+        public boolean getUseClientMode() {
+            return sslMode;
+        }
+        public void setUseClientMode(boolean mode) {
+            sslMode = mode;
+        }
+        
+        public boolean getWantClientAuth() {
+            return sslWant;
+        }
+        public void setWantClientAuth(boolean mode) {
+            sslWant = mode;
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLServerSocket#SSLServerSocket() 
+     */
+    @TestTargetNew(
+        level = TestLevel.SUFFICIENT,
+        notes = "IOException wasn't implemented",
+        method = "SSLServerSocket",
+        args = {}
+    )
+    public void testConstructor_01() {
+        try {
+            mySSLServerSocket ssl = new mySSLServerSocket();
+            assertNotNull(ssl);
+            assertTrue(ssl instanceof SSLServerSocket);
+        } catch (Exception ex) {
+            fail("Unexpected exception was thrown " + ex);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLServerSocket#SSLServerSocket(int port) 
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "SSLServerSocket",
+        args = {int.class}
+    )
+    public void testConstructor_02() {
+        mySSLServerSocket ssl;
+        int portNumber = Support_PortManager.getNextPort();
+        int[] port_invalid = {-1, 65536, Integer.MIN_VALUE, Integer.MAX_VALUE};
+        
+        try {
+            ssl = new mySSLServerSocket(portNumber);
+            assertNotNull(ssl);
+            assertEquals(portNumber, ssl.getLocalPort());
+        } catch (Exception ex) {
+            fail("Unexpected exception was thrown " + ex);
+        }
+        
+        for (int i = 0; i < port_invalid.length; i++) {
+            try {
+                ssl = new mySSLServerSocket(port_invalid[i]);
+                fail("IllegalArgumentException should be thrown");
+            } catch (IllegalArgumentException iae) {
+                //expected
+            } catch (Exception e) {
+                fail(e + " was thrown instead of IllegalArgumentException");
+            }
+        }
+        
+        try {
+            ssl = new mySSLServerSocket(portNumber);
+            new mySSLServerSocket(portNumber);
+        } catch (IOException ioe) {
+        } catch (Exception ex) {
+            fail("Unexpected exception was thrown " + ex);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLServerSocket#SSLServerSocket(int port, int backlog) 
+     */
+    @TestTargetNew(
+        level = TestLevel.SUFFICIENT,
+        notes = "Invalid values for backlog weren't checked",
+        method = "SSLServerSocket",
+        args = {int.class, int.class}
+    )
+    public void testConstructor_03() {
+        mySSLServerSocket ssl;
+        int portNumber = Support_PortManager.getNextPort();
+        int[] port_invalid = {-1, Integer.MIN_VALUE, Integer.MAX_VALUE};
+        
+        try {
+            ssl = new mySSLServerSocket(portNumber, 1);
+            assertNotNull(ssl);
+            assertEquals(portNumber, ssl.getLocalPort());
+        } catch (Exception ex) {
+            fail("Unexpected exception was thrown");
+        }
+        
+        for (int i = 0; i < port_invalid.length; i++) {
+            try {
+                ssl = new mySSLServerSocket(port_invalid[i], 1);
+                fail("IllegalArgumentException should be thrown");
+            } catch (IllegalArgumentException iae) {
+            } catch (Exception e) {
+                fail(e + " was thrown instead of IllegalArgumentException");
+            }
+        }
+        
+        portNumber = Support_PortManager.getNextPort();
+        try {
+            ssl = new mySSLServerSocket(portNumber, 1);
+            new mySSLServerSocket(portNumber, 1);
+            fail("IOException should be thrown");
+        } catch (IOException ioe) {
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLServerSocket#SSLServerSocket(int port, int backlog, InetAddress address) 
+     */
+    @TestTargetNew(
+        level = TestLevel.SUFFICIENT,
+        notes = "Invalid values for backlog weren\'t checked",
+        method = "SSLServerSocket",
+        args = {int.class, int.class, InetAddress.class}
+    )
+    public void testConstructor_04() {
+        mySSLServerSocket ssl;
+        InetAddress ia = null;
+        int portNumber = Support_PortManager.getNextPort();
+        int[] port_invalid = {-1, 65536, Integer.MIN_VALUE, Integer.MAX_VALUE};
+        
+        try {
+            ssl = new mySSLServerSocket(portNumber, 0, ia);
+            assertNotNull(ssl);
+            assertEquals(portNumber, ssl.getLocalPort());
+        } catch (Exception ex) {
+            fail("Unexpected exception was thrown");
+        }
+        
+        portNumber = Support_PortManager.getNextPort();
+        try {
+            ssl = new mySSLServerSocket(portNumber, 0, InetAddress.getLocalHost());
+            assertNotNull(ssl);
+            assertEquals(portNumber, ssl.getLocalPort());
+        } catch (Exception ex) {
+            fail("Unexpected exception was thrown");
+        }
+       
+        for (int i = 0; i < port_invalid.length; i++) {
+            try {
+                ssl = new mySSLServerSocket(port_invalid[i], 1, InetAddress.getLocalHost());
+                fail("IllegalArgumentException should be thrown");
+            } catch (IllegalArgumentException iae) {
+            } catch (Exception e) {
+                fail(e + " was thrown instead of IllegalArgumentException");
+            }
+        }
+        
+        portNumber = Support_PortManager.getNextPort();
+        try {
+           ssl = new mySSLServerSocket(portNumber, 0, InetAddress.getLocalHost());
+           new mySSLServerSocket(portNumber, 0, InetAddress.getLocalHost());
+           fail("IOException should be thrown for");
+        } catch (IOException ioe) {
+        }
+    } 
+    
+    /**
+     * @tests javax.net.ssl.SSLServerSocket#getSupportedCipherSuites()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getSupportedCipherSuites",
+        args = {}
+    )
+    public void test_getSupportedCipherSuites() {
+        String[] pr = {"Suite_1", "Suite_2", "Suite_3"};
+        try {
+            mySSLServerSocket sss = new mySSLServerSocket();
+            try {
+                sss.getSupportedCipherSuites();
+            } catch (NullPointerException npe) {
+                //expected
+            }
+            sss = new mySSLServerSocket(null, pr);
+            try {
+                sss.getSupportedCipherSuites();
+            } catch (NullPointerException npe) {
+                //expected
+            }
+            sss = new mySSLServerSocket(new String[0], new String[0]);
+            assertNull("Not NULL result", sss.getSupportedCipherSuites());
+            sss = new mySSLServerSocket(null, pr);
+            String[] res = sss.getSupportedCipherSuites();
+            assertNotNull("NULL result", res);
+            if (!res.equals(pr)) {
+                fail("Returned result was incorrect");
+            }
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLServerSocket#getEnabledCipherSuites()
+     * @tests javax.net.ssl.SSLServerSocket#setEnabledCipherSuites(String[] suites)
+     */
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "getEnabledCipherSuites",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "setEnabledCipherSuites",
+            args = {String[].class}
+        )
+    }) 
+    public void test_EnabledCipherSuites() {
+        String[] pr1 = {"Suite_1", "Suite_2", "Suite_3"};
+        String[] pr2 = {"Suite_1", "Suite_2"};
+        try {
+            mySSLServerSocket sss = new mySSLServerSocket(null, pr1);
+            try {
+                sss.setEnabledCipherSuites(null);
+            } catch (IllegalArgumentException iae) {
+                //expected
+            }
+            try {
+                sss.setEnabledCipherSuites(pr2);
+            } catch (IllegalArgumentException iae) {
+                //expected
+            }
+            sss.setEnabledCipherSuites(pr1);
+            String[] res = sss.getEnabledCipherSuites();
+            assertNotNull("NULL result", res);
+            if (!res.equals(pr1)) {
+                fail("Returned result was incorrect");
+            }
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLServerSocket#getSupportedProtocols()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getSupportedProtocols",
+        args = {}
+    )
+    public void test_getSupportedProtocols() {
+        String[] pr = {"Protocol_1", "Protocol_2", "Protocol_3"};
+        try {
+            mySSLServerSocket sss = new mySSLServerSocket();
+            try {
+                sss.getSupportedProtocols();
+            } catch (NullPointerException npe) {
+                //expected
+            }
+            sss = new mySSLServerSocket(null, null);
+            try {
+                sss.getSupportedProtocols();
+            } catch (NullPointerException npe) {
+                //expected
+            }
+            sss = new mySSLServerSocket(new String[0], null);
+            assertNull("Not NULL result", sss.getSupportedProtocols());
+            sss = new mySSLServerSocket(pr, null);
+            String[] res = sss.getSupportedProtocols();
+            assertNotNull("NULL result", res);
+            if (!res.equals(pr)) {
+                fail("Returned result was incorrect");
+            }
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLServerSocket#getEnabledProtocols()
+     * @tests javax.net.ssl.SSLServerSocket#setEnabledProtocols(String[] protocols)
+     */
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "setEnabledProtocols",
+            args = {String[].class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "getEnabledProtocols",
+            args = {}
+        )
+    }) 
+    public void test_EnabledProtocols() {
+        String[] pr1 = {"Protocol_1", "Protocol_2", "Protocol_3"};
+        String[] pr2 = {"Protocol_1", "Protocol_2"};
+        try {
+            mySSLServerSocket sss = new mySSLServerSocket(pr1, null);
+            try {
+                sss.setEnabledProtocols(null);
+            } catch (IllegalArgumentException iae) {
+                //expected
+            }
+            try {
+                sss.setEnabledProtocols(pr2);
+            } catch (IllegalArgumentException iae) {
+                //expected
+            }
+            sss.setEnabledProtocols(pr1);
+            String[] res = sss.getEnabledProtocols();
+            assertNotNull("NULL result", res);
+            if (!res.equals(pr1)) {
+                fail("Returned result was incorrect");
+            }
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLServerSocket#setEnableSessionCreation(boolean flag) 
+     * @tests javax.net.ssl.SSLServerSocket#getEnableSessionCreation()
+     */
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "getEnableSessionCreation",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "setEnableSessionCreation",
+            args = {boolean.class}
+        )
+    })
+    public void test_EnableSessionCreation() {
+        try {
+            mySSLServerSocket sss = new mySSLServerSocket();
+            assertTrue(sss.getEnableSessionCreation());
+            sss.setEnableSessionCreation(false);
+            assertFalse(sss.getEnableSessionCreation());
+            sss.setEnableSessionCreation(true);
+            assertTrue(sss.getEnableSessionCreation());
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLServerSocket#setNeedClientAuth(boolean need) 
+     * @tests javax.net.ssl.SSLServerSocket#getNeedClientAuthCreation()
+     */
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "setNeedClientAuth",
+            args = {boolean.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "getNeedClientAuth",
+            args = {}
+        )
+    })
+    public void test_NeedClientAuth() {
+        try {
+            mySSLServerSocket sss = new mySSLServerSocket();
+            sss.setNeedClientAuth(true);
+            assertTrue(sss.getNeedClientAuth());
+            sss.setNeedClientAuth(false);
+            assertFalse(sss.getNeedClientAuth());
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLServerSocket#getUseClientMode()
+     * @tests javax.net.ssl.SSLServerSocket#setUseClientMode(boolean mode)
+     */
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "getUseClientMode",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "setUseClientMode",
+            args = {boolean.class}
+        )
+    })
+    public void test_UseClientMode() {
+        try {
+            mySSLServerSocket sss = new mySSLServerSocket();
+            sss.setUseClientMode(false);
+            assertFalse(sss.getUseClientMode());
+            sss.setUseClientMode(true);
+            assertTrue(sss.getUseClientMode());
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLServerSocket#setWantClientAuth(boolean want) 
+     * @tests javax.net.ssl.SSLServerSocket#getWantClientAuthCreation()
+     */
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "getWantClientAuth",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "setWantClientAuth",
+            args = {boolean.class}
+        )
+    })
+    public void test_WantClientAuth() {
+        try {
+            mySSLServerSocket sss = new mySSLServerSocket();
+            sss.setWantClientAuth(true);
+            assertTrue(sss.getWantClientAuth());
+            sss.setWantClientAuth(false);
+            assertFalse(sss.getWantClientAuth());
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+    }
+}
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/SSLSessionBindingEventTest.java b/x-net/src/test/java/tests/api/javax/net/ssl/SSLSessionBindingEventTest.java
index 9dc64cc..f95c941 100644
--- a/x-net/src/test/java/tests/api/javax/net/ssl/SSLSessionBindingEventTest.java
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/SSLSessionBindingEventTest.java
@@ -18,9 +18,9 @@
 package tests.api.javax.net.ssl;
 
 import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestInfo;
+import dalvik.annotation.TestTargets;
 import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTarget;
+import dalvik.annotation.TestTargetNew;
 
 import java.security.Principal;
 import java.security.cert.Certificate;
@@ -40,38 +40,50 @@
 @TestTargetClass(SSLSessionBindingEvent.class) 
 public class SSLSessionBindingEventTest extends TestCase {
 
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "Null parameters checking missed",
-      targets = {
-        @TestTarget(
-          methodName = "SSLSessionBindingEvent",
-          methodArgs = {SSLSession.class, String.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "SSLSessionBindingEvent",
+        args = {javax.net.ssl.SSLSession.class, java.lang.String.class}
+    )
     public final void test_ConstructorLjavax_net_ssl_SSLSessionLjava_lang_String() {
         SSLSession ses = new MySSLSession();
-        SSLSessionBindingEvent event = new SSLSessionBindingEvent(ses, "test");
-        if (!"test".equals(event.getName())) {
-            fail("incorrect name");
+        
+        try {
+            SSLSessionBindingEvent event = new SSLSessionBindingEvent(ses, "test");
+            if (!"test".equals(event.getName())) {
+                fail("incorrect name");
+            }
+            if (!event.getSession().equals(ses)) {
+                fail("incorrect session");
+            }
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
         }
-        if (!event.getSession().equals(ses)) {
-            fail("incorrect session");
+        
+        try {
+            SSLSessionBindingEvent event = new SSLSessionBindingEvent(null, "test");
+            fail("IllegalArgumentException expected");
+        } catch (IllegalArgumentException e) {
+          // expected
+        }
+        
+        try {
+            SSLSessionBindingEvent event = new SSLSessionBindingEvent(ses, null);
+        } catch (IllegalArgumentException e) {
+          fail("Unexpected IllegalArgumentException: " + e);
         }
     }
 
     /**
      * @tests javax.net.ssl.SSLSessionBindingEvent#getName()
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getName",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getName",
+        args = {}
+    )
     public void test_getName() {
         SSLSession ses = new MySSLSession();
         SSLSessionBindingEvent event = new SSLSessionBindingEvent(ses, "test");
@@ -83,15 +95,12 @@
     /**
      * @tests javax.net.ssl.SSLSessionBindingEvent#getSession()
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getSession",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getSession",
+        args = {}
+    )
     public void test_getSession() {
         SSLSession ses = new MySSLSession();
         SSLSessionBindingEvent event = new SSLSessionBindingEvent(ses, "test");
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/SSLSessionBindingListenerTest.java b/x-net/src/test/java/tests/api/javax/net/ssl/SSLSessionBindingListenerTest.java
new file mode 100644
index 0000000..c640bd5
--- /dev/null
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/SSLSessionBindingListenerTest.java
@@ -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 tests.api.javax.net.ssl;
+
+import dalvik.annotation.TestTargetClass;
+import dalvik.annotation.TestLevel;
+import dalvik.annotation.TestTargetNew;
+
+import javax.net.ssl.SSLSessionBindingEvent;
+import javax.net.ssl.SSLSessionBindingListener;
+
+import org.apache.harmony.xnet.tests.support.mySSLSession;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for SSLSessionBindingListener class
+ * 
+ */
+@TestTargetClass(SSLSessionBindingListener.class) 
+public class SSLSessionBindingListenerTest extends TestCase {
+    
+    public class mySSLSessionBindingListener implements SSLSessionBindingListener {
+        
+        private boolean boundDone = false;
+        private boolean unboundDone = false;
+        
+        mySSLSessionBindingListener() {
+        }
+        
+        public void valueBound(SSLSessionBindingEvent event) {
+            if (event != null) boundDone = true;
+        }
+        public void valueUnbound(SSLSessionBindingEvent event) {
+            if (event != null) unboundDone = true;
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSessionBindingListener#valueBound(SSLSessionBindingEvent event)
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "valueBound",
+        args = {SSLSessionBindingEvent.class}
+    )
+    public void test_valueBound() {
+        mySSLSession ss = new mySSLSession("localhost", 1080, null);
+        mySSLSessionBindingListener sbl = new mySSLSessionBindingListener();
+        SSLSessionBindingEvent event = new SSLSessionBindingEvent(ss, "Name_01");
+        try {
+            sbl.valueBound(event);
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSessionBindingListener#valueUnbound(SSLSessionBindingEvent event)
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "valueUnbound",
+        args = {SSLSessionBindingEvent.class}
+    )
+    public void test_valueUnbound() {
+        mySSLSession ss = new mySSLSession("localhost", 1080, null);
+        mySSLSessionBindingListener sbl = new mySSLSessionBindingListener();
+        SSLSessionBindingEvent event = new SSLSessionBindingEvent(ss, "Name_01");
+        try {
+            sbl.valueUnbound(event);
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e);
+        }
+    }
+
+}
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/SSLSessionContextTest.java b/x-net/src/test/java/tests/api/javax/net/ssl/SSLSessionContextTest.java
new file mode 100644
index 0000000..293f5b1
--- /dev/null
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/SSLSessionContextTest.java
@@ -0,0 +1,132 @@
+package tests.api.javax.net.ssl;
+
+import dalvik.annotation.TestTargets;
+import dalvik.annotation.TestLevel;
+import dalvik.annotation.TestTargetNew;
+import dalvik.annotation.TestTargetClass;
+
+import junit.framework.TestCase;
+
+import javax.net.ssl.SSLSessionContext;
+import org.apache.harmony.xnet.tests.support.SSLSessionContextImpl;
+   
+/**
+ * Tests for <code>SSLSessionContext</code> class constructors and methods.
+ */
+@TestTargetClass(SSLSessionContext.class) 
+public class SSLSessionContextTest extends TestCase {
+    
+    /**
+     * @tests javax.net.ssl.SSLSessionContex#getSessionCacheSize()
+     * @tests javax.net.ssl.SSLSessionContex#setSessionCacheSize(int size)
+     */
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "getSessionCacheSize",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "setSessionCacheSize",
+            args = {int.class}
+        )
+    })
+    public final void test_sessionCacheSize() {
+        SSLSessionContextImpl sc = new SSLSessionContextImpl();
+        try {
+            assertEquals("0 wasn't returned", 0, sc.getSessionCacheSize());
+            sc.setSessionCacheSize(10);
+            assertEquals("10 wasn't returned", 10, sc.getSessionCacheSize());
+            sc.setSessionCacheSize(5);
+            assertEquals("5 wasn't returned", 5, sc.getSessionCacheSize());
+        } catch (Exception e) {
+            fail("Unexpected exception");
+        }
+        
+        try {
+            sc.setSessionCacheSize(-1);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iae) {
+            //expected
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSessionContex#getSessionTimeout()
+     * @tests javax.net.ssl.SSLSessionContex#setSessionTimeout(int seconds)
+     */
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "getSessionTimeout",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "setSessionTimeout",
+            args = {int.class}
+        )
+    })
+    public final void test_sessionTimeout() {
+        SSLSessionContextImpl sc = new SSLSessionContextImpl();
+        try {
+            assertEquals("0 wasn't returned", 0, sc.getSessionTimeout());
+            sc.setSessionTimeout(100);
+            assertEquals("100 wasn't returned", 100, sc.getSessionTimeout());
+            sc.setSessionTimeout(5000);
+            assertEquals("5000 wasn't returned", 5000, sc.getSessionTimeout());
+        } catch (Exception e) {
+            fail("Unexpected exception");
+        }
+        
+        try {
+            sc.setSessionTimeout(-1);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iae) {
+            //expected
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSessionContex#getSession(byte[] sessionId)
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getSession",
+        args = {byte[].class}
+    )
+    public final void test_getSession() {
+        SSLSessionContextImpl sc = new SSLSessionContextImpl();
+        try {
+            assertNull(sc.getSession(null));
+            assertNull(sc.getSession(new byte[5]));
+        } catch (Exception e) {
+            fail("Unexpected exception");
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSessionContex#getIds()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getIds",
+        args = {}
+    )
+    public final void test_getIds() {
+        SSLSessionContextImpl sc = new SSLSessionContextImpl();
+        try {
+            assertNull(sc.getIds());
+        } catch (Exception e) {
+            fail("Unexpected exception");
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/SSLSessionTest.java b/x-net/src/test/java/tests/api/javax/net/ssl/SSLSessionTest.java
new file mode 100644
index 0000000..123998d
--- /dev/null
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/SSLSessionTest.java
@@ -0,0 +1,482 @@
+/*
+ *  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 tests.api.javax.net.ssl;
+
+import dalvik.annotation.TestTargetClass;
+import dalvik.annotation.TestTargets;
+import dalvik.annotation.TestLevel;
+import dalvik.annotation.TestTargetNew;
+
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.SSLPeerUnverifiedException;
+import javax.net.ssl.SSLSessionBindingListener;
+import javax.net.ssl.SSLSessionBindingEvent;
+
+import java.io.ByteArrayInputStream;
+import java.security.cert.Certificate;
+import javax.security.cert.X509Certificate;
+
+import junit.framework.TestCase;
+
+import org.apache.harmony.xnet.tests.support.mySSLSession;
+
+/**
+ * Tests for SSLSession class
+ * 
+ */
+@TestTargetClass(SSLSession.class) 
+public class SSLSessionTest extends TestCase {
+    
+    String certificate = "-----BEGIN CERTIFICATE-----\n"
+        + "MIICZTCCAdICBQL3AAC2MA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMSAw\n"
+        + "HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjEuMCwGA1UECxMlU2VjdXJl\n"
+        + "IFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NzAyMjAwMDAwMDBa\n"
+        + "Fw05ODAyMjAyMzU5NTlaMIGWMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZv\n"
+        + "cm5pYTESMBAGA1UEBxMJUGFsbyBBbHRvMR8wHQYDVQQKExZTdW4gTWljcm9zeXN0\n"
+        + "ZW1zLCBJbmMuMSEwHwYDVQQLExhUZXN0IGFuZCBFdmFsdWF0aW9uIE9ubHkxGjAY\n"
+        + "BgNVBAMTEWFyZ29uLmVuZy5zdW4uY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB\n"
+        + "iQKBgQCofmdY+PiUWN01FOzEewf+GaG+lFf132UpzATmYJkA4AEA/juW7jSi+LJk\n"
+        + "wJKi5GO4RyZoyimAL/5yIWDV6l1KlvxyKslr0REhMBaD/3Z3EsLTTEf5gVrQS6sT\n"
+        + "WMoSZAyzB39kFfsB6oUXNtV8+UKKxSxKbxvhQn267PeCz5VX2QIDAQABMA0GCSqG\n"
+        + "SIb3DQEBAgUAA34AXl3at6luiV/7I9MN5CXYoPJYI8Bcdc1hBagJvTMcmlqL2uOZ\n"
+        + "H9T5hNMEL9Tk6aI7yZPXcw/xI2K6pOR/FrMp0UwJmdxX7ljV6ZtUZf7pY492UqwC\n"
+        + "1777XQ9UEZyrKJvF5ntleeO0ayBqLGVKCWzWZX9YsXCpv47FNLZbupE=\n"
+        + "-----END CERTIFICATE-----\n";
+    
+
+    /**
+     * @tests javax.net.ssl.SSLSession#getPeerHost()
+     * @tests javax.net.ssl.SSLSession#getPeerPort()
+     */
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "getPeerHost",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "getPeerPort",
+            args = {}
+        )
+    })
+    public void test_getPeerHost() {
+        mySSLSession s = new mySSLSession("localhost", 1080, null);
+        try {
+            assertEquals(s.getPeerHost(), "localhost");
+            assertEquals(s.getPeerPort(), 1080);
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSession#invalidate()
+     * @tests javax.net.ssl.SSLSession#isValid()
+     */
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "invalidate",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "isValid",
+            args = {}
+        )
+    })
+    public void test_invalidate() {
+        mySSLSession s = new mySSLSession("localhost", 1080, null);
+        try {
+            assertFalse(s.isValid());
+            s.invalidate();
+            assertTrue(s.isValid());
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSession#getPeerPrincipal()
+     */
+    @TestTargetNew(
+        level = TestLevel.SUFFICIENT,
+        notes = "Exception wasn't implemented in the interface's class",
+        method = "getPeerPrincipal",
+        args = {}
+    )
+    public void test_getPeerPrincipal() {
+        mySSLSession s = new mySSLSession("localhost", 1080, null);
+        try {
+            assertNull(s.getPeerPrincipal());
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSession#getApplicationBufferSize()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getApplicationBufferSize",
+        args = {}
+    )
+    public void test_getApplicationBufferSize() {
+        mySSLSession s = new mySSLSession("localhost", 1080, null);
+        try {
+            assertEquals(s.getApplicationBufferSize(), 1234567);
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSession#getCipherSuite()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getCipherSuite",
+        args = {}
+    )
+    public void test_getCipherSuite() {
+        mySSLSession s = new mySSLSession("localhost", 1080, null);
+        try {
+            assertEquals(s.getCipherSuite(), "SuiteName");
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSession#getCreationTime()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getCreationTime",
+        args = {}
+    )
+    public void test_getCreationTime() {
+        mySSLSession s = new mySSLSession("localhost", 1080, null);
+        try {
+            assertEquals(s.getCreationTime(), 1000l);
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSession#getId()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getId",
+        args = {}
+    )
+    public void test_getId() {
+        byte[] data = {5, 10, 15};
+        mySSLSession s = new mySSLSession("localhost", 1080, data);
+        try {
+            assertEquals(s.getId(), data);
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSession#getLastAccessedTime()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getLastAccessedTime",
+        args = {}
+    )
+    public void test_getLastAccessedTime() {
+        mySSLSession s = new mySSLSession("localhost", 1080, null);
+        try {
+            assertEquals(s.getLastAccessedTime(), 2000l);
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSession#getLocalCertificates()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getLocalCertificates",
+        args = {}
+    )
+    public void test_getLocalCertificates() {
+        mySSLSession s = new mySSLSession("localhost", 1080, null);
+        try {
+            assertNull(s.getLocalCertificates());
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSession#getLocalPrincipal()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getLocalPrincipal",
+        args = {}
+    )
+    public void test_getLocalPrincipal() {
+        mySSLSession s = new mySSLSession("localhost", 1080, null);
+        try {
+            assertNull(s.getLocalPrincipal());
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSession#getPacketBufferSize()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getPacketBufferSize",
+        args = {}
+    )
+    public void test_getPacketBufferSize() {
+        mySSLSession s = new mySSLSession("localhost", 1080, null);
+        try {
+            assertEquals(s.getPacketBufferSize(), 12345);
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSession#getPeerCertificates()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getPeerCertificates",
+        args = {}
+    )
+    public void test_getPeerCertificates() {
+        mySSLSession s = new mySSLSession("localhost", 1080, null);
+        try {
+            Certificate[] res = s.getPeerCertificates();
+            fail("SSLPeerUnverifiedException wasn't thrown");
+        } catch (SSLPeerUnverifiedException pue) {
+            //expected
+        }
+        s = new mySSLSession(null);
+        try {
+            Certificate[] res = s.getPeerCertificates();
+            assertEquals(res.length, 3);
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSession#getPeerCertificateChain()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getPeerCertificateChain",
+        args = {}
+    )
+    public void test_getPeerCertificateChain() {
+        ByteArrayInputStream bis = new ByteArrayInputStream(certificate.getBytes());
+        mySSLSession s = new mySSLSession("localhost", 1080, null);
+        try {
+            X509Certificate[] resN = s.getPeerCertificateChain();
+            fail("SSLPeerUnverifiedException wasn't thrown");
+        } catch (SSLPeerUnverifiedException pue) {
+            //expected
+        }
+        try {
+            X509Certificate xc = X509Certificate.getInstance(bis);
+            X509Certificate[] xcs = {xc};
+            s = new mySSLSession(xcs);
+        } catch (Exception e) {
+            fail(e + " was thrown for configuration");
+        }
+        try {
+            X509Certificate[] res = s.getPeerCertificateChain();
+            assertEquals(res.length, 1);
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSession#getProtocol()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getProtocol",
+        args = {}
+    )
+    public void test_getProtocol() {
+        mySSLSession s = new mySSLSession("localhost", 1080, null);
+        try {
+            assertEquals(s.getProtocol(), "ProtocolName");
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSession#getSessionContext()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getSessionContext",
+        args = {}
+    )
+    public void test_getSessionContext() {
+        mySSLSession s = new mySSLSession("localhost", 1080, null);
+        try {
+            assertNull(s.getSessionContext());
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSession#putValue(String name, Object value)
+     * @tests javax.net.ssl.SSLSession#removeValue(String name)
+     * @tests javax.net.ssl.SSLSession#getValueNames()
+     */
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "putValue",
+            args = {String.class, Object.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "removeValue",
+            args = {String.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "getValueNames",
+            args = {}
+        )
+    })
+    public void test_putValue() {
+        mySSLSession s = new mySSLSession("localhost", 1080, null);
+        mySSLSessionBindingListener sbl = new mySSLSessionBindingListener();
+        try {
+            assertNotNull(s.getValueNames());
+            assertEquals(s.getValueNames().length, 0);
+            s.putValue("Name_01", sbl);
+            s.putValue("Name_02", sbl);
+            s.putValue("Name_03", sbl);
+            assertEquals(s.getValueNames().length, 3);
+            s.removeValue("Name_01");
+            assertEquals(s.getValueNames().length, 2);
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e);
+        }
+        
+        try {
+            s.putValue(null, null);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iae) {
+            //expected
+        }
+        try {
+            s.putValue("ABC", null);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iae) {
+            //expected
+        }
+        try {
+            s.putValue(null, sbl);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iae) {
+            //expected
+        }
+        
+        try {
+            s.removeValue(null);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iae) {
+            //expected
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSession#getValue(String name)
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getValue",
+        args = {String.class}
+    )
+    public void test_getValue() {
+        mySSLSession s = new mySSLSession("localhost", 1080, null);
+        mySSLSessionBindingListener sbl = new mySSLSessionBindingListener();
+        
+        try {
+            s.getValue(null);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iae) {
+            //expected
+        }
+        
+        try {
+            s.putValue("Name", sbl);
+            Object obj = s.getValue("Name");
+            assertTrue(obj instanceof SSLSessionBindingListener);
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e);
+        }
+    }
+    
+    public class mySSLSessionBindingListener implements SSLSessionBindingListener {
+        mySSLSessionBindingListener() {
+        }
+        public void valueBound(SSLSessionBindingEvent event) {}
+        public void valueUnbound(SSLSessionBindingEvent event) {}
+    }
+
+
+}
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/SSLSocketFactoryTest.java b/x-net/src/test/java/tests/api/javax/net/ssl/SSLSocketFactoryTest.java
index d9846a8..18b507e 100644
--- a/x-net/src/test/java/tests/api/javax/net/ssl/SSLSocketFactoryTest.java
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/SSLSocketFactoryTest.java
@@ -5,7 +5,7 @@
  * 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
+ *     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,
@@ -13,16 +13,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package tests.api.javax.net.ssl;
 
 import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestInfo;
 import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTarget;
+import dalvik.annotation.TestTargetNew;
 
 import java.io.IOException;
-import java.net.InetAddress;
+import java.net.ServerSocket;
 import java.net.Socket;
 import java.net.UnknownHostException;
 
@@ -30,93 +28,37 @@
 
 import junit.framework.TestCase;
 
+import org.apache.harmony.xnet.tests.support.SSLSocketFactoryImpl;
+
+import tests.support.Support_PortManager;
+
 @TestTargetClass(SSLSocketFactory.class) 
 public class SSLSocketFactoryTest extends TestCase {
-
-    private class MockSSLSocketFactory extends SSLSocketFactory {
-        public MockSSLSocketFactory() {
-            super();
-        }
-
-        /**
-         * @see javax.net.ssl.SSLSocketFactory#createSocket(java.net.Socket, java.lang.String, int, boolean)
-         */
-        @Override
-        public Socket createSocket(Socket s, String host, int port, boolean autoClose) throws IOException {
-            // it is a fake
-            return null;
-        }
-
-        /**
-         * @see javax.net.ssl.SSLSocketFactory#getDefaultCipherSuites()
-         */
-        @Override
-        public String[] getDefaultCipherSuites() {
-            // it is a fake
-            return null;
-        }
-
-        /**
-         * @see javax.net.ssl.SSLSocketFactory#getSupportedCipherSuites()
-         */
-        @Override
-        public String[] getSupportedCipherSuites() {
-            // it is a fake
-            return null;
-        }
-
-        /**
-         * @see javax.net.SocketFactory#createSocket(java.lang.String, int)
-         */
-        @Override
-        public Socket createSocket(String arg0, int arg1) throws IOException, UnknownHostException {
-            // it is a fake
-            return null;
-        }
-
-        /**
-         * @see javax.net.SocketFactory#createSocket(java.net.InetAddress, int)
-         */
-        @Override
-        public Socket createSocket(InetAddress arg0, int arg1) throws IOException {
-            // it is a fake
-            return null;
-        }
-
-        /**
-         * @see javax.net.SocketFactory#createSocket(java.lang.String, int, java.net.InetAddress, int)
-         */
-        @Override
-        public Socket createSocket(String arg0, int arg1, InetAddress arg2, int arg3) throws IOException, UnknownHostException {
-            // it is a fake
-            return null;
-        }
-
-        /**
-         * @see javax.net.SocketFactory#createSocket(java.net.InetAddress, int, java.net.InetAddress, int)
-         */
-        @Override
-        public Socket createSocket(InetAddress arg0, int arg1, InetAddress arg2, int arg3) throws IOException {
-            // it is a fake
-            return null;
-        }
-    }
     
+    protected int startServer(String name) {
+        int portNumber = Support_PortManager.getNextPort();
+        ServerSocket ss = null;
+        try {
+            ss = new ServerSocket(portNumber);
+        } catch (IOException e) {
+            fail(name + ": " + e);
+        }
+        return ss.getLocalPort();
+    }
+
     /**
      * @tests javax.net.ssl.SSLSocketFactory#SSLSocketFactory()
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "SSLSocketFactory",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "SSLSocketFactory",
+        args = {}
+    )
     public void test_Constructor() {
         try {
-            new MockSSLSocketFactory();
+            SSLSocketFactoryImpl sf = new SSLSocketFactoryImpl();
+            assertTrue(sf instanceof SSLSocketFactory);
         } catch (Exception e) {
             fail("Unexpected exception " + e.toString());
         }
@@ -125,17 +67,103 @@
     /**
      * @tests javax.net.ssl.SSLSocketFactory#getDefault()
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getDefault",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getDefault",
+        args = {}
+    )
     public void test_getDefault() {
         assertNotNull("Incorrect default socket factory",
                 SSLSocketFactory.getDefault());
     }
+    
+    /**
+     * @tests javax.net.ssl.SSLSocketFactory#createSocket(Socket s, String host, int port, boolean autoClose)
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "createSocket",
+        args = {java.net.Socket.class, java.lang.String.class, int.class, boolean.class}
+    )
+    public void test_createSocket() {
+        SSLSocketFactoryImpl sf = new SSLSocketFactoryImpl();
+        int sport = startServer("test_createSocket()");
+        int[] invalid = {Integer.MIN_VALUE, -1, 65536, Integer.MAX_VALUE};
+        String[] str = {null, ""};
+        try {
+           Socket s = sf.createSocket(new Socket(), "localhost", sport, false);
+           assertFalse(s.isClosed());
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex);
+        }
+        try {
+            Socket s = sf.createSocket(new Socket(), "localhost", sport, true);
+            assertTrue(s.isClosed());
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex);
+        }
+        try {
+            Socket s = sf.createSocket(null, "localhost", sport, true);
+            fail("IOException wasn't thrown");
+        } catch (IOException ioe) {
+            //expected
+        }
+        for (int i = 0; i < invalid.length; i++) {
+            try {
+                Socket s = sf.createSocket(new Socket(), "localhost", invalid[i], false);
+                fail("IOException wasn't thrown");
+            } catch (IOException ioe) {
+                //expected
+            }
+        }
+        for (int i = 0; i < str.length; i++) {
+            try {
+                Socket s = sf.createSocket(new Socket(), str[i], sport, false);
+                fail("UnknownHostException wasn't thrown");
+            } catch (UnknownHostException uhe) {
+                //expected
+            } catch (Exception e) {
+                fail(e + " was thrown instead of UnknownHostException");
+            }
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSocketFactory#getDefaultCipherSuites()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getDefaultCipherSuites",
+        args = {}
+    )
+    public void test_getDefaultCipherSuites() {
+        try {
+            SSLSocketFactoryImpl sf = new SSLSocketFactoryImpl();
+            assertNull(sf.getDefaultCipherSuites());
+        } catch (Exception e) {
+            fail("Unexpected exception " + e.toString());
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSocketFactory#getSupportedCipherSuites()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getSupportedCipherSuites",
+        args = {}
+    )
+    public void test_getSupportedCipherSuites() {
+        try {
+            SSLSocketFactoryImpl sf = new SSLSocketFactoryImpl();
+            assertNull(sf.getSupportedCipherSuites());
+        } catch (Exception e) {
+            fail("Unexpected exception " + e.toString());
+        }
+    }
+    
 }
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/SSLSocketTest.java b/x-net/src/test/java/tests/api/javax/net/ssl/SSLSocketTest.java
new file mode 100644
index 0000000..31b19fd
--- /dev/null
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/SSLSocketTest.java
@@ -0,0 +1,707 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed 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 tests.api.javax.net.ssl;
+
+import dalvik.annotation.TestTargetClass;
+import dalvik.annotation.TestTargets;
+import dalvik.annotation.TestLevel;
+import dalvik.annotation.TestTargetNew;
+
+import javax.net.ssl.*;
+import java.net.*;
+import java.lang.String;
+import java.lang.IllegalStateException;
+import java.io.IOException;
+
+
+import junit.framework.TestCase;
+import org.apache.harmony.xnet.tests.support.mySSLSocket;
+
+import tests.support.Support_PortManager;
+
+@TestTargetClass(SSLSocket.class) 
+public class SSLSocketTest extends TestCase {
+
+    public class HandshakeCL implements HandshakeCompletedListener {
+        HandshakeCL() {
+            super();
+        }
+        public void handshakeCompleted(HandshakeCompletedEvent event) {
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSocket#SSLSocket() 
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "SSLSocket",
+        args = {}
+    )
+    public void testConstructor_01() {
+        try {
+            mySSLSocket ssl = new mySSLSocket();
+            assertNotNull(ssl);
+            assertTrue(ssl instanceof SSLSocket);
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSocket#SSLSocket(InetAddress address, int port) 
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "SSLSocket",
+        args = {java.net.InetAddress.class, int.class}
+    )
+    public void testConstructor_02() {
+        mySSLSocket ssl;
+        int sport = startServer("Cons InetAddress,I");
+        int[] invalidPort = {-1, Integer.MIN_VALUE, 65536, Integer.MAX_VALUE};
+        
+        try {
+            ssl = new mySSLSocket(InetAddress.getLocalHost(), sport);
+            assertNotNull(ssl);
+            assertEquals(sport, ssl.getPort());
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e);
+        }
+        
+        try {
+            ssl = new mySSLSocket(InetAddress.getLocalHost(), 8081);
+            fail("IOException wasn't thrown ...");
+        } catch (IOException e) {
+            //expected
+        }
+        
+        for (int i = 0; i < invalidPort.length; i++) {
+            try {
+                ssl = new mySSLSocket(InetAddress.getLocalHost(), invalidPort[i]);
+                fail("IllegalArgumentException wasn't thrown for " + invalidPort[i]);
+            } catch (IllegalArgumentException iae) {
+            } catch (Exception e) {
+                fail(e + " was thrown instead of IllegalArgumentException for " + invalidPort[i]);
+            }
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSocket#SSLSocket(InetAddress address, int port, 
+     *                                          InetAddress clientAddress, int clientPort) 
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "SSLSocket",
+        args = {java.net.InetAddress.class, int.class, java.net.InetAddress.class, int.class}
+    )
+    public void testConstructor_03() {
+        mySSLSocket ssl;
+        int sport = startServer("Cons InetAddress,I,InetAddress,I");
+        int portNumber = Support_PortManager.getNextPort();
+        int[] invalidPort = {-1, Integer.MIN_VALUE, 65536, Integer.MAX_VALUE};
+        
+        try {
+            ssl = new mySSLSocket(InetAddress.getLocalHost(), sport,
+                                  InetAddress.getLocalHost(), portNumber);
+            assertNotNull(ssl);
+            assertEquals(sport, ssl.getPort());
+            assertEquals(portNumber, ssl.getLocalPort());
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e);
+        }
+        
+        try {
+            ssl = new mySSLSocket(InetAddress.getLocalHost(), 8081, InetAddress.getLocalHost(), 8082);
+            fail("IOException wasn't thrown ...");
+        } catch (IOException e) {
+            //expected
+        }
+        
+        for (int i = 0; i < invalidPort.length; i++) {
+            try {
+                ssl = new mySSLSocket(InetAddress.getLocalHost(), invalidPort[i],
+                                      InetAddress.getLocalHost(), portNumber);
+                fail("IllegalArgumentException wasn't thrown for " + invalidPort[i]);
+            } catch (IllegalArgumentException iae) {
+            } catch (Exception e) {
+                fail(e + " was thrown instead of IllegalArgumentException for " + invalidPort[i]);
+            }
+            try {
+                ssl = new mySSLSocket(InetAddress.getLocalHost(), sport,
+                                      InetAddress.getLocalHost(), invalidPort[i]);
+                fail("IllegalArgumentException wasn't thrown for " + invalidPort[i]);
+            } catch (IllegalArgumentException iae) {
+            } catch (Exception e) {
+                fail(e + " was thrown instead of IllegalArgumentException for " + invalidPort[i]);
+            }
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSocket#SSLSocket(String host, int port) 
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "SSLSocket",
+        args = {java.lang.String.class, int.class}
+    )
+    public void testConstructor_04() {
+        mySSLSocket ssl;
+        int sport = startServer("Cons String,I");
+        int[] invalidPort = {-1, Integer.MIN_VALUE, 65536, Integer.MAX_VALUE};
+        
+        try {
+            ssl = new mySSLSocket(InetAddress.getLocalHost().getHostName(), sport);
+            assertNotNull(ssl);
+            assertEquals(sport, ssl.getPort());
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e);
+        }
+        
+        try {
+            ssl = new mySSLSocket("localhost", 8082);
+            fail("IOException wasn't thrown ...");
+        } catch (IOException e) {
+            //expected
+        }
+        
+        for (int i = 0; i < invalidPort.length; i++) {
+            try {
+                ssl = new mySSLSocket(InetAddress.getLocalHost().getHostName(), invalidPort[i]);
+                fail("IllegalArgumentException wasn't thrown for " + invalidPort[i]);
+            } catch (IllegalArgumentException iae) {
+            } catch (Exception e) {
+                fail(e + " was thrown instead of IllegalArgumentException for " + invalidPort[i]);
+            }
+        }
+        
+        try {
+            ssl = new mySSLSocket("bla-bla", sport);
+            fail("UnknownHostException wasn't thrown");
+        } catch (UnknownHostException uhp) {
+        } catch (Exception e) {
+            fail(e + " was thrown instead of UnknownHostException");
+        }
+    } 
+    
+    /**
+     * @tests javax.net.ssl.SSLSocket#SSLSocket(String host, int port, InetAddress clientAddress, 
+     *           int clientPort) 
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "SSLSocket",
+        args = {java.lang.String.class, int.class, java.net.InetAddress.class, int.class}
+    )
+    public void testConstructor_05() {
+        mySSLSocket ssl;
+        int sport = startServer("Cons String,I,InetAddress,I");
+        int portNumber = Support_PortManager.getNextPort();
+        int[] invalidPort = {-1, Integer.MIN_VALUE, 65536, Integer.MAX_VALUE};
+        
+        try {
+            ssl = new mySSLSocket(InetAddress.getLocalHost().getHostName(), sport,
+                                  InetAddress.getLocalHost(), portNumber);
+            assertNotNull(ssl);
+            assertEquals(sport, ssl.getPort());
+            assertEquals(portNumber, ssl.getLocalPort());
+        } catch (Exception e) {
+            fail("Unexpected exception: " + e);
+        }
+        
+        try {
+            ssl = new mySSLSocket("localhost", 8081, InetAddress.getLocalHost(), 8082);
+            fail("IOException wasn't thrown ...");
+        } catch (IOException e) {
+            //expected
+        }
+        
+        for (int i = 0; i < invalidPort.length; i++) {
+            portNumber = Support_PortManager.getNextPort();
+            try {
+                ssl = new mySSLSocket(InetAddress.getLocalHost().getHostName(), invalidPort[i],
+                                      InetAddress.getLocalHost(), portNumber);
+                fail("IllegalArgumentException wasn't thrown for " + invalidPort[i]);
+            } catch (IllegalArgumentException iae) {
+            } catch (Exception e) {
+                fail(e + " was thrown instead of IllegalArgumentException for " + invalidPort[i]);
+            }
+            try {
+                ssl = new mySSLSocket(InetAddress.getLocalHost().getHostName(), sport,
+                                      InetAddress.getLocalHost(), invalidPort[i]);
+                fail("IllegalArgumentException wasn't thrown for " + invalidPort[i]);
+            } catch (IllegalArgumentException iae) {
+            } catch (Exception e) {
+                fail(e + " was thrown instead of IllegalArgumentException for " + invalidPort[i]);
+            }
+        }
+        
+        portNumber = Support_PortManager.getNextPort();
+        try {
+            ssl = new mySSLSocket("bla-bla", sport, InetAddress.getLocalHost(), portNumber);
+            fail("UnknownHostException wasn't thrown");
+        } catch (UnknownHostException uhp) {
+        } catch (Exception e) {
+            fail(e + " was thrown instead of UnknownHostException");
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSocket#addHandshakeCompletedListener(HandshakeCompletedListener listener) 
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "addHandshakeCompletedListener",
+        args = {javax.net.ssl.HandshakeCompletedListener.class}
+    )
+    public void test_addHandshakeCompletedListener() {
+        mySSLSocket ssl = new mySSLSocket();
+        HandshakeCompletedListener ls = new HandshakeCL();
+        try {
+            ssl.addHandshakeCompletedListener(null);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iae) {
+            //expected
+        }
+        try {
+            ssl.addHandshakeCompletedListener(ls);
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSocket#removeHandshakeCompletedListener(HandshakeCompletedListener listener) 
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "removeHandshakeCompletedListener",
+        args = {javax.net.ssl.HandshakeCompletedListener.class}
+    )
+    public void test_removeHandshakeCompletedListener() {
+        mySSLSocket ssl = new mySSLSocket();
+        HandshakeCompletedListener ls = new HandshakeCL();
+        try {
+            ssl.removeHandshakeCompletedListener(null);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iae) {
+            //expected
+        }
+        try {
+            ssl.removeHandshakeCompletedListener(ls);
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSocket#setEnableSessionCreation(boolean flag) 
+     * @tests javax.net.ssl.SSLSocket#getEnableSessionCreation()
+     */
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "getEnableSessionCreation",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "setEnableSessionCreation",
+            args = {boolean.class}
+        )
+    })
+    public void test_EnableSessionCreation() {
+        mySSLSocket ssl = new mySSLSocket();
+        try {
+            assertTrue(ssl.getEnableSessionCreation());
+            ssl.setEnableSessionCreation(false);
+            assertFalse(ssl.getEnableSessionCreation());
+            ssl.setEnableSessionCreation(true);
+            assertTrue(ssl.getEnableSessionCreation());
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSocket#setNeedClientAuth(boolean need) 
+     * @tests javax.net.ssl.SSLSocket#getNeedClientAuthCreation()
+     */
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "setNeedClientAuth",
+            args = {boolean.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "getNeedClientAuth",
+            args = {}
+        )
+    })
+    public void test_NeedClientAuth() {
+        mySSLSocket ssl = new mySSLSocket(1);
+        try {
+            try {
+                ssl.setNeedClientAuth(true);
+                fail("IllegalStateException wasn't thrown");
+            } catch (IllegalStateException ise) {
+                //expected
+            }
+            
+            try {
+                ssl.getNeedClientAuth();
+                fail("IllegalStateException wasn't thrown");
+            } catch (IllegalStateException ise) {
+                //expected
+            }
+            ssl = new mySSLSocket(0);
+            ssl.setNeedClientAuth(true);
+            assertTrue(ssl.getNeedClientAuth());
+            ssl.setNeedClientAuth(false);
+            assertFalse(ssl.getNeedClientAuth());
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSocket#setWantClientAuth(boolean want) 
+     * @tests javax.net.ssl.SSLSocket#getWantClientAuthCreation()
+     */
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "setWantClientAuth",
+            args = {boolean.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "getWantClientAuth",
+            args = {}
+        )
+    })
+    public void test_WantClientAuth() {
+        mySSLSocket ssl = new mySSLSocket(1);
+        try {
+            try {
+                ssl.setWantClientAuth(true);
+                fail("IllegalStateException wasn't thrown");
+            } catch (IllegalStateException ise) {
+                //expected
+            }
+            
+            try {
+                ssl.getWantClientAuth();
+                fail("IllegalStateException wasn't thrown");
+            } catch (IllegalStateException ise) {
+                //expected
+            }
+            ssl = new mySSLSocket(0);
+            ssl.setWantClientAuth(true);
+            assertTrue(ssl.getWantClientAuth());
+            ssl.setWantClientAuth(false);
+            assertFalse(ssl.getWantClientAuth());
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSocket#getSupportedProtocols()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getSupportedProtocols",
+        args = {}
+    )
+    public void test_getSupportedProtocols() {
+        String[] pr = {"Protocol_1", "Protocol_2", "Protocol_3"};
+        mySSLSocket ssl = new mySSLSocket();
+        try {
+            try {
+                ssl.getSupportedProtocols();
+            } catch (NullPointerException npe) {
+                //expected
+            }
+            ssl = new mySSLSocket(null, null);
+            try {
+                ssl.getSupportedProtocols();
+            } catch (NullPointerException npe) {
+                //expected
+            }
+            ssl = new mySSLSocket(new String[0], null);
+            assertNull("Not NULL result", ssl.getSupportedProtocols());
+            ssl = new mySSLSocket(pr, null);
+            String[] res = ssl.getSupportedProtocols();
+            assertNotNull("NULL result", res);
+            if (!res.equals(pr)) {
+                fail("Returned result was incorrect");
+            }
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSocket#getEnabledProtocols()
+     * @tests javax.net.ssl.SSLSocket#setEnabledProtocols(String[] protocols)
+     */
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "setEnabledProtocols",
+            args = {java.lang.String[].class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "getEnabledProtocols",
+            args = {}
+        )
+    })
+    public void test_EnabledProtocols() {
+        String[] pr1 = {"Protocol_1", "Protocol_2", "Protocol_3"};
+        String[] pr2 = {"Protocol_1", "Protocol_2"};
+        mySSLSocket ssl = new mySSLSocket(pr1, null);
+        try {
+            try {
+                ssl.setEnabledProtocols(null);
+            } catch (IllegalArgumentException iae) {
+                //expected
+            }
+            try {
+                ssl.setEnabledProtocols(pr2);
+            } catch (IllegalArgumentException iae) {
+                //expected
+            }
+            ssl.setEnabledProtocols(pr1);
+            String[] res = ssl.getEnabledProtocols();
+            assertNotNull("NULL result", res);
+            if (!res.equals(pr1)) {
+                fail("Returned result was incorrect");
+            }
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSocket#getSession()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getSession",
+        args = {}
+    )
+    public void test_getSession() {
+        mySSLSocket ssl = new mySSLSocket();
+        try {
+            assertNull(ssl.getSession());
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSocket#getSupportedCipherSuites()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getSupportedCipherSuites",
+        args = {}
+    )
+    public void test_getSupportedCipherSuites() {
+        String[] pr = {"Suite_1", "Suite_2", "Suite_3"};
+        mySSLSocket ssl = new mySSLSocket();
+        try {
+            try {
+                ssl.getSupportedCipherSuites();
+            } catch (NullPointerException npe) {
+                //expected
+            }
+            ssl = new mySSLSocket(null, null);
+            try {
+                ssl.getSupportedCipherSuites();
+            } catch (NullPointerException npe) {
+                //expected
+            }
+            ssl = new mySSLSocket(new String[0], new String[0]);
+            assertNull("Not NULL result", ssl.getSupportedCipherSuites());
+            ssl = new mySSLSocket(null, pr);
+            String[] res = ssl.getSupportedCipherSuites();
+            assertNotNull("NULL result", res);
+            if (!res.equals(pr)) {
+                fail("Returned result was incorrect");
+            }
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSocket#getEnabledCipherSuites()
+     * @tests javax.net.ssl.SSLSocket#setEnabledCipherSuites(String[] suites)
+     */
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "getEnabledCipherSuites",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "setEnabledCipherSuites",
+            args = {java.lang.String[].class}
+        )
+    })
+    public void test_EnabledCipherSuites() {
+        String[] pr1 = {"Suite_1", "Suite_2", "Suite_3"};
+        String[] pr2 = {"Suite_1", "Suite_2"};
+        mySSLSocket ssl = new mySSLSocket(null, pr1);
+        try {
+            try {
+                ssl.setEnabledCipherSuites(null);
+            } catch (IllegalArgumentException iae) {
+                //expected
+            }
+            try {
+                ssl.setEnabledCipherSuites(pr2);
+            } catch (IllegalArgumentException iae) {
+                //expected
+            }
+            ssl.setEnabledCipherSuites(pr1);
+            String[] res = ssl.getEnabledCipherSuites();
+            assertNotNull("NULL result", res);
+            if (!res.equals(pr1)) {
+                fail("Returned result was incorrect");
+            }
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSocket#getUseClientMode()
+     * @tests javax.net.ssl.SSLSocket#setUseClientMode(boolean mode)
+     */
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "getUseClientMode",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            notes = "",
+            method = "setUseClientMode",
+            args = {boolean.class}
+        )
+    })
+    public void test_UseClientMode() {
+        String[] pr = {"Protocol_1", "Protocol_3"};
+        mySSLSocket ssl = new mySSLSocket(0, pr, null);
+        try {
+            assertFalse(ssl.getUseClientMode());
+            ssl.setUseClientMode(true);
+            assertTrue(ssl.getUseClientMode());
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+        ssl = new mySSLSocket(1, pr, null);
+        try {
+            assertTrue(ssl.getUseClientMode());
+            ssl.setUseClientMode(false);
+            assertFalse(ssl.getUseClientMode());
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+        try {
+            ssl.startHandshake();
+            ssl.setUseClientMode(false);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iae) {
+            //expected
+        } catch (IOException ioe) {
+            fail(ioe + " was thrown for method startHandshake()");
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalArgumentException");
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.SSLSocket#startHandshake()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "startHandshake",
+        args = {}
+    )
+    public void test_startHandshake() {
+        String[] pr = {"Protocol_1", "Protocol_3"};
+        String[] pr1 = {"Protocol_1", "Protocol_3", "Protocol_2"};
+        mySSLSocket ssl = new mySSLSocket(pr, null);
+        try {
+            ssl.startHandshake();
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+        ssl = new mySSLSocket(pr1, null);
+        try {
+            ssl.startHandshake();
+            fail("IOException wasn't thrown");
+        } catch (IOException ioe) {
+            //expected
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IOException");
+        }
+    }
+    
+    protected int startServer(String name) {
+        int portNumber = Support_PortManager.getNextPort();
+        ServerSocket ss = null;
+        try {
+            ss = new ServerSocket(portNumber);
+        } catch (IOException e) {
+            fail(name + ": " + e);
+        }
+        return ss.getLocalPort();
+    }
+}
+
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/TrustManagerFactory1Test.java b/x-net/src/test/java/tests/api/javax/net/ssl/TrustManagerFactory1Test.java
index 2dd2523..001b02f 100644
--- a/x-net/src/test/java/tests/api/javax/net/ssl/TrustManagerFactory1Test.java
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/TrustManagerFactory1Test.java
@@ -18,9 +18,9 @@
 package tests.api.javax.net.ssl;
 
 import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestInfo;
 import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTarget;
+import dalvik.annotation.TestTargetNew;
+import dalvik.annotation.KnownFailure;
 
 import java.io.IOException;
 import java.security.InvalidAlgorithmParameterException;
@@ -29,6 +29,7 @@
 import java.security.NoSuchAlgorithmException;
 import java.security.NoSuchProviderException;
 import java.security.Provider;
+import java.security.PublicKey;
 import java.security.Security;
 import java.security.cert.CertificateException;
 
@@ -38,9 +39,19 @@
 import javax.net.ssl.TrustManagerFactorySpi;
 
 import org.apache.harmony.security.tests.support.SpiEngUtils;
+import org.apache.harmony.security.tests.support.TestKeyPair;
 import org.apache.harmony.xnet.tests.support.MyTrustManagerFactorySpi;
 import junit.framework.TestCase;
 
+//
+import java.security.cert.TrustAnchor;
+import java.security.cert.X509CertSelector;
+import java.security.cert.PKIXBuilderParameters;
+import javax.net.ssl.CertPathTrustManagerParameters;
+
+import java.util.HashSet;
+import java.util.Set;
+
 /**
  * Tests for <code>TrustManagerFactory</code> class constructors and methods.
  * 
@@ -103,15 +114,12 @@
      * constructor
      * Assertion: created new TrustManagerFactory object
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "TrustManagerFactory",
-          methodArgs = {TrustManagerFactorySpi.class, Provider.class, String.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "TrustManagerFactory",
+        args = {javax.net.ssl.TrustManagerFactorySpi.class, java.security.Provider.class, java.lang.String.class}
+    )
     public void test_ConstructorLjavax_net_ssl_TrustManagerFactorySpiLjava_security_ProviderLjava_lang_String()
         throws NoSuchAlgorithmException {
         if (!DEFSupported) {
@@ -144,15 +152,12 @@
      * @throws NoSuchAlgorithmException 
      * @throws NoSuchProviderException 
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getAlgorithm",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getAlgorithm",
+        args = {}
+    )
     public void test_getAlgorithm()
         throws NoSuchAlgorithmException, NoSuchProviderException {
         if (!DEFSupported) fail(NotSupportedMsg);
@@ -175,15 +180,12 @@
      *  Test for <code>getDefaultAlgorithm()</code> method
      * Assertion: returns value which is specifoed in security property
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getDefaultAlgorithm",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getDefaultAlgorithm",
+        args = {}
+    )
     public void test_getDefaultAlgorithm() {
         if (!DEFSupported) {
             fail(NotSupportedMsg);
@@ -212,15 +214,12 @@
      * Assertions: returns security property "ssl.TrustManagerFactory.algorithm"; 
      * returns instance of TrustManagerFactory
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL_OK,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class}
+    )
     public void test_getInstanceLjava_lang_String01() throws NoSuchAlgorithmException {
         if (!DEFSupported) {
             fail(NotSupportedMsg);
@@ -242,15 +241,12 @@
      * throws NullPointerException when algorithm is null;
      * throws NoSuchAlgorithmException when algorithm is not correct;
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL_OK,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class}
+    )
     public void test_getInstanceLjava_lang_String02() {
         try {
             TrustManagerFactory.getInstance(null);
@@ -274,15 +270,12 @@
      * Assertion: throws IllegalArgumentException when provider is null
      * or empty
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL_OK,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class, String.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class, java.lang.String.class}
+    )
     public void test_getInstanceLjava_lang_StringLjava_lang_String01() throws NoSuchProviderException,
             NoSuchAlgorithmException {
         if (!DEFSupported) {
@@ -311,15 +304,12 @@
      * throws NullPointerException when algorithm is null;
      * throws NoSuchAlgorithmException when algorithm is not correct;
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL_OK,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class, String.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class, java.lang.String.class}
+    )
     public void test_getInstanceLjava_lang_StringLjava_lang_String02() throws NoSuchProviderException {
         if (!DEFSupported) {
             fail(NotSupportedMsg);
@@ -348,15 +338,12 @@
      * Assertion: throws NoSuchProviderException when provider has
      * invalid value
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL_OK,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class, String.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class, java.lang.String.class}
+    )
     public void test_getInstanceLjava_lang_StringLjava_lang_String03() throws NoSuchAlgorithmException {
         if (!DEFSupported) {
             fail(NotSupportedMsg);
@@ -381,15 +368,12 @@
      * method
      * Assertion: returns instance of TrustManagerFactory
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL_OK,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class, String.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class, java.lang.String.class}
+    )
     public void test_getInstanceLjava_lang_StringLjava_lang_String04() throws NoSuchAlgorithmException,
             NoSuchProviderException {
         if (!DEFSupported) {
@@ -414,15 +398,12 @@
      * method
      * Assertion: throws IllegalArgumentException when provider is null
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL_OK,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class, Provider.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class, java.security.Provider.class}
+    )
     public void test_getInstanceLjava_lang_StringLjava_security_Provider01() throws NoSuchAlgorithmException {
         if (!DEFSupported) {
             fail(NotSupportedMsg);
@@ -445,15 +426,12 @@
      * throws NullPointerException when algorithm is null;
      * throws NoSuchAlgorithmException when algorithm is not correct;
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL_OK,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class, Provider.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class, java.security.Provider.class}
+    )
     public void test_getInstanceLjava_lang_StringLjava_security_Provider02() {
         if (!DEFSupported) {
             fail(NotSupportedMsg);
@@ -481,15 +459,12 @@
      * method
      * Assertion: returns instance of TrustManagerFactory
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL_OK,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class, Provider.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class, java.security.Provider.class}
+    )
     public void test_getInstanceLjava_lang_StringLjava_security_Provider03() throws NoSuchAlgorithmException {
         if (!DEFSupported) {
             fail(NotSupportedMsg);
@@ -513,15 +488,12 @@
      * @throws NoSuchAlgorithmException 
      * @throws NoSuchProviderException 
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getProvider",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getProvider",
+        args = {}
+    )
     public void test_getProvider()
         throws NoSuchAlgorithmException, NoSuchProviderException {
         if (!DEFSupported) fail(NotSupportedMsg);
@@ -547,66 +519,81 @@
      * @throws CertificateException 
      * @throws NoSuchAlgorithmException 
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getTrustManagers",
-          methodArgs = {}
-        )
-    })
-    public void _test_getTrustManagers()
-        throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException {
-        KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
-        ks.load(null, null);            
-        TrustManager[] tm;
-        TrustManagerFactory[] trustMF = createTMFac();
-        assertNotNull("TrustManagerFactory objects were not created", trustMF);
-        for (int i = 0; i < trustMF.length; i++) {
-            try {
-                trustMF[i].init((KeyStore)null);
-            } catch (KeyStoreException e) {
-                fail("Unexpected exception " + e.toString());
-            }
-            trustMF[i].init(ks);
-            tm = trustMF[i].getTrustManagers();
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getTrustManagers",
+        args = {}
+    )
+    public void test_getTrustManagers() {
+        try {
+            TrustManagerFactory trustMF = TrustManagerFactory.getInstance(defaultAlgorithm);
+            KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
+            ks.load(null, null);
+            trustMF.init(ks);
+            TrustManager[] tm = trustMF.getTrustManagers();
             assertNotNull("Result has not be null", tm);
             assertTrue("Length of result TrustManager array should not be 0",
                     (tm.length > 0));
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex.toString());
         }
     }
 
     /**
      * Test for <code>init(KeyStore keyStore)</code>
-     * Assertion: returns not empty TrustManager array
+     * Assertion: call method with null parameter
      */
-    @TestInfo(
-      level = TestLevel.TODO,
-      purpose = "Method init wasn't invoked in this test",
-      targets = {
-        @TestTarget(
-          methodName = "init",
-          methodArgs = {KeyStore.class}
-        )
-    })
-    public void test_initLjava_security_KeyStore() throws NoSuchAlgorithmException,
-            KeyStoreException {
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "init",
+        args = {java.security.KeyStore.class}
+    )
+    @KnownFailure("The RI doesn't throw any exception for null parameter.") 
+    public void test_initLjava_security_KeyStore_01() {
         if (!DEFSupported) {
             fail(NotSupportedMsg);
             return;
         }
-        KeyStore ks;
+        
         KeyStore ksNull = null;
+        TrustManagerFactory[] trustMF = createTMFac();
+        assertNotNull("TrustManagerFactory objects were not created", trustMF);
+        // null parameter
         try {
-            ks = KeyStore.getInstance(KeyStore.getDefaultType());
-            ks.load(null, null);            
-        } catch (KeyStoreException e) {
-            fail(e.toString() + "default KeyStore type is not supported");
+            trustMF[0].init(ksNull);
+        } catch (Exception ex) {
+            fail(ex + " unexpected exception was thrown for null parameter");
+        }
+    }
+    
+    /**
+     * Test for <code>init(KeyStore keyStore)</code>
+     * Assertion: call method with not null parameter
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "init",
+        args = {java.security.KeyStore.class}
+    )
+    public void test_initLjava_security_KeyStore_02() throws KeyStoreException {
+        if (!DEFSupported) {
+            fail(NotSupportedMsg);
             return;
-        } catch (Exception e) {
-            fail("Unexpected: " + e.toString());
-            return;
+        }
+        
+        KeyStore ks;
+        ks = KeyStore.getInstance(KeyStore.getDefaultType());
+        TrustManagerFactory[] trustMF = createTMFac();
+        assertNotNull("TrustManagerFactory objects were not created", trustMF);
+
+        // not null parameter
+        try {
+            trustMF[0].init(ks);
+        } catch (Exception ex) {
+            fail(ex + " unexpected exception was thrown for not null parameter");
         }
     }
 
@@ -615,24 +602,20 @@
      * Assertion:
      * throws InvalidAlgorithmParameterException when params is null
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "InvalidAlgorithmParameterException case was tested only",
-      targets = {
-        @TestTarget(
-          methodName = "init",
-          methodArgs = {ManagerFactoryParameters.class}
-        )
-    })
-    public void test_initLjavax_net_ssl_ManagerFactoryParameters()
-        throws NoSuchAlgorithmException,
-        KeyStoreException, InvalidAlgorithmParameterException  {
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "init",
+        args = {javax.net.ssl.ManagerFactoryParameters.class}
+    )
+    @KnownFailure("ManagerFactoryParameters object is not supported " + 
+                  "and InvalidAlgorithmParameterException was thrown.")
+    public void test_initLjavax_net_ssl_ManagerFactoryParameters() {
         if (!DEFSupported) {
             fail(NotSupportedMsg);
             return;
         }
         ManagerFactoryParameters par = null;
-        ManagerFactoryParameters par1 = new myManagerFactoryParam();
         TrustManagerFactory[] trustMF = createTMFac();
         assertNotNull("TrustManagerFactory objects were not created", trustMF);
         for (int i = 0; i < trustMF.length; i++) {
@@ -641,14 +624,80 @@
                 fail("InvalidAlgorithmParameterException must be thrown");
             } catch (InvalidAlgorithmParameterException e) {
             }
+        }
+        
+        //
+        String keyAlg = "DSA";
+        String validCaNameRfc2253 = "CN=Test CA," +
+                                    "OU=Testing Division," +
+                                    "O=Test It All," +
+                                    "L=Test Town," +
+                                    "ST=Testifornia," +
+                                    "C=Testland";
+
+        try {
+            KeyStore kStore = KeyStore.getInstance(KeyStore.getDefaultType());
+            kStore.load(null, null);     
+            PublicKey pk = new TestKeyPair(keyAlg).getPublic();
+            TrustAnchor ta = new TrustAnchor(validCaNameRfc2253, pk, getFullEncoding());
+            Set<TrustAnchor> trustAnchors = new HashSet<TrustAnchor>();
+            trustAnchors.add(ta);
+            X509CertSelector xcs = new X509CertSelector();
+            PKIXBuilderParameters pkixBP = new PKIXBuilderParameters(trustAnchors, xcs);
+            CertPathTrustManagerParameters cptmp = new CertPathTrustManagerParameters(pkixBP);
+            TrustManagerFactory tmf = TrustManagerFactory.getInstance(defaultAlgorithm);
             try {
-                trustMF[i].init(par1);
-                fail("InvalidAlgorithmParameterException must be thrown");
-            } catch (InvalidAlgorithmParameterException e) {
+                tmf.init(cptmp);
+            } catch (Exception ex) {
+                fail(ex + " was thrown for init(ManagerFactoryParameters spec)");
             }
-        }        
+        } catch (Exception e) {
+            fail("Unexpected exception for configuration: " + e);
+        }
+
     }
 
+    private static final byte[] getFullEncoding() {
+        // DO NOT MODIFY!
+        return new byte[] {
+                (byte)0x30,(byte)0x81,(byte)0x8c,(byte)0xa0,
+                (byte)0x44,(byte)0x30,(byte)0x16,(byte)0x86,
+                (byte)0x0e,(byte)0x66,(byte)0x69,(byte)0x6c,
+                (byte)0x65,(byte)0x3a,(byte)0x2f,(byte)0x2f,
+                (byte)0x66,(byte)0x6f,(byte)0x6f,(byte)0x2e,
+                (byte)0x63,(byte)0x6f,(byte)0x6d,(byte)0x80,
+                (byte)0x01,(byte)0x00,(byte)0x81,(byte)0x01,
+                (byte)0x01,(byte)0x30,(byte)0x16,(byte)0x86,
+                (byte)0x0e,(byte)0x66,(byte)0x69,(byte)0x6c,
+                (byte)0x65,(byte)0x3a,(byte)0x2f,(byte)0x2f,
+                (byte)0x62,(byte)0x61,(byte)0x72,(byte)0x2e,
+                (byte)0x63,(byte)0x6f,(byte)0x6d,(byte)0x80,
+                (byte)0x01,(byte)0x00,(byte)0x81,(byte)0x01,
+                (byte)0x01,(byte)0x30,(byte)0x12,(byte)0x86,
+                (byte)0x0a,(byte)0x66,(byte)0x69,(byte)0x6c,
+                (byte)0x65,(byte)0x3a,(byte)0x2f,(byte)0x2f,
+                (byte)0x6d,(byte)0x75,(byte)0x75,(byte)0x80,
+                (byte)0x01,(byte)0x00,(byte)0x81,(byte)0x01,
+                (byte)0x01,(byte)0xa1,(byte)0x44,(byte)0x30,
+                (byte)0x16,(byte)0x86,(byte)0x0e,(byte)0x68,
+                (byte)0x74,(byte)0x74,(byte)0x70,(byte)0x3a,
+                (byte)0x2f,(byte)0x2f,(byte)0x66,(byte)0x6f,
+                (byte)0x6f,(byte)0x2e,(byte)0x63,(byte)0x6f,
+                (byte)0x6d,(byte)0x80,(byte)0x01,(byte)0x00,
+                (byte)0x81,(byte)0x01,(byte)0x01,(byte)0x30,
+                (byte)0x16,(byte)0x86,(byte)0x0e,(byte)0x68,
+                (byte)0x74,(byte)0x74,(byte)0x70,(byte)0x3a,
+                (byte)0x2f,(byte)0x2f,(byte)0x62,(byte)0x61,
+                (byte)0x72,(byte)0x2e,(byte)0x63,(byte)0x6f,
+                (byte)0x6d,(byte)0x80,(byte)0x01,(byte)0x00,
+                (byte)0x81,(byte)0x01,(byte)0x01,(byte)0x30,
+                (byte)0x12,(byte)0x86,(byte)0x0a,(byte)0x68,
+                (byte)0x74,(byte)0x74,(byte)0x70,(byte)0x3a,
+                (byte)0x2f,(byte)0x2f,(byte)0x6d,(byte)0x75,
+                (byte)0x75,(byte)0x80,(byte)0x01,(byte)0x00,
+                (byte)0x81,(byte)0x01,(byte)0x01
+        };
+    }
 }
 
 /**
@@ -662,6 +711,3 @@
     }
 }
 
-class myManagerFactoryParam implements ManagerFactoryParameters {
-    
-}
\ No newline at end of file
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/TrustManagerFactory2Test.java b/x-net/src/test/java/tests/api/javax/net/ssl/TrustManagerFactory2Test.java
index bba0b77..e16a62f 100644
--- a/x-net/src/test/java/tests/api/javax/net/ssl/TrustManagerFactory2Test.java
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/TrustManagerFactory2Test.java
@@ -18,9 +18,9 @@
 package tests.api.javax.net.ssl;
 
 import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestInfo;
+import dalvik.annotation.TestTargets;
 import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTarget;
+import dalvik.annotation.TestTargetNew;
 
 import java.security.InvalidAlgorithmParameterException;
 import java.security.KeyStore;
@@ -120,15 +120,12 @@
      * throws NoSuchAlgorithmException when algorithm is not correct;
      * returns TrustManagerFactory object
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class}
+    )
     public void test_getInstanceLjava_lang_String() throws Exception {
         try {
             TrustManagerFactory.getInstance(null);
@@ -166,15 +163,12 @@
      * throws NoSuchProviderException when provider is available;
      * returns TrustManagerFactory object
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class, String.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class, java.lang.String.class}
+    )
     public void test_getInstanceLjava_lang_StringLjava_lang_String() throws Exception {
         try {
             TrustManagerFactory.getInstance(null, mProv.getName());
@@ -241,15 +235,12 @@
      * throws IllegalArgumentException when provider is null;
      * returns TrustManagerFactory object
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "getInstance",
-          methodArgs = {String.class, Provider.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getInstance",
+        args = {java.lang.String.class, java.security.Provider.class}
+    )
     public void testLjava_lang_StringLjava_security_Provider() throws Exception {
         try {
             TrustManagerFactory.getInstance(null, mProv);
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/TrustManagerFactorySpiTest.java b/x-net/src/test/java/tests/api/javax/net/ssl/TrustManagerFactorySpiTest.java
index 360cae7..fcaf8c16 100644
--- a/x-net/src/test/java/tests/api/javax/net/ssl/TrustManagerFactorySpiTest.java
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/TrustManagerFactorySpiTest.java
@@ -5,7 +5,7 @@
  * 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
+ *     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,
@@ -13,13 +13,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package tests.api.javax.net.ssl;
 
 import dalvik.annotation.TestTargetClass; 
-import dalvik.annotation.TestInfo;
+import dalvik.annotation.TestTargets;
 import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTarget;
+import dalvik.annotation.TestTargetNew;
 
 import java.security.InvalidAlgorithmParameterException;
 import java.security.KeyStore;
@@ -30,56 +29,110 @@
 import javax.net.ssl.TrustManagerFactorySpi;
 
 import junit.framework.TestCase;
+import org.apache.harmony.xnet.tests.support.TrustManagerFactorySpiImpl;
+import org.apache.harmony.xnet.tests.support.MyTrustManagerFactorySpi.Parameters;
 
 @TestTargetClass(TrustManagerFactorySpi.class) 
 public class TrustManagerFactorySpiTest extends TestCase {
 
-    private class MockTrustManagerFactorySpi extends TrustManagerFactorySpi {
-        public MockTrustManagerFactorySpi() {
-            super();
-        }
-
-        /**
-         * @see javax.net.ssl.TrustManagerFactorySpi#engineGetTrustManagers()
-         */
-        @Override
-        protected TrustManager[] engineGetTrustManagers() {
-            // it is a fake
-            return null;
-        }
-
-        /**
-         * @see javax.net.ssl.TrustManagerFactorySpi#engineInit(java.security.KeyStore)
-         */
-        @Override
-        protected void engineInit(KeyStore ks) throws KeyStoreException {
-            // it is a fake
-        }
-
-        /**
-         * @see javax.net.ssl.TrustManagerFactorySpi#engineInit(javax.net.ssl.ManagerFactoryParameters)
-         */
-        @Override
-        protected void engineInit(ManagerFactoryParameters spec) throws InvalidAlgorithmParameterException {
-            // it is a fake
+    /**
+     * @tests javax.net.ssl.TrustManagerFactorySpi#TrustManagerFactorySpi()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "TrustManagerFactorySpi",
+        args = {}
+    )
+    public void test_Constructor() {
+        try {
+            TrustManagerFactorySpiImpl tmf = new TrustManagerFactorySpiImpl();
+            assertTrue(tmf instanceof TrustManagerFactorySpi);
+        } catch (Exception e) {
+            fail("Unexpected exception " + e.toString());
         }
     }
     
     /**
-     * @tests javax.net.ssl.TrustManagerFactorySpi#TrustManagerFactorySpi()
+     * @tests javax.net.ssl.TrustManagerFactorySpi#engineInit(KeyStore ks)
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "TrustManagerFactorySpi",
-          methodArgs = {}
-        )
-    })
-    public void test_Constructor() {
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "engineInit",
+        args = {java.security.KeyStore.class}
+    )
+    public void test_engineInit_01() {
+        TrustManagerFactorySpiImpl tmf = new TrustManagerFactorySpiImpl();
         try {
-            new MockTrustManagerFactorySpi();
+            KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
+            ks.load(null, null);
+            tmf.engineInit(ks);
+        } catch (Exception e) {
+            fail("Unexpected exception " + e.toString());
+        }
+        try {
+            KeyStore ks = null;
+            tmf.engineInit(ks);
+            fail("KeyStoreException wasn't thrown");
+        } catch (KeyStoreException kse) {
+            //expected
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.TrustManagerFactorySpi#engineInit(ManagerFactoryParameters spec)
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "engineInit",
+        args = {javax.net.ssl.ManagerFactoryParameters.class}
+    )
+    public void test_engineInit_02() {
+        TrustManagerFactorySpiImpl tmf = new TrustManagerFactorySpiImpl();
+        try {
+            KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
+            ks.load(null, null);
+            Parameters pr = new Parameters(ks);
+            tmf.engineInit(pr);
+        } catch (Exception e) {
+            fail("Unexpected exception " + e.toString());
+        }
+        try {
+            ManagerFactoryParameters mfp = null;
+            tmf.engineInit(mfp);
+            fail("InvalidAlgorithmParameterException wasn't thrown");
+        } catch (InvalidAlgorithmParameterException kse) {
+            //expected
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.TrustManagerFactorySpi#engineGetTrustManagers()
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "engineGetTrustManagers",
+        args = {}
+    )
+    public void test_engineGetTrustManagers() {
+        TrustManagerFactorySpiImpl tmf = new TrustManagerFactorySpiImpl();
+        try {
+            TrustManager[] tm = tmf.engineGetTrustManagers();
+            fail("IllegalStateException wasn't thrown");
+        } catch (IllegalStateException ise) {
+            //expected
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalStateException");
+        }
+        try {
+            KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
+            ks.load(null, null);
+            tmf.engineInit(ks);
+            TrustManager[] tm = tmf.engineGetTrustManagers();
+            assertNull("Object is not NULL", tm);
         } catch (Exception e) {
             fail("Unexpected exception " + e.toString());
         }
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/X509ExtendedKeyManagerTest.java b/x-net/src/test/java/tests/api/javax/net/ssl/X509ExtendedKeyManagerTest.java
index 6748d5f..5f711b1 100644
--- a/x-net/src/test/java/tests/api/javax/net/ssl/X509ExtendedKeyManagerTest.java
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/X509ExtendedKeyManagerTest.java
@@ -18,9 +18,9 @@
 package tests.api.javax.net.ssl;
 
 import dalvik.annotation.TestTargetClass; 
-import dalvik.annotation.TestInfo;
+import dalvik.annotation.TestTargets;
 import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTarget;
+import dalvik.annotation.TestTargetNew;
 
 import java.net.Socket;
 import java.security.Principal;
@@ -37,6 +37,7 @@
  */
 @TestTargetClass(X509ExtendedKeyManager.class) 
 public class X509ExtendedKeyManagerTest extends TestCase {
+    
     private class MockX509ExtendedKeyManager extends X509ExtendedKeyManager {
         public MockX509ExtendedKeyManager() {
             super();
@@ -94,15 +95,12 @@
     /**
      * @tests javax.net.ssl.X509ExtendedKeyManager#X509ExtendedKeyManager() 
      */
-    @TestInfo(
-      level = TestLevel.COMPLETE,
-      purpose = "",
-      targets = {
-        @TestTarget(
-          methodName = "X509ExtendedKeyManager",
-          methodArgs = {}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "X509ExtendedKeyManager",
+        args = {}
+    )
     public final void test_Constructor() {
         try {
             new MockX509ExtendedKeyManager();
@@ -116,15 +114,12 @@
      *     #chooseEngineClientAlias(java.lang.String[],
      *     java.security.Principal[], javax.net.ssl.SSLEngine) 
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "Verification with not null parameters missed",
-      targets = {
-        @TestTarget(
-          methodName = "chooseEngineClientAlias",
-          methodArgs = {String[].class, Principal[].class, javax.net.ssl.SSLEngine.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "chooseEngineClientAlias",
+        args = {java.lang.String[].class, java.security.Principal[].class, javax.net.ssl.SSLEngine.class}
+    )
     public final void test_chooseEngineClientAlias() {
         X509ExtendedKeyManager km = new MyX509ExtendedKeyManager();
         if (km.chooseEngineClientAlias(null, null, null) != null) {
@@ -137,15 +132,12 @@
      *     #chooseEngineServerAlias(java.lang.String,
      *     java.security.Principal[], javax.net.ssl.SSLEngine) 
      */
-    @TestInfo(
-      level = TestLevel.PARTIAL,
-      purpose = "Verification with not null parameters missed",
-      targets = {
-        @TestTarget(
-          methodName = "chooseEngineServerAlias",
-          methodArgs = {String.class, Principal[].class, javax.net.ssl.SSLEngine.class}
-        )
-    })
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "chooseEngineServerAlias",
+        args = {java.lang.String.class, java.security.Principal[].class, javax.net.ssl.SSLEngine.class}
+    )
     public final void test_chooseEngineServerAlias() {
         X509ExtendedKeyManager km = new MyX509ExtendedKeyManager();
         if (km.chooseEngineServerAlias(null, null, null) != null) {
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/X509KeyManagerTest.java b/x-net/src/test/java/tests/api/javax/net/ssl/X509KeyManagerTest.java
new file mode 100644
index 0000000..f9ffd96
--- /dev/null
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/X509KeyManagerTest.java
@@ -0,0 +1,167 @@
+package tests.api.javax.net.ssl;
+
+import dalvik.annotation.TestTargetClass; 
+import dalvik.annotation.TestTargets;
+import dalvik.annotation.TestLevel;
+import dalvik.annotation.TestTargetNew;
+
+import javax.net.ssl.X509KeyManager;
+import java.security.cert.X509Certificate;
+import java.security.Principal;
+import java.security.PrivateKey;
+import java.net.Socket;
+
+import junit.framework.TestCase;
+
+import org.apache.harmony.xnet.tests.support.X509KeyManagerImpl;
+
+/**
+ * Tests for <code>X509KeyManager</code> class constructors and methods.
+ */
+@TestTargetClass(X509KeyManager.class) 
+public class X509KeyManagerTest extends TestCase {
+    
+    /**
+     * @tests X509KeyManager#getClientAliases(String keyType, Principal[] issuers) 
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getClientAliases",
+        args = {java.lang.String.class, java.security.Principal[].class}
+    )
+    public void test_getClientAliases() {
+        try {
+            X509KeyManagerImpl xkm = new X509KeyManagerImpl("CLIENT");
+            assertNull(xkm.getClientAliases(null, null));
+            assertNull(xkm.getClientAliases("", null));
+            String[] resArray = xkm.getClientAliases("CLIENT", null);
+            assertTrue("Incorrect result", compareC(resArray));
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+    }
+    
+    /**
+     * @tests X509KeyManager#chooseClientAlias(String[] keyType, Principal[] issuers, Socket socket) 
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "chooseClientAlias",
+        args = {java.lang.String[].class, java.security.Principal[].class, java.net.Socket.class}
+    )
+    public void test_chooseClientAlias() {
+        try {
+            String[] ar = {"CLIENT"};
+            X509KeyManagerImpl xkm = new X509KeyManagerImpl("CLIENT");
+            assertNull(xkm.chooseClientAlias(null, null, new Socket()));
+            assertNull(xkm.chooseClientAlias(new String[0], null, new Socket()));
+            String res = xkm.chooseClientAlias(ar, null, new Socket());
+            assertEquals(res, "clientalias_03");
+            res = xkm.chooseClientAlias(ar, null, null);
+            assertEquals(res, "clientalias_02");
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+    }
+    
+    /**
+     * @tests X509KeyManager#getServerAliases(String keyType, Principal[] issuers) 
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getServerAliases",
+        args = {java.lang.String.class, java.security.Principal[].class}
+    )
+    public void test_getServerAliases() {
+        try {
+            X509KeyManagerImpl xkm = new X509KeyManagerImpl("SERVER");
+            assertNull(xkm.getServerAliases(null, null));
+            assertNull(xkm.getServerAliases("", null));
+            String[] resArray = xkm.getServerAliases("SERVER", null);
+            assertEquals("Incorrect length", resArray.length, 1);
+            assertEquals("Incorrect aliase", resArray[0], "serveralias_00");
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+    }
+    
+    /**
+     * @tests X509KeyManager#chooseServerAlias(String keyType, Principal[] issuers, Socket socket) 
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "chooseServerAlias",
+        args = {java.lang.String.class, java.security.Principal[].class, java.net.Socket.class}
+    )
+    public void test_chooseServerAlias() {
+        try {
+            X509KeyManagerImpl xkm = new X509KeyManagerImpl("SERVER");
+            assertNull(xkm.chooseServerAlias(null, null, new Socket()));
+            assertNull(xkm.chooseServerAlias("", null, new Socket()));
+            assertNull(xkm.chooseServerAlias("SERVER", null, null));
+            String res = xkm.chooseServerAlias("SERVER", null, new Socket());
+            assertEquals(res, "serveralias_00");
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+    }
+   
+    /**
+     * @tests X509KeyManager#getCertificateChain(String alias) 
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getCertificateChain",
+        args = {java.lang.String.class}
+    )
+    public void test_getCertificateChain() {
+        try {
+            X509KeyManagerImpl xkm = new X509KeyManagerImpl("SERVER");
+            assertNull("Not NULL for NULL parameter", xkm.getCertificateChain(null));
+            assertNull("Not NULL for empty parameter",xkm.getCertificateChain(""));
+            assertNull("Not NULL for clientAlias_01 parameter", xkm.getCertificateChain("clientAlias_01"));
+            assertNull("Not NULL for serverAlias_00 parameter", xkm.getCertificateChain("serverAlias_00"));
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+    }
+    
+    /**
+     * @tests X509KeyManager#getPrivateKey(String alias) 
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getPrivateKey",
+        args = {java.lang.String.class}
+    )
+    public void test_getPrivateKey() {
+        try {
+            X509KeyManagerImpl xkm = new X509KeyManagerImpl("CLIENT");
+            assertNull("Not NULL for NULL parameter", xkm.getPrivateKey(null));
+            assertNull("Not NULL for serverAlias_00 parameter", xkm.getPrivateKey("serverAlias_00"));
+            assertNull("Not NULL for clientAlias_02 parameter", xkm.getPrivateKey("clientAlias_02"));
+        } catch (Exception e) {
+            fail("Unexpected exception " + e);
+        }
+    }
+    
+    
+    private boolean compareC(String[] ar) {
+        if (ar.length != 3) {
+            return false;
+        }
+        for (int i = 0; i < ar.length; i++) {
+            if (ar[i] != "clientalias_01" && ar[i] != "clientalias_02" && ar[i] != "clientalias_03") {
+                return false;
+            }
+        }
+        return true;
+    }
+}
+
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/X509TrustManagerTest.java b/x-net/src/test/java/tests/api/javax/net/ssl/X509TrustManagerTest.java
new file mode 100644
index 0000000..d5e4001
--- /dev/null
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/X509TrustManagerTest.java
@@ -0,0 +1,258 @@
+package tests.api.javax.net.ssl;
+
+import dalvik.annotation.TestTargetClass; 
+import dalvik.annotation.TestTargets;
+import dalvik.annotation.TestLevel;
+import dalvik.annotation.TestTargetNew;
+
+import java.io.ByteArrayInputStream;
+import java.security.cert.CertificateFactory;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import javax.net.ssl.X509TrustManager;
+
+import junit.framework.TestCase;
+
+import org.apache.harmony.security.tests.support.cert.TestUtils;
+import org.apache.harmony.xnet.tests.support.X509TrustManagerImpl;
+
+/**
+ * Tests for <code>X509TrustManager</code> class constructors and methods.
+ */
+@TestTargetClass(X509TrustManager.class) 
+public class X509TrustManagerTest extends TestCase {
+    
+    private X509Certificate[] setX509Certificate() {
+        try {
+            CertificateFactory certFact = CertificateFactory.getInstance("X.509");
+            X509Certificate pemCert = (X509Certificate) certFact
+                .generateCertificate(new ByteArrayInputStream(TestUtils
+                        .getX509Certificate_v3()));
+            X509Certificate[] xcert = {pemCert};
+            return xcert;
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex);
+        }
+        return null;
+    }
+
+    private X509Certificate[] setInvalid() {
+        try {
+            CertificateFactory certFact = CertificateFactory.getInstance("X.509");
+            X509Certificate pemCert = (X509Certificate) certFact
+                .generateCertificate(new ByteArrayInputStream(TestUtils
+                        .getX509Certificate_v1()));
+            X509Certificate[] xcert = {pemCert};
+            return xcert;
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex);
+        }
+        return null;
+    }
+    
+    /**
+     * @tests javax.net.ssl.X509TrustManager#checkClientTrusted(X509Certificate[] chain, String authType) 
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "checkClientTrusted",
+        args = {java.security.cert.X509Certificate[].class, java.lang.String.class}
+    )
+    public void test_checkClientTrusted_01() {
+        X509TrustManagerImpl xtm = new X509TrustManagerImpl();
+        X509Certificate[] xcert = null;
+
+        try {
+            xtm.checkClientTrusted(xcert, "SSL");
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iae) {
+            //expected
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalArgumentException");            
+        }
+        
+        xcert = new X509Certificate[0];
+        try {
+            xtm.checkClientTrusted(xcert, "SSL");
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iae) {
+            //expected
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalArgumentException");            
+        }
+        
+        xcert = setX509Certificate();
+        try {
+            xtm.checkClientTrusted(xcert, null);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iae) {
+            //expected
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalArgumentException");            
+        }
+        
+        try {
+            xtm.checkClientTrusted(xcert, "");
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iae) {
+            //expected
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalArgumentException");            
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.X509TrustManager#checkClientTrusted(X509Certificate[] chain, String authType) 
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "checkClientTrusted",
+        args = {java.security.cert.X509Certificate[].class, java.lang.String.class}
+    )
+    public void test_checkClientTrusted_02() {
+        X509TrustManagerImpl xtm = new X509TrustManagerImpl();
+        X509Certificate[] xcert = setInvalid();
+
+        try {
+            xtm.checkClientTrusted(xcert, "SSL");
+            fail("CertificateException wasn't thrown");
+        } catch (CertificateException ce) {
+            //expected
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.X509TrustManager#checkClientTrusted(X509Certificate[] chain, String authType) 
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "checkClientTrusted",
+        args = {java.security.cert.X509Certificate[].class, java.lang.String.class}
+    )
+    public void test_checkClientTrusted_03() {
+        X509TrustManagerImpl xtm = new X509TrustManagerImpl();
+        X509Certificate[] xcert = setX509Certificate();
+
+        try {
+            xtm.checkClientTrusted(xcert, "SSL");
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.X509TrustManager#checkServerTrusted(X509Certificate[] chain, String authType) 
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "checkServerTrusted",
+        args = {java.security.cert.X509Certificate[].class, java.lang.String.class}
+    )
+    public void test_checkServerTrusted_01() {
+        X509TrustManagerImpl xtm = new X509TrustManagerImpl();
+        X509Certificate[] xcert = null;
+
+        try {
+            xtm.checkServerTrusted(xcert, "SSL");
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iae) {
+            //expected
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalArgumentException");            
+        }
+        
+        xcert = new X509Certificate[0];
+        try {
+            xtm.checkServerTrusted(xcert, "SSL");
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iae) {
+            //expected
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalArgumentException");            
+        }
+        
+        xcert = setX509Certificate();
+        try {
+            xtm.checkServerTrusted(xcert, null);
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iae) {
+            //expected
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalArgumentException");            
+        }
+        
+        try {
+            xtm.checkServerTrusted(xcert, "");
+            fail("IllegalArgumentException wasn't thrown");
+        } catch (IllegalArgumentException iae) {
+            //expected
+        } catch (Exception e) {
+            fail(e + " was thrown instead of IllegalArgumentException");            
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.X509TrustManager#checkServerTrusted(X509Certificate[] chain, String authType) 
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "checkServerTrusted",
+        args = {java.security.cert.X509Certificate[].class, java.lang.String.class}
+    )
+    public void test_checkServerTrusted_02() {
+        X509TrustManagerImpl xtm = new X509TrustManagerImpl();
+        X509Certificate[] xcert = setInvalid();
+
+        try {
+            xtm.checkServerTrusted(xcert, "SSL");
+            fail("CertificateException wasn't thrown");
+        } catch (CertificateException ce) {
+            //expected
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.X509TrustManager#checkServerTrusted(X509Certificate[] chain, String authType) 
+     */
+    @TestTargetNew(
+        level = TestLevel.PARTIAL_COMPLETE,
+        notes = "",
+        method = "checkServerTrusted",
+        args = {java.security.cert.X509Certificate[].class, java.lang.String.class}
+    )
+    public void test_checkServerTrusted_03() {
+        X509TrustManagerImpl xtm = new X509TrustManagerImpl();
+        X509Certificate[] xcert = setX509Certificate();
+
+        try {
+            xtm.checkServerTrusted(xcert, "SSL");
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex);
+        }
+    }
+    
+    /**
+     * @tests javax.net.ssl.X509TrustManager#getAcceptedIssuers() 
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "",
+        method = "getAcceptedIssuers",
+        args = {}
+    )
+    public void test_getAcceptedIssuers() {
+        X509TrustManagerImpl xtm = new X509TrustManagerImpl();
+
+        try {
+            assertNotNull(xtm.getAcceptedIssuers());
+        } catch (Exception ex) {
+            fail("Unexpected exception " + ex);
+        }
+    }
+    
+}
diff --git a/x-net/src/test/java/tests/xnet/AllTests.java b/x-net/src/test/java/tests/xnet/AllTests.java
index be4999f..53b11dc 100644
--- a/x-net/src/test/java/tests/xnet/AllTests.java
+++ b/x-net/src/test/java/tests/xnet/AllTests.java
@@ -29,7 +29,7 @@
     }
 
     public static Test suite() {
-        TestSuite suite = new TestSuite(
+        TestSuite suite = tests.TestSuiteFactory.createTestSuite(
                 "All javax.net and javax.net.ssl test suites");
         // $JUnit-BEGIN$
         suite.addTest(tests.api.javax.net.AllTests.suite());