0s autopkgtest [13:11:25]: starting date and time: 2026-02-07 13:11:25+0000 0s autopkgtest [13:11:25]: git checkout: 4b346b80 nova: make wait_reboot return success even when a no-op 0s autopkgtest [13:11:25]: host juju-7f2275-prod-proposed-migration-environment-15; command line: /home/ubuntu/autopkgtest/runner/autopkgtest --output-dir /tmp/autopkgtest-work.12lfm5x2/out --timeout-copy=6000 --needs-internet=try --setup-commands /home/ubuntu/autopkgtest-cloud/worker-config-production/setup-canonical.sh --apt-pocket=proposed=src:ruby3.3 --apt-upgrade ruby-excon --timeout-short=300 --timeout-copy=20000 --timeout-build=20000 --env=ADT_TEST_TRIGGERS=ruby3.3/3.3.8-2ubuntu3 -- ssh -s /home/ubuntu/autopkgtest/ssh-setup/nova -- --flavor autopkgtest-cpu2-ram4-disk20-s390x --security-groups autopkgtest-juju-7f2275-prod-proposed-migration-environment-15@sto01-s390x-4.secgroup --name adt-resolute-s390x-ruby-excon-20260207-131125-juju-7f2275-prod-proposed-migration-environment-15-99a6b56a-4fd8-419b-8263-9f0f635f1cd1 --image adt/ubuntu-resolute-s390x-server --keyname testbed-juju-7f2275-prod-proposed-migration-environment-15 --net-id=net_prod-autopkgtest-workers-s390x -e TERM=linux --mirror=http://ftpmaster.internal/ubuntu/ 3s Creating nova instance adt-resolute-s390x-ruby-excon-20260207-131125-juju-7f2275-prod-proposed-migration-environment-15-99a6b56a-4fd8-419b-8263-9f0f635f1cd1 from image adt/ubuntu-resolute-s390x-server-20260206.img (UUID 49c0a1d9-89cb-4112-bb14-7a2a39e81cac)... 139s autopkgtest [13:13:44]: testbed dpkg architecture: s390x 140s autopkgtest [13:13:45]: testbed apt version: 3.1.15 140s autopkgtest [13:13:45]: @@@@@@@@@@@@@@@@@@@@ test bed setup 141s autopkgtest [13:13:46]: testbed release detected to be: None 144s autopkgtest [13:13:49]: updating testbed package index (apt update) 144s Get:1 http://ftpmaster.internal/ubuntu resolute-proposed InRelease [124 kB] 145s Hit:2 http://ftpmaster.internal/ubuntu resolute InRelease 145s Hit:3 http://ftpmaster.internal/ubuntu resolute-updates InRelease 145s Hit:4 http://ftpmaster.internal/ubuntu resolute-security InRelease 145s Get:5 http://ftpmaster.internal/ubuntu resolute-proposed/universe Sources [1606 kB] 145s Get:6 http://ftpmaster.internal/ubuntu resolute-proposed/restricted Sources [10.7 kB] 145s Get:7 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse Sources [35.1 kB] 145s Get:8 http://ftpmaster.internal/ubuntu resolute-proposed/main Sources [196 kB] 145s Get:9 http://ftpmaster.internal/ubuntu resolute-proposed/main s390x Packages [233 kB] 146s Get:10 http://ftpmaster.internal/ubuntu resolute-proposed/universe s390x Packages [1423 kB] 146s Get:11 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse s390x Packages [10.2 kB] 148s Fetched 3637 kB in 3s (1068 kB/s) 155s Reading package lists... 157s Hit:1 http://ftpmaster.internal/ubuntu resolute-proposed InRelease 157s Hit:2 http://ftpmaster.internal/ubuntu resolute InRelease 157s Hit:3 http://ftpmaster.internal/ubuntu resolute-updates InRelease 157s Hit:4 http://ftpmaster.internal/ubuntu resolute-security InRelease 164s Reading package lists... 165s Reading package lists... 167s Building dependency tree... 167s Reading state information... 168s Calculating upgrade... 168s The following packages will be upgraded: 168s 3cpio libevent-core-2.1-7t64 libpcap0.8t64 169s 3 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 169s Need to get 560 kB of archives. 169s After this operation, 0 B of additional disk space will be used. 169s Get:1 http://ftpmaster.internal/ubuntu resolute/main s390x libpcap0.8t64 s390x 1.10.5-2ubuntu3 [155 kB] 169s Get:2 http://ftpmaster.internal/ubuntu resolute/main s390x 3cpio s390x 0.14.0-1ubuntu1 [313 kB] 169s Get:3 http://ftpmaster.internal/ubuntu resolute/main s390x libevent-core-2.1-7t64 s390x 2.1.12-stable-10build2 [93.1 kB] 172s dpkg-preconfigure: unable to re-open stdin: No such file or directory 172s Fetched 560 kB in 0s (8009 kB/s) 178s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 61954 files and directories currently installed.) 178s Preparing to unpack .../libpcap0.8t64_1.10.5-2ubuntu3_s390x.deb ... 179s Unpacking libpcap0.8t64:s390x (1.10.5-2ubuntu3) over (1.10.5-2ubuntu2) ... 179s Preparing to unpack .../3cpio_0.14.0-1ubuntu1_s390x.deb ... 180s Unpacking 3cpio (0.14.0-1ubuntu1) over (0.13.1-1ubuntu1) ... 180s Preparing to unpack .../libevent-core-2.1-7t64_2.1.12-stable-10build2_s390x.deb ... 181s Unpacking libevent-core-2.1-7t64:s390x (2.1.12-stable-10build2) over (2.1.12-stable-10build1) ... 182s Setting up 3cpio (0.14.0-1ubuntu1) ... 182s Setting up libpcap0.8t64:s390x (1.10.5-2ubuntu3) ... 182s Setting up libevent-core-2.1-7t64:s390x (2.1.12-stable-10build2) ... 182s Processing triggers for man-db (2.13.1-1) ... 193s Processing triggers for libc-bin (2.42-2ubuntu4) ... 195s autopkgtest [13:14:40]: upgrading testbed (apt dist-upgrade and autopurge) 195s Reading package lists... 197s Building dependency tree... 197s Reading state information... 198s Calculating upgrade... 199s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 199s Reading package lists... 200s Building dependency tree... 200s Reading state information... 201s Solving dependencies... 202s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 209s autopkgtest [13:14:54]: testbed running kernel: Linux 6.18.0-9-generic #9-Ubuntu SMP Mon Jan 12 15:39:23 UTC 2026 209s autopkgtest [13:14:54]: @@@@@@@@@@@@@@@@@@@@ apt-source ruby-excon 214s Get:1 http://ftpmaster.internal/ubuntu resolute/universe ruby-excon 1.3.1-1 (dsc) [2238 B] 214s Get:2 http://ftpmaster.internal/ubuntu resolute/universe ruby-excon 1.3.1-1 (tar) [240 kB] 214s Get:3 http://ftpmaster.internal/ubuntu resolute/universe ruby-excon 1.3.1-1 (diff) [6468 B] 215s gpgv: Signature made Thu Nov 20 21:55:33 2025 UTC 215s gpgv: using RSA key 5C7ABEA20F8630459CC8C8B5E27F2CF8458C2FA4 215s gpgv: Can't check signature: No public key 215s dpkg-source: warning: cannot verify inline signature for ./ruby-excon_1.3.1-1.dsc: no acceptable signature found 216s autopkgtest [13:15:01]: testing package ruby-excon version 1.3.1-1 216s autopkgtest [13:15:01]: build not needed 216s autopkgtest [13:15:01]: test gem2deb-test-runner: preparing testbed 218s Reading package lists... 219s Building dependency tree... 219s Reading state information... 220s Solving dependencies... 221s The following NEW packages will be installed: 221s gem2deb-test-runner libruby libruby3.3 puma rake ruby ruby-activesupport 221s ruby-base64 ruby-chronic ruby-concurrent ruby-connection-pool ruby-csv 221s ruby-delorean ruby-did-you-mean ruby-diff-lcs ruby-eventmachine ruby-excon 221s ruby-formatador ruby-i18n ruby-kgio ruby-minitest ruby-multi-json 221s ruby-mustermann ruby-net-telnet ruby-nio4r ruby-numerizer ruby-open4 221s ruby-power-assert ruby-rack ruby-rack-protection ruby-rack-session 221s ruby-rackup ruby-raindrops ruby-rspec ruby-rspec-core 221s ruby-rspec-expectations ruby-rspec-mocks ruby-rspec-support 221s ruby-ruby2-keywords ruby-rubygems ruby-shindo ruby-sinatra 221s ruby-sinatra-contrib ruby-test-unit ruby-tilt ruby-tzinfo ruby-webrick 221s ruby-xmlrpc ruby3.3 rubygems-integration unicorn 222s 0 upgraded, 51 newly installed, 0 to remove and 0 not upgraded. 222s Need to get 8784 kB of archives. 222s After this operation, 42.5 MB of additional disk space will be used. 222s Get:1 http://ftpmaster.internal/ubuntu resolute/main s390x rubygems-integration all 1.19build1 [5666 B] 222s Get:2 http://ftpmaster.internal/ubuntu resolute/main s390x ruby-csv all 3.3.4-1 [43.0 kB] 222s Get:3 http://ftpmaster.internal/ubuntu resolute/main s390x ruby-did-you-mean all 1.6.3-2build1 [14.9 kB] 222s Get:4 http://ftpmaster.internal/ubuntu resolute/main s390x ruby-net-telnet all 0.2.0-1build1 [13.5 kB] 222s Get:5 http://ftpmaster.internal/ubuntu resolute/main s390x ruby-ruby2-keywords all 0.0.5-1build1 [4398 B] 222s Get:6 http://ftpmaster.internal/ubuntu resolute/main s390x ruby-webrick all 1.9.1-1build1 [60.9 kB] 222s Get:7 http://ftpmaster.internal/ubuntu resolute/main s390x ruby-xmlrpc all 0.3.3-2build1 [24.9 kB] 222s Get:8 http://ftpmaster.internal/ubuntu resolute-proposed/main s390x libruby3.3 s390x 3.3.8-2ubuntu3 [5868 kB] 222s Get:9 http://ftpmaster.internal/ubuntu resolute-proposed/main s390x ruby3.3 s390x 3.3.8-2ubuntu3 [49.1 kB] 222s Get:10 http://ftpmaster.internal/ubuntu resolute/main s390x libruby s390x 1:3.3 [5162 B] 222s Get:11 http://ftpmaster.internal/ubuntu resolute/main s390x ruby-rubygems all 3.6.7-2ubuntu2 [332 kB] 222s Get:12 http://ftpmaster.internal/ubuntu resolute/main s390x ruby s390x 1:3.3 [3668 B] 222s Get:13 http://ftpmaster.internal/ubuntu resolute/main s390x rake all 13.2.1-1build1 [45.9 kB] 222s Get:14 http://ftpmaster.internal/ubuntu resolute/universe s390x ruby-minitest all 5.26.1-1 [49.3 kB] 222s Get:15 http://ftpmaster.internal/ubuntu resolute/universe s390x ruby-power-assert all 2.0.5-1 [12.0 kB] 222s Get:16 http://ftpmaster.internal/ubuntu resolute/universe s390x ruby-test-unit all 3.6.2-1 [67.0 kB] 222s Get:17 http://ftpmaster.internal/ubuntu resolute/universe s390x gem2deb-test-runner s390x 2.2.5 [18.3 kB] 222s Get:18 http://ftpmaster.internal/ubuntu resolute/main s390x ruby-nio4r s390x 2.7.4-1 [116 kB] 222s Get:19 http://ftpmaster.internal/ubuntu resolute/main s390x puma s390x 6.6.0-4 [152 kB] 222s Get:20 http://ftpmaster.internal/ubuntu resolute/universe s390x ruby-concurrent all 1.3.4-1 [283 kB] 222s Get:21 http://ftpmaster.internal/ubuntu resolute/universe s390x ruby-i18n all 1.14.7-1 [42.8 kB] 222s Get:22 http://ftpmaster.internal/ubuntu resolute/universe s390x ruby-tzinfo all 2.0.6-1 [55.2 kB] 222s Get:23 http://ftpmaster.internal/ubuntu resolute/universe s390x ruby-connection-pool all 2.5.4-1 [10.3 kB] 222s Get:24 http://ftpmaster.internal/ubuntu resolute/main s390x ruby-base64 all 0.3.0-1build1 [8560 B] 222s Get:25 http://ftpmaster.internal/ubuntu resolute/universe s390x ruby-activesupport all 2:7.2.2.2+dfsg-2 [224 kB] 223s Get:26 http://ftpmaster.internal/ubuntu resolute/universe s390x ruby-numerizer all 0.2.0-3 [4954 B] 223s Get:27 http://ftpmaster.internal/ubuntu resolute/universe s390x ruby-chronic all 0.10.6-1 [25.5 kB] 223s Get:28 http://ftpmaster.internal/ubuntu resolute/universe s390x ruby-delorean all 2.1.0-3 [5122 B] 223s Get:29 http://ftpmaster.internal/ubuntu resolute/universe s390x ruby-diff-lcs all 1.5.1-1 [22.8 kB] 223s Get:30 http://ftpmaster.internal/ubuntu resolute/universe s390x ruby-eventmachine s390x 1.3~pre20220315-df4ab006-5build1 [154 kB] 223s Get:31 http://ftpmaster.internal/ubuntu resolute/universe s390x ruby-excon all 1.3.1-1 [165 kB] 223s Get:32 http://ftpmaster.internal/ubuntu resolute/universe s390x ruby-formatador all 1.2.3-1 [8812 B] 223s Get:33 http://ftpmaster.internal/ubuntu resolute/universe s390x ruby-kgio s390x 2.11.2-2build7 [29.7 kB] 223s Get:34 http://ftpmaster.internal/ubuntu resolute/universe s390x ruby-multi-json all 1.15.0-1 [16.1 kB] 223s Get:35 http://ftpmaster.internal/ubuntu resolute/main s390x ruby-mustermann all 3.0.4-1build1 [38.4 kB] 223s Get:36 http://ftpmaster.internal/ubuntu resolute/universe s390x ruby-open4 all 1.3.4-3 [14.8 kB] 223s Get:37 http://ftpmaster.internal/ubuntu resolute/main s390x ruby-rack all 3.1.18-1build1 [81.7 kB] 223s Get:38 http://ftpmaster.internal/ubuntu resolute/main s390x ruby-rack-protection all 4.2.1-1build1 [16.1 kB] 223s Get:39 http://ftpmaster.internal/ubuntu resolute/main s390x ruby-rack-session all 2.1.1-0.1build1 [12.8 kB] 223s Get:40 http://ftpmaster.internal/ubuntu resolute/main s390x ruby-rackup all 2.1.0-4build1 [13.1 kB] 223s Get:41 http://ftpmaster.internal/ubuntu resolute/universe s390x ruby-raindrops s390x 0.20.0-2 [30.6 kB] 223s Get:42 http://ftpmaster.internal/ubuntu resolute/universe s390x ruby-rspec-support all 3.13.0c0e0m0s1-2 [29.2 kB] 223s Get:43 http://ftpmaster.internal/ubuntu resolute/universe s390x ruby-rspec-core all 3.13.0c0e0m0s1-2 [164 kB] 223s Get:44 http://ftpmaster.internal/ubuntu resolute/universe s390x ruby-rspec-expectations all 3.13.0c0e0m0s1-2 [89.8 kB] 223s Get:45 http://ftpmaster.internal/ubuntu resolute/universe s390x ruby-rspec-mocks all 3.13.0c0e0m0s1-2 [81.0 kB] 223s Get:46 http://ftpmaster.internal/ubuntu resolute/universe s390x ruby-rspec all 3.13.0c0e0m0s1-2 [3500 B] 223s Get:47 http://ftpmaster.internal/ubuntu resolute/universe s390x ruby-shindo all 0.3.11-1 [11.9 kB] 223s Get:48 http://ftpmaster.internal/ubuntu resolute/main s390x ruby-tilt all 2.6.1-1build1 [31.5 kB] 223s Get:49 http://ftpmaster.internal/ubuntu resolute/main s390x ruby-sinatra all 4.2.1-1build1 [94.9 kB] 223s Get:50 http://ftpmaster.internal/ubuntu resolute/universe s390x ruby-sinatra-contrib all 4.2.1-1build1 [26.8 kB] 223s Get:51 http://ftpmaster.internal/ubuntu resolute/universe s390x unicorn s390x 6.1.0+git.20250131.1370f52-1 [102 kB] 226s Fetched 8784 kB in 2s (5386 kB/s) 226s Selecting previously unselected package rubygems-integration. 226s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 61954 files and directories currently installed.) 226s Preparing to unpack .../00-rubygems-integration_1.19build1_all.deb ... 226s Unpacking rubygems-integration (1.19build1) ... 226s Selecting previously unselected package ruby-csv. 226s Preparing to unpack .../01-ruby-csv_3.3.4-1_all.deb ... 226s Unpacking ruby-csv (3.3.4-1) ... 226s Selecting previously unselected package ruby-did-you-mean. 226s Preparing to unpack .../02-ruby-did-you-mean_1.6.3-2build1_all.deb ... 226s Unpacking ruby-did-you-mean (1.6.3-2build1) ... 226s Selecting previously unselected package ruby-net-telnet. 227s Preparing to unpack .../03-ruby-net-telnet_0.2.0-1build1_all.deb ... 227s Unpacking ruby-net-telnet (0.2.0-1build1) ... 227s Selecting previously unselected package ruby-ruby2-keywords. 227s Preparing to unpack .../04-ruby-ruby2-keywords_0.0.5-1build1_all.deb ... 227s Unpacking ruby-ruby2-keywords (0.0.5-1build1) ... 227s Selecting previously unselected package ruby-webrick. 227s Preparing to unpack .../05-ruby-webrick_1.9.1-1build1_all.deb ... 227s Unpacking ruby-webrick (1.9.1-1build1) ... 227s Selecting previously unselected package ruby-xmlrpc. 227s Preparing to unpack .../06-ruby-xmlrpc_0.3.3-2build1_all.deb ... 227s Unpacking ruby-xmlrpc (0.3.3-2build1) ... 227s Selecting previously unselected package libruby3.3:s390x. 227s Preparing to unpack .../07-libruby3.3_3.3.8-2ubuntu3_s390x.deb ... 227s Unpacking libruby3.3:s390x (3.3.8-2ubuntu3) ... 229s Selecting previously unselected package ruby3.3. 229s Preparing to unpack .../08-ruby3.3_3.3.8-2ubuntu3_s390x.deb ... 229s Unpacking ruby3.3 (3.3.8-2ubuntu3) ... 230s Selecting previously unselected package libruby:s390x. 230s Preparing to unpack .../09-libruby_1%3a3.3_s390x.deb ... 230s Unpacking libruby:s390x (1:3.3) ... 230s Selecting previously unselected package ruby-rubygems. 230s Preparing to unpack .../10-ruby-rubygems_3.6.7-2ubuntu2_all.deb ... 230s Unpacking ruby-rubygems (3.6.7-2ubuntu2) ... 230s Selecting previously unselected package ruby. 230s Preparing to unpack .../11-ruby_1%3a3.3_s390x.deb ... 230s Unpacking ruby (1:3.3) ... 230s Selecting previously unselected package rake. 230s Preparing to unpack .../12-rake_13.2.1-1build1_all.deb ... 230s Unpacking rake (13.2.1-1build1) ... 230s Selecting previously unselected package ruby-minitest. 230s Preparing to unpack .../13-ruby-minitest_5.26.1-1_all.deb ... 230s Unpacking ruby-minitest (5.26.1-1) ... 230s Selecting previously unselected package ruby-power-assert. 230s Preparing to unpack .../14-ruby-power-assert_2.0.5-1_all.deb ... 230s Unpacking ruby-power-assert (2.0.5-1) ... 230s Selecting previously unselected package ruby-test-unit. 230s Preparing to unpack .../15-ruby-test-unit_3.6.2-1_all.deb ... 230s Unpacking ruby-test-unit (3.6.2-1) ... 230s Selecting previously unselected package gem2deb-test-runner. 230s Preparing to unpack .../16-gem2deb-test-runner_2.2.5_s390x.deb ... 230s Unpacking gem2deb-test-runner (2.2.5) ... 230s Selecting previously unselected package ruby-nio4r:s390x. 230s Preparing to unpack .../17-ruby-nio4r_2.7.4-1_s390x.deb ... 231s Unpacking ruby-nio4r:s390x (2.7.4-1) ... 231s Selecting previously unselected package puma. 231s Preparing to unpack .../18-puma_6.6.0-4_s390x.deb ... 231s Unpacking puma (6.6.0-4) ... 231s Selecting previously unselected package ruby-concurrent. 231s Preparing to unpack .../19-ruby-concurrent_1.3.4-1_all.deb ... 231s Unpacking ruby-concurrent (1.3.4-1) ... 231s Selecting previously unselected package ruby-i18n. 231s Preparing to unpack .../20-ruby-i18n_1.14.7-1_all.deb ... 231s Unpacking ruby-i18n (1.14.7-1) ... 231s Selecting previously unselected package ruby-tzinfo. 231s Preparing to unpack .../21-ruby-tzinfo_2.0.6-1_all.deb ... 231s Unpacking ruby-tzinfo (2.0.6-1) ... 231s Selecting previously unselected package ruby-connection-pool. 231s Preparing to unpack .../22-ruby-connection-pool_2.5.4-1_all.deb ... 231s Unpacking ruby-connection-pool (2.5.4-1) ... 231s Selecting previously unselected package ruby-base64. 231s Preparing to unpack .../23-ruby-base64_0.3.0-1build1_all.deb ... 231s Unpacking ruby-base64 (0.3.0-1build1) ... 231s Selecting previously unselected package ruby-activesupport. 232s Preparing to unpack .../24-ruby-activesupport_2%3a7.2.2.2+dfsg-2_all.deb ... 232s Unpacking ruby-activesupport (2:7.2.2.2+dfsg-2) ... 232s Selecting previously unselected package ruby-numerizer. 232s Preparing to unpack .../25-ruby-numerizer_0.2.0-3_all.deb ... 232s Unpacking ruby-numerizer (0.2.0-3) ... 232s Selecting previously unselected package ruby-chronic. 232s Preparing to unpack .../26-ruby-chronic_0.10.6-1_all.deb ... 232s Unpacking ruby-chronic (0.10.6-1) ... 232s Selecting previously unselected package ruby-delorean. 232s Preparing to unpack .../27-ruby-delorean_2.1.0-3_all.deb ... 232s Unpacking ruby-delorean (2.1.0-3) ... 232s Selecting previously unselected package ruby-diff-lcs. 232s Preparing to unpack .../28-ruby-diff-lcs_1.5.1-1_all.deb ... 232s Unpacking ruby-diff-lcs (1.5.1-1) ... 232s Selecting previously unselected package ruby-eventmachine:s390x. 232s Preparing to unpack .../29-ruby-eventmachine_1.3~pre20220315-df4ab006-5build1_s390x.deb ... 232s Unpacking ruby-eventmachine:s390x (1.3~pre20220315-df4ab006-5build1) ... 233s Selecting previously unselected package ruby-excon. 233s Preparing to unpack .../30-ruby-excon_1.3.1-1_all.deb ... 233s Unpacking ruby-excon (1.3.1-1) ... 233s Selecting previously unselected package ruby-formatador. 233s Preparing to unpack .../31-ruby-formatador_1.2.3-1_all.deb ... 233s Unpacking ruby-formatador (1.2.3-1) ... 233s Selecting previously unselected package ruby-kgio. 233s Preparing to unpack .../32-ruby-kgio_2.11.2-2build7_s390x.deb ... 233s Unpacking ruby-kgio (2.11.2-2build7) ... 233s Selecting previously unselected package ruby-multi-json. 233s Preparing to unpack .../33-ruby-multi-json_1.15.0-1_all.deb ... 233s Unpacking ruby-multi-json (1.15.0-1) ... 234s Selecting previously unselected package ruby-mustermann. 234s Preparing to unpack .../34-ruby-mustermann_3.0.4-1build1_all.deb ... 234s Unpacking ruby-mustermann (3.0.4-1build1) ... 234s Selecting previously unselected package ruby-open4. 234s Preparing to unpack .../35-ruby-open4_1.3.4-3_all.deb ... 234s Unpacking ruby-open4 (1.3.4-3) ... 234s Selecting previously unselected package ruby-rack. 234s Preparing to unpack .../36-ruby-rack_3.1.18-1build1_all.deb ... 234s Unpacking ruby-rack (3.1.18-1build1) ... 234s Selecting previously unselected package ruby-rack-protection. 234s Preparing to unpack .../37-ruby-rack-protection_4.2.1-1build1_all.deb ... 234s Unpacking ruby-rack-protection (4.2.1-1build1) ... 234s Selecting previously unselected package ruby-rack-session. 234s Preparing to unpack .../38-ruby-rack-session_2.1.1-0.1build1_all.deb ... 234s Unpacking ruby-rack-session (2.1.1-0.1build1) ... 234s Selecting previously unselected package ruby-rackup. 234s Preparing to unpack .../39-ruby-rackup_2.1.0-4build1_all.deb ... 234s Unpacking ruby-rackup (2.1.0-4build1) ... 234s Selecting previously unselected package ruby-raindrops:s390x. 234s Preparing to unpack .../40-ruby-raindrops_0.20.0-2_s390x.deb ... 234s Unpacking ruby-raindrops:s390x (0.20.0-2) ... 235s Selecting previously unselected package ruby-rspec-support. 235s Preparing to unpack .../41-ruby-rspec-support_3.13.0c0e0m0s1-2_all.deb ... 235s Unpacking ruby-rspec-support (3.13.0c0e0m0s1-2) ... 235s Selecting previously unselected package ruby-rspec-core. 235s Preparing to unpack .../42-ruby-rspec-core_3.13.0c0e0m0s1-2_all.deb ... 235s Unpacking ruby-rspec-core (3.13.0c0e0m0s1-2) ... 235s Selecting previously unselected package ruby-rspec-expectations. 235s Preparing to unpack .../43-ruby-rspec-expectations_3.13.0c0e0m0s1-2_all.deb ... 235s Unpacking ruby-rspec-expectations (3.13.0c0e0m0s1-2) ... 235s Selecting previously unselected package ruby-rspec-mocks. 235s Preparing to unpack .../44-ruby-rspec-mocks_3.13.0c0e0m0s1-2_all.deb ... 235s Unpacking ruby-rspec-mocks (3.13.0c0e0m0s1-2) ... 235s Selecting previously unselected package ruby-rspec. 235s Preparing to unpack .../45-ruby-rspec_3.13.0c0e0m0s1-2_all.deb ... 235s Unpacking ruby-rspec (3.13.0c0e0m0s1-2) ... 235s Selecting previously unselected package ruby-shindo. 235s Preparing to unpack .../46-ruby-shindo_0.3.11-1_all.deb ... 235s Unpacking ruby-shindo (0.3.11-1) ... 235s Selecting previously unselected package ruby-tilt. 235s Preparing to unpack .../47-ruby-tilt_2.6.1-1build1_all.deb ... 235s Unpacking ruby-tilt (2.6.1-1build1) ... 236s Selecting previously unselected package ruby-sinatra. 236s Preparing to unpack .../48-ruby-sinatra_4.2.1-1build1_all.deb ... 236s Unpacking ruby-sinatra (4.2.1-1build1) ... 236s Selecting previously unselected package ruby-sinatra-contrib. 236s Preparing to unpack .../49-ruby-sinatra-contrib_4.2.1-1build1_all.deb ... 236s Unpacking ruby-sinatra-contrib (4.2.1-1build1) ... 236s Selecting previously unselected package unicorn. 236s Preparing to unpack .../50-unicorn_6.1.0+git.20250131.1370f52-1_s390x.deb ... 236s Unpacking unicorn (6.1.0+git.20250131.1370f52-1) ... 236s Setting up ruby-multi-json (1.15.0-1) ... 236s Setting up ruby-ruby2-keywords (0.0.5-1build1) ... 236s Setting up ruby-mustermann (3.0.4-1build1) ... 236s Setting up ruby-open4 (1.3.4-3) ... 236s Setting up ruby-power-assert (2.0.5-1) ... 236s Setting up rubygems-integration (1.19build1) ... 236s Setting up ruby-concurrent (1.3.4-1) ... 236s Setting up ruby-minitest (5.26.1-1) ... 236s Setting up ruby-test-unit (3.6.2-1) ... 236s Setting up ruby-net-telnet (0.2.0-1build1) ... 236s Setting up ruby-csv (3.3.4-1) ... 236s Setting up ruby-base64 (0.3.0-1build1) ... 236s Setting up ruby-i18n (1.14.7-1) ... 236s Setting up ruby-rspec-support (3.13.0c0e0m0s1-2) ... 236s Setting up ruby-webrick (1.9.1-1build1) ... 236s Setting up ruby-connection-pool (2.5.4-1) ... 236s Setting up ruby-did-you-mean (1.6.3-2build1) ... 236s Setting up ruby-numerizer (0.2.0-3) ... 236s Setting up ruby-xmlrpc (0.3.3-2build1) ... 236s Setting up ruby-chronic (0.10.6-1) ... 236s Setting up ruby-tzinfo (2.0.6-1) ... 236s Setting up rake (13.2.1-1build1) ... 236s Setting up libruby3.3:s390x (3.3.8-2ubuntu3) ... 236s Setting up ruby-activesupport (2:7.2.2.2+dfsg-2) ... 236s Setting up ruby-rubygems (3.6.7-2ubuntu2) ... 236s Setting up ruby3.3 (3.3.8-2ubuntu3) ... 236s Setting up libruby:s390x (1:3.3) ... 236s Setting up ruby-excon (1.3.1-1) ... 236s Setting up ruby-eventmachine:s390x (1.3~pre20220315-df4ab006-5build1) ... 236s Setting up ruby-raindrops:s390x (0.20.0-2) ... 236s Setting up ruby (1:3.3) ... 236s Setting up ruby-nio4r:s390x (2.7.4-1) ... 236s Setting up ruby-rspec-core (3.13.0c0e0m0s1-2) ... 236s Setting up ruby-tilt (2.6.1-1build1) ... 236s Setting up ruby-kgio (2.11.2-2build7) ... 236s Setting up ruby-diff-lcs (1.5.1-1) ... 236s Setting up puma (6.6.0-4) ... 236s Setting up ruby-delorean (2.1.0-3) ... 236s Setting up ruby-rack (3.1.18-1build1) ... 236s Setting up gem2deb-test-runner (2.2.5) ... 236s Setting up ruby-formatador (1.2.3-1) ... 236s Setting up unicorn (6.1.0+git.20250131.1370f52-1) ... 239s Created symlink '/etc/systemd/system/multi-user.target.wants/unicorn.service' → '/usr/lib/systemd/system/unicorn.service'. 241s Setting up ruby-rspec-expectations (3.13.0c0e0m0s1-2) ... 241s Setting up ruby-rspec-mocks (3.13.0c0e0m0s1-2) ... 241s Setting up ruby-shindo (0.3.11-1) ... 241s Setting up ruby-rack-session (2.1.1-0.1build1) ... 241s Setting up ruby-rack-protection (4.2.1-1build1) ... 241s Setting up ruby-rackup (2.1.0-4build1) ... 241s Setting up ruby-rspec (3.13.0c0e0m0s1-2) ... 241s Setting up ruby-sinatra (4.2.1-1build1) ... 241s Setting up ruby-sinatra-contrib (4.2.1-1build1) ... 241s Processing triggers for libc-bin (2.42-2ubuntu4) ... 242s Processing triggers for man-db (2.13.1-1) ... 248s autopkgtest [13:15:32]: test gem2deb-test-runner: gem2deb-test-runner --autopkgtest --check-dependencies 2>&1 248s autopkgtest [13:15:32]: test gem2deb-test-runner: [----------------------- 249s 249s ┌──────────────────────────────────────────────────────────────────────────────┐ 249s │ Checking Rubygems dependency resolution on ruby3.3 │ 249s └──────────────────────────────────────────────────────────────────────────────┘ 249s 249s RUBYLIB=. GEM_PATH= ruby3.3 -e gem\ \"excon\" 249s mv lib ./.gem2deb.lib 250s mv ./.gem2deb.lib lib 250s 250s ┌──────────────────────────────────────────────────────────────────────────────┐ 250s │ Run tests for ruby3.3 from debian/ruby-tests.rake │ 250s └──────────────────────────────────────────────────────────────────────────────┘ 250s 250s RUBYLIB=. GEM_PATH= ruby3.3 -S rake --rakelibdir /gem2deb-nonexistent -f debian/ruby-tests.rake 250s mv lib ./.gem2deb.lib 251s sh: 1: git: not found 251s /usr/bin/ruby3.3 -S shindo 256s 256s Excon bad server interaction 257s header splitting 257s prevents key splitting + raises Excon::Error::InvalidHeaderKey 257s prevents value splitting + raises Excon::Error::InvalidHeaderValue 257s bad server: causes EOFError 257s with no content length and no chunking 257s without a block 257s response.body + returns "hello" 257s with a block 257s body from chunks + returns "hello" 257s eof server: causes EOFError 257s request + raises Excon::Error::Socket 257s 257s Excon basics 259s + returns true 259s nonblock => true, persistent => false 259s method and path defaults 259s request().body + returns "GET /" 259s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 259s request(:method => :get).body + returns "GET /" 259s request(:path => '/').body + returns "GET /" 260s request(:method => :get, :path => '/').body + returns "GET /" 260s GET /content-length/100 260s response.status + returns 200 260s response[:status] + returns 200 260s response.headers['Content-Length'] + returns "100" 260s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 260s + Time.parse(response.headers['Date']).is_a?(Time) 260s + !!(response.headers['Server'] =~ /^WEBrick/) 260s response.headers['Custom'] + returns "Foo: bar" 260s response.remote_ip + returns "127.0.0.1" 260s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 260s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 260s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 260s POST /body-sink 260s response.body + returns "5000000" 260s empty body + returns "0" 260s POST /echo 260s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 260s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 260s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 260s with multi-byte strings 260s + properly concatenates request+headers and body 260s PUT /echo 261s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 261s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 261s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 261s with multi-byte strings 261s + properly concatenates request+headers and body 261s should succeed with tcp_nodelay + returns 200 261s + returns true 261s nonblock => true, persistent => true 261s method and path defaults 261s request().body + returns "GET /" 261s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 261s request(:method => :get).body + returns "GET /" 261s request(:path => '/').body + returns "GET /" 261s request(:method => :get, :path => '/').body + returns "GET /" 261s GET /content-length/100 261s response.status + returns 200 261s response[:status] + returns 200 261s response.headers['Content-Length'] + returns "100" 261s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 261s + Time.parse(response.headers['Date']).is_a?(Time) 261s + !!(response.headers['Server'] =~ /^WEBrick/) 261s response.headers['Custom'] + returns "Foo: bar" 261s response.remote_ip + returns "127.0.0.1" 261s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 261s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 261s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 261s POST /body-sink 262s response.body + returns "5000000" 262s empty body + returns "0" 262s POST /echo 262s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 262s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 262s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 262s with multi-byte strings 262s + properly concatenates request+headers and body 262s PUT /echo 262s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 262s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 262s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 262s with multi-byte strings 263s + properly concatenates request+headers and body 263s should succeed with tcp_nodelay + returns 200 263s + returns true 263s nonblock => false, persistent => true 263s method and path defaults 263s request().body + returns "GET /" 263s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 263s request(:method => :get).body + returns "GET /" 263s request(:path => '/').body + returns "GET /" 263s request(:method => :get, :path => '/').body + returns "GET /" 263s GET /content-length/100 263s response.status + returns 200 263s response[:status] + returns 200 263s response.headers['Content-Length'] + returns "100" 263s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 263s + Time.parse(response.headers['Date']).is_a?(Time) 263s + !!(response.headers['Server'] =~ /^WEBrick/) 263s response.headers['Custom'] + returns "Foo: bar" 263s response.remote_ip + returns "127.0.0.1" 263s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 263s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 263s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 263s POST /body-sink 263s response.body + returns "5000000" 263s empty body + returns "0" 264s POST /echo 264s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 264s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 264s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 264s with multi-byte strings 264s + properly concatenates request+headers and body 264s PUT /echo 264s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 264s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 264s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 264s with multi-byte strings 264s + properly concatenates request+headers and body 264s should succeed with tcp_nodelay + returns 200 264s + returns true 264s nonblock => false, persistent => false 264s method and path defaults 264s request().body + returns "GET /" 264s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 264s request(:method => :get).body + returns "GET /" 264s request(:path => '/').body + returns "GET /" 264s request(:method => :get, :path => '/').body + returns "GET /" 264s GET /content-length/100 264s response.status + returns 200 264s response[:status] + returns 200 264s response.headers['Content-Length'] + returns "100" 264s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 264s + Time.parse(response.headers['Date']).is_a?(Time) 264s + !!(response.headers['Server'] =~ /^WEBrick/) 264s response.headers['Custom'] + returns "Foo: bar" 264s response.remote_ip + returns "127.0.0.1" 264s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 264s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 264s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 264s POST /body-sink 264s response.body + returns "5000000" 264s empty body + returns "0" 264s POST /echo 265s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 265s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 265s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 265s with multi-byte strings 265s + properly concatenates request+headers and body 265s PUT /echo 265s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 265s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 265s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 265s with multi-byte strings 265s + properly concatenates request+headers and body 265s should succeed with tcp_nodelay + returns 200 265s explicit uri passed to connection 265s GET /content-length/100 + returns 200 265s 265s Excon streaming basics 265s http 266s + returns true 266s simple blocking request on streaming endpoint + returns ["Hellostreamyworld", "response time ok"] 267s simple blocking request on streaming endpoint with fixed length + returns ["Hellostreamyworld", "response time ok"] 267s simple request with response_block on streaming endpoint - returns [["Hello", "streamy", "world"], "response times ok"] 267s expected => [["Hello", "streamy", "world"], "response times ok"] 267s returned => [["Hello", "streamy", "world"], "response time not ok!"] 268s simple request with response_block on streaming endpoint with fixed length - returns [["Hello", "streamy", "world"], "response times ok"] 268s expected => [["Hello", "streamy", "world"], "response times ok"] 268s returned => [["Hello", "streamy", "world"], "response time not ok!"] 268s https 268s + returns true 268s simple blocking request on streaming endpoint + returns ["Hellostreamyworld", "response time ok"] 269s simple blocking request on streaming endpoint with fixed length + returns ["Hellostreamyworld", "response time ok"] 270s simple request with response_block on streaming endpoint - returns [["Hello", "streamy", "world"], "response times ok"] 270s expected => [["Hello", "streamy", "world"], "response times ok"] 270s returned => [["Hello", "streamy", "world"], "response time not ok!"] 270s simple request with response_block on streaming endpoint with fixed length + returns [["Hello", "streamy", "world"], "response times ok"] 270s 270s Excon basics (Basic Auth Pass) 271s + returns true 271s nonblock => true, persistent => false 271s method and path defaults 271s request().body + returns "GET /" 271s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 271s request(:method => :get).body + returns "GET /" 271s request(:path => '/').body + returns "GET /" 271s request(:method => :get, :path => '/').body + returns "GET /" 271s GET /content-length/100 271s response.status + returns 200 271s response[:status] + returns 200 271s response.headers['Content-Length'] + returns "100" 271s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 271s + Time.parse(response.headers['Date']).is_a?(Time) 271s + !!(response.headers['Server'] =~ /^WEBrick/) 271s response.headers['Custom'] + returns "Foo: bar" 271s response.remote_ip + returns "127.0.0.1" 271s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 271s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 271s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 271s POST /body-sink 272s response.body + returns "5000000" 272s empty body + returns "0" 272s POST /echo 272s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 272s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 272s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 272s with multi-byte strings 272s + properly concatenates request+headers and body 272s PUT /echo 272s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 272s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 272s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 272s with multi-byte strings 272s + properly concatenates request+headers and body 272s should succeed with tcp_nodelay + returns 200 272s + returns true 272s nonblock => true, persistent => true 272s method and path defaults 272s request().body + returns "GET /" 272s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 272s request(:method => :get).body + returns "GET /" 272s request(:path => '/').body + returns "GET /" 272s request(:method => :get, :path => '/').body + returns "GET /" 272s GET /content-length/100 273s response.status + returns 200 273s response[:status] + returns 200 273s response.headers['Content-Length'] + returns "100" 273s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 273s + Time.parse(response.headers['Date']).is_a?(Time) 273s + !!(response.headers['Server'] =~ /^WEBrick/) 273s response.headers['Custom'] + returns "Foo: bar" 273s response.remote_ip + returns "127.0.0.1" 273s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 273s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 273s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 273s POST /body-sink 273s response.body + returns "5000000" 273s empty body + returns "0" 273s POST /echo 273s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 273s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 273s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 273s with multi-byte strings 273s + properly concatenates request+headers and body 273s PUT /echo 274s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 274s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 274s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 274s with multi-byte strings 274s + properly concatenates request+headers and body 274s should succeed with tcp_nodelay + returns 200 274s + returns true 274s nonblock => false, persistent => true 274s method and path defaults 274s request().body + returns "GET /" 274s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 274s request(:method => :get).body + returns "GET /" 274s request(:path => '/').body + returns "GET /" 274s request(:method => :get, :path => '/').body + returns "GET /" 274s GET /content-length/100 274s response.status + returns 200 274s response[:status] + returns 200 274s response.headers['Content-Length'] + returns "100" 274s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 274s + Time.parse(response.headers['Date']).is_a?(Time) 274s + !!(response.headers['Server'] =~ /^WEBrick/) 274s response.headers['Custom'] + returns "Foo: bar" 274s response.remote_ip + returns "127.0.0.1" 274s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 274s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 274s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 274s POST /body-sink 274s response.body + returns "5000000" 274s empty body + returns "0" 274s POST /echo 274s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 274s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 275s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 275s with multi-byte strings 275s + properly concatenates request+headers and body 275s PUT /echo 275s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 275s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 275s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 275s with multi-byte strings 275s + properly concatenates request+headers and body 275s should succeed with tcp_nodelay + returns 200 275s + returns true 275s nonblock => false, persistent => false 275s method and path defaults 275s request().body + returns "GET /" 275s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 275s request(:method => :get).body + returns "GET /" 275s request(:path => '/').body + returns "GET /" 275s request(:method => :get, :path => '/').body + returns "GET /" 275s GET /content-length/100 275s response.status + returns 200 275s response[:status] + returns 200 275s response.headers['Content-Length'] + returns "100" 275s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 275s + Time.parse(response.headers['Date']).is_a?(Time) 275s + !!(response.headers['Server'] =~ /^WEBrick/) 275s response.headers['Custom'] + returns "Foo: bar" 275s response.remote_ip + returns "127.0.0.1" 275s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 275s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 275s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 275s POST /body-sink 275s response.body + returns "5000000" 275s empty body + returns "0" 275s POST /echo 276s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 276s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 276s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 276s with multi-byte strings 276s + properly concatenates request+headers and body 276s PUT /echo 276s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 276s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 276s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 276s with multi-byte strings 276s + properly concatenates request+headers and body 276s should succeed with tcp_nodelay + returns 200 276s with frozen args + returns 200 276s with user/pass on request + returns 200 276s with user/pass on connection and request + returns 200 276s 276s Excon basics (Basic Auth Fail) 278s response.status for correct user, no password + returns 401 278s response.status for correct user, wrong password + returns 401 279s response.status for wrong user, correct password + returns 401 279s 279s Excon basics (ssl) 281s + returns true 281s nonblock => true, persistent => false 281s method and path defaults 281s request().body + returns "GET /" 281s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 282s request(:method => :get).body + returns "GET /" 282s request(:path => '/').body + returns "GET /" 282s request(:method => :get, :path => '/').body + returns "GET /" 282s GET /content-length/100 282s response.status + returns 200 282s response[:status] + returns 200 282s response.headers['Content-Length'] + returns "100" 282s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 282s + Time.parse(response.headers['Date']).is_a?(Time) 282s + !!(response.headers['Server'] =~ /^WEBrick/) 282s response.headers['Custom'] + returns "Foo: bar" 282s response.remote_ip + returns "127.0.0.1" 282s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 282s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 282s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 282s POST /body-sink 283s response.body + returns "5000000" 283s empty body + returns "0" 283s POST /echo 283s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 283s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 283s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 283s with multi-byte strings 284s + properly concatenates request+headers and body 284s PUT /echo 284s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 284s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 284s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 284s with multi-byte strings 284s + properly concatenates request+headers and body 284s should succeed with tcp_nodelay + returns 200 284s + returns true 284s nonblock => true, persistent => true 284s method and path defaults 284s request().body + returns "GET /" 284s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 284s request(:method => :get).body + returns "GET /" 284s request(:path => '/').body + returns "GET /" 284s request(:method => :get, :path => '/').body + returns "GET /" 284s GET /content-length/100 284s response.status + returns 200 284s response[:status] + returns 200 284s response.headers['Content-Length'] + returns "100" 284s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 284s + Time.parse(response.headers['Date']).is_a?(Time) 284s + !!(response.headers['Server'] =~ /^WEBrick/) 284s response.headers['Custom'] + returns "Foo: bar" 284s response.remote_ip + returns "127.0.0.1" 284s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 284s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 284s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 284s POST /body-sink 284s response.body + returns "5000000" 284s empty body + returns "0" 284s POST /echo 285s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 285s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 285s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 285s with multi-byte strings 285s + properly concatenates request+headers and body 285s PUT /echo 285s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 285s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 285s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 285s with multi-byte strings 285s + properly concatenates request+headers and body 285s should succeed with tcp_nodelay + returns 200 285s + returns true 285s nonblock => false, persistent => true 285s method and path defaults 285s request().body + returns "GET /" 285s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 285s request(:method => :get).body + returns "GET /" 285s request(:path => '/').body + returns "GET /" 285s request(:method => :get, :path => '/').body + returns "GET /" 285s GET /content-length/100 286s response.status + returns 200 286s response[:status] + returns 200 286s response.headers['Content-Length'] + returns "100" 286s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 286s + Time.parse(response.headers['Date']).is_a?(Time) 286s + !!(response.headers['Server'] =~ /^WEBrick/) 286s response.headers['Custom'] + returns "Foo: bar" 286s response.remote_ip + returns "127.0.0.1" 286s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 286s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 286s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 286s POST /body-sink 286s response.body + returns "5000000" 286s empty body + returns "0" 286s POST /echo 286s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 286s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 286s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 286s with multi-byte strings 286s + properly concatenates request+headers and body 286s PUT /echo 286s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 286s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 286s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 286s with multi-byte strings 287s + properly concatenates request+headers and body 287s should succeed with tcp_nodelay + returns 200 287s + returns true 287s nonblock => false, persistent => false 287s method and path defaults 287s request().body + returns "GET /" 287s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 287s request(:method => :get).body + returns "GET /" 288s request(:path => '/').body + returns "GET /" 288s request(:method => :get, :path => '/').body + returns "GET /" 288s GET /content-length/100 288s response.status + returns 200 288s response[:status] + returns 200 288s response.headers['Content-Length'] + returns "100" 288s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 288s + Time.parse(response.headers['Date']).is_a?(Time) 288s + !!(response.headers['Server'] =~ /^WEBrick/) 288s response.headers['Custom'] + returns "Foo: bar" 288s response.remote_ip + returns "127.0.0.1" 288s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 288s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 288s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 288s POST /body-sink 288s response.body + returns "5000000" 288s empty body + returns "0" 288s POST /echo 289s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 289s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 289s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 289s with multi-byte strings 289s + properly concatenates request+headers and body 289s PUT /echo 289s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 289s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 289s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 289s with multi-byte strings 289s + properly concatenates request+headers and body 290s should succeed with tcp_nodelay + returns 200 290s 290s [2026-02-07 13:17:57] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 290s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 290s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 290s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 290s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 290s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 290s 290s [2026-02-07 13:17:57] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 290s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 290s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 290s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 290s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 290s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 290s 290s [2026-02-07 13:17:57] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 290s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 290s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 290s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 290s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 290s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 290s 290s [2026-02-07 13:17:57] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 290s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 290s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 290s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 290s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 290s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 290s 290s Excon basics verify_hostname (ssl) 293s + returns true 293s response.status + returns 200 293s 293s Excon ssl verify peer (ssl) 295s + returns true 295s response.status + returns 200 297s + returns true 298s response.status + returns 200 301s + returns true 301s response.status + returns 200 301s 301s Excon ssl verify peer (ssl cert store) 304s + returns true 305s response.status + returns 200 305s 305s Excon basics (ssl file) (focus) 308s GET /content-length/100 + raises Excon::Error::Socket 308s + returns true 308s nonblock => true, persistent => false 308s method and path defaults 308s request().body + returns "GET /" 308s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 308s request(:method => :get).body + returns "GET /" 309s request(:path => '/').body + returns "GET /" 309s request(:method => :get, :path => '/').body + returns "GET /" 309s GET /content-length/100 309s response.status + returns 200 309s response[:status] + returns 200 309s response.headers['Content-Length'] + returns "100" 309s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 309s + Time.parse(response.headers['Date']).is_a?(Time) 309s + !!(response.headers['Server'] =~ /^WEBrick/) 309s response.headers['Custom'] + returns "Foo: bar" 309s response.remote_ip + returns "127.0.0.1" 309s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 309s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 309s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 309s POST /body-sink 310s response.body + returns "5000000" 310s empty body + returns "0" 310s POST /echo 310s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 310s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 310s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 310s with multi-byte strings 310s + properly concatenates request+headers and body 310s PUT /echo 311s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 311s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 311s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 311s with multi-byte strings 311s + properly concatenates request+headers and body 311s should succeed with tcp_nodelay + returns 200 311s + returns true 311s nonblock => true, persistent => true 311s method and path defaults 311s request().body + returns "GET /" 312s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 312s request(:method => :get).body + returns "GET /" 312s request(:path => '/').body + returns "GET /" 312s request(:method => :get, :path => '/').body + returns "GET /" 312s GET /content-length/100 312s response.status + returns 200 312s response[:status] + returns 200 312s response.headers['Content-Length'] + returns "100" 312s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 312s + Time.parse(response.headers['Date']).is_a?(Time) 312s + !!(response.headers['Server'] =~ /^WEBrick/) 312s response.headers['Custom'] + returns "Foo: bar" 312s response.remote_ip + returns "127.0.0.1" 312s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 312s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 312s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 312s POST /body-sink 312s response.body + returns "5000000" 312s empty body + returns "0" 312s POST /echo 312s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 312s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 312s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 312s with multi-byte strings 313s + properly concatenates request+headers and body 313s PUT /echo 313s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 313s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 313s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 313s with multi-byte strings 313s + properly concatenates request+headers and body 313s should succeed with tcp_nodelay + returns 200 313s + returns true 313s nonblock => false, persistent => true 313s method and path defaults 313s request().body + returns "GET /" 313s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 314s request(:method => :get).body + returns "GET /" 314s request(:path => '/').body + returns "GET /" 314s request(:method => :get, :path => '/').body + returns "GET /" 314s GET /content-length/100 314s response.status + returns 200 314s response[:status] + returns 200 314s response.headers['Content-Length'] + returns "100" 314s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 314s + Time.parse(response.headers['Date']).is_a?(Time) 314s + !!(response.headers['Server'] =~ /^WEBrick/) 314s response.headers['Custom'] + returns "Foo: bar" 314s response.remote_ip + returns "127.0.0.1" 314s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 314s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 314s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 314s POST /body-sink 314s response.body + returns "5000000" 314s empty body + returns "0" 314s POST /echo 314s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 314s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 314s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 314s with multi-byte strings 314s + properly concatenates request+headers and body 314s PUT /echo 314s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 315s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 315s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 315s with multi-byte strings 315s + properly concatenates request+headers and body 315s should succeed with tcp_nodelay + returns 200 315s + returns true 315s nonblock => false, persistent => false 315s method and path defaults 315s request().body + returns "GET /" 315s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 315s request(:method => :get).body + returns "GET /" 315s request(:path => '/').body + returns "GET /" 316s request(:method => :get, :path => '/').body + returns "GET /" 316s GET /content-length/100 316s response.status + returns 200 316s response[:status] + returns 200 316s response.headers['Content-Length'] + returns "100" 316s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 316s + Time.parse(response.headers['Date']).is_a?(Time) 316s + !!(response.headers['Server'] =~ /^WEBrick/) 316s response.headers['Custom'] + returns "Foo: bar" 316s response.remote_ip + returns "127.0.0.1" 316s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 316s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 316s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 316s POST /body-sink 317s response.body + returns "5000000" 317s empty body + returns "0" 317s POST /echo 317s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 317s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 318s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 318s with multi-byte strings 318s + properly concatenates request+headers and body 318s PUT /echo 318s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 318s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 319s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 319s with multi-byte strings 319s + properly concatenates request+headers and body 319s should succeed with tcp_nodelay + returns 200 319s + returns true 319s nonblock => true, persistent => false 319s method and path defaults 319s request().body + returns "GET /" 319s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 319s request(:method => :get).body + returns "GET /" 320s request(:path => '/').body + returns "GET /" 320s request(:method => :get, :path => '/').body + returns "GET /" 320s GET /content-length/100 320s response.status + returns 200 320s response[:status] + returns 200 320s response.headers['Content-Length'] + returns "100" 320s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 320s + Time.parse(response.headers['Date']).is_a?(Time) 320s + !!(response.headers['Server'] =~ /^WEBrick/) 320s response.headers['Custom'] + returns "Foo: bar" 320s response.remote_ip + returns "127.0.0.1" 320s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 320s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 321s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 321s POST /body-sink 321s response.body + returns "5000000" 321s empty body + returns "0" 321s POST /echo 321s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 321s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 322s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 322s with multi-byte strings 322s + properly concatenates request+headers and body 322s PUT /echo 322s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 322s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 322s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 322s with multi-byte strings 323s + properly concatenates request+headers and body 323s should succeed with tcp_nodelay + returns 200 323s + returns true 323s nonblock => true, persistent => true 323s method and path defaults 323s request().body + returns "GET /" 323s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 323s request(:method => :get).body + returns "GET /" 323s request(:path => '/').body + returns "GET /" 324s request(:method => :get, :path => '/').body + returns "GET /" 324s GET /content-length/100 324s response.status + returns 200 324s response[:status] + returns 200 324s response.headers['Content-Length'] + returns "100" 324s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 324s + Time.parse(response.headers['Date']).is_a?(Time) 324s + !!(response.headers['Server'] =~ /^WEBrick/) 324s response.headers['Custom'] + returns "Foo: bar" 324s response.remote_ip + returns "127.0.0.1" 324s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 324s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 324s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 324s POST /body-sink 324s response.body + returns "5000000" 324s empty body + returns "0" 324s POST /echo 324s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 324s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 324s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 324s with multi-byte strings 324s + properly concatenates request+headers and body 324s PUT /echo 324s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 325s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 325s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 325s with multi-byte strings 325s + properly concatenates request+headers and body 325s should succeed with tcp_nodelay + returns 200 325s + returns true 325s nonblock => false, persistent => true 325s method and path defaults 325s request().body + returns "GET /" 325s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 325s request(:method => :get).body + returns "GET /" 325s request(:path => '/').body + returns "GET /" 326s request(:method => :get, :path => '/').body + returns "GET /" 326s GET /content-length/100 326s response.status + returns 200 326s response[:status] + returns 200 326s response.headers['Content-Length'] + returns "100" 326s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 326s + Time.parse(response.headers['Date']).is_a?(Time) 326s + !!(response.headers['Server'] =~ /^WEBrick/) 326s response.headers['Custom'] + returns "Foo: bar" 326s response.remote_ip + returns "127.0.0.1" 326s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 326s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 326s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 326s POST /body-sink 326s response.body + returns "5000000" 326s empty body + returns "0" 326s POST /echo 326s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 326s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 326s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 326s with multi-byte strings 326s + properly concatenates request+headers and body 326s PUT /echo 326s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 326s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 327s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 327s with multi-byte strings 327s + properly concatenates request+headers and body 327s should succeed with tcp_nodelay + returns 200 327s + returns true 327s nonblock => false, persistent => false 327s method and path defaults 327s request().body + returns "GET /" 327s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 327s request(:method => :get).body + returns "GET /" 327s request(:path => '/').body + returns "GET /" 327s request(:method => :get, :path => '/').body + returns "GET /" 327s GET /content-length/100 328s response.status + returns 200 328s response[:status] + returns 200 328s response.headers['Content-Length'] + returns "100" 328s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 328s + Time.parse(response.headers['Date']).is_a?(Time) 328s + !!(response.headers['Server'] =~ /^WEBrick/) 328s response.headers['Custom'] + returns "Foo: bar" 328s response.remote_ip + returns "127.0.0.1" 328s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 328s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 328s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 328s POST /body-sink 328s response.body + returns "5000000" 328s empty body + returns "0" 328s POST /echo 329s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 329s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 329s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 329s with multi-byte strings 329s + properly concatenates request+headers and body 329s PUT /echo 330s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 330s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 330s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 330s with multi-byte strings 330s + properly concatenates request+headers and body 330s should succeed with tcp_nodelay + returns 200 330s 330s [2026-02-07 13:18:24] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 330s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 330s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 330s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 330s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 330s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 330s 330s [2026-02-07 13:18:25] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 330s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 330s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 330s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 330s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 330s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 330s 330s [2026-02-07 13:18:28] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 330s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 330s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 330s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 330s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 330s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 330s 330s [2026-02-07 13:18:29] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 330s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 330s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 330s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 330s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 330s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 330s 330s [2026-02-07 13:18:35] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 330s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 330s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 330s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 330s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 330s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 330s 330s [2026-02-07 13:18:36] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 330s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 330s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 330s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 330s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 330s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 330s 330s Excon basics (ssl chain) (focus) 333s GET /content-length/100 + raises Excon::Error::Socket 333s + returns true 333s nonblock => true, persistent => false 333s method and path defaults 333s request().body + returns "GET /" 333s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 333s request(:method => :get).body + returns "GET /" 333s request(:path => '/').body + returns "GET /" 334s request(:method => :get, :path => '/').body + returns "GET /" 334s GET /content-length/100 334s response.status + returns 200 334s response[:status] + returns 200 334s response.headers['Content-Length'] + returns "100" 334s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 334s + Time.parse(response.headers['Date']).is_a?(Time) 334s + !!(response.headers['Server'] =~ /^WEBrick/) 334s response.headers['Custom'] + returns "Foo: bar" 334s response.remote_ip + returns "127.0.0.1" 334s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 334s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 334s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 334s POST /body-sink 334s response.body + returns "5000000" 334s empty body + returns "0" 334s POST /echo 335s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 335s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 335s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 335s with multi-byte strings 335s + properly concatenates request+headers and body 335s PUT /echo 335s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 335s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 336s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 336s with multi-byte strings 336s + properly concatenates request+headers and body 336s should succeed with tcp_nodelay + returns 200 336s + returns true 336s nonblock => true, persistent => true 336s method and path defaults 336s request().body + returns "GET /" 337s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 337s request(:method => :get).body + returns "GET /" 337s request(:path => '/').body + returns "GET /" 337s request(:method => :get, :path => '/').body + returns "GET /" 337s GET /content-length/100 337s response.status + returns 200 337s response[:status] + returns 200 337s response.headers['Content-Length'] + returns "100" 337s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 337s + Time.parse(response.headers['Date']).is_a?(Time) 337s + !!(response.headers['Server'] =~ /^WEBrick/) 337s response.headers['Custom'] + returns "Foo: bar" 337s response.remote_ip + returns "127.0.0.1" 337s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 337s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 337s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 337s POST /body-sink 337s response.body + returns "5000000" 337s empty body + returns "0" 337s POST /echo 338s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 338s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 338s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 338s with multi-byte strings 338s + properly concatenates request+headers and body 338s PUT /echo 338s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 338s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 338s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 338s with multi-byte strings 338s + properly concatenates request+headers and body 338s should succeed with tcp_nodelay + returns 200 338s + returns true 338s nonblock => false, persistent => true 338s method and path defaults 339s request().body + returns "GET /" 339s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 339s request(:method => :get).body + returns "GET /" 339s request(:path => '/').body + returns "GET /" 339s request(:method => :get, :path => '/').body + returns "GET /" 339s GET /content-length/100 339s response.status + returns 200 339s response[:status] + returns 200 339s response.headers['Content-Length'] + returns "100" 339s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 339s + Time.parse(response.headers['Date']).is_a?(Time) 339s + !!(response.headers['Server'] =~ /^WEBrick/) 339s response.headers['Custom'] + returns "Foo: bar" 339s response.remote_ip + returns "127.0.0.1" 339s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 339s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 339s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 339s POST /body-sink 340s response.body + returns "5000000" 340s empty body + returns "0" 340s POST /echo 340s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 340s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 340s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 340s with multi-byte strings 340s + properly concatenates request+headers and body 340s PUT /echo 340s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 340s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 341s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 341s with multi-byte strings 341s + properly concatenates request+headers and body 341s should succeed with tcp_nodelay + returns 200 341s + returns true 341s nonblock => false, persistent => false 341s method and path defaults 341s request().body + returns "GET /" 341s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 341s request(:method => :get).body + returns "GET /" 342s request(:path => '/').body + returns "GET /" 342s request(:method => :get, :path => '/').body + returns "GET /" 342s GET /content-length/100 342s response.status + returns 200 342s response[:status] + returns 200 342s response.headers['Content-Length'] + returns "100" 342s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 342s + Time.parse(response.headers['Date']).is_a?(Time) 342s + !!(response.headers['Server'] =~ /^WEBrick/) 342s response.headers['Custom'] + returns "Foo: bar" 342s response.remote_ip + returns "127.0.0.1" 342s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 342s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 343s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 343s POST /body-sink 343s response.body + returns "5000000" 344s empty body + returns "0" 344s POST /echo 344s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 344s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 344s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 344s with multi-byte strings 345s + properly concatenates request+headers and body 345s PUT /echo 345s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 345s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 345s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 345s with multi-byte strings 345s + properly concatenates request+headers and body 345s should succeed with tcp_nodelay + returns 200 345s + returns true 345s nonblock => true, persistent => false 345s method and path defaults 345s request().body + returns "GET /" 346s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 346s request(:method => :get).body + returns "GET /" 346s request(:path => '/').body + returns "GET /" 346s request(:method => :get, :path => '/').body + returns "GET /" 346s GET /content-length/100 346s response.status + returns 200 346s response[:status] + returns 200 346s response.headers['Content-Length'] + returns "100" 346s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 346s + Time.parse(response.headers['Date']).is_a?(Time) 346s + !!(response.headers['Server'] =~ /^WEBrick/) 346s response.headers['Custom'] + returns "Foo: bar" 346s response.remote_ip + returns "127.0.0.1" 346s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 346s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 346s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 346s POST /body-sink 346s response.body + returns "5000000" 347s empty body + returns "0" 347s POST /echo 347s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 347s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 347s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 347s with multi-byte strings 348s + properly concatenates request+headers and body 348s PUT /echo 348s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 348s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 348s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 348s with multi-byte strings 348s + properly concatenates request+headers and body 348s should succeed with tcp_nodelay + returns 200 349s + returns true 349s nonblock => true, persistent => true 349s method and path defaults 349s request().body + returns "GET /" 349s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 349s request(:method => :get).body + returns "GET /" 349s request(:path => '/').body + returns "GET /" 349s request(:method => :get, :path => '/').body + returns "GET /" 349s GET /content-length/100 349s response.status + returns 200 349s response[:status] + returns 200 349s response.headers['Content-Length'] + returns "100" 349s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 349s + Time.parse(response.headers['Date']).is_a?(Time) 349s + !!(response.headers['Server'] =~ /^WEBrick/) 349s response.headers['Custom'] + returns "Foo: bar" 349s response.remote_ip + returns "127.0.0.1" 349s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 349s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 350s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 350s POST /body-sink 350s response.body + returns "5000000" 350s empty body + returns "0" 350s POST /echo 350s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 350s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 351s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 351s with multi-byte strings 351s + properly concatenates request+headers and body 351s PUT /echo 351s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 351s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 351s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 351s with multi-byte strings 351s + properly concatenates request+headers and body 351s should succeed with tcp_nodelay + returns 200 351s + returns true 351s nonblock => false, persistent => true 351s method and path defaults 352s request().body + returns "GET /" 352s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 352s request(:method => :get).body + returns "GET /" 352s request(:path => '/').body + returns "GET /" 352s request(:method => :get, :path => '/').body + returns "GET /" 352s GET /content-length/100 352s response.status + returns 200 352s response[:status] + returns 200 352s response.headers['Content-Length'] + returns "100" 352s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 352s + Time.parse(response.headers['Date']).is_a?(Time) 352s + !!(response.headers['Server'] =~ /^WEBrick/) 352s response.headers['Custom'] + returns "Foo: bar" 352s response.remote_ip + returns "127.0.0.1" 352s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 352s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 352s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 352s POST /body-sink 353s response.body + returns "5000000" 353s empty body + returns "0" 353s POST /echo 353s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 353s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 353s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 353s with multi-byte strings 353s + properly concatenates request+headers and body 353s PUT /echo 353s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 353s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 353s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 353s with multi-byte strings 353s + properly concatenates request+headers and body 353s should succeed with tcp_nodelay + returns 200 353s + returns true 353s nonblock => false, persistent => false 353s method and path defaults 354s request().body + returns "GET /" 354s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 354s request(:method => :get).body + returns "GET /" 354s request(:path => '/').body + returns "GET /" 354s request(:method => :get, :path => '/').body + returns "GET /" 354s GET /content-length/100 354s response.status + returns 200 354s response[:status] + returns 200 354s response.headers['Content-Length'] + returns "100" 354s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 354s + Time.parse(response.headers['Date']).is_a?(Time) 354s + !!(response.headers['Server'] =~ /^WEBrick/) 354s response.headers['Custom'] + returns "Foo: bar" 354s response.remote_ip + returns "127.0.0.1" 354s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 355s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 355s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 355s POST /body-sink 355s response.body + returns "5000000" 355s empty body + returns "0" 355s POST /echo 355s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 356s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 356s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 356s with multi-byte strings 356s + properly concatenates request+headers and body 356s PUT /echo 357s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 357s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 357s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 357s with multi-byte strings 357s + properly concatenates request+headers and body 357s should succeed with tcp_nodelay + returns 200 357s 357s [2026-02-07 13:18:51] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 357s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 357s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 357s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 357s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 357s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 357s 357s [2026-02-07 13:18:52] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 357s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 357s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 357s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 357s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 357s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 357s 357s [2026-02-07 13:18:53] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 357s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 357s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 357s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 357s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 357s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 357s 357s [2026-02-07 13:18:54] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 357s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 357s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 357s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 357s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 357s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 357s 357s [2026-02-07 13:19:00] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 357s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 357s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 357s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 357s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 357s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 357s 357s [2026-02-07 13:19:02] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 357s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 357s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 357s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 357s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 357s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 357s 357s Excon basics (ssl file paths) (focus) 360s GET /content-length/100 + raises Excon::Error::Socket 360s + returns true 360s nonblock => true, persistent => false 360s method and path defaults 361s request().body + returns "GET /" 361s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 361s request(:method => :get).body + returns "GET /" 361s request(:path => '/').body + returns "GET /" 361s request(:method => :get, :path => '/').body + returns "GET /" 361s GET /content-length/100 361s response.status + returns 200 361s response[:status] + returns 200 361s response.headers['Content-Length'] + returns "100" 361s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 362s + Time.parse(response.headers['Date']).is_a?(Time) 362s + !!(response.headers['Server'] =~ /^WEBrick/) 362s response.headers['Custom'] + returns "Foo: bar" 362s response.remote_ip + returns "127.0.0.1" 362s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 362s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 362s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 362s POST /body-sink 362s response.body + returns "5000000" 362s empty body + returns "0" 362s POST /echo 362s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 362s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 363s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 363s with multi-byte strings 363s + properly concatenates request+headers and body 363s PUT /echo 363s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 363s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 364s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 364s with multi-byte strings 364s + properly concatenates request+headers and body 364s should succeed with tcp_nodelay + returns 200 364s + returns true 364s nonblock => true, persistent => true 364s method and path defaults 364s request().body + returns "GET /" 364s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 364s request(:method => :get).body + returns "GET /" 364s request(:path => '/').body + returns "GET /" 364s request(:method => :get, :path => '/').body + returns "GET /" 364s GET /content-length/100 364s response.status + returns 200 364s response[:status] + returns 200 364s response.headers['Content-Length'] + returns "100" 364s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 364s + Time.parse(response.headers['Date']).is_a?(Time) 364s + !!(response.headers['Server'] =~ /^WEBrick/) 364s response.headers['Custom'] + returns "Foo: bar" 364s response.remote_ip + returns "127.0.0.1" 364s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 364s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 364s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 364s POST /body-sink 365s response.body + returns "5000000" 365s empty body + returns "0" 365s POST /echo 365s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 365s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 365s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 365s with multi-byte strings 365s + properly concatenates request+headers and body 365s PUT /echo 365s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 365s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 365s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 365s with multi-byte strings 365s + properly concatenates request+headers and body 365s should succeed with tcp_nodelay + returns 200 365s + returns true 365s nonblock => false, persistent => true 365s method and path defaults 366s request().body + returns "GET /" 366s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 366s request(:method => :get).body + returns "GET /" 366s request(:path => '/').body + returns "GET /" 366s request(:method => :get, :path => '/').body + returns "GET /" 366s GET /content-length/100 366s response.status + returns 200 366s response[:status] + returns 200 366s response.headers['Content-Length'] + returns "100" 366s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 366s + Time.parse(response.headers['Date']).is_a?(Time) 366s + !!(response.headers['Server'] =~ /^WEBrick/) 366s response.headers['Custom'] + returns "Foo: bar" 366s response.remote_ip + returns "127.0.0.1" 366s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 366s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 366s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 366s POST /body-sink 366s response.body + returns "5000000" 366s empty body + returns "0" 366s POST /echo 366s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 366s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 367s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 367s with multi-byte strings 367s + properly concatenates request+headers and body 367s PUT /echo 367s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 367s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 367s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 367s with multi-byte strings 367s + properly concatenates request+headers and body 367s should succeed with tcp_nodelay + returns 200 367s + returns true 367s nonblock => false, persistent => false 367s method and path defaults 367s request().body + returns "GET /" 367s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 367s request(:method => :get).body + returns "GET /" 367s request(:path => '/').body + returns "GET /" 367s request(:method => :get, :path => '/').body + returns "GET /" 367s GET /content-length/100 367s response.status + returns 200 367s response[:status] + returns 200 367s response.headers['Content-Length'] + returns "100" 367s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 367s + Time.parse(response.headers['Date']).is_a?(Time) 367s + !!(response.headers['Server'] =~ /^WEBrick/) 367s response.headers['Custom'] + returns "Foo: bar" 367s response.remote_ip + returns "127.0.0.1" 367s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 368s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 368s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 368s POST /body-sink 368s response.body + returns "5000000" 368s empty body + returns "0" 368s POST /echo 368s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 368s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 368s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 368s with multi-byte strings 368s + properly concatenates request+headers and body 368s PUT /echo 368s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 368s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 369s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 369s with multi-byte strings 369s + properly concatenates request+headers and body 369s should succeed with tcp_nodelay + returns 200 369s 369s [2026-02-07 13:19:14] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 369s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 369s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 369s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 369s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 369s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 369s 369s [2026-02-07 13:19:15] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 369s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 369s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 369s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 369s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 369s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 369s 369s Excon basics (ssl string) (focus) 372s + returns true 372s nonblock => true, persistent => false 372s method and path defaults 372s request().body + returns "GET /" 373s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 373s request(:method => :get).body + returns "GET /" 374s request(:path => '/').body + returns "GET /" 374s request(:method => :get, :path => '/').body + returns "GET /" 374s GET /content-length/100 374s response.status + returns 200 374s response[:status] + returns 200 374s response.headers['Content-Length'] + returns "100" 374s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 374s + Time.parse(response.headers['Date']).is_a?(Time) 374s + !!(response.headers['Server'] =~ /^WEBrick/) 374s response.headers['Custom'] + returns "Foo: bar" 374s response.remote_ip + returns "127.0.0.1" 374s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 374s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 374s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 374s POST /body-sink 375s response.body + returns "5000000" 375s empty body + returns "0" 375s POST /echo 375s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 376s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 376s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 376s with multi-byte strings 376s + properly concatenates request+headers and body 376s PUT /echo 376s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 376s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 376s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 376s with multi-byte strings 377s + properly concatenates request+headers and body 377s should succeed with tcp_nodelay + returns 200 377s + returns true 377s nonblock => true, persistent => true 377s method and path defaults 377s request().body + returns "GET /" 377s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 377s request(:method => :get).body + returns "GET /" 377s request(:path => '/').body + returns "GET /" 377s request(:method => :get, :path => '/').body + returns "GET /" 377s GET /content-length/100 377s response.status + returns 200 377s response[:status] + returns 200 377s response.headers['Content-Length'] + returns "100" 377s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 377s + Time.parse(response.headers['Date']).is_a?(Time) 377s + !!(response.headers['Server'] =~ /^WEBrick/) 377s response.headers['Custom'] + returns "Foo: bar" 377s response.remote_ip + returns "127.0.0.1" 377s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 378s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 378s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 378s POST /body-sink 378s response.body + returns "5000000" 378s empty body + returns "0" 378s POST /echo 378s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 378s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 378s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 378s with multi-byte strings 378s + properly concatenates request+headers and body 378s PUT /echo 378s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 378s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 379s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 379s with multi-byte strings 379s + properly concatenates request+headers and body 379s should succeed with tcp_nodelay + returns 200 379s + returns true 379s nonblock => false, persistent => true 379s method and path defaults 379s request().body + returns "GET /" 379s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 379s request(:method => :get).body + returns "GET /" 379s request(:path => '/').body + returns "GET /" 379s request(:method => :get, :path => '/').body + returns "GET /" 379s GET /content-length/100 379s response.status + returns 200 379s response[:status] + returns 200 379s response.headers['Content-Length'] + returns "100" 379s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 379s + Time.parse(response.headers['Date']).is_a?(Time) 379s + !!(response.headers['Server'] =~ /^WEBrick/) 379s response.headers['Custom'] + returns "Foo: bar" 379s response.remote_ip + returns "127.0.0.1" 379s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 380s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 380s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 380s POST /body-sink 380s response.body + returns "5000000" 380s empty body + returns "0" 380s POST /echo 380s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 380s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 380s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 380s with multi-byte strings 380s + properly concatenates request+headers and body 380s PUT /echo 380s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 381s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 381s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 381s with multi-byte strings 381s + properly concatenates request+headers and body 381s should succeed with tcp_nodelay + returns 200 381s + returns true 381s nonblock => false, persistent => false 381s method and path defaults 381s request().body + returns "GET /" 381s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 382s request(:method => :get).body + returns "GET /" 382s request(:path => '/').body + returns "GET /" 382s request(:method => :get, :path => '/').body + returns "GET /" 382s GET /content-length/100 382s response.status + returns 200 382s response[:status] + returns 200 382s response.headers['Content-Length'] + returns "100" 382s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 382s + Time.parse(response.headers['Date']).is_a?(Time) 382s + !!(response.headers['Server'] =~ /^WEBrick/) 382s response.headers['Custom'] + returns "Foo: bar" 382s response.remote_ip + returns "127.0.0.1" 382s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 382s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 383s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 383s POST /body-sink 383s response.body + returns "5000000" 383s empty body + returns "0" 383s POST /echo 383s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 383s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 384s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 384s with multi-byte strings 384s + properly concatenates request+headers and body 384s PUT /echo 384s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 384s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 385s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 385s with multi-byte strings 385s + properly concatenates request+headers and body 386s should succeed with tcp_nodelay + returns 200 386s 386s [2026-02-07 13:19:28] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 386s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 386s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 386s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 386s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 386s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 386s 386s [2026-02-07 13:19:30] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 386s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 386s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 386s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 386s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 386s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 386s 386s Excon basics (Unix socket) 388s + returns true 388s nonblock => true, persistent => false 388s method and path defaults 388s request().body + returns "GET /" 388s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 388s request(:method => :get).body + returns "GET /" 388s request(:path => '/').body + returns "GET /" 388s request(:method => :get, :path => '/').body + returns "GET /" 388s GET /content-length/100 388s response.status + returns 200 388s response[:status] + returns 200 388s response.headers['Content-Length'] + returns "100" 388s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 388s # Time.parse(response.headers['Date']).is_a?(Time) 388s # !!(response.headers['Server'] =~ /^WEBrick/) 388s response.headers['Custom'] + returns "Foo: bar" 388s response.remote_ip # returns "127.0.0.1" 388s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 388s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 388s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 388s POST /body-sink 388s response.body + returns "5000000" 388s empty body + returns "0" 388s POST /echo 388s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 388s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 388s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 388s with multi-byte strings 388s + properly concatenates request+headers and body 388s PUT /echo 388s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 388s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 388s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 388s with multi-byte strings 388s + properly concatenates request+headers and body 388s should succeed with tcp_nodelay + returns 200 388s + returns true 388s nonblock => true, persistent => true 388s method and path defaults 388s request().body + returns "GET /" 388s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 388s request(:method => :get).body + returns "GET /" 388s request(:path => '/').body + returns "GET /" 388s request(:method => :get, :path => '/').body + returns "GET /" 388s GET /content-length/100 388s response.status + returns 200 388s response[:status] + returns 200 388s response.headers['Content-Length'] + returns "100" 388s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 388s # Time.parse(response.headers['Date']).is_a?(Time) 388s # !!(response.headers['Server'] =~ /^WEBrick/) 388s response.headers['Custom'] + returns "Foo: bar" 388s response.remote_ip # returns "127.0.0.1" 388s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 388s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 388s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 388s POST /body-sink 389s response.body + returns "5000000" 389s empty body + returns "0" 389s POST /echo 389s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 389s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 389s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 389s with multi-byte strings 389s + properly concatenates request+headers and body 389s PUT /echo 389s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 389s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 389s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 389s with multi-byte strings 389s + properly concatenates request+headers and body 389s should succeed with tcp_nodelay + returns 200 389s + returns true 389s nonblock => false, persistent => true 389s method and path defaults 389s request().body + returns "GET /" 389s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 389s request(:method => :get).body + returns "GET /" 389s request(:path => '/').body + returns "GET /" 389s request(:method => :get, :path => '/').body + returns "GET /" 389s GET /content-length/100 389s response.status + returns 200 389s response[:status] + returns 200 389s response.headers['Content-Length'] + returns "100" 389s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 389s # Time.parse(response.headers['Date']).is_a?(Time) 389s # !!(response.headers['Server'] =~ /^WEBrick/) 389s response.headers['Custom'] + returns "Foo: bar" 389s response.remote_ip # returns "127.0.0.1" 389s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 389s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 389s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 389s POST /body-sink 389s response.body + returns "5000000" 389s empty body + returns "0" 389s POST /echo 389s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 389s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 389s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 389s with multi-byte strings 389s + properly concatenates request+headers and body 389s PUT /echo 389s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 389s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 389s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 389s with multi-byte strings 389s + properly concatenates request+headers and body 389s should succeed with tcp_nodelay + returns 200 389s + returns true 389s nonblock => false, persistent => false 389s method and path defaults 389s request().body + returns "GET /" 389s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 389s request(:method => :get).body + returns "GET /" 389s request(:path => '/').body + returns "GET /" 389s request(:method => :get, :path => '/').body + returns "GET /" 389s GET /content-length/100 389s response.status + returns 200 389s response[:status] + returns 200 389s response.headers['Content-Length'] + returns "100" 389s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 389s # Time.parse(response.headers['Date']).is_a?(Time) 389s # !!(response.headers['Server'] =~ /^WEBrick/) 389s response.headers['Custom'] + returns "Foo: bar" 389s response.remote_ip # returns "127.0.0.1" 389s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 389s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 389s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 389s POST /body-sink 389s response.body + returns "5000000" 389s empty body + returns "0" 389s POST /echo 389s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 389s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 389s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 389s with multi-byte strings 389s + properly concatenates request+headers and body 389s PUT /echo 389s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 389s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 389s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 389s with multi-byte strings 389s + properly concatenates request+headers and body 389s should succeed with tcp_nodelay + returns 200 389s explicit uri passed to connection 389s GET /content-length/100 + returns 200 389s http Host header is empty 389s GET /headers + returns "" 389s 389s Excon basics (reusable local port) (localportreuse) 392s has a local port + returns true 392s local port can be re-bound + returns "xxxxxxxxxx" 392s 392s Excon Connection 394s #socket connects, sets data[:remote_ip] + returns "127.0.0.1" 394s persistent connections 394s + successful uninterrupted request 394s + resets connection after interrupt 394s + fork safety 394s 394s [2026-02-07 13:19:42] ERROR Errno::ECONNRESET: Connection reset by peer @ io_fillbuf - fd:9 394s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `eof?' 394s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 394s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 394s inspect redaction 394s + authorization/proxy-authorization headers concealed for user & pass 394s + password param concealed for user & pass 394s + password param not mutated for user & pass 394s + proxy password param concealed for proxy: user & pass 394s + proxy password param not mutated for proxy: user & pass 394s + authorization/proxy-authorization headers concealed for email & pass 394s + password param concealed for email & pass 394s + password param not mutated for email & pass 394s + proxy password param concealed for proxy: email & pass 394s + proxy password param not mutated for proxy: email & pass 394s + authorization/proxy-authorization headers concealed for user no pass 394s + authorization/proxy-authorization headers concealed for pass no user 394s + password param concealed for pass no user 394s + password param not mutated for pass no user 394s + proxy password param concealed for proxy: pass no user 394s + proxy password param not mutated for proxy: pass no user 394s + initialization 394s 394s HTTPStatusError request/response debugging 394s Excon::Error knows about pertinent errors 394s new returns an Error + returns true 394s new raises errors for bad URIs + returns true 394s new raises errors for bad paths + returns true 394s can raise standard error and catch standard error + returns true 394s can raise legacy errors and catch legacy errors + returns true 394s can raise standard error and catch legacy errors + returns true 394s can raise with status_error() and catch with standard error + returns true 394s can raise with status_error() and catch with legacy error + returns true 394s can raise with legacy status_error() and catch with legacy + returns true 394s can raise with legacy status_error() and catch with standard + returns true 396s message does not include response or response info + returns true 396s message includes only request info + returns true 396s message includes only response info + returns true 396s message include request and response info + returns true 396s 396s Excon response header support 396s Excon::Headers storage 396s stores and retrieves as received + returns "expected" 396s enumerates keys as received 396s contains Exact-Case + returns true 396s contains Another-Fixture + returns true 396s supports case-insensitive access + returns "expected" 396s but still returns nil for missing keys + returns nil 396s Hash methods that should support case-insensitive access 396s #assoc + returns ["exact-case", "expected"] 396s #delete 396s with just a key + returns "yes" 396s with a proc + returns "called with notpresent" 396s #fetch 396s when present + returns "expected" 396s with a default value + returns "default" 396s with a default proc + returns "got missing" 396s #has_key? 396s when present + returns true 396s when absent + returns false 396s #values_at 396s all present + returns ["expected", "another"] 396s some missing + returns ["expected", nil] 398s Response#get_header 398s with variable header capitalization 398s response.get_header("mixedcase-header") + returns "MixedCase" 398s response.get_header("uppercase-header") + returns "UPPERCASE" 398s response.get_header("lowercase-header") + returns "lowercase" 398s when provided key capitalization varies 398s response.get_header("MIXEDCASE-HEADER") + returns "MixedCase" 398s response.get_header("MiXeDcAsE-hEaDeR") + returns "MixedCase" 398s when header is unavailable 398s response.get_header("missing") + returns nil 398s 398s logging instrumentor 398s connection logger + returns true 398s connection logger with query as hash + returns true 398s 398s Excon middleware 400s succeeds without defining valid_parameter_keys 400s 400s Excon support for middlewares that return canned responses 400s does not mutate the canned response body + returns "canned" 400s yields non-mutated body to response_block + returns "canned" 400s 400s Excon redirecting with cookie preserved 402s second request will send cookies set by the first + returns "ok" 402s second request will send multiple cookies set by the first + returns "ok" 405s runs normally when there are no cookies set + returns "ok" 405s 405s Excon Decompress Middleware 406s gzip 406s response body decompressed + returns "hello world" 406s server sent content-encoding + returns "gzip" 406s removes processed encoding from header + returns "" 406s empty response body + returns "" 406s deflate 406s response body decompressed + returns "hello world" 406s server sent content-encoding + returns "deflate" 406s removes processed encoding from header + returns "" 406s deflate-raw 406s response body decompressed + returns "hello world" 406s server sent content-encoding + returns "deflate" 406s removes processed encoding from header + returns "" 406s with pre-encoding 406s server sent content-encoding + returns "other, gzip" 406s processed encoding removed from header + returns "other" 406s response body decompressed + returns "hello world" 406s with post-encoding 406s server sent content-encoding + returns "gzip, other" 406s unprocessed since last applied is unknown + returns "gzip, other" 406s response body still compressed + returns "hello world" 406s with a :response_block 406s server sent content-encoding + returns "gzip" 406s unprocessed since :response_block was used + returns "gzip" 406s :response_block passed unprocessed data + returns "hello world" 406s adds Accept-Encoding if needed 406s without a :response_block + returns "deflate, gzip" 406s with a :response_block + returns nil 406s empty content-encoding 406s succeeds + returns "body" 406s 406s Excon Decompress Middleware 409s encoded uri passed to connection 409s GET /echo%20dirty + returns 200 409s unencoded uri passed to connection 409s GET /echo dirty + returns 200 409s 409s Excon request idempotencey 409s Non-idempotent call with an erroring socket + raises Excon::Error::Socket 409s Idempotent request with socket erroring first 3 times + returns 200 409s Idempotent request with socket erroring first 5 times + raises Excon::Error::Socket 409s Lowered retry limit with socket erroring first time + returns 200 409s Lowered retry limit with socket erroring first 3 times + raises Excon::Error::Socket 409s Raised retry limit with socket erroring first 5 times + returns 200 409s Raised retry limit with socket erroring first 9 times + raises Excon::Error::Socket 409s Retry limit in constructor with socket erroring first 5 times + returns 200 409s Retry limit and sleep in constructor with socket erroring first 2 times + returns 200 410s Retry limit and sleep in constructor with socket erroring first 2 times + raises Excon::Error::Socket 410s Idempotent request with custom error first 3 times + returns 200 410s Idempotent request with custom error first 5 times + raises RuntimeError 410s Overriding default retry_errors + raises Excon::Error::Socket 410s request_block rewound + returns true 410s response_block rewound + returns true 410s 410s Excon instrumentation 410s basic notification + returns ["excon.request", "excon.response"] 410s captures scheme, host, port, and path + returns [:host, :path, :port, :scheme] 410s params in request overwrite those in constructor + returns "/cheezburger" 410s notify on retry + returns 3 410s notify on error + raises Excon::Error::Socket 410s + returns true 410s filtering + raises Excon::Error::Socket 410s + returns ["excon.request", "excon.error"] 410s more filtering + raises Excon::Error::Socket 410s + returns ["excon.retry", "excon.retry", "excon.retry"] 410s indicates duration + returns true 410s standard instrumentor 410s success + raises Excon::Error::Socket 410s + returns ["excon.request", "excon.retry", "excon.retry", "excon.retry", "excon.error"] 410s authorization header REDACT 410s + raises Excon::Error::Socket 410s + does not appear in response 410s + does not mutate Authorization value 410s password REDACT 410s + raises Excon::Error::Socket 410s + does not appear in response 410s + does not mutate password value 410s proxy password REDACT 410s + raises Excon::Error::Socket 410s + does not appear in response 410s + does not mutate password value 410s use our own instrumentor + raises Excon::Error::Socket 410s + returns ["excon.request", "excon.retry", "excon.retry", "excon.retry", "excon.error"] 410s always passes the block + returns ["excon.request", "excon.response"] 410s does not generate events when not provided + returns 0 410s allows setting the prefix + raises Excon::Error::Socket 410s + returns ["gug.request", "gug.retry", "gug.retry", "gug.retry", "gug.error"] 410s allows setting the prefix when not idempotent + raises Excon::Error::Socket 410s + returns ["gug.request", "gug.error"] 413s works unmocked + returns ["excon.request", "excon.response"] 413s 413s Excon stubs 413s missing stub + raises Excon::Error::StubNotFound 413s stub({}) + raises ArgumentError 413s stub({}, {}) {} + raises ArgumentError 413s stub({:method => :get}, {:body => 'body', :status => 200}) 413s response.body + returns "body" 413s response.headers + returns {} 413s response.status + returns 200 413s response_block yields body + returns "body" 413s response.body empty with response_block + returns "" 413s stub({ url: 'http://example.com' }, { body: 'body', status: 200 }) 413s request without slash matches stub without trailing slash 413s request with trailing slash matches stub without trailing slash 413s stub({ url: 'http://example.com?foo=bar' }, { body: 'body', status: 200 }) 413s query in url matches 413s hash query matches 413s stub({ url: 'http://example.com?a=b+c' }, { body: 'body', status: 200 }) 413s query in url matches 413s hash query matches 413s stub({:path => %r{/tests/(S+)}}, {:body => $1, :status => 200}) 413s response.body + returns "test" 413s response.headers + returns {} 413s response.status + returns 200 413s stub({:body => 'body', :method => :get}) {|params| {:body => params[:body], :headers => params[:headers], :status => 200}} 413s response.body + returns "body" 413s response.headers + returns {"Accept"=>"*/*", "Accept-Encoding"=>"deflate, gzip", "Host"=>"127.0.0.1:9292", "User-Agent"=>"excon/1.3.1"} 413s response.status + returns 200 413s response_block yields body + returns "body" 413s response.body empty with response_block + returns "" 413s stub({:body => File.open(...), :method => :get}, { :status => 200 }) 413s response.status + returns 200 413s invalid stub response + raises Excon::Error::InvalidStub 413s mismatched stub + raises Excon::Error::StubNotFound 413s allow mismatched stub + returns 200 414s stub({}, {:body => 'x' * (Excon::DEFAULT_CHUNK_SIZE + 1)}) 414s + response_block yields body 414s response.body empty with response_block + returns "" 414s stub({:url => 'https://user:pass@foo.bar.com:9999/baz?quux=true'}, {:status => 200}) 414s + get(:expects => 200) 414s stub({}, {:status => 404, :body => 'Not Found'} 414s request(:expects => 200, :method => :get, :path => '/') + raises Excon::Error::NotFound 414s Expects exception should contain response object + returns Excon::Response 414s + request(:expects => 200, :method => :get, :path => '/') with block does not invoke the block since it raises an error 414s stub_for({}) 414s stub_for({}) + returns [{}, {}] 414s unstub({}) 414s unstub({}) + returns [{}, {}] 414s request(:method => :get) + raises Excon::Error::StubNotFound 414s unstub({path: %r{/path}}) 414s unstub({path: %r{/path}}) + returns [{:path=>/\/path/, :captures=>{:headers=>{}}}, {}] 414s unstub non-existent stub 414s unstub({}) + returns nil 414s global stubs 414s get on a different thread + returns "2" 414s get on main thread + returns "2" 414s thread-local stubs 414s get on a different thread + returns "2" 414s get on main thread + returns "1" 414s 414s Excon redirector support 414s request(:method => :get, :path => '/old').body + returns "new" 414s 414s Excon redirector support with redirect loop 414s request(:method => :get, :path => '/old') + raises Excon::Error::TooManyRedirects 414s 414s Excon redirect support for relative Location headers 414s request(:method => :get, :path => '/old').body + returns "new" 414s 414s Excon redirect support for relative Location headers with dot segments 414s request(:method => :get, :path => '/foo/baz/').body + returns "/foo/bar/" 414s 414s Excon redirecting post request 416s request not have content-length and body + returns "ok" 416s 416s Pipelined Requests 417s with default :persistent => true 417s + connection is persistent 417s with default :persistent => false 417s + connection is persistent per call to #requests 417s 417s Excon proxy support 417s proxy configuration 417s no proxy 417s connection.data[:proxy] + returns nil 417s empty proxy 417s connection.data[:proxy] + returns nil 417s with fully-specified proxy: https://myproxy.net:8080 417s connection.data[:proxy][:host] + returns "myproxy.net" 417s connection.data[:proxy][:port] + returns 8080 417s connection.data[:proxy][:scheme] + returns "https" 417s with fully-specified Unix socket proxy: unix:/// 417s connection.data[:proxy][:host] + returns nil 417s connection.data[:proxy][:port] + returns nil 417s connection.data[:proxy][:scheme] + returns "unix" 417s connection.data[:proxy][:path] + returns "/tmp/myproxy.sock" 417s with complete proxy config from the environment 417s lowercase 417s an http connection 417s connection.data[:proxy][:host] + returns "myproxy" 417s connection.data[:proxy][:port] + returns 8080 417s connection.data[:proxy][:scheme] + returns "http" 417s with disable_proxy set 417s connection.data[:proxy] + returns nil 417s an https connection 417s connection.data[:proxy][:host] + returns "mysecureproxy" 417s connection.data[:proxy][:port] + returns 8081 417s connection.data[:proxy][:scheme] + returns "http" 417s with disable_proxy set 417s connection.data[:proxy] + returns nil 417s http proxy from the environment overrides config 417s connection.data[:proxy][:host] + returns "myproxy" 417s connection.data[:proxy][:port] + returns 8080 417s an http connection in no_proxy 417s connection.data[:proxy] + returns nil 417s an http connection not completely matching no_proxy 417s connection.data[:proxy][:host] + returns "myproxy" 417s an http connection with subdomain in no_proxy 417s connection.data[:proxy] + returns nil 417s uppercase 417s an http connection 417s connection.data[:proxy][:host] + returns "myproxy" 417s connection.data[:proxy][:port] + returns 8080 417s connection.data[:proxy][:scheme] + returns "http" 417s with disable_proxy set 417s connection.data[:proxy] + returns nil 417s an https connection 417s connection.data[:proxy][:host] + returns "mysecureproxy" 417s connection.data[:proxy][:port] + returns 8081 417s connection.data[:proxy][:scheme] + returns "http" 417s with disable_proxy set 417s connection.data[:proxy] + returns nil 417s http proxy from the environment overrides config 417s connection.data[:proxy][:host] + returns "myproxy" 417s connection.data[:proxy][:port] + returns 8080 417s an http connection in no_proxy 417s connection.data[:proxy] + returns nil 417s an http connection not completely matching no_proxy 417s connection.data[:proxy][:host] + returns "myproxy" 417s an http connection with subdomain in no_proxy 417s connection.data[:proxy] + returns nil 417s with only http_proxy config from the environment 417s an https connection 417s connection.data[:proxy][:host] + returns "myproxy" 417s connection.data[:proxy][:port] + returns 8080 417s connection.data[:proxy][:scheme] + returns "http" 417s with a unix socket proxy config from the environment 417s an https connection 417s connection.data[:proxy][:host] + returns nil 417s connection.data[:proxy][:port] + returns nil 417s connection.data[:proxy][:scheme] + returns "unix" 417s connection.data[:proxy][:path] + returns "/tmp/myproxy.sock" 419s http proxying: http://foo.com:8080 419s response.status + returns 200 419s sent Request URI + returns "http://foo.com:8080/bar?alpha=kappa" 419s sent Sent-Host header + returns "foo.com:8080" 419s sent Proxy-Connection header + returns "Keep-Alive" 419s response.body (proxied content) + returns "proxied content" 419s http proxying: http://user:pass@foo.com:8080 419s response.status + returns 200 419s sent Request URI + returns "http://foo.com:8080/bar?alpha=kappa" 419s sent Host header + returns "foo.com:8080" 419s sent Proxy-Connection header + returns "Keep-Alive" 419s response.body (proxied content) + returns "proxied content" 422s http proxying over unix socket: http://foo.com:8080 422s response.status + returns 200 422s sent Sent-Host header + returns "foo.com:8080" 422s sent Proxy-Connection header + returns "Keep-Alive" 422s response.body (proxied content) + returns "proxied content" 422s 422s Excon query string variants 424s :query => {:foo => 'bar'} 424s query string sent + returns "foo=bar" 424s :query => {:foo => nil} 424s query string sent + returns "foo" 424s :query => {:foo => 'bar', :me => nil} 424s + query string sent includes 'foo=bar' 424s + query string sent includes 'me' 424s :query => {:foo => 'bar', :me => 'too'} 424s + query string sent includes 'foo=bar' 424s + query string sent includes 'me=too' 424s :query => {'foo[]' => ['bar', 'baz'], :me => 'too'} 425s + query string sent includes 'foo%5B%5D=bar' 425s + query string sent includes 'foo%5B%5D=baz' 425s + query string sent includes 'me=too' 425s :query => {'foo%=#' => 'bar%=#'} 425s query string sent + returns "foo%25%3D%23=bar%25%3D%23" 425s :query => {'foo%=#' => nil} 425s query string sent + returns "foo%25%3D%23" 425s 425s Excon request methods 427s empty headers sent 427s + Excon.post 427s header order 427s host is the first sent header by default + returns "host: localhost:9292" 427s 427s Excon request methods 429s one-offs 429s Excon.get + returns "GET" 429s Excon.post + returns "POST" 429s Excon.delete + returns "DELETE" 429s with a connection object 429s connection.get + returns "GET" 430s connection.post + returns "POST" 430s connection.delete + returns "DELETE" 430s not modifies path argument + returns "path" 430s 430s Request Tests 430s persistent connections 431s with default :persistent => true, 127.0.0.1:9292 431s + uses a persistent connection 431s + :persistent => false resets connection 431s with default :persistent => false, 127.0.0.1:9292 431s + does not use a persistent connection 431s + :persistent => true enables persistence 432s with default :persistent => true, [::1]:9293 433s + uses a persistent connection 433s + :persistent => false resets connection 433s with default :persistent => false, [::1]:9293 433s + does not use a persistent connection 433s + :persistent => true enables persistence 433s 433s Excon Response Parsing 433s responses with chunked transfer-encoding 434s simple response + returns "hello world" 434s with :response_block 434s simple response + returns [["hello ", nil, nil], ["world", nil, nil]] 434s simple response has empty body + returns "" 434s with expected response status + returns [["hello ", nil, nil], ["world", nil, nil]] 434s with unexpected response status + returns "hello world" 434s merges trailers into headers + returns "one, two, three, four, five, six" 434s removes 'chunked' from Transfer-Encoding + returns nil 434s responses with content-length 434s simple response + returns "hello world" 434s with :response_block 434s simple response + returns [["hello", 6, 11], [" worl", 1, 11], ["d", 0, 11]] 434s simple response has empty body + returns "" 434s with expected response status + returns [["hello", 6, 11], [" worl", 1, 11], ["d", 0, 11]] 434s with unexpected response status + returns "hello world" 434s responses with unknown length 434s simple response + returns "hello world" 434s with :response_block 434s simple response + returns [["hello", nil, nil], [" worl", nil, nil], ["d", nil, nil]] 434s simple response has empty body + returns "" 434s with expected response status + returns [["hello", nil, nil], [" worl", nil, nil], ["d", nil, nil]] 434s with unexpected response status + returns "hello world" 434s cookies 434s parses cookies into array + returns ["one, two", "three, four"] 434s header continuation 434s proper continuation + returns "one, two, three, four, five, six" 434s malformed header + raises Excon::Error::Socket 434s malformed header continuation + raises Excon::Error::Socket 434s status line parsing 434s proper status code + returns 404 434s proper reason phrase + returns "Not Found" 434s 434s socket 434s chunk_size: 434s read_nonblock 434s readline nonblock is efficient 434s + returns ["one\n", 1, [8, "EOF"]] 434s readline nonblock works sequentially 434s + returns [["one\n", "two\n"], 1, [8, "EOF"]] 434s readline nonblock can handle partial reads 434s + returns [["one\n", "two\n"], 2, [5, "EAGAIN", 3, "EOF"]] 434s readline nonblock before read 434s + returns [["one\n", "two\n"], 2, [8, "EOF"]] 434s read_nonblock does not EOF early 434s + returns [["one", "two"], 2, [3, "EAGAIN", 3, "EOF"]] 434s chunk_size: 512 434s read_nonblock 434s readline nonblock is efficient 434s + returns ["one\n", 1, [8, "EOF"]] 434s readline nonblock works sequentially 434s + returns [["one\n", "two\n"], 1, [8, "EOF"]] 434s readline nonblock can handle partial reads 434s + returns [["one\n", "two\n"], 2, [5, "EAGAIN", 3, "EOF"]] 434s readline nonblock before read 434s + returns [["one\n", "two\n"], 2, [8, "EOF"]] 434s read_nonblock does not EOF early 434s + returns [["one", "two"], 2, [3, "EAGAIN", 3, "EOF"]] 434s 434s Excon thread safety 434s thread_safe_sockets configuration 434s thread_safe_sockets default + returns true 434s with thread_safe_sockets set false + returns false 438s + long_thread 438s + short_thread 438s 438s read should timeout 442s nonblock => false hits read_timeout + raises Excon::Error::Timeout 443s nonblock => true hits read_timeout + raises Excon::Error::Timeout 443s 443s Excon::Utils 443s #connection_uri 443s using UNIX scheme + returns "unix:///tmp/some.sock" 443s using HTTP scheme 443s without default port + returns "http://foo.com" 443s include_default_port adds default port + returns "http://foo.com:80" 443s !include_default_port has no port value + returns "http://foo.com" 443s omit_default_port has no port value + returns "http://foo.com" 443s #request_uri 443s using UNIX scheme 443s without query + returns "unix:///tmp/some.sock/some/path" 443s with query + returns "unix:///tmp/some.sock/some/path?bar=that&foo=this" 443s using HTTP scheme 443s without query + returns "http://foo.com/some/path" 443s with query + returns "http://foo.com/some/path?bar=that&foo=this" 443s http default port + returns true 443s http nonstandard port + returns false 443s https standard port + returns true 443s https nonstandard port + returns false 443s unix socket + returns false 443s + detecting default ports 443s #escape_uri + returns "/hello%20excon" 443s #unescape_uri + returns "/hello excon" 443s #unescape_form + returns "message=We love excon!" 443s #split_header_value + returns ["value"] 443s #split_header_value + returns ["value1", "value2"] 443s #split_header_value + returns ["text/html;q=0.5", "application/json; version=1"] 443s #split_header_value + returns ["foo/bar;key=\"A,B,C\""] 443s #split_header_value + returns [] 443s 443s 3 failed, 12 pending and 1465 succeeded in 191.0390391451134 seconds 443s 443s rake aborted! 443s Command failed with status (1): [/usr/bin/ruby3.3 -S shindo] 443s /usr/share/rubygems-integration/all/gems/shindo-0.3.11/lib/shindo/rake.rb:10:in `block in initialize' 443s /usr/share/rubygems-integration/all/gems/rake-13.2.1/exe/rake:27:in `' 443s Tasks: TOP => default => tests 443s (See full trace by running task with --trace) 443s mv ./.gem2deb.lib lib 444s autopkgtest [13:18:49]: test gem2deb-test-runner: -----------------------] 446s autopkgtest [13:18:51]: test gem2deb-test-runner: - - - - - - - - - - results - - - - - - - - - - 446s gem2deb-test-runner FAIL non-zero exit status 1 446s autopkgtest [13:18:51]: @@@@@@@@@@@@@@@@@@@@ summary 446s gem2deb-test-runner FAIL non-zero exit status 1