diff options
author | Bjørn Christian Seime <bjorncs@yahooinc.com> | 2022-07-19 13:40:00 +0200 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@yahooinc.com> | 2022-07-20 13:56:33 +0200 |
commit | b10026b7f483c0b1a30b78e4bce8b182f6487b08 (patch) | |
tree | 923bbe8ed6b7ed54145894000ad4137298454bf6 /jrt/tests/com | |
parent | aedcb7eaea2ee9f059ff55f819a6b8f91aaa15ae (diff) |
Introduce per method request access filtering to JRT
Diffstat (limited to 'jrt/tests/com')
-rw-r--r-- | jrt/tests/com/yahoo/jrt/InvokeErrorTest.java | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/jrt/tests/com/yahoo/jrt/InvokeErrorTest.java b/jrt/tests/com/yahoo/jrt/InvokeErrorTest.java index a9a0b18b5a1..4fa06eec56f 100644 --- a/jrt/tests/com/yahoo/jrt/InvokeErrorTest.java +++ b/jrt/tests/com/yahoo/jrt/InvokeErrorTest.java @@ -6,6 +6,7 @@ import org.junit.After; import org.junit.Before; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; public class InvokeErrorTest { @@ -16,6 +17,7 @@ public class InvokeErrorTest { Supervisor client; Target target; Test.Barrier barrier; + SimpleRequestAccessFilter filter; @Before public void setUp() throws ListenFailedException { @@ -23,7 +25,8 @@ public class InvokeErrorTest { client = new Supervisor(new Transport()); acceptor = server.listen(new Spec(0)); target = client.connect(new Spec("localhost", acceptor.port())); - server.addMethod(new Method("test", "iib", "i", this::rpc_test)); + filter = new SimpleRequestAccessFilter(); + server.addMethod(new Method("test", "iib", "i", this::rpc_test).requestAccessFilter(filter)); server.addMethod(new Method("test_barrier", "iib", "i", this::rpc_test_barrier)); barrier = new Test.Barrier(); } @@ -157,4 +160,36 @@ public class InvokeErrorTest { assertEquals(ErrorCode.CONNECTION, req1.errorCode()); } + @org.junit.Test + public void testFilterIsInvoked() { + Request r = new Request("test"); + r.parameters().add(new Int32Value(42)); + r.parameters().add(new Int32Value(0)); + r.parameters().add(new Int8Value((byte)0)); + assertFalse(filter.invoked); + target.invokeSync(r, timeout); + assertFalse(r.isError()); + assertTrue(filter.invoked); + } + + @org.junit.Test + public void testFilterFailsRequest() { + Request r = new Request("test"); + r.parameters().add(new Int32Value(42)); + r.parameters().add(new Int32Value(0)); + r.parameters().add(new Int8Value((byte)0)); + filter.allowed = false; + assertFalse(filter.invoked); + target.invokeSync(r, timeout); + assertTrue(r.isError()); + assertTrue(filter.invoked); + assertEquals(ErrorCode.PERMISSION_DENIED, r.errorCode()); + assertEquals("Permission denied", r.errorMessage()); + } + + private static class SimpleRequestAccessFilter implements RequestAccessFilter { + boolean invoked = false, allowed = true; + @Override public boolean allow(Request r) { invoked = true; return allowed; } + } + } |