add callBrokenPromise test
This commit is contained in:
parent
f05c994c06
commit
c30dba3e9f
2 changed files with 64 additions and 2 deletions
|
@ -30,6 +30,8 @@ import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
public class RpcTest {
|
public class RpcTest {
|
||||||
|
|
||||||
|
@ -472,5 +474,36 @@ public class RpcTest {
|
||||||
Assert.assertEquals(4, call4.join().getN());
|
Assert.assertEquals(4, call4.join().getN());
|
||||||
Assert.assertEquals(5, call5.join().getN());
|
Assert.assertEquals(5, call5.join().getN());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@org.junit.Test
|
||||||
|
public void testCallBrokenPromise() throws ExecutionException, InterruptedException {
|
||||||
|
var context = new TestContext(bootstrapFactory);
|
||||||
|
var client = new Test.TestMoreStuff.Client(context.connect(Test.TestSturdyRefObjectId.Tag.TEST_MORE_STUFF));
|
||||||
|
|
||||||
|
var paf = new CompletableFuture<Test.TestInterface.Client>();
|
||||||
|
|
||||||
|
{
|
||||||
|
var req = client.holdRequest();
|
||||||
|
req.getParams().setCap(new Test.TestInterface.Client(paf));
|
||||||
|
req.send().join();
|
||||||
|
}
|
||||||
|
|
||||||
|
AtomicBoolean returned = new AtomicBoolean(false);
|
||||||
|
|
||||||
|
var req = client.callHeldRequest().send().exceptionallyCompose(exc -> {
|
||||||
|
returned.set(true);
|
||||||
|
return CompletableFuture.failedFuture(exc);
|
||||||
|
}).thenAccept(results -> {
|
||||||
|
returned.set(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
Assert.assertFalse(returned.get());
|
||||||
|
|
||||||
|
paf.completeExceptionally(new Exception("foo"));
|
||||||
|
Assert.assertTrue(returned.get());
|
||||||
|
|
||||||
|
// Verify that we are still connected
|
||||||
|
getCallSequence(client, 1).get();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -102,8 +102,9 @@ class RpcTestUtil {
|
||||||
|
|
||||||
static class TestMoreStuffImpl extends Test.TestMoreStuff.Server {
|
static class TestMoreStuffImpl extends Test.TestMoreStuff.Server {
|
||||||
|
|
||||||
final Counter callCount;
|
private final Counter callCount;
|
||||||
final Counter handleCount;
|
private final Counter handleCount;
|
||||||
|
private Test.TestInterface.Client clientToHold;
|
||||||
|
|
||||||
public TestMoreStuffImpl(Counter callCount, Counter handleCount) {
|
public TestMoreStuffImpl(Counter callCount, Counter handleCount) {
|
||||||
this.callCount = callCount;
|
this.callCount = callCount;
|
||||||
|
@ -164,6 +165,34 @@ class RpcTestUtil {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected CompletableFuture<java.lang.Void> hold(CallContext<Test.TestMoreStuff.HoldParams.Reader, Test.TestMoreStuff.HoldResults.Builder> context) {
|
||||||
|
this.callCount.inc();
|
||||||
|
var params = context.getParams();
|
||||||
|
this.clientToHold = params.getCap();
|
||||||
|
return READY_NOW;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected CompletableFuture<java.lang.Void> callHeld(CallContext<Test.TestMoreStuff.CallHeldParams.Reader, Test.TestMoreStuff.CallHeldResults.Builder> context) {
|
||||||
|
this.callCount.inc();
|
||||||
|
var request = this.clientToHold.fooRequest();
|
||||||
|
request.getParams().setI(123);
|
||||||
|
request.getParams().setJ(true);
|
||||||
|
return request.send().thenAccept(response -> {
|
||||||
|
Assert.assertEquals("foo", response.getX().toString());
|
||||||
|
context.getResults().setS("bar");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected CompletableFuture<java.lang.Void> getHeld(CallContext<Test.TestMoreStuff.GetHeldParams.Reader, Test.TestMoreStuff.GetHeldResults.Builder> context) {
|
||||||
|
this.callCount.inc();
|
||||||
|
var result = context.getResults();
|
||||||
|
result.setCap(this.clientToHold);
|
||||||
|
return READY_NOW;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static class TestTailCalleeImpl extends Test.TestTailCallee.Server {
|
static class TestTailCalleeImpl extends Test.TestTailCallee.Server {
|
||||||
|
|
Loading…
Reference in a new issue