public void TestGetUncommittedBlockHandle() { // TODO: [vermorel] Remove all inter-test dependencies var(_, inbox, outbox, chainController, c5, uncommittedBlockId) = TestOpenBlock(); // C(0) -> C(1) -> C(2) -> C(3) -> C(4) // | \-> C(4-1) // | \-> U(4-2) // \-> C(2-1) -> C(3-1) var request = GetBlockHandleRequest.From(_r1, c5, uncommittedBlockId); inbox.TryWrite(request.Span); chainController.HandleRequest(); outbox.Next(); // because we did the TestOpenBlock in the beginning var result = new GetBlockHandleResponse(outbox.Peek().Span); Assert.Equal(MessageKind.BlockHandleResponse, result.MessageHeader.MessageKind); Assert.Equal(_r1, result.MessageHeader.RequestId); Assert.Equal(c5, result.MessageHeader.ClientId); Assert.Equal(_4_2, result.Handle.ConvertToBlockAlias(c5.Mask)); }
public void terab_utxo_get_uncommitted_block() { var blockUcid = terab_utxo_open_block(); _socket.ExpectReceive(data => { data.Clear(); Assert.True(data.Length == MessageHeader.SizeInBytes); var header = new MessageHeader(GetBlockHandleRequest.SizeInBytes, _r1, _c0, MessageKind.GetBlockHandle); var headerStorage = new MessageHeader[1]; headerStorage[0] = header; var headerBytes = MemoryMarshal.Cast <MessageHeader, byte>(headerStorage); headerBytes.CopyTo(data); return(MessageHeader.SizeInBytes); }); _socket.ExpectReceive(data => { data.Clear(); Assert.True(data.Length == GetBlockHandleRequest.SizeInBytes - MessageHeader.SizeInBytes); // TODO: [vermorel] bytes are off here var request = GetBlockHandleRequest.From(_r1, _c0, blockUcid); request.Span.Slice(16).CopyTo(data); return(GetBlockHandleRequest.SizeInBytes - MessageHeader.SizeInBytes); }); _socket.ExpectConnected(() => true); _socket.ExpectConnected(() => true); _socket.ExpectSend(data => { Assert.Equal(GetBlockHandleResponse.SizeInBytes, data.Length); var response = new GetBlockHandleResponse(data); Assert.Equal(new BlockAlias(0, 0), response.Handle.ConvertToBlockAlias(_handleMask)); return(GetBlockHandleResponse.SizeInBytes); }); Assert.True(_clientConn.HandleRequest()); Assert.True(_dispatcher.HandleRequest()); Assert.True(_chainController.HandleRequest()); Assert.True(_dispatcher.HandleRequest()); Assert.True(_clientConn.HandleResponse()); _socket.ExpectAllDone(); }
public void OpenGetBlockHandle() { var instance = GetInstance(); instance.Start(); var localEndpoint = new IPEndPoint(IPAddress.Loopback, instance.Port); var rawSocket = new Socket(localEndpoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); rawSocket.Connect(localEndpoint); var socket = new SocketLikeAdapter(rawSocket); try { // Open block var openBlockRequest = OpenBlockRequest.ForGenesis(RequestId.MinRequestId); socket.Send(openBlockRequest.Span); var openBlockResponse = new OpenBlockResponse(new byte[OpenBlockResponse.SizeInBytes]); socket.Receive(openBlockResponse.Span); Assert.Equal(OpenBlockStatus.Success, openBlockResponse.Status); // Get block handle var clientId = new ClientId(); var blockHandleRequest = GetBlockHandleRequest.From( new RequestId(1), clientId, openBlockResponse.UncommittedBlockId); socket.Send(blockHandleRequest.Span); var blockHandleResponse = new GetBlockHandleResponse(new byte[GetBlockHandleResponse.SizeInBytes]); socket.Receive(blockHandleResponse.Span); Assert.Equal(GetBlockHandleStatus.Success, blockHandleResponse.Status); Assert.Equal(openBlockResponse.Handle, blockHandleResponse.Handle); Assert.Equal(default(ClientId), blockHandleResponse.MessageHeader.ClientId); Assert.Equal(new RequestId(1), blockHandleResponse.MessageHeader.RequestId); } finally { socket.Close(); instance.Stop(); } }
public void TestGetCommittedBlockHandle() { var(_, inbox, outbox, chainController, c5) = Setup(); var request = GetBlockHandleRequest.From(_r1, c5, _id_2); inbox.TryWrite(request.Span); chainController.HandleRequest(); var result = new GetBlockHandleResponse(outbox.Peek().Span); Assert.Equal(MessageKind.BlockHandleResponse, result.MessageHeader.MessageKind); Assert.Equal(_r1, result.MessageHeader.RequestId); Assert.Equal(c5, result.MessageHeader.ClientId); Assert.Equal(_2, result.Handle.ConvertToBlockAlias(c5.Mask)); }
public GetBlockHandleResponse GetBlockHandle(GetBlockHandleRequest request) { BlockAlias alias; var status = request.IsCommitted ? _store.TryGetAlias(request.CommittedBlockId, out alias) : _store.TryGetAlias(request.UncommittedBlockId, out alias); switch (status) { case GetBlockAliasStatus.Success: return(new GetBlockHandleResponse(ref request.MessageHeader, request.Mask, alias, _pool)); case GetBlockAliasStatus.BlockNotFound: return(new GetBlockHandleResponse(ref request.MessageHeader, GetBlockHandleStatus.BlockNotFound, _pool)); default: throw new NotSupportedException(); } }