package org.webpieces.httpfrontend.api;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.nio.ByteBuffer;
import java.util.LinkedList;
import java.util.concurrent.CompletableFuture;
import org.webpieces.nio.api.channels.Channel;
import org.webpieces.nio.api.channels.ChannelSession;
import org.webpieces.nio.api.channels.TCPChannel;
import org.webpieces.nio.api.handlers.DataListener;
import org.webpieces.nio.impl.util.ChannelSessionImpl;
class MockTcpChannel implements TCPChannel {
private boolean isClosed;
private ChannelSessionImpl session = new ChannelSessionImpl();
private LinkedList<ByteBuffer> writeLog = new LinkedList<>();
@Override
public void setReuseAddress(boolean b) {
}
@Override
public void setName(String string) {
}
@Override
public String getChannelId() {
return null;
}
@Override
public String getName() {
return null;
}
@Override
public void bind(SocketAddress addr) {
}
@Override
public boolean isBlocking() {
return false;
}
@Override
public boolean isClosed() {
return isClosed;
}
@Override
public boolean isBound() {
return false;
}
@Override
public InetSocketAddress getLocalAddress() {
return null;
}
@Override
public CompletableFuture<Channel> connect(SocketAddress addr, DataListener listener) {
return null;
}
@Override
public CompletableFuture<Channel> write(ByteBuffer b) {
writeLog.add(b);
return CompletableFuture.completedFuture(this);
}
@Override
public CompletableFuture<Channel> close() {
isClosed = true;
return CompletableFuture.completedFuture(this);
}
@Override
public CompletableFuture<Channel> registerForReads() {
return null;
}
@Override
public CompletableFuture<Channel> unregisterForReads() {
return null;
}
@Override
public boolean isRegisteredForReads() {
return false;
}
@Override
public InetSocketAddress getRemoteAddress() {
return null;
}
@Override
public boolean isConnected() {
return false;
}
@Override
public ChannelSession getSession() {
return session;
}
@Override
public void setMaxBytesWriteBackupSize(int maxBytesBackup) {
}
@Override
public int getMaxBytesBackupSize() {
return 0;
}
@Override
public boolean getKeepAlive() {
return false;
}
@Override
public void setKeepAlive(boolean b) {
}
@Override
public boolean isSslChannel() {
return false;
}
public ByteBuffer getWriteLog() {
ByteBuffer fullLog = ByteBuffer.allocate(writeLog.stream().map(b -> b.limit() - b.position()).reduce(0, (a, b) -> a+b));
for(ByteBuffer b: writeLog) {
fullLog.put(b);
}
fullLog.flip();
return fullLog;
}
}