mock rpc connection

This commit is contained in:
Vaci Koblizek 2020-09-28 14:44:25 +01:00
parent 7ee0a60b5e
commit 66ae27e805
4 changed files with 81 additions and 3 deletions

View file

@ -6,5 +6,7 @@ public interface IncomingRpcMessage {
AnyPointer.Reader getBody(); AnyPointer.Reader getBody();
List<Integer> getAttachedFds(); default List<Integer> getAttachedFds() {
return List.of();
}
} }

View file

@ -6,7 +6,8 @@ public interface OutgoingRpcMessage {
AnyPointer.Builder getBody(); AnyPointer.Builder getBody();
void setFds(List<Integer> fds); default void setFds(List<Integer> fds) {
}
void send(); void send();

View file

@ -83,7 +83,13 @@ final class RpcState {
}; };
private final HashMap<ClientHook, Integer> exportsByCap = new HashMap<>(); private final HashMap<ClientHook, Integer> exportsByCap = new HashMap<>();
private final VatNetwork.Connection connection;
RpcState(VatNetwork.Connection connection) {
this.connection = connection;
}
void handleMessage(IncomingRpcMessage message) { void handleMessage(IncomingRpcMessage message) {
var reader = message.getBody().getAs(RpcProtocol.Message.factory); var reader = message.getBody().getAs(RpcProtocol.Message.factory);

View file

@ -1,13 +1,81 @@
package org.capnproto; package org.capnproto;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import java.util.ArrayDeque;
import java.util.Queue;
import java.util.concurrent.CompletableFuture;
import static org.junit.Assert.*; import static org.junit.Assert.*;
public class RpcStateTest { public class RpcStateTest {
class TestMessage implements IncomingRpcMessage {
MessageBuilder builder = new MessageBuilder();
@Override
public AnyPointer.Reader getBody() {
return builder.getRoot(AnyPointer.factory).asReader();
}
}
class TestConnection implements VatNetwork.Connection {
@Override
public OutgoingRpcMessage newOutgoingMessage(int firstSegmentWordSize) {
var message = new MessageBuilder();
return new OutgoingRpcMessage() {
@Override
public AnyPointer.Builder getBody() {
return message.getRoot(AnyPointer.factory);
}
@Override
public void send() {
sent.add(this);
}
@Override
public int sizeInWords() {
return 0;
}
};
}
@Override
public CompletableFuture<IncomingRpcMessage> receiveIncomingMessage() {
return null;
}
}
TestConnection connection;
RpcState rpc;
final Queue<OutgoingRpcMessage> sent = new ArrayDeque<>();
@Before
public void setUp() throws Exception {
connection = new TestConnection();
rpc = new RpcState(connection);
}
@After
public void tearDown() throws Exception {
connection = null;
rpc = null;
sent.clear();
}
@Test @Test
public void handleUnimplemented() { public void handleUnimplemented() {
var msg = new TestMessage();
msg.builder.getRoot(RpcProtocol.Message.factory).initUnimplemented();
rpc.handleMessage(msg);
Assert.assertTrue(sent.isEmpty());
} }
@Test @Test
@ -37,4 +105,5 @@ public class RpcStateTest {
@Test @Test
public void handleDisembargo() { public void handleDisembargo() {
} }
} }