Example #1
0
        public void AgentDisabledBasicTransactionWithSpans()
        {
            var payloadSender = new MockPayloadSender();
            var configReader  = new MockConfiguration(enabled: "false");

            using var agent = new ApmAgent(new TestAgentComponents(payloadSender: payloadSender, configuration: configReader));
            var transaction = agent.Tracer.StartTransaction("TestTransaction", "Test");

            transaction.Should().NotBeOfType <Transaction>();
            transaction.Should().BeOfType <NoopTransaction>();

            var span1 = transaction.StartSpan("test", "test");

            span1.Should().NotBeOfType <Span>();
            span1.Should().BeOfType <NoopSpan>();
            agent.Tracer.CurrentSpan.Should().Be(span1);
            span1.End();

            agent.Tracer.CurrentSpan.Should().BeNull();

            var span2 = span1.StartSpan("test2", "test");

            span2.Should().NotBeOfType <Span>();
            span2.Should().BeOfType <NoopSpan>();
            span2.End();

            transaction.End();

            payloadSender.SignalEndTransactions();
            payloadSender.WaitForAny();
            payloadSender.Transactions.Should().BeNullOrEmpty();
            payloadSender.Spans.Should().BeNullOrEmpty();
        }
        public async Task HomeIndexTransactionWithEnabledFalse(bool withDiagnosticSourceOnly)
        {
            _agent = new ApmAgent(new TestAgentComponents(
                                      _logger,
                                      new MockConfigSnapshot(_logger, enabled: "false"), _capturedPayload));

            _client = Helper.ConfigureHttpClient(true, withDiagnosticSourceOnly, _agent, _factory);

            var response = await _client.GetAsync("/Home/Index");

            response.IsSuccessStatusCode.Should().BeTrue();

            _capturedPayload.WaitForAny(TimeSpan.FromSeconds(5));
            _capturedPayload.Transactions.Should().BeNullOrEmpty();
            _capturedPayload.Spans.Should().BeNullOrEmpty();
            _capturedPayload.Errors.Should().BeNullOrEmpty();
        }
Example #3
0
        public async Task SubscribeUnsubscribe()
        {
            var mockPayloadSender = new MockPayloadSender();
            var agent             = new ApmAgent(new TestAgentComponents(payloadSender: mockPayloadSender));
            var subscriber        = new HttpDiagnosticsSubscriber();

            using (var localServer = LocalServer.Create())
            {
                var url = localServer.Uri;
                using (agent.Subscribe(subscriber))                 //subscribe
                {
                    await agent.Tracer.CaptureTransaction("TestTransaction", "TestType", async t =>
                    {
                        Thread.Sleep(5);

                        var httpClient = new HttpClient();
                        try
                        {
                            await httpClient.GetAsync(url);
                        }
                        catch (Exception e)
                        {
                            t.CaptureException(e);
                        }
                    });
                }                 //and then unsubscribe

                mockPayloadSender.WaitForAny();
                mockPayloadSender.Clear();

                await agent.Tracer.CaptureTransaction("TestTransaction", "TestType", async t =>
                {
                    Thread.Sleep(5);

                    var httpClient = new HttpClient();
                    try
                    {
                        await httpClient.GetAsync(url);
                    }
                    catch (Exception e)
                    {
                        t.CaptureException(e);
                    }
                });

                mockPayloadSender.WaitForTransactions();
                mockPayloadSender.FirstTransaction.Should().NotBeNull();
                mockPayloadSender.SignalEndSpans();
                mockPayloadSender.WaitForSpans();
                mockPayloadSender.SpansOnFirstTransaction.Should().BeEmpty();
            }
        }
Example #4
0
        public void CaptureTransactionAndSpansWithRecordingOnFalse()
        {
            var mockPayloadSender  = new MockPayloadSender();
            var mockConfigSnapshot = new MockConfiguration(recording: "false");

            using var agent = new ApmAgent(new TestAgentComponents(payloadSender: mockPayloadSender, configuration: mockConfigSnapshot));

            CreateTransactionsAndSpans(agent);

            mockPayloadSender.WaitForAny(TimeSpan.FromSeconds(5));
            mockPayloadSender.Transactions.Should().BeEmpty();
            mockPayloadSender.Spans.Should().BeEmpty();
            mockPayloadSender.Errors.Should().BeEmpty();
        }
Example #5
0
        public void RecordingFalseCaptureErrorsOnTracer()
        {
            var payloadSender = new MockPayloadSender();
            var configReader  = new MockConfiguration(recording: "false");

            using var agent = new ApmAgent(new TestAgentComponents(payloadSender: payloadSender, configuration: configReader));

            agent.Tracer.CaptureTransaction("foo", "bar", _ =>
            {
                agent.Tracer.CaptureException(new Exception());
            });

            payloadSender.WaitForAny(TimeSpan.FromSeconds(5));
            payloadSender.Errors.Should().BeNullOrEmpty();
            payloadSender.Spans.Should().BeNullOrEmpty();
            payloadSender.Transactions.Should().BeNullOrEmpty();
        }
Example #6
0
        public void AgentDisabledTransactionWithLambdaAndSpans()
        {
            var payloadSender = new MockPayloadSender();
            var configReader  = new MockConfiguration(enabled: "false");

            using var agent = new ApmAgent(new TestAgentComponents(payloadSender: payloadSender, configuration: configReader));

            var block1Ran = false;
            var block2Ran = false;
            var block3Ran = false;

            agent.Tracer.CaptureTransaction("TestTransaction", "Test", transaction =>
            {
                block1Ran = true;
                transaction.Should().NotBeOfType <Transaction>();
                transaction.Should().BeOfType <NoopTransaction>();

                transaction.CaptureSpan("test", "test", span1 =>
                {
                    block2Ran = true;
                    span1.Should().NotBeOfType <Span>();
                    span1.Should().BeOfType <NoopSpan>();
                    span1.CaptureSpan("test2", "test", span2 =>
                    {
                        block3Ran = true;
                        span2.Should().NotBeOfType <Span>();
                        span2.Should().BeOfType <NoopSpan>();
                    });
                });
            });

            block1Ran.Should().BeTrue();
            block2Ran.Should().BeTrue();
            block3Ran.Should().BeTrue();

            payloadSender.SignalEndTransactions();
            payloadSender.WaitForAny();
            payloadSender.Transactions.Should().BeNullOrEmpty();
            payloadSender.Spans.Should().BeNullOrEmpty();
        }
Example #7
0
        public void CaptureErrorLogOnSpan()
        {
            var payloadSender = new MockPayloadSender();

            using var agent = new ApmAgent(new TestAgentComponents(payloadSender: payloadSender));

            var errorLog = new ErrorLog("foo")
            {
                Level = "error", ParamMessage = "42"
            };

            agent.Tracer.CaptureTransaction("foo", "bar", t => { t.CaptureSpan("foo", "bar", s => { s.CaptureErrorLog(errorLog); }); });

            payloadSender.WaitForAny();

            payloadSender.Transactions.Should().HaveCount(1);
            payloadSender.Spans.Should().HaveCount(1);
            payloadSender.Errors.Should().HaveCount(1);
            payloadSender.FirstError.Log.Message.Should().Be("foo");
            payloadSender.FirstError.Log.Level.Should().Be("error");
            payloadSender.FirstError.Log.ParamMessage.Should().Be("42");
            payloadSender.FirstError.ParentId.Should().Be(payloadSender.FirstSpan.Id);
        }
Example #8
0
        public void AgentDisabledCaptureErrors()
        {
            var payloadSender = new MockPayloadSender();
            var configReader  = new MockConfiguration(enabled: "false");

            using var agent = new ApmAgent(new TestAgentComponents(payloadSender: payloadSender, configuration: configReader));

            agent.Tracer.CaptureTransaction("foo", "bar", transaction =>
            {
                transaction.CaptureError("foo", "bar", new StackTrace().GetFrames());
                transaction.CaptureException(new Exception());

                transaction.CaptureSpan("foo", "bar", span =>
                {
                    span.CaptureError("foo", "bar", new StackTrace().GetFrames());
                    span.CaptureException(new Exception());
                });
            });

            payloadSender.WaitForAny(TimeSpan.FromSeconds(5));
            payloadSender.Transactions.Should().BeNullOrEmpty();
            payloadSender.Spans.Should().BeNullOrEmpty();
        }