Skip to content

test(ingester): rfc 0028 slice 1 — 27 test binaries fold into one harness - #399

Merged
jensholdgaard merged 1 commit into
mainfrom
rfc0028-slice1-ingester-harness
Jul 6, 2026
Merged

test(ingester): rfc 0028 slice 1 — 27 test binaries fold into one harness#399
jensholdgaard merged 1 commit into
mainfrom
rfc0028-slice1-ingester-harness

Conversation

@jensholdgaard

@jensholdgaard jensholdgaard commented Jul 6, 2026

Copy link
Copy Markdown
Owner

What

RFC 0028 slice 1 — the ingester's 27 of 31 integration-test binaries fold into one tests/it/ harness. Pure file moves plus the mechanical scaffolding §6 allows: tests/it/main.rs mod lines, per-file removal of the duplicated mod ingest_support;/mod otlp_strategy; declarations, and crate::-prefixed support-module imports. No test body changed — the reviewer check per §6 is that no hunk in this diff touches a test function body.

RFC0028.1 — inventory proof

cargo test -p ourios-ingester -- --list: 129 tests before, 129 after; the leaf-name sets are identical (verified by stripping module-path prefixes from both lists and diffing — byte-identical). The only change is the harness's module segment (rfc0003_1_wal_before_ack::…it::rfc0003_1_wal_before_ack::… in cargo's naming). Both snapshots below.

RFC0028.2 — harness-exempt binaries

Four stay dedicated, each documented in tests/README.md: perf_metrics, audit_sink_metrics, rfc0018_otlp_compliance, rfc0025_quarantine — every one installs the process-global OTel meter provider (init_in_memory / global-meter instruments); OpenTelemetry cannot restore a replaced global, so two installers in one process race (the pre-existing note in perf_metrics.rs). The SIGKILL crash tests joined the harness — they kill fixture child binaries (CARGO_BIN_EXE_* [[bin]] targets under tests/fixtures/), never themselves.

Indicative timing (not the RFC0028.3 gate)

Same machine, warm workspace: touch crates/ourios-ingester/src/lib.rs && cargo test -p ourios-ingester --no-run62.4 s before, 20.0 s after (3.1×). The authoritative RFC0028.3 probe re-run (core→querier < 30 s, full suite ≥ 30%) happens after slice 2, recorded in epic #382.

Process note

RFC 0028's scenarios are review/measurement mechanisms (§6), not stub-able tests — there is no meaningful red rung; slices discharge scenarios directly via the §6 mechanisms, as here.

Invariants / hazards

CLAUDE.md §6.2 (tests are specifications): nothing weakened, nothing deleted — the inventory proof above is the point of this PR's shape.

Pre inventory (129, leaf names — 126 at capture base 690a654 + the 3 tests #398's review rounds added, attributed in-line)
a_failed_sync_fails_every_covered_waiter: test
a_single_commit_is_durable_before_returning: test
a_synced_batch_advances_the_durable_mark: test
all_poison_buffer_releases_its_accounting: test
audit_sink_exports_its_instruments: test
bearer_scheme_is_case_insensitive: test
cadence_drain_publish_quarantines_instead_of_requeueing: test
concurrent_commits_share_one_sync: test
content_type_and_encoding_are_case_insensitive: test
corrupt_gzip_is_400: test
default_rule_resolves_service_name: test
emit_past_ceiling_signals_an_eager_flush: test
empty_buffer_flush_is_a_no_op: test
flush_batches_per_partition_and_round_trips: test
flush_error_classification: test
flush_path_projects_the_configured_set: test
gzip_decompression_bomb_is_413: test
ingest_and_sink_metrics_export_under_their_registry_names: test
interleaved_flushes_never_strand_a_waiter: test
invariant_3_7_3_tenant_derivation_runs_per_resource_logs: test
load_all_on_an_absent_dir_is_an_empty_store: test
load_all_skips_foreign_files: test
load_all_skips_non_file_snap_entries: test
malformed_protobuf_is_400: test
missing_attribute_errors_naming_the_attribute: test
missing_content_type_is_415: test
no_rotation_means_no_cadence_write: test
non_post_to_logs_path_is_405: test
non_string_or_empty_attribute_does_not_resolve: test
open_mode_passes_and_enabled_mode_authenticates: test
operator_configured_attribute_key_is_used: test
oversize_body_is_413: test
oversize_payload_is_413: test
oversize_payload_is_invalid_argument: test
parse_high_water_accepts_a_concrete_mark: test
parse_high_water_rejects_an_absent_mark: test
parse_high_water_rejects_an_unparseable_segment: test
persistent_store_failure_retains_every_event_never_drops: test
poison_pill_permanent_drops_transient_retains: test
publish_path_projects_the_configured_set: test
quiesced_wal_append_is_503: test
quiesced_wal_append_is_unavailable: test
record_sweep_exports_the_compaction_metric_set: test
requeue_keeps_the_partition_aged_for_prompt_retry: test
rfc0001_3_5_2_corrupt_version_discards_and_full_replays: test
rfc0001_3_5_3_restore_plus_tail_replay_equals_full_rebuild: test
rfc0001_3_5_4_externally_truncated_wal_flags_a_stale_gap: test
rfc0001_3_5_cold_start_without_snapshots_full_replays: test
rfc0001_3_5_snapshot_without_a_horizon_discards_and_full_replays: test
rfc0003_10_dropped_attributes_count_is_reflected_verbatim: test
rfc0003_11_grpc_tenant_failure_is_invalid_argument: test
rfc0003_11_grpc_valid_request_succeeds: test
rfc0003_12_empty_request_succeeds_without_persisting: test
rfc0003_13_identity_and_gzip_decode_equally_unsupported_is_415: test
rfc0003_14_default_path_and_configurable_override: test
rfc0003_15_concurrent_exports_are_each_durable: test
rfc0003_1_ack_is_gated_on_the_wal_fsync: test
rfc0003_1_no_ack_until_the_batch_is_durable: test
rfc0003_2_fsynced_batch_survives_a_crash_before_ack: test
rfc0003_3_distinct_resources_fan_out_without_cross_contamination: test
rfc0003_4_unresolved_resource_rejects_entire_batch: test
rfc0003_5_grpc_and_http_protobuf_decode_identically: test
rfc0003_6_decoder_accepts_64bit_int_as_number_or_string: test
rfc0003_6_decoder_accepts_compliant_otlp_json: test
rfc0003_6_decoder_ignores_unknown_fields: test
rfc0003_6_json_and_protobuf_decode_to_the_same_request: test
rfc0003_6_json_encoder_emits_otlp_json_deviations: test
rfc0003_6_nice_doubles_roundtrip_through_otlp_json: test
rfc0003_7_structured_body_is_carried_verbatim: test
rfc0003_8_absent_body_is_none: test
rfc0003_8_string_body_is_unwrapped_verbatim: test
rfc0003_9_edge_fields_pass_through_without_coalescing: test
rfc0003_9_out_of_range_severity_is_preserved: test
rfc0008_8_ack_latency_tracks_the_batch_window: test
rfc0008_8_commit_ack_is_gated_on_a_covering_successful_sync: test
rfc0008_8_concurrent_ingest_preserves_wal_order_at_the_miner: test
rfc0008_8_syncs_advance_per_batch_not_per_record: test
rfc0014_1_size_trigger: test
rfc0014_2_age_trigger: test
rfc0014_3_rotation_force_flush: test
rfc0014_4_bounded_memory: test
rfc0014_5_no_acknowledged_data_loss: test
rfc0014_6_tenant_isolation: test
rfc0018_1_receiver_materialises_scope_fields: test
rfc0018_3_grpc_transient_is_unavailable_permanent_is_invalid_argument: test
rfc0018_3_http_transient_is_503_permanent_is_400: test
rfc0018_6_out_of_range_severity_preserved: test
rfc0023_2_overflow_bodies_round_trip_bit_identically: test
rfc0025_4_sink_quarantines_instead_of_wedging: test
rfc0025_5_quarantine_telemetry: test
rfc0026_2_ingest_authentication: test
rfc0026_2_served_grpc_stack_authenticates: test
rfc0026_3_ingest_tenant_binding: test
rfc0026_5_wildcard_binding_ingest: test
rfc0026_7_rejection_telemetry_and_audit: test
rotation_hook_fires_once_with_the_old_segments_last_durable_offset: test
rotation_hook_panic_does_not_fail_the_ingest: test
rotation_writes_snapshots_at_the_rotation_point_high_water: test
run_executes_sweeps_until_cancelled: test
segment_fill_cuts_the_window_short: test
shared_handle_emits_and_flushes_one_buffer: test
sink_rejects_a_malformed_payload_naming_the_offset: test
size_trigger_flushes_audit_before_publishing: test
size_trigger_is_skipped_when_audit_cannot_drain: test
stale_gap_flags_a_horizon_below_the_checkpoint_whose_segment_is_unseen: test
stale_gap_is_false_when_the_horizon_segment_survived: test
stale_gap_is_false_without_a_checkpoint: test
sweep_compacts_a_sealed_candidate: test
sweep_emits_a_compaction_audit_event: test
sweep_isolates_a_failing_tenant: test
sweep_of_an_empty_store_is_zero: test
sweep_reports_per_tenant_backlog_breakdown: test
sweep_scans_every_tenant: test
sweep_skips_an_unsealed_partition: test
tenant_denied_is_403: test
tenant_denied_is_permission_denied: test
tenant_resolution_is_400: test
tenant_resolution_is_invalid_argument: test
transient_store_failure_retains_for_retry: test
transient_wal_append_is_503: test
transient_wal_append_is_unavailable: test
transient_wal_sync_is_503: test
transient_wal_sync_is_unavailable: test
unrecognised_content_type_is_415: test
write_atomically_overwrites_the_previous_artefact: test
write_ordered_holds_records_when_audit_write_fails: test
write_ordered_publishes_audit_then_records_when_healthy: test
write_then_load_all_round_trips_including_encoded_tenants: test
wrong_path_is_404: test
Post inventory (129, full names)
all_poison_buffer_releases_its_accounting: test
audit_sink::tests::emit_past_ceiling_signals_an_eager_flush: test
audit_sink::tests::empty_buffer_flush_is_a_no_op: test
audit_sink::tests::flush_batches_per_partition_and_round_trips: test
audit_sink::tests::flush_error_classification: test
audit_sink::tests::persistent_store_failure_retains_every_event_never_drops: test
audit_sink::tests::poison_pill_permanent_drops_transient_retains: test
audit_sink::tests::transient_store_failure_retains_for_retry: test
audit_sink_exports_its_instruments: test
cadence_drain_publish_quarantines_instead_of_requeueing: test
compactor::tests::run_executes_sweeps_until_cancelled: test
compactor::tests::sweep_compacts_a_sealed_candidate: test
compactor::tests::sweep_emits_a_compaction_audit_event: test
compactor::tests::sweep_isolates_a_failing_tenant: test
compactor::tests::sweep_of_an_empty_store_is_zero: test
compactor::tests::sweep_reports_per_tenant_backlog_breakdown: test
compactor::tests::sweep_scans_every_tenant: test
compactor::tests::sweep_skips_an_unsealed_partition: test
http_transport_errors::content_type_and_encoding_are_case_insensitive: test
http_transport_errors::corrupt_gzip_is_400: test
http_transport_errors::gzip_decompression_bomb_is_413: test
http_transport_errors::malformed_protobuf_is_400: test
http_transport_errors::missing_content_type_is_415: test
http_transport_errors::non_post_to_logs_path_is_405: test
http_transport_errors::oversize_body_is_413: test
http_transport_errors::unrecognised_content_type_is_415: test
http_transport_errors::wrong_path_is_404: test
ingest_and_sink_metrics_export_under_their_registry_names: test
invariant_3_7_3_tenant_per_resource_logs::invariant_3_7_3_tenant_derivation_runs_per_resource_logs: test
metrics::tests::record_sweep_exports_the_compaction_metric_set: test
publish::tests::write_ordered_holds_records_when_audit_write_fails: test
publish::tests::write_ordered_publishes_audit_then_records_when_healthy: test
receiver::auth::tests::bearer_scheme_is_case_insensitive: test
receiver::auth::tests::open_mode_passes_and_enabled_mode_authenticates: test
receiver::commit::tests::a_failed_sync_fails_every_covered_waiter: test
receiver::commit::tests::a_single_commit_is_durable_before_returning: test
receiver::commit::tests::concurrent_commits_share_one_sync: test
receiver::commit::tests::interleaved_flushes_never_strand_a_waiter: test
receiver::commit::tests::segment_fill_cuts_the_window_short: test
receiver::grpc::tests::oversize_payload_is_invalid_argument: test
receiver::grpc::tests::quiesced_wal_append_is_unavailable: test
receiver::grpc::tests::tenant_denied_is_permission_denied: test
receiver::grpc::tests::tenant_resolution_is_invalid_argument: test
receiver::grpc::tests::transient_wal_append_is_unavailable: test
receiver::grpc::tests::transient_wal_sync_is_unavailable: test
receiver::http::tests::oversize_payload_is_413: test
receiver::http::tests::quiesced_wal_append_is_503: test
receiver::http::tests::tenant_denied_is_403: test
receiver::http::tests::tenant_resolution_is_400: test
receiver::http::tests::transient_wal_append_is_503: test
receiver::http::tests::transient_wal_sync_is_503: test
receiver::pipeline::tests::a_synced_batch_advances_the_durable_mark: test
receiver::pipeline::tests::rotation_hook_fires_once_with_the_old_segments_last_durable_offset: test
receiver::pipeline::tests::rotation_hook_panic_does_not_fail_the_ingest: test
receiver::tenant::tests::default_rule_resolves_service_name: test
receiver::tenant::tests::missing_attribute_errors_naming_the_attribute: test
receiver::tenant::tests::non_string_or_empty_attribute_does_not_resolve: test
receiver::tenant::tests::operator_configured_attribute_key_is_used: test
record_sink::tests::requeue_keeps_the_partition_aged_for_prompt_retry: test
record_sink::tests::shared_handle_emits_and_flushes_one_buffer: test
record_sink::tests::size_trigger_flushes_audit_before_publishing: test
record_sink::tests::size_trigger_is_skipped_when_audit_cannot_drain: test
recovery::tests::parse_high_water_accepts_a_concrete_mark: test
recovery::tests::parse_high_water_rejects_an_absent_mark: test
recovery::tests::parse_high_water_rejects_an_unparseable_segment: test
recovery::tests::sink_rejects_a_malformed_payload_naming_the_offset: test
recovery::tests::stale_gap_flags_a_horizon_below_the_checkpoint_whose_segment_is_unseen: test
recovery::tests::stale_gap_is_false_when_the_horizon_segment_survived: test
recovery::tests::stale_gap_is_false_without_a_checkpoint: test
rfc0001_3_5_snapshot_restore::rfc0001_3_5_2_corrupt_version_discards_and_full_replays: test
rfc0001_3_5_snapshot_restore::rfc0001_3_5_3_restore_plus_tail_replay_equals_full_rebuild: test
rfc0001_3_5_snapshot_restore::rfc0001_3_5_4_externally_truncated_wal_flags_a_stale_gap: test
rfc0001_3_5_snapshot_restore::rfc0001_3_5_cold_start_without_snapshots_full_replays: test
rfc0001_3_5_snapshot_restore::rfc0001_3_5_snapshot_without_a_horizon_discards_and_full_replays: test
rfc0003_10_dropped_attributes_count::rfc0003_10_dropped_attributes_count_is_reflected_verbatim: test
rfc0003_11_transport_errors::rfc0003_11_grpc_tenant_failure_is_invalid_argument: test
rfc0003_11_transport_errors::rfc0003_11_grpc_valid_request_succeeds: test
rfc0003_12_empty_request_success::rfc0003_12_empty_request_succeeds_without_persisting: test
rfc0003_13_compression::rfc0003_13_identity_and_gzip_decode_equally_unsupported_is_415: test
rfc0003_14_path_config::rfc0003_14_default_path_and_configurable_override: test
rfc0003_15_concurrent_wal_before_ack::rfc0003_15_concurrent_exports_are_each_durable: test
rfc0003_1_wal_before_ack::rfc0003_1_ack_is_gated_on_the_wal_fsync: test
rfc0003_1_wal_before_ack::rfc0003_1_no_ack_until_the_batch_is_durable: test
rfc0003_2_crash_before_ack::rfc0003_2_fsynced_batch_survives_a_crash_before_ack: test
rfc0003_3_tenant_fanout::rfc0003_3_distinct_resources_fan_out_without_cross_contamination: test
rfc0003_4_tenant_resolution_failure::rfc0003_4_unresolved_resource_rejects_entire_batch: test
rfc0003_5_grpc_http_protobuf_equivalence::rfc0003_5_grpc_and_http_protobuf_decode_identically: test
rfc0003_6_json_protobuf_equivalence::rfc0003_6_decoder_accepts_64bit_int_as_number_or_string: test
rfc0003_6_json_protobuf_equivalence::rfc0003_6_decoder_accepts_compliant_otlp_json: test
rfc0003_6_json_protobuf_equivalence::rfc0003_6_decoder_ignores_unknown_fields: test
rfc0003_6_json_protobuf_equivalence::rfc0003_6_json_and_protobuf_decode_to_the_same_request: test
rfc0003_6_json_protobuf_equivalence::rfc0003_6_json_encoder_emits_otlp_json_deviations: test
rfc0003_6_json_protobuf_equivalence::rfc0003_6_nice_doubles_roundtrip_through_otlp_json: test
rfc0003_7_body_structured_verbatim::rfc0003_7_structured_body_is_carried_verbatim: test
rfc0003_8_body_string_lraw::rfc0003_8_absent_body_is_none: test
rfc0003_8_body_string_lraw::rfc0003_8_string_body_is_unwrapped_verbatim: test
rfc0003_9_edge_otlp_fields::rfc0003_9_edge_fields_pass_through_without_coalescing: test
rfc0003_9_edge_otlp_fields::rfc0003_9_out_of_range_severity_is_preserved: test
rfc0008_10_rotation_cadence::no_rotation_means_no_cadence_write: test
rfc0008_10_rotation_cadence::rotation_writes_snapshots_at_the_rotation_point_high_water: test
rfc0008_8_batched_fsync::rfc0008_8_ack_latency_tracks_the_batch_window: test
rfc0008_8_batched_fsync::rfc0008_8_commit_ack_is_gated_on_a_covering_successful_sync: test
rfc0008_8_batched_fsync::rfc0008_8_syncs_advance_per_batch_not_per_record: test
rfc0008_8_ingest_order::rfc0008_8_concurrent_ingest_preserves_wal_order_at_the_miner: test
rfc0014_5_crash_no_loss::rfc0014_5_no_acknowledged_data_loss: test
rfc0014_ingest_write_path::rfc0014_1_size_trigger: test
rfc0014_ingest_write_path::rfc0014_2_age_trigger: test
rfc0014_ingest_write_path::rfc0014_3_rotation_force_flush: test
rfc0014_ingest_write_path::rfc0014_4_bounded_memory: test
rfc0014_ingest_write_path::rfc0014_6_tenant_isolation: test
rfc0018_1_receiver_materialises_scope_fields: test
rfc0018_6_out_of_range_severity_preserved: test
rfc0018_retryable::rfc0018_3_grpc_transient_is_unavailable_permanent_is_invalid_argument: test
rfc0018_retryable::rfc0018_3_http_transient_is_503_permanent_is_400: test
rfc0022_promoted_threading::flush_path_projects_the_configured_set: test
rfc0022_promoted_threading::publish_path_projects_the_configured_set: test
rfc0023_overflow_roundtrip::rfc0023_2_overflow_bodies_round_trip_bit_identically: test
rfc0025_4_sink_quarantines_instead_of_wedging: test
rfc0025_5_quarantine_telemetry: test
rfc0026_auth::rfc0026_2_ingest_authentication: test
rfc0026_auth::rfc0026_2_served_grpc_stack_authenticates: test
rfc0026_auth::rfc0026_3_ingest_tenant_binding: test
rfc0026_auth::rfc0026_5_wildcard_binding_ingest: test
rfc0026_auth::rfc0026_7_rejection_telemetry_and_audit: test
snapshot_store::tests::load_all_on_an_absent_dir_is_an_empty_store: test
snapshot_store::tests::load_all_skips_foreign_files: test
snapshot_store::tests::load_all_skips_non_file_snap_entries: test
snapshot_store::tests::write_atomically_overwrites_the_previous_artefact: test
snapshot_store::tests::write_then_load_all_round_trips_including_encoded_tenants: test

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation

    • Added guidance on how the integration test suite is organized and where new scenarios should be placed.
    • Clarified which test binaries are intentionally kept separate and how fixture-based tests are used.
  • Tests

    • Consolidated multiple integration test cases into a single shared harness.
    • Updated existing test cases to use shared test helpers consistently across the suite.

@jensholdgaard
jensholdgaard requested a review from Copilot July 6, 2026 07:59
@coderabbitai

coderabbitai Bot commented Jul 6, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@jensholdgaard, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 55 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 4c8db8df-1bac-4142-a5c2-4b4cbceb463f

📥 Commits

Reviewing files that changed from the base of the PR and between d9d3cba and 8ec6609.

📒 Files selected for processing (31)
  • crates/ourios-ingester/tests/README.md
  • crates/ourios-ingester/tests/it/http_transport_errors.rs
  • crates/ourios-ingester/tests/it/ingest_support/mod.rs
  • crates/ourios-ingester/tests/it/invariant_3_7_3_tenant_per_resource_logs.rs
  • crates/ourios-ingester/tests/it/main.rs
  • crates/ourios-ingester/tests/it/otlp_strategy/mod.rs
  • crates/ourios-ingester/tests/it/rfc0001_3_5_snapshot_restore.rs
  • crates/ourios-ingester/tests/it/rfc0003_10_dropped_attributes_count.rs
  • crates/ourios-ingester/tests/it/rfc0003_11_transport_errors.rs
  • crates/ourios-ingester/tests/it/rfc0003_12_empty_request_success.rs
  • crates/ourios-ingester/tests/it/rfc0003_13_compression.rs
  • crates/ourios-ingester/tests/it/rfc0003_14_path_config.rs
  • crates/ourios-ingester/tests/it/rfc0003_15_concurrent_wal_before_ack.rs
  • crates/ourios-ingester/tests/it/rfc0003_1_wal_before_ack.rs
  • crates/ourios-ingester/tests/it/rfc0003_2_crash_before_ack.rs
  • crates/ourios-ingester/tests/it/rfc0003_3_tenant_fanout.rs
  • crates/ourios-ingester/tests/it/rfc0003_4_tenant_resolution_failure.rs
  • crates/ourios-ingester/tests/it/rfc0003_5_grpc_http_protobuf_equivalence.rs
  • crates/ourios-ingester/tests/it/rfc0003_6_json_protobuf_equivalence.rs
  • crates/ourios-ingester/tests/it/rfc0003_7_body_structured_verbatim.rs
  • crates/ourios-ingester/tests/it/rfc0003_8_body_string_lraw.rs
  • crates/ourios-ingester/tests/it/rfc0003_9_edge_otlp_fields.rs
  • crates/ourios-ingester/tests/it/rfc0008_10_rotation_cadence.rs
  • crates/ourios-ingester/tests/it/rfc0008_8_batched_fsync.rs
  • crates/ourios-ingester/tests/it/rfc0008_8_ingest_order.rs
  • crates/ourios-ingester/tests/it/rfc0014_5_crash_no_loss.rs
  • crates/ourios-ingester/tests/it/rfc0014_ingest_write_path.rs
  • crates/ourios-ingester/tests/it/rfc0018_retryable.rs
  • crates/ourios-ingester/tests/it/rfc0022_promoted_threading.rs
  • crates/ourios-ingester/tests/it/rfc0023_overflow_roundtrip.rs
  • crates/ourios-ingester/tests/it/rfc0026_auth.rs
📝 Walkthrough

Walkthrough

This PR adds a consolidated integration-test harness (tests/it/main.rs) declaring shared test submodules per RFC 0028, adds a README documenting the harness layout, and updates all existing integration test files to import ingest_support/otlp_strategy helpers via crate-qualified paths instead of local mod declarations.

Changes

Integration test harness consolidation

Layer / File(s) Summary
Harness entry point and documentation
crates/ourios-ingester/tests/it/main.rs, crates/ourios-ingester/tests/README.md
Adds the consolidated main.rs harness with mod declarations wiring in all RFC test modules and documents the layout, exempt binaries, and fixtures distinction.
Test file import rewiring
crates/ourios-ingester/tests/it/*.rs
Removes local mod ingest_support/mod otlp_strategy declarations across all RFC test files, switching to crate-qualified use crate::ingest_support::{...} or use crate::otlp_strategy::{...} imports, with no test logic changes beyond one parameter type update in rfc0003_13_compression.rs.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

  • jensholdgaard/ourios#135: Overlaps with the same HTTP-related test files (http_transport_errors.rs, rfc0003_13_compression.rs, rfc0003_14_path_config.rs) that use shared ingest_support helpers.
  • jensholdgaard/ourios#136: Touches the same rfc0003_11_transport_errors.rs and rfc0003_15_concurrent_wal_before_ack.rs test files.
  • jensholdgaard/ourios#270: Directly overlaps with rfc0018_retryable.rs's ingest_support import wiring.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main change: consolidating ingester tests into one RFC 0028 harness.
Description check ✅ Passed The description is detailed and covers scope, rationale, verification, exemptions, and timing, though it doesn't use the exact template headings.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch rfc0028-slice1-ingester-harness

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

…ness

Pure moves + mechanical scaffolding (tests/it/main.rs mod lines,
crate::-prefixed support-module imports): no test body changed
(RFC0028.1). Four binaries stay dedicated per RFC0028.2 — each
installs the process-global OTel meter provider; the reasons are
committed in tests/README.md.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@jensholdgaard
jensholdgaard force-pushed the rfc0028-slice1-ingester-harness branch from d9d3cba to 8ec6609 Compare July 6, 2026 08:03

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Consolidates the ourios-ingester integration tests into a single harness (tests/it/) as RFC 0028 slice 1, reducing the number of linked test binaries while preserving the existing test inventory and behavior.

Changes:

  • Introduces a consolidated integration-test harness at crates/ourios-ingester/tests/it/main.rs with module declarations for the migrated suites.
  • Moves shared test helpers/strategies into harness modules (tests/it/ingest_support, tests/it/otlp_strategy) and updates test modules to import them via crate::....
  • Documents the new layout and the “harness-exempt” binaries in crates/ourios-ingester/tests/README.md.

Reviewed changes

Copilot reviewed 18 out of 31 changed files in this pull request and generated no comments.

Show a summary per file
File Description
crates/ourios-ingester/tests/README.md Documents the new consolidated harness layout and the rationale for exempt test binaries.
crates/ourios-ingester/tests/it/main.rs New single-harness entrypoint declaring all migrated integration-test modules.
crates/ourios-ingester/tests/it/ingest_support/mod.rs Shared helper module for ingestion/HTTP/WAL test scaffolding used across harness modules.
crates/ourios-ingester/tests/it/otlp_strategy/mod.rs Shared proptest strategies for OTLP wire-decode equivalence scenarios.
crates/ourios-ingester/tests/it/http_transport_errors.rs Updated to use harness-shared crate::ingest_support helpers.
crates/ourios-ingester/tests/it/invariant_3_7_3_tenant_per_resource_logs.rs Updated to use harness-shared crate::ingest_support helpers.
crates/ourios-ingester/tests/it/rfc0001_3_5_snapshot_restore.rs Updated to use harness-shared crate::ingest_support helpers.
crates/ourios-ingester/tests/it/rfc0003_10_dropped_attributes_count.rs Migrated into harness as a module for receiver materialization invariant.
crates/ourios-ingester/tests/it/rfc0003_11_transport_errors.rs Updated to use harness-shared crate::ingest_support helpers.
crates/ourios-ingester/tests/it/rfc0003_12_empty_request_success.rs Updated to use harness-shared crate::ingest_support helpers.
crates/ourios-ingester/tests/it/rfc0003_13_compression.rs Updated to use harness-shared crate::ingest_support helpers and types.
crates/ourios-ingester/tests/it/rfc0003_14_path_config.rs Updated to use harness-shared crate::ingest_support helpers.
crates/ourios-ingester/tests/it/rfc0003_15_concurrent_wal_before_ack.rs Updated to use harness-shared crate::ingest_support helpers.
crates/ourios-ingester/tests/it/rfc0003_1_wal_before_ack.rs Updated to use harness-shared crate::ingest_support helpers.
crates/ourios-ingester/tests/it/rfc0003_2_crash_before_ack.rs Updated to use harness-shared crate::ingest_support helpers.
crates/ourios-ingester/tests/it/rfc0003_3_tenant_fanout.rs Migrated into harness as a module for fan-out semantics.
crates/ourios-ingester/tests/it/rfc0003_4_tenant_resolution_failure.rs Migrated into harness as a module for resolution-failure semantics.
crates/ourios-ingester/tests/it/rfc0003_5_grpc_http_protobuf_equivalence.rs Updated to use crate::otlp_strategy from harness.
crates/ourios-ingester/tests/it/rfc0003_6_json_protobuf_equivalence.rs Updated to use crate::otlp_strategy from harness.
crates/ourios-ingester/tests/it/rfc0003_7_body_structured_verbatim.rs Migrated into harness as a module for structured-body semantics.
crates/ourios-ingester/tests/it/rfc0003_8_body_string_lraw.rs Migrated into harness as a module for string-body semantics.
crates/ourios-ingester/tests/it/rfc0003_9_edge_otlp_fields.rs Migrated into harness as a module for edge-field pass-through semantics.
crates/ourios-ingester/tests/it/rfc0008_10_rotation_cadence.rs Updated to use harness-shared crate::ingest_support helpers.
crates/ourios-ingester/tests/it/rfc0008_8_batched_fsync.rs Migrated/relocated batched-fsync acceptance tests into the ingester harness.
crates/ourios-ingester/tests/it/rfc0008_8_ingest_order.rs Updated to use harness-shared crate::ingest_support helpers.
crates/ourios-ingester/tests/it/rfc0014_ingest_write_path.rs Migrated into harness as a module for Parquet sink flush-policy acceptance scenarios.
crates/ourios-ingester/tests/it/rfc0014_5_crash_no_loss.rs Migrated into harness as a module for crash + recovery “no acknowledged loss” scenario using fixture binary.
crates/ourios-ingester/tests/it/rfc0018_retryable.rs Updated to use harness-shared crate::ingest_support helpers.
crates/ourios-ingester/tests/it/rfc0022_promoted_threading.rs Migrated into harness as a module validating promoted-attribute threading through flush and publish paths.
crates/ourios-ingester/tests/it/rfc0023_overflow_roundtrip.rs Migrated into harness as a module validating overflow-body Parquet round-trip.
crates/ourios-ingester/tests/it/rfc0026_auth.rs Updated to use harness-shared crate::ingest_support helpers.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 18 out of 31 changed files in this pull request and generated no new comments.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants