public async Task SendEnvelopeAsync_AttachmentTooLarge_DropsItem() { // Arrange using var httpHandler = new FakeHttpClientHandler( _ => SentryResponses.GetOkResponse() ); var logger = new AccumulativeDiagnosticLogger(); var httpTransport = new HttpTransport( new SentryOptions { Dsn = DsnSamples.ValidDsnWithSecret, MaxAttachmentSize = 1, DiagnosticLogger = logger, Debug = true }, new HttpClient(httpHandler) ); var attachmentNormal = new Attachment( AttachmentType.Default, new StreamAttachmentContent(new MemoryStream(new byte[] { 1 })), "test1.txt", null ); var attachmentTooBig = new Attachment( AttachmentType.Default, new StreamAttachmentContent(new MemoryStream(new byte[] { 1, 2, 3, 4, 5 })), "test2.txt", null ); using var envelope = Envelope.FromEvent( new SentryEvent(), new[] { attachmentNormal, attachmentTooBig } ); // Act await httpTransport.SendEnvelopeAsync(envelope); var lastRequest = httpHandler.GetRequests().Last(); var actualEnvelopeSerialized = await lastRequest.Content.ReadAsStringAsync(); // Assert // (the envelope should have only one item) logger.Entries.Should().Contain(e => e.Message == "Attachment '{0}' dropped because it's too large ({1} bytes)." && e.Args[0].ToString() == "test2.txt" && e.Args[1].ToString() == "5" ); actualEnvelopeSerialized.Should().NotContain("test2.txt"); }
public async Task SendEnvelopeAsync_ResponseNotOkWithJsonMessage_LogsError() { // Arrange const HttpStatusCode expectedCode = HttpStatusCode.BadGateway; const string expectedMessage = "Bad Gateway!"; var expectedCauses = new[] { "invalid file", "wrong arguments" }; var expectedCausesFormatted = string.Join(", ", expectedCauses); var httpHandler = Substitute.For <MockableHttpMessageHandler>(); httpHandler.VerifiableSendAsync(Arg.Any <HttpRequestMessage>(), Arg.Any <CancellationToken>()) .Returns(_ => SentryResponses.GetJsonErrorResponse(expectedCode, expectedMessage, expectedCauses)); var logger = new AccumulativeDiagnosticLogger(); var httpTransport = new HttpTransport( new SentryOptions { Dsn = DsnSamples.ValidDsnWithSecret, Debug = true, DiagnosticLogger = logger }, new HttpClient(httpHandler) ); var envelope = Envelope.FromEvent(new SentryEvent()); // Act await httpTransport.SendEnvelopeAsync(envelope); // Assert logger.Entries.Any(e => e.Level == SentryLevel.Error && e.Message == "Sentry rejected the envelope {0}. Status code: {1}. Error detail: {2}. Error causes: {3}." && e.Exception == null && e.Args[0].ToString() == envelope.TryGetEventId().ToString() && e.Args[1].ToString() == expectedCode.ToString() && e.Args[2].ToString() == expectedMessage && e.Args[3].ToString() == expectedCausesFormatted ).Should().BeTrue(); }
public async Task SendEnvelopeAsync_ResponseNotOkWithStringMessage_LogsError() { // Arrange const HttpStatusCode expectedCode = HttpStatusCode.RequestEntityTooLarge; const string expectedMessage = "413 Request Entity Too Large"; var httpHandler = Substitute.For <MockableHttpMessageHandler>(); _ = httpHandler.VerifiableSendAsync(Arg.Any <HttpRequestMessage>(), Arg.Any <CancellationToken>()) .Returns(_ => SentryResponses.GetTextErrorResponse(expectedCode, expectedMessage)); var logger = new AccumulativeDiagnosticLogger(); var httpTransport = new HttpTransport( new SentryOptions { Dsn = DsnSamples.ValidDsnWithSecret, Debug = true, DiagnosticLogger = logger }, new HttpClient(httpHandler) ); var envelope = Envelope.FromEvent(new SentryEvent()); // Act await httpTransport.SendEnvelopeAsync(envelope); // Assert _ = logger.Entries.Any(e => e.Level == SentryLevel.Error && e.Message == "Sentry rejected the envelope {0}. Status code: {1}. Error detail: {2}." && e.Exception == null && e.Args[0].ToString() == envelope.TryGetEventId().ToString() && e.Args[1].ToString() == expectedCode.ToString() && e.Args[2].ToString() == expectedMessage ).Should().BeTrue(); }