package org.async.rmi.client; import org.async.rmi.Modules; import org.async.rmi.messages.Response; import org.async.rmi.net.ResponseFutureHolder; import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.rmi.RemoteException; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; public class PendingRequestsTest { @SuppressWarnings("UnusedDeclaration") private static final Logger logger = LoggerFactory.getLogger(PendingRequestsTest.class); private PendingRequests pendingRequests; @Before public void setup() { pendingRequests = new PendingRequests(); Modules.getInstance().getConfiguration().setClientTimeout(1, TimeUnit.MILLISECONDS); } @Test(timeout = 5000) public void testAdd() throws Exception { CompletableFuture<Response> pending1 = new CompletableFuture<>(); CompletableFuture<Response> pending2 = new CompletableFuture<>(); pendingRequests.add(new ResponseFutureHolder(pending1, null, null), 2); pendingRequests.add(new ResponseFutureHolder(pending2, null, null), 3); assertThat(pendingRequests.size(), is(2)); pendingRequests.process(3); assertThat(pending1.isCompletedExceptionally(), is(true)); assertThat(pending2.isCompletedExceptionally(), is(false)); assertThat(pendingRequests.size(), is(1)); pendingRequests.process(4); assertThat(pending2.isCompletedExceptionally(), is(true)); assertThat(pendingRequests.size(), is(0)); CompletableFuture<Response> pending3 = new CompletableFuture<>(); pendingRequests.add(new ResponseFutureHolder(pending3, null, null), 4); pending3.completeExceptionally(new RemoteException()); //noinspection StatementWithEmptyBody while (0 < pendingRequests.size()) { } CompletableFuture<Response> pending4 = new CompletableFuture<>(); pendingRequests.add(new ResponseFutureHolder(pending4, null, null), 4); pending4.complete(null); //noinspection StatementWithEmptyBody while (0 < pendingRequests.size()) { } } }