public void TestOpenFirstBlock() { var(_, inbox, outbox, _, c5) = Setup(); var store = new VolatileChainStore(); var chainController = new ChainController( store, inbox, outbox, lineage => { }); var request = OpenBlockRequest.From( _r1, c5, CommittedBlockId.GenesisParent); inbox.TryWrite(request.Span); chainController.HandleRequest(); var result = new OpenBlockResponse(outbox.Peek().Span); Assert.Equal(MessageKind.OpenBlockResponse, result.MessageHeader.MessageKind); Assert.Equal(_r1, result.MessageHeader.RequestId); Assert.Equal(c5, result.MessageHeader.ClientId); Assert.Equal(new BlockAlias(0, 0), result.Handle.ConvertToBlockAlias(c5.Mask)); // TODO: [vermorel] persistence unit tests should be isolated //var persister = new BlockchainPersister(TerabConfiguration.CommittedBlocksPersistencePath, // TerabConfiguration.UncommittedBlocksPersistencePath); //var newChain = persister.ReadBlockchain(); //Assert.Equal(chain.UncommittedBlockCount, newChain.UncommittedBlockCount); //Assert.Equal(chain.CommittedBlockCount, newChain.CommittedBlockCount); }
public void terab_utxo_get_committed_block() { terab_utxo_commit_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); var request = GetBlockHandleRequest.From(_r1, _c0, CommittedBlockId.Genesis); 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(); }