Skip to content

test(server): rfc 0028 slice 2d — 8 test binaries fold into one harness - #403

Merged
jensholdgaard merged 1 commit into
mainfrom
rfc0028-slice2d-server-harness
Jul 6, 2026
Merged

test(server): rfc 0028 slice 2d — 8 test binaries fold into one harness#403
jensholdgaard merged 1 commit into
mainfrom
rfc0028-slice2d-server-harness

Conversation

@jensholdgaard

Copy link
Copy Markdown
Owner

What

RFC 0028 slice 2d — the server crate's 9 integration-test binaries become 2: 8 fold into the tests/it/ harness, and rfc0016_6_query_metrics.rs stays dedicated (it installs the process-global OTel meter provider — the RFC0028.2 exemption class, noted in the harness header). The served-binary suites spawn the ourios-server child process, so they join the harness safely. ci.yml's s3-integration job retargets its --exact names with the rfc0019_storage_backend:: module prefix in the same commit — the RFC0028.5 CI-parity lesson from #401, applied up front. No test body changed.

RFC0028.1 — inventory proof

cargo test -p ourios-server -- --list: 90 tests before, 90 after; leaf-name sets identical after stripping module-path prefixes (snapshots below). The 8 #[ignore]d S3/localstack tests moved with their file and stay #[ignore]d, now invoked by CI under their prefixed names.

Indicative timing (not the RFC0028.3 gate)

Same machine, warm workspace: touch crates/ourios-server/src/lib.rs && cargo test -p ourios-server --no-run65.7 s before, 50.5 s after (the bin + lib + exempt-metrics links dominate what remains).

Invariants / hazards

CLAUDE.md §6.2 (tests are specifications): nothing weakened or deleted; the RFC0026/0019/0020 acceptance suites move intact.

Pre inventory (90)
auth::tests::auth_section_maps_field_for_field_onto_the_core_store: test
config::env_subst::tests::default_applies_when_unset_or_empty: test
config::env_subst::tests::dollar_free_is_identity: test
config::env_subst::tests::double_dollar_escapes: test
config::env_subst::tests::env_prefix_is_equivalent_and_backtracks: test
config::env_subst::tests::escape_is_processed_before_reference_matching: test
config::env_subst::tests::malformed_references_error_naming_the_reference: test
config::env_subst::tests::matches_the_otel_config_wg_vector_table: test
config::env_subst::tests::never_panics: test
config::env_subst::tests::unterminated_open_is_literal: test
config::env_subst::tests::value_inserted_verbatim: test
config::file::tests::a_reference_in_key_position_is_left_verbatim: test
config::file::tests::a_structure_where_a_scalar_is_expected_errors: test
config::file::tests::auth_tokens_parse_and_substitute: test
config::file::tests::empty_document_is_all_default: test
config::file::tests::inline_credential_literal_is_rejected_naming_the_key: test
config::file::tests::inline_token_literal_is_rejected_and_debug_redacts: test
config::file::tests::malformed_reference_is_an_error: test
config::file::tests::native_scalars_become_their_string_form: test
config::file::tests::omitted_sections_default_to_unset: test
config::file::tests::promoted_attribute_keys_parse_and_substitute_per_element: test
config::file::tests::promoted_attributes_default_empty_and_stay_strict: test
config::file::tests::promoted_attributes_reject_a_scalar_where_a_list_is_expected: test
config::file::tests::s3_credentials_are_redacted_in_debug: test
config::file::tests::scalar_values_are_substituted: test
config::file::tests::schema_error_never_echoes_a_resolved_value: test
config::file::tests::substituted_values_do_not_inject_structure: test
config::file::tests::unknown_key_is_rejected: test
config::file::tests::unknown_top_level_section_is_rejected: test
querier::tests::absent_body_row_omits_the_body_key: test
querier::tests::apply_limit_defaults_clamps_and_keeps_one: test
querier::tests::parse_body_text_plain_and_json_modes: test
querier::tests::tenant_header_present_absent_empty: test
receiver::tests::flush_then_snapshot_drains_and_snapshots_when_the_store_accepts_writes: test
receiver::tests::flush_then_snapshot_skips_the_record_flush_when_audit_retains: test
receiver::tests::flush_then_snapshot_skips_the_snapshot_when_the_sink_cannot_drain: test
receiver::tests::receiver_persists_template_audit_so_clean_rows_reconstruct: test
receiver::tests::serve_threads_the_store_and_binds_then_shuts_down: test
rfc0003_16_served_binary_binds_round_trips_and_shuts_down: test
rfc0008_10_recovery_runs_before_serving_and_shutdown_snapshots_are_coherent: test
rfc0008_10_shutdown_without_live_traffic_stamps_the_recovered_high_water: test
rfc0013_6_wal_stays_local: test
rfc0016_1_json_request_modes_dispatch: test
rfc0016_1_querier_role_serves_a_dsl_query_end_to_end: test
rfc0016_2_tenant_scoping_is_enforced_at_the_api: test
rfc0016_3_a_drift_query_routes_to_the_drift_path: test
rfc0016_4_malformed_dsl_is_a_clean_400_no_engine_leak: test
rfc0016_5_role_gating_and_graceful_shutdown: test
rfc0016_6_pruning_is_observable: test
rfc0016_7_receiver_and_querier_compose_in_one_binary: test
rfc0016_oversize_body_is_rejected: test
rfc0019_2_wal_stays_local_under_s3: test
rfc0019_3_ingest_query_end_to_end_on_s3: test
rfc0019_4_compaction_operates_on_s3: test
rfc0019_5_tenant_isolation_on_s3: test
rfc0019_8_explicit_s3_credentials_authenticate: test
rfc0020_2_env_substitution_follows_the_otel_config_wg_model: test
rfc0020_6_secret_hygiene_across_the_file_path: test
rfc0026_1_empty_token_list_is_a_startup_error: test
rfc0026_1_missing_auth_section_starts_open_with_a_warning: test
rfc0026_4_query_status_contract: test
rfc0026_5_wildcard_binding_query: test
rfc0026_6_open_mode_parity: test
tests::build_config_compaction_is_opt_out: test
tests::build_config_defaults_the_interval: test
tests::build_config_disabled_compaction_ignores_a_bad_interval: test
tests::build_config_parses_a_custom_interval: test
tests::build_config_rejects_a_zero_or_nonnumeric_interval: test
tests::build_querier_config_disabled_unless_explicitly_enabled: test
tests::build_querier_config_enabled_defaults_address_and_window: test
tests::build_querier_config_parses_custom_address_and_window: test
tests::build_querier_config_rejects_a_malformed_address: test
tests::build_querier_config_rejects_a_zero_or_nonnumeric_window: test
tests::build_receiver_config_disabled_unless_explicitly_enabled: test
tests::build_receiver_config_enabled_defaults_the_addresses: test
tests::build_receiver_config_parses_custom_addresses: test
tests::build_receiver_config_rejects_a_malformed_address: test
tests::build_receiver_config_requires_a_wal_root_when_enabled: test
tests::config_from_file_reads_maps_and_names_the_path: test
tests::promoted_attributes_resolve_onto_the_server_config: test
tests::rfc0019_1_backend_selection_from_config: test
tests::rfc0019_6_config_governed_no_secret_leakage: test
tests::rfc0019_7_local_backend_regression: test
tests::rfc0019_8_explicit_s3_credentials_applied: test
tests::rfc0020_1_file_resolves_to_the_same_config_as_the_env: test
tests::rfc0020_3_file_value_is_authoritative_over_bare_env: test
tests::rfc0020_4_no_config_flag_selects_the_env_path: test
tests::rfc0020_5_invalid_file_value_fails_fast: test
tests::rfc0020_6_secret_hygiene_across_the_file_path: test
tests::rfc0026_1_auth_section_maps_onto_the_token_store: test
Post inventory (90)
auth::tests::auth_section_maps_field_for_field_onto_the_core_store: test
config::env_subst::tests::default_applies_when_unset_or_empty: test
config::env_subst::tests::dollar_free_is_identity: test
config::env_subst::tests::double_dollar_escapes: test
config::env_subst::tests::env_prefix_is_equivalent_and_backtracks: test
config::env_subst::tests::escape_is_processed_before_reference_matching: test
config::env_subst::tests::malformed_references_error_naming_the_reference: test
config::env_subst::tests::matches_the_otel_config_wg_vector_table: test
config::env_subst::tests::never_panics: test
config::env_subst::tests::unterminated_open_is_literal: test
config::env_subst::tests::value_inserted_verbatim: test
config::file::tests::a_reference_in_key_position_is_left_verbatim: test
config::file::tests::a_structure_where_a_scalar_is_expected_errors: test
config::file::tests::auth_tokens_parse_and_substitute: test
config::file::tests::empty_document_is_all_default: test
config::file::tests::inline_credential_literal_is_rejected_naming_the_key: test
config::file::tests::inline_token_literal_is_rejected_and_debug_redacts: test
config::file::tests::malformed_reference_is_an_error: test
config::file::tests::native_scalars_become_their_string_form: test
config::file::tests::omitted_sections_default_to_unset: test
config::file::tests::promoted_attribute_keys_parse_and_substitute_per_element: test
config::file::tests::promoted_attributes_default_empty_and_stay_strict: test
config::file::tests::promoted_attributes_reject_a_scalar_where_a_list_is_expected: test
config::file::tests::s3_credentials_are_redacted_in_debug: test
config::file::tests::scalar_values_are_substituted: test
config::file::tests::schema_error_never_echoes_a_resolved_value: test
config::file::tests::substituted_values_do_not_inject_structure: test
config::file::tests::unknown_key_is_rejected: test
config::file::tests::unknown_top_level_section_is_rejected: test
querier::tests::absent_body_row_omits_the_body_key: test
querier::tests::apply_limit_defaults_clamps_and_keeps_one: test
querier::tests::parse_body_text_plain_and_json_modes: test
querier::tests::tenant_header_present_absent_empty: test
receiver::tests::flush_then_snapshot_drains_and_snapshots_when_the_store_accepts_writes: test
receiver::tests::flush_then_snapshot_skips_the_record_flush_when_audit_retains: test
receiver::tests::flush_then_snapshot_skips_the_snapshot_when_the_sink_cannot_drain: test
receiver::tests::receiver_persists_template_audit_so_clean_rows_reconstruct: test
receiver::tests::serve_threads_the_store_and_binds_then_shuts_down: test
rfc0003_16_served_binary::rfc0003_16_served_binary_binds_round_trips_and_shuts_down: test
rfc0008_10_recovery_driver::rfc0008_10_recovery_runs_before_serving_and_shutdown_snapshots_are_coherent: test
rfc0008_10_recovery_driver::rfc0008_10_shutdown_without_live_traffic_stamps_the_recovered_high_water: test
rfc0013_6_wal_stays_local::rfc0013_6_wal_stays_local: test
rfc0016_5_7_served_querier::rfc0016_5_role_gating_and_graceful_shutdown: test
rfc0016_5_7_served_querier::rfc0016_7_receiver_and_querier_compose_in_one_binary: test
rfc0016_6_pruning_is_observable: test
rfc0016_query_endpoint::rfc0016_1_json_request_modes_dispatch: test
rfc0016_query_endpoint::rfc0016_1_querier_role_serves_a_dsl_query_end_to_end: test
rfc0016_query_endpoint::rfc0016_2_tenant_scoping_is_enforced_at_the_api: test
rfc0016_query_endpoint::rfc0016_3_a_drift_query_routes_to_the_drift_path: test
rfc0016_query_endpoint::rfc0016_4_malformed_dsl_is_a_clean_400_no_engine_leak: test
rfc0016_query_endpoint::rfc0016_oversize_body_is_rejected: test
rfc0019_storage_backend::rfc0019_2_wal_stays_local_under_s3: test
rfc0019_storage_backend::rfc0019_3_ingest_query_end_to_end_on_s3: test
rfc0019_storage_backend::rfc0019_4_compaction_operates_on_s3: test
rfc0019_storage_backend::rfc0019_5_tenant_isolation_on_s3: test
rfc0019_storage_backend::rfc0019_8_explicit_s3_credentials_authenticate: test
rfc0020_config_file::rfc0020_2_env_substitution_follows_the_otel_config_wg_model: test
rfc0020_config_file::rfc0020_6_secret_hygiene_across_the_file_path: test
rfc0026_auth::rfc0026_1_empty_token_list_is_a_startup_error: test
rfc0026_auth::rfc0026_1_missing_auth_section_starts_open_with_a_warning: test
rfc0026_auth::rfc0026_4_query_status_contract: test
rfc0026_auth::rfc0026_5_wildcard_binding_query: test
rfc0026_auth::rfc0026_6_open_mode_parity: test
tests::build_config_compaction_is_opt_out: test
tests::build_config_defaults_the_interval: test
tests::build_config_disabled_compaction_ignores_a_bad_interval: test
tests::build_config_parses_a_custom_interval: test
tests::build_config_rejects_a_zero_or_nonnumeric_interval: test
tests::build_querier_config_disabled_unless_explicitly_enabled: test
tests::build_querier_config_enabled_defaults_address_and_window: test
tests::build_querier_config_parses_custom_address_and_window: test
tests::build_querier_config_rejects_a_malformed_address: test
tests::build_querier_config_rejects_a_zero_or_nonnumeric_window: test
tests::build_receiver_config_disabled_unless_explicitly_enabled: test
tests::build_receiver_config_enabled_defaults_the_addresses: test
tests::build_receiver_config_parses_custom_addresses: test
tests::build_receiver_config_rejects_a_malformed_address: test
tests::build_receiver_config_requires_a_wal_root_when_enabled: test
tests::config_from_file_reads_maps_and_names_the_path: test
tests::promoted_attributes_resolve_onto_the_server_config: test
tests::rfc0019_1_backend_selection_from_config: test
tests::rfc0019_6_config_governed_no_secret_leakage: test
tests::rfc0019_7_local_backend_regression: test
tests::rfc0019_8_explicit_s3_credentials_applied: test
tests::rfc0020_1_file_resolves_to_the_same_config_as_the_env: test
tests::rfc0020_3_file_value_is_authoritative_over_bare_env: test
tests::rfc0020_4_no_config_flag_selects_the_env_path: test
tests::rfc0020_5_invalid_file_value_fails_fast: test
tests::rfc0020_6_secret_hygiene_across_the_file_path: test
tests::rfc0026_1_auth_section_maps_onto_the_token_store: test

🤖 Generated with Claude Code

Pure moves + the harness main.rs; ci.yml's s3-integration job retargets
the rfc0019 --exact names with their new module prefix in the same
commit (RFC0028.5). rfc0016_6_query_metrics stays a dedicated binary
(process-global OTel meter provider, RFC0028.2).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@jensholdgaard
jensholdgaard requested a review from Copilot July 6, 2026 10:26
@coderabbitai

coderabbitai Bot commented Jul 6, 2026

Copy link
Copy Markdown

Warning

Review limit reached

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

Next review available in: 2 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: fccda4ec-538b-45ad-9265-8f431741765d

📥 Commits

Reviewing files that changed from the base of the PR and between 928dbc1 and 7074d8d.

📒 Files selected for processing (10)
  • .github/workflows/ci.yml
  • crates/ourios-server/tests/it/main.rs
  • crates/ourios-server/tests/it/rfc0003_16_served_binary.rs
  • crates/ourios-server/tests/it/rfc0008_10_recovery_driver.rs
  • crates/ourios-server/tests/it/rfc0013_6_wal_stays_local.rs
  • crates/ourios-server/tests/it/rfc0016_5_7_served_querier.rs
  • crates/ourios-server/tests/it/rfc0016_query_endpoint.rs
  • crates/ourios-server/tests/it/rfc0019_storage_backend.rs
  • crates/ourios-server/tests/it/rfc0020_config_file.rs
  • crates/ourios-server/tests/it/rfc0026_auth.rs
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch rfc0028-slice2d-server-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.

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

This PR implements RFC 0028 slice 2d for ourios-server by consolidating eight previously separate server integration-test binaries into a single tests/it/main.rs harness, leaving rfc0016_6_query_metrics.rs as the only dedicated integration-test binary due to its process-global OTel meter-provider installation. It also updates CI to keep S3/localstack integration coverage running under the new module-qualified test names.

Changes:

  • Added a consolidated crates/ourios-server/tests/it/main.rs harness that pulls eight moved integration suites in as modules.
  • Moved the eight integration suites into crates/ourios-server/tests/it/*.rs without changing test bodies (module-path prefixes now appear in test names).
  • Updated .github/workflows/ci.yml S3-integration job to invoke the ignored S3 tests by their new rfc0019_storage_backend::... exact names under --test it.

Reviewed changes

Copilot reviewed 2 out of 10 changed files in this pull request and generated no comments.

Show a summary per file
File Description
crates/ourios-server/tests/it/main.rs New consolidated integration-test harness for the server crate.
crates/ourios-server/tests/it/rfc0003_16_served_binary.rs Served-binary receiver suite moved under the harness as a module.
crates/ourios-server/tests/it/rfc0008_10_recovery_driver.rs WAL recovery driver suite moved under the harness as a module.
crates/ourios-server/tests/it/rfc0013_6_wal_stays_local.rs WAL-locality e2e suite moved under the harness as a module.
crates/ourios-server/tests/it/rfc0016_5_7_served_querier.rs Process-boundary querier scenarios moved under the harness as a module.
crates/ourios-server/tests/it/rfc0016_query_endpoint.rs In-process query endpoint acceptance scenarios moved under the harness as a module.
crates/ourios-server/tests/it/rfc0019_storage_backend.rs Localstack S3-backed server scenarios moved under the harness as a module (still #[ignore]).
crates/ourios-server/tests/it/rfc0020_config_file.rs Config-file acceptance scenarios moved under the harness as a module.
crates/ourios-server/tests/it/rfc0026_auth.rs Auth acceptance/stub scenarios moved under the harness as a module.
.github/workflows/ci.yml Retargets S3-integration CI invocation to --test it and module-qualified exact test names.

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

@jensholdgaard
jensholdgaard merged commit 2618c3c into main Jul 6, 2026
22 checks passed
@jensholdgaard
jensholdgaard deleted the rfc0028-slice2d-server-harness branch July 6, 2026 10:31
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