package io.datakernel.remotefs;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import io.datakernel.async.CallbackRegistry;
import io.datakernel.async.CompletionCallbackFuture;
import io.datakernel.bytebuf.ByteBuf;
import io.datakernel.eventloop.Eventloop;
import io.datakernel.net.SocketSettings;
import io.datakernel.stream.StreamProducers;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.rules.TemporaryFolder;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import static io.datakernel.eventloop.FatalErrorHandlers.rethrowOnAnyError;
import static io.datakernel.remotefs.FsIntegrationTest.createBigByteArray;
public class TestTimeoutsSimpleFs {
@Rule
public final TemporaryFolder temporaryFolder = new TemporaryFolder();
private Path storagePath;
private byte[] BIG_FILE = createBigByteArray();
@Before
public void setUp() throws IOException {
storagePath = Paths.get(temporaryFolder.newFolder("server_storage").toURI());
}
@Rule
public ExpectedException thrown = ExpectedException.none();
@Test
@Ignore
public void testUploadTimeout() throws ExecutionException, InterruptedException, IOException {
CallbackRegistry.setStoreStackTrace(true);
((Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME)).setLevel(Level.TRACE);
InetSocketAddress address = new InetSocketAddress(7010);
Eventloop eventloop = Eventloop.create().withFatalErrorHandler(rethrowOnAnyError());
RemoteFsClient client = RemoteFsClient.create(eventloop, address);
final ExecutorService serverExecutor = Executors.newFixedThreadPool(2);
final RemoteFsServer server = RemoteFsServer.create(eventloop, serverExecutor, storagePath)
.withSocketSettings(SocketSettings.create().withImplReadTimeout(1L))
.withAcceptOnce()
.withListenPort(7010);
server.listen();
CompletionCallbackFuture callback = CompletionCallbackFuture.create();
client.upload("fileName.txt", StreamProducers.ofValue(eventloop, ByteBuf.wrapForReading(BIG_FILE)), callback);
eventloop.run();
// thrown.expect(ExecutionException.class);
callback.get();
}
}