[INFO] cloning repository https://github.com/gemron/termexo-relay
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/gemron/termexo-relay" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fgemron%2Ftermexo-relay", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fgemron%2Ftermexo-relay'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] b5b664052b56893785f5648ad79b6e6980cf4e4d
[INFO] testing gemron/termexo-relay/b5b664052b56893785f5648ad79b6e6980cf4e4d against 1.99.0-beta.8+cargoflags=--release for beta-release-1.100-3
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fgemron%2Ftermexo-relay" "/workspace/builds/worker-4-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/gemron/termexo-relay
[INFO] finished tweaking git repo https://github.com/gemron/termexo-relay
[INFO] tweaked toml for git repo https://github.com/gemron/termexo-relay written to /workspace/builds/worker-4-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/gemron/termexo-relay 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 git repo https://github.com/gemron/termexo-relay 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]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]     Updating git repository `https://github.com/gemron/Termexo.git`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded wasm-bindgen v0.2.128
[INFO] [stderr]   Downloaded wasm-bindgen-shared v0.2.128
[INFO] [stderr]   Downloaded yamux v0.14.0
[INFO] [stderr]   Downloaded wasm-bindgen-macro v0.2.128
[INFO] [stderr]   Downloaded wasm-bindgen-futures v0.4.78
[INFO] [stderr]   Downloaded wasm-bindgen-macro-support v0.2.128
[INFO] [stderr]   Downloaded tokio-rustls v0.26.5
[INFO] [stderr]   Downloaded smallvec v1.16.1
[INFO] [stderr]   Downloaded find-msvc-tools v0.1.12
[INFO] [stderr]   Downloaded hashlink v0.12.2
[INFO] [stderr]   Downloaded tinyvec v1.13.2
[INFO] [stderr]   Downloaded psl-types v2.0.11
[INFO] [stderr]   Downloaded cc v1.4.5
[INFO] [stderr]   Downloaded cookie_store v0.22.1
[INFO] [stderr]   Downloaded rusticata-macros v4.1.0
[INFO] [stderr]   Downloaded js-sys v0.3.105
[INFO] [stderr]   Downloaded mio v1.2.3
[INFO] [stderr]   Downloaded yasna v0.6.0
[INFO] [stderr]   Downloaded cookie v0.18.2
[INFO] [stderr]   Downloaded bit-vec v0.9.1
[INFO] [stderr]   Downloaded oid-registry v0.8.1
[INFO] [stderr]   Downloaded asn1-rs-derive v0.6.0
[INFO] [stderr]   Downloaded publicsuffix v2.3.0
[INFO] [stderr]   Downloaded rcgen v0.14.10
[INFO] [stderr]   Downloaded asn1-rs-impl v0.2.0
[INFO] [stderr]   Downloaded include_dir v0.7.4
[INFO] [stderr]   Downloaded der-parser v10.0.0
[INFO] [stderr]   Downloaded pem v4.0.0
[INFO] [stderr]   Downloaded include_dir_macros v0.7.4
[INFO] [stderr]   Downloaded x509-parser v0.18.1
[INFO] [stderr]   Downloaded aws-lc-rs v1.18.1
[INFO] [stderr]   Downloaded asn1-rs v0.7.2
[INFO] [stderr]   Downloaded quinn-proto v0.11.17
[INFO] [stderr]   Downloaded rustls v0.23.44
[INFO] [stderr]   Downloaded web-sys v0.3.105
[INFO] [stderr]   Downloaded axum-server v0.8.0
[INFO] [stderr]   Downloaded fs-err v3.3.1
[INFO] [stderr]   Downloaded tokio-tungstenite v0.29.0
[INFO] [stderr]   Downloaded tungstenite v0.29.0
[INFO] [stderr]   Downloaded aws-lc-sys v0.45.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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:77db811e55d90add9212f6832c23229e3de5f1c1f9905e8cb07319ea15df73ac" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 92aa299678f878a323ec46f9188fc9df70cf28ab1744996e541aaea9a5f8abc2
[INFO] running `Command { std: "docker" "start" "92aa299678f878a323ec46f9188fc9df70cf28ab1744996e541aaea9a5f8abc2", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "92aa299678f878a323ec46f9188fc9df70cf28ab1744996e541aaea9a5f8abc2", 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" "92aa299678f878a323ec46f9188fc9df70cf28ab1744996e541aaea9a5f8abc2" "/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" "92aa299678f878a323ec46f9188fc9df70cf28ab1744996e541aaea9a5f8abc2", 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" "92aa299678f878a323ec46f9188fc9df70cf28ab1744996e541aaea9a5f8abc2" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "build" "--frozen" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.189
[INFO] [stderr]    Compiling find-msvc-tools v0.1.12
[INFO] [stderr]    Compiling subtle v2.6.1
[INFO] [stderr]    Compiling proc-macro2 v1.0.107
[INFO] [stderr]    Compiling smallvec v1.16.1
[INFO] [stderr]    Compiling futures-io v0.3.34
[INFO] [stderr]    Compiling dunce v1.0.5
[INFO] [stderr]    Compiling fs_extra v1.3.0
[INFO] [stderr]    Compiling zeroize v1.9.0
[INFO] [stderr]    Compiling aws-lc-rs v1.18.1
[INFO] [stderr]    Compiling foldhash v0.2.0
[INFO] [stderr]    Compiling generic-array v0.14.7
[INFO] [stderr]    Compiling rustls v0.23.44
[INFO] [stderr]    Compiling icu_properties_data v2.3.0
[INFO] [stderr]    Compiling icu_normalizer_data v2.3.0
[INFO] [stderr]    Compiling thiserror v2.0.20
[INFO] [stderr]    Compiling zerocopy v0.8.57
[INFO] [stderr]    Compiling getrandom v0.3.4
[INFO] [stderr]    Compiling cpufeatures v0.2.17
[INFO] [stderr]    Compiling base64 v0.22.1
[INFO] [stderr]    Compiling hashbrown v0.17.1
[INFO] [stderr]    Compiling rustls-pki-types v1.15.1
[INFO] [stderr]    Compiling futures-util v0.3.34
[INFO] [stderr]    Compiling serde_json v1.0.151
[INFO] [stderr]    Compiling rustversion v1.0.23
[INFO] [stderr]    Compiling fs-err v3.3.1
[INFO] [stderr]    Compiling chacha20 v0.10.2
[INFO] [stderr]    Compiling powerfmt v0.2.0
[INFO] [stderr]    Compiling time-core v0.1.9
[INFO] [stderr]    Compiling num-conv v0.2.2
[INFO] [stderr]    Compiling deranged v0.5.8
[INFO] [stderr]    Compiling sha1 v0.11.0
[INFO] [stderr]    Compiling base64ct v1.8.3
[INFO] [stderr]    Compiling quote v1.0.47
[INFO] [stderr]    Compiling clap_lex v1.1.0
[INFO] [stderr]    Compiling lazy_static v1.5.0
[INFO] [stderr]    Compiling syn v3.0.5
[INFO] [stderr]    Compiling syn v2.0.119
[INFO] [stderr]    Compiling jobserver v0.1.35
[INFO] [stderr]    Compiling clap_builder v4.6.6
[INFO] [stderr]    Compiling include_dir_macros v0.7.4
[INFO] [stderr]    Compiling arc-swap v1.9.2
[INFO] [stderr]    Compiling cc v1.4.5
[INFO] [stderr]    Compiling crypto-common v0.1.7
[INFO] [stderr]    Compiling block-buffer v0.10.4
[INFO] [stderr]    Compiling rustls-native-certs v0.8.4
[INFO] [stderr]    Compiling sharded-slab v0.1.7
[INFO] [stderr]    Compiling digest v0.10.7
[INFO] [stderr]    Compiling indexmap v2.14.2
[INFO] [stderr]    Compiling hashlink v0.12.2
[INFO] [stderr]    Compiling pem v4.0.0
[INFO] [stderr]    Compiling sha1 v0.10.7
[INFO] [stderr]    Compiling sha2 v0.10.9
[INFO] [stderr]    Compiling errno v0.3.14
[INFO] [stderr]    Compiling socket2 v0.6.5
[INFO] [stderr]    Compiling signal-hook-registry v1.4.8
[INFO] [stderr]    Compiling mio v1.2.3
[INFO] [stderr]    Compiling cmake v0.1.58
[INFO] [stderr]    Compiling getrandom v0.4.3
[INFO] [stderr]    Compiling getrandom v0.2.17
[INFO] [stderr]    Compiling time v0.3.55
[INFO] [stderr]    Compiling rand_core v0.9.5
[INFO] [stderr]    Compiling rand_core v0.6.4
[INFO] [stderr]    Compiling rand v0.10.2
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling blake2 v0.10.6
[INFO] [stderr]    Compiling password-hash v0.5.0
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling thread_local v1.1.10
[INFO] [stderr]    Compiling fallible-streaming-iterator v0.1.9
[INFO] [stderr]    Compiling web-time v1.1.0
[INFO] [stderr]    Compiling aws-lc-sys v0.45.0
[INFO] [stderr]    Compiling libsqlite3-sys v0.38.2
[INFO] [stderr]    Compiling termexo-relay v0.10.2 (/opt/rustwide/workdir)
[INFO] [stderr]    Compiling fallible-iterator v0.3.0
[INFO] [stderr]    Compiling yasna v0.6.0
[INFO] [stderr]    Compiling either v1.18.0
[INFO] [stderr]    Compiling argon2 v0.5.3
[INFO] [stderr]    Compiling include_dir v0.7.4
[INFO] [stderr]    Compiling futures-executor v0.3.34
[INFO] [stderr]    Compiling futures v0.3.34
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling rand_chacha v0.9.0
[INFO] [stderr]    Compiling tokio-macros v2.7.2
[INFO] [stderr]    Compiling zerovec-derive v0.11.6
[INFO] [stderr]    Compiling displaydoc v0.2.7
[INFO] [stderr]    Compiling thiserror-impl v2.0.20
[INFO] [stderr]    Compiling serde_derive v1.0.229
[INFO] [stderr]    Compiling rand v0.9.5
[INFO] [stderr]    Compiling clap_derive v4.6.4
[INFO] [stderr]    Compiling tokio v1.53.1
[INFO] [stderr]    Compiling zerofrom-derive v0.1.7
[INFO] [stderr]    Compiling yoke-derive v0.8.2
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling pin-project-internal v1.1.13
[INFO] [stderr]    Compiling tungstenite v0.29.0
[INFO] [stderr]    Compiling zerofrom v0.1.8
[INFO] [stderr]    Compiling yoke v0.8.3
[INFO] [stderr]    Compiling pin-project v1.1.13
[INFO] [stderr]    Compiling yamux v0.14.0
[INFO] [stderr]    Compiling clap v4.6.6
[INFO] [stderr]    Compiling zerovec v0.11.8
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling zerotrie v0.2.5
[INFO] [stderr]    Compiling axum-core v0.5.6
[INFO] [stderr]    Compiling tracing-subscriber v0.3.23
[INFO] [stderr]    Compiling serde v1.0.229
[INFO] [stderr]    Compiling tinystr v0.8.4
[INFO] [stderr]    Compiling potential_utf v0.1.6
[INFO] [stderr]    Compiling icu_collections v2.3.0
[INFO] [stderr]    Compiling icu_locale_core v2.3.0
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling icu_provider v2.3.1
[INFO] [stderr]    Compiling icu_normalizer v2.3.0
[INFO] [stderr]    Compiling icu_properties v2.3.0
[INFO] [stderr]    Compiling idna_adapter v1.2.2
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling tokio-util v0.7.19
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling tokio-tungstenite v0.29.0
[INFO] [stderr]    Compiling termexo-relay-protocol v0.9.0 (https://github.com/gemron/Termexo.git?rev=074e28fba8024d8f5e8f68b75f5d879818dd1f3d#074e28fb)
[INFO] [stderr]    Compiling h2 v0.4.19
[INFO] [stderr]    Compiling tower-http v0.6.11
[INFO] [stderr]    Compiling hyper v1.11.1
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling axum v0.8.9
[INFO] [stderr]    Compiling rustls-webpki v0.103.15
[INFO] [stderr]    Compiling rcgen v0.14.10
[INFO] [stderr]    Compiling tokio-rustls v0.26.5
[INFO] [stderr]    Compiling tungstenite v0.30.0
[INFO] [stderr]    Compiling rustls-platform-verifier v0.7.0
[INFO] [stderr]    Compiling hyper-rustls v0.27.9
[INFO] [stderr]    Compiling axum-server v0.8.0
[INFO] [stderr]    Compiling reqwest v0.13.5
[INFO] [stderr]    Compiling tokio-tungstenite v0.30.0
[INFO] [stderr]    Compiling rusqlite v0.40.2
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 3m 53s
[INFO] running `Command { std: "docker" "inspect" "92aa299678f878a323ec46f9188fc9df70cf28ab1744996e541aaea9a5f8abc2", 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" "92aa299678f878a323ec46f9188fc9df70cf28ab1744996e541aaea9a5f8abc2" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "test" "--frozen" "--no-run" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr]    Compiling time-macros v0.2.32
[INFO] [stderr]    Compiling cookie v0.18.2
[INFO] [stderr]    Compiling psl-types v2.0.11
[INFO] [stderr]    Compiling litrs v1.0.0
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling hyper-rustls v0.27.9
[INFO] [stderr]    Compiling termexo-relay v0.10.2 (/opt/rustwide/workdir)
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling publicsuffix v2.3.0
[INFO] [stderr]    Compiling document-features v0.2.12
[INFO] [stderr]    Compiling tower-http v0.6.11
[INFO] [stderr]    Compiling time v0.3.55
[INFO] [stderr]    Compiling yasna v0.6.0
[INFO] [stderr]    Compiling cookie_store v0.22.1
[INFO] [stderr]    Compiling rcgen v0.14.10
[INFO] [stderr]    Compiling reqwest v0.13.5
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 1m 27s
[INFO] running `Command { std: "docker" "inspect" "92aa299678f878a323ec46f9188fc9df70cf28ab1744996e541aaea9a5f8abc2", 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" "92aa299678f878a323ec46f9188fc9df70cf28ab1744996e541aaea9a5f8abc2" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "test" "--frozen" "--release", kill_on_drop: false }`
[INFO] [stderr]    Compiling termexo-relay v0.10.2 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 1m 13s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/release/deps/termexo_relay-6cf1324761d3335d)
[INFO] [stdout] 
[INFO] [stdout] running 198 tests
[INFO] [stdout] test access::tests::a_crafted_request_path_cannot_escape_the_redirect_target ... ok
[INFO] [stdout] test access::tests::a_public_device_is_forwarded_without_a_session ... ok
[INFO] [stdout] test access::tests::a_restricted_device_on_its_subdomain_is_sent_to_the_path_form ... ok
[INFO] [stdout] test address::tests::the_base_header_follows_the_entry_the_browser_used ... ok
[INFO] [stdout] test address::tests::the_path_form_of_a_request_is_absolute_and_keeps_its_query ... ok
[INFO] [stdout] test api::error::tests::an_unexpected_database_failure_never_leaks_its_detail ... ok
[INFO] [stdout] test address::tests::a_device_host_is_recognised_whatever_case_and_port_the_browser_used ... ok
[INFO] [stdout] test api::relays::tests::an_omitted_or_blank_fingerprint_leaves_the_upstream_unpinned ... ok
[INFO] [stdout] test address::tests::a_host_that_is_not_exactly_one_valid_device_label_falls_back_to_the_relay ... ok
[INFO] [stdout] test api::sessions::tests::a_short_password_is_refused_with_the_required_length ... ok
[INFO] [stdout] test api::enrollments::tests::an_absent_or_blank_note_is_stored_as_nothing ... ok
[INFO] [stdout] test api::users::tests::a_username_is_trimmed_and_must_not_contain_spaces ... ok
[INFO] [stdout] test api::users::tests::the_audit_detail_names_the_fields_without_their_values ... ok
[INFO] [stdout] test address::tests::with_a_base_a_device_is_advertised_under_its_own_subdomain ... ok
[INFO] [stdout] test address::tests::without_a_base_a_device_is_advertised_under_the_path_prefix ... ok
[INFO] [stdout] test api::tests::a_label_is_trimmed_and_bounded ... ok
[INFO] [stdout] test api::error::tests::a_taken_username_is_a_conflict_rather_than_an_internal_error ... ok
[INFO] [stdout] test api::devices::tests::a_note_may_be_cleared_but_not_be_unbounded ... ok
[INFO] [stdout] test api::devices::tests::an_access_policy_the_relay_does_not_have_is_refused_by_name ... ok
[INFO] [stdout] test address::tests::a_subdomain_address_keeps_the_relays_port ... ok
[INFO] [stdout] test api::views::tests::the_access_policy_travels_in_the_spelling_the_console_reads ... ok
[INFO] [stdout] test audit::tests::a_device_entry_is_its_own_target ... ok
[INFO] [stdout] test auth::code::tests::a_code_of_the_wrong_length_does_not_normalize ... ok
[INFO] [stdout] test access::tests::a_restricted_device_sends_a_stranger_to_the_login_page_with_a_way_back ... ok
[INFO] [stdout] test auth::code::tests::a_code_typed_loosely_normalizes_to_the_canonical_spelling ... ok
[INFO] [stdout] test api::sessions::tests::the_cookie_is_attached_to_an_empty_body_too ... ok
[INFO] [stdout] test auth::code::tests::a_requested_lifetime_is_clamped_into_the_allowed_range ... ok
[INFO] [stdout] test api::relays::tests::a_pasted_fingerprint_is_normalized_and_a_malformed_one_refused ... ok
[INFO] [stdout] test auth::code::tests::a_generated_code_is_grouped_and_unique ... ok
[INFO] [stdout] test auth::password::tests::an_unparsable_hash_never_matches ... ok
[INFO] [stdout] test auth::code::tests::hashing_covers_every_spelling_of_the_same_code ... ok
[INFO] [stdout] test auth::random::tests::the_alphabet_is_uniformly_drawable_and_free_of_look_alikes ... ok
[INFO] [stdout] test access::tests::a_device_without_a_row_is_treated_as_public ... ok
[INFO] [stdout] test access::tests::a_signed_in_stranger_is_told_why_rather_than_sent_round_the_login_loop ... ok
[INFO] [stdout] test auth::session::tests::a_session_split_across_http2_cookie_fields_is_still_found ... ok
[INFO] [stdout] test api::views::tests::a_device_view_carries_the_public_address_and_the_owner_name ... ok
[INFO] [stdout] test auth::session::tests::the_cookie_carries_secure_only_over_https ... ok
[INFO] [stdout] test auth::session::tests::every_session_cookie_in_one_field_is_offered ... ok
[INFO] [stdout] test auth::password::tests::generated_passwords_are_long_enough_for_the_console_floor ... ok
[INFO] [stdout] test auth::session::tests::the_deadline_slides_only_once_it_has_moved_far_enough ... ok
[INFO] [stdout] test auth::random::tests::generated_values_have_the_requested_length_and_differ ... ok
[INFO] [stdout] test auth::session::tests::the_session_cookie_is_picked_out_of_a_crowded_header ... ok
[INFO] [stdout] test auth::tests::a_success_forgets_the_failures_and_leaves_other_sources_alone ... ok
[INFO] [stdout] test auth::session::tests::the_csrf_marker_is_required_verbatim_but_case_insensitively ... ok
[INFO] [stdout] test auth::tests::a_source_locks_after_the_shared_budget_is_spent ... ok
[INFO] [stdout] test config::tests::a_malformed_tls_mode_is_refused ... ok
[INFO] [stdout] test config::tests::a_public_url_keeps_its_port_and_drops_it_from_the_certificate_name ... ok
[INFO] [stdout] test config::tests::a_public_url_reports_the_port_a_subdomain_address_has_to_repeat ... ok
[INFO] [stdout] test config::tests::a_public_url_is_normalized_to_an_origin ... ok
[INFO] [stdout] test api::views::tests::a_connected_device_reports_the_live_address_and_no_hops ... ok
[INFO] [stdout] test config::tests::a_public_url_with_a_path_or_an_unknown_scheme_is_refused ... ok
[INFO] [stdout] test auth::session::tests::a_session_resolves_to_its_account_and_the_cookie_value_is_not_stored ... ok
[INFO] [stdout] test config::tests::a_subdomain_base_is_normalized_to_a_lowercase_host ... ok
[INFO] [stdout] test api::views::tests::an_announced_device_appears_only_when_it_has_no_row_of_its_own ... ok
[INFO] [stdout] test config::tests::only_one_label_in_front_of_the_base_is_a_device_host ... ok
[INFO] [stdout] test console::tests::a_client_side_route_resolves_to_the_shell_document ... ok
[INFO] [stdout] test config::tests::an_unspecified_listen_address_falls_back_to_localhost ... ok
[INFO] [stdout] test api::views::tests::only_live_devices_count_towards_an_account ... ok
[INFO] [stdout] test audit::tests::an_entry_becomes_a_row_with_a_json_detail ... ok
[INFO] [stdout] test config::tests::a_subdomain_base_that_is_not_a_bare_host_name_is_refused ... ok
[INFO] [stdout] test console::tests::a_path_that_climbs_out_of_the_bundle_is_refused ... ok
[INFO] [stdout] test console::tests::a_file_request_resolves_to_that_file ... ok
[INFO] [stdout] test config::tests::only_a_configured_network_counts_as_a_trusted_proxy ... ok
[INFO] [stdout] test config::tests::tls_modes_parse_from_their_command_line_spellings ... ok
[INFO] [stdout] test auth::session::tests::a_disabled_account_loses_its_session ... ok
[INFO] [stdout] test bootstrap::tests::an_existing_account_suppresses_the_bootstrap ... ok
[INFO] [stdout] test console::tests::the_bundle_always_carries_a_shell_document ... ok
[INFO] [stdout] test console::tests::content_types_cover_a_bundle_and_fall_back_safely ... ok
[INFO] [stdout] test access::tests::the_owner_and_an_administrator_both_get_through ... ok
[INFO] [stdout] test audit::tests::an_entry_without_detail_stores_no_detail_at_all ... ok
[INFO] [stdout] test db::devices::tests::an_access_policy_reads_back_from_the_two_spellings_it_is_stored_under ... ok
[INFO] [stdout] test db::devices::tests::a_device_starts_public_and_keeps_whatever_the_console_set ... ok
[INFO] [stdout] test auth::session::tests::an_expired_session_is_refused_and_forgotten ... ok
[INFO] [stdout] test db::devices::tests::a_created_device_is_read_back_with_its_kind ... ok
[INFO] [stdout] test db::devices::tests::disabling_an_owner_revokes_only_their_live_devices ... ok
[INFO] [stdout] test db::audit::tests::events_come_back_newest_first ... ok
[INFO] [stdout] test db::audit::tests::the_page_size_is_clamped_to_the_maximum ... ok
[INFO] [stdout] test db::enrollments::tests::a_used_code_stays_used_after_it_expires ... ok
[INFO] [stdout] test db::enrollments::tests::a_code_is_found_by_its_digest_and_starts_pending ... ok
[INFO] [stdout] test db::devices::tests::revoking_is_permanent_and_reported_once ... ok
[INFO] [stdout] test db::enrollments::tests::a_code_can_only_be_used_once ... ok
[INFO] [stdout] test db::devices::tests::a_restricted_device_is_reachable_by_its_owner_and_by_an_administrator ... ok
[INFO] [stdout] test db::tests::generated_identifiers_are_unique ... ok
[INFO] [stdout] test db::audit::tests::the_cursor_and_the_object_filter_narrow_the_page ... ok
[INFO] [stdout] test db::enrollments::tests::an_expired_code_reports_expired_without_a_write ... ok
[INFO] [stdout] test db::devices::tests::a_connection_records_the_address_and_version ... ok
[INFO] [stdout] test db::tests::adding_an_existing_column_is_a_no_op ... ok
[INFO] [stdout] test db::tests::a_setting_round_trips_and_overwrites ... ok
[INFO] [stdout] test forwarded::tests::a_bracketed_or_malformed_forwarded_address_degrades_to_the_peer ... ok
[INFO] [stdout] test db::sessions::tests::a_session_round_trips_and_can_be_extended ... ok
[INFO] [stdout] test db::users::tests::a_login_is_recorded_and_a_deleted_user_is_gone ... ok
[INFO] [stdout] test db::sessions::tests::expired_sessions_are_swept ... ok
[INFO] [stdout] test db::users::tests::a_duplicate_username_is_refused ... ok
[INFO] [stdout] test paths::tests::a_relative_data_directory_is_resolved_to_an_absolute_one ... ok
[INFO] [stdout] test db::enrollments::tests::cancelling_blocks_redemption_and_is_reported_once ... ok
[INFO] [stdout] test paths::tests::group_and_other_lose_every_bit_while_the_owner_keeps_theirs ... ok
[INFO] [stdout] test paths::tests::the_file_type_bits_are_not_mistaken_for_permissions ... ok
[INFO] [stdout] test paths::tests::a_mode_that_is_already_owner_only_is_left_untouched ... ok
[INFO] [stdout] test paths::tests::preparing_a_data_directory_creates_it_and_reports_where_it_is ... ok
[INFO] [stdout] test db::tests::the_whole_migration_is_idempotent_on_a_database_that_predates_a_column ... ok
[INFO] [stdout] test paths::tests::unix::a_file_keeps_only_the_owners_permissions ... ok
[INFO] [stdout] test db::sessions::tests::disabling_a_user_can_drop_every_session_they_hold ... ok
[INFO] [stdout] test forwarded::tests::an_untrusted_source_cannot_forge_its_address ... ok
[INFO] [stdout] test db::tests::a_setting_is_initialized_once_and_then_read_back ... ok
[INFO] [stdout] test paths::tests::unix::a_data_directory_inherited_world_readable_is_narrowed_on_the_next_start ... ok
[INFO] [stdout] test forwarded::tests::a_trusted_proxy_speaks_for_its_client ... ok
[INFO] [stdout] test db::users::tests::a_created_user_is_found_by_id_and_by_name ... ok
[INFO] [stdout] test proxy::tests::a_device_name_cannot_inject_markup_into_the_offline_page ... ok
[INFO] [stdout] test proxy::tests::a_device_path_splits_into_an_id_and_the_rest ... ok
[INFO] [stdout] test paths::tests::unix::a_missing_path_is_survivable ... ok
[INFO] [stdout] test proxy::tests::a_device_cannot_set_the_consoles_session_cookie ... ok
[INFO] [stdout] test proxy::tests::a_websocket_request_is_recognised_case_insensitively ... ok
[INFO] [stdout] test proxy::tests::the_last_seen_description_reads_naturally_in_every_range ... ok
[INFO] [stdout] test proxy::tests::forwarding_headers_replace_whatever_the_browser_sent ... ok
[INFO] [stdout] test proxy::tests::only_a_route_through_a_downstream_relay_carries_a_hop ... ok
[INFO] [stdout] test proxy::tests::the_tunnel_uri_carries_the_device_id_and_keeps_the_query ... ok
[INFO] [stdout] test proxy::tests::the_console_session_cookie_never_crosses_a_tunnel ... ok
[INFO] [stdout] test proxy::tests::hop_by_hop_headers_are_removed_including_the_ones_connection_names ... ok
[INFO] [stdout] test forwarded::tests::the_host_falls_back_to_the_request_and_then_to_the_public_url ... ok
[INFO] [stdout] test proxy::tests::a_path_that_is_not_a_device_address_is_refused ... ok
[INFO] [stdout] test registry::tests::a_snapshot_replaces_what_a_link_announced_before ... ok
[INFO] [stdout] test proxy::tests::an_upgrade_keeps_the_headers_that_describe_it ... ok
[INFO] [stdout] test forwarded::tests::forwarding_headers_are_ignored_when_the_relay_terminates_tls_itself ... ok
[INFO] [stdout] test db::users::tests::an_update_only_touches_the_fields_it_carries ... ok
[INFO] [stdout] test registry::tests::a_direct_tunnel_is_routable_and_removed_on_disconnect ... ok
[INFO] [stdout] test registry::tests::a_tunnel_coming_up_and_going_down_is_published_to_subscribers ... ok
[INFO] [stdout] test registry::tests::a_withdrawn_device_is_remembered_while_its_link_is_up ... ok
[INFO] [stdout] test registry::tests::an_announced_device_routes_through_its_link ... ok
[INFO] [stdout] test registry::tests::losing_a_link_publishes_a_withdrawal_for_everything_it_carried ... ok
[INFO] [stdout] test registry::tests::losing_the_link_takes_everything_it_announced_with_it ... ok
[INFO] [stdout] test registry::tests::reconnecting_displaces_the_previous_tunnel_and_its_stale_cleanup ... ok
[INFO] [stdout] test registry::tests::an_announcement_longer_than_the_hop_budget_is_dropped ... ok
[INFO] [stdout] test registry::tests::an_announcement_names_this_relay_first_and_leaves_the_links_out ... ok
[INFO] [stdout] test registry::tests::an_offline_announcement_and_a_foreign_withdrawal_are_ignored ... ok
[INFO] [stdout] test registry::tests::a_later_announcement_of_equal_length_replaces_the_earlier_one ... ok
[INFO] [stdout] test registry::tests::the_shorter_route_wins_and_a_direct_tunnel_beats_both ... ok
[INFO] [stdout] test registry::tests::a_repeated_snapshot_publishes_no_withdrawal_for_a_device_that_stayed ... ok
[INFO] [stdout] test registry::tests::an_announcement_that_loops_back_through_this_relay_is_dropped ... ok
[INFO] [stdout] test tunnel::handle::tests::a_disconnected_handle_refuses_to_open_a_stream ... ok
[INFO] [stdout] test paths::tests::unix::a_fresh_data_directory_is_reachable_only_by_its_owner ... ok
[INFO] [stdout] test tunnel::handle::tests::control_frames_and_closes_on_a_dead_tunnel_are_dropped_quietly ... ok
[INFO] [stdout] test tunnel::session::tests::every_close_cause_has_a_stable_audit_label ... ok
[INFO] [stdout] test tls::tests::material_that_is_not_a_certificate_has_no_fingerprint ... ok
[INFO] [stdout] test tls::tests::subdomain_mode_adds_the_wildcard_the_device_addresses_need ... ok
[INFO] [stdout] test tunnel::tests::anything_but_a_well_formed_bearer_credential_is_refused ... ok
[INFO] [stdout] test tls::tests::the_san_list_always_covers_localhost_without_duplicating_it ... ok
[INFO] [stdout] test tunnel::handle::tests::a_queued_close_reaches_the_writer ... ok
[INFO] [stdout] test upstream::addresses::tests::a_relay_without_an_upstream_contributes_nothing ... ok
[INFO] [stdout] test tunnel::tests::a_bearer_credential_is_read_out_of_the_header ... ok
[INFO] [stdout] test upstream::addresses::tests::an_address_that_is_not_this_links_own_is_dropped ... ok
[INFO] [stdout] test upstream::addresses::tests::every_relay_of_the_chain_is_carried_with_its_hop_count_raised ... ok
[INFO] [stdout] test upstream::addresses::tests::an_upstream_address_becomes_this_relays_device_address_one_hop_further_out ... ok
[INFO] [stdout] test upstream::addresses::tests::the_chain_starts_with_the_upstream_itself ... ok
[INFO] [stdout] test upstream::forward::tests::a_stream_that_already_crossed_this_relay_is_refused ... ok
[INFO] [stdout] test upstream::enroll::tests::the_upstreams_own_message_is_passed_through ... ok
[INFO] [stdout] test upstream::enroll::tests::a_response_that_is_not_a_relay_failure_falls_back_to_the_status ... ok
[INFO] [stdout] test state::tests::subdomain_mode_changes_every_address_the_relay_hands_out ... ok
[INFO] [stdout] test upstream::forward::tests::a_stream_that_fills_the_hop_budget_is_refused ... ok
[INFO] [stdout] test proxy::tests::a_request_whose_only_cookie_was_the_session_arrives_without_a_cookie_header ... ok
[INFO] [stdout] test upstream::forward::tests::forwarding_records_this_relay_after_the_hops_the_stream_already_crossed ... ok
[INFO] [stdout] test upstream::pinning::tests::a_fingerprint_of_the_wrong_length_or_alphabet_is_refused_in_chinese ... ok
[INFO] [stdout] test upstream::pinning::tests::a_certificate_is_accepted_only_when_its_digest_is_the_pinned_one ... ok
[INFO] [stdout] test upstream::pinning::tests::a_certificate_is_pinned_only_when_a_fingerprint_was_stored ... ok
[INFO] [stdout] test upstream::enroll::tests::an_address_that_is_not_an_origin_never_reaches_the_network ... ok
[INFO] [stdout] test state::tests::a_relay_without_an_upstream_offers_only_its_own_address ... ok
[INFO] [stdout] test server::tests::a_stop_request_closes_the_listener_and_the_upstream_link ... ok
[INFO] [stdout] test upstream::pinning::tests::the_digest_is_the_lowercase_hex_of_the_certificate_bytes ... ok
[INFO] [stdout] test upstream::session::tests::the_credential_travels_in_the_header_and_never_in_a_frame ... ok
[INFO] [stdout] test upstream::session::tests::an_upstream_that_is_this_relay_itself_is_refused ... ok
[INFO] [stdout] test upstream::session::tests::the_handshake_announces_this_build_as_a_relay ... ok
[INFO] [stdout] test upstream::settings::tests::a_credential_that_is_not_a_device_credential_is_refused ... ok
[INFO] [stdout] test upstream::settings::tests::a_plain_http_upstream_is_dialled_over_ws ... ok
[INFO] [stdout] test upstream::session::tests::an_announcement_that_runs_through_the_upstream_is_not_sent ... ok
[INFO] [stdout] test upstream::settings::tests::the_debug_output_never_carries_the_credential ... ok
[INFO] [stdout] test upstream::settings::tests::an_address_that_is_not_an_origin_is_refused ... ok
[INFO] [stdout] test upstream::settings::tests::an_address_is_normalized_and_turned_into_the_two_urls_the_link_needs ... ok
[INFO] [stdout] test upstream::settings::tests::stored_settings_that_no_longer_parse_are_reported_rather_than_ignored ... ok
[INFO] [stdout] test upstream::settings::tests::the_stored_json_is_camel_case_and_omits_an_absent_fingerprint ... ok
[INFO] [stdout] test upstream::session::tests::an_upstream_chain_that_contains_this_relay_is_refused ... ok
[INFO] [stdout] test upstream::settings::tests::the_settings_round_trip_through_the_database_and_can_be_forgotten ... ok
[INFO] [stdout] test upstream::pinning::tests::a_pasted_fingerprint_is_folded_to_the_one_stored_spelling ... ok
[INFO] [stdout] test upstream::tests::every_state_has_a_lowercase_name_the_console_can_switch_on ... ok
[INFO] [stdout] test upstream::tests::a_link_without_an_upstream_reports_nothing_at_all ... ok
[INFO] [stdout] test upstream::tests::repeated_failures_walk_the_delay_ladder ... ok
[INFO] [stdout] test upstream::tests::each_way_a_session_can_end_has_its_own_consequence ... ok
[INFO] [stdout] test upstream::tests::the_view_follows_the_link_through_its_states ... ok
[INFO] [stdout] test upstream::session::tests::a_change_becomes_the_increment_the_upstream_understands ... ok
[INFO] [stdout] test upstream::tests::the_view_travels_to_the_console_in_camel_case ... ok
[INFO] [stdout] test upstream::tests::the_link_name_falls_back_to_this_relays_own_public_host ... ok
[INFO] [stdout] test tunnel::session::tests::the_multiplexer_budget_matches_the_designed_limits ... ok
[INFO] [stdout] test upstream::session::tests::the_close_code_decides_whether_the_link_ever_comes_back ... ok
[INFO] [stdout] test bootstrap::tests::the_first_start_creates_exactly_one_administrator ... ok
[INFO] [stdout] test bootstrap::tests::the_bootstrap_is_audited_without_the_password ... ok
[INFO] [stdout] test auth::password::tests::a_password_verifies_against_its_own_hash_only ... ok
[INFO] [stdout] test tls::tests::a_generated_certificate_has_a_readable_fingerprint ... ok
[INFO] [stdout] test tls::tests::a_persisted_certificate_is_reused_rather_than_regenerated ... ok
[INFO] [stdout] test auth::password::tests::the_same_password_hashes_differently_every_time ... ok
[INFO] [stdout] test server::tests::a_wait_that_names_no_signal_shuts_nothing_down ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 198 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.28s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/release/deps/termexo_relay-4c31e743765ef658)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/relay_access.rs (/opt/rustwide/target/release/deps/relay_access-3967c01b948e9a95)
[INFO] [stdout] 
[INFO] [stdout] running 9 tests
[INFO] [stdout] test the_base_host_still_serves_the_relay_itself ... ok
[INFO] [stdout] test a_devices_policy_cannot_be_set_through_a_relay_that_only_routes_to_it ... ok
[INFO] [stdout] test a_restricted_device_on_its_subdomain_is_sent_to_the_path_form ... ok
[INFO] [stdout] test an_unknown_access_policy_is_refused_by_name ... ok
[INFO] [stdout] test every_address_the_relay_hands_out_uses_the_subdomain_form ... ok
[INFO] [stdout] test a_restricted_device_refuses_a_websocket_upgrade_from_a_stranger ... ok
[INFO] [stdout] test a_device_subdomain_reaches_the_device_while_the_path_form_keeps_working ... ok
[INFO] [stdout] test a_relay_behind_a_reverse_proxy_serves_the_proxys_origin ... ok
[INFO] [stdout] test a_restricted_device_turns_a_stranger_away_and_lets_its_owner_through ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.37s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/relay_cascade.rs (/opt/rustwide/target/release/deps/relay_cascade-f58adc6c01dc1d8f)
[INFO] [stdout] 
[INFO] [stdout] running 5 tests
[INFO] [stdout] test a_desktop_that_goes_offline_is_withdrawn_all_the_way_up ... ok
[INFO] [stdout] test leaving_the_upstream_pushes_a_shorter_address_list_to_every_device ... ok
[INFO] [stdout] test a_desktop_behind_a_cascaded_relay_answers_at_the_top_of_the_chain ... ok
[INFO] [stdout] test a_websocket_survives_both_hops ... ok
[INFO] [stdout] test a_link_that_would_close_the_ring_is_refused_and_not_retried ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.05s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/relay_end_to_end.rs (/opt/rustwide/target/release/deps/relay_end_to_end-0312608d1f0ead55)
[INFO] [stdout] 
[INFO] [stdout] running 6 tests
[INFO] [stdout] test repeated_bad_credentials_lock_the_source_out ... ok
[INFO] [stdout] test a_browser_reaches_its_device_through_the_relay ... ok
[INFO] [stdout] test revoking_a_device_closes_the_tunnel_and_takes_the_address_offline ... ok
[INFO] [stdout] test a_browser_on_http2_reaches_its_device_through_the_relay ... ok
[INFO] [stdout] test a_websocket_is_echoed_back_through_the_relay ... ok
[INFO] [stdout] test a_device_behind_a_downstream_relay_is_reachable ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.49s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests termexo_relay
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "92aa299678f878a323ec46f9188fc9df70cf28ab1744996e541aaea9a5f8abc2", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "92aa299678f878a323ec46f9188fc9df70cf28ab1744996e541aaea9a5f8abc2", kill_on_drop: false }`
[INFO] [stdout] 92aa299678f878a323ec46f9188fc9df70cf28ab1744996e541aaea9a5f8abc2
