0s autopkgtest [17:12:34]: starting date and time: 2026-02-04 17:12:34+0000 0s autopkgtest [17:12:34]: git checkout: 4b346b80 nova: make wait_reboot return success even when a no-op 0s autopkgtest [17:12:34]: host juju-7f2275-prod-proposed-migration-environment-15; command line: /home/ubuntu/autopkgtest/runner/autopkgtest --output-dir /tmp/autopkgtest-work.0grg_odv/out --timeout-copy=6000 --needs-internet=try -a i386 --setup-commands /home/ubuntu/autopkgtest-cloud/worker-config-production/setup-canonical.sh --apt-pocket=proposed=src:ruby3.3 --apt-upgrade ruby-excon --timeout-short=300 --timeout-copy=20000 --timeout-build=20000 --env=ADT_TEST_TRIGGERS=ruby3.3/3.3.8-2ubuntu3 -- ssh -s /home/ubuntu/autopkgtest/ssh-setup/nova -- --flavor autopkgtest-cpu2-ram4-disk20-amd64 --security-groups autopkgtest-juju-7f2275-prod-proposed-migration-environment-15@sto01-13.secgroup --name adt-resolute-i386-ruby-excon-20260204-171233-juju-7f2275-prod-proposed-migration-environment-15-562d4890-2080-4b3a-ae60-0b812e49c951 --image adt/ubuntu-resolute-amd64-server --keyname testbed-juju-7f2275-prod-proposed-migration-environment-15 --net-id=net_prod-autopkgtest-workers-amd64 -e TERM=linux --mirror=http://ftpmaster.internal/ubuntu/ 3s Creating nova instance adt-resolute-i386-ruby-excon-20260204-171233-juju-7f2275-prod-proposed-migration-environment-15-562d4890-2080-4b3a-ae60-0b812e49c951 from image adt/ubuntu-resolute-amd64-server-20260204.img (UUID fedf54b4-458b-493e-8072-6425c19717b4)... 82s autopkgtest [17:13:56]: testbed dpkg architecture: amd64 82s autopkgtest [17:13:56]: testbed apt version: 3.1.14 83s autopkgtest [17:13:57]: @@@@@@@@@@@@@@@@@@@@ test bed setup 83s autopkgtest [17:13:57]: testbed release detected to be: None 83s autopkgtest [17:13:57]: updating testbed package index (apt update) 84s Get:1 http://ftpmaster.internal/ubuntu resolute-proposed InRelease [124 kB] 84s Hit:2 http://ftpmaster.internal/ubuntu resolute InRelease 84s Hit:3 http://ftpmaster.internal/ubuntu resolute-updates InRelease 84s Hit:4 http://ftpmaster.internal/ubuntu resolute-security InRelease 84s Get:5 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse Sources [33.2 kB] 84s Get:6 http://ftpmaster.internal/ubuntu resolute-proposed/universe Sources [1714 kB] 84s Get:7 http://ftpmaster.internal/ubuntu resolute-proposed/restricted Sources [5260 B] 84s Get:8 http://ftpmaster.internal/ubuntu resolute-proposed/main Sources [230 kB] 84s Get:9 http://ftpmaster.internal/ubuntu resolute-proposed/main amd64 Packages [277 kB] 84s Get:10 http://ftpmaster.internal/ubuntu resolute-proposed/main i386 Packages [210 kB] 84s Get:11 http://ftpmaster.internal/ubuntu resolute-proposed/main amd64 c-n-f Metadata [7264 B] 84s Get:12 http://ftpmaster.internal/ubuntu resolute-proposed/restricted amd64 Packages [32.9 kB] 84s Get:13 http://ftpmaster.internal/ubuntu resolute-proposed/restricted i386 Packages [3692 B] 84s Get:14 http://ftpmaster.internal/ubuntu resolute-proposed/restricted amd64 c-n-f Metadata [336 B] 84s Get:15 http://ftpmaster.internal/ubuntu resolute-proposed/universe amd64 Packages [1576 kB] 84s Get:16 http://ftpmaster.internal/ubuntu resolute-proposed/universe i386 Packages [581 kB] 84s Get:17 http://ftpmaster.internal/ubuntu resolute-proposed/universe amd64 c-n-f Metadata [43.6 kB] 84s Get:18 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse amd64 Packages [28.6 kB] 84s Get:19 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse i386 Packages [4480 B] 84s Get:20 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse amd64 c-n-f Metadata [1100 B] 85s Fetched 4873 kB in 1s (5639 kB/s) 86s Reading package lists... 86s Hit:1 http://ftpmaster.internal/ubuntu resolute-proposed InRelease 86s Hit:2 http://ftpmaster.internal/ubuntu resolute InRelease 86s Hit:3 http://ftpmaster.internal/ubuntu resolute-updates InRelease 86s Hit:4 http://ftpmaster.internal/ubuntu resolute-security InRelease 87s Reading package lists... 87s Reading package lists... 87s Building dependency tree... 87s Reading state information... 87s Calculating upgrade... 87s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 87s autopkgtest [17:14:01]: upgrading testbed (apt dist-upgrade and autopurge) 87s Reading package lists... 88s Building dependency tree... 88s Reading state information... 88s Calculating upgrade... 88s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 88s Reading package lists... 88s Building dependency tree... 88s Reading state information... 88s Solving dependencies... 88s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 90s autopkgtest [17:14:04]: testbed running kernel: Linux 6.18.0-9-generic #9-Ubuntu SMP PREEMPT_DYNAMIC Mon Jan 12 16:49:02 UTC 2026 90s autopkgtest [17:14:04]: @@@@@@@@@@@@@@@@@@@@ apt-source ruby-excon 92s Get:1 http://ftpmaster.internal/ubuntu resolute/universe ruby-excon 1.3.1-1 (dsc) [2238 B] 92s Get:2 http://ftpmaster.internal/ubuntu resolute/universe ruby-excon 1.3.1-1 (tar) [240 kB] 92s Get:3 http://ftpmaster.internal/ubuntu resolute/universe ruby-excon 1.3.1-1 (diff) [6468 B] 92s gpgv: Signature made Thu Nov 20 21:55:33 2025 UTC 92s gpgv: using RSA key 5C7ABEA20F8630459CC8C8B5E27F2CF8458C2FA4 92s gpgv: Can't check signature: No public key 92s dpkg-source: warning: cannot verify inline signature for ./ruby-excon_1.3.1-1.dsc: no acceptable signature found 92s autopkgtest [17:14:06]: testing package ruby-excon version 1.3.1-1 92s autopkgtest [17:14:06]: build not needed 92s autopkgtest [17:14:06]: test gem2deb-test-runner: preparing testbed 92s Reading package lists... 93s Building dependency tree... 93s Reading state information... 93s Solving dependencies... 93s The following NEW packages will be installed: 93s gem2deb-test-runner libruby libruby3.3 puma rake ruby ruby-activesupport 93s ruby-base64 ruby-chronic ruby-concurrent ruby-connection-pool ruby-csv 93s ruby-delorean ruby-did-you-mean ruby-diff-lcs ruby-eventmachine ruby-excon 93s ruby-formatador ruby-i18n ruby-kgio ruby-minitest ruby-multi-json 93s ruby-mustermann ruby-net-telnet ruby-nio4r ruby-numerizer ruby-open4 93s ruby-power-assert ruby-rack ruby-rack-protection ruby-rack-session 93s ruby-rackup ruby-raindrops ruby-rspec ruby-rspec-core 93s ruby-rspec-expectations ruby-rspec-mocks ruby-rspec-support 93s ruby-ruby2-keywords ruby-rubygems ruby-shindo ruby-sinatra 93s ruby-sinatra-contrib ruby-test-unit ruby-tilt ruby-tzinfo ruby-webrick 93s ruby-xmlrpc ruby3.3 rubygems-integration unicorn 93s 0 upgraded, 51 newly installed, 0 to remove and 0 not upgraded. 93s Need to get 8774 kB of archives. 93s After this operation, 42.7 MB of additional disk space will be used. 93s Get:1 http://ftpmaster.internal/ubuntu resolute/main amd64 rubygems-integration all 1.19build1 [5666 B] 93s Get:2 http://ftpmaster.internal/ubuntu resolute/main amd64 ruby-csv all 3.3.4-1 [43.0 kB] 93s Get:3 http://ftpmaster.internal/ubuntu resolute/main amd64 ruby-did-you-mean all 1.6.3-2build1 [14.9 kB] 93s Get:4 http://ftpmaster.internal/ubuntu resolute/main amd64 ruby-net-telnet all 0.2.0-1build1 [13.5 kB] 93s Get:5 http://ftpmaster.internal/ubuntu resolute/main amd64 ruby-ruby2-keywords all 0.0.5-1build1 [4398 B] 93s Get:6 http://ftpmaster.internal/ubuntu resolute/main amd64 ruby-webrick all 1.9.1-1 [60.8 kB] 93s Get:7 http://ftpmaster.internal/ubuntu resolute/main amd64 ruby-xmlrpc all 0.3.3-2build1 [24.9 kB] 93s Get:8 http://ftpmaster.internal/ubuntu resolute-proposed/main amd64 libruby3.3 amd64 3.3.8-2ubuntu3 [5858 kB] 93s Get:9 http://ftpmaster.internal/ubuntu resolute-proposed/main amd64 ruby3.3 amd64 3.3.8-2ubuntu3 [49.1 kB] 93s Get:10 http://ftpmaster.internal/ubuntu resolute/main amd64 libruby amd64 1:3.3 [5164 B] 93s Get:11 http://ftpmaster.internal/ubuntu resolute/main amd64 ruby-rubygems all 3.6.7-2ubuntu1 [332 kB] 93s Get:12 http://ftpmaster.internal/ubuntu resolute/main amd64 ruby amd64 1:3.3 [3666 B] 93s Get:13 http://ftpmaster.internal/ubuntu resolute/main amd64 rake all 13.2.1-1build1 [45.9 kB] 93s Get:14 http://ftpmaster.internal/ubuntu resolute/universe amd64 ruby-minitest all 5.26.1-1 [49.3 kB] 93s Get:15 http://ftpmaster.internal/ubuntu resolute/universe amd64 ruby-power-assert all 2.0.5-1 [12.0 kB] 93s Get:16 http://ftpmaster.internal/ubuntu resolute/universe amd64 ruby-test-unit all 3.6.2-1 [67.0 kB] 93s Get:17 http://ftpmaster.internal/ubuntu resolute/universe amd64 gem2deb-test-runner amd64 2.2.5 [18.3 kB] 93s Get:18 http://ftpmaster.internal/ubuntu resolute/main amd64 ruby-nio4r amd64 2.7.4-1 [116 kB] 93s Get:19 http://ftpmaster.internal/ubuntu resolute/main amd64 puma amd64 6.6.0-4 [152 kB] 93s Get:20 http://ftpmaster.internal/ubuntu resolute/universe amd64 ruby-concurrent all 1.3.4-1 [283 kB] 93s Get:21 http://ftpmaster.internal/ubuntu resolute/universe amd64 ruby-i18n all 1.14.7-1 [42.8 kB] 93s Get:22 http://ftpmaster.internal/ubuntu resolute/universe amd64 ruby-tzinfo all 2.0.6-1 [55.2 kB] 93s Get:23 http://ftpmaster.internal/ubuntu resolute/universe amd64 ruby-connection-pool all 2.5.4-1 [10.3 kB] 93s Get:24 http://ftpmaster.internal/ubuntu resolute/main amd64 ruby-base64 all 0.3.0-1build1 [8560 B] 93s Get:25 http://ftpmaster.internal/ubuntu resolute/universe amd64 ruby-activesupport all 2:7.2.2.2+dfsg-2 [224 kB] 93s Get:26 http://ftpmaster.internal/ubuntu resolute/universe amd64 ruby-numerizer all 0.2.0-3 [4954 B] 93s Get:27 http://ftpmaster.internal/ubuntu resolute/universe amd64 ruby-chronic all 0.10.6-1 [25.5 kB] 93s Get:28 http://ftpmaster.internal/ubuntu resolute/universe amd64 ruby-delorean all 2.1.0-3 [5122 B] 93s Get:29 http://ftpmaster.internal/ubuntu resolute/universe amd64 ruby-diff-lcs all 1.5.1-1 [22.8 kB] 93s Get:30 http://ftpmaster.internal/ubuntu resolute/universe amd64 ruby-eventmachine amd64 1.3~pre20220315-df4ab006-5build1 [155 kB] 93s Get:31 http://ftpmaster.internal/ubuntu resolute/universe amd64 ruby-excon all 1.3.1-1 [165 kB] 93s Get:32 http://ftpmaster.internal/ubuntu resolute/universe amd64 ruby-formatador all 1.2.3-1 [8812 B] 93s Get:33 http://ftpmaster.internal/ubuntu resolute/universe amd64 ruby-kgio amd64 2.11.2-2build7 [29.8 kB] 93s Get:34 http://ftpmaster.internal/ubuntu resolute/universe amd64 ruby-multi-json all 1.15.0-1 [16.1 kB] 93s Get:35 http://ftpmaster.internal/ubuntu resolute/main amd64 ruby-mustermann all 3.0.4-1build1 [38.4 kB] 93s Get:36 http://ftpmaster.internal/ubuntu resolute/universe amd64 ruby-open4 all 1.3.4-3 [14.8 kB] 93s Get:37 http://ftpmaster.internal/ubuntu resolute/main amd64 ruby-rack all 3.1.18-1build1 [81.7 kB] 93s Get:38 http://ftpmaster.internal/ubuntu resolute/main amd64 ruby-rack-protection all 4.2.1-1build1 [16.1 kB] 93s Get:39 http://ftpmaster.internal/ubuntu resolute/main amd64 ruby-rack-session all 2.1.1-0.1 [12.7 kB] 93s Get:40 http://ftpmaster.internal/ubuntu resolute/main amd64 ruby-rackup all 2.1.0-4 [13.0 kB] 93s Get:41 http://ftpmaster.internal/ubuntu resolute/universe amd64 ruby-raindrops amd64 0.20.0-2 [30.6 kB] 93s Get:42 http://ftpmaster.internal/ubuntu resolute/universe amd64 ruby-rspec-support all 3.13.0c0e0m0s1-2 [29.2 kB] 93s Get:43 http://ftpmaster.internal/ubuntu resolute/universe amd64 ruby-rspec-core all 3.13.0c0e0m0s1-2 [164 kB] 93s Get:44 http://ftpmaster.internal/ubuntu resolute/universe amd64 ruby-rspec-expectations all 3.13.0c0e0m0s1-2 [89.8 kB] 93s Get:45 http://ftpmaster.internal/ubuntu resolute/universe amd64 ruby-rspec-mocks all 3.13.0c0e0m0s1-2 [81.0 kB] 93s Get:46 http://ftpmaster.internal/ubuntu resolute/universe amd64 ruby-rspec all 3.13.0c0e0m0s1-2 [3500 B] 93s Get:47 http://ftpmaster.internal/ubuntu resolute/universe amd64 ruby-shindo all 0.3.11-1 [11.9 kB] 93s Get:48 http://ftpmaster.internal/ubuntu resolute/main amd64 ruby-tilt all 2.6.1-1build1 [31.5 kB] 93s Get:49 http://ftpmaster.internal/ubuntu resolute/main amd64 ruby-sinatra all 4.2.1-1build1 [94.9 kB] 93s Get:50 http://ftpmaster.internal/ubuntu resolute/universe amd64 ruby-sinatra-contrib all 4.2.1-1build1 [26.8 kB] 94s Get:51 http://ftpmaster.internal/ubuntu resolute/universe amd64 unicorn amd64 6.1.0+git.20250131.1370f52-1 [100 kB] 94s Fetched 8774 kB in 1s (12.4 MB/s) 94s Selecting previously unselected package rubygems-integration. 94s (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 ... 83957 files and directories currently installed.) 94s Preparing to unpack .../00-rubygems-integration_1.19build1_all.deb ... 94s Unpacking rubygems-integration (1.19build1) ... 94s Selecting previously unselected package ruby-csv. 94s Preparing to unpack .../01-ruby-csv_3.3.4-1_all.deb ... 94s Unpacking ruby-csv (3.3.4-1) ... 94s Selecting previously unselected package ruby-did-you-mean. 94s Preparing to unpack .../02-ruby-did-you-mean_1.6.3-2build1_all.deb ... 94s Unpacking ruby-did-you-mean (1.6.3-2build1) ... 94s Selecting previously unselected package ruby-net-telnet. 94s Preparing to unpack .../03-ruby-net-telnet_0.2.0-1build1_all.deb ... 94s Unpacking ruby-net-telnet (0.2.0-1build1) ... 94s Selecting previously unselected package ruby-ruby2-keywords. 94s Preparing to unpack .../04-ruby-ruby2-keywords_0.0.5-1build1_all.deb ... 94s Unpacking ruby-ruby2-keywords (0.0.5-1build1) ... 94s Selecting previously unselected package ruby-webrick. 94s Preparing to unpack .../05-ruby-webrick_1.9.1-1_all.deb ... 94s Unpacking ruby-webrick (1.9.1-1) ... 94s Selecting previously unselected package ruby-xmlrpc. 94s Preparing to unpack .../06-ruby-xmlrpc_0.3.3-2build1_all.deb ... 94s Unpacking ruby-xmlrpc (0.3.3-2build1) ... 94s Selecting previously unselected package libruby3.3:amd64. 94s Preparing to unpack .../07-libruby3.3_3.3.8-2ubuntu3_amd64.deb ... 94s Unpacking libruby3.3:amd64 (3.3.8-2ubuntu3) ... 94s Selecting previously unselected package ruby3.3. 94s Preparing to unpack .../08-ruby3.3_3.3.8-2ubuntu3_amd64.deb ... 94s Unpacking ruby3.3 (3.3.8-2ubuntu3) ... 94s Selecting previously unselected package libruby:amd64. 94s Preparing to unpack .../09-libruby_1%3a3.3_amd64.deb ... 94s Unpacking libruby:amd64 (1:3.3) ... 94s Selecting previously unselected package ruby-rubygems. 94s Preparing to unpack .../10-ruby-rubygems_3.6.7-2ubuntu1_all.deb ... 94s Unpacking ruby-rubygems (3.6.7-2ubuntu1) ... 94s Selecting previously unselected package ruby. 94s Preparing to unpack .../11-ruby_1%3a3.3_amd64.deb ... 94s Unpacking ruby (1:3.3) ... 94s Selecting previously unselected package rake. 94s Preparing to unpack .../12-rake_13.2.1-1build1_all.deb ... 94s Unpacking rake (13.2.1-1build1) ... 94s Selecting previously unselected package ruby-minitest. 94s Preparing to unpack .../13-ruby-minitest_5.26.1-1_all.deb ... 94s Unpacking ruby-minitest (5.26.1-1) ... 94s Selecting previously unselected package ruby-power-assert. 94s Preparing to unpack .../14-ruby-power-assert_2.0.5-1_all.deb ... 94s Unpacking ruby-power-assert (2.0.5-1) ... 94s Selecting previously unselected package ruby-test-unit. 94s Preparing to unpack .../15-ruby-test-unit_3.6.2-1_all.deb ... 94s Unpacking ruby-test-unit (3.6.2-1) ... 94s Selecting previously unselected package gem2deb-test-runner. 94s Preparing to unpack .../16-gem2deb-test-runner_2.2.5_amd64.deb ... 94s Unpacking gem2deb-test-runner (2.2.5) ... 94s Selecting previously unselected package ruby-nio4r:amd64. 94s Preparing to unpack .../17-ruby-nio4r_2.7.4-1_amd64.deb ... 94s Unpacking ruby-nio4r:amd64 (2.7.4-1) ... 94s Selecting previously unselected package puma. 94s Preparing to unpack .../18-puma_6.6.0-4_amd64.deb ... 94s Unpacking puma (6.6.0-4) ... 94s Selecting previously unselected package ruby-concurrent. 94s Preparing to unpack .../19-ruby-concurrent_1.3.4-1_all.deb ... 94s Unpacking ruby-concurrent (1.3.4-1) ... 94s Selecting previously unselected package ruby-i18n. 94s Preparing to unpack .../20-ruby-i18n_1.14.7-1_all.deb ... 94s Unpacking ruby-i18n (1.14.7-1) ... 94s Selecting previously unselected package ruby-tzinfo. 94s Preparing to unpack .../21-ruby-tzinfo_2.0.6-1_all.deb ... 94s Unpacking ruby-tzinfo (2.0.6-1) ... 94s Selecting previously unselected package ruby-connection-pool. 94s Preparing to unpack .../22-ruby-connection-pool_2.5.4-1_all.deb ... 94s Unpacking ruby-connection-pool (2.5.4-1) ... 94s Selecting previously unselected package ruby-base64. 94s Preparing to unpack .../23-ruby-base64_0.3.0-1build1_all.deb ... 94s Unpacking ruby-base64 (0.3.0-1build1) ... 94s Selecting previously unselected package ruby-activesupport. 94s Preparing to unpack .../24-ruby-activesupport_2%3a7.2.2.2+dfsg-2_all.deb ... 94s Unpacking ruby-activesupport (2:7.2.2.2+dfsg-2) ... 94s Selecting previously unselected package ruby-numerizer. 94s Preparing to unpack .../25-ruby-numerizer_0.2.0-3_all.deb ... 94s Unpacking ruby-numerizer (0.2.0-3) ... 94s Selecting previously unselected package ruby-chronic. 94s Preparing to unpack .../26-ruby-chronic_0.10.6-1_all.deb ... 94s Unpacking ruby-chronic (0.10.6-1) ... 94s Selecting previously unselected package ruby-delorean. 94s Preparing to unpack .../27-ruby-delorean_2.1.0-3_all.deb ... 94s Unpacking ruby-delorean (2.1.0-3) ... 94s Selecting previously unselected package ruby-diff-lcs. 94s Preparing to unpack .../28-ruby-diff-lcs_1.5.1-1_all.deb ... 94s Unpacking ruby-diff-lcs (1.5.1-1) ... 94s Selecting previously unselected package ruby-eventmachine:amd64. 94s Preparing to unpack .../29-ruby-eventmachine_1.3~pre20220315-df4ab006-5build1_amd64.deb ... 94s Unpacking ruby-eventmachine:amd64 (1.3~pre20220315-df4ab006-5build1) ... 94s Selecting previously unselected package ruby-excon. 94s Preparing to unpack .../30-ruby-excon_1.3.1-1_all.deb ... 94s Unpacking ruby-excon (1.3.1-1) ... 94s Selecting previously unselected package ruby-formatador. 94s Preparing to unpack .../31-ruby-formatador_1.2.3-1_all.deb ... 94s Unpacking ruby-formatador (1.2.3-1) ... 94s Selecting previously unselected package ruby-kgio. 94s Preparing to unpack .../32-ruby-kgio_2.11.2-2build7_amd64.deb ... 94s Unpacking ruby-kgio (2.11.2-2build7) ... 94s Selecting previously unselected package ruby-multi-json. 94s Preparing to unpack .../33-ruby-multi-json_1.15.0-1_all.deb ... 94s Unpacking ruby-multi-json (1.15.0-1) ... 94s Selecting previously unselected package ruby-mustermann. 94s Preparing to unpack .../34-ruby-mustermann_3.0.4-1build1_all.deb ... 94s Unpacking ruby-mustermann (3.0.4-1build1) ... 94s Selecting previously unselected package ruby-open4. 94s Preparing to unpack .../35-ruby-open4_1.3.4-3_all.deb ... 94s Unpacking ruby-open4 (1.3.4-3) ... 94s Selecting previously unselected package ruby-rack. 94s Preparing to unpack .../36-ruby-rack_3.1.18-1build1_all.deb ... 94s Unpacking ruby-rack (3.1.18-1build1) ... 94s Selecting previously unselected package ruby-rack-protection. 94s Preparing to unpack .../37-ruby-rack-protection_4.2.1-1build1_all.deb ... 94s Unpacking ruby-rack-protection (4.2.1-1build1) ... 94s Selecting previously unselected package ruby-rack-session. 94s Preparing to unpack .../38-ruby-rack-session_2.1.1-0.1_all.deb ... 94s Unpacking ruby-rack-session (2.1.1-0.1) ... 94s Selecting previously unselected package ruby-rackup. 94s Preparing to unpack .../39-ruby-rackup_2.1.0-4_all.deb ... 94s Unpacking ruby-rackup (2.1.0-4) ... 94s Selecting previously unselected package ruby-raindrops:amd64. 94s Preparing to unpack .../40-ruby-raindrops_0.20.0-2_amd64.deb ... 94s Unpacking ruby-raindrops:amd64 (0.20.0-2) ... 94s Selecting previously unselected package ruby-rspec-support. 94s Preparing to unpack .../41-ruby-rspec-support_3.13.0c0e0m0s1-2_all.deb ... 94s Unpacking ruby-rspec-support (3.13.0c0e0m0s1-2) ... 94s Selecting previously unselected package ruby-rspec-core. 94s Preparing to unpack .../42-ruby-rspec-core_3.13.0c0e0m0s1-2_all.deb ... 94s Unpacking ruby-rspec-core (3.13.0c0e0m0s1-2) ... 94s Selecting previously unselected package ruby-rspec-expectations. 94s Preparing to unpack .../43-ruby-rspec-expectations_3.13.0c0e0m0s1-2_all.deb ... 94s Unpacking ruby-rspec-expectations (3.13.0c0e0m0s1-2) ... 94s Selecting previously unselected package ruby-rspec-mocks. 94s Preparing to unpack .../44-ruby-rspec-mocks_3.13.0c0e0m0s1-2_all.deb ... 94s Unpacking ruby-rspec-mocks (3.13.0c0e0m0s1-2) ... 95s Selecting previously unselected package ruby-rspec. 95s Preparing to unpack .../45-ruby-rspec_3.13.0c0e0m0s1-2_all.deb ... 95s Unpacking ruby-rspec (3.13.0c0e0m0s1-2) ... 95s Selecting previously unselected package ruby-shindo. 95s Preparing to unpack .../46-ruby-shindo_0.3.11-1_all.deb ... 95s Unpacking ruby-shindo (0.3.11-1) ... 95s Selecting previously unselected package ruby-tilt. 95s Preparing to unpack .../47-ruby-tilt_2.6.1-1build1_all.deb ... 95s Unpacking ruby-tilt (2.6.1-1build1) ... 95s Selecting previously unselected package ruby-sinatra. 95s Preparing to unpack .../48-ruby-sinatra_4.2.1-1build1_all.deb ... 95s Unpacking ruby-sinatra (4.2.1-1build1) ... 95s Selecting previously unselected package ruby-sinatra-contrib. 95s Preparing to unpack .../49-ruby-sinatra-contrib_4.2.1-1build1_all.deb ... 95s Unpacking ruby-sinatra-contrib (4.2.1-1build1) ... 95s Selecting previously unselected package unicorn. 95s Preparing to unpack .../50-unicorn_6.1.0+git.20250131.1370f52-1_amd64.deb ... 95s Unpacking unicorn (6.1.0+git.20250131.1370f52-1) ... 95s Setting up ruby-multi-json (1.15.0-1) ... 95s Setting up ruby-ruby2-keywords (0.0.5-1build1) ... 95s Setting up ruby-mustermann (3.0.4-1build1) ... 95s Setting up ruby-open4 (1.3.4-3) ... 95s Setting up ruby-power-assert (2.0.5-1) ... 95s Setting up rubygems-integration (1.19build1) ... 95s Setting up ruby-concurrent (1.3.4-1) ... 95s Setting up ruby-minitest (5.26.1-1) ... 95s Setting up ruby-test-unit (3.6.2-1) ... 95s Setting up ruby-net-telnet (0.2.0-1build1) ... 95s Setting up ruby-csv (3.3.4-1) ... 95s Setting up ruby-base64 (0.3.0-1build1) ... 95s Setting up ruby-i18n (1.14.7-1) ... 95s Setting up ruby-rspec-support (3.13.0c0e0m0s1-2) ... 95s Setting up ruby-webrick (1.9.1-1) ... 95s Setting up ruby-connection-pool (2.5.4-1) ... 95s Setting up ruby-did-you-mean (1.6.3-2build1) ... 95s Setting up ruby-numerizer (0.2.0-3) ... 95s Setting up ruby-xmlrpc (0.3.3-2build1) ... 95s Setting up ruby-chronic (0.10.6-1) ... 95s Setting up ruby-tzinfo (2.0.6-1) ... 95s Setting up rake (13.2.1-1build1) ... 95s Setting up libruby3.3:amd64 (3.3.8-2ubuntu3) ... 95s Setting up ruby-activesupport (2:7.2.2.2+dfsg-2) ... 95s Setting up ruby-rubygems (3.6.7-2ubuntu1) ... 95s Setting up ruby3.3 (3.3.8-2ubuntu3) ... 95s Setting up libruby:amd64 (1:3.3) ... 95s Setting up ruby-excon (1.3.1-1) ... 95s Setting up ruby-eventmachine:amd64 (1.3~pre20220315-df4ab006-5build1) ... 95s Setting up ruby-raindrops:amd64 (0.20.0-2) ... 95s Setting up ruby (1:3.3) ... 95s Setting up ruby-nio4r:amd64 (2.7.4-1) ... 95s Setting up ruby-rspec-core (3.13.0c0e0m0s1-2) ... 95s Setting up ruby-tilt (2.6.1-1build1) ... 95s Setting up ruby-kgio (2.11.2-2build7) ... 95s Setting up ruby-diff-lcs (1.5.1-1) ... 95s Setting up puma (6.6.0-4) ... 95s Setting up ruby-delorean (2.1.0-3) ... 95s Setting up ruby-rack (3.1.18-1build1) ... 95s Setting up gem2deb-test-runner (2.2.5) ... 95s Setting up ruby-formatador (1.2.3-1) ... 95s Setting up unicorn (6.1.0+git.20250131.1370f52-1) ... 95s Created symlink '/etc/systemd/system/multi-user.target.wants/unicorn.service' → '/usr/lib/systemd/system/unicorn.service'. 95s Setting up ruby-rspec-expectations (3.13.0c0e0m0s1-2) ... 95s Setting up ruby-rspec-mocks (3.13.0c0e0m0s1-2) ... 95s Setting up ruby-shindo (0.3.11-1) ... 95s Setting up ruby-rack-session (2.1.1-0.1) ... 95s Setting up ruby-rack-protection (4.2.1-1build1) ... 95s Setting up ruby-rackup (2.1.0-4) ... 95s Setting up ruby-rspec (3.13.0c0e0m0s1-2) ... 95s Setting up ruby-sinatra (4.2.1-1build1) ... 95s Setting up ruby-sinatra-contrib (4.2.1-1build1) ... 95s Processing triggers for libc-bin (2.42-2ubuntu4) ... 95s Processing triggers for man-db (2.13.1-1) ... 96s autopkgtest [17:14:10]: test environment configured for cross building 96s autopkgtest [17:14:10]: test gem2deb-test-runner: gem2deb-test-runner --autopkgtest --check-dependencies 2>&1 96s autopkgtest [17:14:10]: test gem2deb-test-runner: [----------------------- 96s 96s ┌──────────────────────────────────────────────────────────────────────────────┐ 96s │ Checking Rubygems dependency resolution on ruby3.3 │ 96s └──────────────────────────────────────────────────────────────────────────────┘ 96s 96s RUBYLIB=. GEM_PATH= ruby3.3 -e gem\ \"excon\" 96s mv lib ./.gem2deb.lib 97s mv ./.gem2deb.lib lib 97s 97s ┌──────────────────────────────────────────────────────────────────────────────┐ 97s │ Run tests for ruby3.3 from debian/ruby-tests.rake │ 97s └──────────────────────────────────────────────────────────────────────────────┘ 97s 97s RUBYLIB=. GEM_PATH= ruby3.3 -S rake --rakelibdir /gem2deb-nonexistent -f debian/ruby-tests.rake 97s mv lib ./.gem2deb.lib 97s sh: 1: git: not found 97s /usr/bin/ruby3.3 -S shindo 97s 97s Excon bad server interaction 97s header splitting 97s prevents key splitting + raises Excon::Error::InvalidHeaderKey 97s prevents value splitting + raises Excon::Error::InvalidHeaderValue 97s bad server: causes EOFError 97s with no content length and no chunking 97s without a block 97s response.body + returns "hello" 97s with a block 97s body from chunks + returns "hello" 97s eof server: causes EOFError 97s request + raises Excon::Error::Socket 97s 97s Excon basics 97s + returns true 97s nonblock => true, persistent => false 97s method and path defaults 97s request().body + returns "GET /" 97s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 97s request(:method => :get).body + returns "GET /" 97s request(:path => '/').body + returns "GET /" 97s request(:method => :get, :path => '/').body + returns "GET /" 97s GET /content-length/100 97s response.status + returns 200 97s response[:status] + returns 200 97s response.headers['Content-Length'] + returns "100" 97s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 97s + Time.parse(response.headers['Date']).is_a?(Time) 97s + !!(response.headers['Server'] =~ /^WEBrick/) 97s response.headers['Custom'] + returns "Foo: bar" 97s response.remote_ip + returns "127.0.0.1" 97s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 97s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 97s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 97s POST /body-sink 97s response.body + returns "5000000" 97s empty body + returns "0" 97s POST /echo 97s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 97s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 97s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 97s with multi-byte strings 97s + properly concatenates request+headers and body 97s PUT /echo 97s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 97s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 97s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 97s with multi-byte strings 97s + properly concatenates request+headers and body 97s should succeed with tcp_nodelay + returns 200 97s + returns true 97s nonblock => true, persistent => true 97s method and path defaults 97s request().body + returns "GET /" 97s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 97s request(:method => :get).body + returns "GET /" 97s request(:path => '/').body + returns "GET /" 97s request(:method => :get, :path => '/').body + returns "GET /" 97s GET /content-length/100 98s response.status + returns 200 98s response[:status] + returns 200 98s response.headers['Content-Length'] + returns "100" 98s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 98s + Time.parse(response.headers['Date']).is_a?(Time) 98s + !!(response.headers['Server'] =~ /^WEBrick/) 98s response.headers['Custom'] + returns "Foo: bar" 98s response.remote_ip + returns "127.0.0.1" 98s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 98s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 98s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 98s POST /body-sink 98s response.body + returns "5000000" 98s empty body + returns "0" 98s POST /echo 98s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 98s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 98s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 98s with multi-byte strings 98s + properly concatenates request+headers and body 98s PUT /echo 98s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 98s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 98s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 98s with multi-byte strings 98s + properly concatenates request+headers and body 98s should succeed with tcp_nodelay + returns 200 98s + returns true 98s nonblock => false, persistent => true 98s method and path defaults 98s request().body + returns "GET /" 98s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 98s request(:method => :get).body + returns "GET /" 98s request(:path => '/').body + returns "GET /" 98s request(:method => :get, :path => '/').body + returns "GET /" 98s GET /content-length/100 98s response.status + returns 200 98s response[:status] + returns 200 98s response.headers['Content-Length'] + returns "100" 98s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 98s + Time.parse(response.headers['Date']).is_a?(Time) 98s + !!(response.headers['Server'] =~ /^WEBrick/) 98s response.headers['Custom'] + returns "Foo: bar" 98s response.remote_ip + returns "127.0.0.1" 98s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 98s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 98s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 98s POST /body-sink 98s response.body + returns "5000000" 98s empty body + returns "0" 98s POST /echo 98s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 99s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 99s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 99s with multi-byte strings 99s + properly concatenates request+headers and body 99s PUT /echo 99s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 99s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 99s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 99s with multi-byte strings 99s + properly concatenates request+headers and body 99s should succeed with tcp_nodelay + returns 200 99s + returns true 99s nonblock => false, persistent => false 99s method and path defaults 99s request().body + returns "GET /" 99s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 99s request(:method => :get).body + returns "GET /" 99s request(:path => '/').body + returns "GET /" 99s request(:method => :get, :path => '/').body + returns "GET /" 99s GET /content-length/100 99s response.status + returns 200 99s response[:status] + returns 200 99s response.headers['Content-Length'] + returns "100" 99s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 99s + Time.parse(response.headers['Date']).is_a?(Time) 99s + !!(response.headers['Server'] =~ /^WEBrick/) 99s response.headers['Custom'] + returns "Foo: bar" 99s response.remote_ip + returns "127.0.0.1" 99s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 99s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 99s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 99s POST /body-sink 99s response.body + returns "5000000" 99s empty body + returns "0" 99s POST /echo 99s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 99s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 99s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 99s with multi-byte strings 99s + properly concatenates request+headers and body 99s PUT /echo 99s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 99s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 99s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 99s with multi-byte strings 99s + properly concatenates request+headers and body 99s should succeed with tcp_nodelay + returns 200 99s explicit uri passed to connection 99s GET /content-length/100 + returns 200 99s 99s Excon streaming basics 99s http 99s + returns true 99s simple blocking request on streaming endpoint + returns ["Hellostreamyworld", "response time ok"] 100s simple blocking request on streaming endpoint with fixed length + returns ["Hellostreamyworld", "response time ok"] 100s simple request with response_block on streaming endpoint + returns [["Hello", "streamy", "world"], "response times ok"] 100s simple request with response_block on streaming endpoint with fixed length + returns [["Hello", "streamy", "world"], "response times ok"] 100s https 100s + returns true 100s simple blocking request on streaming endpoint + returns ["Hellostreamyworld", "response time ok"] 101s simple blocking request on streaming endpoint with fixed length + returns ["Hellostreamyworld", "response time ok"] 101s simple request with response_block on streaming endpoint + returns [["Hello", "streamy", "world"], "response times ok"] 101s simple request with response_block on streaming endpoint with fixed length + returns [["Hello", "streamy", "world"], "response times ok"] 101s 101s Excon basics (Basic Auth Pass) 102s + returns true 102s nonblock => true, persistent => false 102s method and path defaults 102s request().body + returns "GET /" 102s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 102s request(:method => :get).body + returns "GET /" 102s request(:path => '/').body + returns "GET /" 102s request(:method => :get, :path => '/').body + returns "GET /" 102s GET /content-length/100 102s response.status + returns 200 102s response[:status] + returns 200 102s response.headers['Content-Length'] + returns "100" 102s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 102s + Time.parse(response.headers['Date']).is_a?(Time) 102s + !!(response.headers['Server'] =~ /^WEBrick/) 102s response.headers['Custom'] + returns "Foo: bar" 102s response.remote_ip + returns "127.0.0.1" 102s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 102s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 102s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 102s POST /body-sink 102s response.body + returns "5000000" 102s empty body + returns "0" 102s POST /echo 102s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 102s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 102s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 102s with multi-byte strings 102s + properly concatenates request+headers and body 102s PUT /echo 102s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 102s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 102s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 102s with multi-byte strings 102s + properly concatenates request+headers and body 102s should succeed with tcp_nodelay + returns 200 102s + returns true 102s nonblock => true, persistent => true 102s method and path defaults 102s request().body + returns "GET /" 102s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 102s request(:method => :get).body + returns "GET /" 102s request(:path => '/').body + returns "GET /" 102s request(:method => :get, :path => '/').body + returns "GET /" 102s GET /content-length/100 102s response.status + returns 200 102s response[:status] + returns 200 102s response.headers['Content-Length'] + returns "100" 102s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 102s + Time.parse(response.headers['Date']).is_a?(Time) 102s + !!(response.headers['Server'] =~ /^WEBrick/) 102s response.headers['Custom'] + returns "Foo: bar" 102s response.remote_ip + returns "127.0.0.1" 102s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 102s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 102s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 102s POST /body-sink 102s response.body + returns "5000000" 102s empty body + returns "0" 102s POST /echo 102s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 102s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 102s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 102s with multi-byte strings 102s + properly concatenates request+headers and body 102s PUT /echo 102s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 102s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 102s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 102s with multi-byte strings 102s + properly concatenates request+headers and body 102s should succeed with tcp_nodelay + returns 200 102s + returns true 102s nonblock => false, persistent => true 102s method and path defaults 102s request().body + returns "GET /" 102s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 102s request(:method => :get).body + returns "GET /" 102s request(:path => '/').body + returns "GET /" 103s request(:method => :get, :path => '/').body + returns "GET /" 103s GET /content-length/100 103s response.status + returns 200 103s response[:status] + returns 200 103s response.headers['Content-Length'] + returns "100" 103s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 103s + Time.parse(response.headers['Date']).is_a?(Time) 103s + !!(response.headers['Server'] =~ /^WEBrick/) 103s response.headers['Custom'] + returns "Foo: bar" 103s response.remote_ip + returns "127.0.0.1" 103s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 103s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 103s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 103s POST /body-sink 103s response.body + returns "5000000" 103s empty body + returns "0" 103s POST /echo 103s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 103s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 103s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 103s with multi-byte strings 103s + properly concatenates request+headers and body 103s PUT /echo 103s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 103s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 103s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 103s with multi-byte strings 103s + properly concatenates request+headers and body 103s should succeed with tcp_nodelay + returns 200 103s + returns true 103s nonblock => false, persistent => false 103s method and path defaults 103s request().body + returns "GET /" 103s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 103s request(:method => :get).body + returns "GET /" 103s request(:path => '/').body + returns "GET /" 103s request(:method => :get, :path => '/').body + returns "GET /" 103s GET /content-length/100 103s response.status + returns 200 103s response[:status] + returns 200 103s response.headers['Content-Length'] + returns "100" 103s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 103s + Time.parse(response.headers['Date']).is_a?(Time) 103s + !!(response.headers['Server'] =~ /^WEBrick/) 103s response.headers['Custom'] + returns "Foo: bar" 103s response.remote_ip + returns "127.0.0.1" 103s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 103s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 103s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 103s POST /body-sink 103s response.body + returns "5000000" 103s empty body + returns "0" 103s POST /echo 103s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 103s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 103s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 103s with multi-byte strings 103s + properly concatenates request+headers and body 103s PUT /echo 103s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 103s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 103s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 103s with multi-byte strings 103s + properly concatenates request+headers and body 103s should succeed with tcp_nodelay + returns 200 103s with frozen args + returns 200 103s with user/pass on request + returns 200 103s with user/pass on connection and request + returns 200 103s 103s Excon basics (Basic Auth Fail) 103s response.status for correct user, no password + returns 401 103s response.status for correct user, wrong password + returns 401 103s response.status for wrong user, correct password + returns 401 103s 103s Excon basics (ssl) 104s + returns true 104s nonblock => true, persistent => false 104s method and path defaults 104s request().body + returns "GET /" 104s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 104s request(:method => :get).body + returns "GET /" 104s request(:path => '/').body + returns "GET /" 104s request(:method => :get, :path => '/').body + returns "GET /" 104s GET /content-length/100 104s response.status + returns 200 104s response[:status] + returns 200 104s response.headers['Content-Length'] + returns "100" 104s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 104s + Time.parse(response.headers['Date']).is_a?(Time) 104s + !!(response.headers['Server'] =~ /^WEBrick/) 104s response.headers['Custom'] + returns "Foo: bar" 104s response.remote_ip + returns "127.0.0.1" 104s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 104s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 104s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 104s POST /body-sink 104s response.body + returns "5000000" 104s empty body + returns "0" 104s POST /echo 104s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 104s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 104s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 104s with multi-byte strings 104s + properly concatenates request+headers and body 104s PUT /echo 104s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 104s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 104s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 104s with multi-byte strings 104s + properly concatenates request+headers and body 104s should succeed with tcp_nodelay + returns 200 104s + returns true 104s nonblock => true, persistent => true 104s method and path defaults 104s request().body + returns "GET /" 105s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 105s request(:method => :get).body + returns "GET /" 105s request(:path => '/').body + returns "GET /" 105s request(:method => :get, :path => '/').body + returns "GET /" 105s GET /content-length/100 105s response.status + returns 200 105s response[:status] + returns 200 105s response.headers['Content-Length'] + returns "100" 105s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 105s + Time.parse(response.headers['Date']).is_a?(Time) 105s + !!(response.headers['Server'] =~ /^WEBrick/) 105s response.headers['Custom'] + returns "Foo: bar" 105s response.remote_ip + returns "127.0.0.1" 105s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 105s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 105s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 105s POST /body-sink 105s response.body + returns "5000000" 105s empty body + returns "0" 105s POST /echo 105s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 105s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 105s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 105s with multi-byte strings 105s + properly concatenates request+headers and body 105s PUT /echo 105s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 105s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 105s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 105s with multi-byte strings 105s + properly concatenates request+headers and body 105s should succeed with tcp_nodelay + returns 200 105s + returns true 105s nonblock => false, persistent => true 105s method and path defaults 105s request().body + returns "GET /" 105s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 105s request(:method => :get).body + returns "GET /" 105s request(:path => '/').body + returns "GET /" 105s request(:method => :get, :path => '/').body + returns "GET /" 105s GET /content-length/100 106s response.status + returns 200 106s response[:status] + returns 200 106s response.headers['Content-Length'] + returns "100" 106s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 106s + Time.parse(response.headers['Date']).is_a?(Time) 106s + !!(response.headers['Server'] =~ /^WEBrick/) 106s response.headers['Custom'] + returns "Foo: bar" 106s response.remote_ip + returns "127.0.0.1" 106s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 106s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 106s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 106s POST /body-sink 106s response.body + returns "5000000" 106s empty body + returns "0" 106s POST /echo 106s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 106s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 106s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 106s with multi-byte strings 106s + properly concatenates request+headers and body 106s PUT /echo 106s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 106s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 106s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 106s with multi-byte strings 106s + properly concatenates request+headers and body 106s should succeed with tcp_nodelay + returns 200 106s + returns true 106s nonblock => false, persistent => false 106s method and path defaults 106s request().body + returns "GET /" 106s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 106s request(:method => :get).body + returns "GET /" 106s request(:path => '/').body + returns "GET /" 106s request(:method => :get, :path => '/').body + returns "GET /" 106s GET /content-length/100 106s response.status + returns 200 106s response[:status] + returns 200 106s response.headers['Content-Length'] + returns "100" 106s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 106s + Time.parse(response.headers['Date']).is_a?(Time) 106s + !!(response.headers['Server'] =~ /^WEBrick/) 106s response.headers['Custom'] + returns "Foo: bar" 106s response.remote_ip + returns "127.0.0.1" 106s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 106s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 106s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 106s POST /body-sink 106s response.body + returns "5000000" 107s empty body + returns "0" 107s POST /echo 107s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 107s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 107s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 107s with multi-byte strings 107s + properly concatenates request+headers and body 107s PUT /echo 107s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 107s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 107s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 107s with multi-byte strings 107s + properly concatenates request+headers and body 107s should succeed with tcp_nodelay + returns 200 107s 107s [2026-02-04 17:14:20] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 107s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 107s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 107s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 107s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 107s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 107s 107s [2026-02-04 17:14:20] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 107s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 107s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 107s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 107s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 107s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 107s 107s [2026-02-04 17:14:20] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 107s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 107s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 107s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 107s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 107s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 107s 107s [2026-02-04 17:14:20] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 107s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 107s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 107s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 107s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 107s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 107s 107s Excon basics verify_hostname (ssl) 107s + returns true 107s response.status + returns 200 107s 107s Excon ssl verify peer (ssl) 107s + returns true 107s response.status + returns 200 108s + returns true 108s response.status + returns 200 108s + returns true 108s response.status + returns 200 108s 108s Excon ssl verify peer (ssl cert store) 108s + returns true 108s response.status + returns 200 108s 108s Excon basics (ssl file) (focus) 108s GET /content-length/100 + raises Excon::Error::Socket 108s + returns true 108s nonblock => true, persistent => false 108s method and path defaults 108s request().body + returns "GET /" 108s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 108s request(:method => :get).body + returns "GET /" 109s request(:path => '/').body + returns "GET /" 109s request(:method => :get, :path => '/').body + returns "GET /" 109s GET /content-length/100 109s response.status + returns 200 109s response[:status] + returns 200 109s response.headers['Content-Length'] + returns "100" 109s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 109s + Time.parse(response.headers['Date']).is_a?(Time) 109s + !!(response.headers['Server'] =~ /^WEBrick/) 109s response.headers['Custom'] + returns "Foo: bar" 109s response.remote_ip + returns "127.0.0.1" 109s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 109s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 109s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 109s POST /body-sink 109s response.body + returns "5000000" 109s empty body + returns "0" 109s POST /echo 109s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 109s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 109s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 109s with multi-byte strings 109s + properly concatenates request+headers and body 109s PUT /echo 109s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 109s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 109s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 109s with multi-byte strings 109s + properly concatenates request+headers and body 109s should succeed with tcp_nodelay + returns 200 109s + returns true 109s nonblock => true, persistent => true 109s method and path defaults 109s request().body + returns "GET /" 109s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 109s request(:method => :get).body + returns "GET /" 109s request(:path => '/').body + returns "GET /" 110s request(:method => :get, :path => '/').body + returns "GET /" 110s GET /content-length/100 110s response.status + returns 200 110s response[:status] + returns 200 110s response.headers['Content-Length'] + returns "100" 110s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 110s + Time.parse(response.headers['Date']).is_a?(Time) 110s + !!(response.headers['Server'] =~ /^WEBrick/) 110s response.headers['Custom'] + returns "Foo: bar" 110s response.remote_ip + returns "127.0.0.1" 110s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 110s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 110s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 110s POST /body-sink 110s response.body + returns "5000000" 110s empty body + returns "0" 110s POST /echo 110s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 110s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 110s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 110s with multi-byte strings 110s + properly concatenates request+headers and body 110s PUT /echo 110s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 110s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 110s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 110s with multi-byte strings 110s + properly concatenates request+headers and body 110s should succeed with tcp_nodelay + returns 200 110s + returns true 110s nonblock => false, persistent => true 110s method and path defaults 110s request().body + returns "GET /" 110s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 110s request(:method => :get).body + returns "GET /" 110s request(:path => '/').body + returns "GET /" 110s request(:method => :get, :path => '/').body + returns "GET /" 110s GET /content-length/100 110s response.status + returns 200 110s response[:status] + returns 200 110s response.headers['Content-Length'] + returns "100" 110s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 110s + Time.parse(response.headers['Date']).is_a?(Time) 110s + !!(response.headers['Server'] =~ /^WEBrick/) 110s response.headers['Custom'] + returns "Foo: bar" 110s response.remote_ip + returns "127.0.0.1" 110s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 110s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 110s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 110s POST /body-sink 111s response.body + returns "5000000" 111s empty body + returns "0" 111s POST /echo 111s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 111s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 111s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 111s with multi-byte strings 111s + properly concatenates request+headers and body 111s PUT /echo 111s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 111s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 111s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 111s with multi-byte strings 111s + properly concatenates request+headers and body 111s should succeed with tcp_nodelay + returns 200 111s + returns true 111s nonblock => false, persistent => false 111s method and path defaults 111s request().body + returns "GET /" 111s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 111s request(:method => :get).body + returns "GET /" 111s request(:path => '/').body + returns "GET /" 111s request(:method => :get, :path => '/').body + returns "GET /" 111s GET /content-length/100 111s response.status + returns 200 111s response[:status] + returns 200 111s response.headers['Content-Length'] + returns "100" 111s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 111s + Time.parse(response.headers['Date']).is_a?(Time) 111s + !!(response.headers['Server'] =~ /^WEBrick/) 111s response.headers['Custom'] + returns "Foo: bar" 111s response.remote_ip + returns "127.0.0.1" 111s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 111s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 111s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 111s POST /body-sink 111s response.body + returns "5000000" 111s empty body + returns "0" 111s POST /echo 112s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 112s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 112s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 112s with multi-byte strings 112s + properly concatenates request+headers and body 112s PUT /echo 112s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 112s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 112s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 112s with multi-byte strings 112s + properly concatenates request+headers and body 112s should succeed with tcp_nodelay + returns 200 112s + returns true 112s nonblock => true, persistent => false 112s method and path defaults 112s request().body + returns "GET /" 112s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 112s request(:method => :get).body + returns "GET /" 112s request(:path => '/').body + returns "GET /" 112s request(:method => :get, :path => '/').body + returns "GET /" 112s GET /content-length/100 112s response.status + returns 200 112s response[:status] + returns 200 112s response.headers['Content-Length'] + returns "100" 112s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 112s + Time.parse(response.headers['Date']).is_a?(Time) 112s + !!(response.headers['Server'] =~ /^WEBrick/) 112s response.headers['Custom'] + returns "Foo: bar" 112s response.remote_ip + returns "127.0.0.1" 112s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 112s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 112s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 112s POST /body-sink 112s response.body + returns "5000000" 112s empty body + returns "0" 112s POST /echo 112s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 112s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 113s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 113s with multi-byte strings 113s + properly concatenates request+headers and body 113s PUT /echo 113s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 113s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 113s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 113s with multi-byte strings 113s + properly concatenates request+headers and body 113s should succeed with tcp_nodelay + returns 200 113s + returns true 113s nonblock => true, persistent => true 113s method and path defaults 113s request().body + returns "GET /" 113s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 113s request(:method => :get).body + returns "GET /" 113s request(:path => '/').body + returns "GET /" 113s request(:method => :get, :path => '/').body + returns "GET /" 113s GET /content-length/100 113s response.status + returns 200 113s response[:status] + returns 200 113s response.headers['Content-Length'] + returns "100" 113s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 113s + Time.parse(response.headers['Date']).is_a?(Time) 113s + !!(response.headers['Server'] =~ /^WEBrick/) 113s response.headers['Custom'] + returns "Foo: bar" 113s response.remote_ip + returns "127.0.0.1" 113s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 113s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 113s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 113s POST /body-sink 113s response.body + returns "5000000" 113s empty body + returns "0" 113s POST /echo 113s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 113s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 113s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 113s with multi-byte strings 113s + properly concatenates request+headers and body 113s PUT /echo 114s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 114s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 114s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 114s with multi-byte strings 114s + properly concatenates request+headers and body 114s should succeed with tcp_nodelay + returns 200 114s + returns true 114s nonblock => false, persistent => true 114s method and path defaults 114s request().body + returns "GET /" 114s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 114s request(:method => :get).body + returns "GET /" 114s request(:path => '/').body + returns "GET /" 114s request(:method => :get, :path => '/').body + returns "GET /" 114s GET /content-length/100 114s response.status + returns 200 114s response[:status] + returns 200 114s response.headers['Content-Length'] + returns "100" 114s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 114s + Time.parse(response.headers['Date']).is_a?(Time) 114s + !!(response.headers['Server'] =~ /^WEBrick/) 114s response.headers['Custom'] + returns "Foo: bar" 114s response.remote_ip + returns "127.0.0.1" 114s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 114s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 114s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 114s POST /body-sink 114s response.body + returns "5000000" 114s empty body + returns "0" 114s POST /echo 114s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 114s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 114s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 114s with multi-byte strings 114s + properly concatenates request+headers and body 114s PUT /echo 114s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 114s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 114s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 114s with multi-byte strings 114s + properly concatenates request+headers and body 114s should succeed with tcp_nodelay + returns 200 114s + returns true 114s nonblock => false, persistent => false 114s method and path defaults 115s request().body + returns "GET /" 115s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 115s request(:method => :get).body + returns "GET /" 115s request(:path => '/').body + returns "GET /" 115s request(:method => :get, :path => '/').body + returns "GET /" 115s GET /content-length/100 115s response.status + returns 200 115s response[:status] + returns 200 115s response.headers['Content-Length'] + returns "100" 115s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 115s + Time.parse(response.headers['Date']).is_a?(Time) 115s + !!(response.headers['Server'] =~ /^WEBrick/) 115s response.headers['Custom'] + returns "Foo: bar" 115s response.remote_ip + returns "127.0.0.1" 115s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 115s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 115s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 115s POST /body-sink 115s response.body + returns "5000000" 115s empty body + returns "0" 115s POST /echo 115s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 115s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 115s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 115s with multi-byte strings 115s + properly concatenates request+headers and body 115s PUT /echo 115s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 115s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 115s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 115s with multi-byte strings 115s + properly concatenates request+headers and body 115s should succeed with tcp_nodelay + returns 200 115s 115s [2026-02-04 17:14:25] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 115s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 115s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 115s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 115s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 115s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 115s 115s [2026-02-04 17:14:25] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 115s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 115s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 115s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 115s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 115s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 115s 115s [2026-02-04 17:14:26] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 115s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 115s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 115s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 115s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 115s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 115s 115s [2026-02-04 17:14:26] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 115s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 115s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 115s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 115s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 115s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 115s 115s [2026-02-04 17:14:28] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 115s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 115s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 115s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 115s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 115s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 115s 115s [2026-02-04 17:14:29] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 115s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 115s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 115s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 115s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 115s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 115s 115s Excon basics (ssl chain) (focus) 116s GET /content-length/100 + raises Excon::Error::Socket 116s + returns true 116s nonblock => true, persistent => false 116s method and path defaults 116s request().body + returns "GET /" 116s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 116s request(:method => :get).body + returns "GET /" 116s request(:path => '/').body + returns "GET /" 116s request(:method => :get, :path => '/').body + returns "GET /" 116s GET /content-length/100 116s response.status + returns 200 116s response[:status] + returns 200 116s response.headers['Content-Length'] + returns "100" 116s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 116s + Time.parse(response.headers['Date']).is_a?(Time) 116s + !!(response.headers['Server'] =~ /^WEBrick/) 116s response.headers['Custom'] + returns "Foo: bar" 116s response.remote_ip + returns "127.0.0.1" 116s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 116s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 116s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 116s POST /body-sink 116s response.body + returns "5000000" 116s empty body + returns "0" 116s POST /echo 116s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 116s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 116s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 116s with multi-byte strings 116s + properly concatenates request+headers and body 116s PUT /echo 116s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 116s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 116s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 116s with multi-byte strings 117s + properly concatenates request+headers and body 117s should succeed with tcp_nodelay + returns 200 117s + returns true 117s nonblock => true, persistent => true 117s method and path defaults 117s request().body + returns "GET /" 117s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 117s request(:method => :get).body + returns "GET /" 117s request(:path => '/').body + returns "GET /" 117s request(:method => :get, :path => '/').body + returns "GET /" 117s GET /content-length/100 117s response.status + returns 200 117s response[:status] + returns 200 117s response.headers['Content-Length'] + returns "100" 117s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 117s + Time.parse(response.headers['Date']).is_a?(Time) 117s + !!(response.headers['Server'] =~ /^WEBrick/) 117s response.headers['Custom'] + returns "Foo: bar" 117s response.remote_ip + returns "127.0.0.1" 117s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 117s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 117s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 117s POST /body-sink 117s response.body + returns "5000000" 117s empty body + returns "0" 117s POST /echo 117s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 117s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 117s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 117s with multi-byte strings 117s + properly concatenates request+headers and body 117s PUT /echo 117s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 117s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 117s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 117s with multi-byte strings 117s + properly concatenates request+headers and body 117s should succeed with tcp_nodelay + returns 200 117s + returns true 117s nonblock => false, persistent => true 117s method and path defaults 117s request().body + returns "GET /" 117s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 118s request(:method => :get).body + returns "GET /" 118s request(:path => '/').body + returns "GET /" 118s request(:method => :get, :path => '/').body + returns "GET /" 118s GET /content-length/100 118s response.status + returns 200 118s response[:status] + returns 200 118s response.headers['Content-Length'] + returns "100" 118s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 118s + Time.parse(response.headers['Date']).is_a?(Time) 118s + !!(response.headers['Server'] =~ /^WEBrick/) 118s response.headers['Custom'] + returns "Foo: bar" 118s response.remote_ip + returns "127.0.0.1" 118s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 118s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 118s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 118s POST /body-sink 118s response.body + returns "5000000" 118s empty body + returns "0" 118s POST /echo 118s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 118s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 118s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 118s with multi-byte strings 118s + properly concatenates request+headers and body 118s PUT /echo 118s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 118s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 118s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 118s with multi-byte strings 118s + properly concatenates request+headers and body 118s should succeed with tcp_nodelay + returns 200 118s + returns true 118s nonblock => false, persistent => false 118s method and path defaults 118s request().body + returns "GET /" 118s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 118s request(:method => :get).body + returns "GET /" 118s request(:path => '/').body + returns "GET /" 118s request(:method => :get, :path => '/').body + returns "GET /" 118s GET /content-length/100 119s response.status + returns 200 119s response[:status] + returns 200 119s response.headers['Content-Length'] + returns "100" 119s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 119s + Time.parse(response.headers['Date']).is_a?(Time) 119s + !!(response.headers['Server'] =~ /^WEBrick/) 119s response.headers['Custom'] + returns "Foo: bar" 119s response.remote_ip + returns "127.0.0.1" 119s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 119s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 119s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 119s POST /body-sink 119s response.body + returns "5000000" 119s empty body + returns "0" 119s POST /echo 119s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 119s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 119s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 119s with multi-byte strings 119s + properly concatenates request+headers and body 119s PUT /echo 119s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 119s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 119s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 119s with multi-byte strings 119s + properly concatenates request+headers and body 119s should succeed with tcp_nodelay + returns 200 119s + returns true 119s nonblock => true, persistent => false 119s method and path defaults 119s request().body + returns "GET /" 119s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 119s request(:method => :get).body + returns "GET /" 119s request(:path => '/').body + returns "GET /" 119s request(:method => :get, :path => '/').body + returns "GET /" 119s GET /content-length/100 119s response.status + returns 200 119s response[:status] + returns 200 119s response.headers['Content-Length'] + returns "100" 119s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 119s + Time.parse(response.headers['Date']).is_a?(Time) 119s + !!(response.headers['Server'] =~ /^WEBrick/) 119s response.headers['Custom'] + returns "Foo: bar" 119s response.remote_ip + returns "127.0.0.1" 119s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 119s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 119s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 119s POST /body-sink 120s response.body + returns "5000000" 120s empty body + returns "0" 120s POST /echo 120s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 120s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 120s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 120s with multi-byte strings 120s + properly concatenates request+headers and body 120s PUT /echo 120s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 120s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 120s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 120s with multi-byte strings 120s + properly concatenates request+headers and body 120s should succeed with tcp_nodelay + returns 200 120s + returns true 120s nonblock => true, persistent => true 120s method and path defaults 120s request().body + returns "GET /" 120s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 120s request(:method => :get).body + returns "GET /" 120s request(:path => '/').body + returns "GET /" 120s request(:method => :get, :path => '/').body + returns "GET /" 120s GET /content-length/100 120s response.status + returns 200 120s response[:status] + returns 200 120s response.headers['Content-Length'] + returns "100" 120s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 120s + Time.parse(response.headers['Date']).is_a?(Time) 120s + !!(response.headers['Server'] =~ /^WEBrick/) 120s response.headers['Custom'] + returns "Foo: bar" 120s response.remote_ip + returns "127.0.0.1" 120s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 120s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 120s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 120s POST /body-sink 120s response.body + returns "5000000" 121s empty body + returns "0" 121s POST /echo 121s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 121s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 121s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 121s with multi-byte strings 121s + properly concatenates request+headers and body 121s PUT /echo 121s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 121s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 121s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 121s with multi-byte strings 121s + properly concatenates request+headers and body 121s should succeed with tcp_nodelay + returns 200 121s + returns true 121s nonblock => false, persistent => true 121s method and path defaults 121s request().body + returns "GET /" 121s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 121s request(:method => :get).body + returns "GET /" 121s request(:path => '/').body + returns "GET /" 121s request(:method => :get, :path => '/').body + returns "GET /" 121s GET /content-length/100 121s response.status + returns 200 121s response[:status] + returns 200 121s response.headers['Content-Length'] + returns "100" 121s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 121s + Time.parse(response.headers['Date']).is_a?(Time) 121s + !!(response.headers['Server'] =~ /^WEBrick/) 121s response.headers['Custom'] + returns "Foo: bar" 121s response.remote_ip + returns "127.0.0.1" 121s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 121s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 121s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 121s POST /body-sink 121s response.body + returns "5000000" 121s empty body + returns "0" 121s POST /echo 121s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 121s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 121s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 121s with multi-byte strings 122s + properly concatenates request+headers and body 122s PUT /echo 122s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 122s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 122s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 122s with multi-byte strings 122s + properly concatenates request+headers and body 122s should succeed with tcp_nodelay + returns 200 122s + returns true 122s nonblock => false, persistent => false 122s method and path defaults 122s request().body + returns "GET /" 122s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 122s request(:method => :get).body + returns "GET /" 122s request(:path => '/').body + returns "GET /" 122s request(:method => :get, :path => '/').body + returns "GET /" 122s GET /content-length/100 122s response.status + returns 200 122s response[:status] + returns 200 122s response.headers['Content-Length'] + returns "100" 122s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 122s + Time.parse(response.headers['Date']).is_a?(Time) 122s + !!(response.headers['Server'] =~ /^WEBrick/) 122s response.headers['Custom'] + returns "Foo: bar" 122s response.remote_ip + returns "127.0.0.1" 122s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 122s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 122s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 122s POST /body-sink 122s response.body + returns "5000000" 122s empty body + returns "0" 122s POST /echo 122s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 122s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 122s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 122s with multi-byte strings 122s + properly concatenates request+headers and body 122s PUT /echo 122s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 122s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 123s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 123s with multi-byte strings 123s + properly concatenates request+headers and body 123s should succeed with tcp_nodelay + returns 200 123s 123s [2026-02-04 17:14:32] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 123s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 123s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 123s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 123s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 123s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 123s 123s [2026-02-04 17:14:33] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 123s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 123s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 123s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 123s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 123s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 123s 123s [2026-02-04 17:14:33] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 123s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 123s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 123s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 123s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 123s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 123s 123s [2026-02-04 17:14:33] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 123s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 123s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 123s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 123s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 123s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 123s 123s [2026-02-04 17:14:35] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 123s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 123s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 123s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 123s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 123s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 123s 123s [2026-02-04 17:14:36] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 123s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 123s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 123s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 123s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 123s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 123s 123s [2026-02-04 17:14:36] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 123s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 123s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 123s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 123s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 123s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 123s 123s Excon basics (ssl file paths) (focus) 123s GET /content-length/100 + raises Excon::Error::Socket 123s + returns true 123s nonblock => true, persistent => false 123s method and path defaults 123s request().body + returns "GET /" 123s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 123s request(:method => :get).body + returns "GET /" 123s request(:path => '/').body + returns "GET /" 123s request(:method => :get, :path => '/').body + returns "GET /" 123s GET /content-length/100 123s response.status + returns 200 123s response[:status] + returns 200 123s response.headers['Content-Length'] + returns "100" 123s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 123s + Time.parse(response.headers['Date']).is_a?(Time) 123s + !!(response.headers['Server'] =~ /^WEBrick/) 123s response.headers['Custom'] + returns "Foo: bar" 123s response.remote_ip + returns "127.0.0.1" 123s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 123s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 123s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 123s POST /body-sink 123s response.body + returns "5000000" 123s empty body + returns "0" 123s POST /echo 123s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 123s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 123s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 123s with multi-byte strings 124s + properly concatenates request+headers and body 124s PUT /echo 124s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 124s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 124s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 124s with multi-byte strings 124s + properly concatenates request+headers and body 124s should succeed with tcp_nodelay + returns 200 124s + returns true 124s nonblock => true, persistent => true 124s method and path defaults 124s request().body + returns "GET /" 124s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 124s request(:method => :get).body + returns "GET /" 124s request(:path => '/').body + returns "GET /" 124s request(:method => :get, :path => '/').body + returns "GET /" 124s GET /content-length/100 124s response.status + returns 200 124s response[:status] + returns 200 124s response.headers['Content-Length'] + returns "100" 124s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 124s + Time.parse(response.headers['Date']).is_a?(Time) 124s + !!(response.headers['Server'] =~ /^WEBrick/) 124s response.headers['Custom'] + returns "Foo: bar" 124s response.remote_ip + returns "127.0.0.1" 124s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 124s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 124s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 124s POST /body-sink 124s response.body + returns "5000000" 124s empty body + returns "0" 124s POST /echo 124s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 124s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 124s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 124s with multi-byte strings 124s + properly concatenates request+headers and body 124s PUT /echo 124s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 125s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 125s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 125s with multi-byte strings 125s + properly concatenates request+headers and body 125s should succeed with tcp_nodelay + returns 200 125s + returns true 125s nonblock => false, persistent => true 125s method and path defaults 125s request().body + returns "GET /" 125s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 125s request(:method => :get).body + returns "GET /" 125s request(:path => '/').body + returns "GET /" 125s request(:method => :get, :path => '/').body + returns "GET /" 125s GET /content-length/100 125s response.status + returns 200 125s response[:status] + returns 200 125s response.headers['Content-Length'] + returns "100" 125s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 125s + Time.parse(response.headers['Date']).is_a?(Time) 125s + !!(response.headers['Server'] =~ /^WEBrick/) 125s response.headers['Custom'] + returns "Foo: bar" 125s response.remote_ip + returns "127.0.0.1" 125s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 125s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 125s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 125s POST /body-sink 125s response.body + returns "5000000" 125s empty body + returns "0" 125s POST /echo 125s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 125s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 125s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 125s with multi-byte strings 125s + properly concatenates request+headers and body 125s PUT /echo 125s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 125s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 125s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 125s with multi-byte strings 125s + properly concatenates request+headers and body 125s should succeed with tcp_nodelay + returns 200 125s + returns true 125s nonblock => false, persistent => false 125s method and path defaults 126s request().body + returns "GET /" 126s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 126s request(:method => :get).body + returns "GET /" 126s request(:path => '/').body + returns "GET /" 126s request(:method => :get, :path => '/').body + returns "GET /" 126s GET /content-length/100 126s response.status + returns 200 126s response[:status] + returns 200 126s response.headers['Content-Length'] + returns "100" 126s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 126s + Time.parse(response.headers['Date']).is_a?(Time) 126s + !!(response.headers['Server'] =~ /^WEBrick/) 126s response.headers['Custom'] + returns "Foo: bar" 126s response.remote_ip + returns "127.0.0.1" 126s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 126s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 126s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 126s POST /body-sink 126s response.body + returns "5000000" 126s empty body + returns "0" 126s POST /echo 126s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 126s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 126s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 126s with multi-byte strings 126s + properly concatenates request+headers and body 126s PUT /echo 126s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 126s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 126s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 126s with multi-byte strings 126s + properly concatenates request+headers and body 126s should succeed with tcp_nodelay + returns 200 126s 126s [2026-02-04 17:14:40] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 126s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 126s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 126s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 126s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 126s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 126s 126s [2026-02-04 17:14:40] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 126s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 126s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 126s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 126s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 126s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 126s 126s [2026-02-04 17:14:40] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 126s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 126s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 126s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 126s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 126s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 126s 126s Excon basics (ssl string) (focus) 127s + returns true 127s nonblock => true, persistent => false 127s method and path defaults 127s request().body + returns "GET /" 127s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 127s request(:method => :get).body + returns "GET /" 127s request(:path => '/').body + returns "GET /" 127s request(:method => :get, :path => '/').body + returns "GET /" 127s GET /content-length/100 127s response.status + returns 200 127s response[:status] + returns 200 127s response.headers['Content-Length'] + returns "100" 127s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 127s + Time.parse(response.headers['Date']).is_a?(Time) 127s + !!(response.headers['Server'] =~ /^WEBrick/) 127s response.headers['Custom'] + returns "Foo: bar" 127s response.remote_ip + returns "127.0.0.1" 127s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 127s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 127s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 127s POST /body-sink 127s response.body + returns "5000000" 127s empty body + returns "0" 127s POST /echo 127s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 127s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 127s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 127s with multi-byte strings 127s + properly concatenates request+headers and body 127s PUT /echo 127s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 127s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 127s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 127s with multi-byte strings 128s + properly concatenates request+headers and body 128s should succeed with tcp_nodelay + returns 200 128s + returns true 128s nonblock => true, persistent => true 128s method and path defaults 128s request().body + returns "GET /" 128s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 128s request(:method => :get).body + returns "GET /" 128s request(:path => '/').body + returns "GET /" 128s request(:method => :get, :path => '/').body + returns "GET /" 128s GET /content-length/100 128s response.status + returns 200 128s response[:status] + returns 200 128s response.headers['Content-Length'] + returns "100" 128s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 128s + Time.parse(response.headers['Date']).is_a?(Time) 128s + !!(response.headers['Server'] =~ /^WEBrick/) 128s response.headers['Custom'] + returns "Foo: bar" 128s response.remote_ip + returns "127.0.0.1" 128s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 128s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 128s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 128s POST /body-sink 128s response.body + returns "5000000" 128s empty body + returns "0" 128s POST /echo 128s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 128s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 128s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 128s with multi-byte strings 128s + properly concatenates request+headers and body 128s PUT /echo 128s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 128s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 128s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 128s with multi-byte strings 128s + properly concatenates request+headers and body 128s should succeed with tcp_nodelay + returns 200 128s + returns true 128s nonblock => false, persistent => true 128s method and path defaults 128s request().body + returns "GET /" 128s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 129s request(:method => :get).body + returns "GET /" 129s request(:path => '/').body + returns "GET /" 129s request(:method => :get, :path => '/').body + returns "GET /" 129s GET /content-length/100 129s response.status + returns 200 129s response[:status] + returns 200 129s response.headers['Content-Length'] + returns "100" 129s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 129s + Time.parse(response.headers['Date']).is_a?(Time) 129s + !!(response.headers['Server'] =~ /^WEBrick/) 129s response.headers['Custom'] + returns "Foo: bar" 129s response.remote_ip + returns "127.0.0.1" 129s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 129s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 129s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 129s POST /body-sink 129s response.body + returns "5000000" 129s empty body + returns "0" 129s POST /echo 129s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 129s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 129s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 129s with multi-byte strings 129s + properly concatenates request+headers and body 129s PUT /echo 129s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 129s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 129s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 129s with multi-byte strings 129s + properly concatenates request+headers and body 129s should succeed with tcp_nodelay + returns 200 129s + returns true 129s nonblock => false, persistent => false 129s method and path defaults 129s request().body + returns "GET /" 129s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 129s request(:method => :get).body + returns "GET /" 129s request(:path => '/').body + returns "GET /" 129s request(:method => :get, :path => '/').body + returns "GET /" 129s GET /content-length/100 129s response.status + returns 200 129s response[:status] + returns 200 129s response.headers['Content-Length'] + returns "100" 129s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 129s + Time.parse(response.headers['Date']).is_a?(Time) 129s + !!(response.headers['Server'] =~ /^WEBrick/) 129s response.headers['Custom'] + returns "Foo: bar" 129s response.remote_ip + returns "127.0.0.1" 129s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 130s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 130s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 130s POST /body-sink 130s response.body + returns "5000000" 130s empty body + returns "0" 130s POST /echo 130s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 130s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 130s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 130s with multi-byte strings 130s + properly concatenates request+headers and body 130s PUT /echo 130s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 130s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 130s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 130s with multi-byte strings 130s + properly concatenates request+headers and body 130s should succeed with tcp_nodelay + returns 200 130s 130s [2026-02-04 17:14:43] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 130s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 130s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 130s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 130s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 130s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 130s 130s [2026-02-04 17:14:43] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 130s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 130s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 130s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 130s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 130s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 130s 130s [2026-02-04 17:14:43] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 130s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 130s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 130s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 130s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 130s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 130s 130s [2026-02-04 17:14:44] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading 130s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' 130s /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' 130s /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' 130s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' 130s /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' 130s 130s Excon basics (Unix socket) 130s + returns true 130s nonblock => true, persistent => false 130s method and path defaults 130s request().body + returns "GET /" 130s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 130s request(:method => :get).body + returns "GET /" 130s request(:path => '/').body + returns "GET /" 130s request(:method => :get, :path => '/').body + returns "GET /" 130s GET /content-length/100 130s response.status + returns 200 130s response[:status] + returns 200 130s response.headers['Content-Length'] + returns "100" 130s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 130s # Time.parse(response.headers['Date']).is_a?(Time) 130s # !!(response.headers['Server'] =~ /^WEBrick/) 130s response.headers['Custom'] + returns "Foo: bar" 130s response.remote_ip # returns "127.0.0.1" 130s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 130s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 130s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 130s POST /body-sink 130s response.body + returns "5000000" 130s empty body + returns "0" 130s POST /echo 130s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 130s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 130s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 130s with multi-byte strings 130s + properly concatenates request+headers and body 130s PUT /echo 130s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 130s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 130s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 130s with multi-byte strings 130s + properly concatenates request+headers and body 130s should succeed with tcp_nodelay + returns 200 130s + returns true 130s nonblock => true, persistent => true 130s method and path defaults 130s request().body + returns "GET /" 130s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 130s request(:method => :get).body + returns "GET /" 130s request(:path => '/').body + returns "GET /" 130s request(:method => :get, :path => '/').body + returns "GET /" 130s GET /content-length/100 130s response.status + returns 200 130s response[:status] + returns 200 130s response.headers['Content-Length'] + returns "100" 130s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 130s # Time.parse(response.headers['Date']).is_a?(Time) 130s # !!(response.headers['Server'] =~ /^WEBrick/) 130s response.headers['Custom'] + returns "Foo: bar" 130s response.remote_ip # returns "127.0.0.1" 130s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 130s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 130s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 130s POST /body-sink 130s response.body + returns "5000000" 130s empty body + returns "0" 130s POST /echo 130s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 130s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 130s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 130s with multi-byte strings 130s + properly concatenates request+headers and body 130s PUT /echo 130s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 130s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 130s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 130s with multi-byte strings 130s + properly concatenates request+headers and body 130s should succeed with tcp_nodelay + returns 200 130s + returns true 130s nonblock => false, persistent => true 130s method and path defaults 130s request().body + returns "GET /" 130s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 130s request(:method => :get).body + returns "GET /" 130s request(:path => '/').body + returns "GET /" 130s request(:method => :get, :path => '/').body + returns "GET /" 130s GET /content-length/100 130s response.status + returns 200 130s response[:status] + returns 200 130s response.headers['Content-Length'] + returns "100" 130s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 130s # Time.parse(response.headers['Date']).is_a?(Time) 130s # !!(response.headers['Server'] =~ /^WEBrick/) 130s response.headers['Custom'] + returns "Foo: bar" 130s response.remote_ip # returns "127.0.0.1" 130s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 130s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 130s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 130s POST /body-sink 130s response.body + returns "5000000" 130s empty body + returns "0" 130s POST /echo 130s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 130s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 130s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 130s with multi-byte strings 130s + properly concatenates request+headers and body 130s PUT /echo 130s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 130s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 130s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 130s with multi-byte strings 130s + properly concatenates request+headers and body 130s should succeed with tcp_nodelay + returns 200 130s + returns true 130s nonblock => false, persistent => false 130s method and path defaults 130s request().body + returns "GET /" 130s request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" 130s request(:method => :get).body + returns "GET /" 130s request(:path => '/').body + returns "GET /" 130s request(:method => :get, :path => '/').body + returns "GET /" 130s GET /content-length/100 130s response.status + returns 200 130s response[:status] + returns 200 130s response.headers['Content-Length'] + returns "100" 130s response.headers['Content-Type'] + returns "text/html;charset=utf-8" 130s # Time.parse(response.headers['Date']).is_a?(Time) 130s # !!(response.headers['Server'] =~ /^WEBrick/) 130s response.headers['Custom'] + returns "Foo: bar" 130s response.remote_ip # returns "127.0.0.1" 130s response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 130s deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 130s response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] 130s POST /body-sink 130s response.body + returns "5000000" 130s empty body + returns "0" 130s POST /echo 130s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 130s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 130s with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 130s with multi-byte strings 130s + properly concatenates request+headers and body 130s PUT /echo 130s with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" 130s without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 130s request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 130s with multi-byte strings 130s + properly concatenates request+headers and body 130s should succeed with tcp_nodelay + returns 200 130s explicit uri passed to connection 130s GET /content-length/100 + returns 200 130s http Host header is empty 130s GET /headers + returns "" 130s 130s Excon basics (reusable local port) (localportreuse) 131s has a local port + returns true 131s local port can be re-bound + returns "xxxxxxxxxx" 131s 131s Excon Connection 131s #socket connects, sets data[:remote_ip] + returns "127.0.0.1" 131s persistent connections 131s + successful uninterrupted request 131s + resets connection after interrupt 131s + fork safety 131s inspect redaction 131s + authorization/proxy-authorization headers concealed for user & pass 131s + password param concealed for user & pass 131s + password param not mutated for user & pass 131s + proxy password param concealed for proxy: user & pass 131s + proxy password param not mutated for proxy: user & pass 131s + authorization/proxy-authorization headers concealed for email & pass 131s + password param concealed for email & pass 131s + password param not mutated for email & pass 131s + proxy password param concealed for proxy: email & pass 131s + proxy password param not mutated for proxy: email & pass 131s + authorization/proxy-authorization headers concealed for user no pass 131s + authorization/proxy-authorization headers concealed for pass no user 131s + password param concealed for pass no user 131s + password param not mutated for pass no user 131s + proxy password param concealed for proxy: pass no user 131s + proxy password param not mutated for proxy: pass no user 131s + initialization 131s 131s HTTPStatusError request/response debugging 131s Excon::Error knows about pertinent errors 131s new returns an Error + returns true 131s new raises errors for bad URIs + returns true 131s new raises errors for bad paths + returns true 131s can raise standard error and catch standard error + returns true 131s can raise legacy errors and catch legacy errors + returns true 131s can raise standard error and catch legacy errors + returns true 131s can raise with status_error() and catch with standard error + returns true 131s can raise with status_error() and catch with legacy error + returns true 131s can raise with legacy status_error() and catch with legacy + returns true 131s can raise with legacy status_error() and catch with standard + returns true 131s message does not include response or response info + returns true 131s message includes only request info + returns true 131s message includes only response info + returns true 131s message include request and response info + returns true 131s 131s Excon response header support 131s Excon::Headers storage 131s stores and retrieves as received + returns "expected" 131s enumerates keys as received 131s contains Exact-Case + returns true 131s contains Another-Fixture + returns true 131s supports case-insensitive access + returns "expected" 131s but still returns nil for missing keys + returns nil 131s Hash methods that should support case-insensitive access 131s #assoc + returns ["exact-case", "expected"] 131s #delete 131s with just a key + returns "yes" 131s with a proc + returns "called with notpresent" 131s #fetch 131s when present + returns "expected" 131s with a default value + returns "default" 131s with a default proc + returns "got missing" 131s #has_key? 131s when present + returns true 131s when absent + returns false 131s #values_at 131s all present + returns ["expected", "another"] 131s some missing + returns ["expected", nil] 131s Response#get_header 131s with variable header capitalization 131s response.get_header("mixedcase-header") + returns "MixedCase" 131s response.get_header("uppercase-header") + returns "UPPERCASE" 131s response.get_header("lowercase-header") + returns "lowercase" 131s when provided key capitalization varies 131s response.get_header("MIXEDCASE-HEADER") + returns "MixedCase" 131s response.get_header("MiXeDcAsE-hEaDeR") + returns "MixedCase" 131s when header is unavailable 131s response.get_header("missing") + returns nil 131s 131s logging instrumentor 131s connection logger + returns true 131s connection logger with query as hash + returns true 131s 131s Excon middleware 131s succeeds without defining valid_parameter_keys 131s 131s Excon support for middlewares that return canned responses 131s does not mutate the canned response body + returns "canned" 131s yields non-mutated body to response_block + returns "canned" 131s 131s Excon redirecting with cookie preserved 131s second request will send cookies set by the first + returns "ok" 131s second request will send multiple cookies set by the first + returns "ok" 132s runs normally when there are no cookies set + returns "ok" 132s 132s Excon Decompress Middleware 132s gzip 132s response body decompressed + returns "hello world" 132s server sent content-encoding + returns "gzip" 132s removes processed encoding from header + returns "" 132s empty response body + returns "" 132s deflate 132s response body decompressed + returns "hello world" 132s server sent content-encoding + returns "deflate" 132s removes processed encoding from header + returns "" 132s deflate-raw 132s response body decompressed + returns "hello world" 132s server sent content-encoding + returns "deflate" 132s removes processed encoding from header + returns "" 132s with pre-encoding 132s server sent content-encoding + returns "other, gzip" 132s processed encoding removed from header + returns "other" 132s response body decompressed + returns "hello world" 132s with post-encoding 132s server sent content-encoding + returns "gzip, other" 132s unprocessed since last applied is unknown + returns "gzip, other" 132s response body still compressed + returns "hello world" 132s with a :response_block 132s server sent content-encoding + returns "gzip" 132s unprocessed since :response_block was used + returns "gzip" 132s :response_block passed unprocessed data + returns "hello world" 132s adds Accept-Encoding if needed 132s without a :response_block + returns "deflate, gzip" 132s with a :response_block + returns nil 132s empty content-encoding 132s succeeds + returns "body" 132s 132s Excon Decompress Middleware 132s encoded uri passed to connection 132s GET /echo%20dirty + returns 200 132s unencoded uri passed to connection 132s GET /echo dirty + returns 200 132s 132s Excon request idempotencey 132s Non-idempotent call with an erroring socket + raises Excon::Error::Socket 132s Idempotent request with socket erroring first 3 times + returns 200 132s Idempotent request with socket erroring first 5 times + raises Excon::Error::Socket 132s Lowered retry limit with socket erroring first time + returns 200 132s Lowered retry limit with socket erroring first 3 times + raises Excon::Error::Socket 132s Raised retry limit with socket erroring first 5 times + returns 200 132s Raised retry limit with socket erroring first 9 times + raises Excon::Error::Socket 132s Retry limit in constructor with socket erroring first 5 times + returns 200 132s Retry limit and sleep in constructor with socket erroring first 2 times + returns 200 132s Retry limit and sleep in constructor with socket erroring first 2 times + raises Excon::Error::Socket 132s Idempotent request with custom error first 3 times + returns 200 132s Idempotent request with custom error first 5 times + raises RuntimeError 132s Overriding default retry_errors + raises Excon::Error::Socket 132s request_block rewound + returns true 132s response_block rewound + returns true 132s 132s Excon instrumentation 132s basic notification + returns ["excon.request", "excon.response"] 132s captures scheme, host, port, and path + returns [:host, :path, :port, :scheme] 132s params in request overwrite those in constructor + returns "/cheezburger" 132s notify on retry + returns 3 132s notify on error + raises Excon::Error::Socket 132s + returns true 132s filtering + raises Excon::Error::Socket 132s + returns ["excon.request", "excon.error"] 132s more filtering + raises Excon::Error::Socket 132s + returns ["excon.retry", "excon.retry", "excon.retry"] 132s indicates duration + returns true 132s standard instrumentor 132s success + raises Excon::Error::Socket 132s + returns ["excon.request", "excon.retry", "excon.retry", "excon.retry", "excon.error"] 132s authorization header REDACT 132s + raises Excon::Error::Socket 132s + does not appear in response 132s + does not mutate Authorization value 132s password REDACT 132s + raises Excon::Error::Socket 132s + does not appear in response 132s + does not mutate password value 132s proxy password REDACT 132s + raises Excon::Error::Socket 132s + does not appear in response 132s + does not mutate password value 132s use our own instrumentor + raises Excon::Error::Socket 132s + returns ["excon.request", "excon.retry", "excon.retry", "excon.retry", "excon.error"] 132s always passes the block + returns ["excon.request", "excon.response"] 132s does not generate events when not provided + returns 0 132s allows setting the prefix + raises Excon::Error::Socket 132s + returns ["gug.request", "gug.retry", "gug.retry", "gug.retry", "gug.error"] 132s allows setting the prefix when not idempotent + raises Excon::Error::Socket 132s + returns ["gug.request", "gug.error"] 133s works unmocked + returns ["excon.request", "excon.response"] 133s 133s Excon stubs 133s missing stub + raises Excon::Error::StubNotFound 133s stub({}) + raises ArgumentError 133s stub({}, {}) {} + raises ArgumentError 133s stub({:method => :get}, {:body => 'body', :status => 200}) 133s response.body + returns "body" 133s response.headers + returns {} 133s response.status + returns 200 133s response_block yields body + returns "body" 133s response.body empty with response_block + returns "" 133s stub({ url: 'http://example.com' }, { body: 'body', status: 200 }) 133s request without slash matches stub without trailing slash 133s request with trailing slash matches stub without trailing slash 133s stub({ url: 'http://example.com?foo=bar' }, { body: 'body', status: 200 }) 133s query in url matches 133s hash query matches 133s stub({ url: 'http://example.com?a=b+c' }, { body: 'body', status: 200 }) 133s query in url matches 133s hash query matches 133s stub({:path => %r{/tests/(S+)}}, {:body => $1, :status => 200}) 133s response.body + returns "test" 133s response.headers + returns {} 133s response.status + returns 200 133s stub({:body => 'body', :method => :get}) {|params| {:body => params[:body], :headers => params[:headers], :status => 200}} 133s response.body + returns "body" 133s response.headers + returns {"Accept"=>"*/*", "Accept-Encoding"=>"deflate, gzip", "Host"=>"127.0.0.1:9292", "User-Agent"=>"excon/1.3.1"} 133s response.status + returns 200 133s response_block yields body + returns "body" 133s response.body empty with response_block + returns "" 133s stub({:body => File.open(...), :method => :get}, { :status => 200 }) 133s response.status + returns 200 133s invalid stub response + raises Excon::Error::InvalidStub 133s mismatched stub + raises Excon::Error::StubNotFound 133s allow mismatched stub + returns 200 133s stub({}, {:body => 'x' * (Excon::DEFAULT_CHUNK_SIZE + 1)}) 133s + response_block yields body 133s response.body empty with response_block + returns "" 133s stub({:url => 'https://user:pass@foo.bar.com:9999/baz?quux=true'}, {:status => 200}) 133s + get(:expects => 200) 133s stub({}, {:status => 404, :body => 'Not Found'} 133s request(:expects => 200, :method => :get, :path => '/') + raises Excon::Error::NotFound 133s Expects exception should contain response object + returns Excon::Response 133s + request(:expects => 200, :method => :get, :path => '/') with block does not invoke the block since it raises an error 133s stub_for({}) 133s stub_for({}) + returns [{}, {}] 133s unstub({}) 133s unstub({}) + returns [{}, {}] 133s request(:method => :get) + raises Excon::Error::StubNotFound 133s unstub({path: %r{/path}}) 133s unstub({path: %r{/path}}) + returns [{:path=>/\/path/, :captures=>{:headers=>{}}}, {}] 133s unstub non-existent stub 133s unstub({}) + returns nil 133s global stubs 133s get on a different thread + returns "2" 133s get on main thread + returns "2" 133s thread-local stubs 133s get on a different thread + returns "2" 133s get on main thread + returns "1" 133s 133s Excon redirector support 133s request(:method => :get, :path => '/old').body + returns "new" 133s 133s Excon redirector support with redirect loop 133s request(:method => :get, :path => '/old') + raises Excon::Error::TooManyRedirects 133s 133s Excon redirect support for relative Location headers 133s request(:method => :get, :path => '/old').body + returns "new" 133s 133s Excon redirect support for relative Location headers with dot segments 133s request(:method => :get, :path => '/foo/baz/').body + returns "/foo/bar/" 133s 133s Excon redirecting post request 133s request not have content-length and body + returns "ok" 133s 133s Pipelined Requests 133s with default :persistent => true 133s + connection is persistent 133s with default :persistent => false 133s + connection is persistent per call to #requests 133s 133s Excon proxy support 133s proxy configuration 133s no proxy 133s connection.data[:proxy] + returns nil 133s empty proxy 133s connection.data[:proxy] + returns nil 133s with fully-specified proxy: https://myproxy.net:8080 133s connection.data[:proxy][:host] + returns "myproxy.net" 133s connection.data[:proxy][:port] + returns 8080 133s connection.data[:proxy][:scheme] + returns "https" 133s with fully-specified Unix socket proxy: unix:/// 133s connection.data[:proxy][:host] + returns nil 133s connection.data[:proxy][:port] + returns nil 133s connection.data[:proxy][:scheme] + returns "unix" 133s connection.data[:proxy][:path] + returns "/tmp/myproxy.sock" 133s with complete proxy config from the environment 133s lowercase 133s an http connection 133s connection.data[:proxy][:host] + returns "myproxy" 133s connection.data[:proxy][:port] + returns 8080 133s connection.data[:proxy][:scheme] + returns "http" 133s with disable_proxy set 133s connection.data[:proxy] + returns nil 133s an https connection 133s connection.data[:proxy][:host] + returns "mysecureproxy" 133s connection.data[:proxy][:port] + returns 8081 133s connection.data[:proxy][:scheme] + returns "http" 133s with disable_proxy set 133s connection.data[:proxy] + returns nil 133s http proxy from the environment overrides config 133s connection.data[:proxy][:host] + returns "myproxy" 133s connection.data[:proxy][:port] + returns 8080 133s an http connection in no_proxy 133s connection.data[:proxy] + returns nil 133s an http connection not completely matching no_proxy 133s connection.data[:proxy][:host] + returns "myproxy" 133s an http connection with subdomain in no_proxy 133s connection.data[:proxy] + returns nil 133s uppercase 133s an http connection 133s connection.data[:proxy][:host] + returns "myproxy" 133s connection.data[:proxy][:port] + returns 8080 133s connection.data[:proxy][:scheme] + returns "http" 133s with disable_proxy set 133s connection.data[:proxy] + returns nil 133s an https connection 133s connection.data[:proxy][:host] + returns "mysecureproxy" 133s connection.data[:proxy][:port] + returns 8081 133s connection.data[:proxy][:scheme] + returns "http" 133s with disable_proxy set 133s connection.data[:proxy] + returns nil 133s http proxy from the environment overrides config 133s connection.data[:proxy][:host] + returns "myproxy" 133s connection.data[:proxy][:port] + returns 8080 133s an http connection in no_proxy 133s connection.data[:proxy] + returns nil 133s an http connection not completely matching no_proxy 133s connection.data[:proxy][:host] + returns "myproxy" 133s an http connection with subdomain in no_proxy 133s connection.data[:proxy] + returns nil 133s with only http_proxy config from the environment 133s an https connection 133s connection.data[:proxy][:host] + returns "myproxy" 133s connection.data[:proxy][:port] + returns 8080 133s connection.data[:proxy][:scheme] + returns "http" 133s with a unix socket proxy config from the environment 133s an https connection 133s connection.data[:proxy][:host] + returns nil 133s connection.data[:proxy][:port] + returns nil 133s connection.data[:proxy][:scheme] + returns "unix" 133s connection.data[:proxy][:path] + returns "/tmp/myproxy.sock" 133s http proxying: http://foo.com:8080 133s response.status + returns 200 133s sent Request URI + returns "http://foo.com:8080/bar?alpha=kappa" 133s sent Sent-Host header + returns "foo.com:8080" 133s sent Proxy-Connection header + returns "Keep-Alive" 133s response.body (proxied content) + returns "proxied content" 133s http proxying: http://user:pass@foo.com:8080 133s response.status + returns 200 133s sent Request URI + returns "http://foo.com:8080/bar?alpha=kappa" 133s sent Host header + returns "foo.com:8080" 133s sent Proxy-Connection header + returns "Keep-Alive" 133s response.body (proxied content) + returns "proxied content" 133s http proxying over unix socket: http://foo.com:8080 133s response.status + returns 200 133s sent Sent-Host header + returns "foo.com:8080" 133s sent Proxy-Connection header + returns "Keep-Alive" 133s response.body (proxied content) + returns "proxied content" 133s 133s Excon query string variants 134s :query => {:foo => 'bar'} 134s query string sent + returns "foo=bar" 134s :query => {:foo => nil} 134s query string sent + returns "foo" 134s :query => {:foo => 'bar', :me => nil} 134s + query string sent includes 'foo=bar' 134s + query string sent includes 'me' 134s :query => {:foo => 'bar', :me => 'too'} 134s + query string sent includes 'foo=bar' 134s + query string sent includes 'me=too' 134s :query => {'foo[]' => ['bar', 'baz'], :me => 'too'} 134s + query string sent includes 'foo%5B%5D=bar' 134s + query string sent includes 'foo%5B%5D=baz' 134s + query string sent includes 'me=too' 134s :query => {'foo%=#' => 'bar%=#'} 134s query string sent + returns "foo%25%3D%23=bar%25%3D%23" 134s :query => {'foo%=#' => nil} 134s query string sent + returns "foo%25%3D%23" 134s 134s Excon request methods 134s empty headers sent 134s + Excon.post 134s header order 134s host is the first sent header by default + returns "host: localhost:9292" 134s 134s Excon request methods 134s one-offs 134s Excon.get + returns "GET" 134s Excon.post + returns "POST" 134s Excon.delete + returns "DELETE" 134s with a connection object 134s connection.get + returns "GET" 134s connection.post + returns "POST" 134s connection.delete + returns "DELETE" 134s not modifies path argument + returns "path" 134s 134s Request Tests 134s persistent connections 134s with default :persistent => true, 127.0.0.1:9292 134s + uses a persistent connection 134s + :persistent => false resets connection 134s with default :persistent => false, 127.0.0.1:9292 134s + does not use a persistent connection 134s + :persistent => true enables persistence 134s with default :persistent => true, [::1]:9293 134s + uses a persistent connection 134s + :persistent => false resets connection 134s with default :persistent => false, [::1]:9293 134s + does not use a persistent connection 134s + :persistent => true enables persistence 134s 134s Excon Response Parsing 134s responses with chunked transfer-encoding 134s simple response + returns "hello world" 134s with :response_block 134s simple response + returns [["hello ", nil, nil], ["world", nil, nil]] 134s simple response has empty body + returns "" 134s with expected response status + returns [["hello ", nil, nil], ["world", nil, nil]] 134s with unexpected response status + returns "hello world" 134s merges trailers into headers + returns "one, two, three, four, five, six" 134s removes 'chunked' from Transfer-Encoding + returns nil 134s responses with content-length 134s simple response + returns "hello world" 134s with :response_block 134s simple response + returns [["hello", 6, 11], [" worl", 1, 11], ["d", 0, 11]] 134s simple response has empty body + returns "" 134s with expected response status + returns [["hello", 6, 11], [" worl", 1, 11], ["d", 0, 11]] 134s with unexpected response status + returns "hello world" 134s responses with unknown length 134s simple response + returns "hello world" 134s with :response_block 134s simple response + returns [["hello", nil, nil], [" worl", nil, nil], ["d", nil, nil]] 134s simple response has empty body + returns "" 134s with expected response status + returns [["hello", nil, nil], [" worl", nil, nil], ["d", nil, nil]] 134s with unexpected response status + returns "hello world" 134s cookies 134s parses cookies into array + returns ["one, two", "three, four"] 134s header continuation 134s proper continuation + returns "one, two, three, four, five, six" 134s malformed header + raises Excon::Error::Socket 134s malformed header continuation + raises Excon::Error::Socket 134s status line parsing 134s proper status code + returns 404 134s proper reason phrase + returns "Not Found" 134s 134s socket 134s chunk_size: 134s read_nonblock 134s readline nonblock is efficient 134s + returns ["one\n", 1, [8, "EOF"]] 134s readline nonblock works sequentially 134s + returns [["one\n", "two\n"], 1, [8, "EOF"]] 134s readline nonblock can handle partial reads 134s + returns [["one\n", "two\n"], 2, [5, "EAGAIN", 3, "EOF"]] 134s readline nonblock before read 134s + returns [["one\n", "two\n"], 2, [8, "EOF"]] 134s read_nonblock does not EOF early 134s + returns [["one", "two"], 2, [3, "EAGAIN", 3, "EOF"]] 134s chunk_size: 512 134s read_nonblock 134s readline nonblock is efficient 134s + returns ["one\n", 1, [8, "EOF"]] 134s readline nonblock works sequentially 134s + returns [["one\n", "two\n"], 1, [8, "EOF"]] 134s readline nonblock can handle partial reads 134s + returns [["one\n", "two\n"], 2, [5, "EAGAIN", 3, "EOF"]] 134s readline nonblock before read 134s + returns [["one\n", "two\n"], 2, [8, "EOF"]] 134s read_nonblock does not EOF early 134s + returns [["one", "two"], 2, [3, "EAGAIN", 3, "EOF"]] 134s 134s Excon thread safety 134s thread_safe_sockets configuration 134s thread_safe_sockets default + returns true 134s with thread_safe_sockets set false + returns false 136s + long_thread 136s + short_thread 136s 136s read should timeout 138s nonblock => false hits read_timeout + raises Excon::Error::Timeout 139s nonblock => true hits read_timeout + raises Excon::Error::Timeout 139s 139s Excon::Utils 139s #connection_uri 139s using UNIX scheme + returns "unix:///tmp/some.sock" 139s using HTTP scheme 139s without default port + returns "http://foo.com" 139s include_default_port adds default port + returns "http://foo.com:80" 139s !include_default_port has no port value + returns "http://foo.com" 139s omit_default_port has no port value + returns "http://foo.com" 139s #request_uri 139s using UNIX scheme 139s without query + returns "unix:///tmp/some.sock/some/path" 139s with query + returns "unix:///tmp/some.sock/some/path?bar=that&foo=this" 139s using HTTP scheme 139s without query + returns "http://foo.com/some/path" 139s with query + returns "http://foo.com/some/path?bar=that&foo=this" 139s http default port + returns true 139s http nonstandard port + returns false 139s https standard port + returns true 139s https nonstandard port + returns false 139s unix socket + returns false 139s + detecting default ports 139s #escape_uri + returns "/hello%20excon" 139s #unescape_uri + returns "/hello excon" 139s #unescape_form + returns "message=We love excon!" 139s #split_header_value + returns ["value"] 139s #split_header_value + returns ["value1", "value2"] 139s #split_header_value + returns ["text/html;q=0.5", "application/json; version=1"] 139s #split_header_value + returns ["foo/bar;key=\"A,B,C\""] 139s #split_header_value + returns [] 139s 139s 12 pending and 1468 succeeded in 41.807432694664186 seconds 139s 139s /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 139s 139s Excon::Error 139s #status_errors 139s .keys 139s returns the pertinent HTTP error numbers 139s #new 139s returns an Excon::Error 139s raises errors for bad URIs 139s raises errors for bad paths 139s when remaining backwards compatible 139s #new 139s should raise standard error and catch standard error 139s should raise legacy errors and catch legacy errors 139s should raise standard error and catch legacy errors 139s #status_error 139s should raise with status_error() and catch with standard error 139s should raise with status_error() and catch with legacy error 139s should raise with legacy status_error() and catch with standard 139s when exceptions are rescued 139s when :debug_request and :debug_response are switched off 139s exception message does not include response or response info 139s when :debug_request and :debug_response are switched on 139s exception message includes request and response info 139s when only :debug_request is turned on 139s exception message includes only request info 139s when only :debug_response is turned on 139s exception message includes only response info 139s 139s Excon::Test::Server 139s when the web server is webrick 139s it should behave like a excon test server 139s returns an instance 139s starts the server 139s stops the server 139s when the web server is unicorn 139s bound to a tcp socket 139s it should behave like a excon test server 139s returns an instance 139s starts the server 139s stops the server 139s bound to a unix socket 139s it should behave like a excon test server 139s returns an instance 139s starts the server 139s stops the server 139s when the web server is puma 139s it should behave like a excon test server 139s returns an instance 139s starts the server 139s stops the server 139s when the web server is a executable 139s it should behave like a excon test server 139s returns an instance 139s starts the server 139s stops the server 139s 139s Excon 139s has a version number 139s 139s Excon::Connection 140s when an explicit uri is passed 140s .new 140s returns an instance 140s when :method is :get and :path is /content-length/100 140s #request 140s returns an Excon::Response 140s Excon::Response 140s #status 140s returns 200 140s when nonblock is true and persistent is false 140s when :method is get and :path is /content-length/100 140s #request 140s returns an Excon::Response 140s Excon::Response 140s #status 140s returns 200 140s #status returns 200 140s #headers 140s ["Content-Length"] returns 100 140s ["Content-Type"] returns "text/html;charset=utf-8" 140s ['Date'] returns a valid date 140s ['Server'] matches /^WEBrick/ 140s ['Custom'] returns Foo: bar 140s #remote_ip 140s returns 127.0.0.1 140s when tcp_nodelay is true 140s #request 140s returns an Excon::Response 140s Excon::Response 140s #body 140s .status 140s #returns 200 140s when utilizing deprecated block usage 140s #request 140s yields with a chunk, remaining length, and total length 140s completes with expected data 140s when utilizing response_block usage 140s #request 140s yields a chunk, remaining length, and total_length 140s completes with expected data 140s when method is :post 140s when :path is /body-sink 140s when a body parameter is supplied 140s returns an Excon::Response 140s Excon::Response 140s #body 140s equals "5000000" 140s when the body parameter is an empty string 140s returns an Excon::Response 140s Excon::Response 140s #body 140s equals "0" 140s when :path is /echo 140s when a file handle is the body paramter 140s Excon::Response 140s #body equals "x" * 100 + "\n" 140s when a string is the body paramter 140s does not change the enconding of the body 140s without request_block 140s Excon::Response 140s #body equals 'x' * 100) 140s when a request_block paramter is supplied 140s Excon::Response 140s #body equals'x' * 100 140s when a multi-byte string is the body paramter 140s Excon::Response 140s #body properly concatenates request+headers and body 140s when nonblock is true and persistent is true 140s when :method is get and :path is /content-length/100 140s #request 140s returns an Excon::Response 140s Excon::Response 140s #status 140s returns 200 140s #status returns 200 140s #headers 140s ["Content-Length"] returns 100 140s ["Content-Type"] returns "text/html;charset=utf-8" 140s ['Date'] returns a valid date 140s ['Server'] matches /^WEBrick/ 140s ['Custom'] returns Foo: bar 140s #remote_ip 140s returns 127.0.0.1 140s when tcp_nodelay is true 140s #request 140s returns an Excon::Response 140s Excon::Response 140s #body 140s .status 140s #returns 200 140s when utilizing deprecated block usage 140s #request 140s yields with a chunk, remaining length, and total length 140s completes with expected data 140s when utilizing response_block usage 140s #request 140s yields a chunk, remaining length, and total_length 140s completes with expected data 140s when method is :post 140s when :path is /body-sink 140s when a body parameter is supplied 140s returns an Excon::Response 140s Excon::Response 140s #body 140s equals "5000000" 140s when the body parameter is an empty string 140s returns an Excon::Response 140s Excon::Response 140s #body 140s equals "0" 140s when :path is /echo 140s when a file handle is the body paramter 140s Excon::Response 140s #body equals "x" * 100 + "\n" 140s when a string is the body paramter 140s does not change the enconding of the body 140s without request_block 140s Excon::Response 140s #body equals 'x' * 100) 140s when a request_block paramter is supplied 140s Excon::Response 140s #body equals'x' * 100 140s when a multi-byte string is the body paramter 140s Excon::Response 140s #body properly concatenates request+headers and body 140s when nonblock is false and persistent is true 140s when :method is get and :path is /content-length/100 140s #request 140s returns an Excon::Response 140s Excon::Response 140s #status 140s returns 200 140s #status returns 200 140s #headers 140s ["Content-Length"] returns 100 140s ["Content-Type"] returns "text/html;charset=utf-8" 140s ['Date'] returns a valid date 140s ['Server'] matches /^WEBrick/ 140s ['Custom'] returns Foo: bar 140s #remote_ip 140s returns 127.0.0.1 140s when tcp_nodelay is true 140s #request 140s returns an Excon::Response 140s Excon::Response 140s #body 140s .status 140s #returns 200 140s when utilizing deprecated block usage 140s #request 140s yields with a chunk, remaining length, and total length 140s completes with expected data 140s when utilizing response_block usage 140s #request 140s yields a chunk, remaining length, and total_length 140s completes with expected data 140s when method is :post 140s when :path is /body-sink 140s when a body parameter is supplied 140s returns an Excon::Response 140s Excon::Response 140s #body 140s equals "5000000" 140s when the body parameter is an empty string 140s returns an Excon::Response 140s Excon::Response 140s #body 140s equals "0" 140s when :path is /echo 140s when a file handle is the body paramter 140s Excon::Response 140s #body equals "x" * 100 + "\n" 140s when a string is the body paramter 140s does not change the enconding of the body 140s without request_block 140s Excon::Response 140s #body equals 'x' * 100) 140s when a request_block paramter is supplied 140s Excon::Response 140s #body equals'x' * 100 140s when a multi-byte string is the body paramter 140s Excon::Response 140s #body properly concatenates request+headers and body 140s when nonblock is false and persistent is false 140s when :method is get and :path is /content-length/100 140s #request 140s returns an Excon::Response 140s Excon::Response 140s #status 140s returns 200 140s #status returns 200 140s #headers 140s ["Content-Length"] returns 100 140s ["Content-Type"] returns "text/html;charset=utf-8" 140s ['Date'] returns a valid date 140s ['Server'] matches /^WEBrick/ 140s ['Custom'] returns Foo: bar 140s #remote_ip 140s returns 127.0.0.1 140s when tcp_nodelay is true 140s #request 140s returns an Excon::Response 140s Excon::Response 140s #body 140s .status 140s #returns 200 140s when utilizing deprecated block usage 140s #request 140s yields with a chunk, remaining length, and total length 140s completes with expected data 140s when utilizing response_block usage 140s #request 140s yields a chunk, remaining length, and total_length 140s completes with expected data 140s when method is :post 140s when :path is /body-sink 140s when a body parameter is supplied 140s returns an Excon::Response 140s Excon::Response 140s #body 140s equals "5000000" 140s when the body parameter is an empty string 140s returns an Excon::Response 140s Excon::Response 140s #body 140s equals "0" 140s when :path is /echo 140s when a file handle is the body paramter 140s Excon::Response 140s #body equals "x" * 100 + "\n" 140s when a string is the body paramter 140s does not change the enconding of the body 140s without request_block 140s Excon::Response 140s #body equals 'x' * 100) 140s when a request_block paramter is supplied 140s Excon::Response 140s #body equals'x' * 100 140s when a multi-byte string is the body paramter 140s Excon::Response 140s #body properly concatenates request+headers and body 140s ractors 140s /tmp/autopkgtest.jGJOeO/build.0Ey/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. 140s should work inside ractors 140s 140s Excon::Socket 140s passes the dns_timeouts to Resolv::DNS::Config (PENDING: Temporarily skipped with xit) 140s when the DNS server is unreachable 140s returns a Excon::Error::Socket 140s 140s Excon 140s when dispatching requests 140s to a server that does not supply response headers 140s when no block is given 140s should rescue from an EOFError and return response 140s when a block is given 140s should rescue from EOFError and return response 140s to a server that prematurely aborts the request with no response 140s should raise an EOFError 140s 140s Excon::Socket 140s resolv_resolver config reaches Resolv::DNS::Config (PENDING: Temporarily skipped with xit) 140s when the DNS server is unreachable 142s returns a Excon::Error::Socket 142s 142s Excon::Connection 142s blocking connection 142s when timeout is not set 142s does not error 142s when timeout is not triggered 142s does not error 142s when timeout is triggered 142s does not raise 142s non-blocking connection 142s when timeout is not set 142s does not error 142s when timeout is not triggered 142s does not error 142s when timeout is triggered 142s returns a request Excon::Error::Timeout 142s when read timeout is triggered 142s returns a read Excon::Error::Timeout 142s 142s Excon::Connection 142s when speaking to a UNIX socket 142s via Excon.new 142s accepts the unix:/ URL 142s Host header handling 142s sends an empty Host= by default 142s doesn't overwrite an explicit Host header 142s 142s Excon::Connection 142s validating parameters 142s with default middleware 142s Connection.new warns on invalid parameter keys 142s Connection#request warns on invalid parameter keys 142s with custom middleware at instantiation 142s Connection.new accepts parameters that are valid for the provided middleware 142s Connection.new warns on parameters that are not valid for the provided middleware 142s Connection#request accepts parameters that are valid for the provided middleware 142s Connection#request warns on parameters that are not valid for the provided middleware 142s with custom middleware at request time 142s Connection#request accepts parameters that are valid for the provided middleware 142s Connection#request warns on parameters that are not valid for the request middleware 142s Connection#request warns on parameters from instantiation that are not valid for the request middleware 142s 142s Pending: (Failures listed here are expected and do not affect your suite's status) 142s 142s 1) Excon::Socket passes the dns_timeouts to Resolv::DNS::Config 142s # Temporarily skipped with xit 142s # ./spec/requests/dns_timeout_spec.rb:10 142s 142s 2) Excon::Socket resolv_resolver config reaches Resolv::DNS::Config 142s # Temporarily skipped with xit 142s # ./spec/requests/resolv_resolver_spec.rb:14 142s 142s Finished in 3.35 seconds (files took 0.13632 seconds to load) 142s 156 examples, 0 failures, 2 pending 142s 142s mv ./.gem2deb.lib lib 142s autopkgtest [17:14:56]: test gem2deb-test-runner: -----------------------] 143s gem2deb-test-runner PASS 143s autopkgtest [17:14:57]: test gem2deb-test-runner: - - - - - - - - - - results - - - - - - - - - - 143s autopkgtest [17:14:57]: @@@@@@@@@@@@@@@@@@@@ summary 143s gem2deb-test-runner PASS