// Copyright (C) 2003-2009 by Object Mentor, Inc. All rights reserved.
// Released under the terms of the CPL Common Public License version 1.0.
package fitnesse.util;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.util.logging.Level;
import java.util.logging.Logger;
public class MockSocket extends Socket {
private static final Logger LOG = Logger.getLogger(MockSocket.class.getName());
private final InputStream input;
private final OutputStream output;
private String host;
private boolean closed;
public MockSocket() throws IOException {
PipedInputStream serverInput = new PipedInputStream();
PipedInputStream clientInput = new PipedInputStream();
PipedOutputStream serverOutput = new PipedOutputStream(clientInput);
input = serverInput;
output = serverOutput;
}
public MockSocket(String input) {
this.input = new ByteArrayInputStream(input.getBytes());
output = new ByteArrayOutputStream();
}
public MockSocket(InputStream input, OutputStream output) {
this.input = input;
this.output = output;
}
@Override
public synchronized InputStream getInputStream() {
return input;
}
@Override
public synchronized OutputStream getOutputStream() {
return output;
}
@Override
public void close() {
closed = true;
try {
input.close();
output.close();
}
catch (IOException e) {
LOG.log(Level.WARNING, "Unable to close IO", e);
}
}
@Override
public boolean isClosed() {
return closed;
}
public void setHost(String host) {
this.host = host;
}
@Override
public SocketAddress getRemoteSocketAddress() {
// Mock a socket address, to keep the logging happy.
return new InetSocketAddress(host != null ? host : "internal", 123);
}
@Override
public SocketAddress getLocalSocketAddress() {
// Mock a socket address, to keep the logging happy.
return new InetSocketAddress(host != null ? host : "internal", 123);
}
}