Skip to content

Commit 3f72446

Browse files
committed
Add integration tests
1 parent 52ebbb0 commit 3f72446

File tree

3 files changed

+95
-0
lines changed

3 files changed

+95
-0
lines changed

examples/example.c

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,28 @@ discarding_before_send_metric_callback(sentry_value_t metric, void *user_data)
202202
return sentry_value_new_null();
203203
}
204204

205+
static sentry_value_t
206+
before_breadcrumb_callback(sentry_value_t breadcrumb, void *user_data)
207+
{
208+
(void)user_data;
209+
210+
// make our mark on the breadcrumbs
211+
sentry_value_set_by_key(
212+
breadcrumb, "category", sentry_value_new_string("before_breadcrumb"));
213+
214+
return breadcrumb;
215+
}
216+
217+
static sentry_value_t
218+
discarding_before_breadcrumb_callback(sentry_value_t breadcrumb, void *user_data)
219+
{
220+
(void)user_data;
221+
222+
// discard breadcrumb
223+
sentry_value_decref(breadcrumb);
224+
return sentry_value_new_null();
225+
}
226+
205227
// Test logger that outputs in a format the integration tests can parse
206228
static void
207229
test_logger_callback(
@@ -625,6 +647,16 @@ main(int argc, char **argv)
625647
options, discarding_before_send_metric_callback, NULL);
626648
}
627649

650+
if (has_arg(argc, argv, "before-breadcrumb")) {
651+
sentry_options_set_before_breadcrumb(
652+
options, before_breadcrumb_callback, NULL);
653+
}
654+
655+
if (has_arg(argc, argv, "discarding-before-breadcrumb")) {
656+
sentry_options_set_before_breadcrumb(
657+
options, discarding_before_breadcrumb_callback, NULL);
658+
}
659+
628660
if (0 != sentry_init(options)) {
629661
return EXIT_FAILURE;
630662
}

tests/assertions.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -424,6 +424,19 @@ def assert_no_before_send(envelope):
424424
assert ("adapted_by", "before_send") not in event.items()
425425

426426

427+
def assert_before_breadcrumb(envelope):
428+
event = envelope.get_event()
429+
breadcrumbs = event.get("breadcrumbs", [])
430+
assert len(breadcrumbs) > 0
431+
assert all(b.get("category") == "before_breadcrumb" for b in breadcrumbs)
432+
433+
434+
def assert_no_breadcrumbs(envelope):
435+
event = envelope.get_event()
436+
breadcrumbs = event.get("breadcrumbs", [])
437+
assert len(breadcrumbs) == 0
438+
439+
427440
@dataclass(frozen=True)
428441
class CrashpadAttachments:
429442
event: dict

tests/test_integration_http.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
assert_gzip_content_encoding,
3131
assert_gzip_file_header,
3232
assert_attachment_view_hierarchy,
33+
assert_before_breadcrumb,
34+
assert_no_breadcrumbs,
3335
)
3436
from .conditions import has_http, has_breakpad, has_files, is_kcov
3537

@@ -675,3 +677,51 @@ def test_capture_with_scope(cmake, httpserver):
675677

676678
assert_breadcrumb(envelope, "scoped crumb")
677679
assert_attachment(envelope)
680+
681+
682+
def test_before_breadcrumb_http(cmake, httpserver):
683+
tmp_path = cmake(["sentry_example"], {"SENTRY_BACKEND": "none"})
684+
685+
httpserver.expect_oneshot_request(
686+
"/api/123456/envelope/",
687+
headers={"x-sentry-auth": auth_header},
688+
).respond_with_data("OK")
689+
env = dict(os.environ, SENTRY_DSN=make_dsn(httpserver))
690+
691+
run(
692+
tmp_path,
693+
"sentry_example",
694+
["log", "before-breadcrumb", "capture-event"],
695+
env=env,
696+
)
697+
698+
assert len(httpserver.log) == 1
699+
output = httpserver.log[0][0].get_data()
700+
envelope = Envelope.deserialize(output)
701+
702+
assert_event(envelope)
703+
assert_before_breadcrumb(envelope)
704+
705+
706+
def test_discarding_before_breadcrumb_http(cmake, httpserver):
707+
tmp_path = cmake(["sentry_example"], {"SENTRY_BACKEND": "none"})
708+
709+
httpserver.expect_oneshot_request(
710+
"/api/123456/envelope/",
711+
headers={"x-sentry-auth": auth_header},
712+
).respond_with_data("OK")
713+
env = dict(os.environ, SENTRY_DSN=make_dsn(httpserver))
714+
715+
run(
716+
tmp_path,
717+
"sentry_example",
718+
["log", "discarding-before-breadcrumb", "capture-event"],
719+
env=env,
720+
)
721+
722+
assert len(httpserver.log) == 1
723+
output = httpserver.log[0][0].get_data()
724+
envelope = Envelope.deserialize(output)
725+
726+
assert_event(envelope)
727+
assert_no_breadcrumbs(envelope)

0 commit comments

Comments
 (0)