[INFO] fetching crate magpie-bt 0.1.3...
[INFO] testing magpie-bt-0.1.3 against try#33835004928d3bf65db4d4712e1330766263b0bd for pr-155739
[INFO] extracting crate magpie-bt 0.1.3 into /workspace/builds/worker-3-tc2/source
[INFO] started tweaking crates.io crate magpie-bt 0.1.3
[INFO] removed 0 missing examples
[INFO] removed 0 missing tests
[INFO] finished tweaking crates.io crate magpie-bt 0.1.3
[INFO] tweaked toml for crates.io crate magpie-bt 0.1.3 written to /workspace/builds/worker-3-tc2/source/Cargo.toml
[INFO] validating manifest of crates.io crate magpie-bt 0.1.3 on toolchain 33835004928d3bf65db4d4712e1330766263b0bd
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+33835004928d3bf65db4d4712e1330766263b0bd" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate magpie-bt 0.1.3 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" "+33835004928d3bf65db4d4712e1330766263b0bd" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+33835004928d3bf65db4d4712e1330766263b0bd" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 36c942baea862662f2a6d78fa53cdaeb660ab5286d294198bd601fba5d004539
[INFO] running `Command { std: "docker" "start" "-a" "36c942baea862662f2a6d78fa53cdaeb660ab5286d294198bd601fba5d004539", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "36c942baea862662f2a6d78fa53cdaeb660ab5286d294198bd601fba5d004539", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "36c942baea862662f2a6d78fa53cdaeb660ab5286d294198bd601fba5d004539", kill_on_drop: false }`
[INFO] [stdout] 36c942baea862662f2a6d78fa53cdaeb660ab5286d294198bd601fba5d004539
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+33835004928d3bf65db4d4712e1330766263b0bd" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] af9142d580812d1d62e2eae756ef9430f1a7284226094be40d1ecbfabed84268
[INFO] running `Command { std: "docker" "start" "-a" "af9142d580812d1d62e2eae756ef9430f1a7284226094be40d1ecbfabed84268", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.185
[INFO] [stderr]    Compiling litemap v0.8.2
[INFO] [stderr]    Compiling zerovec-derive v0.11.3
[INFO] [stderr]    Compiling tokio-macros v2.7.0
[INFO] [stderr]    Compiling cc v1.2.60
[INFO] [stderr]    Compiling writeable v0.6.3
[INFO] [stderr]    Compiling icu_normalizer_data v2.2.0
[INFO] [stderr]    Compiling icu_properties_data v2.2.0
[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 hashbrown v0.17.0
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling rustls v0.23.38
[INFO] [stderr]    Compiling crypto-common v0.1.7
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling magpie-bt-bencode v0.1.3
[INFO] [stderr]    Compiling digest v0.10.7
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling sha2 v0.10.9
[INFO] [stderr]    Compiling sha1 v0.10.6
[INFO] [stderr]    Compiling magpie-bt-metainfo v0.1.3
[INFO] [stderr]    Compiling indexmap v2.14.0
[INFO] [stderr]    Compiling zerofrom v0.1.7
[INFO] [stderr]    Compiling yoke v0.8.2
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling zerotrie v0.2.4
[INFO] [stderr]    Compiling socket2 v0.6.3
[INFO] [stderr]    Compiling mio v1.2.0
[INFO] [stderr]    Compiling getrandom v0.2.17
[INFO] [stderr]    Compiling getrandom v0.3.4
[INFO] [stderr]    Compiling socket2 v0.5.10
[INFO] [stderr]    Compiling zerovec v0.11.6
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling tokio v1.51.1
[INFO] [stderr]    Compiling tinystr v0.8.3
[INFO] [stderr]    Compiling potential_utf v0.1.5
[INFO] [stderr]    Compiling icu_collections v2.2.0
[INFO] [stderr]    Compiling icu_locale_core v2.2.0
[INFO] [stderr]    Compiling icu_provider v2.2.0
[INFO] [stderr]    Compiling icu_normalizer v2.2.0
[INFO] [stderr]    Compiling icu_properties v2.2.0
[INFO] [stderr]    Compiling idna_adapter v1.2.1
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling rustls-webpki v0.103.11
[INFO] [stderr]    Compiling tokio-util v0.7.18
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling h2 v0.4.13
[INFO] [stderr]    Compiling magpie-bt-wire v0.1.3
[INFO] [stderr]    Compiling tower-http v0.6.8
[INFO] [stderr]    Compiling tokio-rustls v0.26.4
[INFO] [stderr]    Compiling hyper v1.9.0
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling hyper-rustls v0.27.8
[INFO] [stderr]    Compiling reqwest v0.12.28
[INFO] [stderr]    Compiling magpie-bt-core v0.1.3
[INFO] [stderr]    Compiling magpie-bt v0.1.3 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 35.18s
[INFO] running `Command { std: "docker" "inspect" "af9142d580812d1d62e2eae756ef9430f1a7284226094be40d1ecbfabed84268", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "af9142d580812d1d62e2eae756ef9430f1a7284226094be40d1ecbfabed84268", kill_on_drop: false }`
[INFO] [stdout] af9142d580812d1d62e2eae756ef9430f1a7284226094be40d1ecbfabed84268
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+33835004928d3bf65db4d4712e1330766263b0bd" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 7204b261034a884e4591dacbd3bc446844a9a52b11f24d2e33abc5e0681a742c
[INFO] running `Command { std: "docker" "start" "-a" "7204b261034a884e4591dacbd3bc446844a9a52b11f24d2e33abc5e0681a742c", kill_on_drop: false }`
[INFO] [stderr]    Compiling memchr v2.8.0
[INFO] [stderr]    Compiling errno v0.3.14
[INFO] [stderr]    Compiling futures-macro v0.3.32
[INFO] [stderr]    Compiling crossbeam-utils v0.8.21
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling bytecount v0.6.9
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling sealed v0.5.0
[INFO] [stderr]    Compiling anstyle-parse v1.0.0
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling derive_more v0.99.20
[INFO] [stderr]    Compiling nom v7.1.3
[INFO] [stderr]    Compiling is_terminal_polyfill v1.70.2
[INFO] [stderr]    Compiling anstyle v1.0.14
[INFO] [stderr]    Compiling peg-runtime v0.6.3
[INFO] [stderr]    Compiling same-file v1.0.6
[INFO] [stderr]    Compiling anstyle-query v1.1.5
[INFO] [stderr]    Compiling signal-hook-registry v1.4.8
[INFO] [stderr]    Compiling regex-syntax v0.7.5
[INFO] [stderr]    Compiling tokio v1.51.1
[INFO] [stderr]    Compiling colorchoice v1.0.5
[INFO] [stderr]    Compiling peg-macros v0.6.3
[INFO] [stderr]    Compiling synthez-core v0.3.1
[INFO] [stderr]    Compiling walkdir v2.5.0
[INFO] [stderr]    Compiling typed-builder-macro v0.15.2
[INFO] [stderr]    Compiling anstream v1.0.0
[INFO] [stderr]    Compiling crossbeam-epoch v0.9.18
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling aho-corasick v1.1.4
[INFO] [stderr]    Compiling bstr v1.12.1
[INFO] [stderr]    Compiling crossbeam-deque v0.8.6
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling gherkin v0.14.0
[INFO] [stderr]    Compiling nom_locate v4.2.0
[INFO] [stderr]    Compiling terminal_size v0.4.4
[INFO] [stderr]    Compiling smawk v0.3.2
[INFO] [stderr]    Compiling unicode-linebreak v0.1.5
[INFO] [stderr]    Compiling clap_lex v1.1.0
[INFO] [stderr]    Compiling clap_derive v4.6.0
[INFO] [stderr]    Compiling typed-builder v0.15.2
[INFO] [stderr]    Compiling itertools v0.13.0
[INFO] [stderr]    Compiling pin-project-internal v1.1.11
[INFO] [stderr]    Compiling synthez-codegen v0.3.1
[INFO] [stderr]    Compiling textwrap v0.16.2
[INFO] [stderr]    Compiling clap_builder v4.6.0
[INFO] [stderr]    Compiling inflections v1.1.1
[INFO] [stderr]    Compiling synthez v0.3.1
[INFO] [stderr]    Compiling peg v0.6.3
[INFO] [stderr]    Compiling console v0.15.11
[INFO] [stderr]    Compiling smart-default v0.7.1
[INFO] [stderr]    Compiling nu-ansi-term v0.50.3
[INFO] [stderr]    Compiling regex v1.12.3
[INFO] [stderr]    Compiling inventory v0.3.24
[INFO] [stderr]    Compiling linked-hash-map v0.5.6
[INFO] [stderr]    Compiling drain_filter_polyfill v0.1.3
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling cucumber-expressions v0.3.0
[INFO] [stderr]    Compiling futures-executor v0.3.32
[INFO] [stderr]    Compiling futures v0.3.32
[INFO] [stderr]    Compiling lazy-regex-proc_macros v3.6.0
[INFO] [stderr]    Compiling pin-project v1.1.11
[INFO] [stderr]    Compiling cucumber-codegen v0.21.1
[INFO] [stderr]    Compiling clap v4.6.0
[INFO] [stderr]    Compiling tokio-util v0.7.18
[INFO] [stderr]    Compiling tokio-rustls v0.26.4
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling tower-http v0.6.8
[INFO] [stderr]    Compiling h2 v0.4.13
[INFO] [stderr]    Compiling magpie-bt-wire v0.1.3
[INFO] [stderr]    Compiling globset v0.4.18
[INFO] [stderr]    Compiling matchers v0.2.0
[INFO] [stderr]    Compiling tracing-subscriber v0.3.23
[INFO] [stderr]    Compiling lazy-regex v3.6.0
[INFO] [stderr]    Compiling ignore v0.4.25
[INFO] [stderr]    Compiling globwalk v0.9.1
[INFO] [stderr]    Compiling cucumber v0.21.1
[INFO] [stderr]    Compiling hyper v1.9.0
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling hyper-rustls v0.27.8
[INFO] [stderr]    Compiling reqwest v0.12.28
[INFO] [stderr]    Compiling magpie-bt-core v0.1.3
[INFO] [stderr]    Compiling magpie-bt v0.1.3 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 41.01s
[INFO] running `Command { std: "docker" "inspect" "7204b261034a884e4591dacbd3bc446844a9a52b11f24d2e33abc5e0681a742c", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "7204b261034a884e4591dacbd3bc446844a9a52b11f24d2e33abc5e0681a742c", kill_on_drop: false }`
[INFO] [stdout] 7204b261034a884e4591dacbd3bc446844a9a52b11f24d2e33abc5e0681a742c
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+33835004928d3bf65db4d4712e1330766263b0bd" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] 2a1574a939a0392cfdc03590c0ddc07125dfff852a7dd55d44f30b93cba960d6
[INFO] running `Command { std: "docker" "start" "-a" "2a1574a939a0392cfdc03590c0ddc07125dfff852a7dd55d44f30b93cba960d6", kill_on_drop: false }`
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.38s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/magpie_bt-16f08fba06a0afd8)
[INFO] [stderr]      Running tests/cucumber.rs (/opt/rustwide/target/debug/deps/cucumber-f5aa30ef50a60993)
[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] [stdout] Feature: BEP 3 — core BitTorrent protocol
[INFO] [stdout]   Scenario: handshake round-trips with cleared reserved bits
[INFO] [stdout]    ✔  Given a handshake with info-hash "AA" repeated 20 times and peer-id "BB" repeated 20 times
[INFO] [stdout]    ✔  When the handshake is encoded then decoded
[INFO] [stdout]    ✔  Then the decoded info-hash matches and the Fast extension bit is unset
[INFO] [stdout]   Scenario: Have message round-trips through the wire codec
[INFO] [stdout]    ✔  Given a Have message for piece 42
[INFO] [stdout]    ✔  When the wire codec encodes and decodes it
[INFO] [stdout]    ✔  Then the decoded piece index is 42
[INFO] [stdout]   Scenario: Request message canonical layout
[INFO] [stdout]    ✔  Given a Request for piece 1, offset 16384, length 16384
[INFO] [stdout]    ✔  When the wire codec encodes it
[INFO] [stdout]    ✔  Then the resulting frame begins with length-prefix 13 and message id 6
[INFO] [stdout]   Scenario: Bitfield round-trip preserves payload bytes
[INFO] [stdout]    ✔  Given a Bitfield containing bytes "FF 0F"
[INFO] [stdout]    ✔  When the wire codec encodes and decodes it
[INFO] [stdout]    ✔  Then the decoded bitfield bytes equal "FF 0F"
[INFO] [stdout] Feature: BEP 6 — Fast extension
[INFO] [stdout]   Scenario: handshake advertises Fast extension via reserved byte 7 bit 0x04
[INFO] [stdout]    ✔  Given a handshake with the Fast extension bit set
[INFO] [stdout]    ✔  When the handshake is encoded then decoded
[INFO] [stdout]    ✔  Then the Fast extension bit is set
[INFO] [stdout]   Scenario: HaveAll round-trips as a single-byte payload frame
[INFO] [stdout]    ✔  Given a HaveAll message
[INFO] [stdout]    ✔  When the wire codec encodes and decodes it
[INFO] [stdout]    ✔  Then the decoded message is HaveAll
[INFO] [stdout]   Scenario: HaveNone round-trips as a single-byte payload frame
[INFO] [stdout]    ✔  Given a HaveNone message
[INFO] [stdout]    ✔  When the wire codec encodes and decodes it
[INFO] [stdout]    ✔  Then the decoded message is HaveNone
[INFO] [stdout]   Scenario: AllowedFast round-trips with a single piece index
[INFO] [stdout]    ✔  Given an AllowedFast message for piece 99
[INFO] [stdout]    ✔  When the wire codec encodes and decodes it
[INFO] [stdout]    ✔  Then the decoded AllowedFast piece index is 99
[INFO] [stdout]   Scenario: RejectRequest round-trips with the rejected block address
[INFO] [stdout]    ✔  Given a RejectRequest for piece 1, offset 16384, length 16384
[INFO] [stdout]    ✔  When the wire codec encodes and decodes it
[INFO] [stdout]    ✔  Then the decoded RejectRequest matches the original block address
[INFO] [stdout] Feature: BEP 9 — Extension for peers to send metadata (ut_metadata)
[INFO] [stdout]   Scenario: Request message round-trips through the codec
[INFO] [stdout]    ?  Given a MetadataMessage::Request for piece 7
[INFO] [stdout]       Step skipped: tests/features/bep-0009-metadata.feature:5:5
[INFO] [stdout]   Scenario: Reject message round-trips through the codec
[INFO] [stdout]    ?  Given a MetadataMessage::Reject for piece 42
[INFO] [stdout]       Step skipped: tests/features/bep-0009-metadata.feature:10:5
[INFO] [stdout]   Scenario: Data message carries the bencoded dict followed by raw metadata bytes
[INFO] [stdout]    ?  Given a MetadataMessage::Data for piece 0 with total_size 32000 and payload "raw metadata bytes here!"
[INFO] [stdout]       Step skipped: tests/features/bep-0009-metadata.feature:15:5
[INFO] [stdout]   Scenario: Last piece may carry zero trailing bytes
[INFO] [stdout]    ?  Given a MetadataMessage::Data for piece 5 with total_size 81920 and an empty payload
[INFO] [stdout]       Step skipped: tests/features/bep-0009-metadata.feature:21:5
[INFO] [stdout]   Scenario: Decoder rejects msg_type values other than 0, 1, 2
[INFO] [stdout]    ?  Given a bencoded payload with msg_type=99
[INFO] [stdout]       Step skipped: tests/features/bep-0009-metadata.feature:26:5
[INFO] [stdout]   Scenario: Decoder rejects total_size above the 16 MB safety cap
[INFO] [stdout]    ?  Given a Data payload declaring total_size 20_000_000
[INFO] [stdout]       Step skipped: tests/features/bep-0009-metadata.feature:31:5
[INFO] [stdout]   Scenario: Decoder rejects per-piece payload above 16 KiB
[INFO] [stdout]    ?  Given a Data payload whose trailing bytes exceed METADATA_PIECE_SIZE (16384)
[INFO] [stdout]       Step skipped: tests/features/bep-0009-metadata.feature:36:5
[INFO] [stdout]   Scenario: metadata_piece_count derives the 16 KiB piece count from total size
[INFO] [stdout]    ?  Given a metadata size of 16383 bytes
[INFO] [stdout]       Step skipped: tests/features/bep-0009-metadata.feature:41:5
[INFO] [stdout]   Scenario: Seeder advertises metadata_size in its extension handshake
[INFO] [stdout]    ?  Given a torrent session constructed with known info bytes
[INFO] [stdout]       Step skipped: tests/features/bep-0009-metadata.feature:47:5
[INFO] [stdout]   Scenario: Magnet add fetches metadata, verifies SHA-1, then transitions to downloading
[INFO] [stdout]    ?  Given two engines on loopback where the seeder holds full metadata + content
[INFO] [stdout]       Step skipped: tests/features/bep-0009-metadata.feature:52:5
[INFO] [stdout] Feature: BEP 10 — Extension Protocol
[INFO] [stdout]   Scenario: Handshake advertises BEP 10 via reserved byte 5 bit 0x10
[INFO] [stdout]    ?  Given a handshake with the extension-protocol bit set
[INFO] [stdout]       Step skipped: tests/features/bep-0010-extension.feature:5:5
[INFO] [stdout]   Scenario: Extension handshake round-trips its m dict and supplemental fields
[INFO] [stdout]    ?  Given an ExtensionHandshake with m={"ut_metadata":1,"ut_pex":2}, metadata_size=31415, client="test-client"
[INFO] [stdout]       Step skipped: tests/features/bep-0010-extension.feature:10:5
[INFO] [stdout]   Scenario: Decoder is lenient about unknown keys
[INFO] [stdout]    ?  Given a handshake bencode payload containing a key the decoder does not recognise
[INFO] [stdout]       Step skipped: tests/features/bep-0010-extension.feature:17:5
[INFO] [stdout]   Scenario: Decoder rejects a non-dict payload
[INFO] [stdout]    ?  Given an extension-handshake payload that is not a bencoded dict
[INFO] [stdout]       Step skipped: tests/features/bep-0010-extension.feature:22:5
[INFO] [stdout]   Scenario: Extension IDs of 0 are reserved for the handshake itself
[INFO] [stdout]    ?  Given an inbound Message::Extended with id=0 after the initial handshake
[INFO] [stdout]       Step skipped: tests/features/bep-0010-extension.feature:27:5
[INFO] [stdout]   Scenario: Per-peer ExtensionRegistry tracks local and remote IDs independently
[INFO] [stdout]    ?  Given a registry constructed with local m={"ut_metadata":1,"ut_pex":2}
[INFO] [stdout]       Step skipped: tests/features/bep-0010-extension.feature:32:5
[INFO] [stdout]   Scenario: PeerConn exchanges extension handshakes immediately after the BEP 3 handshake
[INFO] [stdout]    ?  Given a connected pair of peers each advertising the BEP 10 reserved bit
[INFO] [stdout]       Step skipped: tests/features/bep-0010-extension.feature:39:5
[INFO] [stdout]   Scenario: Inbound extended payload size is capped at 1 MB
[INFO] [stdout]    ?  Given an inbound Message::Extended with payload exceeding 1 MB
[INFO] [stdout]       Step skipped: tests/features/bep-0010-extension.feature:46:5
[INFO] [stdout] Feature: BEP 11 — Peer Exchange (ut_pex)
[INFO] [stdout]   Scenario: PexMessage round-trips IPv4 added/dropped with per-peer flags
[INFO] [stdout]    ?  Given a PexMessage with two IPv4 added peers (one SEED, one REACHABLE) and one IPv4 dropped peer
[INFO] [stdout]       Step skipped: tests/features/bep-0011-pex.feature:5:5
[INFO] [stdout]   Scenario: PexMessage round-trips IPv6 added/dropped with per-peer flags
[INFO] [stdout]    ?  Given a PexMessage with one IPv6 added peer (SUPPORTS_UTP) and one IPv6 dropped peer
[INFO] [stdout]       Step skipped: tests/features/bep-0011-pex.feature:10:5
[INFO] [stdout]   Scenario: PexMessage round-trips a mixed v4/v6 added+dropped batch
[INFO] [stdout]    ?  Given a PexMessage carrying both IPv4 and IPv6 peers in added and dropped
[INFO] [stdout]       Step skipped: tests/features/bep-0011-pex.feature:15:5
[INFO] [stdout]   Scenario: Missing added.f bytes default each peer's flags to 0
[INFO] [stdout]    ?  Given a wire payload with one IPv4 added peer and no "added.f" key
[INFO] [stdout]       Step skipped: tests/features/bep-0011-pex.feature:20:5
[INFO] [stdout]   Scenario: Decoder rejects added.f length that does not match the peer count
[INFO] [stdout]    ?  Given a payload with two IPv4 added peers and only one byte of added.f
[INFO] [stdout]       Step skipped: tests/features/bep-0011-pex.feature:25:5
[INFO] [stdout]   Scenario: Decoder rejects compact peer lists with truncated stride
[INFO] [stdout]    ?  Given a payload whose "added" bytes length is not a multiple of 6
[INFO] [stdout]       Step skipped: tests/features/bep-0011-pex.feature:30:5
[INFO] [stdout]   Scenario: Decoder rejects messages exceeding MAX_PEX_PEERS (200)
[INFO] [stdout]    ?  Given a payload carrying MAX_PEX_PEERS + 1 added peers
[INFO] [stdout]       Step skipped: tests/features/bep-0011-pex.feature:35:5
[INFO] [stdout]   Scenario: Outbound PEX is throttled to once every 60s per peer
[INFO] [stdout]    ?  Given a torrent that has just sent a PEX round to peer P
[INFO] [stdout]       Step skipped: tests/features/bep-0011-pex.feature:40:5
[INFO] [stdout]   Scenario: Inbound PEX from the same peer is rate-limited to once every 10s
[INFO] [stdout]    ?  Given a torrent that just accepted a PEX message from peer P
[INFO] [stdout]       Step skipped: tests/features/bep-0011-pex.feature:45:5
[INFO] [stdout]   Scenario: Outbound PEX is diff-based and capped per round
[INFO] [stdout]    ?  Given a peer set that has gained 80 peers and lost 60 peers since the last PEX
[INFO] [stdout]       Step skipped: tests/features/bep-0011-pex.feature:50:5
[INFO] [stdout]   Scenario: Private torrents must not exchange PEX
[INFO] [stdout]    ?  Given a torrent session whose info dict carries "private": 1
[INFO] [stdout]       Step skipped: tests/features/bep-0011-pex.feature:55:5
[INFO] [stdout]   Scenario: PEX-discovered peers are surfaced to the engine
[INFO] [stdout]    ?  Given a torrent that received an inbound PEX with two new added peers
[INFO] [stdout]       Step skipped: tests/features/bep-0011-pex.feature:60:5
[INFO] [stdout] Feature: BEP 12 — multi-tracker with tier fall-through
[INFO] [stdout]   Scenario: announce falls through tiers on failure
[INFO] [stdout]    ✔  Given a TieredTracker with tier-0 containing a failing tracker
[INFO] [stdout]    ✔  And tier-1 containing a working tracker that returns 2 peers
[INFO] [stdout]    ✔  When announce is called
[INFO] [stdout]    ✔  Then the peer list contains 2 peers
[INFO] [stdout]   Scenario: successful tracker is promoted to tier head
[INFO] [stdout]    ✔  Given a TieredTracker with tier-0 [failing, working] in that order
[INFO] [stdout]    ✔  When announce is called successfully
[INFO] [stdout]    ✔  Then the tier-0 order becomes [working, failing]
[INFO] [stdout]   Scenario: all trackers failing returns the last error
[INFO] [stdout]    ✔  Given a TieredTracker where every tracker in every tier fails
[INFO] [stdout]    ✔  When announce is called
[INFO] [stdout]    ✔  Then the call returns the last observed TrackerError
[INFO] [stdout]   Scenario: shuffled tiers are deterministic under a fixed seed
[INFO] [stdout]    ✔  Given two TieredTracker instances built from the same tiers and seed
[INFO] [stdout]    ✔  When tier_order is inspected on both
[INFO] [stdout]    ✔  Then the orderings are identical
[INFO] [stdout] Feature: BEP 14 — Local Service Discovery
[INFO] [stdout]   Scenario: LsdAnnounce round-trips a single info hash with cookie
[INFO] [stdout]    ?  Given an LsdAnnounce for port 6881 with one info hash and cookie "test-cookie"
[INFO] [stdout]       Step skipped: tests/features/bep-0014-lsd.feature:5:5
[INFO] [stdout]   Scenario: LsdAnnounce round-trips multiple info hashes
[INFO] [stdout]    ?  Given an LsdAnnounce carrying two info hashes
[INFO] [stdout]       Step skipped: tests/features/bep-0014-lsd.feature:10:5
[INFO] [stdout]   Scenario: Decoder accepts the canonical CRLF wire format
[INFO] [stdout]    ?  Given the wire bytes "BT-SEARCH * HTTP/1.1\r\nHost: 239.192.152.143:6771\r\nPort: 6881\r\nInfohash: <40-hex>\r\ncookie: abc123\r\n\r\n"
[INFO] [stdout]       Step skipped: tests/features/bep-0014-lsd.feature:15:5
[INFO] [stdout]   Scenario: Decoder is lenient about LF-only and mixed line endings
[INFO] [stdout]    ?  Given the same announce serialised with bare LF separators
[INFO] [stdout]       Step skipped: tests/features/bep-0014-lsd.feature:20:5
[INFO] [stdout]   Scenario: Decoder rejects messages missing the Port header
[INFO] [stdout]    ?  Given a wire message with Infohash but no Port header
[INFO] [stdout]       Step skipped: tests/features/bep-0014-lsd.feature:25:5
[INFO] [stdout]   Scenario: Decoder rejects messages missing any Infohash header
[INFO] [stdout]    ?  Given a wire message with Port but no Infohash header
[INFO] [stdout]       Step skipped: tests/features/bep-0014-lsd.feature:30:5
[INFO] [stdout]   Scenario: Decoder rejects malformed info hashes
[INFO] [stdout]    ?  Given a wire message whose Infohash value is not 40 lowercase-hex chars
[INFO] [stdout]       Step skipped: tests/features/bep-0014-lsd.feature:35:5
[INFO] [stdout]   Scenario: Decoder rejects messages whose request line is not BT-SEARCH
[INFO] [stdout]    ?  Given a wire message starting with "GET / HTTP/1.1"
[INFO] [stdout]       Step skipped: tests/features/bep-0014-lsd.feature:40:5
[INFO] [stdout]   Scenario: Decoder caps the number of info hashes per message
[INFO] [stdout]    ?  Given a wire message containing more than 100 Infohash headers
[INFO] [stdout]       Step skipped: tests/features/bep-0014-lsd.feature:45:5
[INFO] [stdout]   Scenario: LsdService binds to INADDR_ANY with SO_REUSEADDR so multiple listeners coexist
[INFO] [stdout]    ?  Given two LsdService bind attempts on the same multicast port
[INFO] [stdout]       Step skipped: tests/features/bep-0014-lsd.feature:50:5
[INFO] [stdout]   Scenario: LsdService's outbound announce uses TTL=1 and the configured multicast group
[INFO] [stdout]    ?  Given a default LsdConfig
[INFO] [stdout]       Step skipped: tests/features/bep-0014-lsd.feature:55:5
[INFO] [stdout]   Scenario: LsdService filters its own announcements via the cookie field
[INFO] [stdout]    ?  Given an LsdService that emitted an announce with cookie C
[INFO] [stdout]       Step skipped: tests/features/bep-0014-lsd.feature:60:5
[INFO] [stdout]   Scenario: Private torrents are never registered for LSD announce
[INFO] [stdout]    ?  Given an LsdService handle and a private info hash
[INFO] [stdout]       Step skipped: tests/features/bep-0014-lsd.feature:65:5
[INFO] [stdout]   Scenario: Two engines on loopback discover each other via multicast
[INFO] [stdout]    ?  Given engine A registers info hash H and engine B is listening on the same loopback multicast group
[INFO] [stdout]       Step skipped: tests/features/bep-0014-lsd.feature:70:5
[INFO] [stdout] Feature: BEP 15 — UDP tracker protocol
[INFO] [stdout]   Scenario: CONNECT request carries the protocol magic first
[INFO] [stdout]    ✔  Given a fresh transaction_id 0xDEADBEEF
[INFO] [stdout]    ✔  When a CONNECT request is encoded
[INFO] [stdout]    ✔  Then the first 8 bytes equal 0x0000041727101980
[INFO] [stdout]    ✔  And bytes 8..12 encode action = 0 (CONNECT)
[INFO] [stdout]    ✔  And bytes 12..16 encode transaction_id = 0xDEADBEEF
[INFO] [stdout]   Scenario: CONNECT response must match the sent transaction_id
[INFO] [stdout]    ✔  Given a CONNECT response with transaction_id 0xCAFEBABE
[INFO] [stdout]    ✔  When the client expected transaction_id 0x12345678
[INFO] [stdout]    ✔  Then decoding returns a decode error
[INFO] [stdout]   Scenario: tracker error response propagates as a typed failure
[INFO] [stdout]    ✔  Given a UDP response with action = 3 (ERROR) and body "info_hash unknown"
[INFO] [stdout]    ✔  When the response is decoded
[INFO] [stdout]    ✔  Then decoding returns a tracker failure with message "info_hash unknown"
[INFO] [stdout]   Scenario: ANNOUNCE response peer list decodes from compact IPv4 form
[INFO] [stdout]    ✔  Given an ANNOUNCE response with interval 1800 and two compact IPv4 peers
[INFO] [stdout]    ✔  When the response is decoded
[INFO] [stdout]    ✔  Then the announce interval is 1800 seconds
[INFO] [stdout]    ✔  And the parsed peer list contains "10.0.0.1:6881"
[INFO] [stdout]    ✔  And the parsed peer list contains "192.168.1.5:6881"
[INFO] [stdout]   Scenario: retry timeout follows the BEP 15 curve (15s × 2^n, cap 3840s)
[INFO] [stdout]    ✔  When the retry timeout is computed for attempts 0, 1, 2, 7, 8, 20
[INFO] [stdout]    ✔  Then the timeouts are 15s, 30s, 60s, 1920s, 3840s, 3840s
[INFO] [stdout]   Scenario: connection_id is refreshed every 60 seconds
[INFO] [stdout]    ?  Given a tracker client that observed its last CONNECT reply 61 seconds ago
[INFO] [stdout]       Step skipped: tests/features/bep-0015-udp-tracker.feature:39:5
[INFO] [stdout] Feature: BEP 23 — tracker compact peer list
[INFO] [stdout]   Scenario: parse a tracker response carrying a two-peer compact v4 list
[INFO] [stdout]    ✔  Given a bencoded announce response with interval 1800 and two compact v4 peers
[INFO] [stdout]    ✔  When the tracker response is parsed
[INFO] [stdout]    ✔  Then the announce interval is 1800 seconds
[INFO] [stdout]    ✔  And the parsed peer list contains "10.0.0.1:6881"
[INFO] [stdout]    ✔  And the parsed peer list contains "192.168.1.2:49205"
[INFO] [stdout]   Scenario: parse a tracker response carrying a single compact v6 peer
[INFO] [stdout]    ✔  Given a bencoded announce response with interval 900 and one compact v6 peer at "[::1]:6881"
[INFO] [stdout]    ✔  When the tracker response is parsed
[INFO] [stdout]    ✔  Then the parsed peer list contains "[::1]:6881"
[INFO] [stdout]   Scenario: tracker failure reason surfaces as a typed error
[INFO] [stdout]    ✔  Given a bencoded tracker response with failure reason "tracker down"
[INFO] [stdout]    ✔  When the tracker response is parsed
[INFO] [stdout]    ✔  Then parsing returns a tracker failure with message "tracker down"
[INFO] [stdout] Feature: BEP 27 — private torrents
[INFO] [stdout]   Scenario: private flag is parsed from the info dict
[INFO] [stdout]    ✔  Given a metainfo whose info dict carries "private": 1
[INFO] [stdout]    ✔  When the metainfo is parsed
[INFO] [stdout]    ✔  Then the parsed Info reports private = true
[INFO] [stdout]   Scenario: absent private key is treated as public
[INFO] [stdout]    ✔  Given a metainfo whose info dict omits the "private" key
[INFO] [stdout]    ✔  When the metainfo is parsed
[INFO] [stdout]    ✔  Then the parsed Info reports private = false
[INFO] [stdout]   Scenario: private flag is authoritative at the session layer
[INFO] [stdout]    ✔  Given a torrent session constructed with private = true
[INFO] [stdout]    ✔  When the session reports its private flag via is_private()
[INFO] [stdout]    ✔  Then the value is true
[INFO] [stdout]    ✔  And future peer-discovery subsystems (DHT / PEX / LSD) must not gossip
[INFO] [stdout] [Summary]
[INFO] [stdout] 10 features
[INFO] [stdout] 69 scenarios (24 passed, 45 skipped)
[INFO] [stdout] 124 steps (79 passed, 45 skipped)
[INFO] [stdout] 
[INFO] [stderr]      Running tests/three_engine_swarm.rs (/opt/rustwide/target/debug/deps/three_engine_swarm-c476c06eeff86872)
[INFO] [stdout] running 0 tests
[INFO] [stderr]    Doc-tests magpie_bt
[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] [stdout] 
[INFO] [stdout] running 2 tests
[INFO] [stdout] test src/lib.rs - (line 19) ... ok
[INFO] [stdout] test src/lib.rs - (line 48) ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] all doctests ran in 1.16s; merged doctests compilation took 1.14s
[INFO] running `Command { std: "docker" "inspect" "2a1574a939a0392cfdc03590c0ddc07125dfff852a7dd55d44f30b93cba960d6", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "2a1574a939a0392cfdc03590c0ddc07125dfff852a7dd55d44f30b93cba960d6", kill_on_drop: false }`
[INFO] [stdout] 2a1574a939a0392cfdc03590c0ddc07125dfff852a7dd55d44f30b93cba960d6
