blob: 9c133372c059066b52327998570c02eebde2d917 [file] [log] [blame]
package libcore.java.net;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.net.InetAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.SocketException;
import java.net.SocketImpl;
import java.net.SocketImplFactory;
import junit.framework.TestCase;
public class OldSocketImplFactoryTest extends TestCase {
SocketImplFactory oldFactory = null;
Field factoryField = null;
boolean isTestable = false;
boolean iSocketImplCalled = false;
boolean isCreateSocketImpl = false;
public void test_createSocketImpl() throws IOException {
MockSocketImplFactory factory = new MockSocketImplFactory();
if(isTestable) {
assertFalse(isCreateSocketImpl);
Socket.setSocketImplFactory(factory);
try {
new Socket();
assertTrue(isCreateSocketImpl);
assertTrue(iSocketImplCalled);
} catch (Exception e) {
fail("Exception during test : " + e.getMessage());
}
try {
Socket.setSocketImplFactory(factory);
fail("SocketException was not thrown.");
} catch(SocketException se) {
//expected
}
try {
Socket.setSocketImplFactory(null);
fail("SocketException was not thrown.");
} catch(SocketException se) {
//expected
}
} else {
SocketImpl si = factory.createSocketImpl();
try {
assertNull(si.getOption(0));
} catch (SocketException e) {
fail("SocketException was thrown.");
}
}
}
public void setUp() {
Field [] fields = Socket.class.getDeclaredFields();
int counter = 0;
for (Field field : fields) {
if (SocketImplFactory.class.equals(field.getType())) {
counter++;
factoryField = field;
}
}
if(counter == 1) {
isTestable = true;
factoryField.setAccessible(true);
try {
oldFactory = (SocketImplFactory) factoryField.get(null);
} catch (IllegalArgumentException e) {
fail("IllegalArgumentException was thrown during setUp: "
+ e.getMessage());
} catch (IllegalAccessException e) {
fail("IllegalAccessException was thrown during setUp: "
+ e.getMessage());
}
}
}
public void tearDown() {
if(isTestable) {
try {
factoryField.set(null, oldFactory);
} catch (IllegalArgumentException e) {
fail("IllegalArgumentException was thrown during tearDown: "
+ e.getMessage());
} catch (IllegalAccessException e) {
fail("IllegalAccessException was thrown during tearDown: "
+ e.getMessage());
}
}
}
class MockSocketImplFactory implements SocketImplFactory {
public SocketImpl createSocketImpl() {
isCreateSocketImpl = true;
return new MockSocketImpl();
}
}
class MockSocketImpl extends SocketImpl {
public MockSocketImpl() {
super();
iSocketImplCalled = true;
}
@Override
protected void accept(SocketImpl arg0) throws IOException {
}
@Override
protected int available() throws IOException {
return 0;
}
@Override
protected void bind(InetAddress arg0, int arg1) throws IOException {
}
@Override
protected void close() throws IOException {
}
@Override
protected void connect(String arg0, int arg1) throws IOException {
}
@Override
protected void connect(InetAddress arg0, int arg1) throws IOException {
}
@Override
protected void connect(SocketAddress arg0, int arg1) throws IOException {
}
@Override
protected void create(boolean arg0) throws IOException {
}
@Override
protected InputStream getInputStream() throws IOException {
return null;
}
@Override
protected OutputStream getOutputStream() throws IOException {
return null;
}
@Override
protected void listen(int arg0) throws IOException {
}
@Override
protected void sendUrgentData(int arg0) throws IOException {
}
public Object getOption(int arg0) throws SocketException {
return null;
}
public void setOption(int arg0, Object arg1) throws SocketException {
}
}
}