use of org.apache.ignite.raft.jraft.rpc.Message in project ignite-3 by apache.
the class CopySessionTest method testOnRpcReturnedOK.
@Test
public void testOnRpcReturnedOK() {
assertNull(this.session.getRpcCall());
final ByteBufferCollector bufRef = ByteBufferCollector.allocate(0);
this.session.setDestBuf(bufRef);
final CompletableFuture<Message> future = new CompletableFuture<>();
final RpcRequests.GetFileRequest rb = raftOpts.getRaftMessagesFactory().getFileRequest().readerId(99).filename("data").count(Integer.MAX_VALUE).offset(100).readPartly(true).build();
Mockito.when(this.rpcService.getFile(this.address, rb, this.copyOpts.getTimeoutMs(), session.getDone())).thenReturn(future);
this.session.onRpcReturned(Status.OK(), raftOpts.getRaftMessagesFactory().getFileResponse().readSize(100).eof(false).data(new ByteString(new byte[100])).build());
assertEquals(100, bufRef.capacity());
assertEquals(100, bufRef.getBuffer().position());
assertNotNull(this.session.getRpcCall());
// send next request
assertSame(future, this.session.getRpcCall());
}
use of org.apache.ignite.raft.jraft.rpc.Message in project ignite-3 by apache.
the class LocalSnapshotCopierTest method testCancelByRemote.
@Test
@SuppressWarnings({ "rawtypes", "unchecked" })
public void testCancelByRemote() throws Exception {
final CompletableFuture<Message> future = new CompletableFuture<>();
final RpcRequests.GetFileRequest rb = raftOptions.getRaftMessagesFactory().getFileRequest().readerId(99).filename(Snapshot.JRAFT_SNAPSHOT_META_FILE).count(Integer.MAX_VALUE).offset(0).readPartly(true).build();
// mock get metadata
ArgumentCaptor<RpcResponseClosure> argument = ArgumentCaptor.forClass(RpcResponseClosure.class);
Mockito.when(this.raftClientService.getFile(eq(new Endpoint("localhost", 8081)), eq(rb), eq(this.copyOpts.getTimeoutMs()), argument.capture())).thenReturn(future);
this.copier.start();
assertTrue(TestUtils.waitForArgumentCapture(argument, 5_000));
final RpcResponseClosure<RpcRequests.GetFileResponse> closure = argument.getValue();
closure.run(new Status(RaftError.ECANCELED, "test cancel"));
this.copier.join();
// start timer
final SnapshotReader reader = this.copier.getReader();
assertNull(reader);
assertEquals(RaftError.ECANCELED.getNumber(), this.copier.getCode());
assertEquals("test cancel", this.copier.getErrorMsg());
}
use of org.apache.ignite.raft.jraft.rpc.Message in project ignite-3 by apache.
the class LocalSnapshotCopierTest method testStartJoinFinishOK.
@Test
@SuppressWarnings({ "rawtypes", "unchecked" })
public void testStartJoinFinishOK() throws Exception {
final CompletableFuture<Message> future = new CompletableFuture<>();
final GetFileRequestBuilder rb = raftOptions.getRaftMessagesFactory().getFileRequest().readerId(99).filename(Snapshot.JRAFT_SNAPSHOT_META_FILE).count(Integer.MAX_VALUE).offset(0).readPartly(true);
// mock get metadata
ArgumentCaptor<RpcResponseClosure> argument = ArgumentCaptor.forClass(RpcResponseClosure.class);
Mockito.when(this.raftClientService.getFile(eq(new Endpoint("localhost", 8081)), eq(rb.build()), eq(this.copyOpts.getTimeoutMs()), argument.capture())).thenReturn(future);
this.copier.start();
assertTrue(TestUtils.waitForArgumentCapture(argument, 5_000));
RpcResponseClosure<RpcRequests.GetFileResponse> closure = argument.getValue();
final ByteBuffer metaBuf = this.table.saveToByteBufferAsRemote();
RpcRequests.GetFileResponse response = raftOptions.getRaftMessagesFactory().getFileResponse().readSize(metaBuf.remaining()).eof(true).data(new ByteString(metaBuf)).build();
closure.setResponse(response);
// mock get file
argument = ArgumentCaptor.forClass(RpcResponseClosure.class);
rb.filename("testFile");
rb.count(this.raftOptions.getMaxByteCountPerRpc());
Mockito.when(this.raftClientService.getFile(eq(new Endpoint("localhost", 8081)), eq(rb.build()), eq(this.copyOpts.getTimeoutMs()), argument.capture())).thenReturn(future);
closure.run(Status.OK());
assertTrue(TestUtils.waitForArgumentCapture(argument, 5_000));
closure = argument.getValue();
response = raftOptions.getRaftMessagesFactory().getFileResponse().readSize(100).eof(true).data(new ByteString(new byte[100])).build();
closure.setResponse(response);
closure.run(Status.OK());
this.copier.join();
final SnapshotReader reader = this.copier.getReader();
assertSame(this.reader, reader);
assertEquals(1, this.writer.listFiles().size());
assertTrue(this.writer.listFiles().contains("testFile"));
}
use of org.apache.ignite.raft.jraft.rpc.Message in project ignite-3 by apache.
the class FileServiceTest method testGetLargeFileData.
@Test
public void testGetLargeFileData() throws IOException {
final String data = writeLargeData();
final long readerId = FileService.getInstance().addReader(this.fileReader);
int fileOffset = 0;
while (true) {
final RpcRequests.GetFileRequest request = msgFactory.getFileRequest().count(4096).filename("data").offset(fileOffset).readerId(readerId).build();
final RpcContext asyncContext = Mockito.mock(RpcContext.class);
final Message msg = //
FileService.getInstance().handleGetFile(request, new RpcRequestClosure(asyncContext, msgFactory));
assertTrue(msg instanceof RpcRequests.GetFileResponse);
final RpcRequests.GetFileResponse response = (RpcRequests.GetFileResponse) msg;
final byte[] sourceArray = data.getBytes(UTF_8);
final byte[] respData = response.data().toByteArray();
final int length = sourceArray.length;
int offset = 0;
while (offset + length <= respData.length) {
final byte[] respArray = new byte[length];
System.arraycopy(respData, offset, respArray, 0, length);
try {
assertArrayEquals(sourceArray, respArray, "Offset: " + fileOffset);
} catch (AssertionError e) {
LOG.error("arrayComparisonFailure", e);
}
offset += length;
}
fileOffset += offset;
if (response.eof()) {
break;
}
}
}
use of org.apache.ignite.raft.jraft.rpc.Message in project ignite-3 by apache.
the class FileServiceTest method testGetFileData.
@Test
public void testGetFileData() throws IOException {
writeData();
long readerId = FileService.getInstance().addReader(this.fileReader);
RpcRequests.GetFileRequest request = msgFactory.getFileRequest().count(Integer.MAX_VALUE).filename("data").offset(0).readerId(readerId).build();
RpcContext asyncContext = Mockito.mock(RpcContext.class);
Message msg = FileService.getInstance().handleGetFile(request, new RpcRequestClosure(asyncContext, msgFactory));
assertTrue(msg instanceof RpcRequests.GetFileResponse);
RpcRequests.GetFileResponse response = (RpcRequests.GetFileResponse) msg;
assertTrue(response.eof());
assertEquals("jraft is great!", new String(response.data().toByteArray(), UTF_8));
assertEquals(-1, response.readSize());
}
Aggregations