Пример #1
0
        public void Will_emit_transaction_with_givien_address()
        {
            var sourceElement = new TxPoolPipelineSource <Transaction>(_txPool);
            var element       = new TxPoolPipelineElement <Transaction, Transaction>();

            var builder  = new PipelineBuilder <Transaction, Transaction>(sourceElement);
            var pipeline = builder.AddElement(element);

            Action <Transaction> mockAction = Substitute.For <Action <Transaction> >();

            element.Emit = mockAction;

            Transaction transactionToEmit = new Transaction {
                To = new Address("0x92A3c5e7Cee811C3402b933A6D43aAF2e56f2823")
            };
            Transaction transactionToIgnore = new Transaction {
                To = new Address("0x719839373E2C69aB619Acd18Ad5f6A6eF055d762")
            };

            _txPool.NewPending += Raise.EventWith <TxEventArgs>(new object(), new TxEventArgs(transactionToIgnore));
            _txPool.NewPending += Raise.EventWith <TxEventArgs>(new object(), new TxEventArgs(transactionToEmit));

            Transaction emitedTx = (Transaction)mockAction.ReceivedCalls().First().GetArguments().First();

            Assert.AreEqual(transactionToEmit, emitedTx);
        }
Пример #2
0
        public void Will_send_data_through_ws_publisher_at_the_end_of_the_pipeline()
        {
            var sourceElement = new TxPoolPipelineSource <Transaction>(_txPool);
            var element       = new TxPoolPipelineElement <Transaction, Transaction>();
            var publisher     = new WebSocketsPublisher <Transaction, Transaction>("testPublisher", Substitute.For <IJsonSerializer>());

            var mockWebSocket = Substitute.For <WebSocket>();

            mockWebSocket.State.Returns(WebSocketState.Open);
            publisher.CreateClient(mockWebSocket, "testClient");

            Transaction transactionToEmit = new() { To = new Address("0x92A3c5e7Cee811C3402b933A6D43aAF2e56f2823") };

            var builder = new PipelineBuilder <Transaction, Transaction>(sourceElement);

            builder.AddElement(element).AddElement(publisher);
            var pipeline = builder.Build();

            _txPool.NewPending += Raise.EventWith(new object(), new TxEventArgs(transactionToEmit));

            mockWebSocket.Received().SendAsync(Arg.Any <ArraySegment <byte> >(), WebSocketMessageType.Text, true, CancellationToken.None);
        }
Пример #3
0
        public void Will_send_data_through_log_publisher_at_the_end_of_the_pipeline()
        {
            string      filePath    = "path";
            Transaction transaction = new() { To = new Address("0x92A3c5e7Cee811C3402b933A6D43aAF2e56f2823") };

            IFileSystem fileSystemSub = Substitute.For <IFileSystem>();

            fileSystemSub.File.Exists(filePath).Returns(true);
            fileSystemSub.File.ReadLines(filePath).Returns(new[] { "0x92A3c5e7Cee811C3402b933A6D43aAF2e56f2823" });

            var sourceElement = new TxPoolPipelineSource <Transaction>(_txPool);
            var element       = new TxPoolPipelineElement <Transaction, Transaction>();
            var publisher     = new LogPublisher <Transaction, Transaction>(Substitute.For <IJsonSerializer>(), Substitute.For <ILogManager>(), fileSystemSub);

            var builder = new PipelineBuilder <Transaction, Transaction>(sourceElement);

            builder.AddElement(element).AddElement(publisher);
            var pipeline = builder.Build();

            _txPool.NewPending += Raise.EventWith(new object(), new TxEventArgs(transaction));
            fileSystemSub.Received().File.AppendAllText(filePath, "0x92A3c5e7Cee811C3402b933A6D43aAF2e56f2823");
        }