diff --git a/runtime-rpc/src/test/java/org/capnproto/CapabilityTest.java b/runtime-rpc/src/test/java/org/capnproto/CapabilityTest.java index e467764..df32650 100644 --- a/runtime-rpc/src/test/java/org/capnproto/CapabilityTest.java +++ b/runtime-rpc/src/test/java/org/capnproto/CapabilityTest.java @@ -66,18 +66,6 @@ class TestExtendsImpl extends Test.TestExtends2.Server { } } -class TestCallOrderImpl extends Test.TestCallOrder.Server { - - int count = 0; - - @Override - protected CompletableFuture getCallSequence(CallContext context) { - var result = context.getResults(); - result.setN(this.count++); - return READY_NOW; - } -} - public class CapabilityTest { @org.junit.Test diff --git a/runtime-rpc/src/test/java/org/capnproto/RpcTest.java b/runtime-rpc/src/test/java/org/capnproto/RpcTest.java index 33c7188..af0cdfa 100644 --- a/runtime-rpc/src/test/java/org/capnproto/RpcTest.java +++ b/runtime-rpc/src/test/java/org/capnproto/RpcTest.java @@ -450,7 +450,7 @@ public class RpcTest { var context = new TestContext(bootstrapFactory); var client = new Test.TestMoreStuff.Client(context.connect(Test.TestSturdyRefObjectId.Tag.TEST_MORE_STUFF)); - var cap = new Test.TestCallOrder.Client(new TestCallOrderImpl()); + var cap = new Test.TestCallOrder.Client(new RpcTestUtil.TestCallOrderImpl()); var earlyCall = client.getCallSequenceRequest().send(); var echoRequest = client.echoRequest(); @@ -536,5 +536,49 @@ public class RpcTest { // check that the connection is still open getCallSequence(client, 1); } + + @org.junit.Test + public void testEmbargoUnwrap() { + var context = new TestContext(bootstrapFactory); + var capSet = new Capability.CapabilityServerSet(); + var client = new Test.TestMoreStuff.Client(context.connect(Test.TestSturdyRefObjectId.Tag.TEST_MORE_STUFF)); + + var cap = capSet.add(Test.TestCallOrder.factory, new RpcTestUtil.TestCallOrderImpl()); + + var earlyCall = client.getCallSequenceRequest().send(); + + var echoRequest = client.echoRequest(); + echoRequest.getParams().setCap(cap); + var echo = echoRequest.send(); + + var pipeline = echo.getCap(); + + var unwrap = capSet.getLocalServer(pipeline).thenApply(unwrapped -> { + return ((RpcTestUtil.TestCallOrderImpl)unwrapped).getCount(); + }); + + var call0 = getCallSequence(pipeline, 0); + var call1 = getCallSequence(pipeline, 1); + + earlyCall.join(); + + var call2 = getCallSequence(pipeline, 2); + + var resolved = echo.join().getCap(); + + var call3 = getCallSequence(pipeline, 3); + var call4 = getCallSequence(pipeline, 4); + var call5 = getCallSequence(pipeline, 5); + + Assert.assertEquals(0, call0.join().getN()); + Assert.assertEquals(1, call1.join().getN()); + Assert.assertEquals(2, call2.join().getN()); + Assert.assertEquals(3, call3.join().getN()); + Assert.assertEquals(4, call4.join().getN()); + Assert.assertEquals(5, call5.join().getN()); + + int unwrappedAt = unwrap.join(); + //Assert.assertTrue(unwrappedAt >= 3); + } } diff --git a/runtime-rpc/src/test/java/org/capnproto/RpcTestUtil.java b/runtime-rpc/src/test/java/org/capnproto/RpcTestUtil.java index 14f5c28..c6c016c 100644 --- a/runtime-rpc/src/test/java/org/capnproto/RpcTestUtil.java +++ b/runtime-rpc/src/test/java/org/capnproto/RpcTestUtil.java @@ -244,6 +244,22 @@ class RpcTestUtil { } } + static class TestCallOrderImpl extends Test.TestCallOrder.Server { + + private int count = 0; + + @Override + protected CompletableFuture getCallSequence(CallContext context) { + var result = context.getResults(); + result.setN(this.count++); + return READY_NOW; + } + + public int getCount() { + return this.count; + } + } + static class TestPipelineImpl extends Test.TestPipeline.Server { final Counter callCount;