From 772108ff12808eb6d5f7ca54e5f7b176cf36b1bd Mon Sep 17 00:00:00 2001 From: Vaci Koblizek Date: Thu, 26 Nov 2020 15:05:50 +0000 Subject: [PATCH] add testEmbargoNull test throw RpcExceptions rather than RuntimeExceptions --- foo.raw | Bin 0 -> 28864 bytes .../src/main/java/org/capnproto/RpcState.java | 5 +++++ .../src/test/java/org/capnproto/RpcTest.java | 21 +++++++++++++++--- .../test/java/org/capnproto/RpcTestUtil.java | 5 +++++ .../test/java/org/capnproto/TwoPartyTest.java | 2 +- .../main/java/org/capnproto/Capability.java | 4 ++-- 6 files changed, 31 insertions(+), 6 deletions(-) create mode 100644 foo.raw diff --git a/foo.raw b/foo.raw new file mode 100644 index 0000000000000000000000000000000000000000..fe793207cfd1e01ddc81cc99a51a6de553ce164b GIT binary patch literal 28864 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 u { answer.redirectedResults = null; } + if (answer.pipeline != null) { + pipelinesToRelease.add(answer.pipeline); + answer.pipeline = null; + } + if (answer.callContext != null) { answer.callContext.requestCancel(); } diff --git a/runtime-rpc/src/test/java/org/capnproto/RpcTest.java b/runtime-rpc/src/test/java/org/capnproto/RpcTest.java index c054119..18c794a 100644 --- a/runtime-rpc/src/test/java/org/capnproto/RpcTest.java +++ b/runtime-rpc/src/test/java/org/capnproto/RpcTest.java @@ -567,17 +567,16 @@ public class RpcTest { response.thenRun(() -> Assert.fail("Never completing call returned?")); } catch (CompletionException exc) { - Assert.assertTrue(exc instanceof CompletionException); Assert.assertNotNull(exc.getCause()); Assert.assertTrue(exc.getCause() instanceof RpcException); - Assert.assertTrue(((RpcException)exc.getCause()).getType() == RpcException.Type.FAILED); + Assert.assertSame(((RpcException) exc.getCause()).getType(), RpcException.Type.FAILED); } catch (Exception exc) { Assert.fail(exc.toString()); } // check that the connection is still open - getCallSequence(client, 1); + this.context.runUntil(getCallSequence(client, 1)).join(); } @org.junit.Test @@ -625,5 +624,21 @@ public class RpcTest { int unwrappedAt = this.context.runUntil(unwrap).join(); Assert.assertTrue(unwrappedAt >= 0); } + + @org.junit.Test + public void testEmbargoNull() { + var client = new Test.TestMoreStuff.Client(context.connect(Test.TestSturdyRefObjectId.Tag.TEST_MORE_STUFF)); + var promise = client.getNullRequest().send(); + var cap = promise.getNullCap(); + var call0 = cap.getCallSequenceRequest().send(); + this.context.runUntil(promise); + var call1 = cap.getCallSequenceRequest().send(); + + Assert.assertThrows(CompletionException.class, () -> this.context.runUntil(call0).join()); + Assert.assertThrows(CompletionException.class, () -> this.context.runUntil(call1).join()); + + // check that the connection is still open + this.context.runUntil(getCallSequence(client, 0)).join(); + } } diff --git a/runtime-rpc/src/test/java/org/capnproto/RpcTestUtil.java b/runtime-rpc/src/test/java/org/capnproto/RpcTestUtil.java index 1de666f..370940b 100644 --- a/runtime-rpc/src/test/java/org/capnproto/RpcTestUtil.java +++ b/runtime-rpc/src/test/java/org/capnproto/RpcTestUtil.java @@ -220,6 +220,11 @@ class RpcTestUtil { System.out.println(cap); }); } + + @Override + protected CompletableFuture getNull(CallContext context) { + return READY_NOW; + } } static class TestTailCalleeImpl extends Test.TestTailCallee.Server { diff --git a/runtime-rpc/src/test/java/org/capnproto/TwoPartyTest.java b/runtime-rpc/src/test/java/org/capnproto/TwoPartyTest.java index 2586e22..39cb109 100644 --- a/runtime-rpc/src/test/java/org/capnproto/TwoPartyTest.java +++ b/runtime-rpc/src/test/java/org/capnproto/TwoPartyTest.java @@ -111,7 +111,7 @@ public class TwoPartyTest { } @org.junit.Test - public void testDisconnect() throws IOException { + public void testDisconnect() { //this.serverSocket.shutdownOutput(); //this.serverNetwork.close(); //this.serverNetwork.onDisconnect().join(); diff --git a/runtime/src/main/java/org/capnproto/Capability.java b/runtime/src/main/java/org/capnproto/Capability.java index 71bcbd1..14e00fa 100644 --- a/runtime/src/main/java/org/capnproto/Capability.java +++ b/runtime/src/main/java/org/capnproto/Capability.java @@ -562,11 +562,11 @@ public final class Capability { } public static ClientHook newNullCap() { - return newBrokenClient(new RuntimeException("Called null capability"), true, ClientHook.NULL_CAPABILITY_BRAND); + return newBrokenClient(RpcException.failed("Called null capability"), true, ClientHook.NULL_CAPABILITY_BRAND); } static private ClientHook newBrokenClient(String reason, boolean resolved, Object brand) { - return newBrokenClient(new RuntimeException(reason), resolved, brand); + return newBrokenClient(RpcException.failed(reason), resolved, brand); } static private ClientHook newBrokenClient(Throwable exc, boolean resolved, Object brand) {