Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Add test
  • Loading branch information
buenaflor committed Dec 15, 2023
commit 203da9c065af23dbb359e69a401f2fa82a83e4aa
7 changes: 5 additions & 2 deletions dart/lib/src/transport/http_transport.dart
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@ class HttpTransport implements Transport {
HttpTransport._(this._options, this._rateLimiter)
: _dsn = Dsn.parse(_options.dsn!),
_recorder = _options.recorder {
_httpTransportRequestCreator = HttpTransportRequestCreator(_options, _dsn.postUri);
_httpTransportRequestCreator =
HttpTransportRequestCreator(_options, _dsn.postUri);
}

@override
Expand All @@ -48,7 +49,9 @@ class HttpTransport implements Transport {
}
filteredEnvelope.header.sentAt = _options.clock();

final streamedRequest = await _httpTransportRequestCreator.createRequest(filteredEnvelope);
final streamedRequest =
await _httpTransportRequestCreator.createRequest(filteredEnvelope);

final response = await _options.httpClient
.send(streamedRequest)
.then(Response.fromStream);
Expand Down
3 changes: 1 addition & 2 deletions dart/lib/src/transport/http_transport_request_creator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,7 @@ class HttpTransportRequestCreator {
final streamedRequest = StreamedRequest('POST', _requestUri);

if (_options.compressPayload) {
final compressionSink =
compressInSink(streamedRequest.sink, _headers);
final compressionSink = compressInSink(streamedRequest.sink, _headers);
envelope
.envelopeStream(_options)
.listen(compressionSink.add)
Expand Down
8 changes: 3 additions & 5 deletions dart/lib/src/transport/spotlight_http_transport.dart
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,9 @@ class SpotlightHttpTransport extends Transport {
return SpotlightHttpTransport._(options, transport);
}

SpotlightHttpTransport._(this._options, this._transport) :
_requestCreator =
HttpTransportRequestCreator(_options, Uri.parse(_options.spotlightUrl));

SpotlightHttpTransport._(this._options, this._transport)
: _requestCreator = HttpTransportRequestCreator(
_options, Uri.parse(_options.spotlightUrl));

@override
Future<SentryId?> send(SentryEnvelope envelope) async {
Expand Down Expand Up @@ -52,7 +51,6 @@ class SpotlightHttpTransport extends Transport {
'Spotlight returned an error, statusCode = ${response.statusCode}, '
'body = ${response.body}',
);
print('body = ${response.request}');
}

if (response.statusCode >= 400 && response.statusCode != 429) {
Expand Down
70 changes: 70 additions & 0 deletions dart/test/transport/spotlight_http_transport_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import 'package:http/http.dart' as http;
import 'package:http/testing.dart';
import 'package:sentry/sentry.dart';
import 'package:sentry/src/transport/http_transport.dart';
import 'package:sentry/src/transport/rate_limiter.dart';
import 'package:sentry/src/transport/spotlight_http_transport.dart';
import 'package:test/expect.dart';
import 'package:test/scaffolding.dart';

import '../mocks.dart';
import '../mocks/mock_client_report_recorder.dart';

void main() {
group('send to Sentry', () {
late Fixture fixture;

setUp(() {
fixture = Fixture();
});

test('send event to Sentry even if Spotlight fails', () async {
List<int>? body;

final httpMock = MockClient((http.Request request) async {
body = request.bodyBytes;
if (request.url.toString() == fixture.options.spotlightUrl) {
return http.Response('{}', 500);
}
return http.Response('{}', 200);
});

fixture.options.compressPayload = false;
final mockRateLimiter = MockRateLimiter();
final sut = fixture.getSut(httpMock, mockRateLimiter);

final sentryEvent = SentryEvent();
final envelope = SentryEnvelope.fromEvent(
sentryEvent,
fixture.options.sdk,
dsn: fixture.options.dsn,
);
await sut.send(envelope);

final envelopeData = <int>[];
await envelope
.envelopeStream(fixture.options)
.forEach(envelopeData.addAll);

expect(body, envelopeData);
});
});
}

class Fixture {
final options = SentryOptions(
dsn: 'https://public:[email protected]/1',
);

late var clientReportRecorder = MockClientReportRecorder();

Transport getSut(http.Client client, RateLimiter rateLimiter) {
options.httpClient = client;
options.recorder = clientReportRecorder;
options.clock = () {
return DateTime.utc(2019);
};
final httpTransport = HttpTransport(options, rateLimiter);
return SpotlightHttpTransport(options, httpTransport);
}
}