public async Task TransactionBroadcastStream_Test() { var received = new List <TransactionsReceivedEvent>(); _eventBus.Subscribe <TransactionsReceivedEvent>(a => { received.Add(a); return(Task.CompletedTask); }); var peer = _peerPool.GetPeers(true).First(); var pubkey = peer.Info.Pubkey; var metadata = new Metadata { { GrpcConstants.PubkeyMetadataKey, pubkey } }; var transaction = await _osTestHelper.GenerateTransferTransaction(); var requestStream = new TestAsyncStreamReader <Transaction>(new List <Transaction> { transaction }); await _serverService.TransactionBroadcastStream(requestStream, BuildServerCallContext(metadata)); peer.TryAddKnownTransaction(transaction.GetHash()).ShouldBeFalse(); received.Count.ShouldBe(1); }
public async Task LibAnnouncementBroadcastStream_Stream_Test() { long libHeight = 0; var libHash = Hash.Empty; var libAnnouncements = new List <LibAnnouncement>(); for (var i = 0; i <= 3; i++) { libHeight = 100 + i; libHash = HashHelper.ComputeFrom(libHeight); libAnnouncements.Add(new LibAnnouncement { LibHeight = libHeight, LibHash = libHash }); } var peer = _peerPool.GetPeers(true).First(); peer.SyncState.ShouldNotBe(SyncState.Finished); var pubkey = peer.Info.Pubkey; var metadata = new Metadata { { GrpcConstants.PubkeyMetadataKey, pubkey } }; var requestStream = new TestAsyncStreamReader <LibAnnouncement>(libAnnouncements); var context = BuildServerCallContext(metadata); await _serverService.LibAnnouncementBroadcastStream(requestStream, context); peer.SyncState.ShouldBe(SyncState.Finished); peer.LastKnownLibHash.ShouldBe(libHash); peer.LastKnownLibHeight.ShouldBe(libHeight); }
public async Task BlockBroadcastStream_Test() { var received = new List <BlockReceivedEvent>(); _eventBus.Subscribe <BlockReceivedEvent>(a => { received.Add(a); return(Task.CompletedTask); }); var peer = _peerPool.GetPeers(true).First(); peer.SyncState.ShouldNotBe(SyncState.Finished); var pubkey = peer.Info.Pubkey; var metadata = new Metadata { { GrpcConstants.PubkeyMetadataKey, pubkey } }; var block = _osTestHelper.GenerateBlockWithTransactions(HashHelper.ComputeFrom("block1"), 1, (await _osTestHelper.GenerateTransferTransactions(1)).ToList()); var requestStream = new TestAsyncStreamReader <BlockWithTransactions>(new List <BlockWithTransactions> { block }); await _serverService.BlockBroadcastStream(requestStream, BuildServerCallContext(metadata)); peer.TryAddKnownBlock(block.GetHash()).ShouldBeFalse(); received.Count.ShouldBe(1); peer.SyncState.ShouldBe(SyncState.Finished); }
public async Task TransactionBroadcastStream_TransactionIsTooHigh_Test() { var received = new List <TransactionsReceivedEvent>(); _eventBus.Subscribe <TransactionsReceivedEvent>(a => { received.Add(a); return(Task.CompletedTask); }); var peer = _peerPool.GetPeers(true).First(); var pubkey = peer.Info.Pubkey; var metadata = new Metadata { { GrpcConstants.PubkeyMetadataKey, pubkey } }; var chain = await _blockchainService.GetChainAsync(); var transaction = await _osTestHelper.GenerateTransferTransaction(); transaction.RefBlockNumber = chain.LongestChainHeight + NetworkConstants.DefaultInitialSyncOffset + 1; var requestStream = new TestAsyncStreamReader <Transaction>(new List <Transaction> { transaction }); await _serverService.TransactionBroadcastStream(requestStream, BuildServerCallContext(metadata)); peer.TryAddKnownBlock(transaction.GetHash()).ShouldBeTrue(); received.Count.ShouldBe(0); }
public async Task TransactionBroadcastStream_UnknownPeer_Test() { var metadata = new Metadata { { GrpcConstants.PubkeyMetadataKey, "UnknownPeerPubkey" } }; var transaction = await _osTestHelper.GenerateTransferTransaction(); var requestStream = new TestAsyncStreamReader <Transaction>(new List <Transaction> { transaction }); await _serverService.TransactionBroadcastStream(requestStream, BuildServerCallContext(metadata)) .ShouldThrowAsync <RpcException>(); }
public async Task LibAnnouncementBroadcastStream_Test() { var libHeight = 100; var libHash = HashHelper.ComputeFrom("LibHash"); var peer = _peerPool.GetPeers(true).First(); peer.SyncState.ShouldNotBe(SyncState.Finished); var pubkey = peer.Info.Pubkey; var metadata = new Metadata { { GrpcConstants.PubkeyMetadataKey, pubkey } }; var context = BuildServerCallContext(metadata); var lastLibHeight = peer.LastKnownLibHeight; var lastLibHash = peer.LastKnownLibHash; var requestStream = new TestAsyncStreamReader <LibAnnouncement>(new List <LibAnnouncement> { null }); await _serverService.LibAnnouncementBroadcastStream(requestStream, context); peer.SyncState.ShouldNotBe(SyncState.Finished); peer.LastKnownLibHash.ShouldBe(lastLibHash); peer.LastKnownLibHeight.ShouldBe(lastLibHeight); requestStream = new TestAsyncStreamReader <LibAnnouncement>(new List <LibAnnouncement> { new LibAnnouncement() }); await _serverService.LibAnnouncementBroadcastStream(requestStream, context); peer.SyncState.ShouldNotBe(SyncState.Finished); peer.LastKnownLibHash.ShouldBe(lastLibHash); peer.LastKnownLibHeight.ShouldBe(lastLibHeight); requestStream = new TestAsyncStreamReader <LibAnnouncement>(new List <LibAnnouncement> { new LibAnnouncement { LibHeight = libHeight, LibHash = libHash } }); await _serverService.LibAnnouncementBroadcastStream(requestStream, context); peer.SyncState.ShouldBe(SyncState.Finished); peer.LastKnownLibHash.ShouldBe(libHash); peer.LastKnownLibHeight.ShouldBe(libHeight); }
public async Task BlockBroadcastStream_UnknownPeer_Test() { var metadata = new Metadata { { GrpcConstants.PubkeyMetadataKey, "UnknownPeerPubkey" } }; var block = _osTestHelper.GenerateBlockWithTransactions(HashHelper.ComputeFrom("block1"), 1, (await _osTestHelper.GenerateTransferTransactions(1)).ToList()); var requestStream = new TestAsyncStreamReader <BlockWithTransactions>(new List <BlockWithTransactions> { block }); await _serverService.BlockBroadcastStream(requestStream, BuildServerCallContext(metadata)) .ShouldThrowAsync <RpcException>(); }
public async Task LibAnnouncementBroadcastStream_UnknownPeer_Test() { var metadata = new Metadata { { GrpcConstants.PubkeyMetadataKey, "UnknownPeerPubkey" } }; var transaction = await _osTestHelper.GenerateTransferTransaction(); var requestStream = new TestAsyncStreamReader <LibAnnouncement>(new List <LibAnnouncement> { new LibAnnouncement { LibHeight = 100, LibHash = HashHelper.ComputeFrom("LibHash") } }); await _serverService.LibAnnouncementBroadcastStream(requestStream, BuildServerCallContext(metadata)) .ShouldThrowAsync <RpcException>(); }
public async Task AnnouncementBroadcastStream_RepeatedBlock_Test() { var peer = _peerPool.GetPeers(true).First(); var pubkey = peer.Info.Pubkey; var metadata = new Metadata { { GrpcConstants.PubkeyMetadataKey, pubkey } }; var block = _osTestHelper.GenerateBlockWithTransactions(HashHelper.ComputeFrom("block1"), 1, (await _osTestHelper.GenerateTransferTransactions(1)).ToList()); var requestStream = new TestAsyncStreamReader <BlockAnnouncement>(new List <BlockAnnouncement> { new BlockAnnouncement { BlockHash = block.GetHash(), BlockHeight = block.Height } }); await _serverService.AnnouncementBroadcastStream(requestStream, BuildServerCallContext(metadata)); var received = new List <AnnouncementReceivedEventData>(); _eventBus.Subscribe <AnnouncementReceivedEventData>(a => { received.Add(a); return(Task.CompletedTask); }); requestStream = new TestAsyncStreamReader <BlockAnnouncement>(new List <BlockAnnouncement> { new BlockAnnouncement { BlockHash = block.GetHash(), BlockHeight = block.Height } }); await _serverService.AnnouncementBroadcastStream(requestStream, BuildServerCallContext(metadata)); received.Count.ShouldBe(0); }
public async Task AnnouncementBroadcastStream_Stream_Test() { var received = new List <AnnouncementReceivedEventData>(); _eventBus.Subscribe <AnnouncementReceivedEventData>(a => { received.Add(a); return(Task.CompletedTask); }); var announcements = new List <BlockAnnouncement>(); for (var i = 0; i < 5; i++) { announcements.Add(new BlockAnnouncement { BlockHash = HashHelper.ComputeFrom($"block-{i}"), BlockHeight = 10 + i }); } var pubkey = _peerPool.GetPeers(true).First().Info.Pubkey; var metadata = new Metadata { { GrpcConstants.PubkeyMetadataKey, pubkey } }; var context = BuildServerCallContext(metadata); var requestStream = new TestAsyncStreamReader <BlockAnnouncement>(announcements.ToArray()); await _serverService.AnnouncementBroadcastStream(requestStream, context); received.Count.ShouldBe(5); }
public async Task BlockBroadcastStream_Stream_Test() { var received = new List <BlockReceivedEvent>(); _eventBus.Subscribe <BlockReceivedEvent>(a => { received.Add(a); return(Task.CompletedTask); }); var blocks = new List <BlockWithTransactions>(); blocks.Add(_osTestHelper.GenerateBlockWithTransactions(HashHelper.ComputeFrom("block1"), 1, (await _osTestHelper.GenerateTransferTransactions(1)).ToList())); blocks.Add(_osTestHelper.GenerateBlockWithTransactions(HashHelper.ComputeFrom("block2"), 2, (await _osTestHelper.GenerateTransferTransactions(2)).ToList())); blocks.Add(_osTestHelper.GenerateBlockWithTransactions(HashHelper.ComputeFrom("block3"), 3, (await _osTestHelper.GenerateTransferTransactions(3)).ToList())); var context = BuildServerCallContext(); var requestStream = new TestAsyncStreamReader <BlockWithTransactions>(blocks.ToArray()); context.RequestHeaders.Add(new Metadata.Entry(GrpcConstants.PubkeyMetadataKey, NetworkTestConstants.FakePubkey2)); await _serverService.BlockBroadcastStream(requestStream, context); received.Count.ShouldBe(3); }