package org.webpieces.httpfrontend.api;
import java.net.InetSocketAddress;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import org.junit.Assert;
import org.webpieces.asyncserver.api.AsyncServerManager;
import org.webpieces.asyncserver.api.AsyncServerMgrFactory;
import org.webpieces.data.api.BufferCreationPool;
import org.webpieces.frontend.api.FrontendConfig;
import org.webpieces.frontend.api.HttpFrontendFactory;
import org.webpieces.frontend.api.HttpFrontendManager;
import org.webpieces.frontend.api.HttpServer;
import org.webpieces.nio.api.handlers.ConnectionListener;
import org.webpieces.nio.api.handlers.DataListener;
public class MockServer {
private MockTcpChannel mockTcpChannel = new MockTcpChannel();
private DataListener dataListener;
public MockServer(
int port,
boolean alwaysHttp2,
RequestListenerForTest requestListenerForTest)
throws InterruptedException, ExecutionException
{
MockTcpServerChannel mockTcpServerChannel = new MockTcpServerChannel();
MockChannelManager mockChanMgr = new MockChannelManager();
MockTimer timer = new MockTimer();
BufferCreationPool pool = new BufferCreationPool();
mockChanMgr.addTcpSvrChannel(mockTcpServerChannel);
AsyncServerManager svrManager = AsyncServerMgrFactory.createAsyncServer(mockChanMgr);
HttpFrontendManager mgr = HttpFrontendFactory.createFrontEnd(svrManager, timer, pool);
FrontendConfig config = new FrontendConfig("httpFrontend", new InetSocketAddress(port));
config.maxConnectToRequestTimeoutMs = 5000;
config.alwaysHttp2 = alwaysHttp2;
HttpServer server = mgr.createHttpServer(config, requestListenerForTest);
server.start();
ConnectionListener[] listeners = mockChanMgr.fetchTcpConnectionListeners();
Assert.assertEquals(1, listeners.length);
MockFuture<?> mockFuture = new MockFuture<>();
timer.addMockFuture(mockFuture);
ConnectionListener listener = listeners[0];
CompletableFuture<DataListener> future = listener.connected(mockTcpChannel, true);
dataListener = future.get();
}
DataListener getDataListener() {
return dataListener;
}
MockTcpChannel getMockTcpChannel() {
return mockTcpChannel;
}
}