コード例 #1
0
        [NetCoreFact]         //see: https://github.com/elastic/apm-agent-dotnet/issues/516
        public async Task HttpCallWithRegisteredListener()
        {
            var mockPayloadSender = new MockPayloadSender();
            var agent             = new ApmAgent(new TestAgentComponents(payloadSender: mockPayloadSender));
            var subscriber        = new HttpDiagnosticsSubscriber();

            using (var localServer = LocalServer.Create())
                using (agent.Subscribe(subscriber))
                {
                    var url = localServer.Uri;
                    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.Transactions.Should().NotBeEmpty();
                    mockPayloadSender.WaitForSpans();
                    mockPayloadSender.SpansOnFirstTransaction.Should().NotBeEmpty();

                    mockPayloadSender.SpansOnFirstTransaction[0].Context.Http.Should().NotBeNull();
                    mockPayloadSender.SpansOnFirstTransaction[0].Context.Http.Url.Should().Be(url);
                }
        }
コード例 #2
0
        public async Task HttpCallWithRegisteredListener()
        {
            var mockPayloadSender = new MockPayloadSender();
            var agent             = new ApmAgent(new TestAgentComponents(payloadSender: mockPayloadSender));
            var subscriber        = new HttpDiagnosticsSubscriber();

            using (var localServer = new LocalServer())
                using (agent.Subscribe(subscriber))
                {
                    var url = localServer.Uri;
                    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);
                        }
                    });

                    Assert.NotEmpty(mockPayloadSender.Payloads[0].Transactions);
                    Assert.NotEmpty(mockPayloadSender.SpansOnFirstTransaction);

                    Assert.NotNull(mockPayloadSender.SpansOnFirstTransaction[0].Context.Http);
                    Assert.Equal(url, mockPayloadSender.SpansOnFirstTransaction[0].Context.Http.Url);
                }
        }
コード例 #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();
            }
        }
コード例 #4
0
        public async Task SubscribeUnsubscribe()
        {
            var mockPayloadSender = new MockPayloadSender();
            var agent             = new ApmAgent(new TestAgentComponents(payloadSender: mockPayloadSender));
            var subscriber        = new HttpDiagnosticsSubscriber();

            using (var localServer = new LocalServer())
            {
                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.Payloads.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);
                    }
                });

                Assert.NotNull(mockPayloadSender.Payloads[0].Transactions[0]);
                Assert.Empty(mockPayloadSender.SpansOnFirstTransaction);
            }
        }