예제 #1
0
        public void RegisterOutputNode <TOut>(ISourceNode <TOut> node)
            where TOut : class, INodeOutput <TOut>, new()
        {
            node.SetId(Guid.NewGuid());

            var ioAdapter = new InputOutputAdapter <TOut>(node);

            _ioAdapters.Add(ioAdapter);
            _last = ioAdapter;

            Log.Debug($"'{Name}' registered new input {node}");
        }
예제 #2
0
        public void InputOutputAdapter_works()
        {
            var outputNode = new TestSourceNode((ctx, e) =>
            {
                for (var i = 1; i <= 5; i++)
                {
                    e.Emit(new Row {
                        ["number"] = i
                    });
                }

                e.SignalEnd();
            });

            var inputNode      = new TestSinkNode();
            var nodeStatistics = new NodeStatistics();

            nodeStatistics.RegisterNode(outputNode);
            nodeStatistics.RegisterNode(inputNode);

            var ioAdapter = new InputOutputAdapter <Row>(outputNode);

            ioAdapter.SetNodeStatisticsCollector(nodeStatistics);

            ioAdapter.AttachConsumer(inputNode);

            var context = new EtlPipelineContext();

            outputNode.Execute(context);
            inputNode.Execute(context);

            inputNode.ReceivedItems.Count.Should().Be(5);
            for (var i = 1; i <= 5; i++)
            {
                inputNode.ReceivedItems[i - 1]["number"].Should().Be(i);
            }

            nodeStatistics.TotalReads.Should().Be(5);
            nodeStatistics.TotalWrites.Should().Be(5);
            nodeStatistics.TotalErrors.Should().Be(0);
        }