[NetCoreFact] //see: https://github.com/elastic/apm-agent-dotnet/issues/516 public void OnNextWithStart() { var logger = new TestLogger(); var agent = new ApmAgent(new TestAgentComponents(logger)); StartTransaction(agent); var listener = HttpDiagnosticListener.New(agent); var request = new HttpRequestMessage(HttpMethod.Get, "https://elastic.co"); //Simulate Start listener.OnNext(new KeyValuePair <string, object>("System.Net.Http.HttpRequestOut.Start", new { Request = request })); ProcessingRequestsCount(listener).Should().Be(1); var span = GetSpanForRequest(listener, request); span.Context.Http.Url.Should().Be(request.RequestUri.ToString()); span.Context.Http.Method.Should().Be(HttpMethod.Get.ToString()); span.End(); span.Context.Destination.Address.Should().Be(request.RequestUri.Host); span.Context.Destination.Port.Should().Be(UrlUtilsTests.DefaultHttpsPort); }
public void OnErrorLog() { var logger = new TestLogger(); var agent = new ApmAgent(new TestAgentComponents(logger)); var listener = HttpDiagnosticListener.New(agent); const string exceptionMessage = "Oops, this went wrong"; var fakeException = new Exception(exceptionMessage); listener.OnError(fakeException); logger.Lines.Should().NotBeEmpty(); logger.Lines[0] .Should() .ContainAll( "HttpDiagnosticListener", "in OnError", ".cs:", exceptionMessage ); }
[NetCoreFact] //see: https://github.com/elastic/apm-agent-dotnet/issues/516 public void CaptureErrorOnFailingHttpCall_DirectCall() { var(disposableListener, payloadSender, agent) = RegisterListenerAndStartTransaction(); using (disposableListener) { var listener = HttpDiagnosticListener.New(agent); var request = new HttpRequestMessage(HttpMethod.Get, "https://elastic.co"); //Simulate Start listener.OnNext(new KeyValuePair <string, object>("System.Net.Http.HttpRequestOut.Start", new { Request = request })); const string exceptionMsg = "Sample exception msg"; var exception = new Exception(exceptionMsg); //Simulate Exception listener.OnNext(new KeyValuePair <string, object>("System.Net.Http.Exception", new { Request = request, Exception = exception })); payloadSender.Errors.Should().NotBeEmpty(); payloadSender.FirstError.Exception.Message.Should().Be(exceptionMsg); payloadSender.FirstError.Exception.Type.Should().Be(typeof(Exception).FullName); } }
public void OnNextWithStartAndStop() { var logger = new TestLogger(); var payloadSender = new MockPayloadSender(); var agent = new ApmAgent(new TestAgentComponents(logger, payloadSender: payloadSender)); StartTransaction(agent); var listener = HttpDiagnosticListener.New(agent); var request = new HttpRequestMessage(HttpMethod.Get, "https://elastic.co"); var response = new HttpResponseMessage(HttpStatusCode.OK); //Simulate Start listener.OnNext(new KeyValuePair <string, object>(StartEventKey(listener), new { Request = request })); //Simulate Stop listener.OnNext(new KeyValuePair <string, object>(StopEventKey(listener), new { Request = request, Response = response })); ProcessingRequestsCount(listener).Should().Be(0); var firstSpan = payloadSender.FirstSpan; firstSpan.Should().NotBeNull(); firstSpan.Context.Http.Url.Should().BeEquivalentTo(request.RequestUri.AbsoluteUri); firstSpan.Context.Http.Method.Should().Be(HttpMethod.Get.Method); }
public void OnNextWithStartAndStopTwice() { var logger = new TestLogger(LogLevel.Warning); var agent = new ApmAgent(new TestAgentComponents(logger)); StartTransaction(agent); var listener = new HttpDiagnosticListener(agent); var request = new HttpRequestMessage(HttpMethod.Get, "https://elastic.co"); var response = new HttpResponseMessage(HttpStatusCode.OK); //Simulate Start listener.OnNext(new KeyValuePair <string, object>("System.Net.Http.HttpRequestOut.Start", new { Request = request })); //Simulate Stop listener.OnNext(new KeyValuePair <string, object>("System.Net.Http.HttpRequestOut.Stop", new { Request = request, Response = response })); //Simulate Stop again. This should not happen, still we test for this. listener.OnNext(new KeyValuePair <string, object>("System.Net.Http.HttpRequestOut.Stop", new { Request = request, Response = response })); Assert.Equal( $"{LogLevel.Warning} {listener.Name}: Failed capturing request '{HttpMethod.Get} {request.RequestUri}' in System.Net.Http.HttpRequestOut.Stop. This Span will be skipped in case it wasn't captured before.", logger.Lines[0]); Assert.NotNull(TransactionContainer.Transactions.Value); Assert.Single(TransactionContainer.Transactions.Value.Spans); }
public void CaptureErrorOnFailingHttpCall_DirectCall() { var payloadSender = new MockPayloadSender(); var agent = new ApmAgent(new TestAgentComponents(payloadSender: payloadSender)); RegisterListenerAndStartTransaction(agent); var listener = new HttpDiagnosticListener(agent); var request = new HttpRequestMessage(HttpMethod.Get, "https://elastic.co"); //Simulate Start listener.OnNext(new KeyValuePair <string, object>("System.Net.Http.HttpRequestOut.Start", new { Request = request })); var exceptionMsg = "Sample exception msg"; var exception = new Exception(exceptionMsg); //Simulate Exception listener.OnNext(new KeyValuePair <string, object>("System.Net.Http.Exception", new { Request = request, Exception = exception })); Assert.NotEmpty(payloadSender.Errors); Assert.Equal(exceptionMsg, payloadSender.Errors[0].Errors[0].Exception.Message); Assert.Equal(typeof(Exception).FullName, payloadSender.Errors[0].Errors[0].Exception.Type); }