1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage tests.api.java.net; 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestLevel; 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetClass; 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetNew; 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargets; 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport junit.framework.TestCase; 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException; 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.InputStream; 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.OutputStream; 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.lang.reflect.Field; 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.InetAddress; 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.Socket; 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.SocketAddress; 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.SocketException; 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.SocketImpl; 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.SocketImplFactory; 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@TestTargetClass(SocketImplFactory.class) 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class SocketImplFactoryTest extends TestCase { 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SocketImplFactory oldFactory = null; 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Field factoryField = null; 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean isTestable = false; 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean iSocketImplCalled = false; 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean isCreateSocketImpl = false; 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargets ({ 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "createSocketImpl", 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ), 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Verifies positive case, and SocketException.", 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project clazz = Socket.class, 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "setSocketImplFactory", 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.net.SocketImplFactory.class} 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }) 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_createSocketImpl() throws IOException { 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MockSocketImplFactory factory = new MockSocketImplFactory(); 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if(isTestable) { 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertFalse(isCreateSocketImpl); 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Socket.setSocketImplFactory(factory); 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Socket ds = new Socket(); 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(isCreateSocketImpl); 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(iSocketImplCalled); 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (Exception e) { 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Exception during test : " + e.getMessage()); 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Socket.setSocketImplFactory(factory); 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("SocketException was not thrown."); 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch(SocketException se) { 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Socket.setSocketImplFactory(null); 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("SocketException was not thrown."); 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch(SocketException se) { 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SocketImpl si = factory.createSocketImpl(); 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNull(si.getOption(0)); 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (SocketException e) { 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("SocketException was thrown."); 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void setUp() { 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Field [] fields = Socket.class.getDeclaredFields(); 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int counter = 0; 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Field field : fields) { 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (SocketImplFactory.class.equals(field.getType())) { 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project counter++; 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project factoryField = field; 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if(counter == 1) { 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project isTestable = true; 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project factoryField.setAccessible(true); 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project oldFactory = (SocketImplFactory) factoryField.get(null); 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalArgumentException e) { 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalArgumentException was thrown during setUp: " 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + e.getMessage()); 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalAccessException e) { 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalAccessException was thrown during setUp: " 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + e.getMessage()); 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void tearDown() { 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if(isTestable) { 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project factoryField.set(null, oldFactory); 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalArgumentException e) { 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalArgumentException was thrown during tearDown: " 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + e.getMessage()); 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalAccessException e) { 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalAccessException was thrown during tearDown: " 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + e.getMessage()); 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project class MockSocketImplFactory implements SocketImplFactory { 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public SocketImpl createSocketImpl() { 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project isCreateSocketImpl = true; 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new MockSocketImpl(); 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project class MockSocketImpl extends SocketImpl { 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public MockSocketImpl() { 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(); 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project iSocketImplCalled = true; 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void accept(SocketImpl arg0) throws IOException { 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected int available() throws IOException { 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return 0; 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void bind(InetAddress arg0, int arg1) throws IOException { 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void close() throws IOException { 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void connect(String arg0, int arg1) throws IOException { 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void connect(InetAddress arg0, int arg1) throws IOException { 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void connect(SocketAddress arg0, int arg1) throws IOException { 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void create(boolean arg0) throws IOException { 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected InputStream getInputStream() throws IOException { 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected OutputStream getOutputStream() throws IOException { 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void listen(int arg0) throws IOException { 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void sendUrgentData(int arg0) throws IOException { 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Object getOption(int arg0) throws SocketException { 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void setOption(int arg0, Object arg1) throws SocketException { 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 212