public void PipelineBuilder_Defaults()
        {
            var builder = new SpanProcessorPipelineBuilder();

            Assert.Null(builder.Exporter);
            Assert.Null(builder.Processors);

            var processor = builder.Build();

            Assert.Null(builder.Exporter);
            Assert.Single(builder.Processors);
            Assert.IsType <NoopSpanProcessor>(builder.Processors[0]);
            Assert.Same(processor, builder.Processors[0]);
        }
        public void PipelineBuilder_AddExporter()
        {
            var builder = new SpanProcessorPipelineBuilder();

            var exporter = new TestSpanExporter(null);

            builder.SetExporter(exporter);

            Assert.Same(exporter, builder.Exporter);

            var processor = builder.Build();

            Assert.Single(builder.Processors);
            Assert.IsType <BatchingSpanProcessor>(builder.Processors.Single());
            Assert.Same(processor, builder.Processors[0]);
        }
        public void PipelineBuilder_AddProcessorChainWithExporter()
        {
            var builder = new SpanProcessorPipelineBuilder();

            bool processorFactory1Called = false;
            bool processorFactory2Called = false;
            bool exportingFactory3Called = false;

            builder
            .AddProcessor(next =>
            {
                processorFactory1Called = true;
                Assert.NotNull(next);
                return(new TestProcessor(next, "1"));
            })
            .AddProcessor(next =>
            {
                processorFactory2Called = true;
                Assert.NotNull(next);
                return(new TestProcessor(next, "2"));
            })
            .SetExportingProcessor(exporter =>
            {
                exportingFactory3Called = true;
                Assert.NotNull(exporter);
                return(new SimpleSpanProcessor(exporter));
            })
            .SetExporter(new TestSpanExporter(null));

            var firstProcessor = (TestProcessor)builder.Build();

            Assert.Equal(3, builder.Processors.Count);
            Assert.True(processorFactory1Called);
            Assert.True(processorFactory2Called);
            Assert.True(exportingFactory3Called);

            Assert.Equal("1", firstProcessor.Name);

            var secondProcessor = (TestProcessor)firstProcessor.Next;

            Assert.Equal("2", secondProcessor.Name);
            var thirdProcessor = secondProcessor.Next;

            Assert.IsType <SimpleSpanProcessor>(thirdProcessor);
        }
        public void PipelineBuilder_AddProcessorChain()
        {
            var builder = new SpanProcessorPipelineBuilder();

            bool processorFactory1Called = false;
            bool processorFactory2Called = false;
            bool processorFactory3Called = false;

            builder
            .AddProcessor(next =>
            {
                processorFactory1Called = true;
                Assert.NotNull(next);
                return(new TestProcessor(next, "1"));
            })
            .AddProcessor(next =>
            {
                processorFactory2Called = true;
                Assert.NotNull(next);
                return(new TestProcessor(next, "2"));
            })
            .AddProcessor(next =>
            {
                processorFactory3Called = true;
                Assert.Null(next);
                return(new TestProcessor(next, "3"));
            });

            var firstProcessor = (TestProcessor)builder.Build();

            Assert.Equal(3, builder.Processors.Count);
            Assert.True(processorFactory1Called);
            Assert.True(processorFactory2Called);
            Assert.True(processorFactory3Called);

            Assert.Equal("1", firstProcessor.Name);

            var secondProcessor = (TestProcessor)firstProcessor.Next;

            Assert.Equal("2", secondProcessor.Name);
            var thirdProcessor = (TestProcessor)secondProcessor.Next;

            Assert.Equal("3", thirdProcessor.Name);
        }
        public void PipelineBuilder_AddProcessor()
        {
            var builder = new SpanProcessorPipelineBuilder();

            bool processorFactoryCalled = false;
            var  processor = new TestProcessor();

            builder.AddProcessor(e =>
            {
                processorFactoryCalled = true;
                return(processor);
            });

            Assert.Same(processor, builder.Build());

            Assert.Single(builder.Processors);
            Assert.True(processorFactoryCalled);
            Assert.Same(processor, builder.Processors.Single());
        }
        public void PipelineBuilder_AddExporterAndExportingProcessor()
        {
            var builder = new SpanProcessorPipelineBuilder();

            var exporter = new TestSpanExporter(null);

            builder.SetExporter(exporter);

            bool processorFactoryCalled = false;

            builder.SetExportingProcessor(e =>
            {
                processorFactoryCalled = true;
                return(new SimpleSpanProcessor(e));
            });

            var processor = builder.Build();

            Assert.Single(builder.Processors);
            Assert.True(processorFactoryCalled);
            Assert.IsType <SimpleSpanProcessor>(builder.Processors.Single());
            Assert.Same(processor, builder.Processors[0]);
        }