[INFO] fetching crate rustlavel-auth 0.8.1...
[INFO] testing rustlavel-auth-0.8.1 against 1.99.0-beta.8 for beta-1.100-2
[INFO] extracting crate rustlavel-auth 0.8.1 into /workspace/builds/worker-5-tc1/source
[INFO] started tweaking crates.io crate rustlavel-auth 0.8.1
[INFO] finished tweaking crates.io crate rustlavel-auth 0.8.1
[INFO] tweaked toml for crates.io crate rustlavel-auth 0.8.1 written to /workspace/builds/worker-5-tc1/source/Cargo.toml
[INFO] validating manifest of crates.io crate rustlavel-auth 0.8.1 on toolchain 1.99.0-beta.8
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.99.0-beta.8" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate rustlavel-auth 0.8.1 already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.99.0-beta.8" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded crypto-common v0.1.7
[INFO] [stderr]   Downloaded sha2 v0.10.9
[INFO] [stderr]   Downloaded smallvec v1.15.2
[INFO] [stderr]   Downloaded inout v0.1.4
[INFO] [stderr]   Downloaded argon2 v0.5.3
[INFO] [stderr]   Downloaded mio v1.2.2
[INFO] [stderr]   Downloaded sha1 v0.10.7
[INFO] [stderr]   Downloaded rustlavel-core v0.8.1
[INFO] [stderr]   Downloaded password-hash v0.5.0
[INFO] [stderr]   Downloaded base64ct v1.8.3
[INFO] [stderr]   Downloaded blake2 v0.10.6
[INFO] [stderr]   Downloaded rustlavel-http v0.8.1
[INFO] [stderr]   Downloaded tokio v1.53.1
[INFO] [stderr]   Downloaded rustlavel-cache v0.8.1
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3111399a4047eeb3a02b7a90e478d715f38a8c6669b5c4b49d30a17385265909" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 9f7979f602ca88f31fc729f235202ad8e7bb51b777d0c1d401e9f5192914b330
[INFO] running `Command { std: "docker" "start" "9f7979f602ca88f31fc729f235202ad8e7bb51b777d0c1d401e9f5192914b330", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "9f7979f602ca88f31fc729f235202ad8e7bb51b777d0c1d401e9f5192914b330", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "9f7979f602ca88f31fc729f235202ad8e7bb51b777d0c1d401e9f5192914b330" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "9f7979f602ca88f31fc729f235202ad8e7bb51b777d0c1d401e9f5192914b330", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "9f7979f602ca88f31fc729f235202ad8e7bb51b777d0c1d401e9f5192914b330" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling version_check v0.9.5
[INFO] [stderr]    Compiling typenum v1.20.1
[INFO] [stderr]    Compiling subtle v2.6.1
[INFO] [stderr]    Compiling libc v0.2.189
[INFO] [stderr]    Compiling cfg-if v1.0.4
[INFO] [stderr]    Compiling cpufeatures v0.2.17
[INFO] [stderr]    Compiling proc-macro2 v1.0.107
[INFO] [stderr]    Compiling unicode-ident v1.0.24
[INFO] [stderr]    Compiling quote v1.0.47
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling smallvec v1.15.2
[INFO] [stderr]    Compiling scopeguard v1.2.0
[INFO] [stderr]    Compiling opaque-debug v0.3.1
[INFO] [stderr]    Compiling rand_core v0.6.4
[INFO] [stderr]    Compiling pin-project-lite v0.2.17
[INFO] [stderr]    Compiling base64ct v1.8.3
[INFO] [stderr]    Compiling bytes v1.12.1
[INFO] [stderr]    Compiling rustlavel-core v0.8.1
[INFO] [stderr]    Compiling lock_api v0.4.14
[INFO] [stderr]    Compiling generic-array v0.14.7
[INFO] [stderr]    Compiling password-hash v0.5.0
[INFO] [stderr]    Compiling syn v3.0.4
[INFO] [stderr]    Compiling crypto-common v0.1.7
[INFO] [stderr]    Compiling block-buffer v0.10.4
[INFO] [stderr]    Compiling inout v0.1.4
[INFO] [stderr]    Compiling universal-hash v0.5.1
[INFO] [stderr]    Compiling aead v0.5.2
[INFO] [stderr]    Compiling digest v0.10.7
[INFO] [stderr]    Compiling cipher v0.4.4
[INFO] [stderr]    Compiling errno v0.3.14
[INFO] [stderr]    Compiling mio v1.2.2
[INFO] [stderr]    Compiling socket2 v0.6.5
[INFO] [stderr]    Compiling polyval v0.6.2
[INFO] [stderr]    Compiling signal-hook-registry v1.4.8
[INFO] [stderr]    Compiling blake2 v0.10.6
[INFO] [stderr]    Compiling sha2 v0.10.9
[INFO] [stderr]    Compiling hmac v0.12.1
[INFO] [stderr]    Compiling sha1 v0.10.7
[INFO] [stderr]    Compiling aes v0.8.4
[INFO] [stderr]    Compiling ctr v0.9.2
[INFO] [stderr]    Compiling ghash v0.5.1
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling argon2 v0.5.3
[INFO] [stderr]    Compiling aes-gcm v0.10.3
[INFO] [stderr]    Compiling tokio-macros v2.7.2
[INFO] [stderr]    Compiling tokio v1.53.1
[INFO] [stderr]    Compiling rustlavel-http v0.8.1
[INFO] [stderr]    Compiling rustlavel-auth v0.8.1 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 17.07s
[INFO] running `Command { std: "docker" "inspect" "9f7979f602ca88f31fc729f235202ad8e7bb51b777d0c1d401e9f5192914b330", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "9f7979f602ca88f31fc729f235202ad8e7bb51b777d0c1d401e9f5192914b330" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling rustlavel-auth v0.8.1 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 5.43s
[INFO] running `Command { std: "docker" "inspect" "9f7979f602ca88f31fc729f235202ad8e7bb51b777d0c1d401e9f5192914b330", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "9f7979f602ca88f31fc729f235202ad8e7bb51b777d0c1d401e9f5192914b330" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "test" "--frozen", kill_on_drop: false }`
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.07s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/rustlavel_auth-20d675fe1d628f1b)
[INFO] [stdout] 
[INFO] [stdout] running 213 tests
[INFO] [stdout] test csrf::tests::a_post_without_a_token_is_rejected_with_419 ... ok
[INFO] [stdout] test csrf::tests::safe_methods_are_the_ones_with_no_side_effects ... ok
[INFO] [stderr] [38;5;203mERROR[0m  Application Error: the `csrf` middleware needs a session. Register the `session` middleware before it: `router.middleware(SessionManager::from_config(&config, store)?)`.
[INFO] [stderr] [38;5;203mERROR[0m  Application Error: the `auth` middleware needs a session. Register the `session` middleware before it: `router.middleware(SessionManager::from_config(&config, store)?)`.
[INFO] [stdout] test csrf::tests::the_token_is_stable_for_the_life_of_the_session ... ok
[INFO] [stderr] [38;5;203mERROR[0m  Application Error: the `guest` middleware needs a session. Register the `session` middleware before it: `router.middleware(SessionManager::from_config(&config, store)?)`.
[INFO] [stdout] test csrf::tests::a_token_from_another_session_is_rejected ... ok
[INFO] [stdout] test csrf::tests::a_get_request_passes_through_and_is_handed_a_token ... ok
[INFO] [stdout] test encryption::tests::builds_from_configuration_and_complains_when_the_key_is_missing ... ok
[INFO] [stdout] test encryption::tests::debug_output_never_contains_the_key ... ok
[INFO] [stdout] test csrf::tests::without_the_session_middleware_the_error_says_so ... ok
[INFO] [stdout] test encryption::tests::generated_keys_are_accepted_and_never_repeat ... ok
[INFO] [stdout] test encryption::tests::a_payload_from_another_key_does_not_decrypt ... ok
[INFO] [stdout] test encryption::tests::encryption_round_trips ... ok
[INFO] [stdout] test encryption::tests::a_tampered_payload_fails_to_decrypt ... ok
[INFO] [stdout] test csrf::tests::exempt_paths_are_left_alone ... ok
[INFO] [stdout] test csrf::tests::a_post_with_the_session_token_is_accepted ... ok
[INFO] [stdout] test csrf::tests::the_token_may_arrive_in_a_header_instead ... ok
[INFO] [stdout] test csrf::tests::a_wrong_or_truncated_token_is_rejected ... ok
[INFO] [stdout] test guard::tests::common_identifier_types_are_authenticatable ... ok
[INFO] [stdout] test guard::tests::configuration_supplies_the_login_and_home_paths ... ok
[INFO] [stdout] test encryption::tests::truncated_reordered_and_misversioned_payloads_are_rejected ... ok
[INFO] [stdout] test encryption::tests::two_encryptions_of_the_same_text_differ ... ok
[INFO] [stdout] test guard::tests::an_authenticated_request_reaches_the_handler_with_its_identity ... ok
[INFO] [stdout] test guard::tests::both_middleware_fail_loudly_without_a_session ... ok
[INFO] [stdout] test guard::tests::a_guard_stores_reads_and_clears_the_user_id ... ok
[INFO] [stdout] test guard::tests::logging_out_closes_the_door_again ... ok
[INFO] [stdout] test guard::tests::logging_out_rotates_the_session_id_too ... ok
[INFO] [stdout] test guard::tests::logging_in_rotates_the_session_id ... ok
[INFO] [stdout] test csrf::tests::a_json_client_is_rejected_with_json ... ok
[INFO] [stdout] test csrf::tests::every_state_changing_method_is_guarded ... ok
[INFO] [stdout] test guard::tests::the_auth_middleware_redirects_a_browser_to_the_login_path ... ok
[INFO] [stdout] test guard::tests::the_guest_middleware_pushes_an_authenticated_visitor_home ... ok
[INFO] [stdout] test guard::tests::the_intended_destination_is_remembered_once ... ok
[INFO] [stdout] test guard::tests::the_missing_session_error_says_how_to_fix_it ... ok
[INFO] [stdout] test hashing::tests::sha256_matches_the_published_vectors ... ok
[INFO] [stdout] test encryption::tests::round_trips_empty_unicode_and_binary_payloads ... ok
[INFO] [stdout] test hashing::tests::unreadable_hashes_are_reported_as_needing_a_rehash ... ok
[INFO] [stdout] test hashing::tests::hashes_are_phc_strings_naming_argon2id ... ok
[INFO] [stdout] test impersonation::tests::a_user_cannot_impersonate_themselves ... ok
[INFO] [stdout] test impersonation::tests::the_session_id_changes_on_the_way_in_and_out ... ok
[INFO] [stdout] test hashing::tests::a_corrupt_or_foreign_hash_never_authenticates ... ok
[INFO] [stdout] test hashing::tests::a_hash_verifies_even_though_the_default_cost_is_higher ... ok
[INFO] [stderr] [38;5;203mERROR[0m  panic in GET /: no session on this request. Add the `session` middleware to the router (`router.middleware(SessionManager::from_config(&config, store)?)`) before any route that uses `req.session()`.
[INFO] [stdout] test key::tests::debug_output_never_contains_the_key ... ok
[INFO] [stderr] [38;5;203mERROR[0m  Unhandled Panic: no session on this request. Add the `session` middleware to the router (`router.middleware(SessionManager::from_config(&config, store)?)`) before any route that uses `req.session()`.
[INFO] [stdout] test key::tests::different_purposes_derive_different_sub_keys ... ok
[INFO] [stdout] test impersonation::tests::a_guest_cannot_impersonate ... ok
[INFO] [stdout] test guard::tests::the_auth_middleware_returns_401_to_a_json_client ... ok
[INFO] [stdout] test guard::tests::the_redirect_remembers_where_the_visitor_was_going ... ok
[INFO] [stdout] test impersonation::tests::starting_swaps_the_identity_and_remembers_who_was_really_there ... ok
[INFO] [stdout] test impersonation::tests::stopping_puts_the_real_user_back ... ok
[INFO] [stdout] test impersonation::tests::stopping_when_not_impersonating_does_nothing_and_does_not_fail ... ok
[INFO] [stdout] test key::tests::accepts_a_generated_key_with_or_without_the_prefix ... ok
[INFO] [stdout] test impersonation::tests::it_does_not_nest ... ok
[INFO] [stdout] test impersonation::tests::an_audit_log_records_the_operator_not_the_person_being_viewed ... ok
[INFO] [stdout] test middleware::tests::a_request_that_never_touches_the_session_gets_no_cookie ... ok
[INFO] [stdout] test middleware::tests::a_handler_without_the_middleware_says_what_is_missing ... ok
[INFO] [stdout] test key::tests::rejects_keys_that_are_missing_malformed_or_the_wrong_length ... ok
[INFO] [stdout] test middleware::tests::configuration_drives_the_cookie_name_lifetime_and_secure_flag ... ok
[INFO] [stdout] test middleware::tests::a_session_survives_between_requests_through_the_cookie ... ok
[INFO] [stdout] test middleware::tests::flashed_data_is_readable_on_the_next_request_and_gone_after_it ... ok
[INFO] [stdout] test middleware::tests::a_cookie_signed_with_another_key_is_refused ... ok
[INFO] [stdout] test middleware::tests::regenerating_issues_a_new_cookie_and_drops_the_old_record ... ok
[INFO] [stdout] test middleware::tests::an_expired_stored_session_starts_over ... ok
[INFO] [stdout] test middleware::tests::a_request_that_changes_the_session_still_sets_a_cookie ... ok
[INFO] [stdout] test key::tests::reads_the_key_from_configuration ... ok
[INFO] [stdout] test middleware::tests::a_forged_or_unsigned_cookie_starts_a_fresh_session ... ok
[INFO] [stdout] test middleware::tests::a_request_that_changes_nothing_sets_no_cookie ... ok
[INFO] [stdout] test middleware::tests::builders_override_configuration ... ok
[INFO] [stdout] test middleware::tests::the_session_cookie_is_http_only_and_scoped ... ok
[INFO] [stdout] test qr::tests::empty_input_is_a_valid_symbol ... ok
[INFO] [stdout] test hashing::tests::a_hashed_password_verifies_against_itself ... ok
[INFO] [stdout] test qr::tests::geometry_matches_the_codeword_counts ... ok
[INFO] [stdout] test qr::tests::modules_outside_the_symbol_are_light ... ok
[INFO] [stdout] test qr::tests::finder_patterns_are_where_they_belong ... ok
[INFO] [stdout] test qr::tests::svg_geometry_follows_the_arguments ... ok
[INFO] [stdout] test qr::tests::generator_polynomials_match_annex_a ... ok
[INFO] [stdout] test qr::tests::svg_path_covers_exactly_the_dark_modules ... ok
[INFO] [stdout] test qr::tests::tables_are_self_consistent ... ok
[INFO] [stdout] test qr::tests::matches_libqrencode_module_for_module ... ok
[INFO] [stdout] test hashing::tests::the_same_password_hashes_differently_every_time ... ok
[INFO] [stdout] test qr::tests::svg_title_is_escaped ... ok
[INFO] [stdout] test hashing::tests::the_wrong_password_is_rejected ... ok
[INFO] [stdout] test random::tests::hex_output_is_twice_as_long_and_lowercase_hexadecimal ... ok
[INFO] [stdout] test random::tests::returns_the_requested_number_of_bytes ... ok
[INFO] [stdout] test random::tests::there_is_no_substitute_for_the_operating_systems_randomness ... ok
[INFO] [stdout] test random::tests::two_draws_of_the_same_length_differ ... ok
[INFO] [stdout] test session::tests::flash_data_survives_exactly_one_request ... ok
[INFO] [stdout] test session::tests::flush_empties_the_session_but_keeps_the_id ... ok
[INFO] [stdout] test session::tests::id_validation_rejects_anything_that_is_not_our_own_shape ... ok
[INFO] [stdout] test session::tests::a_corrupt_payload_yields_an_empty_session_rather_than_an_error ... ok
[INFO] [stdout] test session::tests::new_sessions_get_a_long_random_hexadecimal_id ... ok
[INFO] [stdout] test session::tests::keep_and_reflash_extend_flashed_values ... ok
[INFO] [stdout] test session::tests::invalidate_rotates_the_id_and_drops_the_data ... ok
[INFO] [stdout] test session::tests::re_flashing_a_key_gives_it_another_request ... ok
[INFO] [stdout] test session::tests::ordinary_values_are_not_swept_away_with_the_flash ... ok
[INFO] [stdout] test session::tests::regenerate_rotates_the_id_and_keeps_the_data ... ok
[INFO] [stdout] test session::tests::serialization_round_trips_data_and_pending_flash ... ok
[INFO] [stdout] test session::tests::the_csrf_token_is_generated_once_and_then_reused ... ok
[INFO] [stdout] test session::tests::rotating_the_id_rotates_the_csrf_token ... ok
[INFO] [stdout] test signed_url::tests::a_forged_signature_fails ... ok
[INFO] [stdout] test signed_url::tests::a_modified_path_or_parameter_fails ... ok
[INFO] [stdout] test session::tests::rotating_does_not_mint_a_token_nobody_asked_for ... ok
[INFO] [stdout] test session::tests::values_are_put_read_and_forgotten ... ok
[INFO] [stdout] test signed_url::tests::absolute_and_relative_forms_of_the_same_url_verify_alike ... ok
[INFO] [stdout] test signed_url::tests::an_expiry_in_the_future_is_accepted_and_one_in_the_past_is_not ... ok
[INFO] [stdout] test signed_url::tests::a_url_signed_with_another_key_fails ... ok
[INFO] [stdout] test signed_url::tests::an_invalid_signature_renders_as_a_403 ... ok
[INFO] [stdout] test signed_url::tests::a_signed_url_verifies ... ok
[INFO] [stdout] test signed_url::tests::an_unsigned_url_is_missing_its_signature ... ok
[INFO] [stdout] test signed_url::tests::parameters_with_reserved_characters_round_trip ... ok
[INFO] [stdout] test signed_url::tests::an_expiry_that_is_not_a_number_is_treated_as_a_forgery ... ok
[INFO] [stdout] test signed_url::tests::extending_an_expiry_by_hand_is_rejected ... ok
[INFO] [stdout] test signed_url::tests::re_signing_replaces_rather_than_appends ... ok
[INFO] [stdout] test signed_url::tests::sign_temporary_expires_after_its_ttl ... ok
[INFO] [stdout] test signed_url::tests::splits_urls_with_and_without_an_origin ... ok
[INFO] [stdout] test signed_url::tests::signing_preserves_the_existing_query_string ... ok
[INFO] [stdout] test signed_url::tests::reordering_the_query_string_does_not_break_the_signature ... ok
[INFO] [stdout] test qr::tests::svg_carries_nothing_the_policy_would_block ... ok
[INFO] [stdout] test store::tests::a_corrupt_session_file_logs_the_visitor_out_instead_of_failing ... ok
[INFO] [stdout] test store::tests::the_file_store_destroys_and_expires_sessions ... ok
[INFO] [stdout] test store::tests::the_file_store_never_lets_an_id_escape_its_directory ... ok
[INFO] [stdout] test store::tests::the_file_store_collects_expired_files_and_leaves_live_ones ... ok
[INFO] [stdout] test qr::tests::format_information_records_the_chosen_mask ... ok
[INFO] [stdout] test store::tests::the_file_store_creates_its_directory_on_first_write ... ok
[INFO] [stdout] test store::tests::the_memory_store_round_trips_a_session ... ok
[INFO] [stdout] test store::tests::the_memory_store_refuses_and_collects_expired_sessions ... ok
[INFO] [stdout] test tests::the_clock_is_past_the_epoch_and_moves_forward ... ok
[INFO] [stdout] test store::tests::the_memory_store_forgets_unknown_and_destroyed_sessions ... ok
[INFO] [stdout] test tests::constant_time_comparison_agrees_with_ordinary_equality ... ok
[INFO] [stdout] test store::tests::both_stores_satisfy_the_trait_object ... ok
[INFO] [stdout] test tokens::middleware::tests::a_request_without_a_token_can_do_nothing ... ok
[INFO] [stdout] test tokens::middleware::tests::an_expired_token_is_refused_by_the_middleware ... ok
[INFO] [stdout] test tokens::middleware::tests::the_bearer_scheme_is_read_from_the_header_and_nothing_else ... ok
[INFO] [stdout] test tokens::middleware::tests::a_revoked_token_stops_working_on_the_next_request ... ok
[INFO] [stdout] test tokens::middleware::tests::a_valid_token_reaches_the_handler_with_its_identity_and_token ... ok
[INFO] [stdout] test store::tests::the_file_store_persists_a_session_across_stores ... ok
[INFO] [stdout] test tokens::middleware::tests::the_middleware_answers_401_without_a_usable_authorization_header ... ok
[INFO] [stdout] test tokens::middleware::tests::the_middleware_answers_401_to_garbage_rather_than_500 ... ok
[INFO] [stdout] test tokens::middleware::tests::the_missing_middleware_error_says_how_to_fix_it ... ok
[INFO] [stdout] test tokens::middleware::tests::the_scheme_is_matched_case_insensitively_and_extra_spacing_is_ignored ... ok
[INFO] [stdout] test tokens::middleware::tests::the_scope_middleware_answers_403_when_the_scope_is_missing ... ok
[INFO] [stderr] [38;5;203mERROR[0m  Application Error: the `scope` middleware needs an authenticated API token. Register the `api` middleware before it: `router.middleware(RequireApiToken::shared(store))`.
[INFO] [stdout] test tokens::store::tests::deleting_for_one_identity_leaves_the_others ... ok
[INFO] [stdout] test tokens::store::tests::a_store_works_behind_a_trait_object ... ok
[INFO] [stdout] test tokens::middleware::tests::the_scope_middleware_still_needs_a_token_first ... ok
[INFO] [stdout] test qr::tests::every_mask_reads_back ... ok
[INFO] [stdout] test tokens::middleware::tests::the_scope_middleware_lets_a_scoped_token_through ... ok
[INFO] [stdout] test tokens::store::tests::an_unknown_id_is_not_found_rather_than_an_error ... ok
[INFO] [stdout] test tokens::store::tests::the_memory_store_round_trips_a_token ... ok
[INFO] [stdout] test tokens::store::tests::touching_records_the_moment_and_nothing_else ... ok
[INFO] [stdout] test tokens::store::tests::the_stores_debug_output_is_a_count ... ok
[INFO] [stdout] test tokens::tests::a_known_id_with_the_wrong_secret_is_rejected ... ok
[INFO] [stdout] test tokens::tests::a_malformed_token_is_rejected_without_panicking ... ok
[INFO] [stdout] test tokens::tests::a_new_token_grants_nothing_until_it_is_asked_to ... ok
[INFO] [stdout] test tokens::tests::a_tokens_scopes_answer_can ... ok
[INFO] [stdout] test tokens::tests::a_valid_token_authenticates ... ok
[INFO] [stdout] test tokens::tests::a_rejection_says_nothing_about_the_token_that_was_presented ... ok
[INFO] [stdout] test tokens::tests::a_token_rebuilt_from_a_row_keeps_every_field ... ok
[INFO] [stdout] test tokens::tests::an_issued_token_reads_as_its_id_and_a_secret ... ok
[INFO] [stdout] test tokens::tests::no_type_here_prints_a_secret_in_its_debug_output ... ok
[INFO] [stdout] test tokens::tests::authenticating_stamps_last_used_at ... ok
[INFO] [stdout] test tokens::tests::an_expired_token_is_rejected ... ok
[INFO] [stdout] test tokens::tests::digests_differ_for_different_secrets_and_are_stable_for_the_same_one ... ok
[INFO] [stdout] test tokens::tests::one_users_token_id_cannot_be_paired_with_anothers_secret ... ok
[INFO] [stdout] test tokens::tests::revoking_a_token_takes_effect_immediately ... ok
[INFO] [stdout] test tokens::tests::can_matches_a_scope_exactly_and_not_by_prefix ... ok
[INFO] [stdout] test tokens::tests::revoking_every_token_for_a_user_leaves_the_others_alone ... ok
[INFO] [stdout] test tokens::tests::scopes_are_collected_deduplicated_and_kept_in_order ... ok
[INFO] [stdout] test tokens::tests::the_wildcard_grants_everything_and_an_empty_list_grants_nothing ... ok
[INFO] [stdout] test tokens::tests::the_plain_text_secret_is_never_kept_by_the_store ... ok
[INFO] [stdout] test tokens::tests::splitting_accepts_only_the_two_part_shape ... ok
[INFO] [stdout] test tokens::tests::two_tokens_issued_together_share_nothing ... ok
[INFO] [stdout] test totp::tests::a_code_from_another_secret_is_rejected ... ok
[INFO] [stdout] test totp::tests::a_code_of_the_wrong_shape_is_rejected_without_panicking ... ok
[INFO] [stdout] test totp::tests::a_different_algorithm_produces_a_different_code_from_the_same_secret ... ok
[INFO] [stdout] test totp::tests::a_label_with_a_space_or_a_colon_is_percent_encoded ... ok
[INFO] [stdout] test totp::tests::a_secret_survives_the_base32_round_trip ... ok
[INFO] [stdout] test totp::tests::a_period_of_zero_is_read_as_one_second ... ok
[INFO] [stdout] test totp::tests::a_set_of_codes_never_prints_itself ... ok
[INFO] [stdout] test totp::tests::a_secret_never_appears_in_debug_output ... ok
[INFO] [stdout] test totp::tests::a_step_is_the_timestamp_divided_by_the_period ... ok
[INFO] [stdout] test totp::tests::an_empty_or_malformed_secret_is_refused_rather_than_accepted_as_zero_bytes ... ok
[INFO] [stdout] test totp::tests::algorithm_names_round_trip ... ok
[INFO] [stdout] test totp::tests::base32_round_trips_every_length_up_to_a_full_group ... ok
[INFO] [stdout] test totp::tests::base32_matches_the_rfc_4648_test_vectors ... ok
[INFO] [stdout] test totp::tests::decoding_forgives_case_spaces_and_padding ... ok
[INFO] [stdout] test totp::tests::digits_are_clamped_to_the_range_rfc_4226_allows ... ok
[INFO] [stdout] test totp::tests::every_generated_code_is_distinct ... ok
[INFO] [stdout] test totp::tests::decoding_rejects_anything_outside_the_alphabet ... ok
[INFO] [stdout] test totp::tests::one_step_either_side_is_accepted_and_two_are_not ... ok
[INFO] [stdout] test totp::tests::recovery_codes_are_typeable_and_unambiguous ... ok
[INFO] [stdout] test totp::tests::the_current_code_verifies ... ok
[INFO] [stdout] test totp::tests::hotp_reproduces_the_whole_rfc_4226_appendix_d_table ... ok
[INFO] [stdout] test totp::tests::the_default_shape_is_six_digits_over_thirty_seconds_of_sha1 ... ok
[INFO] [stdout] test totp::tests::the_rfc_6238_times_land_on_the_steps_the_rfc_prints ... ok
[INFO] [stdout] test totp::tests::the_provisioning_uri_carries_every_parameter ... ok
[INFO] [stdout] test totp::tests::the_window_does_not_underflow_at_the_epoch ... ok
[INFO] [stdout] test totp::tests::the_window_is_configurable_in_both_directions ... ok
[INFO] [stdout] test totp::tests::totp_reproduces_the_rfc_6238_appendix_b_table_for_sha1 ... ok
[INFO] [stdout] test totp::tests::totp_reproduces_the_rfc_6238_appendix_b_table_for_sha256 ... ok
[INFO] [stdout] test qr::tests::version_selection_agrees_with_libqrencode ... ok
[INFO] [stdout] test totp::tests::two_generated_secrets_differ ... ok
[INFO] [stdout] test totp::tests::totp_reproduces_the_rfc_6238_appendix_b_table_for_sha512 ... ok
[INFO] [stdout] test qr::tests::every_level_encodes_the_same_input ... ok
[INFO] [stdout] test totp::tests::the_stored_hashes_reveal_nothing_about_the_codes ... ok
[INFO] [stdout] test totp::tests::a_code_is_accepted_however_it_was_typed ... ok
[INFO] [stdout] test totp::tests::a_recovery_code_works_exactly_once ... ok
[INFO] [stdout] test qr::tests::version_is_the_smallest_that_fits ... ok
[INFO] [stdout] test totp::tests::an_unknown_code_is_refused_and_removes_nothing ... ok
[INFO] [stdout] test qr::tests::too_long_is_an_error_not_a_truncation ... ok
[INFO] [stdout] test qr::tests::size_follows_the_version ... ok
[INFO] [stdout] test qr::tests::the_dark_module_is_always_dark ... ok
[INFO] [stdout] test qr::tests::version_information_is_present_from_version_seven ... ok
[INFO] [stdout] test qr::tests::the_payloads_that_matter_read_back ... ok
[INFO] [stdout] test qr::tests::every_version_and_level_reads_back ... ok
[INFO] [stdout] test totp::tests::a_single_code_can_be_hashed_and_spent_on_its_own ... ok
[INFO] [stdout] test hashing::tests::the_default_cost_produces_a_working_hash ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 213 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 5.05s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests rustlavel_auth
[INFO] [stdout] 
[INFO] [stdout] running 11 tests
[INFO] [stdout] test src/csrf.rs - csrf (line 10) ... ignored
[INFO] [stdout] test src/guard.rs - guard (line 7) ... ignored
[INFO] [stdout] test src/impersonation.rs - impersonation (line 10) ... ignored
[INFO] [stdout] test src/lib.rs - (line 7) ... ignored
[INFO] [stdout] test src/middleware.rs - middleware (line 10) ... ignored
[INFO] [stdout] test src/middleware.rs - middleware (line 3) ... ignored
[INFO] [stdout] test src/tokens.rs - tokens (line 8) ... ignored
[INFO] [stdout] test src/tokens.rs - tokens::NewToken (line 399) ... ignored
[INFO] [stdout] test src/tokens/middleware.rs - tokens::middleware (line 8) ... ignored
[INFO] [stdout] test src/totp.rs - totp (line 9) ... ignored
[INFO] [stdout] test src/totp.rs - totp::step_of (line 276) ... ignored
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 11 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] all doctests ran in 0.44s; merged doctests compilation took 0.44s
[INFO] running `Command { std: "docker" "inspect" "9f7979f602ca88f31fc729f235202ad8e7bb51b777d0c1d401e9f5192914b330", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "9f7979f602ca88f31fc729f235202ad8e7bb51b777d0c1d401e9f5192914b330", kill_on_drop: false }`
[INFO] [stdout] 9f7979f602ca88f31fc729f235202ad8e7bb51b777d0c1d401e9f5192914b330
