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