0s autopkgtest [21:08:56]: starting date and time: 2026-02-03 21:08:56+0000 0s autopkgtest [21:08:56]: git checkout: 508d4a25 a-v-ssh wait_for_ssh: demote "ssh connection failed" to a debug message 0s autopkgtest [21:08:56]: host juju-7f2275-prod-proposed-migration-environment-9; command line: /home/ubuntu/autopkgtest/runner/autopkgtest --output-dir /tmp/autopkgtest-work.m1i5g9a_/out --timeout-copy=6000 --setup-commands 'ln -s /dev/null /etc/systemd/system/bluetooth.service; printf "http_proxy=http://squid.internal:3128\nhttps_proxy=http://squid.internal:3128\nno_proxy=127.0.0.1,127.0.1.1,localhost,localdomain,internal,login.ubuntu.com,archive.ubuntu.com,ports.ubuntu.com,security.ubuntu.com,ddebs.ubuntu.com,changelogs.ubuntu.com,keyserver.ubuntu.com,launchpadlibrarian.net,launchpadcontent.net,launchpad.net,keystone.ps5.canonical.com,objectstorage.prodstack5.canonical.com,radosgw.ps5.canonical.com\n" >> /etc/environment' --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 -- lxd -r lxd-armhf-10.145.243.221 lxd-armhf-10.145.243.221:autopkgtest/ubuntu/resolute/armhf 25s autopkgtest [21:09:21]: testbed dpkg architecture: armhf 27s autopkgtest [21:09:23]: testbed apt version: 3.1.14 31s autopkgtest [21:09:27]: @@@@@@@@@@@@@@@@@@@@ test bed setup 33s autopkgtest [21:09:29]: testbed release detected to be: None 41s autopkgtest [21:09:37]: updating testbed package index (apt update) 43s Get:1 http://ftpmaster.internal/ubuntu resolute-proposed InRelease [124 kB] 43s Get:2 http://ftpmaster.internal/ubuntu resolute InRelease [124 kB] 43s Get:3 http://ftpmaster.internal/ubuntu resolute-updates InRelease [124 kB] 44s Get:4 http://ftpmaster.internal/ubuntu resolute-security InRelease [124 kB] 44s Get:5 http://ftpmaster.internal/ubuntu resolute-proposed/main Sources [242 kB] 44s Get:6 http://ftpmaster.internal/ubuntu resolute-proposed/restricted Sources [5260 B] 44s Get:7 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse Sources [27.9 kB] 44s Get:8 http://ftpmaster.internal/ubuntu resolute-proposed/universe Sources [1343 kB] 44s Get:9 http://ftpmaster.internal/ubuntu resolute-proposed/main armhf Packages [283 kB] 44s Get:10 http://ftpmaster.internal/ubuntu resolute-proposed/universe armhf Packages [1070 kB] 45s Get:11 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse armhf Packages [6336 B] 45s Get:12 http://ftpmaster.internal/ubuntu resolute/main Sources [1400 kB] 45s Get:13 http://ftpmaster.internal/ubuntu resolute/universe Sources [21.3 MB] 48s Get:14 http://ftpmaster.internal/ubuntu resolute/multiverse Sources [310 kB] 48s Get:15 http://ftpmaster.internal/ubuntu resolute/main armhf Packages [1373 kB] 48s Get:16 http://ftpmaster.internal/ubuntu resolute/universe armhf Packages [15.0 MB] 51s Get:17 http://ftpmaster.internal/ubuntu resolute/multiverse armhf Packages [176 kB] 52s Fetched 43.1 MB in 9s (4542 kB/s) 53s Reading package lists... 59s autopkgtest [21:09:55]: upgrading testbed (apt dist-upgrade and autopurge) 61s Reading package lists... 61s Building dependency tree... 61s Reading state information... 61s Calculating upgrade... 62s The following packages will be upgraded: 62s powermgmt-base systemd-hwe-hwdb 62s 2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 62s Need to get 11.0 kB of archives. 62s After this operation, 1024 B of additional disk space will be used. 62s Get:1 http://ftpmaster.internal/ubuntu resolute/main armhf systemd-hwe-hwdb all 259.0.1 [3152 B] 62s Get:2 http://ftpmaster.internal/ubuntu resolute/main armhf powermgmt-base all 1.38ubuntu2 [7878 B] 63s Fetched 11.0 kB in 0s (42.5 kB/s) 63s (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 ... 68394 files and directories currently installed.) 63s Preparing to unpack .../systemd-hwe-hwdb_259.0.1_all.deb ... 63s Unpacking systemd-hwe-hwdb (259.0.1) over (257.7.1) ... 63s Preparing to unpack .../powermgmt-base_1.38ubuntu2_all.deb ... 63s Unpacking powermgmt-base (1.38ubuntu2) over (1.38ubuntu1) ... 63s Setting up powermgmt-base (1.38ubuntu2) ... 63s Setting up systemd-hwe-hwdb (259.0.1) ... 64s Processing triggers for udev (259-1ubuntu3) ... 64s Processing triggers for man-db (2.13.1-1) ... 67s Reading package lists... 67s Building dependency tree... 67s Reading state information... 67s Solving dependencies... 68s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 70s autopkgtest [21:10:06]: rebooting testbed after setup commands that affected boot 111s autopkgtest [21:10:47]: testbed running kernel: Linux 6.8.0-87-generic #88~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue Oct 14 14:00:09 UTC 2 136s autopkgtest [21:11:12]: @@@@@@@@@@@@@@@@@@@@ apt-source ruby-excon 146s Get:1 http://ftpmaster.internal/ubuntu resolute/universe ruby-excon 1.3.1-1 (dsc) [2238 B] 146s Get:2 http://ftpmaster.internal/ubuntu resolute/universe ruby-excon 1.3.1-1 (tar) [240 kB] 146s Get:3 http://ftpmaster.internal/ubuntu resolute/universe ruby-excon 1.3.1-1 (diff) [6468 B] 146s gpgv: Signature made Thu Nov 20 21:55:33 2025 UTC 146s gpgv: using RSA key 5C7ABEA20F8630459CC8C8B5E27F2CF8458C2FA4 146s gpgv: Can't check signature: No public key 146s dpkg-source: warning: cannot verify inline signature for ./ruby-excon_1.3.1-1.dsc: no acceptable signature found 147s autopkgtest [21:11:23]: testing package ruby-excon version 1.3.1-1 149s autopkgtest [21:11:25]: build not needed 151s autopkgtest [21:11:27]: test gem2deb-test-runner: preparing testbed 153s Reading package lists... 153s Building dependency tree... 153s Reading state information... 153s Solving dependencies... 154s The following NEW packages will be installed: 154s gem2deb-test-runner libruby libruby3.3 puma rake ruby ruby-activesupport 154s ruby-base64 ruby-chronic ruby-concurrent ruby-connection-pool ruby-csv 154s ruby-delorean ruby-did-you-mean ruby-diff-lcs ruby-eventmachine ruby-excon 154s ruby-formatador ruby-i18n ruby-kgio ruby-minitest ruby-multi-json 154s ruby-mustermann ruby-net-telnet ruby-nio4r ruby-numerizer ruby-open4 154s ruby-power-assert ruby-rack ruby-rack-protection ruby-rack-session 154s ruby-rackup ruby-raindrops ruby-rspec ruby-rspec-core 154s ruby-rspec-expectations ruby-rspec-mocks ruby-rspec-support 154s ruby-ruby2-keywords ruby-rubygems ruby-shindo ruby-sinatra 154s ruby-sinatra-contrib ruby-test-unit ruby-tilt ruby-tzinfo ruby-webrick 154s ruby-xmlrpc ruby3.3 rubygems-integration unicorn 154s 0 upgraded, 51 newly installed, 0 to remove and 0 not upgraded. 154s Need to get 8488 kB of archives. 154s After this operation, 44.6 MB of additional disk space will be used. 154s Get:1 http://ftpmaster.internal/ubuntu resolute/main armhf rubygems-integration all 1.19build1 [5666 B] 154s Get:2 http://ftpmaster.internal/ubuntu resolute/main armhf ruby-csv all 3.3.4-1 [43.0 kB] 154s Get:3 http://ftpmaster.internal/ubuntu resolute/main armhf ruby-did-you-mean all 1.6.3-2build1 [14.9 kB] 154s Get:4 http://ftpmaster.internal/ubuntu resolute/main armhf ruby-net-telnet all 0.2.0-1build1 [13.5 kB] 154s Get:5 http://ftpmaster.internal/ubuntu resolute/main armhf ruby-ruby2-keywords all 0.0.5-1build1 [4398 B] 154s Get:6 http://ftpmaster.internal/ubuntu resolute/main armhf ruby-webrick all 1.9.1-1 [60.8 kB] 155s Get:7 http://ftpmaster.internal/ubuntu resolute/main armhf ruby-xmlrpc all 0.3.3-2build1 [24.9 kB] 155s Get:8 http://ftpmaster.internal/ubuntu resolute-proposed/main armhf libruby3.3 armhf 3.3.8-2ubuntu3 [5593 kB] 155s Get:9 http://ftpmaster.internal/ubuntu resolute-proposed/main armhf ruby3.3 armhf 3.3.8-2ubuntu3 [49.0 kB] 155s Get:10 http://ftpmaster.internal/ubuntu resolute/main armhf libruby armhf 1:3.3 [5162 B] 155s Get:11 http://ftpmaster.internal/ubuntu resolute/main armhf ruby-rubygems all 3.6.7-2ubuntu1 [332 kB] 155s Get:12 http://ftpmaster.internal/ubuntu resolute/main armhf ruby armhf 1:3.3 [3670 B] 155s Get:13 http://ftpmaster.internal/ubuntu resolute/main armhf rake all 13.2.1-1build1 [45.9 kB] 155s Get:14 http://ftpmaster.internal/ubuntu resolute/universe armhf ruby-minitest all 5.26.1-1 [49.3 kB] 155s Get:15 http://ftpmaster.internal/ubuntu resolute/universe armhf ruby-power-assert all 2.0.5-1 [12.0 kB] 155s Get:16 http://ftpmaster.internal/ubuntu resolute/universe armhf ruby-test-unit all 3.6.2-1 [67.0 kB] 155s Get:17 http://ftpmaster.internal/ubuntu resolute/universe armhf gem2deb-test-runner armhf 2.2.5 [18.3 kB] 155s Get:18 http://ftpmaster.internal/ubuntu resolute/main armhf ruby-nio4r armhf 2.7.4-1 [110 kB] 155s Get:19 http://ftpmaster.internal/ubuntu resolute/main armhf puma armhf 6.6.0-4 [150 kB] 155s Get:20 http://ftpmaster.internal/ubuntu resolute/universe armhf ruby-concurrent all 1.3.4-1 [283 kB] 155s Get:21 http://ftpmaster.internal/ubuntu resolute/universe armhf ruby-i18n all 1.14.7-1 [42.8 kB] 155s Get:22 http://ftpmaster.internal/ubuntu resolute/universe armhf ruby-tzinfo all 2.0.6-1 [55.2 kB] 155s Get:23 http://ftpmaster.internal/ubuntu resolute/universe armhf ruby-connection-pool all 2.5.4-1 [10.3 kB] 155s Get:24 http://ftpmaster.internal/ubuntu resolute/main armhf ruby-base64 all 0.3.0-1build1 [8560 B] 155s Get:25 http://ftpmaster.internal/ubuntu resolute/universe armhf ruby-activesupport all 2:7.2.2.2+dfsg-2 [224 kB] 155s Get:26 http://ftpmaster.internal/ubuntu resolute/universe armhf ruby-numerizer all 0.2.0-3 [4954 B] 155s Get:27 http://ftpmaster.internal/ubuntu resolute/universe armhf ruby-chronic all 0.10.6-1 [25.5 kB] 155s Get:28 http://ftpmaster.internal/ubuntu resolute/universe armhf ruby-delorean all 2.1.0-3 [5122 B] 155s Get:29 http://ftpmaster.internal/ubuntu resolute/universe armhf ruby-diff-lcs all 1.5.1-1 [22.8 kB] 155s Get:30 http://ftpmaster.internal/ubuntu resolute/universe armhf ruby-eventmachine armhf 1.3~pre20220315-df4ab006-5build1 [147 kB] 155s Get:31 http://ftpmaster.internal/ubuntu resolute/universe armhf ruby-excon all 1.3.1-1 [165 kB] 155s Get:32 http://ftpmaster.internal/ubuntu resolute/universe armhf ruby-formatador all 1.2.3-1 [8812 B] 155s Get:33 http://ftpmaster.internal/ubuntu resolute/universe armhf ruby-kgio armhf 2.11.2-2build7 [27.1 kB] 155s Get:34 http://ftpmaster.internal/ubuntu resolute/universe armhf ruby-multi-json all 1.15.0-1 [16.1 kB] 155s Get:35 http://ftpmaster.internal/ubuntu resolute/main armhf ruby-mustermann all 3.0.4-1build1 [38.4 kB] 155s Get:36 http://ftpmaster.internal/ubuntu resolute/universe armhf ruby-open4 all 1.3.4-3 [14.8 kB] 155s Get:37 http://ftpmaster.internal/ubuntu resolute/main armhf ruby-rack all 3.1.18-1build1 [81.7 kB] 155s Get:38 http://ftpmaster.internal/ubuntu resolute/main armhf ruby-rack-protection all 4.2.1-1build1 [16.1 kB] 155s Get:39 http://ftpmaster.internal/ubuntu resolute/main armhf ruby-rack-session all 2.1.1-0.1 [12.7 kB] 155s Get:40 http://ftpmaster.internal/ubuntu resolute/main armhf ruby-rackup all 2.1.0-4 [13.0 kB] 155s Get:41 http://ftpmaster.internal/ubuntu resolute/universe armhf ruby-raindrops armhf 0.20.0-2 [29.3 kB] 155s Get:42 http://ftpmaster.internal/ubuntu resolute/universe armhf ruby-rspec-support all 3.13.0c0e0m0s1-2 [29.2 kB] 155s Get:43 http://ftpmaster.internal/ubuntu resolute/universe armhf ruby-rspec-core all 3.13.0c0e0m0s1-2 [164 kB] 155s Get:44 http://ftpmaster.internal/ubuntu resolute/universe armhf ruby-rspec-expectations all 3.13.0c0e0m0s1-2 [89.8 kB] 155s Get:45 http://ftpmaster.internal/ubuntu resolute/universe armhf ruby-rspec-mocks all 3.13.0c0e0m0s1-2 [81.0 kB] 155s Get:46 http://ftpmaster.internal/ubuntu resolute/universe armhf ruby-rspec all 3.13.0c0e0m0s1-2 [3500 B] 155s Get:47 http://ftpmaster.internal/ubuntu resolute/universe armhf ruby-shindo all 0.3.11-1 [11.9 kB] 155s Get:48 http://ftpmaster.internal/ubuntu resolute/main armhf ruby-tilt all 2.6.1-1build1 [31.5 kB] 155s Get:49 http://ftpmaster.internal/ubuntu resolute/main armhf ruby-sinatra all 4.2.1-1build1 [94.9 kB] 155s Get:50 http://ftpmaster.internal/ubuntu resolute/universe armhf ruby-sinatra-contrib all 4.2.1-1build1 [26.8 kB] 156s Get:51 http://ftpmaster.internal/ubuntu resolute/universe armhf unicorn armhf 6.1.0+git.20250131.1370f52-1 [99.5 kB] 156s Fetched 8488 kB in 1s (5912 kB/s) 156s Selecting previously unselected package rubygems-integration. 156s (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 ... 68395 files and directories currently installed.) 156s Preparing to unpack .../00-rubygems-integration_1.19build1_all.deb ... 156s Unpacking rubygems-integration (1.19build1) ... 156s Selecting previously unselected package ruby-csv. 156s Preparing to unpack .../01-ruby-csv_3.3.4-1_all.deb ... 156s Unpacking ruby-csv (3.3.4-1) ... 156s Selecting previously unselected package ruby-did-you-mean. 156s Preparing to unpack .../02-ruby-did-you-mean_1.6.3-2build1_all.deb ... 156s Unpacking ruby-did-you-mean (1.6.3-2build1) ... 156s Selecting previously unselected package ruby-net-telnet. 156s Preparing to unpack .../03-ruby-net-telnet_0.2.0-1build1_all.deb ... 156s Unpacking ruby-net-telnet (0.2.0-1build1) ... 156s Selecting previously unselected package ruby-ruby2-keywords. 156s Preparing to unpack .../04-ruby-ruby2-keywords_0.0.5-1build1_all.deb ... 156s Unpacking ruby-ruby2-keywords (0.0.5-1build1) ... 156s Selecting previously unselected package ruby-webrick. 156s Preparing to unpack .../05-ruby-webrick_1.9.1-1_all.deb ... 156s Unpacking ruby-webrick (1.9.1-1) ... 156s Selecting previously unselected package ruby-xmlrpc. 156s Preparing to unpack .../06-ruby-xmlrpc_0.3.3-2build1_all.deb ... 156s Unpacking ruby-xmlrpc (0.3.3-2build1) ... 156s Selecting previously unselected package libruby3.3:armhf. 156s Preparing to unpack .../07-libruby3.3_3.3.8-2ubuntu3_armhf.deb ... 156s Unpacking libruby3.3:armhf (3.3.8-2ubuntu3) ... 157s Selecting previously unselected package ruby3.3. 157s Preparing to unpack .../08-ruby3.3_3.3.8-2ubuntu3_armhf.deb ... 157s Unpacking ruby3.3 (3.3.8-2ubuntu3) ... 157s Selecting previously unselected package libruby:armhf. 157s Preparing to unpack .../09-libruby_1%3a3.3_armhf.deb ... 157s Unpacking libruby:armhf (1:3.3) ... 157s Selecting previously unselected package ruby-rubygems. 157s Preparing to unpack .../10-ruby-rubygems_3.6.7-2ubuntu1_all.deb ... 157s Unpacking ruby-rubygems (3.6.7-2ubuntu1) ... 157s Selecting previously unselected package ruby. 157s Preparing to unpack .../11-ruby_1%3a3.3_armhf.deb ... 157s Unpacking ruby (1:3.3) ... 157s Selecting previously unselected package rake. 157s Preparing to unpack .../12-rake_13.2.1-1build1_all.deb ... 157s Unpacking rake (13.2.1-1build1) ... 157s Selecting previously unselected package ruby-minitest. 157s Preparing to unpack .../13-ruby-minitest_5.26.1-1_all.deb ... 157s Unpacking ruby-minitest (5.26.1-1) ... 157s Selecting previously unselected package ruby-power-assert. 157s Preparing to unpack .../14-ruby-power-assert_2.0.5-1_all.deb ... 157s Unpacking ruby-power-assert (2.0.5-1) ... 157s Selecting previously unselected package ruby-test-unit. 157s Preparing to unpack .../15-ruby-test-unit_3.6.2-1_all.deb ... 157s Unpacking ruby-test-unit (3.6.2-1) ... 157s Selecting previously unselected package gem2deb-test-runner. 157s Preparing to unpack .../16-gem2deb-test-runner_2.2.5_armhf.deb ... 157s Unpacking gem2deb-test-runner (2.2.5) ... 157s Selecting previously unselected package ruby-nio4r:armhf. 157s Preparing to unpack .../17-ruby-nio4r_2.7.4-1_armhf.deb ... 157s Unpacking ruby-nio4r:armhf (2.7.4-1) ... 157s Selecting previously unselected package puma. 157s Preparing to unpack .../18-puma_6.6.0-4_armhf.deb ... 157s Unpacking puma (6.6.0-4) ... 157s Selecting previously unselected package ruby-concurrent. 157s Preparing to unpack .../19-ruby-concurrent_1.3.4-1_all.deb ... 157s Unpacking ruby-concurrent (1.3.4-1) ... 157s Selecting previously unselected package ruby-i18n. 157s Preparing to unpack .../20-ruby-i18n_1.14.7-1_all.deb ... 157s Unpacking ruby-i18n (1.14.7-1) ... 157s Selecting previously unselected package ruby-tzinfo. 157s Preparing to unpack .../21-ruby-tzinfo_2.0.6-1_all.deb ... 157s Unpacking ruby-tzinfo (2.0.6-1) ... 157s Selecting previously unselected package ruby-connection-pool. 157s Preparing to unpack .../22-ruby-connection-pool_2.5.4-1_all.deb ... 157s Unpacking ruby-connection-pool (2.5.4-1) ... 157s Selecting previously unselected package ruby-base64. 157s Preparing to unpack .../23-ruby-base64_0.3.0-1build1_all.deb ... 157s Unpacking ruby-base64 (0.3.0-1build1) ... 158s Selecting previously unselected package ruby-activesupport. 158s Preparing to unpack .../24-ruby-activesupport_2%3a7.2.2.2+dfsg-2_all.deb ... 158s Unpacking ruby-activesupport (2:7.2.2.2+dfsg-2) ... 158s Selecting previously unselected package ruby-numerizer. 158s Preparing to unpack .../25-ruby-numerizer_0.2.0-3_all.deb ... 158s Unpacking ruby-numerizer (0.2.0-3) ... 158s Selecting previously unselected package ruby-chronic. 158s Preparing to unpack .../26-ruby-chronic_0.10.6-1_all.deb ... 158s Unpacking ruby-chronic (0.10.6-1) ... 158s Selecting previously unselected package ruby-delorean. 158s Preparing to unpack .../27-ruby-delorean_2.1.0-3_all.deb ... 158s Unpacking ruby-delorean (2.1.0-3) ... 158s Selecting previously unselected package ruby-diff-lcs. 158s Preparing to unpack .../28-ruby-diff-lcs_1.5.1-1_all.deb ... 158s Unpacking ruby-diff-lcs (1.5.1-1) ... 158s Selecting previously unselected package ruby-eventmachine:armhf. 158s Preparing to unpack .../29-ruby-eventmachine_1.3~pre20220315-df4ab006-5build1_armhf.deb ... 158s Unpacking ruby-eventmachine:armhf (1.3~pre20220315-df4ab006-5build1) ... 158s Selecting previously unselected package ruby-excon. 158s Preparing to unpack .../30-ruby-excon_1.3.1-1_all.deb ... 158s Unpacking ruby-excon (1.3.1-1) ... 158s Selecting previously unselected package ruby-formatador. 158s Preparing to unpack .../31-ruby-formatador_1.2.3-1_all.deb ... 158s Unpacking ruby-formatador (1.2.3-1) ... 158s Selecting previously unselected package ruby-kgio. 158s Preparing to unpack .../32-ruby-kgio_2.11.2-2build7_armhf.deb ... 158s Unpacking ruby-kgio (2.11.2-2build7) ... 158s Selecting previously unselected package ruby-multi-json. 158s Preparing to unpack .../33-ruby-multi-json_1.15.0-1_all.deb ... 158s Unpacking ruby-multi-json (1.15.0-1) ... 158s Selecting previously unselected package ruby-mustermann. 158s Preparing to unpack .../34-ruby-mustermann_3.0.4-1build1_all.deb ... 158s Unpacking ruby-mustermann (3.0.4-1build1) ... 158s Selecting previously unselected package ruby-open4. 158s Preparing to unpack .../35-ruby-open4_1.3.4-3_all.deb ... 158s Unpacking ruby-open4 (1.3.4-3) ... 158s Selecting previously unselected package ruby-rack. 158s Preparing to unpack .../36-ruby-rack_3.1.18-1build1_all.deb ... 158s Unpacking ruby-rack (3.1.18-1build1) ... 158s Selecting previously unselected package ruby-rack-protection. 158s Preparing to unpack .../37-ruby-rack-protection_4.2.1-1build1_all.deb ... 158s Unpacking ruby-rack-protection (4.2.1-1build1) ... 158s Selecting previously unselected package ruby-rack-session. 158s Preparing to unpack .../38-ruby-rack-session_2.1.1-0.1_all.deb ... 158s Unpacking ruby-rack-session (2.1.1-0.1) ... 158s Selecting previously unselected package ruby-rackup. 158s Preparing to unpack .../39-ruby-rackup_2.1.0-4_all.deb ... 158s Unpacking ruby-rackup (2.1.0-4) ... 158s Selecting previously unselected package ruby-raindrops:armhf. 158s Preparing to unpack .../40-ruby-raindrops_0.20.0-2_armhf.deb ... 158s Unpacking ruby-raindrops:armhf (0.20.0-2) ... 158s Selecting previously unselected package ruby-rspec-support. 158s Preparing to unpack .../41-ruby-rspec-support_3.13.0c0e0m0s1-2_all.deb ... 158s Unpacking ruby-rspec-support (3.13.0c0e0m0s1-2) ... 158s Selecting previously unselected package ruby-rspec-core. 158s Preparing to unpack .../42-ruby-rspec-core_3.13.0c0e0m0s1-2_all.deb ... 158s Unpacking ruby-rspec-core (3.13.0c0e0m0s1-2) ... 158s Selecting previously unselected package ruby-rspec-expectations. 158s Preparing to unpack .../43-ruby-rspec-expectations_3.13.0c0e0m0s1-2_all.deb ... 158s Unpacking ruby-rspec-expectations (3.13.0c0e0m0s1-2) ... 158s Selecting previously unselected package ruby-rspec-mocks. 158s Preparing to unpack .../44-ruby-rspec-mocks_3.13.0c0e0m0s1-2_all.deb ... 158s Unpacking ruby-rspec-mocks (3.13.0c0e0m0s1-2) ... 158s Selecting previously unselected package ruby-rspec. 158s Preparing to unpack .../45-ruby-rspec_3.13.0c0e0m0s1-2_all.deb ... 158s Unpacking ruby-rspec (3.13.0c0e0m0s1-2) ... 158s Selecting previously unselected package ruby-shindo. 158s Preparing to unpack .../46-ruby-shindo_0.3.11-1_all.deb ... 158s Unpacking ruby-shindo (0.3.11-1) ... 158s Selecting previously unselected package ruby-tilt. 159s Preparing to unpack .../47-ruby-tilt_2.6.1-1build1_all.deb ... 159s Unpacking ruby-tilt (2.6.1-1build1) ... 159s Selecting previously unselected package ruby-sinatra. 159s Preparing to unpack .../48-ruby-sinatra_4.2.1-1build1_all.deb ... 159s Unpacking ruby-sinatra (4.2.1-1build1) ... 159s Selecting previously unselected package ruby-sinatra-contrib. 159s Preparing to unpack .../49-ruby-sinatra-contrib_4.2.1-1build1_all.deb ... 159s Unpacking ruby-sinatra-contrib (4.2.1-1build1) ... 159s Selecting previously unselected package unicorn. 159s Preparing to unpack .../50-unicorn_6.1.0+git.20250131.1370f52-1_armhf.deb ... 159s Unpacking unicorn (6.1.0+git.20250131.1370f52-1) ... 159s Setting up ruby-multi-json (1.15.0-1) ... 159s Setting up ruby-ruby2-keywords (0.0.5-1build1) ... 159s Setting up ruby-mustermann (3.0.4-1build1) ... 159s Setting up ruby-open4 (1.3.4-3) ... 159s Setting up ruby-power-assert (2.0.5-1) ... 159s Setting up rubygems-integration (1.19build1) ... 159s Setting up ruby-concurrent (1.3.4-1) ... 159s Setting up ruby-minitest (5.26.1-1) ... 159s Setting up ruby-test-unit (3.6.2-1) ... 159s Setting up ruby-net-telnet (0.2.0-1build1) ... 159s Setting up ruby-csv (3.3.4-1) ... 159s Setting up ruby-base64 (0.3.0-1build1) ... 159s Setting up ruby-i18n (1.14.7-1) ... 159s Setting up ruby-rspec-support (3.13.0c0e0m0s1-2) ... 159s Setting up ruby-webrick (1.9.1-1) ... 159s Setting up ruby-connection-pool (2.5.4-1) ... 159s Setting up ruby-did-you-mean (1.6.3-2build1) ... 159s Setting up ruby-numerizer (0.2.0-3) ... 159s Setting up ruby-xmlrpc (0.3.3-2build1) ... 159s Setting up ruby-chronic (0.10.6-1) ... 159s Setting up ruby-tzinfo (2.0.6-1) ... 159s Setting up rake (13.2.1-1build1) ... 159s Setting up libruby3.3:armhf (3.3.8-2ubuntu3) ... 159s Setting up ruby-activesupport (2:7.2.2.2+dfsg-2) ... 159s Setting up ruby-rubygems (3.6.7-2ubuntu1) ... 159s Setting up ruby3.3 (3.3.8-2ubuntu3) ... 159s Setting up libruby:armhf (1:3.3) ... 159s Setting up ruby-excon (1.3.1-1) ... 159s Setting up ruby-eventmachine:armhf (1.3~pre20220315-df4ab006-5build1) ... 159s Setting up ruby-raindrops:armhf (0.20.0-2) ... 159s Setting up ruby (1:3.3) ... 159s Setting up ruby-nio4r:armhf (2.7.4-1) ... 159s Setting up ruby-rspec-core (3.13.0c0e0m0s1-2) ... 159s Setting up ruby-tilt (2.6.1-1build1) ... 159s Setting up ruby-kgio (2.11.2-2build7) ... 159s Setting up ruby-diff-lcs (1.5.1-1) ... 159s Setting up puma (6.6.0-4) ... 159s Setting up ruby-delorean (2.1.0-3) ... 159s Setting up ruby-rack (3.1.18-1build1) ... 159s Setting up gem2deb-test-runner (2.2.5) ... 159s Setting up ruby-formatador (1.2.3-1) ... 159s Setting up unicorn (6.1.0+git.20250131.1370f52-1) ... 159s Created symlink '/etc/systemd/system/multi-user.target.wants/unicorn.service' → '/usr/lib/systemd/system/unicorn.service'. 159s Setting up ruby-rspec-expectations (3.13.0c0e0m0s1-2) ... 159s Setting up ruby-rspec-mocks (3.13.0c0e0m0s1-2) ... 159s Setting up ruby-shindo (0.3.11-1) ... 159s Setting up ruby-rack-session (2.1.1-0.1) ... 159s Setting up ruby-rack-protection (4.2.1-1build1) ... 159s Setting up ruby-rackup (2.1.0-4) ... 159s Setting up ruby-rspec (3.13.0c0e0m0s1-2) ... 159s Setting up ruby-sinatra (4.2.1-1build1) ... 159s Setting up ruby-sinatra-contrib (4.2.1-1build1) ... 159s Processing triggers for libc-bin (2.42-2ubuntu4) ... 160s Processing triggers for man-db (2.13.1-1) ... 168s autopkgtest [21:11:44]: test gem2deb-test-runner: gem2deb-test-runner --autopkgtest --check-dependencies 2>&1 168s autopkgtest [21:11:44]: test gem2deb-test-runner: [----------------------- 170s 170s ┌──────────────────────────────────────────────────────────────────────────────┐ 170s │ Checking Rubygems dependency resolution on ruby3.3 │ 170s └──────────────────────────────────────────────────────────────────────────────┘ 170s 170s RUBYLIB=. GEM_PATH= ruby3.3 -e gem\ \"excon\" 170s mv lib ./.gem2deb.lib 170s mv ./.gem2deb.lib lib 170s 170s ┌──────────────────────────────────────────────────────────────────────────────┐ 170s │ Run tests for ruby3.3 from debian/ruby-tests.rake │ 170s └──────────────────────────────────────────────────────────────────────────────┘ 170s 170s RUBYLIB=. GEM_PATH= ruby3.3 -S rake --rakelibdir /gem2deb-nonexistent -f debian/ruby-tests.rake 170s mv lib ./.gem2deb.lib 171s sh: 1: git: not found 171s /usr/bin/ruby3.3 -S shindo 171s 171s Excon bad server interaction 172s header splitting 172s prevents key splitting + raises Excon::Error::InvalidHeaderKey 172s prevents value splitting + raises Excon::Error::InvalidHeaderValue 172s bad server: causes EOFError 172s with no content length and no chunking 172s without a block 172s response.body + returns "hello" 172s with a block 172s body from chunks + returns "hello" 172s eof server: causes EOFError 172s request + raises Excon::Error::Socket 172s 172s Excon basics 172s + returns true 172s nonblock => true, persistent => false 172s method and path defaults 172s request().body + returns "GET /" 172s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 172s request(:method => :get).body + returns "GET /" 172s request(:path => '/').body + returns "GET /" 172s request(:method => :get, :path => '/').body + returns "GET /" 172s GET /content-length/100 172s response.status + returns 200 172s response[:status] + returns 200 172s response.headers['Content-Length'] + returns "100" 172s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 172s + Time.parse(response.headers['Date']).is_a?(Time) 172s + !!(response.headers['Server'] =~ /^WEBrick/) 172s response.headers['Custom'] + returns "Foo: bar" 172s response.remote_ip + returns "127.0.0.1" 172s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 172s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 172s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 172s POST /body-sink 172s response.body + returns "5000000" 172s empty body + returns "0" 172s POST /echo 172s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 172s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 172s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 172s with multi-byte strings 172s + properly concatenates request+headers and body 172s PUT /echo 172s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 172s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 172s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 172s with multi-byte strings 172s + properly concatenates request+headers and body 172s should succeed with tcp_nodelay + returns 200 172s + returns true 172s nonblock => true, persistent => true 172s method and path defaults 172s request().body + returns "GET /" 172s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 172s request(:method => :get).body + returns "GET /" 172s request(:path => '/').body + returns "GET /" 172s request(:method => :get, :path => '/').body + returns "GET /" 172s GET /content-length/100 172s response.status + returns 200 172s response[:status] + returns 200 172s response.headers['Content-Length'] + returns "100" 172s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 172s + Time.parse(response.headers['Date']).is_a?(Time) 172s + !!(response.headers['Server'] =~ /^WEBrick/) 172s response.headers['Custom'] + returns "Foo: bar" 172s response.remote_ip + returns "127.0.0.1" 172s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 173s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 173s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 173s POST /body-sink 173s response.body + returns "5000000" 173s empty body + returns "0" 173s POST /echo 173s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 173s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 173s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 173s with multi-byte strings 173s + properly concatenates request+headers and body 173s PUT /echo 173s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 173s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 173s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 173s with multi-byte strings 173s + properly concatenates request+headers and body 173s should succeed with tcp_nodelay + returns 200 173s + returns true 173s nonblock => false, persistent => true 173s method and path defaults 173s request().body + returns "GET /" 173s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 173s request(:method => :get).body + returns "GET /" 173s request(:path => '/').body + returns "GET /" 173s request(:method => :get, :path => '/').body + returns "GET /" 173s GET /content-length/100 173s response.status + returns 200 173s response[:status] + returns 200 173s response.headers['Content-Length'] + returns "100" 173s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 173s + Time.parse(response.headers['Date']).is_a?(Time) 173s + !!(response.headers['Server'] =~ /^WEBrick/) 173s response.headers['Custom'] + returns "Foo: bar" 173s response.remote_ip + returns "127.0.0.1" 173s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 173s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 173s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 173s POST /body-sink 174s response.body + returns "5000000" 174s empty body + returns "0" 174s POST /echo 174s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 174s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 174s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 174s with multi-byte strings 174s + properly concatenates request+headers and body 174s PUT /echo 174s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 174s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 174s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 174s with multi-byte strings 174s + properly concatenates request+headers and body 174s should succeed with tcp_nodelay + returns 200 174s + returns true 174s nonblock => false, persistent => false 174s method and path defaults 174s request().body + returns "GET /" 174s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 174s request(:method => :get).body + returns "GET /" 174s request(:path => '/').body + returns "GET /" 174s request(:method => :get, :path => '/').body + returns "GET /" 174s GET /content-length/100 174s response.status + returns 200 174s response[:status] + returns 200 174s response.headers['Content-Length'] + returns "100" 174s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 174s + Time.parse(response.headers['Date']).is_a?(Time) 174s + !!(response.headers['Server'] =~ /^WEBrick/) 174s response.headers['Custom'] + returns "Foo: bar" 174s response.remote_ip + returns "127.0.0.1" 174s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 174s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 174s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 174s POST /body-sink 174s response.body + returns "5000000" 174s empty body + returns "0" 174s POST /echo 174s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 174s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 174s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 174s with multi-byte strings 174s + properly concatenates request+headers and body 174s PUT /echo 174s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 174s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 174s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 174s with multi-byte strings 174s + properly concatenates request+headers and body 174s should succeed with tcp_nodelay + returns 200 174s explicit uri passed to connection 174s GET /content-length/100 + returns 200 174s 174s Excon streaming basics 174s http 174s + returns true 175s simple blocking request on streaming endpoint + returns ["Hellostreamyworld", "response time ok"] 175s simple blocking request on streaming endpoint with fixed length + returns ["Hellostreamyworld", "response time ok"] 175s simple request with response_block on streaming endpoint + returns [["Hello", "streamy", "world"], "response times ok"] 175s simple request with response_block on streaming endpoint with fixed length + returns [["Hello", "streamy", "world"], "response times ok"] 175s https 175s + returns true 176s simple blocking request on streaming endpoint + returns ["Hellostreamyworld", "response time ok"] 176s simple blocking request on streaming endpoint with fixed length + returns ["Hellostreamyworld", "response time ok"] 176s simple request with response_block on streaming endpoint + returns [["Hello", "streamy", "world"], "response times ok"] 177s simple request with response_block on streaming endpoint with fixed length + returns [["Hello", "streamy", "world"], "response times ok"] 177s 177s Excon basics (Basic Auth Pass) 177s + returns true 177s nonblock => true, persistent => false 177s method and path defaults 177s request().body + returns "GET /" 177s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 177s request(:method => :get).body + returns "GET /" 177s request(:path => '/').body + returns "GET /" 177s request(:method => :get, :path => '/').body + returns "GET /" 177s GET /content-length/100 177s response.status + returns 200 177s response[:status] + returns 200 177s response.headers['Content-Length'] + returns "100" 177s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 177s + Time.parse(response.headers['Date']).is_a?(Time) 177s + !!(response.headers['Server'] =~ /^WEBrick/) 177s response.headers['Custom'] + returns "Foo: bar" 177s response.remote_ip + returns "127.0.0.1" 177s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 177s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 177s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 177s POST /body-sink 177s response.body + returns "5000000" 177s empty body + returns "0" 177s POST /echo 177s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 177s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 177s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 177s with multi-byte strings 177s + properly concatenates request+headers and body 177s PUT /echo 177s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 177s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 177s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 177s with multi-byte strings 177s + properly concatenates request+headers and body 177s should succeed with tcp_nodelay + returns 200 177s + returns true 177s nonblock => true, persistent => true 177s method and path defaults 177s request().body + returns "GET /" 177s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 177s request(:method => :get).body + returns "GET /" 177s request(:path => '/').body + returns "GET /" 177s request(:method => :get, :path => '/').body + returns "GET /" 177s GET /content-length/100 177s response.status + returns 200 177s response[:status] + returns 200 177s response.headers['Content-Length'] + returns "100" 177s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 177s + Time.parse(response.headers['Date']).is_a?(Time) 177s + !!(response.headers['Server'] =~ /^WEBrick/) 178s response.headers['Custom'] + returns "Foo: bar" 178s response.remote_ip + returns "127.0.0.1" 178s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 178s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 178s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 178s POST /body-sink 178s response.body + returns "5000000" 178s empty body + returns "0" 178s POST /echo 178s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 178s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 178s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 178s with multi-byte strings 178s + properly concatenates request+headers and body 178s PUT /echo 178s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 178s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 178s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 178s with multi-byte strings 178s + properly concatenates request+headers and body 178s should succeed with tcp_nodelay + returns 200 178s + returns true 178s nonblock => false, persistent => true 178s method and path defaults 178s request().body + returns "GET /" 178s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 178s request(:method => :get).body + returns "GET /" 178s request(:path => '/').body + returns "GET /" 178s request(:method => :get, :path => '/').body + returns "GET /" 178s GET /content-length/100 178s response.status + returns 200 178s response[:status] + returns 200 178s response.headers['Content-Length'] + returns "100" 178s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 178s + Time.parse(response.headers['Date']).is_a?(Time) 178s + !!(response.headers['Server'] =~ /^WEBrick/) 178s response.headers['Custom'] + returns "Foo: bar" 178s response.remote_ip + returns "127.0.0.1" 178s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 178s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 178s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 178s POST /body-sink 178s response.body + returns "5000000" 179s empty body + returns "0" 179s POST /echo 179s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 179s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 179s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 179s with multi-byte strings 179s + properly concatenates request+headers and body 179s PUT /echo 179s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 179s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 179s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 179s with multi-byte strings 179s + properly concatenates request+headers and body 179s should succeed with tcp_nodelay + returns 200 179s + returns true 179s nonblock => false, persistent => false 179s method and path defaults 179s request().body + returns "GET /" 179s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 179s request(:method => :get).body + returns "GET /" 179s request(:path => '/').body + returns "GET /" 179s request(:method => :get, :path => '/').body + returns "GET /" 179s GET /content-length/100 179s response.status + returns 200 179s response[:status] + returns 200 179s response.headers['Content-Length'] + returns "100" 179s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 179s + Time.parse(response.headers['Date']).is_a?(Time) 179s + !!(response.headers['Server'] =~ /^WEBrick/) 179s response.headers['Custom'] + returns "Foo: bar" 179s response.remote_ip + returns "127.0.0.1" 179s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 179s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 179s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 179s POST /body-sink 179s response.body + returns "5000000" 179s empty body + returns "0" 179s POST /echo 179s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 179s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 179s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 179s with multi-byte strings 179s + properly concatenates request+headers and body 179s PUT /echo 179s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 179s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 179s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 179s with multi-byte strings 179s + properly concatenates request+headers and body 179s should succeed with tcp_nodelay + returns 200 179s with frozen args + returns 200 179s with user/pass on request + returns 200 179s with user/pass on connection and request + returns 200 179s 179s Excon basics (Basic Auth Fail) 179s response.status for correct user, no password + returns 401 179s response.status for correct user, wrong password + returns 401 179s response.status for wrong user, correct password + returns 401 179s 179s Excon basics (ssl) 180s + returns true 180s nonblock => true, persistent => false 180s method and path defaults 180s request().body + returns "GET /" 180s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 180s request(:method => :get).body + returns "GET /" 180s request(:path => '/').body + returns "GET /" 180s request(:method => :get, :path => '/').body + returns "GET /" 180s GET /content-length/100 180s response.status + returns 200 180s response[:status] + returns 200 180s response.headers['Content-Length'] + returns "100" 180s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 180s + Time.parse(response.headers['Date']).is_a?(Time) 180s + !!(response.headers['Server'] =~ /^WEBrick/) 180s response.headers['Custom'] + returns "Foo: bar" 180s response.remote_ip + returns "127.0.0.1" 180s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 180s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 180s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 180s POST /body-sink 180s response.body + returns "5000000" 180s empty body + returns "0" 180s POST /echo 181s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 181s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 181s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 181s with multi-byte strings 181s + properly concatenates request+headers and body 181s PUT /echo 181s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 181s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 181s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 181s with multi-byte strings 181s + properly concatenates request+headers and body 181s should succeed with tcp_nodelay + returns 200 181s + returns true 181s nonblock => true, persistent => true 181s method and path defaults 181s request().body + returns "GET /" 181s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 181s request(:method => :get).body + returns "GET /" 181s request(:path => '/').body + returns "GET /" 181s request(:method => :get, :path => '/').body + returns "GET /" 181s GET /content-length/100 181s response.status + returns 200 181s response[:status] + returns 200 181s response.headers['Content-Length'] + returns "100" 181s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 181s + Time.parse(response.headers['Date']).is_a?(Time) 181s + !!(response.headers['Server'] =~ /^WEBrick/) 181s response.headers['Custom'] + returns "Foo: bar" 181s response.remote_ip + returns "127.0.0.1" 181s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 181s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 181s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 181s POST /body-sink 182s response.body + returns "5000000" 182s empty body + returns "0" 182s POST /echo 182s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 182s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 182s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 182s with multi-byte strings 182s + properly concatenates request+headers and body 182s PUT /echo 182s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 182s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 182s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 182s with multi-byte strings 182s + properly concatenates request+headers and body 182s should succeed with tcp_nodelay + returns 200 182s + returns true 182s nonblock => false, persistent => true 182s method and path defaults 182s request().body + returns "GET /" 182s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 182s request(:method => :get).body + returns "GET /" 182s request(:path => '/').body + returns "GET /" 182s request(:method => :get, :path => '/').body + returns "GET /" 182s GET /content-length/100 182s response.status + returns 200 182s response[:status] + returns 200 182s response.headers['Content-Length'] + returns "100" 182s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 182s + Time.parse(response.headers['Date']).is_a?(Time) 182s + !!(response.headers['Server'] =~ /^WEBrick/) 182s response.headers['Custom'] + returns "Foo: bar" 182s response.remote_ip + returns "127.0.0.1" 182s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 182s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 182s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 182s POST /body-sink 182s response.body + returns "5000000" 182s empty body + returns "0" 182s POST /echo 182s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 183s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 183s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 183s with multi-byte strings 183s + properly concatenates request+headers and body 183s PUT /echo 183s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 183s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 183s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 183s with multi-byte strings 183s + properly concatenates request+headers and body 183s should succeed with tcp_nodelay + returns 200 183s + returns true 183s nonblock => false, persistent => false 183s method and path defaults 183s request().body + returns "GET /" 183s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 183s request(:method => :get).body + returns "GET /" 183s request(:path => '/').body + returns "GET /" 183s request(:method => :get, :path => '/').body + returns "GET /" 183s GET /content-length/100 183s response.status + returns 200 183s response[:status] + returns 200 183s response.headers['Content-Length'] + returns "100" 183s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 183s + Time.parse(response.headers['Date']).is_a?(Time) 183s + !!(response.headers['Server'] =~ /^WEBrick/) 183s response.headers['Custom'] + returns "Foo: bar" 183s response.remote_ip + returns "127.0.0.1" 183s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 183s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 183s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 183s POST /body-sink 183s response.body + returns "5000000" 183s empty body + returns "0" 183s POST /echo 183s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 183s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 184s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 184s with multi-byte strings 184s + properly concatenates request+headers and body 184s PUT /echo 184s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 184s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 184s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 184s with multi-byte strings 184s + properly concatenates request+headers and body 184s should succeed with tcp_nodelay + returns 200 184s 184s [2026-02-03 21:11:59] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 184s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 184s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 184s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 184s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 184s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 184s 184s [2026-02-03 21:11:59] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 184s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 184s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 184s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 184s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 184s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 184s 184s Excon basics verify_hostname (ssl) 184s + returns true 184s response.status + returns 200 184s 184s Excon ssl verify peer (ssl) 185s + returns true 185s response.status + returns 200 185s + returns true 185s response.status + returns 200 186s + returns true 186s response.status + returns 200 186s 186s Excon ssl verify peer (ssl cert store) 186s + returns true 186s response.status + returns 200 186s 186s Excon basics (ssl file) (focus) 187s GET /content-length/100 + raises Excon::Error::Socket 187s + returns true 187s nonblock => true, persistent => false 187s method and path defaults 187s request().body + returns "GET /" 187s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 187s request(:method => :get).body + returns "GET /" 187s request(:path => '/').body + returns "GET /" 187s request(:method => :get, :path => '/').body + returns "GET /" 187s GET /content-length/100 187s response.status + returns 200 187s response[:status] + returns 200 187s response.headers['Content-Length'] + returns "100" 187s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 187s + Time.parse(response.headers['Date']).is_a?(Time) 187s + !!(response.headers['Server'] =~ /^WEBrick/) 187s response.headers['Custom'] + returns "Foo: bar" 187s response.remote_ip + returns "127.0.0.1" 187s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 187s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 187s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 187s POST /body-sink 187s response.body + returns "5000000" 188s empty body + returns "0" 188s POST /echo 188s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 188s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 188s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 188s with multi-byte strings 188s + properly concatenates request+headers and body 188s PUT /echo 188s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 188s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 188s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 188s with multi-byte strings 188s + properly concatenates request+headers and body 188s should succeed with tcp_nodelay + returns 200 188s + returns true 188s nonblock => true, persistent => true 188s method and path defaults 188s request().body + returns "GET /" 188s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 188s request(:method => :get).body + returns "GET /" 188s request(:path => '/').body + returns "GET /" 188s request(:method => :get, :path => '/').body + returns "GET /" 188s GET /content-length/100 188s response.status + returns 200 188s response[:status] + returns 200 188s response.headers['Content-Length'] + returns "100" 188s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 188s + Time.parse(response.headers['Date']).is_a?(Time) 188s + !!(response.headers['Server'] =~ /^WEBrick/) 188s response.headers['Custom'] + returns "Foo: bar" 188s response.remote_ip + returns "127.0.0.1" 188s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 189s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 189s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 189s POST /body-sink 189s response.body + returns "5000000" 189s empty body + returns "0" 189s POST /echo 189s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 189s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 189s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 189s with multi-byte strings 189s + properly concatenates request+headers and body 189s PUT /echo 189s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 189s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 189s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 189s with multi-byte strings 189s + properly concatenates request+headers and body 189s should succeed with tcp_nodelay + returns 200 189s + returns true 189s nonblock => false, persistent => true 189s method and path defaults 189s request().body + returns "GET /" 189s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 189s request(:method => :get).body + returns "GET /" 189s request(:path => '/').body + returns "GET /" 189s request(:method => :get, :path => '/').body + returns "GET /" 189s GET /content-length/100 189s response.status + returns 200 189s response[:status] + returns 200 189s response.headers['Content-Length'] + returns "100" 189s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 189s + Time.parse(response.headers['Date']).is_a?(Time) 189s + !!(response.headers['Server'] =~ /^WEBrick/) 189s response.headers['Custom'] + returns "Foo: bar" 189s response.remote_ip + returns "127.0.0.1" 189s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 189s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 189s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 189s POST /body-sink 190s response.body + returns "5000000" 190s empty body + returns "0" 190s POST /echo 190s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 190s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 190s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 190s with multi-byte strings 190s + properly concatenates request+headers and body 190s PUT /echo 190s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 190s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 190s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 190s with multi-byte strings 190s + properly concatenates request+headers and body 190s should succeed with tcp_nodelay + returns 200 190s + returns true 190s nonblock => false, persistent => false 190s method and path defaults 190s request().body + returns "GET /" 190s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 190s request(:method => :get).body + returns "GET /" 190s request(:path => '/').body + returns "GET /" 190s request(:method => :get, :path => '/').body + returns "GET /" 190s GET /content-length/100 190s response.status + returns 200 190s response[:status] + returns 200 190s response.headers['Content-Length'] + returns "100" 190s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 190s + Time.parse(response.headers['Date']).is_a?(Time) 190s + !!(response.headers['Server'] =~ /^WEBrick/) 190s response.headers['Custom'] + returns "Foo: bar" 190s response.remote_ip + returns "127.0.0.1" 190s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 190s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 190s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 190s POST /body-sink 191s response.body + returns "5000000" 191s empty body + returns "0" 191s POST /echo 191s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 191s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 191s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 191s with multi-byte strings 191s + properly concatenates request+headers and body 191s PUT /echo 191s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 191s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 191s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 191s with multi-byte strings 191s + properly concatenates request+headers and body 191s should succeed with tcp_nodelay + returns 200 191s + returns true 191s nonblock => true, persistent => false 191s method and path defaults 191s request().body + returns "GET /" 191s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 191s request(:method => :get).body + returns "GET /" 191s request(:path => '/').body + returns "GET /" 191s request(:method => :get, :path => '/').body + returns "GET /" 191s GET /content-length/100 191s response.status + returns 200 191s response[:status] + returns 200 191s response.headers['Content-Length'] + returns "100" 191s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 191s + Time.parse(response.headers['Date']).is_a?(Time) 191s + !!(response.headers['Server'] =~ /^WEBrick/) 191s response.headers['Custom'] + returns "Foo: bar" 191s response.remote_ip + returns "127.0.0.1" 191s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 192s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 192s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 192s POST /body-sink 192s response.body + returns "5000000" 192s empty body + returns "0" 192s POST /echo 192s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 192s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 192s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 192s with multi-byte strings 192s + properly concatenates request+headers and body 192s PUT /echo 192s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 192s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 192s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 192s with multi-byte strings 192s + properly concatenates request+headers and body 192s should succeed with tcp_nodelay + returns 200 192s + returns true 192s nonblock => true, persistent => true 192s method and path defaults 192s request().body + returns "GET /" 193s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 193s request(:method => :get).body + returns "GET /" 193s request(:path => '/').body + returns "GET /" 193s request(:method => :get, :path => '/').body + returns "GET /" 193s GET /content-length/100 193s response.status + returns 200 193s response[:status] + returns 200 193s response.headers['Content-Length'] + returns "100" 193s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 193s + Time.parse(response.headers['Date']).is_a?(Time) 193s + !!(response.headers['Server'] =~ /^WEBrick/) 193s response.headers['Custom'] + returns "Foo: bar" 193s response.remote_ip + returns "127.0.0.1" 193s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 193s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 193s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 193s POST /body-sink 193s response.body + returns "5000000" 193s empty body + returns "0" 193s POST /echo 193s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 193s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 193s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 193s with multi-byte strings 193s + properly concatenates request+headers and body 193s PUT /echo 193s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 193s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 193s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 193s with multi-byte strings 193s + properly concatenates request+headers and body 193s should succeed with tcp_nodelay + returns 200 193s + returns true 193s nonblock => false, persistent => true 193s method and path defaults 193s request().body + returns "GET /" 193s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 193s request(:method => :get).body + returns "GET /" 194s request(:path => '/').body + returns "GET /" 194s request(:method => :get, :path => '/').body + returns "GET /" 194s GET /content-length/100 194s response.status + returns 200 194s response[:status] + returns 200 194s response.headers['Content-Length'] + returns "100" 194s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 194s + Time.parse(response.headers['Date']).is_a?(Time) 194s + !!(response.headers['Server'] =~ /^WEBrick/) 194s response.headers['Custom'] + returns "Foo: bar" 194s response.remote_ip + returns "127.0.0.1" 194s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 194s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 194s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 194s POST /body-sink 194s response.body + returns "5000000" 194s empty body + returns "0" 194s POST /echo 194s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 194s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 194s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 194s with multi-byte strings 194s + properly concatenates request+headers and body 194s PUT /echo 194s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 194s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 194s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 194s with multi-byte strings 194s + properly concatenates request+headers and body 194s should succeed with tcp_nodelay + returns 200 194s + returns true 194s nonblock => false, persistent => false 194s method and path defaults 194s request().body + returns "GET /" 194s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 194s request(:method => :get).body + returns "GET /" 194s request(:path => '/').body + returns "GET /" 194s request(:method => :get, :path => '/').body + returns "GET /" 194s GET /content-length/100 195s response.status + returns 200 195s response[:status] + returns 200 195s response.headers['Content-Length'] + returns "100" 195s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 195s + Time.parse(response.headers['Date']).is_a?(Time) 195s + !!(response.headers['Server'] =~ /^WEBrick/) 195s response.headers['Custom'] + returns "Foo: bar" 195s response.remote_ip + returns "127.0.0.1" 195s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 195s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 195s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 195s POST /body-sink 195s response.body + returns "5000000" 195s empty body + returns "0" 195s POST /echo 195s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 195s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 195s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 195s with multi-byte strings 195s + properly concatenates request+headers and body 195s PUT /echo 195s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 195s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 195s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 195s with multi-byte strings 195s + properly concatenates request+headers and body 195s should succeed with tcp_nodelay + returns 200 195s 195s [2026-02-03 21:12:07] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 195s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 195s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 195s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 195s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 195s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 195s 195s [2026-02-03 21:12:07] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 195s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 195s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 195s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 195s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 195s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 195s 195s [2026-02-03 21:12:08] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 195s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 195s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 195s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 195s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 195s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 195s 195s [2026-02-03 21:12:08] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 195s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 195s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 195s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 195s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 195s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 195s 195s [2026-02-03 21:12:09] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 195s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 195s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 195s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 195s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 195s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 195s 195s [2026-02-03 21:12:10] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 195s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 195s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 195s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 195s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 195s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 195s 195s Excon basics (ssl chain) (focus) 196s GET /content-length/100 + raises Excon::Error::Socket 196s + returns true 196s nonblock => true, persistent => false 196s method and path defaults 196s request().body + returns "GET /" 196s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 196s request(:method => :get).body + returns "GET /" 196s request(:path => '/').body + returns "GET /" 196s request(:method => :get, :path => '/').body + returns "GET /" 196s GET /content-length/100 196s response.status + returns 200 196s response[:status] + returns 200 196s response.headers['Content-Length'] + returns "100" 196s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 196s + Time.parse(response.headers['Date']).is_a?(Time) 196s + !!(response.headers['Server'] =~ /^WEBrick/) 196s response.headers['Custom'] + returns "Foo: bar" 196s response.remote_ip + returns "127.0.0.1" 196s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 196s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 196s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 196s POST /body-sink 196s response.body + returns "5000000" 197s empty body + returns "0" 197s POST /echo 197s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 197s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 197s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 197s with multi-byte strings 197s + properly concatenates request+headers and body 197s PUT /echo 197s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 197s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 197s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 197s with multi-byte strings 197s + properly concatenates request+headers and body 197s should succeed with tcp_nodelay + returns 200 197s + returns true 197s nonblock => true, persistent => true 197s method and path defaults 197s request().body + returns "GET /" 197s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 197s request(:method => :get).body + returns "GET /" 197s request(:path => '/').body + returns "GET /" 197s request(:method => :get, :path => '/').body + returns "GET /" 197s GET /content-length/100 197s response.status + returns 200 197s response[:status] + returns 200 197s response.headers['Content-Length'] + returns "100" 197s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 197s + Time.parse(response.headers['Date']).is_a?(Time) 197s + !!(response.headers['Server'] =~ /^WEBrick/) 197s response.headers['Custom'] + returns "Foo: bar" 197s response.remote_ip + returns "127.0.0.1" 197s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 197s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 197s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 197s POST /body-sink 198s response.body + returns "5000000" 198s empty body + returns "0" 198s POST /echo 198s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 198s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 198s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 198s with multi-byte strings 198s + properly concatenates request+headers and body 198s PUT /echo 198s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 198s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 198s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 198s with multi-byte strings 198s + properly concatenates request+headers and body 198s should succeed with tcp_nodelay + returns 200 198s + returns true 198s nonblock => false, persistent => true 198s method and path defaults 198s request().body + returns "GET /" 198s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 198s request(:method => :get).body + returns "GET /" 198s request(:path => '/').body + returns "GET /" 198s request(:method => :get, :path => '/').body + returns "GET /" 198s GET /content-length/100 198s response.status + returns 200 198s response[:status] + returns 200 198s response.headers['Content-Length'] + returns "100" 198s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 198s + Time.parse(response.headers['Date']).is_a?(Time) 198s + !!(response.headers['Server'] =~ /^WEBrick/) 198s response.headers['Custom'] + returns "Foo: bar" 198s response.remote_ip + returns "127.0.0.1" 198s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 198s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 198s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 198s POST /body-sink 199s response.body + returns "5000000" 199s empty body + returns "0" 199s POST /echo 199s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 199s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 199s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 199s with multi-byte strings 199s + properly concatenates request+headers and body 199s PUT /echo 199s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 199s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 199s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 199s with multi-byte strings 199s + properly concatenates request+headers and body 199s should succeed with tcp_nodelay + returns 200 199s + returns true 199s nonblock => false, persistent => false 199s method and path defaults 199s request().body + returns "GET /" 199s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 199s request(:method => :get).body + returns "GET /" 199s request(:path => '/').body + returns "GET /" 199s request(:method => :get, :path => '/').body + returns "GET /" 199s GET /content-length/100 199s response.status + returns 200 199s response[:status] + returns 200 199s response.headers['Content-Length'] + returns "100" 199s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 199s + Time.parse(response.headers['Date']).is_a?(Time) 199s + !!(response.headers['Server'] =~ /^WEBrick/) 199s response.headers['Custom'] + returns "Foo: bar" 199s response.remote_ip + returns "127.0.0.1" 199s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 199s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 199s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 199s POST /body-sink 200s response.body + returns "5000000" 200s empty body + returns "0" 200s POST /echo 200s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 200s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 200s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 200s with multi-byte strings 200s + properly concatenates request+headers and body 200s PUT /echo 200s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 200s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 200s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 200s with multi-byte strings 200s + properly concatenates request+headers and body 200s should succeed with tcp_nodelay + returns 200 200s + returns true 200s nonblock => true, persistent => false 200s method and path defaults 200s request().body + returns "GET /" 200s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 200s request(:method => :get).body + returns "GET /" 200s request(:path => '/').body + returns "GET /" 200s request(:method => :get, :path => '/').body + returns "GET /" 200s GET /content-length/100 201s response.status + returns 200 201s response[:status] + returns 200 201s response.headers['Content-Length'] + returns "100" 201s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 201s + Time.parse(response.headers['Date']).is_a?(Time) 201s + !!(response.headers['Server'] =~ /^WEBrick/) 201s response.headers['Custom'] + returns "Foo: bar" 201s response.remote_ip + returns "127.0.0.1" 201s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 201s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 201s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 201s POST /body-sink 201s response.body + returns "5000000" 201s empty body + returns "0" 201s POST /echo 201s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 201s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 201s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 201s with multi-byte strings 201s + properly concatenates request+headers and body 201s PUT /echo 201s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 201s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 201s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 201s with multi-byte strings 201s + properly concatenates request+headers and body 201s should succeed with tcp_nodelay + returns 200 201s + returns true 201s nonblock => true, persistent => true 201s method and path defaults 201s request().body + returns "GET /" 201s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 201s request(:method => :get).body + returns "GET /" 201s request(:path => '/').body + returns "GET /" 202s request(:method => :get, :path => '/').body + returns "GET /" 202s GET /content-length/100 202s response.status + returns 200 202s response[:status] + returns 200 202s response.headers['Content-Length'] + returns "100" 202s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 202s + Time.parse(response.headers['Date']).is_a?(Time) 202s + !!(response.headers['Server'] =~ /^WEBrick/) 202s response.headers['Custom'] + returns "Foo: bar" 202s response.remote_ip + returns "127.0.0.1" 202s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 202s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 202s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 202s POST /body-sink 202s response.body + returns "5000000" 202s empty body + returns "0" 202s POST /echo 202s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 202s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 202s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 202s with multi-byte strings 202s + properly concatenates request+headers and body 202s PUT /echo 202s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 202s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 202s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 202s with multi-byte strings 202s + properly concatenates request+headers and body 202s should succeed with tcp_nodelay + returns 200 202s + returns true 202s nonblock => false, persistent => true 202s method and path defaults 202s request().body + returns "GET /" 202s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 202s request(:method => :get).body + returns "GET /" 202s request(:path => '/').body + returns "GET /" 202s request(:method => :get, :path => '/').body + returns "GET /" 202s GET /content-length/100 202s response.status + returns 200 202s response[:status] + returns 200 202s response.headers['Content-Length'] + returns "100" 202s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 202s + Time.parse(response.headers['Date']).is_a?(Time) 202s + !!(response.headers['Server'] =~ /^WEBrick/) 202s response.headers['Custom'] + returns "Foo: bar" 202s response.remote_ip + returns "127.0.0.1" 202s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 203s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 203s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 203s POST /body-sink 203s response.body + returns "5000000" 203s empty body + returns "0" 203s POST /echo 203s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 203s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 203s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 203s with multi-byte strings 203s + properly concatenates request+headers and body 203s PUT /echo 203s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 203s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 203s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 203s with multi-byte strings 203s + properly concatenates request+headers and body 203s should succeed with tcp_nodelay + returns 200 203s + returns true 203s nonblock => false, persistent => false 203s method and path defaults 203s request().body + returns "GET /" 203s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 203s request(:method => :get).body + returns "GET /" 203s request(:path => '/').body + returns "GET /" 203s request(:method => :get, :path => '/').body + returns "GET /" 203s GET /content-length/100 203s response.status + returns 200 203s response[:status] + returns 200 203s response.headers['Content-Length'] + returns "100" 203s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 203s + Time.parse(response.headers['Date']).is_a?(Time) 203s + !!(response.headers['Server'] =~ /^WEBrick/) 203s response.headers['Custom'] + returns "Foo: bar" 203s response.remote_ip + returns "127.0.0.1" 203s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 204s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 204s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 204s POST /body-sink 204s response.body + returns "5000000" 204s empty body + returns "0" 204s POST /echo 204s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 204s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 204s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 204s with multi-byte strings 204s + properly concatenates request+headers and body 204s PUT /echo 204s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 204s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 204s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 204s with multi-byte strings 204s + properly concatenates request+headers and body 204s should succeed with tcp_nodelay + returns 200 204s 204s [2026-02-03 21:12:15] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 204s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 204s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 204s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 204s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 204s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 204s 204s [2026-02-03 21:12:16] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 204s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 204s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 204s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 204s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 204s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 204s 204s [2026-02-03 21:12:17] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 204s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 204s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 204s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 204s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 204s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 204s 204s [2026-02-03 21:12:17] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 204s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 204s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 204s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 204s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 204s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 204s 204s [2026-02-03 21:12:20] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 204s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 204s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 204s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 204s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 204s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 204s 204s [2026-02-03 21:12:20] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 204s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 204s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 204s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 204s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 204s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 204s 204s [2026-02-03 21:12:20] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 204s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 204s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 204s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 204s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 204s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 204s 204s Excon basics (ssl file paths) (focus) 205s GET /content-length/100 + raises Excon::Error::Socket 205s + returns true 205s nonblock => true, persistent => false 205s method and path defaults 205s request().body + returns "GET /" 205s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 205s request(:method => :get).body + returns "GET /" 205s request(:path => '/').body + returns "GET /" 205s request(:method => :get, :path => '/').body + returns "GET /" 205s GET /content-length/100 205s response.status + returns 200 205s response[:status] + returns 200 205s response.headers['Content-Length'] + returns "100" 205s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 205s + Time.parse(response.headers['Date']).is_a?(Time) 205s + !!(response.headers['Server'] =~ /^WEBrick/) 205s response.headers['Custom'] + returns "Foo: bar" 205s response.remote_ip + returns "127.0.0.1" 205s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 205s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 205s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 205s POST /body-sink 205s response.body + returns "5000000" 205s empty body + returns "0" 205s POST /echo 205s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 205s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 206s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 206s with multi-byte strings 206s + properly concatenates request+headers and body 206s PUT /echo 206s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 206s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 206s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 206s with multi-byte strings 206s + properly concatenates request+headers and body 206s should succeed with tcp_nodelay + returns 200 206s + returns true 206s nonblock => true, persistent => true 206s method and path defaults 206s request().body + returns "GET /" 206s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 206s request(:method => :get).body + returns "GET /" 206s request(:path => '/').body + returns "GET /" 206s request(:method => :get, :path => '/').body + returns "GET /" 206s GET /content-length/100 206s response.status + returns 200 206s response[:status] + returns 200 206s response.headers['Content-Length'] + returns "100" 206s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 206s + Time.parse(response.headers['Date']).is_a?(Time) 206s + !!(response.headers['Server'] =~ /^WEBrick/) 206s response.headers['Custom'] + returns "Foo: bar" 206s response.remote_ip + returns "127.0.0.1" 206s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 206s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 206s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 206s POST /body-sink 206s response.body + returns "5000000" 206s empty body + returns "0" 206s POST /echo 206s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 206s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 207s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 207s with multi-byte strings 207s + properly concatenates request+headers and body 207s PUT /echo 207s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 207s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 207s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 207s with multi-byte strings 207s + properly concatenates request+headers and body 207s should succeed with tcp_nodelay + returns 200 207s + returns true 207s nonblock => false, persistent => true 207s method and path defaults 207s request().body + returns "GET /" 207s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 207s request(:method => :get).body + returns "GET /" 207s request(:path => '/').body + returns "GET /" 207s request(:method => :get, :path => '/').body + returns "GET /" 207s GET /content-length/100 207s response.status + returns 200 207s response[:status] + returns 200 207s response.headers['Content-Length'] + returns "100" 207s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 207s + Time.parse(response.headers['Date']).is_a?(Time) 207s + !!(response.headers['Server'] =~ /^WEBrick/) 207s response.headers['Custom'] + returns "Foo: bar" 207s response.remote_ip + returns "127.0.0.1" 207s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 207s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 207s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 207s POST /body-sink 207s response.body + returns "5000000" 207s empty body + returns "0" 207s POST /echo 207s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 207s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 207s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 207s with multi-byte strings 208s + properly concatenates request+headers and body 208s PUT /echo 208s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 208s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 208s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 208s with multi-byte strings 208s + properly concatenates request+headers and body 208s should succeed with tcp_nodelay + returns 200 208s + returns true 208s nonblock => false, persistent => false 208s method and path defaults 208s request().body + returns "GET /" 208s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 208s request(:method => :get).body + returns "GET /" 208s request(:path => '/').body + returns "GET /" 208s request(:method => :get, :path => '/').body + returns "GET /" 208s GET /content-length/100 208s response.status + returns 200 208s response[:status] + returns 200 208s response.headers['Content-Length'] + returns "100" 208s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 208s + Time.parse(response.headers['Date']).is_a?(Time) 208s + !!(response.headers['Server'] =~ /^WEBrick/) 208s response.headers['Custom'] + returns "Foo: bar" 208s response.remote_ip + returns "127.0.0.1" 208s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 208s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 208s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 208s POST /body-sink 208s response.body + returns "5000000" 208s empty body + returns "0" 208s POST /echo 208s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 209s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 209s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 209s with multi-byte strings 209s + properly concatenates request+headers and body 209s PUT /echo 209s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 209s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 209s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 209s with multi-byte strings 209s + properly concatenates request+headers and body 209s should succeed with tcp_nodelay + returns 200 209s 209s [2026-02-03 21:12:23] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 209s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 209s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 209s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 209s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 209s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 209s 209s [2026-02-03 21:12:24] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 209s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 209s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 209s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 209s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 209s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 209s 209s Excon basics (ssl string) (focus) 209s + returns true 209s nonblock => true, persistent => false 209s method and path defaults 209s request().body + returns "GET /" 209s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 210s request(:method => :get).body + returns "GET /" 210s request(:path => '/').body + returns "GET /" 210s request(:method => :get, :path => '/').body + returns "GET /" 210s GET /content-length/100 210s response.status + returns 200 210s response[:status] + returns 200 210s response.headers['Content-Length'] + returns "100" 210s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 210s + Time.parse(response.headers['Date']).is_a?(Time) 210s + !!(response.headers['Server'] =~ /^WEBrick/) 210s response.headers['Custom'] + returns "Foo: bar" 210s response.remote_ip + returns "127.0.0.1" 210s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 210s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 210s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 210s POST /body-sink 210s response.body + returns "5000000" 210s empty body + returns "0" 210s POST /echo 210s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 210s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 210s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 210s with multi-byte strings 210s + properly concatenates request+headers and body 210s PUT /echo 210s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 210s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 210s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 210s with multi-byte strings 210s + properly concatenates request+headers and body 211s should succeed with tcp_nodelay + returns 200 211s + returns true 211s nonblock => true, persistent => true 211s method and path defaults 211s request().body + returns "GET /" 211s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 211s request(:method => :get).body + returns "GET /" 211s request(:path => '/').body + returns "GET /" 211s request(:method => :get, :path => '/').body + returns "GET /" 211s GET /content-length/100 211s response.status + returns 200 211s response[:status] + returns 200 211s response.headers['Content-Length'] + returns "100" 211s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 211s + Time.parse(response.headers['Date']).is_a?(Time) 211s + !!(response.headers['Server'] =~ /^WEBrick/) 211s response.headers['Custom'] + returns "Foo: bar" 211s response.remote_ip + returns "127.0.0.1" 211s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 211s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 211s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 211s POST /body-sink 211s response.body + returns "5000000" 211s empty body + returns "0" 211s POST /echo 211s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 211s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 211s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 211s with multi-byte strings 211s + properly concatenates request+headers and body 211s PUT /echo 211s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 211s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 211s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 211s with multi-byte strings 211s + properly concatenates request+headers and body 211s should succeed with tcp_nodelay + returns 200 211s + returns true 211s nonblock => false, persistent => true 211s method and path defaults 212s request().body + returns "GET /" 212s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 212s request(:method => :get).body + returns "GET /" 212s request(:path => '/').body + returns "GET /" 212s request(:method => :get, :path => '/').body + returns "GET /" 212s GET /content-length/100 212s response.status + returns 200 212s response[:status] + returns 200 212s response.headers['Content-Length'] + returns "100" 212s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 212s + Time.parse(response.headers['Date']).is_a?(Time) 212s + !!(response.headers['Server'] =~ /^WEBrick/) 212s response.headers['Custom'] + returns "Foo: bar" 212s response.remote_ip + returns "127.0.0.1" 212s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 212s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 212s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 212s POST /body-sink 212s response.body + returns "5000000" 212s empty body + returns "0" 212s POST /echo 212s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 212s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 212s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 212s with multi-byte strings 212s + properly concatenates request+headers and body 212s PUT /echo 212s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 212s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 212s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 212s with multi-byte strings 212s + properly concatenates request+headers and body 212s should succeed with tcp_nodelay + returns 200 212s + returns true 212s nonblock => false, persistent => false 212s method and path defaults 212s request().body + returns "GET /" 212s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 213s request(:method => :get).body + returns "GET /" 213s request(:path => '/').body + returns "GET /" 213s request(:method => :get, :path => '/').body + returns "GET /" 213s GET /content-length/100 213s response.status + returns 200 213s response[:status] + returns 200 213s response.headers['Content-Length'] + returns "100" 213s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 213s + Time.parse(response.headers['Date']).is_a?(Time) 213s + !!(response.headers['Server'] =~ /^WEBrick/) 213s response.headers['Custom'] + returns "Foo: bar" 213s response.remote_ip + returns "127.0.0.1" 213s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 213s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 213s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 213s POST /body-sink 213s response.body + returns "5000000" 213s empty body + returns "0" 213s POST /echo 213s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 213s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 213s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 213s with multi-byte strings 213s + properly concatenates request+headers and body 213s PUT /echo 213s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 213s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 213s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 213s with multi-byte strings 213s + properly concatenates request+headers and body 213s should succeed with tcp_nodelay + returns 200 213s 213s [2026-02-03 21:12:29] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 213s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 213s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 213s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 213s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 213s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 213s 213s [2026-02-03 21:12:29] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 213s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 213s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 213s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 213s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 213s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 213s 213s Excon basics (Unix socket) 214s + returns true 214s nonblock => true, persistent => false 214s method and path defaults 214s request().body + returns "GET /" 214s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 214s request(:method => :get).body + returns "GET /" 214s request(:path => '/').body + returns "GET /" 214s request(:method => :get, :path => '/').body + returns "GET /" 214s GET /content-length/100 214s response.status + returns 200 214s response[:status] + returns 200 214s response.headers['Content-Length'] + returns "100" 214s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 214s # Time.parse(response.headers['Date']).is_a?(Time) 214s # !!(response.headers['Server'] =~ /^WEBrick/) 214s response.headers['Custom'] + returns "Foo: bar" 214s response.remote_ip # returns "127.0.0.1" 214s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 214s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 214s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 214s POST /body-sink 214s response.body + returns "5000000" 214s empty body + returns "0" 214s POST /echo 214s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 214s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 214s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 214s with multi-byte strings 214s + properly concatenates request+headers and body 214s PUT /echo 214s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 214s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 214s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 214s with multi-byte strings 214s + properly concatenates request+headers and body 214s should succeed with tcp_nodelay + returns 200 214s + returns true 214s nonblock => true, persistent => true 214s method and path defaults 214s request().body + returns "GET /" 214s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 214s request(:method => :get).body + returns "GET /" 214s request(:path => '/').body + returns "GET /" 214s request(:method => :get, :path => '/').body + returns "GET /" 214s GET /content-length/100 214s response.status + returns 200 214s response[:status] + returns 200 214s response.headers['Content-Length'] + returns "100" 214s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 214s # Time.parse(response.headers['Date']).is_a?(Time) 214s # !!(response.headers['Server'] =~ /^WEBrick/) 214s response.headers['Custom'] + returns "Foo: bar" 214s response.remote_ip # returns "127.0.0.1" 214s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 214s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 214s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 214s POST /body-sink 214s response.body + returns "5000000" 214s empty body + returns "0" 214s POST /echo 214s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 214s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 214s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 214s with multi-byte strings 214s + properly concatenates request+headers and body 214s PUT /echo 214s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 214s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 214s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 214s with multi-byte strings 214s + properly concatenates request+headers and body 214s should succeed with tcp_nodelay + returns 200 214s + returns true 214s nonblock => false, persistent => true 214s method and path defaults 214s request().body + returns "GET /" 214s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 214s request(:method => :get).body + returns "GET /" 214s request(:path => '/').body + returns "GET /" 214s request(:method => :get, :path => '/').body + returns "GET /" 214s GET /content-length/100 214s response.status + returns 200 214s response[:status] + returns 200 214s response.headers['Content-Length'] + returns "100" 214s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 214s # Time.parse(response.headers['Date']).is_a?(Time) 214s # !!(response.headers['Server'] =~ /^WEBrick/) 214s response.headers['Custom'] + returns "Foo: bar" 214s response.remote_ip # returns "127.0.0.1" 214s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 214s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 214s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 214s POST /body-sink 214s response.body + returns "5000000" 214s empty body + returns "0" 214s POST /echo 214s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 214s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 214s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 214s with multi-byte strings 214s + properly concatenates request+headers and body 214s PUT /echo 214s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 214s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 214s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 214s with multi-byte strings 214s + properly concatenates request+headers and body 214s should succeed with tcp_nodelay + returns 200 214s + returns true 214s nonblock => false, persistent => false 214s method and path defaults 214s request().body + returns "GET /" 214s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 214s request(:method => :get).body + returns "GET /" 214s request(:path => '/').body + returns "GET /" 214s request(:method => :get, :path => '/').body + returns "GET /" 214s GET /content-length/100 214s response.status + returns 200 214s response[:status] + returns 200 214s response.headers['Content-Length'] + returns "100" 214s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 214s # Time.parse(response.headers['Date']).is_a?(Time) 214s # !!(response.headers['Server'] =~ /^WEBrick/) 214s response.headers['Custom'] + returns "Foo: bar" 214s response.remote_ip # returns "127.0.0.1" 214s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 214s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 214s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 214s POST /body-sink 214s response.body + returns "5000000" 214s empty body + returns "0" 214s POST /echo 214s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 214s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 214s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 214s with multi-byte strings 214s + properly concatenates request+headers and body 214s PUT /echo 214s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 214s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 214s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 214s with multi-byte strings 214s + properly concatenates request+headers and body 214s should succeed with tcp_nodelay + returns 200 214s explicit uri passed to connection 214s GET /content-length/100 + returns 200 214s http Host header is empty 214s GET /headers + returns "" 214s 214s Excon basics (reusable local port) (localportreuse) 215s has a local port + returns true 215s local port can be re-bound + returns "xxxxxxxxxx" 215s 215s Excon Connection 215s #socket connects, sets data[:remote_ip] + returns "127.0.0.1" 215s persistent connections 215s + successful uninterrupted request 215s + resets connection after interrupt 215s + fork safety 215s inspect redaction 215s + authorization/proxy-authorization headers concealed for user & pass 215s + password param concealed for user & pass 215s + password param not mutated for user & pass 215s + proxy password param concealed for proxy: user & pass 215s + proxy password param not mutated for proxy: user & pass 215s + authorization/proxy-authorization headers concealed for email & pass 215s + password param concealed for email & pass 215s + password param not mutated for email & pass 215s + proxy password param concealed for proxy: email & pass 215s + proxy password param not mutated for proxy: email & pass 215s + authorization/proxy-authorization headers concealed for user no pass 215s + authorization/proxy-authorization headers concealed for pass no user 215s + password param concealed for pass no user 215s + password param not mutated for pass no user 215s + proxy password param concealed for proxy: pass no user 215s + proxy password param not mutated for proxy: pass no user 215s + initialization 215s 215s HTTPStatusError request/response debugging 215s Excon::Error knows about pertinent errors 215s new returns an Error + returns true 215s new raises errors for bad URIs + returns true 215s new raises errors for bad paths + returns true 215s can raise standard error and catch standard error + returns true 215s can raise legacy errors and catch legacy errors + returns true 215s can raise standard error and catch legacy errors + returns true 215s can raise with status_error() and catch with standard error + returns true 215s can raise with status_error() and catch with legacy error + returns true 215s can raise with legacy status_error() and catch with legacy + returns true 215s can raise with legacy status_error() and catch with standard + returns true 215s message does not include response or response info + returns true 215s message includes only request info + returns true 215s message includes only response info + returns true 215s message include request and response info + returns true 215s 215s Excon response header support 215s Excon::Headers storage 215s stores and retrieves as received + returns "expected" 215s enumerates keys as received 215s contains Exact-Case + returns true 215s contains Another-Fixture + returns true 215s supports case-insensitive access + returns "expected" 215s but still returns nil for missing keys + returns nil 215s Hash methods that should support case-insensitive access 215s #assoc + returns ["exact-case", "expected"] 215s #delete 215s with just a key + returns "yes" 215s with a proc + returns "called with notpresent" 215s #fetch 215s when present + returns "expected" 215s with a default value + returns "default" 215s with a default proc + returns "got missing" 215s #has_key? 215s when present + returns true 215s when absent + returns false 215s #values_at 215s all present + returns ["expected", "another"] 215s some missing + returns ["expected", nil] 216s Response#get_header 216s with variable header capitalization 216s response.get_header("mixedcase-header") + returns "MixedCase" 216s response.get_header("uppercase-header") + returns "UPPERCASE" 216s response.get_header("lowercase-header") + returns "lowercase" 216s when provided key capitalization varies 216s response.get_header("MIXEDCASE-HEADER") + returns "MixedCase" 216s response.get_header("MiXeDcAsE-hEaDeR") + returns "MixedCase" 216s when header is unavailable 216s response.get_header("missing") + returns nil 216s 216s logging instrumentor 216s connection logger + returns true 216s connection logger with query as hash + returns true 216s 216s Excon middleware 216s succeeds without defining valid_parameter_keys 216s 216s Excon support for middlewares that return canned responses 216s does not mutate the canned response body + returns "canned" 216s yields non-mutated body to response_block + returns "canned" 216s 216s Excon redirecting with cookie preserved 216s second request will send cookies set by the first + returns "ok" 216s second request will send multiple cookies set by the first + returns "ok" 217s runs normally when there are no cookies set + returns "ok" 217s 217s Excon Decompress Middleware 217s gzip 217s response body decompressed + returns "hello world" 217s server sent content-encoding + returns "gzip" 217s removes processed encoding from header + returns "" 217s empty response body + returns "" 217s deflate 217s response body decompressed + returns "hello world" 217s server sent content-encoding + returns "deflate" 217s removes processed encoding from header + returns "" 217s deflate-raw 217s response body decompressed + returns "hello world" 217s server sent content-encoding + returns "deflate" 217s removes processed encoding from header + returns "" 217s with pre-encoding 217s server sent content-encoding + returns "other, gzip" 217s processed encoding removed from header + returns "other" 217s response body decompressed + returns "hello world" 217s with post-encoding 217s server sent content-encoding + returns "gzip, other" 217s unprocessed since last applied is unknown + returns "gzip, other" 217s response body still compressed + returns "hello world" 217s with a :response_block 217s server sent content-encoding + returns "gzip" 217s unprocessed since :response_block was used + returns "gzip" 217s :response_block passed unprocessed data + returns "hello world" 217s adds Accept-Encoding if needed 217s without a :response_block + returns "deflate, gzip" 217s with a :response_block + returns nil 217s empty content-encoding 217s succeeds + returns "body" 217s 217s Excon Decompress Middleware 217s encoded uri passed to connection 217s GET /echo%20dirty + returns 200 217s unencoded uri passed to connection 217s GET /echo dirty + returns 200 217s 217s Excon request idempotencey 217s Non-idempotent call with an erroring socket + raises Excon::Error::Socket 217s Idempotent request with socket erroring first 3 times + returns 200 217s Idempotent request with socket erroring first 5 times + raises Excon::Error::Socket 217s Lowered retry limit with socket erroring first time + returns 200 217s Lowered retry limit with socket erroring first 3 times + raises Excon::Error::Socket 217s Raised retry limit with socket erroring first 5 times + returns 200 217s Raised retry limit with socket erroring first 9 times + raises Excon::Error::Socket 217s Retry limit in constructor with socket erroring first 5 times + returns 200 218s Retry limit and sleep in constructor with socket erroring first 2 times + returns 200 218s Retry limit and sleep in constructor with socket erroring first 2 times + raises Excon::Error::Socket 218s Idempotent request with custom error first 3 times + returns 200 218s Idempotent request with custom error first 5 times + raises RuntimeError 218s Overriding default retry_errors + raises Excon::Error::Socket 218s request_block rewound + returns true 218s response_block rewound + returns true 218s 218s Excon instrumentation 218s basic notification + returns ["excon.request", "excon.response"] 218s captures scheme, host, port, and path + returns [:host, :path, :port, :scheme] 218s params in request overwrite those in constructor + returns "/cheezburger" 218s notify on retry + returns 3 218s notify on error + raises Excon::Error::Socket 218s + returns true 218s filtering + raises Excon::Error::Socket 218s + returns ["excon.request", "excon.error"] 218s more filtering + raises Excon::Error::Socket 218s + returns ["excon.retry", "excon.retry", "excon.retry"] 218s indicates duration + returns true 218s standard instrumentor 218s success + raises Excon::Error::Socket 218s + returns ["excon.request", "excon.retry", "excon.retry", "excon.retry", "excon.error"] 218s authorization header REDACT 218s + raises Excon::Error::Socket 218s + does not appear in response 218s + does not mutate Authorization value 218s password REDACT 218s + raises Excon::Error::Socket 218s + does not appear in response 218s + does not mutate password value 218s proxy password REDACT 218s + raises Excon::Error::Socket 218s + does not appear in response 218s + does not mutate password value 218s use our own instrumentor + raises Excon::Error::Socket 218s + returns ["excon.request", "excon.retry", "excon.retry", "excon.retry", "excon.error"] 218s always passes the block + returns ["excon.request", "excon.response"] 218s does not generate events when not provided + returns 0 218s allows setting the prefix + raises Excon::Error::Socket 218s + returns ["gug.request", "gug.retry", "gug.retry", "gug.retry", "gug.error"] 218s allows setting the prefix when not idempotent + raises Excon::Error::Socket 218s + returns ["gug.request", "gug.error"] 218s works unmocked + returns ["excon.request", "excon.response"] 218s 218s Excon stubs 218s missing stub + raises Excon::Error::StubNotFound 218s stub({}) + raises ArgumentError 218s stub({}, {}) {} + raises ArgumentError 218s stub({:method => :get}, {:body => 'body', :status => 200}) 218s response.body + returns "body" 218s response.headers + returns {} 218s response.status + returns 200 218s response_block yields body + returns "body" 218s response.body empty with response_block + returns "" 218s stub({ url: 'http://example.com' }, { body: 'body', status: 200 }) 218s request without slash matches stub without trailing slash 218s request with trailing slash matches stub without trailing slash 218s stub({ url: 'http://example.com?foo=bar' }, { body: 'body', status: 200 }) 218s query in url matches 218s hash query matches 218s stub({ url: 'http://example.com?a=b+c' }, { body: 'body', status: 200 }) 218s query in url matches 218s hash query matches 218s stub({:path => %r{/tests/(S+)}}, {:body => $1, :status => 200}) 218s response.body + returns "test" 218s response.headers + returns {} 218s response.status + returns 200 218s stub({:body => 'body', :method => :get}) {|params| {:body => params[:body], :headers => params[:headers], :status => 200}} 218s response.body + returns "body" 218s response.headers + returns {"Accept"=>"*/*", "Accept-Encoding"=>"deflate, gzip", "Host"=>"127.0.0.1:9292", "User-Agent"=>"excon/1.3.1"} 218s response.status + returns 200 218s response_block yields body + returns "body" 218s response.body empty with response_block + returns "" 218s stub({:body => File.open(...), :method => :get}, { :status => 200 }) 218s response.status + returns 200 218s invalid stub response + raises Excon::Error::InvalidStub 218s mismatched stub + raises Excon::Error::StubNotFound 219s allow mismatched stub + returns 200 219s stub({}, {:body => 'x' * (Excon::DEFAULT_CHUNK_SIZE + 1)}) 219s + response_block yields body 219s response.body empty with response_block + returns "" 219s stub({:url => 'https://user:pass@foo.bar.com:9999/baz?quux=true'}, {:status => 200}) 219s + get(:expects => 200) 219s stub({}, {:status => 404, :body => 'Not Found'} 219s request(:expects => 200, :method => :get, :path => '/') + raises Excon::Error::NotFound 219s Expects exception should contain response object + returns Excon::Response 219s + request(:expects => 200, :method => :get, :path => '/') with block does not invoke the block since it raises an error 219s stub_for({}) 219s stub_for({}) + returns [{}, {}] 219s unstub({}) 219s unstub({}) + returns [{}, {}] 219s request(:method => :get) + raises Excon::Error::StubNotFound 219s unstub({path: %r{/path}}) 219s unstub({path: %r{/path}}) + returns [{:path=>/\/path/, :captures=>{:headers=>{}}}, {}] 219s unstub non-existent stub 219s unstub({}) + returns nil 219s global stubs 219s get on a different thread + returns "2" 219s get on main thread + returns "2" 219s thread-local stubs 219s get on a different thread + returns "2" 219s get on main thread + returns "1" 219s 219s Excon redirector support 219s request(:method => :get, :path => '/old').body + returns "new" 219s 219s Excon redirector support with redirect loop 219s request(:method => :get, :path => '/old') + raises Excon::Error::TooManyRedirects 219s 219s Excon redirect support for relative Location headers 219s request(:method => :get, :path => '/old').body + returns "new" 219s 219s Excon redirect support for relative Location headers with dot segments 219s request(:method => :get, :path => '/foo/baz/').body + returns "/foo/bar/" 219s 219s Excon redirecting post request 219s request not have content-length and body + returns "ok" 219s 219s Pipelined Requests 219s with default :persistent => true 219s + connection is persistent 219s with default :persistent => false 219s + connection is persistent per call to #requests 219s 219s Excon proxy support 219s proxy configuration 219s no proxy 219s connection.data[:proxy] + returns nil 219s empty proxy 219s connection.data[:proxy] + returns nil 219s with fully-specified proxy: https://myproxy.net:8080 219s connection.data[:proxy][:host] + returns "myproxy.net" 219s connection.data[:proxy][:port] + returns 8080 219s connection.data[:proxy][:scheme] + returns "https" 219s with fully-specified Unix socket proxy: unix:/// 219s connection.data[:proxy][:host] + returns nil 219s connection.data[:proxy][:port] + returns nil 219s connection.data[:proxy][:scheme] + returns "unix" 219s connection.data[:proxy][:path] + returns "/tmp/myproxy.sock" 219s with complete proxy config from the environment 219s lowercase 219s an http connection 219s connection.data[:proxy][:host] + returns "myproxy" 219s connection.data[:proxy][:port] + returns 8080 219s connection.data[:proxy][:scheme] + returns "http" 219s with disable_proxy set 219s connection.data[:proxy] + returns nil 219s an https connection 219s connection.data[:proxy][:host] + returns "mysecureproxy" 219s connection.data[:proxy][:port] + returns 8081 219s connection.data[:proxy][:scheme] + returns "http" 219s with disable_proxy set 219s connection.data[:proxy] + returns nil 219s http proxy from the environment overrides config 219s connection.data[:proxy][:host] + returns "myproxy" 219s connection.data[:proxy][:port] + returns 8080 219s an http connection in no_proxy 219s connection.data[:proxy] + returns nil 219s an http connection not completely matching no_proxy 219s connection.data[:proxy][:host] + returns "myproxy" 219s an http connection with subdomain in no_proxy 219s connection.data[:proxy] + returns nil 219s uppercase 219s an http connection 219s connection.data[:proxy][:host] + returns "myproxy" 219s connection.data[:proxy][:port] + returns 8080 219s connection.data[:proxy][:scheme] + returns "http" 219s with disable_proxy set 219s connection.data[:proxy] + returns nil 219s an https connection 219s connection.data[:proxy][:host] + returns "mysecureproxy" 219s connection.data[:proxy][:port] + returns 8081 219s connection.data[:proxy][:scheme] + returns "http" 219s with disable_proxy set 219s connection.data[:proxy] + returns nil 219s http proxy from the environment overrides config 219s connection.data[:proxy][:host] + returns "myproxy" 219s connection.data[:proxy][:port] + returns 8080 219s an http connection in no_proxy 219s connection.data[:proxy] + returns nil 219s an http connection not completely matching no_proxy 219s connection.data[:proxy][:host] + returns "myproxy" 219s an http connection with subdomain in no_proxy 219s connection.data[:proxy] + returns nil 219s with only http_proxy config from the environment 219s an https connection 219s connection.data[:proxy][:host] + returns "myproxy" 219s connection.data[:proxy][:port] + returns 8080 219s connection.data[:proxy][:scheme] + returns "http" 219s with a unix socket proxy config from the environment 219s an https connection 219s connection.data[:proxy][:host] + returns nil 219s connection.data[:proxy][:port] + returns nil 219s connection.data[:proxy][:scheme] + returns "unix" 219s connection.data[:proxy][:path] + returns "/tmp/myproxy.sock" 220s http proxying: http://foo.com:8080 220s response.status + returns 200 220s sent Request URI + returns "http://foo.com:8080/bar?alpha=kappa" 220s sent Sent-Host header + returns "foo.com:8080" 220s sent Proxy-Connection header + returns "Keep-Alive" 220s response.body (proxied content) + returns "proxied content" 220s http proxying: http://user:pass@foo.com:8080 220s response.status + returns 200 220s sent Request URI + returns "http://foo.com:8080/bar?alpha=kappa" 220s sent Host header + returns "foo.com:8080" 220s sent Proxy-Connection header + returns "Keep-Alive" 220s response.body (proxied content) + returns "proxied content" 220s http proxying over unix socket: http://foo.com:8080 220s response.status + returns 200 220s sent Sent-Host header + returns "foo.com:8080" 220s sent Proxy-Connection header + returns "Keep-Alive" 220s response.body (proxied content) + returns "proxied content" 220s 220s Excon query string variants 220s :query => {:foo => 'bar'} 220s query string sent + returns "foo=bar" 220s :query => {:foo => nil} 220s query string sent + returns "foo" 220s :query => {:foo => 'bar', :me => nil} 220s + query string sent includes 'foo=bar' 220s + query string sent includes 'me' 220s :query => {:foo => 'bar', :me => 'too'} 220s + query string sent includes 'foo=bar' 220s + query string sent includes 'me=too' 220s :query => {'foo[]' => ['bar', 'baz'], :me => 'too'} 220s + query string sent includes 'foo%5B%5D=bar' 220s + query string sent includes 'foo%5B%5D=baz' 220s + query string sent includes 'me=too' 220s :query => {'foo%=#' => 'bar%=#'} 220s query string sent + returns "foo%25%3D%23=bar%25%3D%23" 220s :query => {'foo%=#' => nil} 220s query string sent + returns "foo%25%3D%23" 220s 220s Excon request methods 221s empty headers sent 221s + Excon.post 221s header order 221s host is the first sent header by default + returns "host: localhost:9292" 221s 221s Excon request methods 221s one-offs 221s Excon.get + returns "GET" 221s Excon.post + returns "POST" 221s Excon.delete + returns "DELETE" 221s with a connection object 221s connection.get + returns "GET" 221s connection.post + returns "POST" 221s connection.delete + returns "DELETE" 221s not modifies path argument + returns "path" 221s 221s Request Tests 221s persistent connections 222s with default :persistent => true, 127.0.0.1:9292 222s + uses a persistent connection 222s + :persistent => false resets connection 222s with default :persistent => false, 127.0.0.1:9292 222s + does not use a persistent connection 222s + :persistent => true enables persistence 222s with default :persistent => true, [::1]:9293 222s + uses a persistent connection 222s + :persistent => false resets connection 222s with default :persistent => false, [::1]:9293 222s + does not use a persistent connection 222s + :persistent => true enables persistence 222s 222s Excon Response Parsing 222s responses with chunked transfer-encoding 222s simple response + returns "hello world" 222s with :response_block 222s simple response + returns [["hello ", nil, nil], ["world", nil, nil]] 222s simple response has empty body + returns "" 222s with expected response status + returns [["hello ", nil, nil], ["world", nil, nil]] 222s with unexpected response status + returns "hello world" 222s merges trailers into headers + returns "one, two, three, four, five, six" 222s removes 'chunked' from Transfer-Encoding + returns nil 222s responses with content-length 222s simple response + returns "hello world" 222s with :response_block 222s simple response + returns [["hello", 6, 11], [" worl", 1, 11], ["d", 0, 11]] 222s simple response has empty body + returns "" 222s with expected response status + returns [["hello", 6, 11], [" worl", 1, 11], ["d", 0, 11]] 222s with unexpected response status + returns "hello world" 222s responses with unknown length 222s simple response + returns "hello world" 222s with :response_block 222s simple response + returns [["hello", nil, nil], [" worl", nil, nil], ["d", nil, nil]] 222s simple response has empty body + returns "" 222s with expected response status + returns [["hello", nil, nil], [" worl", nil, nil], ["d", nil, nil]] 222s with unexpected response status + returns "hello world" 222s cookies 222s parses cookies into array + returns ["one, two", "three, four"] 222s header continuation 222s proper continuation + returns "one, two, three, four, five, six" 222s malformed header + raises Excon::Error::Socket 222s malformed header continuation + raises Excon::Error::Socket 222s status line parsing 222s proper status code + returns 404 222s proper reason phrase + returns "Not Found" 222s 222s socket 222s chunk_size: 222s read_nonblock 222s readline nonblock is efficient 222s + returns ["one\n", 1, [8, "EOF"]] 222s readline nonblock works sequentially 222s + returns [["one\n", "two\n"], 1, [8, "EOF"]] 222s readline nonblock can handle partial reads 222s + returns [["one\n", "two\n"], 2, [5, "EAGAIN", 3, "EOF"]] 222s readline nonblock before read 222s + returns [["one\n", "two\n"], 2, [8, "EOF"]] 222s read_nonblock does not EOF early 222s + returns [["one", "two"], 2, [3, "EAGAIN", 3, "EOF"]] 222s chunk_size: 512 222s read_nonblock 222s readline nonblock is efficient 222s + returns ["one\n", 1, [8, "EOF"]] 222s readline nonblock works sequentially 222s + returns [["one\n", "two\n"], 1, [8, "EOF"]] 222s readline nonblock can handle partial reads 222s + returns [["one\n", "two\n"], 2, [5, "EAGAIN", 3, "EOF"]] 222s readline nonblock before read 222s + returns [["one\n", "two\n"], 2, [8, "EOF"]] 222s read_nonblock does not EOF early 222s + returns [["one", "two"], 2, [3, "EAGAIN", 3, "EOF"]] 222s 222s Excon thread safety 222s thread_safe_sockets configuration 222s thread_safe_sockets default + returns true 222s with thread_safe_sockets set false + returns false 224s + long_thread 224s + short_thread 224s 224s read should timeout 226s nonblock => false hits read_timeout + raises Excon::Error::Timeout 227s nonblock => true hits read_timeout + raises Excon::Error::Timeout 227s 227s Excon::Utils 227s #connection_uri 227s using UNIX scheme + returns "unix:///tmp/some.sock" 227s using HTTP scheme 227s without default port + returns "http://foo.com" 227s include_default_port adds default port + returns "http://foo.com:80" 227s !include_default_port has no port value + returns "http://foo.com" 227s omit_default_port has no port value + returns "http://foo.com" 227s #request_uri 227s using UNIX scheme 227s without query + returns "unix:///tmp/some.sock/some/path" 227s with query + returns "unix:///tmp/some.sock/some/path?bar=that&foo=this" 227s using HTTP scheme 227s without query + returns "http://foo.com/some/path" 227s with query + returns "http://foo.com/some/path?bar=that&foo=this" 227s http default port + returns true 227s http nonstandard port + returns false 227s https standard port + returns true 227s https nonstandard port + returns false 227s unix socket + returns false 227s + detecting default ports 227s #escape_uri + returns "/hello%20excon" 227s #unescape_uri + returns "/hello excon" 227s #unescape_form + returns "message=We love excon!" 227s #split_header_value + returns ["value"] 227s #split_header_value + returns ["value1", "value2"] 227s #split_header_value + returns ["text/html;q=0.5", "application/json; version=1"] 227s #split_header_value + returns ["foo/bar;key=\"A,B,C\""] 227s #split_header_value + returns [] 227s 227s 12 pending and 1468 succeeded in 55.91443224113574 seconds 227s 227s /usr/bin/ruby3.3 -I/usr/share/rubygems-integration/all/gems/rspec-support-3.13.1/lib:/usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/exe/rspec --pattern spec/\*\*/\*_spec.rb -c -f doc -r ./spec/spec_helper.rb 227s 227s Excon::Error 227s #status_errors 227s .keys 227s returns the pertinent HTTP error numbers 227s #new 227s returns an Excon::Error 227s raises errors for bad URIs 227s raises errors for bad paths 227s when remaining backwards compatible 227s #new 227s should raise standard error and catch standard error 227s should raise legacy errors and catch legacy errors 227s should raise standard error and catch legacy errors 227s #status_error 227s should raise with status_error() and catch with standard error 227s should raise with status_error() and catch with legacy error 227s should raise with legacy status_error() and catch with standard 227s when exceptions are rescued 227s when :debug_request and :debug_response are switched off 227s exception message does not include response or response info 227s when :debug_request and :debug_response are switched on 227s exception message includes request and response info 227s when only :debug_request is turned on 227s exception message includes only request info 227s when only :debug_response is turned on 227s exception message includes only response info 227s 227s Excon::Test::Server 227s when the web server is webrick 227s it should behave like a excon test server 227s returns an instance 228s starts the server 228s stops the server 228s when the web server is unicorn 228s bound to a tcp socket 228s it should behave like a excon test server 228s returns an instance 228s starts the server 228s stops the server 228s bound to a unix socket 228s it should behave like a excon test server 228s returns an instance 228s starts the server 228s stops the server 228s when the web server is puma 228s it should behave like a excon test server 228s returns an instance 229s starts the server 229s stops the server 229s when the web server is a executable 229s it should behave like a excon test server 229s returns an instance 229s starts the server 229s stops the server 229s 229s Excon 229s has a version number 229s 229s Excon::Connection 229s when an explicit uri is passed 229s .new 229s returns an instance 229s when :method is :get and :path is /content-length/100 229s #request 229s returns an Excon::Response 229s Excon::Response 229s #status 229s returns 200 229s when nonblock is true and persistent is false 229s when :method is get and :path is /content-length/100 229s #request 229s returns an Excon::Response 229s Excon::Response 229s #status 229s returns 200 229s #status returns 200 229s #headers 229s ["Content-Length"] returns 100 229s ["Content-Type"] returns "text/html;charset=utf-8" 229s ['Date'] returns a valid date 229s ['Server'] matches /^WEBrick/ 229s ['Custom'] returns Foo: bar 229s #remote_ip 229s returns 127.0.0.1 229s when tcp_nodelay is true 229s #request 229s returns an Excon::Response 229s Excon::Response 229s #body 229s .status 229s #returns 200 229s when utilizing deprecated block usage 229s #request 229s yields with a chunk, remaining length, and total length 229s completes with expected data 229s when utilizing response_block usage 229s #request 229s yields a chunk, remaining length, and total_length 229s completes with expected data 229s when method is :post 229s when :path is /body-sink 229s when a body parameter is supplied 229s returns an Excon::Response 229s Excon::Response 229s #body 229s equals "5000000" 229s when the body parameter is an empty string 229s returns an Excon::Response 229s Excon::Response 229s #body 229s equals "0" 229s when :path is /echo 229s when a file handle is the body paramter 229s Excon::Response 229s #body equals "x" * 100 + "\n" 229s when a string is the body paramter 229s does not change the enconding of the body 229s without request_block 229s Excon::Response 229s #body equals 'x' * 100) 229s when a request_block paramter is supplied 229s Excon::Response 229s #body equals'x' * 100 229s when a multi-byte string is the body paramter 229s Excon::Response 229s #body properly concatenates request+headers and body 229s when nonblock is true and persistent is true 229s when :method is get and :path is /content-length/100 229s #request 229s returns an Excon::Response 229s Excon::Response 229s #status 229s returns 200 229s #status returns 200 229s #headers 229s ["Content-Length"] returns 100 229s ["Content-Type"] returns "text/html;charset=utf-8" 229s ['Date'] returns a valid date 229s ['Server'] matches /^WEBrick/ 229s ['Custom'] returns Foo: bar 229s #remote_ip 229s returns 127.0.0.1 229s when tcp_nodelay is true 229s #request 229s returns an Excon::Response 229s Excon::Response 229s #body 229s .status 229s #returns 200 229s when utilizing deprecated block usage 229s #request 229s yields with a chunk, remaining length, and total length 229s completes with expected data 229s when utilizing response_block usage 229s #request 229s yields a chunk, remaining length, and total_length 229s completes with expected data 229s when method is :post 229s when :path is /body-sink 229s when a body parameter is supplied 229s returns an Excon::Response 229s Excon::Response 229s #body 229s equals "5000000" 229s when the body parameter is an empty string 229s returns an Excon::Response 229s Excon::Response 229s #body 229s equals "0" 229s when :path is /echo 229s when a file handle is the body paramter 229s Excon::Response 229s #body equals "x" * 100 + "\n" 229s when a string is the body paramter 229s does not change the enconding of the body 229s without request_block 229s Excon::Response 229s #body equals 'x' * 100) 229s when a request_block paramter is supplied 229s Excon::Response 229s #body equals'x' * 100 229s when a multi-byte string is the body paramter 229s Excon::Response 229s #body properly concatenates request+headers and body 229s when nonblock is false and persistent is true 229s when :method is get and :path is /content-length/100 229s #request 229s returns an Excon::Response 229s Excon::Response 229s #status 229s returns 200 229s #status returns 200 229s #headers 229s ["Content-Length"] returns 100 229s ["Content-Type"] returns "text/html;charset=utf-8" 229s ['Date'] returns a valid date 229s ['Server'] matches /^WEBrick/ 229s ['Custom'] returns Foo: bar 229s #remote_ip 229s returns 127.0.0.1 229s when tcp_nodelay is true 229s #request 229s returns an Excon::Response 229s Excon::Response 229s #body 229s .status 229s #returns 200 229s when utilizing deprecated block usage 229s #request 229s yields with a chunk, remaining length, and total length 229s completes with expected data 229s when utilizing response_block usage 229s #request 229s yields a chunk, remaining length, and total_length 229s completes with expected data 229s when method is :post 229s when :path is /body-sink 229s when a body parameter is supplied 230s returns an Excon::Response 230s Excon::Response 230s #body 230s equals "5000000" 230s when the body parameter is an empty string 230s returns an Excon::Response 230s Excon::Response 230s #body 230s equals "0" 230s when :path is /echo 230s when a file handle is the body paramter 230s Excon::Response 230s #body equals "x" * 100 + "\n" 230s when a string is the body paramter 230s does not change the enconding of the body 230s without request_block 230s Excon::Response 230s #body equals 'x' * 100) 230s when a request_block paramter is supplied 230s Excon::Response 230s #body equals'x' * 100 230s when a multi-byte string is the body paramter 230s Excon::Response 230s #body properly concatenates request+headers and body 230s when nonblock is false and persistent is false 230s when :method is get and :path is /content-length/100 230s #request 230s returns an Excon::Response 230s Excon::Response 230s #status 230s returns 200 230s #status returns 200 230s #headers 230s ["Content-Length"] returns 100 230s ["Content-Type"] returns "text/html;charset=utf-8" 230s ['Date'] returns a valid date 230s ['Server'] matches /^WEBrick/ 230s ['Custom'] returns Foo: bar 230s #remote_ip 230s returns 127.0.0.1 230s when tcp_nodelay is true 230s #request 230s returns an Excon::Response 230s Excon::Response 230s #body 230s .status 230s #returns 200 230s when utilizing deprecated block usage 230s #request 230s yields with a chunk, remaining length, and total length 230s completes with expected data 230s when utilizing response_block usage 230s #request 230s yields a chunk, remaining length, and total_length 230s completes with expected data 230s when method is :post 230s when :path is /body-sink 230s when a body parameter is supplied 230s returns an Excon::Response 230s Excon::Response 230s #body 230s equals "5000000" 230s when the body parameter is an empty string 230s returns an Excon::Response 230s Excon::Response 230s #body 230s equals "0" 230s when :path is /echo 230s when a file handle is the body paramter 230s Excon::Response 230s #body equals "x" * 100 + "\n" 230s when a string is the body paramter 230s does not change the enconding of the body 230s without request_block 230s Excon::Response 230s #body equals 'x' * 100) 230s when a request_block paramter is supplied 230s Excon::Response 230s #body equals'x' * 100 230s when a multi-byte string is the body paramter 230s Excon::Response 230s #body properly concatenates request+headers and body 230s ractors 230s /tmp/autopkgtest.rKi8IY/build.PQ7/src/spec/requests/basic_spec.rb:48: warning: Ractor is experimental, and the behavior may change in future versions of Ruby! Also there are many implementation issues. 230s should work inside ractors 230s 230s Excon::Socket 230s passes the dns_timeouts to Resolv::DNS::Config (PENDING: Temporarily skipped with xit) 230s when the DNS server is unreachable 230s returns a Excon::Error::Socket 230s 230s Excon 230s when dispatching requests 230s to a server that does not supply response headers 230s when no block is given 230s should rescue from an EOFError and return response 230s when a block is given 230s should rescue from EOFError and return response 230s to a server that prematurely aborts the request with no response 230s should raise an EOFError 230s 230s Excon::Socket 230s resolv_resolver config reaches Resolv::DNS::Config (PENDING: Temporarily skipped with xit) 230s when the DNS server is unreachable 232s returns a Excon::Error::Socket 232s 232s Excon::Connection 232s blocking connection 232s when timeout is not set 232s does not error 232s when timeout is not triggered 232s does not error 232s when timeout is triggered 232s does not raise 232s non-blocking connection 232s when timeout is not set 232s does not error 232s when timeout is not triggered 232s does not error 232s when timeout is triggered 232s returns a request Excon::Error::Timeout 233s when read timeout is triggered 233s returns a read Excon::Error::Timeout 233s 233s Excon::Connection 233s when speaking to a UNIX socket 233s via Excon.new 233s accepts the unix:/ URL 233s Host header handling 233s sends an empty Host= by default 233s doesn't overwrite an explicit Host header 233s 233s Excon::Connection 233s validating parameters 233s with default middleware 233s Connection.new warns on invalid parameter keys 233s Connection#request warns on invalid parameter keys 233s with custom middleware at instantiation 233s Connection.new accepts parameters that are valid for the provided middleware 233s Connection.new warns on parameters that are not valid for the provided middleware 233s Connection#request accepts parameters that are valid for the provided middleware 233s Connection#request warns on parameters that are not valid for the provided middleware 233s with custom middleware at request time 233s Connection#request accepts parameters that are valid for the provided middleware 233s Connection#request warns on parameters that are not valid for the request middleware 233s Connection#request warns on parameters from instantiation that are not valid for the request middleware 233s 233s Pending: (Failures listed here are expected and do not affect your suite's status) 233s 233s 1) Excon::Socket passes the dns_timeouts to Resolv::DNS::Config 233s # Temporarily skipped with xit 233s # ./spec/requests/dns_timeout_spec.rb:10 233s 233s 2) Excon::Socket resolv_resolver config reaches Resolv::DNS::Config 233s # Temporarily skipped with xit 233s # ./spec/requests/resolv_resolver_spec.rb:14 233s 233s Finished in 5.28 seconds (files took 0.35036 seconds to load) 233s 156 examples, 0 failures, 2 pending 233s 233s mv ./.gem2deb.lib lib 233s autopkgtest [21:12:49]: test gem2deb-test-runner: -----------------------] 237s gem2deb-test-runner PASS 237s autopkgtest [21:12:53]: test gem2deb-test-runner: - - - - - - - - - - results - - - - - - - - - - 241s autopkgtest [21:12:57]: @@@@@@@@@@@@@@@@@@@@ summary 241s gem2deb-test-runner PASS