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