Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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();
        }