Running as unit: rb-build-arm64_8-81459.service ==================================================================================== Wed Aug 6 03:48:15 UTC 2025 - running /srv/jenkins/bin/reproducible_build.sh (for job reproducible_builder_arm64_8) on jenkins, called using "codethink04-arm64 codethink03-arm64" as arguments. Wed Aug 6 03:48:15 UTC 2025 - actually running "reproducible_build.sh" (md5sum 44ec6a3142940d5e9a7ab76543d96029) as "/tmp/jenkins-script-Xz93ml6e" $ git clone https://salsa.debian.org/qa/jenkins.debian.net.git ; more CONTRIBUTING Wed Aug 6 03:48:15 UTC 2025 - checking /var/lib/jenkins/offline_nodes if codethink04-arm64.debian.net is marked as down. Wed Aug 6 03:48:15 UTC 2025 - checking via ssh if codethink04-arm64.debian.net is up. removed '/tmp/read-only-fs-test-ZZu6Q5' Wed Aug 6 03:48:16 UTC 2025 - checking /var/lib/jenkins/offline_nodes if codethink03-arm64.debian.net is marked as down. Wed Aug 6 03:48:16 UTC 2025 - checking via ssh if codethink03-arm64.debian.net is up. removed '/tmp/read-only-fs-test-NQxQxq' ok, let's check if ruby-excon is building anywhere yet… ok, ruby-excon is not building anywhere… UPDATE 1 ============================================================================= Initialising reproducibly build of ruby-excon in trixie on arm64 on jenkins now. 1st build will be done on codethink04-arm64.debian.net. 2nd build will be done on codethink03-arm64.debian.net. ============================================================================= Wed Aug 6 03:48:32 UTC 2025 I: starting to build ruby-excon/trixie/arm64 on jenkins on '2025-08-06 03:48' Wed Aug 6 03:48:32 UTC 2025 I: The jenkins build log is/was available at https://jenkins.debian.net/userContent/reproducible/debian/build_service/arm64_8/81459/console.log 1754452112 arm64 trixie ruby-excon Wed Aug 6 03:48:32 UTC 2025 I: Downloading source for trixie/ruby-excon=0.112.0-4 --2025-08-06 03:48:32-- http://deb.debian.org/debian/pool/main/r/ruby-excon/ruby-excon_0.112.0-4.dsc Connecting to 46.16.76.132:3128... connected. Proxy request sent, awaiting response... 200 OK Length: 2078 (2.0K) [text/prs.lines.tag] Saving to: ‘ruby-excon_0.112.0-4.dsc’ 0K .. 100% 240M=0s 2025-08-06 03:48:32 (240 MB/s) - ‘ruby-excon_0.112.0-4.dsc’ saved [2078/2078] --2025-08-06 03:48:32-- http://deb.debian.org/debian/pool/main/r/ruby-excon/ruby-excon_0.112.0-4.dsc Connecting to 46.16.76.132:3128... connected. Proxy request sent, awaiting response... 200 OK Length: 2078 (2.0K) [text/prs.lines.tag] Saving to: ‘ruby-excon_0.112.0-4.dsc’ 0K .. 100% 240M=0s 2025-08-06 03:48:32 (240 MB/s) - ‘ruby-excon_0.112.0-4.dsc’ saved [2078/2078] Wed Aug 6 03:48:32 UTC 2025 I: ruby-excon_0.112.0-4.dsc -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 Format: 3.0 (quilt) Source: ruby-excon Binary: ruby-excon Architecture: all Version: 0.112.0-4 Maintainer: Debian Ruby Team Uploaders: Pirate Praveen , Utkarsh Gupta Homepage: https://github.com/excon/excon Standards-Version: 4.7.0 Vcs-Browser: https://salsa.debian.org/ruby-team/ruby-excon Vcs-Git: https://salsa.debian.org/ruby-team/ruby-excon.git Testsuite: autopkgtest-pkg-ruby Build-Depends: debhelper-compat (= 13), gem2deb (>= 1), rake, ruby-activesupport, ruby-chronic, ruby-delorean, ruby-eventmachine, ruby-open4, ruby-rackup, ruby-rspec, ruby-shindo, ruby-sinatra (>= 4.1.1-5), ruby-webrick (>= 1.7~), unicorn, puma, ruby-sinatra-contrib (>= 4.1.1-5) Package-List: ruby-excon deb ruby optional arch=all Checksums-Sha1: 4d0dd456c65e4bbbb9063724c92b4fab4f76659a 239915 ruby-excon_0.112.0.orig.tar.gz 37a4f680c1cfc50202210659348e21077e977fb2 6416 ruby-excon_0.112.0-4.debian.tar.xz Checksums-Sha256: f13b61b32f2d4400511f3abe9dc5639b136640218593ca967f1d679b0d6bc0cb 239915 ruby-excon_0.112.0.orig.tar.gz e333acb73355f527d8802773c787ae703e203bbeb67e2ec38d5de92a0bbb14ff 6416 ruby-excon_0.112.0-4.debian.tar.xz Files: be677df5d74d8fa74f71e17db997e7bf 239915 ruby-excon_0.112.0.orig.tar.gz da62431f179cb70a0056beac1dab7090 6416 ruby-excon_0.112.0-4.debian.tar.xz -----BEGIN PGP SIGNATURE----- iQGzBAEBCgAdFiEEcd3Fxr6GmkZB13n+x+ob4VdN7V0FAmec5qkACgkQx+ob4VdN 7V0Xtgv+IdwPq9nkhASMJzYTRhi/iMIxOni5u9GnFuhLIyaQ7O8xRTvG43rSEDbY 9raJLT4h8GonzvWVzZuJ4VdRi0lFlXll/CbQHnUH9gHy5xZ7rJpV1NXb9gvcTpHF SoKqsL9VUUl0+1JswiJF36yw8CuLALDRWHgIyYBPPkQrF1zxSmRtA4BAQjqFkTkX +WIklIeRXFrfnpLo/Um1xva3OKdMYqxeAyGIsypl59PkzwfdJiIhwksAMm5bSWWf WWFbBZxSPjkW6nSgnNyE1g+OMZURHWNFFaQp/E/h50gGK8+XvmtZjSurZ2pcHc5a Gt/w4DTBOXfYI4BCk8/ALPU0I4ENQKiKnN8JU/InglZLpGN6SDM+WARIGmEVFwoT jmeB0gv80dHL5CBkMy8PI4UHkgWkKGKzXuadO4oL1TK/qeLWTQiyt/fOtBNWAZ7R q4K8fTxG0qinpkiuLyviQSWdiH8Zsf9OjTTo2ParBCDJdLQjlyJrV1H1MFPC6o3D ib2VZP5M =+vW6 -----END PGP SIGNATURE----- Wed Aug 6 03:48:32 UTC 2025 I: Checking whether the package is not for us Wed Aug 6 03:48:32 UTC 2025 I: Starting 1st build on remote node codethink04-arm64.debian.net. Wed Aug 6 03:48:32 UTC 2025 I: Preparing to do remote build '1' on codethink04-arm64.debian.net. Wed Aug 6 03:48:32 UTC 2025 - checking /var/lib/jenkins/offline_nodes if codethink04-arm64.debian.net is marked as down. Wed Aug 6 03:48:32 UTC 2025 - checking via ssh if codethink04-arm64.debian.net is up. removed '/tmp/read-only-fs-test-TU7Nd7' ==================================================================================== Wed Aug 6 03:48:34 UTC 2025 - running /srv/jenkins/bin/reproducible_build.sh (for job /srv/jenkins/bin/reproducible_build.sh) on codethink04-arm64, called using "1 ruby-excon trixie /srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz 0.112.0-4" as arguments. Wed Aug 6 03:48:34 UTC 2025 - actually running "reproducible_build.sh" (md5sum 44ec6a3142940d5e9a7ab76543d96029) as "/tmp/jenkins-script-EYVXnQKb" $ git clone https://salsa.debian.org/qa/jenkins.debian.net.git ; more CONTRIBUTING Wed Aug 6 03:48:34 UTC 2025 I: Downloading source for trixie/ruby-excon=0.112.0-4 Reading package lists... NOTICE: 'ruby-excon' packaging is maintained in the 'Git' version control system at: https://salsa.debian.org/ruby-team/ruby-excon.git Please use: git clone https://salsa.debian.org/ruby-team/ruby-excon.git to retrieve the latest (possibly unreleased) updates to the package. Need to get 248 kB of source archives. Get:1 http://deb.debian.org/debian trixie/main ruby-excon 0.112.0-4 (dsc) [2078 B] Get:2 http://deb.debian.org/debian trixie/main ruby-excon 0.112.0-4 (tar) [240 kB] Get:3 http://deb.debian.org/debian trixie/main ruby-excon 0.112.0-4 (diff) [6416 B] Fetched 248 kB in 0s (6534 kB/s) Download complete and in download only mode Reading package lists... NOTICE: 'ruby-excon' packaging is maintained in the 'Git' version control system at: https://salsa.debian.org/ruby-team/ruby-excon.git Please use: git clone https://salsa.debian.org/ruby-team/ruby-excon.git to retrieve the latest (possibly unreleased) updates to the package. Need to get 248 kB of source archives. Get:1 http://deb.debian.org/debian trixie/main ruby-excon 0.112.0-4 (dsc) [2078 B] Get:2 http://deb.debian.org/debian trixie/main ruby-excon 0.112.0-4 (tar) [240 kB] Get:3 http://deb.debian.org/debian trixie/main ruby-excon 0.112.0-4 (diff) [6416 B] Fetched 248 kB in 0s (6534 kB/s) Download complete and in download only mode ============================================================================= Building ruby-excon in trixie on arm64 on codethink04-arm64 now. Date: Wed Aug 6 04:48:34 BST 2025 Date UTC: Wed Aug 6 03:48:34 UTC 2025 ============================================================================= W: /root/.pbuilderrc does not exist I: Logging to b1/build.log I: pbuilder: network access will be disabled during build I: Current time: Tue Aug 5 15:48:34 -12 2025 I: pbuilder-time-stamp: 1754452114 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/trixie-reproducible-base.tgz] I: copying local configuration W: --override-config is not set; not updating apt.conf Read the manpage for details. I: mounting /proc filesystem I: mounting /sys filesystem I: creating /{dev,run}/shm I: mounting /dev/pts filesystem I: redirecting /dev/ptmx to /dev/pts/ptmx I: policy-rc.d already exists I: Copying source file I: copying [ruby-excon_0.112.0-4.dsc] I: copying [./ruby-excon_0.112.0.orig.tar.gz] I: copying [./ruby-excon_0.112.0-4.debian.tar.xz] I: Extracting source dpkg-source: warning: cannot verify inline signature for ./ruby-excon_0.112.0-4.dsc: no acceptable signature found dpkg-source: info: extracting ruby-excon in ruby-excon-0.112.0 dpkg-source: info: unpacking ruby-excon_0.112.0.orig.tar.gz dpkg-source: info: unpacking ruby-excon_0.112.0-4.debian.tar.xz dpkg-source: info: using patch list from debian/patches/series dpkg-source: info: applying 00_disable-local-port-reuse-tests.patch dpkg-source: info: applying 01_use_ca-certificates.patch dpkg-source: info: applying 03_remove_rubygems_bundler_add_requires_from_gemspec.patch dpkg-source: info: applying 0004-test-rackups-fallback-to-using-Rack-if-Rackup-is-not.patch dpkg-source: info: applying 0005-no-internet-access.patch I: Not using root during the build. I: Installing the build-deps I: user script /srv/workspace/pbuilder/3958215/tmp/hooks/D02_print_environment starting I: set BUILDDIR='/build/reproducible-path' BUILDUSERGECOS='first user,first room,first work-phone,first home-phone,first other' BUILDUSERNAME='pbuilder1' BUILD_ARCH='arm64' DEBIAN_FRONTEND='noninteractive' DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=12 ' DISTRIBUTION='trixie' HOME='/root' HOST_ARCH='arm64' IFS=' ' INVOCATION_ID='136b63c0e11e48df9aee5e24cf875801' LANG='C' LANGUAGE='en_US:en' LC_ALL='C' MAIL='/var/mail/root' OPTIND='1' PATH='/usr/sbin:/usr/bin:/sbin:/bin:/usr/games' PBCURRENTCOMMANDLINEOPERATION='build' PBUILDER_OPERATION='build' PBUILDER_PKGDATADIR='/usr/share/pbuilder' PBUILDER_PKGLIBDIR='/usr/lib/pbuilder' PBUILDER_SYSCONFDIR='/etc' PPID='3958215' PS1='# ' PS2='> ' PS4='+ ' PWD='/' SHELL='/bin/bash' SHLVL='2' SUDO_COMMAND='/usr/bin/timeout -k 18.1h 18h /usr/bin/ionice -c 3 /usr/bin/nice /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz/pbuilderrc_s3f5 --distribution trixie --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/trixie-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz/b1 --logfile b1/build.log ruby-excon_0.112.0-4.dsc' SUDO_GID='109' SUDO_UID='104' SUDO_USER='jenkins' TERM='unknown' TZ='/usr/share/zoneinfo/Etc/GMT+12' USER='root' _='/usr/bin/systemd-run' http_proxy='http://192.168.101.4:3128' I: uname -a Linux codethink04-arm64 6.1.0-37-cloud-arm64 #1 SMP Debian 6.1.140-1 (2025-05-22) aarch64 GNU/Linux I: ls -l /bin lrwxrwxrwx 1 root root 7 May 12 19:25 /bin -> usr/bin I: user script /srv/workspace/pbuilder/3958215/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy Version: 0.invalid.0 Architecture: arm64 Maintainer: Debian Pbuilder Team Description: Dummy package to satisfy dependencies with aptitude - created by pbuilder This package was created automatically by pbuilder to satisfy the build-dependencies of the package being currently built. Depends: debhelper-compat (= 13), gem2deb (>= 1), rake, ruby-activesupport, ruby-chronic, ruby-delorean, ruby-eventmachine, ruby-open4, ruby-rackup, ruby-rspec, ruby-shindo, ruby-sinatra (>= 4.1.1-5), ruby-webrick (>= 1.7~), unicorn, puma, ruby-sinatra-contrib (>= 4.1.1-5) dpkg-deb: building package 'pbuilder-satisfydepends-dummy' in '/tmp/satisfydepends-aptitude/pbuilder-satisfydepends-dummy.deb'. Selecting previously unselected package pbuilder-satisfydepends-dummy. (Reading database ... 19965 files and directories currently installed.) Preparing to unpack .../pbuilder-satisfydepends-dummy.deb ... Unpacking pbuilder-satisfydepends-dummy (0.invalid.0) ... dpkg: pbuilder-satisfydepends-dummy: dependency problems, but configuring anyway as you requested: pbuilder-satisfydepends-dummy depends on debhelper-compat (= 13); however: Package debhelper-compat is not installed. pbuilder-satisfydepends-dummy depends on gem2deb (>= 1); however: Package gem2deb is not installed. pbuilder-satisfydepends-dummy depends on rake; however: Package rake is not installed. pbuilder-satisfydepends-dummy depends on ruby-activesupport; however: Package ruby-activesupport is not installed. pbuilder-satisfydepends-dummy depends on ruby-chronic; however: Package ruby-chronic is not installed. pbuilder-satisfydepends-dummy depends on ruby-delorean; however: Package ruby-delorean is not installed. pbuilder-satisfydepends-dummy depends on ruby-eventmachine; however: Package ruby-eventmachine is not installed. pbuilder-satisfydepends-dummy depends on ruby-open4; however: Package ruby-open4 is not installed. pbuilder-satisfydepends-dummy depends on ruby-rackup; however: Package ruby-rackup is not installed. pbuilder-satisfydepends-dummy depends on ruby-rspec; however: Package ruby-rspec is not installed. pbuilder-satisfydepends-dummy depends on ruby-shindo; however: Package ruby-shindo is not installed. pbuilder-satisfydepends-dummy depends on ruby-sinatra (>= 4.1.1-5); however: Package ruby-sinatra is not installed. pbuilder-satisfydepends-dummy depends on ruby-webrick (>= 1.7~); however: Package ruby-webrick is not installed. pbuilder-satisfydepends-dummy depends on unicorn; however: Package unicorn is not installed. pbuilder-satisfydepends-dummy depends on puma; however: Package puma is not installed. pbuilder-satisfydepends-dummy depends on ruby-sinatra-contrib (>= 4.1.1-5); however: Package ruby-sinatra-contrib is not installed. Setting up pbuilder-satisfydepends-dummy (0.invalid.0) ... Reading package lists... Building dependency tree... Reading state information... Initializing package states... Writing extended state information... Building tag database... pbuilder-satisfydepends-dummy is already installed at the requested version (0.invalid.0) pbuilder-satisfydepends-dummy is already installed at the requested version (0.invalid.0) The following NEW packages will be installed: autoconf{a} automake{a} autopoint{a} autotools-dev{a} bsdextrautils{a} ca-certificates{a} debhelper{a} devscripts{a} dh-autoreconf{a} dh-strip-nondeterminism{a} dwz{a} file{a} gem2deb{a} gem2deb-test-runner{a} gettext{a} gettext-base{a} gpg{a} gpg-agent{a} gpgconf{a} gpgv{a} groff-base{a} intltool-debian{a} libarchive-zip-perl{a} libassuan9{a} libb-hooks-op-check-perl{a} libclass-method-modifiers-perl{a} libclass-xsaccessor-perl{a} libclone-perl{a} libdebhelper-perl{a} libdevel-callchecker-perl{a} libdynaloader-functions-perl{a} libelf1t64{a} libencode-locale-perl{a} libexpat1{a} libffi8{a} libfile-dirlist-perl{a} libfile-homedir-perl{a} libfile-listing-perl{a} libfile-stripnondeterminism-perl{a} libfile-touch-perl{a} libfile-which-perl{a} libgcrypt20{a} libgmp-dev{a} libgmpxx4ldbl{a} libgpg-error0{a} libhtml-parser-perl{a} libhtml-tagset-perl{a} libhtml-tree-perl{a} libhttp-cookies-perl{a} libhttp-date-perl{a} libhttp-message-perl{a} libhttp-negotiate-perl{a} libimport-into-perl{a} libio-html-perl{a} libio-socket-ssl-perl{a} libksba8{a} liblwp-mediatypes-perl{a} liblwp-protocol-https-perl{a} libmagic-mgc{a} libmagic1t64{a} libmodule-runtime-perl{a} libmoo-perl{a} libnet-http-perl{a} libnet-ssleay-perl{a} libnpth0t64{a} libparams-classify-perl{a} libpipeline1{a} libpython3-stdlib{a} libpython3.13-minimal{a} libpython3.13-stdlib{a} libreadline8t64{a} librole-tiny-perl{a} libruby{a} libruby3.3{a} libsub-quote-perl{a} libtimedate-perl{a} libtool{a} libtry-tiny-perl{a} libuchardet0{a} libunistring5{a} liburi-perl{a} libwww-perl{a} libwww-robotrules-perl{a} libxml2{a} libyaml-0-2{a} m4{a} man-db{a} media-types{a} netbase{a} openssl{a} patchutils{a} perl-openssl-defaults{a} pinentry-curses{a} po-debconf{a} puma{a} python3{a} python3-minimal{a} python3.13{a} python3.13-minimal{a} rake{a} readline-common{a} ruby{a} ruby-activesupport{a} ruby-all-dev{a} ruby-base64{a} ruby-chronic{a} ruby-concurrent{a} ruby-connection-pool{a} ruby-csv{a} ruby-delorean{a} ruby-did-you-mean{a} ruby-diff-lcs{a} ruby-eventmachine{a} ruby-formatador{a} ruby-i18n{a} ruby-kgio{a} ruby-minitest{a} ruby-multi-json{a} ruby-mustermann{a} ruby-net-telnet{a} ruby-nio4r{a} ruby-numerizer{a} ruby-open4{a} ruby-power-assert{a} ruby-rack{a} ruby-rack-protection{a} ruby-rack-session{a} ruby-rackup{a} ruby-raindrops{a} ruby-rspec{a} ruby-rspec-core{a} ruby-rspec-expectations{a} ruby-rspec-mocks{a} ruby-rspec-support{a} ruby-ruby2-keywords{a} ruby-rubygems{a} ruby-shindo{a} ruby-sinatra{a} ruby-sinatra-contrib{a} ruby-test-unit{a} ruby-tilt{a} ruby-tzinfo{a} ruby-webrick{a} ruby-xmlrpc{a} ruby3.3{a} ruby3.3-dev{a} rubygems-integration{a} sensible-utils{a} sopv-gpgv{a} tzdata{a} unicorn{a} wdiff{a} The following packages are RECOMMENDED but will NOT be installed: apt-file curl dctrl-tools debian-keyring debian-tag2upload-keyring dput dput-ng dupload equivs fonts-lato gnupg libarchive-cpio-perl libdata-dump-perl libdistro-info-perl libgit-wrapper-perl libgitlab-api-v4-perl libgpg-error-l10n libhtml-form-perl libhtml-format-perl libhttp-daemon-perl libio-compress-brotli-perl libjs-jquery libjson-perl liblist-compare-perl libltdl-dev libmail-sendmail-perl libmailtools-perl libnamespace-clean-perl libsoap-lite-perl libstring-shellquote-perl libxstring-perl licensecheck lintian lynx lzip pristine-tar python3-apt python3-argcomplete python3-debian python3-magic python3-requests python3-unidiff python3-xdg ruby-oj ruby-sdbm ruby3.3-doc sopv-doc strace unzip wget zip 0 packages upgraded, 152 newly installed, 0 to remove and 0 not upgraded. Need to get 36.2 MB of archives. After unpacking 144 MB will be used. Writing extended state information... Get: 1 http://deb.debian.org/debian trixie/main arm64 libexpat1 arm64 2.7.1-2 [93.3 kB] Get: 2 http://deb.debian.org/debian trixie/main arm64 libpython3.13-minimal arm64 3.13.5-2 [856 kB] Get: 3 http://deb.debian.org/debian trixie/main arm64 python3.13-minimal arm64 3.13.5-2 [2003 kB] Get: 4 http://deb.debian.org/debian trixie/main arm64 python3-minimal arm64 3.13.5-1 [27.2 kB] Get: 5 http://deb.debian.org/debian trixie/main arm64 media-types all 13.0.0 [29.3 kB] Get: 6 http://deb.debian.org/debian trixie/main arm64 netbase all 6.5 [12.4 kB] Get: 7 http://deb.debian.org/debian trixie/main arm64 tzdata all 2025b-4 [260 kB] Get: 8 http://deb.debian.org/debian trixie/main arm64 libffi8 arm64 3.4.8-2 [21.3 kB] Get: 9 http://deb.debian.org/debian trixie/main arm64 readline-common all 8.2-6 [69.4 kB] Get: 10 http://deb.debian.org/debian trixie/main arm64 libreadline8t64 arm64 8.2-6 [159 kB] Get: 11 http://deb.debian.org/debian trixie/main arm64 libpython3.13-stdlib arm64 3.13.5-2 [1892 kB] Get: 12 http://deb.debian.org/debian trixie/main arm64 python3.13 arm64 3.13.5-2 [757 kB] Get: 13 http://deb.debian.org/debian trixie/main arm64 libpython3-stdlib arm64 3.13.5-1 [10.2 kB] Get: 14 http://deb.debian.org/debian trixie/main arm64 python3 arm64 3.13.5-1 [28.2 kB] Get: 15 http://deb.debian.org/debian trixie/main arm64 sensible-utils all 0.0.25 [25.0 kB] Get: 16 http://deb.debian.org/debian trixie/main arm64 openssl arm64 3.5.1-1 [1457 kB] Get: 17 http://deb.debian.org/debian trixie/main arm64 ca-certificates all 20250419 [162 kB] Get: 18 http://deb.debian.org/debian trixie/main arm64 libmagic-mgc arm64 1:5.46-5 [338 kB] Get: 19 http://deb.debian.org/debian trixie/main arm64 libmagic1t64 arm64 1:5.46-5 [103 kB] Get: 20 http://deb.debian.org/debian trixie/main arm64 file arm64 1:5.46-5 [43.7 kB] Get: 21 http://deb.debian.org/debian trixie/main arm64 gettext-base arm64 0.23.1-2 [241 kB] Get: 22 http://deb.debian.org/debian trixie/main arm64 libuchardet0 arm64 0.0.8-1+b2 [69.2 kB] Get: 23 http://deb.debian.org/debian trixie/main arm64 groff-base arm64 1.23.0-9 [1130 kB] Get: 24 http://deb.debian.org/debian trixie/main arm64 bsdextrautils arm64 2.41-5 [93.8 kB] Get: 25 http://deb.debian.org/debian trixie/main arm64 libpipeline1 arm64 1.5.8-1 [40.2 kB] Get: 26 http://deb.debian.org/debian trixie/main arm64 man-db arm64 2.13.1-1 [1453 kB] Get: 27 http://deb.debian.org/debian trixie/main arm64 m4 arm64 1.4.19-8 [285 kB] Get: 28 http://deb.debian.org/debian trixie/main arm64 autoconf all 2.72-3.1 [494 kB] Get: 29 http://deb.debian.org/debian trixie/main arm64 autotools-dev all 20240727.1 [60.2 kB] Get: 30 http://deb.debian.org/debian trixie/main arm64 automake all 1:1.17-4 [862 kB] Get: 31 http://deb.debian.org/debian trixie/main arm64 autopoint all 0.23.1-2 [770 kB] Get: 32 http://deb.debian.org/debian trixie/main arm64 libdebhelper-perl all 13.24.2 [90.9 kB] Get: 33 http://deb.debian.org/debian trixie/main arm64 libtool all 2.5.4-4 [539 kB] Get: 34 http://deb.debian.org/debian trixie/main arm64 dh-autoreconf all 20 [17.1 kB] Get: 35 http://deb.debian.org/debian trixie/main arm64 libarchive-zip-perl all 1.68-1 [104 kB] Get: 36 http://deb.debian.org/debian trixie/main arm64 libfile-stripnondeterminism-perl all 1.14.1-2 [19.7 kB] Get: 37 http://deb.debian.org/debian trixie/main arm64 dh-strip-nondeterminism all 1.14.1-2 [8620 B] Get: 38 http://deb.debian.org/debian trixie/main arm64 libelf1t64 arm64 0.192-4 [189 kB] Get: 39 http://deb.debian.org/debian trixie/main arm64 dwz arm64 0.15-1+b1 [102 kB] Get: 40 http://deb.debian.org/debian trixie/main arm64 libunistring5 arm64 1.3-2 [453 kB] Get: 41 http://deb.debian.org/debian trixie/main arm64 libxml2 arm64 2.12.7+dfsg+really2.9.14-2.1 [630 kB] Get: 42 http://deb.debian.org/debian trixie/main arm64 gettext arm64 0.23.1-2 [1611 kB] Get: 43 http://deb.debian.org/debian trixie/main arm64 intltool-debian all 0.35.0+20060710.6 [22.9 kB] Get: 44 http://deb.debian.org/debian trixie/main arm64 po-debconf all 1.0.21+nmu1 [248 kB] Get: 45 http://deb.debian.org/debian trixie/main arm64 debhelper all 13.24.2 [919 kB] Get: 46 http://deb.debian.org/debian trixie/main arm64 libgpg-error0 arm64 1.51-4 [78.5 kB] Get: 47 http://deb.debian.org/debian trixie/main arm64 libassuan9 arm64 3.0.2-2 [59.1 kB] Get: 48 http://deb.debian.org/debian trixie/main arm64 libgcrypt20 arm64 1.11.0-7 [742 kB] Get: 49 http://deb.debian.org/debian trixie/main arm64 gpgconf arm64 2.4.7-21+b3 [121 kB] Get: 50 http://deb.debian.org/debian trixie/main arm64 libksba8 arm64 1.6.7-2+b1 [125 kB] Get: 51 http://deb.debian.org/debian trixie/main arm64 libnpth0t64 arm64 1.8-3 [22.9 kB] Get: 52 http://deb.debian.org/debian trixie/main arm64 gpg arm64 2.4.7-21+b3 [578 kB] Get: 53 http://deb.debian.org/debian trixie/main arm64 pinentry-curses arm64 1.3.1-2 [83.5 kB] Get: 54 http://deb.debian.org/debian trixie/main arm64 gpg-agent arm64 2.4.7-21+b3 [249 kB] Get: 55 http://deb.debian.org/debian trixie/main arm64 libfile-dirlist-perl all 0.05-3 [7600 B] Get: 56 http://deb.debian.org/debian trixie/main arm64 libfile-which-perl all 1.27-2 [15.1 kB] Get: 57 http://deb.debian.org/debian trixie/main arm64 libfile-homedir-perl all 1.006-2 [42.4 kB] Get: 58 http://deb.debian.org/debian trixie/main arm64 libfile-touch-perl all 0.12-2 [8816 B] Get: 59 http://deb.debian.org/debian trixie/main arm64 libclass-method-modifiers-perl all 2.15-1 [18.0 kB] Get: 60 http://deb.debian.org/debian trixie/main arm64 libclass-xsaccessor-perl arm64 1.19-4+b5 [34.9 kB] Get: 61 http://deb.debian.org/debian trixie/main arm64 libb-hooks-op-check-perl arm64 0.22-3+b2 [10.6 kB] Get: 62 http://deb.debian.org/debian trixie/main arm64 libdynaloader-functions-perl all 0.004-2 [12.2 kB] Get: 63 http://deb.debian.org/debian trixie/main arm64 libdevel-callchecker-perl arm64 0.009-2 [15.7 kB] Get: 64 http://deb.debian.org/debian trixie/main arm64 libparams-classify-perl arm64 0.015-2+b4 [22.3 kB] Get: 65 http://deb.debian.org/debian trixie/main arm64 libmodule-runtime-perl all 0.018-1 [17.8 kB] Get: 66 http://deb.debian.org/debian trixie/main arm64 libimport-into-perl all 1.002005-2 [11.3 kB] Get: 67 http://deb.debian.org/debian trixie/main arm64 librole-tiny-perl all 2.002004-1 [21.4 kB] Get: 68 http://deb.debian.org/debian trixie/main arm64 libsub-quote-perl all 2.006008-1 [21.8 kB] Get: 69 http://deb.debian.org/debian trixie/main arm64 libmoo-perl all 2.005005-1 [58.0 kB] Get: 70 http://deb.debian.org/debian trixie/main arm64 libencode-locale-perl all 1.05-3 [12.9 kB] Get: 71 http://deb.debian.org/debian trixie/main arm64 libtimedate-perl all 2.3300-2 [39.3 kB] Get: 72 http://deb.debian.org/debian trixie/main arm64 libhttp-date-perl all 6.06-1 [10.7 kB] Get: 73 http://deb.debian.org/debian trixie/main arm64 libfile-listing-perl all 6.16-1 [12.4 kB] Get: 74 http://deb.debian.org/debian trixie/main arm64 libhtml-tagset-perl all 3.24-1 [14.7 kB] Get: 75 http://deb.debian.org/debian trixie/main arm64 liburi-perl all 5.30-1 [105 kB] Get: 76 http://deb.debian.org/debian trixie/main arm64 libhtml-parser-perl arm64 3.83-1+b2 [97.5 kB] Get: 77 http://deb.debian.org/debian trixie/main arm64 libhtml-tree-perl all 5.07-3 [211 kB] Get: 78 http://deb.debian.org/debian trixie/main arm64 libclone-perl arm64 0.47-1+b1 [13.7 kB] Get: 79 http://deb.debian.org/debian trixie/main arm64 libio-html-perl all 1.004-3 [16.2 kB] Get: 80 http://deb.debian.org/debian trixie/main arm64 liblwp-mediatypes-perl all 6.04-2 [20.2 kB] Get: 81 http://deb.debian.org/debian trixie/main arm64 libhttp-message-perl all 7.00-2 [79.8 kB] Get: 82 http://deb.debian.org/debian trixie/main arm64 libhttp-cookies-perl all 6.11-1 [19.1 kB] Get: 83 http://deb.debian.org/debian trixie/main arm64 libhttp-negotiate-perl all 6.01-2 [13.1 kB] Get: 84 http://deb.debian.org/debian trixie/main arm64 perl-openssl-defaults arm64 7+b2 [6712 B] Get: 85 http://deb.debian.org/debian trixie/main arm64 libnet-ssleay-perl arm64 1.94-3 [323 kB] Get: 86 http://deb.debian.org/debian trixie/main arm64 libio-socket-ssl-perl all 2.089-1 [223 kB] Get: 87 http://deb.debian.org/debian trixie/main arm64 libnet-http-perl all 6.23-1 [23.9 kB] Get: 88 http://deb.debian.org/debian trixie/main arm64 liblwp-protocol-https-perl all 6.14-1 [10.8 kB] Get: 89 http://deb.debian.org/debian trixie/main arm64 libtry-tiny-perl all 0.32-1 [22.9 kB] Get: 90 http://deb.debian.org/debian trixie/main arm64 libwww-robotrules-perl all 6.02-1 [12.9 kB] Get: 91 http://deb.debian.org/debian trixie/main arm64 libwww-perl all 6.78-1 [183 kB] Get: 92 http://deb.debian.org/debian trixie/main arm64 patchutils arm64 0.4.2-1+b1 [71.3 kB] Get: 93 http://deb.debian.org/debian trixie/main arm64 gpgv arm64 2.4.7-21+b3 [220 kB] Get: 94 http://deb.debian.org/debian trixie/main arm64 sopv-gpgv all 0.1.4-1 [11.3 kB] Get: 95 http://deb.debian.org/debian trixie/main arm64 wdiff arm64 1.2.2-9 [122 kB] Get: 96 http://deb.debian.org/debian trixie/main arm64 devscripts all 2.25.15 [1067 kB] Get: 97 http://deb.debian.org/debian trixie/main arm64 rubygems-integration all 1.19 [5488 B] Get: 98 http://deb.debian.org/debian trixie/main arm64 ruby-csv all 3.3.4-1 [42.2 kB] Get: 99 http://deb.debian.org/debian trixie/main arm64 ruby-did-you-mean all 1.6.3-2 [20.9 kB] Get: 100 http://deb.debian.org/debian trixie/main arm64 ruby-net-telnet all 0.2.0-1 [13.1 kB] Get: 101 http://deb.debian.org/debian trixie/main arm64 ruby-ruby2-keywords all 0.0.5-1 [4300 B] Get: 102 http://deb.debian.org/debian trixie/main arm64 ruby-webrick all 1.9.1-1 [59.6 kB] Get: 103 http://deb.debian.org/debian trixie/main arm64 ruby-xmlrpc all 0.3.3-2 [24.4 kB] Get: 104 http://deb.debian.org/debian trixie/main arm64 libyaml-0-2 arm64 0.2.5-2 [49.2 kB] Get: 105 http://deb.debian.org/debian trixie/main arm64 libruby3.3 arm64 3.3.8-2 [6142 kB] Get: 106 http://deb.debian.org/debian trixie/main arm64 ruby3.3 arm64 3.3.8-2 [834 kB] Get: 107 http://deb.debian.org/debian trixie/main arm64 libruby arm64 1:3.3+b1 [5436 B] Get: 108 http://deb.debian.org/debian trixie/main arm64 ruby-rubygems all 3.6.7-2 [407 kB] Get: 109 http://deb.debian.org/debian trixie/main arm64 ruby arm64 1:3.3+b1 [6560 B] Get: 110 http://deb.debian.org/debian trixie/main arm64 rake all 13.2.1-1 [65.2 kB] Get: 111 http://deb.debian.org/debian trixie/main arm64 ruby-minitest all 5.25.4-3 [66.3 kB] Get: 112 http://deb.debian.org/debian trixie/main arm64 ruby-power-assert all 2.0.3-1 [11.8 kB] Get: 113 http://deb.debian.org/debian trixie/main arm64 ruby-test-unit all 3.6.2-1 [79.1 kB] Get: 114 http://deb.debian.org/debian trixie/main arm64 gem2deb-test-runner arm64 2.2.5 [17.9 kB] Get: 115 http://deb.debian.org/debian trixie/main arm64 libgmpxx4ldbl arm64 2:6.3.0+dfsg-3 [329 kB] Get: 116 http://deb.debian.org/debian trixie/main arm64 libgmp-dev arm64 2:6.3.0+dfsg-3 [621 kB] Get: 117 http://deb.debian.org/debian trixie/main arm64 ruby3.3-dev arm64 3.3.8-2 [1045 kB] Get: 118 http://deb.debian.org/debian trixie/main arm64 ruby-all-dev arm64 1:3.3+b1 [6496 B] Get: 119 http://deb.debian.org/debian trixie/main arm64 gem2deb arm64 2.2.5 [48.0 kB] Get: 120 http://deb.debian.org/debian trixie/main arm64 ruby-nio4r arm64 2.7.3-1+b2 [112 kB] Get: 121 http://deb.debian.org/debian trixie/main arm64 puma arm64 6.6.0-4 [189 kB] Get: 122 http://deb.debian.org/debian trixie/main arm64 ruby-concurrent all 1.3.5-1 [291 kB] Get: 123 http://deb.debian.org/debian trixie/main arm64 ruby-i18n all 1.14.7-1 [41.7 kB] Get: 124 http://deb.debian.org/debian trixie/main arm64 ruby-tzinfo all 2.0.6-1 [66.7 kB] Get: 125 http://deb.debian.org/debian trixie/main arm64 ruby-connection-pool all 2.4.1-1 [10.5 kB] Get: 126 http://deb.debian.org/debian trixie/main arm64 ruby-base64 all 0.2.0-2 [7116 B] Get: 127 http://deb.debian.org/debian trixie/main arm64 ruby-activesupport all 2:7.2.2.1+dfsg-7 [223 kB] Get: 128 http://deb.debian.org/debian trixie/main arm64 ruby-numerizer all 0.2.0-3 [4888 B] Get: 129 http://deb.debian.org/debian trixie/main arm64 ruby-chronic all 0.10.5-3 [28.8 kB] Get: 130 http://deb.debian.org/debian trixie/main arm64 ruby-delorean all 2.1.0-2.1 [5612 B] Get: 131 http://deb.debian.org/debian trixie/main arm64 ruby-diff-lcs all 1.5.1-1 [28.1 kB] Get: 132 http://deb.debian.org/debian trixie/main arm64 ruby-eventmachine arm64 1.3~pre20220315-df4ab006-5+b2 [150 kB] Get: 133 http://deb.debian.org/debian trixie/main arm64 ruby-formatador all 1.1.0-1 [9304 B] Get: 134 http://deb.debian.org/debian trixie/main arm64 ruby-kgio arm64 2.11.2-2+b9 [27.8 kB] Get: 135 http://deb.debian.org/debian trixie/main arm64 ruby-multi-json all 1.15.0-1 [20.4 kB] Get: 136 http://deb.debian.org/debian trixie/main arm64 ruby-mustermann all 3.0.0-2 [37.7 kB] Get: 137 http://deb.debian.org/debian trixie/main arm64 ruby-open4 all 1.3.4-3 [14.5 kB] Get: 138 http://deb.debian.org/debian trixie/main arm64 ruby-rack all 3.1.16-0.1 [98.3 kB] Get: 139 http://deb.debian.org/debian trixie/main arm64 ruby-rack-protection all 4.1.1-5 [41.8 kB] Get: 140 http://deb.debian.org/debian trixie/main arm64 ruby-rack-session all 2.1.1-0.1 [12.5 kB] Get: 141 http://deb.debian.org/debian trixie/main arm64 ruby-rackup all 2.1.0-4 [12.7 kB] Get: 142 http://deb.debian.org/debian trixie/main arm64 ruby-raindrops arm64 0.20.0-2+b1 [29.2 kB] Get: 143 http://deb.debian.org/debian trixie/main arm64 ruby-rspec-support all 3.13.0c0e0m0s1-2 [28.5 kB] Get: 144 http://deb.debian.org/debian trixie/main arm64 ruby-rspec-core all 3.13.0c0e0m0s1-2 [164 kB] Get: 145 http://deb.debian.org/debian trixie/main arm64 ruby-rspec-expectations all 3.13.0c0e0m0s1-2 [90.2 kB] Get: 146 http://deb.debian.org/debian trixie/main arm64 ruby-rspec-mocks all 3.13.0c0e0m0s1-2 [81.3 kB] Get: 147 http://deb.debian.org/debian trixie/main arm64 ruby-rspec all 3.13.0c0e0m0s1-2 [5184 B] Get: 148 http://deb.debian.org/debian trixie/main arm64 ruby-shindo all 0.3.10-2 [12.0 kB] Get: 149 http://deb.debian.org/debian trixie/main arm64 ruby-tilt all 2.4.0-3 [32.2 kB] Get: 150 http://deb.debian.org/debian trixie/main arm64 ruby-sinatra all 4.1.1-5 [122 kB] Get: 151 http://deb.debian.org/debian trixie/main arm64 ruby-sinatra-contrib all 4.1.1-5 [54.8 kB] Get: 152 http://deb.debian.org/debian trixie/main arm64 unicorn arm64 6.1.0+git.20250131.1370f52-1+b1 [97.5 kB] Fetched 36.2 MB in 0s (113 MB/s) Preconfiguring packages ... Selecting previously unselected package libexpat1:arm64. (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 ... 19965 files and directories currently installed.) Preparing to unpack .../libexpat1_2.7.1-2_arm64.deb ... Unpacking libexpat1:arm64 (2.7.1-2) ... Selecting previously unselected package libpython3.13-minimal:arm64. Preparing to unpack .../libpython3.13-minimal_3.13.5-2_arm64.deb ... Unpacking libpython3.13-minimal:arm64 (3.13.5-2) ... Selecting previously unselected package python3.13-minimal. Preparing to unpack .../python3.13-minimal_3.13.5-2_arm64.deb ... Unpacking python3.13-minimal (3.13.5-2) ... Setting up libpython3.13-minimal:arm64 (3.13.5-2) ... Setting up libexpat1:arm64 (2.7.1-2) ... Setting up python3.13-minimal (3.13.5-2) ... Selecting previously unselected package python3-minimal. (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 ... 20299 files and directories currently installed.) Preparing to unpack .../0-python3-minimal_3.13.5-1_arm64.deb ... Unpacking python3-minimal (3.13.5-1) ... Selecting previously unselected package media-types. Preparing to unpack .../1-media-types_13.0.0_all.deb ... Unpacking media-types (13.0.0) ... Selecting previously unselected package netbase. Preparing to unpack .../2-netbase_6.5_all.deb ... Unpacking netbase (6.5) ... Selecting previously unselected package tzdata. Preparing to unpack .../3-tzdata_2025b-4_all.deb ... Unpacking tzdata (2025b-4) ... Selecting previously unselected package libffi8:arm64. Preparing to unpack .../4-libffi8_3.4.8-2_arm64.deb ... Unpacking libffi8:arm64 (3.4.8-2) ... Selecting previously unselected package readline-common. Preparing to unpack .../5-readline-common_8.2-6_all.deb ... Unpacking readline-common (8.2-6) ... Selecting previously unselected package libreadline8t64:arm64. Preparing to unpack .../6-libreadline8t64_8.2-6_arm64.deb ... Adding 'diversion of /lib/aarch64-linux-gnu/libhistory.so.8 to /lib/aarch64-linux-gnu/libhistory.so.8.usr-is-merged by libreadline8t64' Adding 'diversion of /lib/aarch64-linux-gnu/libhistory.so.8.2 to /lib/aarch64-linux-gnu/libhistory.so.8.2.usr-is-merged by libreadline8t64' Adding 'diversion of /lib/aarch64-linux-gnu/libreadline.so.8 to /lib/aarch64-linux-gnu/libreadline.so.8.usr-is-merged by libreadline8t64' Adding 'diversion of /lib/aarch64-linux-gnu/libreadline.so.8.2 to /lib/aarch64-linux-gnu/libreadline.so.8.2.usr-is-merged by libreadline8t64' Unpacking libreadline8t64:arm64 (8.2-6) ... Selecting previously unselected package libpython3.13-stdlib:arm64. Preparing to unpack .../7-libpython3.13-stdlib_3.13.5-2_arm64.deb ... Unpacking libpython3.13-stdlib:arm64 (3.13.5-2) ... Selecting previously unselected package python3.13. Preparing to unpack .../8-python3.13_3.13.5-2_arm64.deb ... Unpacking python3.13 (3.13.5-2) ... Selecting previously unselected package libpython3-stdlib:arm64. Preparing to unpack .../9-libpython3-stdlib_3.13.5-1_arm64.deb ... Unpacking libpython3-stdlib:arm64 (3.13.5-1) ... Setting up python3-minimal (3.13.5-1) ... Selecting previously unselected package python3. (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 ... 21314 files and directories currently installed.) Preparing to unpack .../000-python3_3.13.5-1_arm64.deb ... Unpacking python3 (3.13.5-1) ... Selecting previously unselected package sensible-utils. Preparing to unpack .../001-sensible-utils_0.0.25_all.deb ... Unpacking sensible-utils (0.0.25) ... Selecting previously unselected package openssl. Preparing to unpack .../002-openssl_3.5.1-1_arm64.deb ... Unpacking openssl (3.5.1-1) ... Selecting previously unselected package ca-certificates. Preparing to unpack .../003-ca-certificates_20250419_all.deb ... Unpacking ca-certificates (20250419) ... Selecting previously unselected package libmagic-mgc. Preparing to unpack .../004-libmagic-mgc_1%3a5.46-5_arm64.deb ... Unpacking libmagic-mgc (1:5.46-5) ... Selecting previously unselected package libmagic1t64:arm64. Preparing to unpack .../005-libmagic1t64_1%3a5.46-5_arm64.deb ... Unpacking libmagic1t64:arm64 (1:5.46-5) ... Selecting previously unselected package file. Preparing to unpack .../006-file_1%3a5.46-5_arm64.deb ... Unpacking file (1:5.46-5) ... Selecting previously unselected package gettext-base. Preparing to unpack .../007-gettext-base_0.23.1-2_arm64.deb ... Unpacking gettext-base (0.23.1-2) ... Selecting previously unselected package libuchardet0:arm64. Preparing to unpack .../008-libuchardet0_0.0.8-1+b2_arm64.deb ... Unpacking libuchardet0:arm64 (0.0.8-1+b2) ... Selecting previously unselected package groff-base. Preparing to unpack .../009-groff-base_1.23.0-9_arm64.deb ... Unpacking groff-base (1.23.0-9) ... Selecting previously unselected package bsdextrautils. Preparing to unpack .../010-bsdextrautils_2.41-5_arm64.deb ... Unpacking bsdextrautils (2.41-5) ... Selecting previously unselected package libpipeline1:arm64. Preparing to unpack .../011-libpipeline1_1.5.8-1_arm64.deb ... Unpacking libpipeline1:arm64 (1.5.8-1) ... Selecting previously unselected package man-db. Preparing to unpack .../012-man-db_2.13.1-1_arm64.deb ... Unpacking man-db (2.13.1-1) ... Selecting previously unselected package m4. Preparing to unpack .../013-m4_1.4.19-8_arm64.deb ... Unpacking m4 (1.4.19-8) ... Selecting previously unselected package autoconf. Preparing to unpack .../014-autoconf_2.72-3.1_all.deb ... Unpacking autoconf (2.72-3.1) ... Selecting previously unselected package autotools-dev. Preparing to unpack .../015-autotools-dev_20240727.1_all.deb ... Unpacking autotools-dev (20240727.1) ... Selecting previously unselected package automake. Preparing to unpack .../016-automake_1%3a1.17-4_all.deb ... Unpacking automake (1:1.17-4) ... Selecting previously unselected package autopoint. Preparing to unpack .../017-autopoint_0.23.1-2_all.deb ... Unpacking autopoint (0.23.1-2) ... Selecting previously unselected package libdebhelper-perl. Preparing to unpack .../018-libdebhelper-perl_13.24.2_all.deb ... Unpacking libdebhelper-perl (13.24.2) ... Selecting previously unselected package libtool. Preparing to unpack .../019-libtool_2.5.4-4_all.deb ... Unpacking libtool (2.5.4-4) ... Selecting previously unselected package dh-autoreconf. Preparing to unpack .../020-dh-autoreconf_20_all.deb ... Unpacking dh-autoreconf (20) ... Selecting previously unselected package libarchive-zip-perl. Preparing to unpack .../021-libarchive-zip-perl_1.68-1_all.deb ... Unpacking libarchive-zip-perl (1.68-1) ... Selecting previously unselected package libfile-stripnondeterminism-perl. Preparing to unpack .../022-libfile-stripnondeterminism-perl_1.14.1-2_all.deb ... Unpacking libfile-stripnondeterminism-perl (1.14.1-2) ... Selecting previously unselected package dh-strip-nondeterminism. Preparing to unpack .../023-dh-strip-nondeterminism_1.14.1-2_all.deb ... Unpacking dh-strip-nondeterminism (1.14.1-2) ... Selecting previously unselected package libelf1t64:arm64. Preparing to unpack .../024-libelf1t64_0.192-4_arm64.deb ... Unpacking libelf1t64:arm64 (0.192-4) ... Selecting previously unselected package dwz. Preparing to unpack .../025-dwz_0.15-1+b1_arm64.deb ... Unpacking dwz (0.15-1+b1) ... Selecting previously unselected package libunistring5:arm64. Preparing to unpack .../026-libunistring5_1.3-2_arm64.deb ... Unpacking libunistring5:arm64 (1.3-2) ... Selecting previously unselected package libxml2:arm64. Preparing to unpack .../027-libxml2_2.12.7+dfsg+really2.9.14-2.1_arm64.deb ... Unpacking libxml2:arm64 (2.12.7+dfsg+really2.9.14-2.1) ... Selecting previously unselected package gettext. Preparing to unpack .../028-gettext_0.23.1-2_arm64.deb ... Unpacking gettext (0.23.1-2) ... Selecting previously unselected package intltool-debian. Preparing to unpack .../029-intltool-debian_0.35.0+20060710.6_all.deb ... Unpacking intltool-debian (0.35.0+20060710.6) ... Selecting previously unselected package po-debconf. Preparing to unpack .../030-po-debconf_1.0.21+nmu1_all.deb ... Unpacking po-debconf (1.0.21+nmu1) ... Selecting previously unselected package debhelper. Preparing to unpack .../031-debhelper_13.24.2_all.deb ... Unpacking debhelper (13.24.2) ... Selecting previously unselected package libgpg-error0:arm64. Preparing to unpack .../032-libgpg-error0_1.51-4_arm64.deb ... Unpacking libgpg-error0:arm64 (1.51-4) ... Selecting previously unselected package libassuan9:arm64. Preparing to unpack .../033-libassuan9_3.0.2-2_arm64.deb ... Unpacking libassuan9:arm64 (3.0.2-2) ... Selecting previously unselected package libgcrypt20:arm64. Preparing to unpack .../034-libgcrypt20_1.11.0-7_arm64.deb ... Unpacking libgcrypt20:arm64 (1.11.0-7) ... Selecting previously unselected package gpgconf. Preparing to unpack .../035-gpgconf_2.4.7-21+b3_arm64.deb ... Unpacking gpgconf (2.4.7-21+b3) ... Selecting previously unselected package libksba8:arm64. Preparing to unpack .../036-libksba8_1.6.7-2+b1_arm64.deb ... Unpacking libksba8:arm64 (1.6.7-2+b1) ... Selecting previously unselected package libnpth0t64:arm64. Preparing to unpack .../037-libnpth0t64_1.8-3_arm64.deb ... Unpacking libnpth0t64:arm64 (1.8-3) ... Selecting previously unselected package gpg. Preparing to unpack .../038-gpg_2.4.7-21+b3_arm64.deb ... Unpacking gpg (2.4.7-21+b3) ... Selecting previously unselected package pinentry-curses. Preparing to unpack .../039-pinentry-curses_1.3.1-2_arm64.deb ... Unpacking pinentry-curses (1.3.1-2) ... Selecting previously unselected package gpg-agent. Preparing to unpack .../040-gpg-agent_2.4.7-21+b3_arm64.deb ... Unpacking gpg-agent (2.4.7-21+b3) ... Selecting previously unselected package libfile-dirlist-perl. Preparing to unpack .../041-libfile-dirlist-perl_0.05-3_all.deb ... Unpacking libfile-dirlist-perl (0.05-3) ... Selecting previously unselected package libfile-which-perl. Preparing to unpack .../042-libfile-which-perl_1.27-2_all.deb ... Unpacking libfile-which-perl (1.27-2) ... Selecting previously unselected package libfile-homedir-perl. Preparing to unpack .../043-libfile-homedir-perl_1.006-2_all.deb ... Unpacking libfile-homedir-perl (1.006-2) ... Selecting previously unselected package libfile-touch-perl. Preparing to unpack .../044-libfile-touch-perl_0.12-2_all.deb ... Unpacking libfile-touch-perl (0.12-2) ... Selecting previously unselected package libclass-method-modifiers-perl. Preparing to unpack .../045-libclass-method-modifiers-perl_2.15-1_all.deb ... Unpacking libclass-method-modifiers-perl (2.15-1) ... Selecting previously unselected package libclass-xsaccessor-perl. Preparing to unpack .../046-libclass-xsaccessor-perl_1.19-4+b5_arm64.deb ... Unpacking libclass-xsaccessor-perl (1.19-4+b5) ... Selecting previously unselected package libb-hooks-op-check-perl:arm64. Preparing to unpack .../047-libb-hooks-op-check-perl_0.22-3+b2_arm64.deb ... Unpacking libb-hooks-op-check-perl:arm64 (0.22-3+b2) ... Selecting previously unselected package libdynaloader-functions-perl. Preparing to unpack .../048-libdynaloader-functions-perl_0.004-2_all.deb ... Unpacking libdynaloader-functions-perl (0.004-2) ... Selecting previously unselected package libdevel-callchecker-perl:arm64. Preparing to unpack .../049-libdevel-callchecker-perl_0.009-2_arm64.deb ... Unpacking libdevel-callchecker-perl:arm64 (0.009-2) ... Selecting previously unselected package libparams-classify-perl:arm64. Preparing to unpack .../050-libparams-classify-perl_0.015-2+b4_arm64.deb ... Unpacking libparams-classify-perl:arm64 (0.015-2+b4) ... Selecting previously unselected package libmodule-runtime-perl. Preparing to unpack .../051-libmodule-runtime-perl_0.018-1_all.deb ... Unpacking libmodule-runtime-perl (0.018-1) ... Selecting previously unselected package libimport-into-perl. Preparing to unpack .../052-libimport-into-perl_1.002005-2_all.deb ... Unpacking libimport-into-perl (1.002005-2) ... Selecting previously unselected package librole-tiny-perl. Preparing to unpack .../053-librole-tiny-perl_2.002004-1_all.deb ... Unpacking librole-tiny-perl (2.002004-1) ... Selecting previously unselected package libsub-quote-perl. Preparing to unpack .../054-libsub-quote-perl_2.006008-1_all.deb ... Unpacking libsub-quote-perl (2.006008-1) ... Selecting previously unselected package libmoo-perl. Preparing to unpack .../055-libmoo-perl_2.005005-1_all.deb ... Unpacking libmoo-perl (2.005005-1) ... Selecting previously unselected package libencode-locale-perl. Preparing to unpack .../056-libencode-locale-perl_1.05-3_all.deb ... Unpacking libencode-locale-perl (1.05-3) ... Selecting previously unselected package libtimedate-perl. Preparing to unpack .../057-libtimedate-perl_2.3300-2_all.deb ... Unpacking libtimedate-perl (2.3300-2) ... Selecting previously unselected package libhttp-date-perl. Preparing to unpack .../058-libhttp-date-perl_6.06-1_all.deb ... Unpacking libhttp-date-perl (6.06-1) ... Selecting previously unselected package libfile-listing-perl. Preparing to unpack .../059-libfile-listing-perl_6.16-1_all.deb ... Unpacking libfile-listing-perl (6.16-1) ... Selecting previously unselected package libhtml-tagset-perl. Preparing to unpack .../060-libhtml-tagset-perl_3.24-1_all.deb ... Unpacking libhtml-tagset-perl (3.24-1) ... Selecting previously unselected package liburi-perl. Preparing to unpack .../061-liburi-perl_5.30-1_all.deb ... Unpacking liburi-perl (5.30-1) ... Selecting previously unselected package libhtml-parser-perl:arm64. Preparing to unpack .../062-libhtml-parser-perl_3.83-1+b2_arm64.deb ... Unpacking libhtml-parser-perl:arm64 (3.83-1+b2) ... Selecting previously unselected package libhtml-tree-perl. Preparing to unpack .../063-libhtml-tree-perl_5.07-3_all.deb ... Unpacking libhtml-tree-perl (5.07-3) ... Selecting previously unselected package libclone-perl:arm64. Preparing to unpack .../064-libclone-perl_0.47-1+b1_arm64.deb ... Unpacking libclone-perl:arm64 (0.47-1+b1) ... Selecting previously unselected package libio-html-perl. Preparing to unpack .../065-libio-html-perl_1.004-3_all.deb ... Unpacking libio-html-perl (1.004-3) ... Selecting previously unselected package liblwp-mediatypes-perl. Preparing to unpack .../066-liblwp-mediatypes-perl_6.04-2_all.deb ... Unpacking liblwp-mediatypes-perl (6.04-2) ... Selecting previously unselected package libhttp-message-perl. Preparing to unpack .../067-libhttp-message-perl_7.00-2_all.deb ... Unpacking libhttp-message-perl (7.00-2) ... Selecting previously unselected package libhttp-cookies-perl. Preparing to unpack .../068-libhttp-cookies-perl_6.11-1_all.deb ... Unpacking libhttp-cookies-perl (6.11-1) ... Selecting previously unselected package libhttp-negotiate-perl. Preparing to unpack .../069-libhttp-negotiate-perl_6.01-2_all.deb ... Unpacking libhttp-negotiate-perl (6.01-2) ... Selecting previously unselected package perl-openssl-defaults:arm64. Preparing to unpack .../070-perl-openssl-defaults_7+b2_arm64.deb ... Unpacking perl-openssl-defaults:arm64 (7+b2) ... Selecting previously unselected package libnet-ssleay-perl:arm64. Preparing to unpack .../071-libnet-ssleay-perl_1.94-3_arm64.deb ... Unpacking libnet-ssleay-perl:arm64 (1.94-3) ... Selecting previously unselected package libio-socket-ssl-perl. Preparing to unpack .../072-libio-socket-ssl-perl_2.089-1_all.deb ... Unpacking libio-socket-ssl-perl (2.089-1) ... Selecting previously unselected package libnet-http-perl. Preparing to unpack .../073-libnet-http-perl_6.23-1_all.deb ... Unpacking libnet-http-perl (6.23-1) ... Selecting previously unselected package liblwp-protocol-https-perl. Preparing to unpack .../074-liblwp-protocol-https-perl_6.14-1_all.deb ... Unpacking liblwp-protocol-https-perl (6.14-1) ... Selecting previously unselected package libtry-tiny-perl. Preparing to unpack .../075-libtry-tiny-perl_0.32-1_all.deb ... Unpacking libtry-tiny-perl (0.32-1) ... Selecting previously unselected package libwww-robotrules-perl. Preparing to unpack .../076-libwww-robotrules-perl_6.02-1_all.deb ... Unpacking libwww-robotrules-perl (6.02-1) ... Selecting previously unselected package libwww-perl. Preparing to unpack .../077-libwww-perl_6.78-1_all.deb ... Unpacking libwww-perl (6.78-1) ... Selecting previously unselected package patchutils. Preparing to unpack .../078-patchutils_0.4.2-1+b1_arm64.deb ... Unpacking patchutils (0.4.2-1+b1) ... Selecting previously unselected package gpgv. Preparing to unpack .../079-gpgv_2.4.7-21+b3_arm64.deb ... Unpacking gpgv (2.4.7-21+b3) ... Selecting previously unselected package sopv-gpgv. Preparing to unpack .../080-sopv-gpgv_0.1.4-1_all.deb ... Unpacking sopv-gpgv (0.1.4-1) ... Selecting previously unselected package wdiff. Preparing to unpack .../081-wdiff_1.2.2-9_arm64.deb ... Unpacking wdiff (1.2.2-9) ... Selecting previously unselected package devscripts. Preparing to unpack .../082-devscripts_2.25.15_all.deb ... Unpacking devscripts (2.25.15) ... Selecting previously unselected package rubygems-integration. Preparing to unpack .../083-rubygems-integration_1.19_all.deb ... Unpacking rubygems-integration (1.19) ... Selecting previously unselected package ruby-csv. Preparing to unpack .../084-ruby-csv_3.3.4-1_all.deb ... Unpacking ruby-csv (3.3.4-1) ... Selecting previously unselected package ruby-did-you-mean. Preparing to unpack .../085-ruby-did-you-mean_1.6.3-2_all.deb ... Unpacking ruby-did-you-mean (1.6.3-2) ... Selecting previously unselected package ruby-net-telnet. Preparing to unpack .../086-ruby-net-telnet_0.2.0-1_all.deb ... Unpacking ruby-net-telnet (0.2.0-1) ... Selecting previously unselected package ruby-ruby2-keywords. Preparing to unpack .../087-ruby-ruby2-keywords_0.0.5-1_all.deb ... Unpacking ruby-ruby2-keywords (0.0.5-1) ... Selecting previously unselected package ruby-webrick. Preparing to unpack .../088-ruby-webrick_1.9.1-1_all.deb ... Unpacking ruby-webrick (1.9.1-1) ... Selecting previously unselected package ruby-xmlrpc. Preparing to unpack .../089-ruby-xmlrpc_0.3.3-2_all.deb ... Unpacking ruby-xmlrpc (0.3.3-2) ... Selecting previously unselected package libyaml-0-2:arm64. Preparing to unpack .../090-libyaml-0-2_0.2.5-2_arm64.deb ... Unpacking libyaml-0-2:arm64 (0.2.5-2) ... Selecting previously unselected package libruby3.3:arm64. Preparing to unpack .../091-libruby3.3_3.3.8-2_arm64.deb ... Unpacking libruby3.3:arm64 (3.3.8-2) ... Selecting previously unselected package ruby3.3. Preparing to unpack .../092-ruby3.3_3.3.8-2_arm64.deb ... Unpacking ruby3.3 (3.3.8-2) ... Selecting previously unselected package libruby:arm64. Preparing to unpack .../093-libruby_1%3a3.3+b1_arm64.deb ... Unpacking libruby:arm64 (1:3.3+b1) ... Selecting previously unselected package ruby-rubygems. Preparing to unpack .../094-ruby-rubygems_3.6.7-2_all.deb ... Unpacking ruby-rubygems (3.6.7-2) ... Selecting previously unselected package ruby. Preparing to unpack .../095-ruby_1%3a3.3+b1_arm64.deb ... Unpacking ruby (1:3.3+b1) ... Selecting previously unselected package rake. Preparing to unpack .../096-rake_13.2.1-1_all.deb ... Unpacking rake (13.2.1-1) ... Selecting previously unselected package ruby-minitest. Preparing to unpack .../097-ruby-minitest_5.25.4-3_all.deb ... Unpacking ruby-minitest (5.25.4-3) ... Selecting previously unselected package ruby-power-assert. Preparing to unpack .../098-ruby-power-assert_2.0.3-1_all.deb ... Unpacking ruby-power-assert (2.0.3-1) ... Selecting previously unselected package ruby-test-unit. Preparing to unpack .../099-ruby-test-unit_3.6.2-1_all.deb ... Unpacking ruby-test-unit (3.6.2-1) ... Selecting previously unselected package gem2deb-test-runner. Preparing to unpack .../100-gem2deb-test-runner_2.2.5_arm64.deb ... Unpacking gem2deb-test-runner (2.2.5) ... Selecting previously unselected package libgmpxx4ldbl:arm64. Preparing to unpack .../101-libgmpxx4ldbl_2%3a6.3.0+dfsg-3_arm64.deb ... Unpacking libgmpxx4ldbl:arm64 (2:6.3.0+dfsg-3) ... Selecting previously unselected package libgmp-dev:arm64. Preparing to unpack .../102-libgmp-dev_2%3a6.3.0+dfsg-3_arm64.deb ... Unpacking libgmp-dev:arm64 (2:6.3.0+dfsg-3) ... Selecting previously unselected package ruby3.3-dev:arm64. Preparing to unpack .../103-ruby3.3-dev_3.3.8-2_arm64.deb ... Unpacking ruby3.3-dev:arm64 (3.3.8-2) ... Selecting previously unselected package ruby-all-dev:arm64. Preparing to unpack .../104-ruby-all-dev_1%3a3.3+b1_arm64.deb ... Unpacking ruby-all-dev:arm64 (1:3.3+b1) ... Selecting previously unselected package gem2deb. Preparing to unpack .../105-gem2deb_2.2.5_arm64.deb ... Unpacking gem2deb (2.2.5) ... Selecting previously unselected package ruby-nio4r. Preparing to unpack .../106-ruby-nio4r_2.7.3-1+b2_arm64.deb ... Unpacking ruby-nio4r (2.7.3-1+b2) ... Selecting previously unselected package puma. Preparing to unpack .../107-puma_6.6.0-4_arm64.deb ... Unpacking puma (6.6.0-4) ... Selecting previously unselected package ruby-concurrent. Preparing to unpack .../108-ruby-concurrent_1.3.5-1_all.deb ... Unpacking ruby-concurrent (1.3.5-1) ... Selecting previously unselected package ruby-i18n. Preparing to unpack .../109-ruby-i18n_1.14.7-1_all.deb ... Unpacking ruby-i18n (1.14.7-1) ... Selecting previously unselected package ruby-tzinfo. Preparing to unpack .../110-ruby-tzinfo_2.0.6-1_all.deb ... Unpacking ruby-tzinfo (2.0.6-1) ... Selecting previously unselected package ruby-connection-pool. Preparing to unpack .../111-ruby-connection-pool_2.4.1-1_all.deb ... Unpacking ruby-connection-pool (2.4.1-1) ... Selecting previously unselected package ruby-base64. Preparing to unpack .../112-ruby-base64_0.2.0-2_all.deb ... Unpacking ruby-base64 (0.2.0-2) ... Selecting previously unselected package ruby-activesupport. Preparing to unpack .../113-ruby-activesupport_2%3a7.2.2.1+dfsg-7_all.deb ... Unpacking ruby-activesupport (2:7.2.2.1+dfsg-7) ... Selecting previously unselected package ruby-numerizer. Preparing to unpack .../114-ruby-numerizer_0.2.0-3_all.deb ... Unpacking ruby-numerizer (0.2.0-3) ... Selecting previously unselected package ruby-chronic. Preparing to unpack .../115-ruby-chronic_0.10.5-3_all.deb ... Unpacking ruby-chronic (0.10.5-3) ... Selecting previously unselected package ruby-delorean. Preparing to unpack .../116-ruby-delorean_2.1.0-2.1_all.deb ... Unpacking ruby-delorean (2.1.0-2.1) ... Selecting previously unselected package ruby-diff-lcs. Preparing to unpack .../117-ruby-diff-lcs_1.5.1-1_all.deb ... Unpacking ruby-diff-lcs (1.5.1-1) ... Selecting previously unselected package ruby-eventmachine:arm64. Preparing to unpack .../118-ruby-eventmachine_1.3~pre20220315-df4ab006-5+b2_arm64.deb ... Unpacking ruby-eventmachine:arm64 (1.3~pre20220315-df4ab006-5+b2) ... Selecting previously unselected package ruby-formatador. Preparing to unpack .../119-ruby-formatador_1.1.0-1_all.deb ... Unpacking ruby-formatador (1.1.0-1) ... Selecting previously unselected package ruby-kgio. Preparing to unpack .../120-ruby-kgio_2.11.2-2+b9_arm64.deb ... Unpacking ruby-kgio (2.11.2-2+b9) ... Selecting previously unselected package ruby-multi-json. Preparing to unpack .../121-ruby-multi-json_1.15.0-1_all.deb ... Unpacking ruby-multi-json (1.15.0-1) ... Selecting previously unselected package ruby-mustermann. Preparing to unpack .../122-ruby-mustermann_3.0.0-2_all.deb ... Unpacking ruby-mustermann (3.0.0-2) ... Selecting previously unselected package ruby-open4. Preparing to unpack .../123-ruby-open4_1.3.4-3_all.deb ... Unpacking ruby-open4 (1.3.4-3) ... Selecting previously unselected package ruby-rack. Preparing to unpack .../124-ruby-rack_3.1.16-0.1_all.deb ... Unpacking ruby-rack (3.1.16-0.1) ... Selecting previously unselected package ruby-rack-protection. Preparing to unpack .../125-ruby-rack-protection_4.1.1-5_all.deb ... Unpacking ruby-rack-protection (4.1.1-5) ... Selecting previously unselected package ruby-rack-session. Preparing to unpack .../126-ruby-rack-session_2.1.1-0.1_all.deb ... Unpacking ruby-rack-session (2.1.1-0.1) ... Selecting previously unselected package ruby-rackup. Preparing to unpack .../127-ruby-rackup_2.1.0-4_all.deb ... Unpacking ruby-rackup (2.1.0-4) ... Selecting previously unselected package ruby-raindrops:arm64. Preparing to unpack .../128-ruby-raindrops_0.20.0-2+b1_arm64.deb ... Unpacking ruby-raindrops:arm64 (0.20.0-2+b1) ... Selecting previously unselected package ruby-rspec-support. Preparing to unpack .../129-ruby-rspec-support_3.13.0c0e0m0s1-2_all.deb ... Unpacking ruby-rspec-support (3.13.0c0e0m0s1-2) ... Selecting previously unselected package ruby-rspec-core. Preparing to unpack .../130-ruby-rspec-core_3.13.0c0e0m0s1-2_all.deb ... Unpacking ruby-rspec-core (3.13.0c0e0m0s1-2) ... Selecting previously unselected package ruby-rspec-expectations. Preparing to unpack .../131-ruby-rspec-expectations_3.13.0c0e0m0s1-2_all.deb ... Unpacking ruby-rspec-expectations (3.13.0c0e0m0s1-2) ... Selecting previously unselected package ruby-rspec-mocks. Preparing to unpack .../132-ruby-rspec-mocks_3.13.0c0e0m0s1-2_all.deb ... Unpacking ruby-rspec-mocks (3.13.0c0e0m0s1-2) ... Selecting previously unselected package ruby-rspec. Preparing to unpack .../133-ruby-rspec_3.13.0c0e0m0s1-2_all.deb ... Unpacking ruby-rspec (3.13.0c0e0m0s1-2) ... Selecting previously unselected package ruby-shindo. Preparing to unpack .../134-ruby-shindo_0.3.10-2_all.deb ... Unpacking ruby-shindo (0.3.10-2) ... Selecting previously unselected package ruby-tilt. Preparing to unpack .../135-ruby-tilt_2.4.0-3_all.deb ... Unpacking ruby-tilt (2.4.0-3) ... Selecting previously unselected package ruby-sinatra. Preparing to unpack .../136-ruby-sinatra_4.1.1-5_all.deb ... Unpacking ruby-sinatra (4.1.1-5) ... Selecting previously unselected package ruby-sinatra-contrib. Preparing to unpack .../137-ruby-sinatra-contrib_4.1.1-5_all.deb ... Unpacking ruby-sinatra-contrib (4.1.1-5) ... Selecting previously unselected package unicorn. Preparing to unpack .../138-unicorn_6.1.0+git.20250131.1370f52-1+b1_arm64.deb ... Unpacking unicorn (6.1.0+git.20250131.1370f52-1+b1) ... Setting up media-types (13.0.0) ... Setting up libpipeline1:arm64 (1.5.8-1) ... Setting up wdiff (1.2.2-9) ... Setting up ruby-multi-json (1.15.0-1) ... Setting up libfile-which-perl (1.27-2) ... Setting up libnpth0t64:arm64 (1.8-3) ... Setting up ruby-ruby2-keywords (0.0.5-1) ... Setting up ruby-mustermann (3.0.0-2) ... Setting up bsdextrautils (2.41-5) ... Setting up libgpg-error0:arm64 (1.51-4) ... Setting up ruby-open4 (1.3.4-3) ... Setting up libdynaloader-functions-perl (0.004-2) ... Setting up libclass-method-modifiers-perl (2.15-1) ... Setting up ruby-power-assert (2.0.3-1) ... Setting up libmagic-mgc (1:5.46-5) ... Setting up libclone-perl:arm64 (0.47-1+b1) ... Setting up libarchive-zip-perl (1.68-1) ... Setting up libyaml-0-2:arm64 (0.2.5-2) ... Setting up libhtml-tagset-perl (3.24-1) ... Setting up libdebhelper-perl (13.24.2) ... Setting up liblwp-mediatypes-perl (6.04-2) ... Setting up libmagic1t64:arm64 (1:5.46-5) ... Setting up libtry-tiny-perl (0.32-1) ... Setting up perl-openssl-defaults:arm64 (7+b2) ... Setting up gettext-base (0.23.1-2) ... Setting up m4 (1.4.19-8) ... Setting up libgcrypt20:arm64 (1.11.0-7) ... Setting up libencode-locale-perl (1.05-3) ... Setting up file (1:5.46-5) ... Setting up ruby-concurrent (1.3.5-1) ... Setting up libelf1t64:arm64 (0.192-4) ... Setting up tzdata (2025b-4) ... Current default time zone: 'Etc/UTC' Local time is now: Wed Aug 6 03:48:58 UTC 2025. Universal Time is now: Wed Aug 6 03:48:58 UTC 2025. Run 'dpkg-reconfigure tzdata' if you wish to change it. Setting up ruby-minitest (5.25.4-3) ... Setting up autotools-dev (20240727.1) ... Setting up libgmpxx4ldbl:arm64 (2:6.3.0+dfsg-3) ... Setting up ruby-test-unit (3.6.2-1) ... Setting up ruby-net-telnet (0.2.0-1) ... Setting up ruby-csv (3.3.4-1) ... Setting up ruby-base64 (0.2.0-2) ... Setting up libunistring5:arm64 (1.3-2) ... Setting up libio-html-perl (1.004-3) ... Setting up autopoint (0.23.1-2) ... Setting up libb-hooks-op-check-perl:arm64 (0.22-3+b2) ... Setting up ruby-i18n (1.14.7-1) ... Setting up autoconf (2.72-3.1) ... Setting up ruby-rspec-support (3.13.0c0e0m0s1-2) ... Setting up libtimedate-perl (2.3300-2) ... Setting up ruby-webrick (1.9.1-1) ... Setting up libffi8:arm64 (3.4.8-2) ... Setting up dwz (0.15-1+b1) ... Setting up sensible-utils (0.0.25) ... Setting up gpgv (2.4.7-21+b3) ... Setting up libuchardet0:arm64 (0.0.8-1+b2) ... Setting up libassuan9:arm64 (3.0.2-2) ... Setting up librole-tiny-perl (2.002004-1) ... Setting up netbase (6.5) ... Setting up libsub-quote-perl (2.006008-1) ... Setting up libclass-xsaccessor-perl (1.19-4+b5) ... Setting up ruby-connection-pool (2.4.1-1) ... Setting up ruby-did-you-mean (1.6.3-2) ... Setting up libfile-dirlist-perl (0.05-3) ... Setting up libfile-homedir-perl (1.006-2) ... Setting up openssl (3.5.1-1) ... Setting up readline-common (8.2-6) ... Setting up ruby-numerizer (0.2.0-3) ... Setting up ruby-xmlrpc (0.3.3-2) ... Setting up libxml2:arm64 (2.12.7+dfsg+really2.9.14-2.1) ... Setting up liburi-perl (5.30-1) ... Setting up libfile-touch-perl (0.12-2) ... Setting up libnet-ssleay-perl:arm64 (1.94-3) ... Setting up automake (1:1.17-4) ... update-alternatives: using /usr/bin/automake-1.17 to provide /usr/bin/automake (automake) in auto mode Setting up libksba8:arm64 (1.6.7-2+b1) ... Setting up pinentry-curses (1.3.1-2) ... Setting up libfile-stripnondeterminism-perl (1.14.1-2) ... Setting up libhttp-date-perl (6.06-1) ... Setting up gettext (0.23.1-2) ... Setting up libgmp-dev:arm64 (2:6.3.0+dfsg-3) ... Setting up libfile-listing-perl (6.16-1) ... Setting up libtool (2.5.4-4) ... Setting up ruby-chronic (0.10.5-3) ... Setting up ruby-tzinfo (2.0.6-1) ... Setting up libnet-http-perl (6.23-1) ... Setting up libdevel-callchecker-perl:arm64 (0.009-2) ... Setting up intltool-debian (0.35.0+20060710.6) ... Setting up dh-autoreconf (20) ... Setting up patchutils (0.4.2-1+b1) ... Setting up ca-certificates (20250419) ... Updating certificates in /etc/ssl/certs... 150 added, 0 removed; done. Setting up libreadline8t64:arm64 (8.2-6) ... Setting up dh-strip-nondeterminism (1.14.1-2) ... Setting up libwww-robotrules-perl (6.02-1) ... Setting up groff-base (1.23.0-9) ... Setting up libhtml-parser-perl:arm64 (3.83-1+b2) ... Setting up gpgconf (2.4.7-21+b3) ... Setting up libpython3.13-stdlib:arm64 (3.13.5-2) ... Setting up libio-socket-ssl-perl (2.089-1) ... Setting up gpg (2.4.7-21+b3) ... Setting up libpython3-stdlib:arm64 (3.13.5-1) ... Setting up libhttp-message-perl (7.00-2) ... Setting up libhttp-negotiate-perl (6.01-2) ... Setting up gpg-agent (2.4.7-21+b3) ... Setting up libhttp-cookies-perl (6.11-1) ... Setting up python3.13 (3.13.5-2) ... Setting up po-debconf (1.0.21+nmu1) ... Setting up libhtml-tree-perl (5.07-3) ... Setting up libparams-classify-perl:arm64 (0.015-2+b4) ... Setting up python3 (3.13.5-1) ... Setting up rubygems-integration (1.19) ... Setting up sopv-gpgv (0.1.4-1) ... update-alternatives: using /usr/bin/sopv-gpgv to provide /usr/bin/sopv (sopv) in auto mode Setting up man-db (2.13.1-1) ... Not building database; man-db/auto-update is not 'true'. Setting up libmodule-runtime-perl (0.018-1) ... Setting up libimport-into-perl (1.002005-2) ... Setting up libmoo-perl (2.005005-1) ... Setting up debhelper (13.24.2) ... Setting up rake (13.2.1-1) ... Setting up liblwp-protocol-https-perl (6.14-1) ... Setting up libwww-perl (6.78-1) ... Setting up libruby3.3:arm64 (3.3.8-2) ... Setting up ruby-activesupport (2:7.2.2.1+dfsg-7) ... Setting up ruby-rubygems (3.6.7-2) ... Setting up devscripts (2.25.15) ... Setting up ruby3.3-dev:arm64 (3.3.8-2) ... Setting up ruby3.3 (3.3.8-2) ... Setting up libruby:arm64 (1:3.3+b1) ... Setting up ruby-eventmachine:arm64 (1.3~pre20220315-df4ab006-5+b2) ... Setting up ruby-raindrops:arm64 (0.20.0-2+b1) ... Setting up ruby-all-dev:arm64 (1:3.3+b1) ... Setting up ruby (1:3.3+b1) ... Setting up ruby-nio4r (2.7.3-1+b2) ... Setting up ruby-rspec-core (3.13.0c0e0m0s1-2) ... Setting up ruby-tilt (2.4.0-3) ... Setting up ruby-kgio (2.11.2-2+b9) ... Setting up ruby-diff-lcs (1.5.1-1) ... Setting up puma (6.6.0-4) ... Setting up ruby-delorean (2.1.0-2.1) ... Setting up ruby-rack (3.1.16-0.1) ... Setting up gem2deb-test-runner (2.2.5) ... Setting up ruby-formatador (1.1.0-1) ... Setting up unicorn (6.1.0+git.20250131.1370f52-1+b1) ... Setting up ruby-rspec-expectations (3.13.0c0e0m0s1-2) ... Setting up ruby-rspec-mocks (3.13.0c0e0m0s1-2) ... Setting up ruby-shindo (0.3.10-2) ... Setting up gem2deb (2.2.5) ... Setting up ruby-rack-session (2.1.1-0.1) ... Setting up ruby-rack-protection (4.1.1-5) ... Setting up ruby-rackup (2.1.0-4) ... Setting up ruby-rspec (3.13.0c0e0m0s1-2) ... Setting up ruby-sinatra (4.1.1-5) ... Setting up ruby-sinatra-contrib (4.1.1-5) ... Processing triggers for libc-bin (2.41-11) ... Processing triggers for ca-certificates (20250419) ... Updating certificates in /etc/ssl/certs... 0 added, 0 removed; done. Running hooks in /etc/ca-certificates/update.d... done. Reading package lists... Building dependency tree... Reading state information... Reading extended state information... Initializing package states... Writing extended state information... Building tag database... -> Finished parsing the build-deps I: Building the package I: Running cd /build/reproducible-path/ruby-excon-0.112.0/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-genchanges -S > ../ruby-excon_0.112.0-4_source.changes dpkg-buildpackage: info: source package ruby-excon dpkg-buildpackage: info: source version 0.112.0-4 dpkg-buildpackage: info: source distribution unstable dpkg-buildpackage: info: source changed by Sruthi Chandran dpkg-source --before-build . dpkg-buildpackage: info: host architecture arm64 debian/rules clean dh clean --buildsystem=ruby --with ruby dh_auto_clean -O--buildsystem=ruby dh_ruby --clean dh_autoreconf_clean -O--buildsystem=ruby dh_clean -O--buildsystem=ruby debian/rules binary dh binary --buildsystem=ruby --with ruby dh_update_autotools_config -O--buildsystem=ruby dh_autoreconf -O--buildsystem=ruby dh_auto_configure -O--buildsystem=ruby dh_ruby --configure dh_auto_build -O--buildsystem=ruby dh_ruby --build dh_auto_test -O--buildsystem=ruby dh_ruby --test create-stamp debian/debhelper-build-stamp dh_testroot -O--buildsystem=ruby dh_prep -O--buildsystem=ruby dh_auto_install --destdir=debian/ruby-excon/ -O--buildsystem=ruby dh_ruby --install /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon ┌──────────────────────────────────────────────────────────────────────────────┐ │ ruby-excon: Installing files and building extensions for ruby3.3 │ └──────────────────────────────────────────────────────────────────────────────┘ /usr/bin/ruby3.3 -S gem build --config-file /dev/null --verbose /tmp/d20250805-3966589-rxugdb/gemspec WARNING: open-ended dependency on rspec (>= 3.5.0, development) is not recommended if rspec is semantically versioned, use: add_development_dependency "rspec", "~> 3.5", ">= 3.5.0" WARNING: open-ended dependency on activesupport (>= 0, development) is not recommended use a bounded requirement, such as "~> x.y" WARNING: open-ended dependency on delorean (>= 0, development) is not recommended use a bounded requirement, such as "~> x.y" WARNING: open-ended dependency on eventmachine (>= 1.0.4, development) is not recommended if eventmachine is semantically versioned, use: add_development_dependency "eventmachine", "~> 1.0", ">= 1.0.4" WARNING: open-ended dependency on open4 (>= 0, development) is not recommended use a bounded requirement, such as "~> x.y" WARNING: open-ended dependency on rake (>= 0, development) is not recommended use a bounded requirement, such as "~> x.y" WARNING: open-ended dependency on shindo (>= 0, development) is not recommended use a bounded requirement, such as "~> x.y" WARNING: open-ended dependency on sinatra (>= 0, development) is not recommended use a bounded requirement, such as "~> x.y" WARNING: open-ended dependency on sinatra-contrib (>= 0, development) is not recommended use a bounded requirement, such as "~> x.y" WARNING: open-ended dependency on json (>= 1.8.5, development) is not recommended if json is semantically versioned, use: add_development_dependency "json", "~> 1.8", ">= 1.8.5" WARNING: open-ended dependency on puma (>= 0, development) is not recommended use a bounded requirement, such as "~> x.y" WARNING: open-ended dependency on webrick (>= 0, development) is not recommended use a bounded requirement, such as "~> x.y" WARNING: You have specified the uri: https://github.com/excon/excon for all of the following keys: homepage_uri source_code_uri Only the first one will be shown on rubygems.org WARNING: See https://guides.rubygems.org/specification-reference/ for help Successfully built RubyGem Name: excon Version: 0.112.0 File: excon-0.112.0.gem /usr/bin/ruby3.3 -S gem install --config-file /dev/null --verbose --local --verbose --no-document --ignore-dependencies --install-dir debian/ruby-excon/usr/share/rubygems-integration/all /tmp/d20250805-3966589-rxugdb/excon-0.112.0.gem /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/data/cacert.pem /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/connection.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/constants.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/error.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/extensions/uri.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/headers.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/instrumentors/logging_instrumentor.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/instrumentors/standard_instrumentor.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/middlewares/base.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/middlewares/capture_cookies.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/middlewares/decompress.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/middlewares/escape_path.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/middlewares/expects.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/middlewares/idempotent.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/middlewares/instrumentor.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/middlewares/mock.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/middlewares/redirect_follower.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/middlewares/response_parser.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/pretty_printer.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/response.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/socket.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/ssl_socket.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/test/plugin/server/exec.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/test/plugin/server/puma.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/test/plugin/server/unicorn.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/test/plugin/server/webrick.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/test/server.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/unix_socket.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/utils.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/version.rb Successfully installed excon-0.112.0 1 gem installed cd debian/ruby-excon/usr/share/rubygems-integration/all rm -rf bin rm -rf build_info rm -rf cache rm -rf doc rm -rf extensions rmdir plugins cd gems/excon-0.112.0 rm -f chmod 644 lib/excon/connection.rb lib/excon/constants.rb lib/excon/error.rb lib/excon/extensions/uri.rb lib/excon/headers.rb lib/excon/instrumentors/logging_instrumentor.rb lib/excon/instrumentors/standard_instrumentor.rb lib/excon/middlewares/base.rb lib/excon/middlewares/capture_cookies.rb lib/excon/middlewares/decompress.rb lib/excon/middlewares/escape_path.rb lib/excon/middlewares/expects.rb lib/excon/middlewares/idempotent.rb lib/excon/middlewares/instrumentor.rb lib/excon/middlewares/mock.rb lib/excon/middlewares/redirect_follower.rb lib/excon/middlewares/response_parser.rb lib/excon/pretty_printer.rb lib/excon/response.rb lib/excon/socket.rb lib/excon/ssl_socket.rb lib/excon/test/plugin/server/exec.rb lib/excon/test/plugin/server/puma.rb lib/excon/test/plugin/server/unicorn.rb lib/excon/test/plugin/server/webrick.rb lib/excon/test/server.rb lib/excon/unix_socket.rb lib/excon/utils.rb lib/excon/version.rb lib/excon.rb find lib/ -type d -empty -delete cd - cd - /usr/bin/ruby3.3 /usr/bin/gem2deb-test-runner ┌──────────────────────────────────────────────────────────────────────────────┐ │ Checking Rubygems dependency resolution on ruby3.3 │ └──────────────────────────────────────────────────────────────────────────────┘ RUBYLIB=. GEM_PATH=/build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all:/build/reproducible-path/ruby-excon-0.112.0/debian/.debhelper/generated/_source/home/.local/share/gem/ruby/3.3.0:/var/lib/gems/3.3.0:/usr/local/lib/ruby/gems/3.3.0:/usr/lib/ruby/gems/3.3.0:/usr/lib/aarch64-linux-gnu/ruby/gems/3.3.0:/usr/share/rubygems-integration/3.3.0:/usr/share/rubygems-integration/all:/usr/lib/aarch64-linux-gnu/rubygems-integration/3.3.0 ruby3.3 -e gem\ \"excon\" ┌──────────────────────────────────────────────────────────────────────────────┐ │ Run tests for ruby3.3 from debian/ruby-tests.rake │ └──────────────────────────────────────────────────────────────────────────────┘ RUBYLIB=. GEM_PATH=/build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all:/build/reproducible-path/ruby-excon-0.112.0/debian/.debhelper/generated/_source/home/.local/share/gem/ruby/3.3.0:/var/lib/gems/3.3.0:/usr/local/lib/ruby/gems/3.3.0:/usr/lib/ruby/gems/3.3.0:/usr/lib/aarch64-linux-gnu/ruby/gems/3.3.0:/usr/share/rubygems-integration/3.3.0:/usr/share/rubygems-integration/all:/usr/lib/aarch64-linux-gnu/rubygems-integration/3.3.0 ruby3.3 -S rake --rakelibdir /gem2deb-nonexistent -f debian/ruby-tests.rake sh: 1: git: not found /usr/bin/ruby3.3 -S shindo Excon bad server interaction header splitting prevents key splitting + raises Excon::Error::InvalidHeaderKey prevents value splitting + raises Excon::Error::InvalidHeaderValue bad server: causes EOFError with no content length and no chunking without a block response.body + returns "hello" with a block body from chunks + returns "hello" eof server: causes EOFError request + raises Excon::Error::Socket Excon basics + returns true nonblock => true, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 explicit uri passed to connection GET /content-length/100 + returns 200 Excon streaming basics http + returns true simple blocking request on streaming endpoint + returns ["Hellostreamyworld", "response time ok"] simple blocking request on streaming endpoint with fixed length + returns ["Hellostreamyworld", "response time ok"] simple request with response_block on streaming endpoint + returns [["Hello", "streamy", "world"], "response times ok"] simple request with response_block on streaming endpoint with fixed length + returns [["Hello", "streamy", "world"], "response times ok"] https + returns true simple blocking request on streaming endpoint + returns ["Hellostreamyworld", "response time ok"] simple blocking request on streaming endpoint with fixed length + returns ["Hellostreamyworld", "response time ok"] simple request with response_block on streaming endpoint + returns [["Hello", "streamy", "world"], "response times ok"] simple request with response_block on streaming endpoint with fixed length + returns [["Hello", "streamy", "world"], "response times ok"] Excon basics (Basic Auth Pass) + returns true nonblock => true, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 with frozen args + returns 200 with user/pass on request + returns 200 with user/pass on connection and request + returns 200 Excon basics (Basic Auth Fail) response.status for correct user, no password + returns 401 response.status for correct user, wrong password + returns 401 response.status for wrong user, correct password + returns 401 Excon basics (ssl) + returns true nonblock => true, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 [2025-08-05 15:49:24] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' [2025-08-05 15:49:25] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' Excon basics verify_hostname (ssl) + returns true response.status + returns 200 Excon ssl verify peer (ssl) + returns true response.status + returns 200 + returns true response.status + returns 200 + returns true response.status + returns 200 Excon ssl verify peer (ssl cert store) + returns true response.status + returns 200 Excon basics (ssl file) (focus) GET /content-length/100 + raises Excon::Error::Socket + returns true nonblock => true, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 [2025-08-05 15:49:35] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' [2025-08-05 15:49:36] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' [2025-08-05 15:49:36] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' [2025-08-05 15:49:36] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' [2025-08-05 15:49:39] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' Excon basics (ssl chain) (focus) GET /content-length/100 + raises Excon::Error::Socket + returns true nonblock => true, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 [2025-08-05 15:49:44] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' [2025-08-05 15:49:44] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' [2025-08-05 15:49:46] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' [2025-08-05 15:49:47] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' Excon basics (ssl file paths) (focus) GET /content-length/100 + raises Excon::Error::Socket + returns true nonblock => true, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 [2025-08-05 15:49:55] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' [2025-08-05 15:49:55] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' Excon basics (ssl string) (focus) + returns true nonblock => true, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 [2025-08-05 15:50:01] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' Excon basics (Unix socket) + returns true nonblock => true, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" # Time.parse(response.headers['Date']).is_a?(Time) # !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip # returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" # Time.parse(response.headers['Date']).is_a?(Time) # !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip # returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" # Time.parse(response.headers['Date']).is_a?(Time) # !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip # returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" # Time.parse(response.headers['Date']).is_a?(Time) # !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip # returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 explicit uri passed to connection GET /content-length/100 + returns 200 http Host header is empty GET /headers + returns "" Excon basics (reusable local port) (localportreuse) has a local port + returns true local port can be re-bound # returns "xxxxxxxxxx" Excon Connection #socket connects, sets data[:remote_ip] + returns "127.0.0.1" persistent connections + successful uninterrupted request + resets connection after interrupt + fork safety inspect redaction + authorization/proxy-authorization headers concealed for user & pass + password param concealed for user & pass + password param not mutated for user & pass + proxy password param concealed for proxy: user & pass + proxy password param not mutated for proxy: user & pass + authorization/proxy-authorization headers concealed for email & pass + password param concealed for email & pass + password param not mutated for email & pass + proxy password param concealed for proxy: email & pass + proxy password param not mutated for proxy: email & pass + authorization/proxy-authorization headers concealed for user no pass + authorization/proxy-authorization headers concealed for pass no user + password param concealed for pass no user + password param not mutated for pass no user + proxy password param concealed for proxy: pass no user + proxy password param not mutated for proxy: pass no user HTTPStatusError request/response debugging Excon::Error knows about pertinent errors new returns an Error + returns true new raises errors for bad URIs + returns true new raises errors for bad paths + returns true can raise standard error and catch standard error + returns true can raise legacy errors and catch legacy errors + returns true can raise standard error and catch legacy errors + returns true can raise with status_error() and catch with standard error + returns true can raise with status_error() and catch with legacy error + returns true can raise with legacy status_error() and catch with legacy + returns true can raise with legacy status_error() and catch with standard + returns true message does not include response or response info + returns true message includes only request info + returns true message includes only response info + returns true message include request and response info + returns true Excon response header support Excon::Headers storage stores and retrieves as received + returns "expected" enumerates keys as received contains Exact-Case + returns true contains Another-Fixture + returns true supports case-insensitive access + returns "expected" but still returns nil for missing keys + returns nil Hash methods that should support case-insensitive access #assoc + returns ["exact-case", "expected"] #delete with just a key + returns "yes" with a proc + returns "called with notpresent" #fetch when present + returns "expected" with a default value + returns "default" with a default proc + returns "got missing" #has_key? when present + returns true when absent + returns false #values_at all present + returns ["expected", "another"] some missing + returns ["expected", nil] Response#get_header with variable header capitalization response.get_header("mixedcase-header") + returns "MixedCase" response.get_header("uppercase-header") + returns "UPPERCASE" response.get_header("lowercase-header") + returns "lowercase" when provided key capitalization varies response.get_header("MIXEDCASE-HEADER") + returns "MixedCase" response.get_header("MiXeDcAsE-hEaDeR") + returns "MixedCase" when header is unavailable response.get_header("missing") + returns nil logging instrumentor connection logger + returns true connection logger with query as hash + returns true Excon middleware succeeds without defining valid_parameter_keys Excon support for middlewares that return canned responses does not mutate the canned response body + returns "canned" yields non-mutated body to response_block + returns "canned" Excon redirecting with cookie preserved second request will send cookies set by the first + returns "ok" second request will send multiple cookies set by the first + returns "ok" runs normally when there are no cookies set + returns "ok" Excon Decompress Middleware gzip response body decompressed + returns "hello world" server sent content-encoding + returns "gzip" removes processed encoding from header + returns "" empty response body + returns "" deflate response body decompressed + returns "hello world" server sent content-encoding + returns "deflate" removes processed encoding from header + returns "" deflate-raw response body decompressed + returns "hello world" server sent content-encoding + returns "deflate" removes processed encoding from header + returns "" with pre-encoding server sent content-encoding + returns "other, gzip" processed encoding removed from header + returns "other" response body decompressed + returns "hello world" with post-encoding server sent content-encoding + returns "gzip, other" unprocessed since last applied is unknown + returns "gzip, other" response body still compressed + returns "hello world" with a :response_block server sent content-encoding + returns "gzip" unprocessed since :response_block was used + returns "gzip" :response_block passed unprocessed data + returns "hello world" adds Accept-Encoding if needed without a :response_block + returns "deflate, gzip" with a :response_block + returns nil Excon Decompress Middleware encoded uri passed to connection GET /echo%20dirty + returns 200 unencoded uri passed to connection GET /echo dirty + returns 200 Excon request idempotencey Non-idempotent call with an erroring socket + raises Excon::Error::Socket Idempotent request with socket erroring first 3 times + returns 200 Idempotent request with socket erroring first 5 times + raises Excon::Error::Socket Lowered retry limit with socket erroring first time + returns 200 Lowered retry limit with socket erroring first 3 times + raises Excon::Error::Socket Raised retry limit with socket erroring first 5 times + returns 200 Raised retry limit with socket erroring first 9 times + raises Excon::Error::Socket Retry limit in constructor with socket erroring first 5 times + returns 200 Retry limit and sleep in constructor with socket erroring first 2 times + returns 200 Retry limit and sleep in constructor with socket erroring first 2 times + raises Excon::Error::Socket Idempotent request with custom error first 3 times + returns 200 Idempotent request with custom error first 5 times + raises RuntimeError Overriding default retry_errors + raises Excon::Error::Socket request_block rewound + returns true response_block rewound + returns true Excon instrumentation basic notification + returns ["excon.request", "excon.response"] captures scheme, host, port, and path + returns [:host, :path, :port, :scheme] params in request overwrite those in constructor + returns "/cheezburger" notify on retry + returns 3 notify on error + raises Excon::Error::Socket + returns true filtering + raises Excon::Error::Socket + returns ["excon.request", "excon.error"] more filtering + raises Excon::Error::Socket + returns ["excon.retry", "excon.retry", "excon.retry"] indicates duration + returns true standard instrumentor success + raises Excon::Error::Socket + returns ["excon.request", "excon.retry", "excon.retry", "excon.retry", "excon.error"] authorization header REDACT + raises Excon::Error::Socket + does not appear in response + does not mutate Authorization value password REDACT + raises Excon::Error::Socket + does not appear in response + does not mutate password value proxy password REDACT + raises Excon::Error::Socket + does not appear in response + does not mutate password value use our own instrumentor + raises Excon::Error::Socket + returns ["excon.request", "excon.retry", "excon.retry", "excon.retry", "excon.error"] always passes the block + returns ["excon.request", "excon.response"] does not generate events when not provided + returns 0 allows setting the prefix + raises Excon::Error::Socket + returns ["gug.request", "gug.retry", "gug.retry", "gug.retry", "gug.error"] allows setting the prefix when not idempotent + raises Excon::Error::Socket + returns ["gug.request", "gug.error"] works unmocked + returns ["excon.request", "excon.response"] Excon stubs missing stub + raises Excon::Error::StubNotFound stub({}) + raises ArgumentError stub({}, {}) {} + raises ArgumentError stub({:method => :get}, {:body => 'body', :status => 200}) response.body + returns "body" response.headers + returns {} response.status + returns 200 response_block yields body + returns "body" response.body empty with response_block + returns "" stub({:path => %r{/tests/(S+)}}, {:body => $1, :status => 200}) response.body + returns "test" response.headers + returns {} response.status + returns 200 stub({:body => 'body', :method => :get}) {|params| {:body => params[:body], :headers => params[:headers], :status => 200}} response.body + returns "body" response.headers + returns {"Accept"=>"*/*", "Host"=>"127.0.0.1:9292", "User-Agent"=>"excon/0.112.0"} response.status + returns 200 response_block yields body + returns "body" response.body empty with response_block + returns "" stub({:body => File.open(...), :method => :get}, { :status => 200 }) response.status + returns 200 invalid stub response + raises Excon::Error::InvalidStub mismatched stub + raises Excon::Error::StubNotFound allow mismatched stub + returns 200 stub({}, {:body => 'x' * (Excon::DEFAULT_CHUNK_SIZE + 1)}) + response_block yields body response.body empty with response_block + returns "" stub({:url => 'https://user:pass@foo.bar.com:9999/baz?quux=true'}, {:status => 200}) + get(:expects => 200) stub({}, {:status => 404, :body => 'Not Found'} request(:expects => 200, :method => :get, :path => '/') + raises Excon::Error::NotFound Expects exception should contain response object + returns Excon::Response + request(:expects => 200, :method => :get, :path => '/') with block does not invoke the block since it raises an error stub_for({}) stub_for({}) + returns [{}, {}] unstub({}) unstub({}) + returns [{}, {}] request(:method => :get) + raises Excon::Error::StubNotFound unstub({path: %r{/path}}) unstub({path: %r{/path}}) + returns [{:path=>/\/path/, :captures=>{:headers=>{}}}, {}] unstub non-existent stub unstub({}) + returns nil global stubs get on a different thread + returns "2" get on main thread + returns "2" thread-local stubs get on a different thread + returns "2" get on main thread + returns "1" Excon redirector support request(:method => :get, :path => '/old').body + returns "new" Excon redirector support with redirect loop request(:method => :get, :path => '/old') + raises Excon::Error::TooManyRedirects Excon redirect support for relative Location headers request(:method => :get, :path => '/old').body + returns "new" Excon redirect support for relative Location headers with dot segments request(:method => :get, :path => '/foo/baz/').body + returns "/foo/bar/" Excon redirecting post request request not have content-length and body + returns "ok" Pipelined Requests with default :persistent => true + connection is persistent with default :persistent => false + connection is persistent per call to #requests Excon proxy support proxy configuration no proxy connection.data[:proxy] + returns nil empty proxy connection.data[:proxy] + returns nil with fully-specified proxy: https://myproxy.net:8080 connection.data[:proxy][:host] + returns "myproxy.net" connection.data[:proxy][:port] + returns 8080 connection.data[:proxy][:scheme] + returns "https" with fully-specified Unix socket proxy: unix:/// connection.data[:proxy][:host] + returns nil connection.data[:proxy][:port] + returns nil connection.data[:proxy][:scheme] + returns "unix" connection.data[:proxy][:path] + returns "/tmp/myproxy.sock" with complete proxy config from the environment lowercase an http connection connection.data[:proxy][:host] + returns "myproxy" connection.data[:proxy][:port] + returns 8080 connection.data[:proxy][:scheme] + returns "http" with disable_proxy set connection.data[:proxy] + returns nil an https connection connection.data[:proxy][:host] + returns "mysecureproxy" connection.data[:proxy][:port] + returns 8081 connection.data[:proxy][:scheme] + returns "http" with disable_proxy set connection.data[:proxy] + returns nil http proxy from the environment overrides config connection.data[:proxy][:host] + returns "myproxy" connection.data[:proxy][:port] + returns 8080 an http connection in no_proxy connection.data[:proxy] + returns nil an http connection not completely matching no_proxy connection.data[:proxy][:host] + returns "myproxy" an http connection with subdomain in no_proxy connection.data[:proxy] + returns nil uppercase an http connection connection.data[:proxy][:host] + returns "myproxy" connection.data[:proxy][:port] + returns 8080 connection.data[:proxy][:scheme] + returns "http" with disable_proxy set connection.data[:proxy] + returns nil an https connection connection.data[:proxy][:host] + returns "mysecureproxy" connection.data[:proxy][:port] + returns 8081 connection.data[:proxy][:scheme] + returns "http" with disable_proxy set connection.data[:proxy] + returns nil http proxy from the environment overrides config connection.data[:proxy][:host] + returns "myproxy" connection.data[:proxy][:port] + returns 8080 an http connection in no_proxy connection.data[:proxy] + returns nil an http connection not completely matching no_proxy connection.data[:proxy][:host] + returns "myproxy" an http connection with subdomain in no_proxy connection.data[:proxy] + returns nil with only http_proxy config from the environment an https connection connection.data[:proxy][:host] + returns "myproxy" connection.data[:proxy][:port] + returns 8080 connection.data[:proxy][:scheme] + returns "http" with a unix socket proxy config from the environment an https connection connection.data[:proxy][:host] + returns nil connection.data[:proxy][:port] + returns nil connection.data[:proxy][:scheme] + returns "unix" connection.data[:proxy][:path] + returns "/tmp/myproxy.sock" http proxying: http://foo.com:8080 response.status + returns 200 sent Request URI + returns "http://foo.com:8080/bar?alpha=kappa" sent Sent-Host header + returns "foo.com:8080" sent Proxy-Connection header + returns "Keep-Alive" response.body (proxied content) + returns "proxied content" http proxying: http://user:pass@foo.com:8080 response.status + returns 200 sent Request URI + returns "http://foo.com:8080/bar?alpha=kappa" sent Host header + returns "foo.com:8080" sent Proxy-Connection header + returns "Keep-Alive" response.body (proxied content) + returns "proxied content" http proxying over unix socket: http://foo.com:8080 response.status + returns 200 sent Sent-Host header + returns "foo.com:8080" sent Proxy-Connection header + returns "Keep-Alive" response.body (proxied content) + returns "proxied content" Excon query string variants :query => {:foo => 'bar'} query string sent + returns "foo=bar" :query => {:foo => nil} query string sent + returns "foo" :query => {:foo => 'bar', :me => nil} + query string sent includes 'foo=bar' + query string sent includes 'me' :query => {:foo => 'bar', :me => 'too'} + query string sent includes 'foo=bar' + query string sent includes 'me=too' :query => {'foo[]' => ['bar', 'baz'], :me => 'too'} + query string sent includes 'foo%5B%5D=bar' + query string sent includes 'foo%5B%5D=baz' + query string sent includes 'me=too' :query => {'foo%=#' => 'bar%=#'} query string sent + returns "foo%25%3D%23=bar%25%3D%23" :query => {'foo%=#' => nil} query string sent + returns "foo%25%3D%23" Excon request methods empty headers sent + Excon.post header order host is the first sent header by default + returns "host: localhost:9292" Excon request methods one-offs Excon.get + returns "GET" Excon.post + returns "POST" Excon.delete + returns "DELETE" with a connection object connection.get + returns "GET" connection.post + returns "POST" connection.delete + returns "DELETE" not modifies path argument + returns "path" Request Tests persistent connections with default :persistent => true, 127.0.0.1:9292 + uses a persistent connection + :persistent => false resets connection with default :persistent => false, 127.0.0.1:9292 + does not use a persistent connection + :persistent => true enables persistence with default :persistent => true, [::1]:9293 + uses a persistent connection + :persistent => false resets connection with default :persistent => false, [::1]:9293 + does not use a persistent connection + :persistent => true enables persistence Excon Response Parsing responses with chunked transfer-encoding simple response + returns "hello world" with :response_block simple response + returns [["hello ", nil, nil], ["world", nil, nil]] simple response has empty body + returns "" with expected response status + returns [["hello ", nil, nil], ["world", nil, nil]] with unexpected response status + returns "hello world" merges trailers into headers + returns "one, two, three, four, five, six" removes 'chunked' from Transfer-Encoding + returns nil responses with content-length simple response + returns "hello world" with :response_block simple response + returns [["hello", 6, 11], [" worl", 1, 11], ["d", 0, 11]] simple response has empty body + returns "" with expected response status + returns [["hello", 6, 11], [" worl", 1, 11], ["d", 0, 11]] with unexpected response status + returns "hello world" responses with unknown length simple response + returns "hello world" with :response_block simple response + returns [["hello", nil, nil], [" worl", nil, nil], ["d", nil, nil]] simple response has empty body + returns "" with expected response status + returns [["hello", nil, nil], [" worl", nil, nil], ["d", nil, nil]] with unexpected response status + returns "hello world" cookies parses cookies into array + returns ["one, two", "three, four"] header continuation proper continuation + returns "one, two, three, four, five, six" malformed header + raises Excon::Error::Socket malformed header continuation + raises Excon::Error::Socket status line parsing proper status code + returns 404 proper reason phrase + returns "Not Found" socket chunk_size: read_nonblock readline nonblock is efficient + returns ["one\n", 1, [8, "EOF"]] readline nonblock works sequentially + returns [["one\n", "two\n"], 1, [8, "EOF"]] readline nonblock can handle partial reads + returns [["one\n", "two\n"], 2, [5, "EAGAIN", 3, "EOF"]] readline nonblock before read + returns [["one\n", "two\n"], 2, [8, "EOF"]] read_nonblock does not EOF early + returns [["one", "two"], 2, [3, "EAGAIN", 3, "EOF"]] chunk_size: 512 read_nonblock readline nonblock is efficient + returns ["one\n", 1, [8, "EOF"]] readline nonblock works sequentially + returns [["one\n", "two\n"], 1, [8, "EOF"]] readline nonblock can handle partial reads + returns [["one\n", "two\n"], 2, [5, "EAGAIN", 3, "EOF"]] readline nonblock before read + returns [["one\n", "two\n"], 2, [8, "EOF"]] read_nonblock does not EOF early + returns [["one", "two"], 2, [3, "EAGAIN", 3, "EOF"]] Excon thread safety thread_safe_sockets configuration thread_safe_sockets default + returns true with thread_safe_sockets set false + returns false + long_thread + short_thread read should timeout nonblock => false hits read_timeout + raises Excon::Error::Timeout nonblock => true hits read_timeout + raises Excon::Error::Timeout Excon::Utils #connection_uri using UNIX scheme + returns "unix:///tmp/some.sock" using HTTP scheme with default port + returns "http://foo.com:80" without default port + returns "http://foo.com" #request_uri using UNIX scheme without query + returns "unix:///tmp/some.sock/some/path" with query + returns "unix:///tmp/some.sock/some/path?bar=that&foo=this" using HTTP scheme without query + returns "http://foo.com:80/some/path" with query + returns "http://foo.com:80/some/path?bar=that&foo=this" #escape_uri + returns "/hello%20excon" #unescape_uri + returns "/hello excon" #unescape_form + returns "message=We love excon!" #split_header_value + returns ["value"] #split_header_value + returns ["value1", "value2"] #split_header_value + returns ["text/html;q=0.5", "application/json; version=1"] #split_header_value + returns ["foo/bar;key=\"A,B,C\""] #split_header_value + returns [] 13 pending and 1457 succeeded in 65.07714783657006 seconds /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 Excon::Error #status_errors .keys returns the pertinent HTTP error numbers #new returns an Excon::Error raises errors for bad URIs raises errors for bad paths when remaining backwards compatible #new should raise standard error and catch standard error should raise legacy errors and catch legacy errors should raise standard error and catch legacy errors #status_error should raise with status_error() and catch with standard error should raise with status_error() and catch with legacy error should raise with legacy status_error() and catch with standard when exceptions are rescued when :debug_request and :debug_response are switched off exception message does not include response or response info when :debug_request and :debug_response are switched on exception message includes request and response info when only :debug_request is turned on exception message includes only request info when only :debug_response is turned on exception message includes only response info Excon::Test::Server when the web server is webrick it should behave like a excon test server returns an instance starts the server stops the server when the web server is unicorn bound to a tcp socket it should behave like a excon test server returns an instance starts the server stops the server bound to a unix socket it should behave like a excon test server returns an instance starts the server stops the server when the web server is puma it should behave like a excon test server returns an instance starts the server stops the server when the web server is a executable it should behave like a excon test server returns an instance starts the server stops the server Excon has a version number Excon::Connection when an explicit uri is passed .new returns an instance when :method is :get and :path is /content-length/100 #request returns an Excon::Response Excon::Response #status returns 200 when nonblock is true and persistent is false when :method is get and :path is /content-length/100 #request returns an Excon::Response Excon::Response #status returns 200 #status returns 200 #headers ["Content-Length"] returns 100 ["Content-Type"] returns "text/html;charset=utf-8" ['Date'] returns a valid date ['Server'] matches /^WEBrick/ ['Custom'] returns Foo: bar #remote_ip returns 127.0.0.1 when tcp_nodelay is true #request returns an Excon::Response Excon::Response #body .status #returns 200 when utilizing deprecated block usage #request yields with a chunk, remaining length, and total length completes with expected data when utilizing response_block usage #request yields a chunk, remaining length, and total_length completes with expected data when method is :post when :path is /body-sink when a body parameter is supplied returns an Excon::Response Excon::Response #body equals "5000000" when the body parameter is an empty string returns an Excon::Response Excon::Response #body equals "0" when :path is /echo when a file handle is the body paramter Excon::Response #body equals "x" * 100 + "\n" when a string is the body paramter does not change the enconding of the body without request_block Excon::Response #body equals 'x' * 100) when a request_block paramter is supplied Excon::Response #body equals'x' * 100 when a multi-byte string is the body paramter Excon::Response #body properly concatenates request+headers and body when nonblock is true and persistent is true when :method is get and :path is /content-length/100 #request returns an Excon::Response Excon::Response #status returns 200 #status returns 200 #headers ["Content-Length"] returns 100 ["Content-Type"] returns "text/html;charset=utf-8" ['Date'] returns a valid date ['Server'] matches /^WEBrick/ ['Custom'] returns Foo: bar #remote_ip returns 127.0.0.1 when tcp_nodelay is true #request returns an Excon::Response Excon::Response #body .status #returns 200 when utilizing deprecated block usage #request yields with a chunk, remaining length, and total length completes with expected data when utilizing response_block usage #request yields a chunk, remaining length, and total_length completes with expected data when method is :post when :path is /body-sink when a body parameter is supplied returns an Excon::Response Excon::Response #body equals "5000000" when the body parameter is an empty string returns an Excon::Response Excon::Response #body equals "0" when :path is /echo when a file handle is the body paramter Excon::Response #body equals "x" * 100 + "\n" when a string is the body paramter does not change the enconding of the body without request_block Excon::Response #body equals 'x' * 100) when a request_block paramter is supplied Excon::Response #body equals'x' * 100 when a multi-byte string is the body paramter Excon::Response #body properly concatenates request+headers and body when nonblock is false and persistent is true when :method is get and :path is /content-length/100 #request returns an Excon::Response Excon::Response #status returns 200 #status returns 200 #headers ["Content-Length"] returns 100 ["Content-Type"] returns "text/html;charset=utf-8" ['Date'] returns a valid date ['Server'] matches /^WEBrick/ ['Custom'] returns Foo: bar #remote_ip returns 127.0.0.1 when tcp_nodelay is true #request returns an Excon::Response Excon::Response #body .status #returns 200 when utilizing deprecated block usage #request yields with a chunk, remaining length, and total length completes with expected data when utilizing response_block usage #request yields a chunk, remaining length, and total_length completes with expected data when method is :post when :path is /body-sink when a body parameter is supplied returns an Excon::Response Excon::Response #body equals "5000000" when the body parameter is an empty string returns an Excon::Response Excon::Response #body equals "0" when :path is /echo when a file handle is the body paramter Excon::Response #body equals "x" * 100 + "\n" when a string is the body paramter does not change the enconding of the body without request_block Excon::Response #body equals 'x' * 100) when a request_block paramter is supplied Excon::Response #body equals'x' * 100 when a multi-byte string is the body paramter Excon::Response #body properly concatenates request+headers and body when nonblock is false and persistent is false when :method is get and :path is /content-length/100 #request returns an Excon::Response Excon::Response #status returns 200 #status returns 200 #headers ["Content-Length"] returns 100 ["Content-Type"] returns "text/html;charset=utf-8" ['Date'] returns a valid date ['Server'] matches /^WEBrick/ ['Custom'] returns Foo: bar #remote_ip returns 127.0.0.1 when tcp_nodelay is true #request returns an Excon::Response Excon::Response #body .status #returns 200 when utilizing deprecated block usage #request yields with a chunk, remaining length, and total length completes with expected data when utilizing response_block usage #request yields a chunk, remaining length, and total_length completes with expected data when method is :post when :path is /body-sink when a body parameter is supplied returns an Excon::Response Excon::Response #body equals "5000000" when the body parameter is an empty string returns an Excon::Response Excon::Response #body equals "0" when :path is /echo when a file handle is the body paramter Excon::Response #body equals "x" * 100 + "\n" when a string is the body paramter does not change the enconding of the body without request_block Excon::Response #body equals 'x' * 100) when a request_block paramter is supplied Excon::Response #body equals'x' * 100 when a multi-byte string is the body paramter Excon::Response #body properly concatenates request+headers and body Excon::Socket passes the dns_timeouts to Resolv::DNS::Config (PENDING: Temporarily skipped with xit) when the DNS server is unreachable returns a Excon::Error::Socket Excon when dispatching requests to a server that does not supply response headers when no block is given should rescue from an EOFError and return response when a block is given should rescue from EOFError and return response to a server that prematurely aborts the request with no response should raise an EOFError Excon::Socket resolv_resolver config reaches Resolv::DNS::Config (PENDING: Temporarily skipped with xit) when the DNS server is unreachable returns a Excon::Error::Socket Excon::Connection blocking connection when timeout is not set does not error when timeout is not triggered does not error when timeout is triggered does not raise non-blocking connection when timeout is not set does not error when timeout is not triggered does not error when timeout is triggered returns a request Excon::Error::Timeout when read timeout is triggered returns a read Excon::Error::Timeout Excon::Connection when speaking to a UNIX socket via Excon.new accepts the unix:/ URL Host header handling sends an empty Host= by default doesn't overwrite an explicit Host header Excon::Connection validating parameters with default middleware Connection.new warns on invalid parameter keys Connection#request warns on invalid parameter keys with custom middleware at instantiation Connection.new accepts parameters that are valid for the provided middleware Connection.new warns on parameters that are not valid for the provided middleware Connection#request accepts parameters that are valid for the provided middleware Connection#request warns on parameters that are not valid for the provided middleware with custom middleware at request time Connection#request accepts parameters that are valid for the provided middleware Connection#request warns on parameters that are not valid for the request middleware Connection#request warns on parameters from instantiation that are not valid for the request middleware Pending: (Failures listed here are expected and do not affect your suite's status) 1) Excon::Socket passes the dns_timeouts to Resolv::DNS::Config # Temporarily skipped with xit # ./spec/requests/dns_timeout_spec.rb:10 2) Excon::Socket resolv_resolver config reaches Resolv::DNS::Config # Temporarily skipped with xit # ./spec/requests/resolv_resolver_spec.rb:14 Finished in 5.87 seconds (files took 0.29035 seconds to load) 155 examples, 0 failures, 2 pending ┌──────────────────────────────────────────────────────────────────────────────┐ │ dh_ruby --install finished │ └──────────────────────────────────────────────────────────────────────────────┘ dh_installdocs -O--buildsystem=ruby dh_ruby_fixdocs -O--buildsystem=ruby dh_installchangelogs -O--buildsystem=ruby dh_installsystemduser -O--buildsystem=ruby dh_perl -O--buildsystem=ruby dh_link -O--buildsystem=ruby dh_strip_nondeterminism -O--buildsystem=ruby dh_compress -X.rb -O--buildsystem=ruby dh_fixperms -O--buildsystem=ruby dh_missing -O--buildsystem=ruby dh_ruby_fixdepends -O--buildsystem=ruby dh_installdeb -O--buildsystem=ruby dh_gencontrol -O--buildsystem=ruby dh_md5sums -O--buildsystem=ruby dh_builddeb -O--buildsystem=ruby dpkg-deb: building package 'ruby-excon' in '../ruby-excon_0.112.0-4_all.deb'. dpkg-genbuildinfo --build=binary -O../ruby-excon_0.112.0-4_arm64.buildinfo dpkg-genchanges --build=binary -O../ruby-excon_0.112.0-4_arm64.changes dpkg-genchanges: info: binary-only upload (no source code included) dpkg-source --after-build . dpkg-buildpackage: info: binary-only upload (no source included) dpkg-genchanges: info: not including original source code in upload I: copying local configuration I: unmounting dev/ptmx filesystem I: unmounting dev/pts filesystem I: unmounting dev/shm filesystem I: unmounting proc filesystem I: unmounting sys filesystem I: cleaning the build env I: removing directory /srv/workspace/pbuilder/3958215 and its subdirectories I: Current time: Tue Aug 5 15:50:27 -12 2025 I: pbuilder-time-stamp: 1754452227 Wed Aug 6 03:50:27 UTC 2025 I: Signing ./b1/ruby-excon_0.112.0-4_arm64.buildinfo as ruby-excon_0.112.0-4_arm64.buildinfo.asc Wed Aug 6 03:50:27 UTC 2025 I: Signed ./b1/ruby-excon_0.112.0-4_arm64.buildinfo as ./b1/ruby-excon_0.112.0-4_arm64.buildinfo.asc Wed Aug 6 03:50:27 UTC 2025 - build #1 for ruby-excon/trixie/arm64 on codethink04-arm64 done. Starting cleanup. All cleanup done. Wed Aug 6 03:50:27 UTC 2025 - reproducible_build.sh stopped running as /tmp/jenkins-script-EYVXnQKb, removing. /srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz: total 16 drwxr-xr-x 2 jenkins jenkins 4096 Aug 6 03:50 b1 drwxr-xr-x 2 jenkins jenkins 4096 Aug 6 03:48 b2 -rw------- 1 jenkins jenkins 3214 Aug 6 03:48 rbuildlog.oJSIOas -rw-r--r-- 1 jenkins jenkins 2078 Jan 31 2025 ruby-excon_0.112.0-4.dsc /srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz/b1: total 432 -rw-r--r-- 1 jenkins jenkins 219918 Aug 6 03:50 build.log -rw-r--r-- 1 jenkins jenkins 6416 Aug 6 03:50 ruby-excon_0.112.0-4.debian.tar.xz -rw-r--r-- 1 jenkins jenkins 2078 Aug 6 03:50 ruby-excon_0.112.0-4.dsc -rw-r--r-- 1 jenkins jenkins 175856 Aug 6 03:50 ruby-excon_0.112.0-4_all.deb -rw-r--r-- 1 jenkins jenkins 8383 Aug 6 03:50 ruby-excon_0.112.0-4_arm64.buildinfo -rw-r--r-- 1 jenkins jenkins 9265 Aug 6 03:50 ruby-excon_0.112.0-4_arm64.buildinfo.asc -rw-r--r-- 1 jenkins jenkins 1185 Aug 6 03:50 ruby-excon_0.112.0-4_arm64.changes -rw-r--r-- 1 jenkins jenkins 1336 Aug 6 03:50 ruby-excon_0.112.0-4_source.changes /srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz/b2: total 0 Wed Aug 6 03:50:28 UTC 2025 I: Deleting $TMPDIR on codethink04-arm64.debian.net. I: pbuilder: network access will be disabled during build I: Current time: Tue Aug 5 15:48:34 -12 2025 I: pbuilder-time-stamp: 1754452114 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/trixie-reproducible-base.tgz] I: copying local configuration W: --override-config is not set; not updating apt.conf Read the manpage for details. I: mounting /proc filesystem I: mounting /sys filesystem I: creating /{dev,run}/shm I: mounting /dev/pts filesystem I: redirecting /dev/ptmx to /dev/pts/ptmx I: policy-rc.d already exists I: Copying source file I: copying [ruby-excon_0.112.0-4.dsc] I: copying [./ruby-excon_0.112.0.orig.tar.gz] I: copying [./ruby-excon_0.112.0-4.debian.tar.xz] I: Extracting source dpkg-source: warning: cannot verify inline signature for ./ruby-excon_0.112.0-4.dsc: no acceptable signature found dpkg-source: info: extracting ruby-excon in ruby-excon-0.112.0 dpkg-source: info: unpacking ruby-excon_0.112.0.orig.tar.gz dpkg-source: info: unpacking ruby-excon_0.112.0-4.debian.tar.xz dpkg-source: info: using patch list from debian/patches/series dpkg-source: info: applying 00_disable-local-port-reuse-tests.patch dpkg-source: info: applying 01_use_ca-certificates.patch dpkg-source: info: applying 03_remove_rubygems_bundler_add_requires_from_gemspec.patch dpkg-source: info: applying 0004-test-rackups-fallback-to-using-Rack-if-Rackup-is-not.patch dpkg-source: info: applying 0005-no-internet-access.patch I: Not using root during the build. I: Installing the build-deps I: user script /srv/workspace/pbuilder/3958215/tmp/hooks/D02_print_environment starting I: set BUILDDIR='/build/reproducible-path' BUILDUSERGECOS='first user,first room,first work-phone,first home-phone,first other' BUILDUSERNAME='pbuilder1' BUILD_ARCH='arm64' DEBIAN_FRONTEND='noninteractive' DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=12 ' DISTRIBUTION='trixie' HOME='/root' HOST_ARCH='arm64' IFS=' ' INVOCATION_ID='136b63c0e11e48df9aee5e24cf875801' LANG='C' LANGUAGE='en_US:en' LC_ALL='C' MAIL='/var/mail/root' OPTIND='1' PATH='/usr/sbin:/usr/bin:/sbin:/bin:/usr/games' PBCURRENTCOMMANDLINEOPERATION='build' PBUILDER_OPERATION='build' PBUILDER_PKGDATADIR='/usr/share/pbuilder' PBUILDER_PKGLIBDIR='/usr/lib/pbuilder' PBUILDER_SYSCONFDIR='/etc' PPID='3958215' PS1='# ' PS2='> ' PS4='+ ' PWD='/' SHELL='/bin/bash' SHLVL='2' SUDO_COMMAND='/usr/bin/timeout -k 18.1h 18h /usr/bin/ionice -c 3 /usr/bin/nice /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz/pbuilderrc_s3f5 --distribution trixie --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/trixie-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz/b1 --logfile b1/build.log ruby-excon_0.112.0-4.dsc' SUDO_GID='109' SUDO_UID='104' SUDO_USER='jenkins' TERM='unknown' TZ='/usr/share/zoneinfo/Etc/GMT+12' USER='root' _='/usr/bin/systemd-run' http_proxy='http://192.168.101.4:3128' I: uname -a Linux codethink04-arm64 6.1.0-37-cloud-arm64 #1 SMP Debian 6.1.140-1 (2025-05-22) aarch64 GNU/Linux I: ls -l /bin lrwxrwxrwx 1 root root 7 May 12 19:25 /bin -> usr/bin I: user script /srv/workspace/pbuilder/3958215/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy Version: 0.invalid.0 Architecture: arm64 Maintainer: Debian Pbuilder Team Description: Dummy package to satisfy dependencies with aptitude - created by pbuilder This package was created automatically by pbuilder to satisfy the build-dependencies of the package being currently built. Depends: debhelper-compat (= 13), gem2deb (>= 1), rake, ruby-activesupport, ruby-chronic, ruby-delorean, ruby-eventmachine, ruby-open4, ruby-rackup, ruby-rspec, ruby-shindo, ruby-sinatra (>= 4.1.1-5), ruby-webrick (>= 1.7~), unicorn, puma, ruby-sinatra-contrib (>= 4.1.1-5) dpkg-deb: building package 'pbuilder-satisfydepends-dummy' in '/tmp/satisfydepends-aptitude/pbuilder-satisfydepends-dummy.deb'. Selecting previously unselected package pbuilder-satisfydepends-dummy. (Reading database ... 19965 files and directories currently installed.) Preparing to unpack .../pbuilder-satisfydepends-dummy.deb ... Unpacking pbuilder-satisfydepends-dummy (0.invalid.0) ... dpkg: pbuilder-satisfydepends-dummy: dependency problems, but configuring anyway as you requested: pbuilder-satisfydepends-dummy depends on debhelper-compat (= 13); however: Package debhelper-compat is not installed. pbuilder-satisfydepends-dummy depends on gem2deb (>= 1); however: Package gem2deb is not installed. pbuilder-satisfydepends-dummy depends on rake; however: Package rake is not installed. pbuilder-satisfydepends-dummy depends on ruby-activesupport; however: Package ruby-activesupport is not installed. pbuilder-satisfydepends-dummy depends on ruby-chronic; however: Package ruby-chronic is not installed. pbuilder-satisfydepends-dummy depends on ruby-delorean; however: Package ruby-delorean is not installed. pbuilder-satisfydepends-dummy depends on ruby-eventmachine; however: Package ruby-eventmachine is not installed. pbuilder-satisfydepends-dummy depends on ruby-open4; however: Package ruby-open4 is not installed. pbuilder-satisfydepends-dummy depends on ruby-rackup; however: Package ruby-rackup is not installed. pbuilder-satisfydepends-dummy depends on ruby-rspec; however: Package ruby-rspec is not installed. pbuilder-satisfydepends-dummy depends on ruby-shindo; however: Package ruby-shindo is not installed. pbuilder-satisfydepends-dummy depends on ruby-sinatra (>= 4.1.1-5); however: Package ruby-sinatra is not installed. pbuilder-satisfydepends-dummy depends on ruby-webrick (>= 1.7~); however: Package ruby-webrick is not installed. pbuilder-satisfydepends-dummy depends on unicorn; however: Package unicorn is not installed. pbuilder-satisfydepends-dummy depends on puma; however: Package puma is not installed. pbuilder-satisfydepends-dummy depends on ruby-sinatra-contrib (>= 4.1.1-5); however: Package ruby-sinatra-contrib is not installed. Setting up pbuilder-satisfydepends-dummy (0.invalid.0) ... Reading package lists... Building dependency tree... Reading state information... Initializing package states... Writing extended state information... Building tag database... pbuilder-satisfydepends-dummy is already installed at the requested version (0.invalid.0) pbuilder-satisfydepends-dummy is already installed at the requested version (0.invalid.0) The following NEW packages will be installed: autoconf{a} automake{a} autopoint{a} autotools-dev{a} bsdextrautils{a} ca-certificates{a} debhelper{a} devscripts{a} dh-autoreconf{a} dh-strip-nondeterminism{a} dwz{a} file{a} gem2deb{a} gem2deb-test-runner{a} gettext{a} gettext-base{a} gpg{a} gpg-agent{a} gpgconf{a} gpgv{a} groff-base{a} intltool-debian{a} libarchive-zip-perl{a} libassuan9{a} libb-hooks-op-check-perl{a} libclass-method-modifiers-perl{a} libclass-xsaccessor-perl{a} libclone-perl{a} libdebhelper-perl{a} libdevel-callchecker-perl{a} libdynaloader-functions-perl{a} libelf1t64{a} libencode-locale-perl{a} libexpat1{a} libffi8{a} libfile-dirlist-perl{a} libfile-homedir-perl{a} libfile-listing-perl{a} libfile-stripnondeterminism-perl{a} libfile-touch-perl{a} libfile-which-perl{a} libgcrypt20{a} libgmp-dev{a} libgmpxx4ldbl{a} libgpg-error0{a} libhtml-parser-perl{a} libhtml-tagset-perl{a} libhtml-tree-perl{a} libhttp-cookies-perl{a} libhttp-date-perl{a} libhttp-message-perl{a} libhttp-negotiate-perl{a} libimport-into-perl{a} libio-html-perl{a} libio-socket-ssl-perl{a} libksba8{a} liblwp-mediatypes-perl{a} liblwp-protocol-https-perl{a} libmagic-mgc{a} libmagic1t64{a} libmodule-runtime-perl{a} libmoo-perl{a} libnet-http-perl{a} libnet-ssleay-perl{a} libnpth0t64{a} libparams-classify-perl{a} libpipeline1{a} libpython3-stdlib{a} libpython3.13-minimal{a} libpython3.13-stdlib{a} libreadline8t64{a} librole-tiny-perl{a} libruby{a} libruby3.3{a} libsub-quote-perl{a} libtimedate-perl{a} libtool{a} libtry-tiny-perl{a} libuchardet0{a} libunistring5{a} liburi-perl{a} libwww-perl{a} libwww-robotrules-perl{a} libxml2{a} libyaml-0-2{a} m4{a} man-db{a} media-types{a} netbase{a} openssl{a} patchutils{a} perl-openssl-defaults{a} pinentry-curses{a} po-debconf{a} puma{a} python3{a} python3-minimal{a} python3.13{a} python3.13-minimal{a} rake{a} readline-common{a} ruby{a} ruby-activesupport{a} ruby-all-dev{a} ruby-base64{a} ruby-chronic{a} ruby-concurrent{a} ruby-connection-pool{a} ruby-csv{a} ruby-delorean{a} ruby-did-you-mean{a} ruby-diff-lcs{a} ruby-eventmachine{a} ruby-formatador{a} ruby-i18n{a} ruby-kgio{a} ruby-minitest{a} ruby-multi-json{a} ruby-mustermann{a} ruby-net-telnet{a} ruby-nio4r{a} ruby-numerizer{a} ruby-open4{a} ruby-power-assert{a} ruby-rack{a} ruby-rack-protection{a} ruby-rack-session{a} ruby-rackup{a} ruby-raindrops{a} ruby-rspec{a} ruby-rspec-core{a} ruby-rspec-expectations{a} ruby-rspec-mocks{a} ruby-rspec-support{a} ruby-ruby2-keywords{a} ruby-rubygems{a} ruby-shindo{a} ruby-sinatra{a} ruby-sinatra-contrib{a} ruby-test-unit{a} ruby-tilt{a} ruby-tzinfo{a} ruby-webrick{a} ruby-xmlrpc{a} ruby3.3{a} ruby3.3-dev{a} rubygems-integration{a} sensible-utils{a} sopv-gpgv{a} tzdata{a} unicorn{a} wdiff{a} The following packages are RECOMMENDED but will NOT be installed: apt-file curl dctrl-tools debian-keyring debian-tag2upload-keyring dput dput-ng dupload equivs fonts-lato gnupg libarchive-cpio-perl libdata-dump-perl libdistro-info-perl libgit-wrapper-perl libgitlab-api-v4-perl libgpg-error-l10n libhtml-form-perl libhtml-format-perl libhttp-daemon-perl libio-compress-brotli-perl libjs-jquery libjson-perl liblist-compare-perl libltdl-dev libmail-sendmail-perl libmailtools-perl libnamespace-clean-perl libsoap-lite-perl libstring-shellquote-perl libxstring-perl licensecheck lintian lynx lzip pristine-tar python3-apt python3-argcomplete python3-debian python3-magic python3-requests python3-unidiff python3-xdg ruby-oj ruby-sdbm ruby3.3-doc sopv-doc strace unzip wget zip 0 packages upgraded, 152 newly installed, 0 to remove and 0 not upgraded. Need to get 36.2 MB of archives. After unpacking 144 MB will be used. Writing extended state information... Get: 1 http://deb.debian.org/debian trixie/main arm64 libexpat1 arm64 2.7.1-2 [93.3 kB] Get: 2 http://deb.debian.org/debian trixie/main arm64 libpython3.13-minimal arm64 3.13.5-2 [856 kB] Get: 3 http://deb.debian.org/debian trixie/main arm64 python3.13-minimal arm64 3.13.5-2 [2003 kB] Get: 4 http://deb.debian.org/debian trixie/main arm64 python3-minimal arm64 3.13.5-1 [27.2 kB] Get: 5 http://deb.debian.org/debian trixie/main arm64 media-types all 13.0.0 [29.3 kB] Get: 6 http://deb.debian.org/debian trixie/main arm64 netbase all 6.5 [12.4 kB] Get: 7 http://deb.debian.org/debian trixie/main arm64 tzdata all 2025b-4 [260 kB] Get: 8 http://deb.debian.org/debian trixie/main arm64 libffi8 arm64 3.4.8-2 [21.3 kB] Get: 9 http://deb.debian.org/debian trixie/main arm64 readline-common all 8.2-6 [69.4 kB] Get: 10 http://deb.debian.org/debian trixie/main arm64 libreadline8t64 arm64 8.2-6 [159 kB] Get: 11 http://deb.debian.org/debian trixie/main arm64 libpython3.13-stdlib arm64 3.13.5-2 [1892 kB] Get: 12 http://deb.debian.org/debian trixie/main arm64 python3.13 arm64 3.13.5-2 [757 kB] Get: 13 http://deb.debian.org/debian trixie/main arm64 libpython3-stdlib arm64 3.13.5-1 [10.2 kB] Get: 14 http://deb.debian.org/debian trixie/main arm64 python3 arm64 3.13.5-1 [28.2 kB] Get: 15 http://deb.debian.org/debian trixie/main arm64 sensible-utils all 0.0.25 [25.0 kB] Get: 16 http://deb.debian.org/debian trixie/main arm64 openssl arm64 3.5.1-1 [1457 kB] Get: 17 http://deb.debian.org/debian trixie/main arm64 ca-certificates all 20250419 [162 kB] Get: 18 http://deb.debian.org/debian trixie/main arm64 libmagic-mgc arm64 1:5.46-5 [338 kB] Get: 19 http://deb.debian.org/debian trixie/main arm64 libmagic1t64 arm64 1:5.46-5 [103 kB] Get: 20 http://deb.debian.org/debian trixie/main arm64 file arm64 1:5.46-5 [43.7 kB] Get: 21 http://deb.debian.org/debian trixie/main arm64 gettext-base arm64 0.23.1-2 [241 kB] Get: 22 http://deb.debian.org/debian trixie/main arm64 libuchardet0 arm64 0.0.8-1+b2 [69.2 kB] Get: 23 http://deb.debian.org/debian trixie/main arm64 groff-base arm64 1.23.0-9 [1130 kB] Get: 24 http://deb.debian.org/debian trixie/main arm64 bsdextrautils arm64 2.41-5 [93.8 kB] Get: 25 http://deb.debian.org/debian trixie/main arm64 libpipeline1 arm64 1.5.8-1 [40.2 kB] Get: 26 http://deb.debian.org/debian trixie/main arm64 man-db arm64 2.13.1-1 [1453 kB] Get: 27 http://deb.debian.org/debian trixie/main arm64 m4 arm64 1.4.19-8 [285 kB] Get: 28 http://deb.debian.org/debian trixie/main arm64 autoconf all 2.72-3.1 [494 kB] Get: 29 http://deb.debian.org/debian trixie/main arm64 autotools-dev all 20240727.1 [60.2 kB] Get: 30 http://deb.debian.org/debian trixie/main arm64 automake all 1:1.17-4 [862 kB] Get: 31 http://deb.debian.org/debian trixie/main arm64 autopoint all 0.23.1-2 [770 kB] Get: 32 http://deb.debian.org/debian trixie/main arm64 libdebhelper-perl all 13.24.2 [90.9 kB] Get: 33 http://deb.debian.org/debian trixie/main arm64 libtool all 2.5.4-4 [539 kB] Get: 34 http://deb.debian.org/debian trixie/main arm64 dh-autoreconf all 20 [17.1 kB] Get: 35 http://deb.debian.org/debian trixie/main arm64 libarchive-zip-perl all 1.68-1 [104 kB] Get: 36 http://deb.debian.org/debian trixie/main arm64 libfile-stripnondeterminism-perl all 1.14.1-2 [19.7 kB] Get: 37 http://deb.debian.org/debian trixie/main arm64 dh-strip-nondeterminism all 1.14.1-2 [8620 B] Get: 38 http://deb.debian.org/debian trixie/main arm64 libelf1t64 arm64 0.192-4 [189 kB] Get: 39 http://deb.debian.org/debian trixie/main arm64 dwz arm64 0.15-1+b1 [102 kB] Get: 40 http://deb.debian.org/debian trixie/main arm64 libunistring5 arm64 1.3-2 [453 kB] Get: 41 http://deb.debian.org/debian trixie/main arm64 libxml2 arm64 2.12.7+dfsg+really2.9.14-2.1 [630 kB] Get: 42 http://deb.debian.org/debian trixie/main arm64 gettext arm64 0.23.1-2 [1611 kB] Get: 43 http://deb.debian.org/debian trixie/main arm64 intltool-debian all 0.35.0+20060710.6 [22.9 kB] Get: 44 http://deb.debian.org/debian trixie/main arm64 po-debconf all 1.0.21+nmu1 [248 kB] Get: 45 http://deb.debian.org/debian trixie/main arm64 debhelper all 13.24.2 [919 kB] Get: 46 http://deb.debian.org/debian trixie/main arm64 libgpg-error0 arm64 1.51-4 [78.5 kB] Get: 47 http://deb.debian.org/debian trixie/main arm64 libassuan9 arm64 3.0.2-2 [59.1 kB] Get: 48 http://deb.debian.org/debian trixie/main arm64 libgcrypt20 arm64 1.11.0-7 [742 kB] Get: 49 http://deb.debian.org/debian trixie/main arm64 gpgconf arm64 2.4.7-21+b3 [121 kB] Get: 50 http://deb.debian.org/debian trixie/main arm64 libksba8 arm64 1.6.7-2+b1 [125 kB] Get: 51 http://deb.debian.org/debian trixie/main arm64 libnpth0t64 arm64 1.8-3 [22.9 kB] Get: 52 http://deb.debian.org/debian trixie/main arm64 gpg arm64 2.4.7-21+b3 [578 kB] Get: 53 http://deb.debian.org/debian trixie/main arm64 pinentry-curses arm64 1.3.1-2 [83.5 kB] Get: 54 http://deb.debian.org/debian trixie/main arm64 gpg-agent arm64 2.4.7-21+b3 [249 kB] Get: 55 http://deb.debian.org/debian trixie/main arm64 libfile-dirlist-perl all 0.05-3 [7600 B] Get: 56 http://deb.debian.org/debian trixie/main arm64 libfile-which-perl all 1.27-2 [15.1 kB] Get: 57 http://deb.debian.org/debian trixie/main arm64 libfile-homedir-perl all 1.006-2 [42.4 kB] Get: 58 http://deb.debian.org/debian trixie/main arm64 libfile-touch-perl all 0.12-2 [8816 B] Get: 59 http://deb.debian.org/debian trixie/main arm64 libclass-method-modifiers-perl all 2.15-1 [18.0 kB] Get: 60 http://deb.debian.org/debian trixie/main arm64 libclass-xsaccessor-perl arm64 1.19-4+b5 [34.9 kB] Get: 61 http://deb.debian.org/debian trixie/main arm64 libb-hooks-op-check-perl arm64 0.22-3+b2 [10.6 kB] Get: 62 http://deb.debian.org/debian trixie/main arm64 libdynaloader-functions-perl all 0.004-2 [12.2 kB] Get: 63 http://deb.debian.org/debian trixie/main arm64 libdevel-callchecker-perl arm64 0.009-2 [15.7 kB] Get: 64 http://deb.debian.org/debian trixie/main arm64 libparams-classify-perl arm64 0.015-2+b4 [22.3 kB] Get: 65 http://deb.debian.org/debian trixie/main arm64 libmodule-runtime-perl all 0.018-1 [17.8 kB] Get: 66 http://deb.debian.org/debian trixie/main arm64 libimport-into-perl all 1.002005-2 [11.3 kB] Get: 67 http://deb.debian.org/debian trixie/main arm64 librole-tiny-perl all 2.002004-1 [21.4 kB] Get: 68 http://deb.debian.org/debian trixie/main arm64 libsub-quote-perl all 2.006008-1 [21.8 kB] Get: 69 http://deb.debian.org/debian trixie/main arm64 libmoo-perl all 2.005005-1 [58.0 kB] Get: 70 http://deb.debian.org/debian trixie/main arm64 libencode-locale-perl all 1.05-3 [12.9 kB] Get: 71 http://deb.debian.org/debian trixie/main arm64 libtimedate-perl all 2.3300-2 [39.3 kB] Get: 72 http://deb.debian.org/debian trixie/main arm64 libhttp-date-perl all 6.06-1 [10.7 kB] Get: 73 http://deb.debian.org/debian trixie/main arm64 libfile-listing-perl all 6.16-1 [12.4 kB] Get: 74 http://deb.debian.org/debian trixie/main arm64 libhtml-tagset-perl all 3.24-1 [14.7 kB] Get: 75 http://deb.debian.org/debian trixie/main arm64 liburi-perl all 5.30-1 [105 kB] Get: 76 http://deb.debian.org/debian trixie/main arm64 libhtml-parser-perl arm64 3.83-1+b2 [97.5 kB] Get: 77 http://deb.debian.org/debian trixie/main arm64 libhtml-tree-perl all 5.07-3 [211 kB] Get: 78 http://deb.debian.org/debian trixie/main arm64 libclone-perl arm64 0.47-1+b1 [13.7 kB] Get: 79 http://deb.debian.org/debian trixie/main arm64 libio-html-perl all 1.004-3 [16.2 kB] Get: 80 http://deb.debian.org/debian trixie/main arm64 liblwp-mediatypes-perl all 6.04-2 [20.2 kB] Get: 81 http://deb.debian.org/debian trixie/main arm64 libhttp-message-perl all 7.00-2 [79.8 kB] Get: 82 http://deb.debian.org/debian trixie/main arm64 libhttp-cookies-perl all 6.11-1 [19.1 kB] Get: 83 http://deb.debian.org/debian trixie/main arm64 libhttp-negotiate-perl all 6.01-2 [13.1 kB] Get: 84 http://deb.debian.org/debian trixie/main arm64 perl-openssl-defaults arm64 7+b2 [6712 B] Get: 85 http://deb.debian.org/debian trixie/main arm64 libnet-ssleay-perl arm64 1.94-3 [323 kB] Get: 86 http://deb.debian.org/debian trixie/main arm64 libio-socket-ssl-perl all 2.089-1 [223 kB] Get: 87 http://deb.debian.org/debian trixie/main arm64 libnet-http-perl all 6.23-1 [23.9 kB] Get: 88 http://deb.debian.org/debian trixie/main arm64 liblwp-protocol-https-perl all 6.14-1 [10.8 kB] Get: 89 http://deb.debian.org/debian trixie/main arm64 libtry-tiny-perl all 0.32-1 [22.9 kB] Get: 90 http://deb.debian.org/debian trixie/main arm64 libwww-robotrules-perl all 6.02-1 [12.9 kB] Get: 91 http://deb.debian.org/debian trixie/main arm64 libwww-perl all 6.78-1 [183 kB] Get: 92 http://deb.debian.org/debian trixie/main arm64 patchutils arm64 0.4.2-1+b1 [71.3 kB] Get: 93 http://deb.debian.org/debian trixie/main arm64 gpgv arm64 2.4.7-21+b3 [220 kB] Get: 94 http://deb.debian.org/debian trixie/main arm64 sopv-gpgv all 0.1.4-1 [11.3 kB] Get: 95 http://deb.debian.org/debian trixie/main arm64 wdiff arm64 1.2.2-9 [122 kB] Get: 96 http://deb.debian.org/debian trixie/main arm64 devscripts all 2.25.15 [1067 kB] Get: 97 http://deb.debian.org/debian trixie/main arm64 rubygems-integration all 1.19 [5488 B] Get: 98 http://deb.debian.org/debian trixie/main arm64 ruby-csv all 3.3.4-1 [42.2 kB] Get: 99 http://deb.debian.org/debian trixie/main arm64 ruby-did-you-mean all 1.6.3-2 [20.9 kB] Get: 100 http://deb.debian.org/debian trixie/main arm64 ruby-net-telnet all 0.2.0-1 [13.1 kB] Get: 101 http://deb.debian.org/debian trixie/main arm64 ruby-ruby2-keywords all 0.0.5-1 [4300 B] Get: 102 http://deb.debian.org/debian trixie/main arm64 ruby-webrick all 1.9.1-1 [59.6 kB] Get: 103 http://deb.debian.org/debian trixie/main arm64 ruby-xmlrpc all 0.3.3-2 [24.4 kB] Get: 104 http://deb.debian.org/debian trixie/main arm64 libyaml-0-2 arm64 0.2.5-2 [49.2 kB] Get: 105 http://deb.debian.org/debian trixie/main arm64 libruby3.3 arm64 3.3.8-2 [6142 kB] Get: 106 http://deb.debian.org/debian trixie/main arm64 ruby3.3 arm64 3.3.8-2 [834 kB] Get: 107 http://deb.debian.org/debian trixie/main arm64 libruby arm64 1:3.3+b1 [5436 B] Get: 108 http://deb.debian.org/debian trixie/main arm64 ruby-rubygems all 3.6.7-2 [407 kB] Get: 109 http://deb.debian.org/debian trixie/main arm64 ruby arm64 1:3.3+b1 [6560 B] Get: 110 http://deb.debian.org/debian trixie/main arm64 rake all 13.2.1-1 [65.2 kB] Get: 111 http://deb.debian.org/debian trixie/main arm64 ruby-minitest all 5.25.4-3 [66.3 kB] Get: 112 http://deb.debian.org/debian trixie/main arm64 ruby-power-assert all 2.0.3-1 [11.8 kB] Get: 113 http://deb.debian.org/debian trixie/main arm64 ruby-test-unit all 3.6.2-1 [79.1 kB] Get: 114 http://deb.debian.org/debian trixie/main arm64 gem2deb-test-runner arm64 2.2.5 [17.9 kB] Get: 115 http://deb.debian.org/debian trixie/main arm64 libgmpxx4ldbl arm64 2:6.3.0+dfsg-3 [329 kB] Get: 116 http://deb.debian.org/debian trixie/main arm64 libgmp-dev arm64 2:6.3.0+dfsg-3 [621 kB] Get: 117 http://deb.debian.org/debian trixie/main arm64 ruby3.3-dev arm64 3.3.8-2 [1045 kB] Get: 118 http://deb.debian.org/debian trixie/main arm64 ruby-all-dev arm64 1:3.3+b1 [6496 B] Get: 119 http://deb.debian.org/debian trixie/main arm64 gem2deb arm64 2.2.5 [48.0 kB] Get: 120 http://deb.debian.org/debian trixie/main arm64 ruby-nio4r arm64 2.7.3-1+b2 [112 kB] Get: 121 http://deb.debian.org/debian trixie/main arm64 puma arm64 6.6.0-4 [189 kB] Get: 122 http://deb.debian.org/debian trixie/main arm64 ruby-concurrent all 1.3.5-1 [291 kB] Get: 123 http://deb.debian.org/debian trixie/main arm64 ruby-i18n all 1.14.7-1 [41.7 kB] Get: 124 http://deb.debian.org/debian trixie/main arm64 ruby-tzinfo all 2.0.6-1 [66.7 kB] Get: 125 http://deb.debian.org/debian trixie/main arm64 ruby-connection-pool all 2.4.1-1 [10.5 kB] Get: 126 http://deb.debian.org/debian trixie/main arm64 ruby-base64 all 0.2.0-2 [7116 B] Get: 127 http://deb.debian.org/debian trixie/main arm64 ruby-activesupport all 2:7.2.2.1+dfsg-7 [223 kB] Get: 128 http://deb.debian.org/debian trixie/main arm64 ruby-numerizer all 0.2.0-3 [4888 B] Get: 129 http://deb.debian.org/debian trixie/main arm64 ruby-chronic all 0.10.5-3 [28.8 kB] Get: 130 http://deb.debian.org/debian trixie/main arm64 ruby-delorean all 2.1.0-2.1 [5612 B] Get: 131 http://deb.debian.org/debian trixie/main arm64 ruby-diff-lcs all 1.5.1-1 [28.1 kB] Get: 132 http://deb.debian.org/debian trixie/main arm64 ruby-eventmachine arm64 1.3~pre20220315-df4ab006-5+b2 [150 kB] Get: 133 http://deb.debian.org/debian trixie/main arm64 ruby-formatador all 1.1.0-1 [9304 B] Get: 134 http://deb.debian.org/debian trixie/main arm64 ruby-kgio arm64 2.11.2-2+b9 [27.8 kB] Get: 135 http://deb.debian.org/debian trixie/main arm64 ruby-multi-json all 1.15.0-1 [20.4 kB] Get: 136 http://deb.debian.org/debian trixie/main arm64 ruby-mustermann all 3.0.0-2 [37.7 kB] Get: 137 http://deb.debian.org/debian trixie/main arm64 ruby-open4 all 1.3.4-3 [14.5 kB] Get: 138 http://deb.debian.org/debian trixie/main arm64 ruby-rack all 3.1.16-0.1 [98.3 kB] Get: 139 http://deb.debian.org/debian trixie/main arm64 ruby-rack-protection all 4.1.1-5 [41.8 kB] Get: 140 http://deb.debian.org/debian trixie/main arm64 ruby-rack-session all 2.1.1-0.1 [12.5 kB] Get: 141 http://deb.debian.org/debian trixie/main arm64 ruby-rackup all 2.1.0-4 [12.7 kB] Get: 142 http://deb.debian.org/debian trixie/main arm64 ruby-raindrops arm64 0.20.0-2+b1 [29.2 kB] Get: 143 http://deb.debian.org/debian trixie/main arm64 ruby-rspec-support all 3.13.0c0e0m0s1-2 [28.5 kB] Get: 144 http://deb.debian.org/debian trixie/main arm64 ruby-rspec-core all 3.13.0c0e0m0s1-2 [164 kB] Get: 145 http://deb.debian.org/debian trixie/main arm64 ruby-rspec-expectations all 3.13.0c0e0m0s1-2 [90.2 kB] Get: 146 http://deb.debian.org/debian trixie/main arm64 ruby-rspec-mocks all 3.13.0c0e0m0s1-2 [81.3 kB] Get: 147 http://deb.debian.org/debian trixie/main arm64 ruby-rspec all 3.13.0c0e0m0s1-2 [5184 B] Get: 148 http://deb.debian.org/debian trixie/main arm64 ruby-shindo all 0.3.10-2 [12.0 kB] Get: 149 http://deb.debian.org/debian trixie/main arm64 ruby-tilt all 2.4.0-3 [32.2 kB] Get: 150 http://deb.debian.org/debian trixie/main arm64 ruby-sinatra all 4.1.1-5 [122 kB] Get: 151 http://deb.debian.org/debian trixie/main arm64 ruby-sinatra-contrib all 4.1.1-5 [54.8 kB] Get: 152 http://deb.debian.org/debian trixie/main arm64 unicorn arm64 6.1.0+git.20250131.1370f52-1+b1 [97.5 kB] Fetched 36.2 MB in 0s (113 MB/s) Preconfiguring packages ... Selecting previously unselected package libexpat1:arm64. (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 ... 19965 files and directories currently installed.) Preparing to unpack .../libexpat1_2.7.1-2_arm64.deb ... Unpacking libexpat1:arm64 (2.7.1-2) ... Selecting previously unselected package libpython3.13-minimal:arm64. Preparing to unpack .../libpython3.13-minimal_3.13.5-2_arm64.deb ... Unpacking libpython3.13-minimal:arm64 (3.13.5-2) ... Selecting previously unselected package python3.13-minimal. Preparing to unpack .../python3.13-minimal_3.13.5-2_arm64.deb ... Unpacking python3.13-minimal (3.13.5-2) ... Setting up libpython3.13-minimal:arm64 (3.13.5-2) ... Setting up libexpat1:arm64 (2.7.1-2) ... Setting up python3.13-minimal (3.13.5-2) ... Selecting previously unselected package python3-minimal. (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 ... 20299 files and directories currently installed.) Preparing to unpack .../0-python3-minimal_3.13.5-1_arm64.deb ... Unpacking python3-minimal (3.13.5-1) ... Selecting previously unselected package media-types. Preparing to unpack .../1-media-types_13.0.0_all.deb ... Unpacking media-types (13.0.0) ... Selecting previously unselected package netbase. Preparing to unpack .../2-netbase_6.5_all.deb ... Unpacking netbase (6.5) ... Selecting previously unselected package tzdata. Preparing to unpack .../3-tzdata_2025b-4_all.deb ... Unpacking tzdata (2025b-4) ... Selecting previously unselected package libffi8:arm64. Preparing to unpack .../4-libffi8_3.4.8-2_arm64.deb ... Unpacking libffi8:arm64 (3.4.8-2) ... Selecting previously unselected package readline-common. Preparing to unpack .../5-readline-common_8.2-6_all.deb ... Unpacking readline-common (8.2-6) ... Selecting previously unselected package libreadline8t64:arm64. Preparing to unpack .../6-libreadline8t64_8.2-6_arm64.deb ... Adding 'diversion of /lib/aarch64-linux-gnu/libhistory.so.8 to /lib/aarch64-linux-gnu/libhistory.so.8.usr-is-merged by libreadline8t64' Adding 'diversion of /lib/aarch64-linux-gnu/libhistory.so.8.2 to /lib/aarch64-linux-gnu/libhistory.so.8.2.usr-is-merged by libreadline8t64' Adding 'diversion of /lib/aarch64-linux-gnu/libreadline.so.8 to /lib/aarch64-linux-gnu/libreadline.so.8.usr-is-merged by libreadline8t64' Adding 'diversion of /lib/aarch64-linux-gnu/libreadline.so.8.2 to /lib/aarch64-linux-gnu/libreadline.so.8.2.usr-is-merged by libreadline8t64' Unpacking libreadline8t64:arm64 (8.2-6) ... Selecting previously unselected package libpython3.13-stdlib:arm64. Preparing to unpack .../7-libpython3.13-stdlib_3.13.5-2_arm64.deb ... Unpacking libpython3.13-stdlib:arm64 (3.13.5-2) ... Selecting previously unselected package python3.13. Preparing to unpack .../8-python3.13_3.13.5-2_arm64.deb ... Unpacking python3.13 (3.13.5-2) ... Selecting previously unselected package libpython3-stdlib:arm64. Preparing to unpack .../9-libpython3-stdlib_3.13.5-1_arm64.deb ... Unpacking libpython3-stdlib:arm64 (3.13.5-1) ... Setting up python3-minimal (3.13.5-1) ... Selecting previously unselected package python3. (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 ... 21314 files and directories currently installed.) Preparing to unpack .../000-python3_3.13.5-1_arm64.deb ... Unpacking python3 (3.13.5-1) ... Selecting previously unselected package sensible-utils. Preparing to unpack .../001-sensible-utils_0.0.25_all.deb ... Unpacking sensible-utils (0.0.25) ... Selecting previously unselected package openssl. Preparing to unpack .../002-openssl_3.5.1-1_arm64.deb ... Unpacking openssl (3.5.1-1) ... Selecting previously unselected package ca-certificates. Preparing to unpack .../003-ca-certificates_20250419_all.deb ... Unpacking ca-certificates (20250419) ... Selecting previously unselected package libmagic-mgc. Preparing to unpack .../004-libmagic-mgc_1%3a5.46-5_arm64.deb ... Unpacking libmagic-mgc (1:5.46-5) ... Selecting previously unselected package libmagic1t64:arm64. Preparing to unpack .../005-libmagic1t64_1%3a5.46-5_arm64.deb ... Unpacking libmagic1t64:arm64 (1:5.46-5) ... Selecting previously unselected package file. Preparing to unpack .../006-file_1%3a5.46-5_arm64.deb ... Unpacking file (1:5.46-5) ... Selecting previously unselected package gettext-base. Preparing to unpack .../007-gettext-base_0.23.1-2_arm64.deb ... Unpacking gettext-base (0.23.1-2) ... Selecting previously unselected package libuchardet0:arm64. Preparing to unpack .../008-libuchardet0_0.0.8-1+b2_arm64.deb ... Unpacking libuchardet0:arm64 (0.0.8-1+b2) ... Selecting previously unselected package groff-base. Preparing to unpack .../009-groff-base_1.23.0-9_arm64.deb ... Unpacking groff-base (1.23.0-9) ... Selecting previously unselected package bsdextrautils. Preparing to unpack .../010-bsdextrautils_2.41-5_arm64.deb ... Unpacking bsdextrautils (2.41-5) ... Selecting previously unselected package libpipeline1:arm64. Preparing to unpack .../011-libpipeline1_1.5.8-1_arm64.deb ... Unpacking libpipeline1:arm64 (1.5.8-1) ... Selecting previously unselected package man-db. Preparing to unpack .../012-man-db_2.13.1-1_arm64.deb ... Unpacking man-db (2.13.1-1) ... Selecting previously unselected package m4. Preparing to unpack .../013-m4_1.4.19-8_arm64.deb ... Unpacking m4 (1.4.19-8) ... Selecting previously unselected package autoconf. Preparing to unpack .../014-autoconf_2.72-3.1_all.deb ... Unpacking autoconf (2.72-3.1) ... Selecting previously unselected package autotools-dev. Preparing to unpack .../015-autotools-dev_20240727.1_all.deb ... Unpacking autotools-dev (20240727.1) ... Selecting previously unselected package automake. Preparing to unpack .../016-automake_1%3a1.17-4_all.deb ... Unpacking automake (1:1.17-4) ... Selecting previously unselected package autopoint. Preparing to unpack .../017-autopoint_0.23.1-2_all.deb ... Unpacking autopoint (0.23.1-2) ... Selecting previously unselected package libdebhelper-perl. Preparing to unpack .../018-libdebhelper-perl_13.24.2_all.deb ... Unpacking libdebhelper-perl (13.24.2) ... Selecting previously unselected package libtool. Preparing to unpack .../019-libtool_2.5.4-4_all.deb ... Unpacking libtool (2.5.4-4) ... Selecting previously unselected package dh-autoreconf. Preparing to unpack .../020-dh-autoreconf_20_all.deb ... Unpacking dh-autoreconf (20) ... Selecting previously unselected package libarchive-zip-perl. Preparing to unpack .../021-libarchive-zip-perl_1.68-1_all.deb ... Unpacking libarchive-zip-perl (1.68-1) ... Selecting previously unselected package libfile-stripnondeterminism-perl. Preparing to unpack .../022-libfile-stripnondeterminism-perl_1.14.1-2_all.deb ... Unpacking libfile-stripnondeterminism-perl (1.14.1-2) ... Selecting previously unselected package dh-strip-nondeterminism. Preparing to unpack .../023-dh-strip-nondeterminism_1.14.1-2_all.deb ... Unpacking dh-strip-nondeterminism (1.14.1-2) ... Selecting previously unselected package libelf1t64:arm64. Preparing to unpack .../024-libelf1t64_0.192-4_arm64.deb ... Unpacking libelf1t64:arm64 (0.192-4) ... Selecting previously unselected package dwz. Preparing to unpack .../025-dwz_0.15-1+b1_arm64.deb ... Unpacking dwz (0.15-1+b1) ... Selecting previously unselected package libunistring5:arm64. Preparing to unpack .../026-libunistring5_1.3-2_arm64.deb ... Unpacking libunistring5:arm64 (1.3-2) ... Selecting previously unselected package libxml2:arm64. Preparing to unpack .../027-libxml2_2.12.7+dfsg+really2.9.14-2.1_arm64.deb ... Unpacking libxml2:arm64 (2.12.7+dfsg+really2.9.14-2.1) ... Selecting previously unselected package gettext. Preparing to unpack .../028-gettext_0.23.1-2_arm64.deb ... Unpacking gettext (0.23.1-2) ... Selecting previously unselected package intltool-debian. Preparing to unpack .../029-intltool-debian_0.35.0+20060710.6_all.deb ... Unpacking intltool-debian (0.35.0+20060710.6) ... Selecting previously unselected package po-debconf. Preparing to unpack .../030-po-debconf_1.0.21+nmu1_all.deb ... Unpacking po-debconf (1.0.21+nmu1) ... Selecting previously unselected package debhelper. Preparing to unpack .../031-debhelper_13.24.2_all.deb ... Unpacking debhelper (13.24.2) ... Selecting previously unselected package libgpg-error0:arm64. Preparing to unpack .../032-libgpg-error0_1.51-4_arm64.deb ... Unpacking libgpg-error0:arm64 (1.51-4) ... Selecting previously unselected package libassuan9:arm64. Preparing to unpack .../033-libassuan9_3.0.2-2_arm64.deb ... Unpacking libassuan9:arm64 (3.0.2-2) ... Selecting previously unselected package libgcrypt20:arm64. Preparing to unpack .../034-libgcrypt20_1.11.0-7_arm64.deb ... Unpacking libgcrypt20:arm64 (1.11.0-7) ... Selecting previously unselected package gpgconf. Preparing to unpack .../035-gpgconf_2.4.7-21+b3_arm64.deb ... Unpacking gpgconf (2.4.7-21+b3) ... Selecting previously unselected package libksba8:arm64. Preparing to unpack .../036-libksba8_1.6.7-2+b1_arm64.deb ... Unpacking libksba8:arm64 (1.6.7-2+b1) ... Selecting previously unselected package libnpth0t64:arm64. Preparing to unpack .../037-libnpth0t64_1.8-3_arm64.deb ... Unpacking libnpth0t64:arm64 (1.8-3) ... Selecting previously unselected package gpg. Preparing to unpack .../038-gpg_2.4.7-21+b3_arm64.deb ... Unpacking gpg (2.4.7-21+b3) ... Selecting previously unselected package pinentry-curses. Preparing to unpack .../039-pinentry-curses_1.3.1-2_arm64.deb ... Unpacking pinentry-curses (1.3.1-2) ... Selecting previously unselected package gpg-agent. Preparing to unpack .../040-gpg-agent_2.4.7-21+b3_arm64.deb ... Unpacking gpg-agent (2.4.7-21+b3) ... Selecting previously unselected package libfile-dirlist-perl. Preparing to unpack .../041-libfile-dirlist-perl_0.05-3_all.deb ... Unpacking libfile-dirlist-perl (0.05-3) ... Selecting previously unselected package libfile-which-perl. Preparing to unpack .../042-libfile-which-perl_1.27-2_all.deb ... Unpacking libfile-which-perl (1.27-2) ... Selecting previously unselected package libfile-homedir-perl. Preparing to unpack .../043-libfile-homedir-perl_1.006-2_all.deb ... Unpacking libfile-homedir-perl (1.006-2) ... Selecting previously unselected package libfile-touch-perl. Preparing to unpack .../044-libfile-touch-perl_0.12-2_all.deb ... Unpacking libfile-touch-perl (0.12-2) ... Selecting previously unselected package libclass-method-modifiers-perl. Preparing to unpack .../045-libclass-method-modifiers-perl_2.15-1_all.deb ... Unpacking libclass-method-modifiers-perl (2.15-1) ... Selecting previously unselected package libclass-xsaccessor-perl. Preparing to unpack .../046-libclass-xsaccessor-perl_1.19-4+b5_arm64.deb ... Unpacking libclass-xsaccessor-perl (1.19-4+b5) ... Selecting previously unselected package libb-hooks-op-check-perl:arm64. Preparing to unpack .../047-libb-hooks-op-check-perl_0.22-3+b2_arm64.deb ... Unpacking libb-hooks-op-check-perl:arm64 (0.22-3+b2) ... Selecting previously unselected package libdynaloader-functions-perl. Preparing to unpack .../048-libdynaloader-functions-perl_0.004-2_all.deb ... Unpacking libdynaloader-functions-perl (0.004-2) ... Selecting previously unselected package libdevel-callchecker-perl:arm64. Preparing to unpack .../049-libdevel-callchecker-perl_0.009-2_arm64.deb ... Unpacking libdevel-callchecker-perl:arm64 (0.009-2) ... Selecting previously unselected package libparams-classify-perl:arm64. Preparing to unpack .../050-libparams-classify-perl_0.015-2+b4_arm64.deb ... Unpacking libparams-classify-perl:arm64 (0.015-2+b4) ... Selecting previously unselected package libmodule-runtime-perl. Preparing to unpack .../051-libmodule-runtime-perl_0.018-1_all.deb ... Unpacking libmodule-runtime-perl (0.018-1) ... Selecting previously unselected package libimport-into-perl. Preparing to unpack .../052-libimport-into-perl_1.002005-2_all.deb ... Unpacking libimport-into-perl (1.002005-2) ... Selecting previously unselected package librole-tiny-perl. Preparing to unpack .../053-librole-tiny-perl_2.002004-1_all.deb ... Unpacking librole-tiny-perl (2.002004-1) ... Selecting previously unselected package libsub-quote-perl. Preparing to unpack .../054-libsub-quote-perl_2.006008-1_all.deb ... Unpacking libsub-quote-perl (2.006008-1) ... Selecting previously unselected package libmoo-perl. Preparing to unpack .../055-libmoo-perl_2.005005-1_all.deb ... Unpacking libmoo-perl (2.005005-1) ... Selecting previously unselected package libencode-locale-perl. Preparing to unpack .../056-libencode-locale-perl_1.05-3_all.deb ... Unpacking libencode-locale-perl (1.05-3) ... Selecting previously unselected package libtimedate-perl. Preparing to unpack .../057-libtimedate-perl_2.3300-2_all.deb ... Unpacking libtimedate-perl (2.3300-2) ... Selecting previously unselected package libhttp-date-perl. Preparing to unpack .../058-libhttp-date-perl_6.06-1_all.deb ... Unpacking libhttp-date-perl (6.06-1) ... Selecting previously unselected package libfile-listing-perl. Preparing to unpack .../059-libfile-listing-perl_6.16-1_all.deb ... Unpacking libfile-listing-perl (6.16-1) ... Selecting previously unselected package libhtml-tagset-perl. Preparing to unpack .../060-libhtml-tagset-perl_3.24-1_all.deb ... Unpacking libhtml-tagset-perl (3.24-1) ... Selecting previously unselected package liburi-perl. Preparing to unpack .../061-liburi-perl_5.30-1_all.deb ... Unpacking liburi-perl (5.30-1) ... Selecting previously unselected package libhtml-parser-perl:arm64. Preparing to unpack .../062-libhtml-parser-perl_3.83-1+b2_arm64.deb ... Unpacking libhtml-parser-perl:arm64 (3.83-1+b2) ... Selecting previously unselected package libhtml-tree-perl. Preparing to unpack .../063-libhtml-tree-perl_5.07-3_all.deb ... Unpacking libhtml-tree-perl (5.07-3) ... Selecting previously unselected package libclone-perl:arm64. Preparing to unpack .../064-libclone-perl_0.47-1+b1_arm64.deb ... Unpacking libclone-perl:arm64 (0.47-1+b1) ... Selecting previously unselected package libio-html-perl. Preparing to unpack .../065-libio-html-perl_1.004-3_all.deb ... Unpacking libio-html-perl (1.004-3) ... Selecting previously unselected package liblwp-mediatypes-perl. Preparing to unpack .../066-liblwp-mediatypes-perl_6.04-2_all.deb ... Unpacking liblwp-mediatypes-perl (6.04-2) ... Selecting previously unselected package libhttp-message-perl. Preparing to unpack .../067-libhttp-message-perl_7.00-2_all.deb ... Unpacking libhttp-message-perl (7.00-2) ... Selecting previously unselected package libhttp-cookies-perl. Preparing to unpack .../068-libhttp-cookies-perl_6.11-1_all.deb ... Unpacking libhttp-cookies-perl (6.11-1) ... Selecting previously unselected package libhttp-negotiate-perl. Preparing to unpack .../069-libhttp-negotiate-perl_6.01-2_all.deb ... Unpacking libhttp-negotiate-perl (6.01-2) ... Selecting previously unselected package perl-openssl-defaults:arm64. Preparing to unpack .../070-perl-openssl-defaults_7+b2_arm64.deb ... Unpacking perl-openssl-defaults:arm64 (7+b2) ... Selecting previously unselected package libnet-ssleay-perl:arm64. Preparing to unpack .../071-libnet-ssleay-perl_1.94-3_arm64.deb ... Unpacking libnet-ssleay-perl:arm64 (1.94-3) ... Selecting previously unselected package libio-socket-ssl-perl. Preparing to unpack .../072-libio-socket-ssl-perl_2.089-1_all.deb ... Unpacking libio-socket-ssl-perl (2.089-1) ... Selecting previously unselected package libnet-http-perl. Preparing to unpack .../073-libnet-http-perl_6.23-1_all.deb ... Unpacking libnet-http-perl (6.23-1) ... Selecting previously unselected package liblwp-protocol-https-perl. Preparing to unpack .../074-liblwp-protocol-https-perl_6.14-1_all.deb ... Unpacking liblwp-protocol-https-perl (6.14-1) ... Selecting previously unselected package libtry-tiny-perl. Preparing to unpack .../075-libtry-tiny-perl_0.32-1_all.deb ... Unpacking libtry-tiny-perl (0.32-1) ... Selecting previously unselected package libwww-robotrules-perl. Preparing to unpack .../076-libwww-robotrules-perl_6.02-1_all.deb ... Unpacking libwww-robotrules-perl (6.02-1) ... Selecting previously unselected package libwww-perl. Preparing to unpack .../077-libwww-perl_6.78-1_all.deb ... Unpacking libwww-perl (6.78-1) ... Selecting previously unselected package patchutils. Preparing to unpack .../078-patchutils_0.4.2-1+b1_arm64.deb ... Unpacking patchutils (0.4.2-1+b1) ... Selecting previously unselected package gpgv. Preparing to unpack .../079-gpgv_2.4.7-21+b3_arm64.deb ... Unpacking gpgv (2.4.7-21+b3) ... Selecting previously unselected package sopv-gpgv. Preparing to unpack .../080-sopv-gpgv_0.1.4-1_all.deb ... Unpacking sopv-gpgv (0.1.4-1) ... Selecting previously unselected package wdiff. Preparing to unpack .../081-wdiff_1.2.2-9_arm64.deb ... Unpacking wdiff (1.2.2-9) ... Selecting previously unselected package devscripts. Preparing to unpack .../082-devscripts_2.25.15_all.deb ... Unpacking devscripts (2.25.15) ... Selecting previously unselected package rubygems-integration. Preparing to unpack .../083-rubygems-integration_1.19_all.deb ... Unpacking rubygems-integration (1.19) ... Selecting previously unselected package ruby-csv. Preparing to unpack .../084-ruby-csv_3.3.4-1_all.deb ... Unpacking ruby-csv (3.3.4-1) ... Selecting previously unselected package ruby-did-you-mean. Preparing to unpack .../085-ruby-did-you-mean_1.6.3-2_all.deb ... Unpacking ruby-did-you-mean (1.6.3-2) ... Selecting previously unselected package ruby-net-telnet. Preparing to unpack .../086-ruby-net-telnet_0.2.0-1_all.deb ... Unpacking ruby-net-telnet (0.2.0-1) ... Selecting previously unselected package ruby-ruby2-keywords. Preparing to unpack .../087-ruby-ruby2-keywords_0.0.5-1_all.deb ... Unpacking ruby-ruby2-keywords (0.0.5-1) ... Selecting previously unselected package ruby-webrick. Preparing to unpack .../088-ruby-webrick_1.9.1-1_all.deb ... Unpacking ruby-webrick (1.9.1-1) ... Selecting previously unselected package ruby-xmlrpc. Preparing to unpack .../089-ruby-xmlrpc_0.3.3-2_all.deb ... Unpacking ruby-xmlrpc (0.3.3-2) ... Selecting previously unselected package libyaml-0-2:arm64. Preparing to unpack .../090-libyaml-0-2_0.2.5-2_arm64.deb ... Unpacking libyaml-0-2:arm64 (0.2.5-2) ... Selecting previously unselected package libruby3.3:arm64. Preparing to unpack .../091-libruby3.3_3.3.8-2_arm64.deb ... Unpacking libruby3.3:arm64 (3.3.8-2) ... Selecting previously unselected package ruby3.3. Preparing to unpack .../092-ruby3.3_3.3.8-2_arm64.deb ... Unpacking ruby3.3 (3.3.8-2) ... Selecting previously unselected package libruby:arm64. Preparing to unpack .../093-libruby_1%3a3.3+b1_arm64.deb ... Unpacking libruby:arm64 (1:3.3+b1) ... Selecting previously unselected package ruby-rubygems. Preparing to unpack .../094-ruby-rubygems_3.6.7-2_all.deb ... Unpacking ruby-rubygems (3.6.7-2) ... Selecting previously unselected package ruby. Preparing to unpack .../095-ruby_1%3a3.3+b1_arm64.deb ... Unpacking ruby (1:3.3+b1) ... Selecting previously unselected package rake. Preparing to unpack .../096-rake_13.2.1-1_all.deb ... Unpacking rake (13.2.1-1) ... Selecting previously unselected package ruby-minitest. Preparing to unpack .../097-ruby-minitest_5.25.4-3_all.deb ... Unpacking ruby-minitest (5.25.4-3) ... Selecting previously unselected package ruby-power-assert. Preparing to unpack .../098-ruby-power-assert_2.0.3-1_all.deb ... Unpacking ruby-power-assert (2.0.3-1) ... Selecting previously unselected package ruby-test-unit. Preparing to unpack .../099-ruby-test-unit_3.6.2-1_all.deb ... Unpacking ruby-test-unit (3.6.2-1) ... Selecting previously unselected package gem2deb-test-runner. Preparing to unpack .../100-gem2deb-test-runner_2.2.5_arm64.deb ... Unpacking gem2deb-test-runner (2.2.5) ... Selecting previously unselected package libgmpxx4ldbl:arm64. Preparing to unpack .../101-libgmpxx4ldbl_2%3a6.3.0+dfsg-3_arm64.deb ... Unpacking libgmpxx4ldbl:arm64 (2:6.3.0+dfsg-3) ... Selecting previously unselected package libgmp-dev:arm64. Preparing to unpack .../102-libgmp-dev_2%3a6.3.0+dfsg-3_arm64.deb ... Unpacking libgmp-dev:arm64 (2:6.3.0+dfsg-3) ... Selecting previously unselected package ruby3.3-dev:arm64. Preparing to unpack .../103-ruby3.3-dev_3.3.8-2_arm64.deb ... Unpacking ruby3.3-dev:arm64 (3.3.8-2) ... Selecting previously unselected package ruby-all-dev:arm64. Preparing to unpack .../104-ruby-all-dev_1%3a3.3+b1_arm64.deb ... Unpacking ruby-all-dev:arm64 (1:3.3+b1) ... Selecting previously unselected package gem2deb. Preparing to unpack .../105-gem2deb_2.2.5_arm64.deb ... Unpacking gem2deb (2.2.5) ... Selecting previously unselected package ruby-nio4r. Preparing to unpack .../106-ruby-nio4r_2.7.3-1+b2_arm64.deb ... Unpacking ruby-nio4r (2.7.3-1+b2) ... Selecting previously unselected package puma. Preparing to unpack .../107-puma_6.6.0-4_arm64.deb ... Unpacking puma (6.6.0-4) ... Selecting previously unselected package ruby-concurrent. Preparing to unpack .../108-ruby-concurrent_1.3.5-1_all.deb ... Unpacking ruby-concurrent (1.3.5-1) ... Selecting previously unselected package ruby-i18n. Preparing to unpack .../109-ruby-i18n_1.14.7-1_all.deb ... Unpacking ruby-i18n (1.14.7-1) ... Selecting previously unselected package ruby-tzinfo. Preparing to unpack .../110-ruby-tzinfo_2.0.6-1_all.deb ... Unpacking ruby-tzinfo (2.0.6-1) ... Selecting previously unselected package ruby-connection-pool. Preparing to unpack .../111-ruby-connection-pool_2.4.1-1_all.deb ... Unpacking ruby-connection-pool (2.4.1-1) ... Selecting previously unselected package ruby-base64. Preparing to unpack .../112-ruby-base64_0.2.0-2_all.deb ... Unpacking ruby-base64 (0.2.0-2) ... Selecting previously unselected package ruby-activesupport. Preparing to unpack .../113-ruby-activesupport_2%3a7.2.2.1+dfsg-7_all.deb ... Unpacking ruby-activesupport (2:7.2.2.1+dfsg-7) ... Selecting previously unselected package ruby-numerizer. Preparing to unpack .../114-ruby-numerizer_0.2.0-3_all.deb ... Unpacking ruby-numerizer (0.2.0-3) ... Selecting previously unselected package ruby-chronic. Preparing to unpack .../115-ruby-chronic_0.10.5-3_all.deb ... Unpacking ruby-chronic (0.10.5-3) ... Selecting previously unselected package ruby-delorean. Preparing to unpack .../116-ruby-delorean_2.1.0-2.1_all.deb ... Unpacking ruby-delorean (2.1.0-2.1) ... Selecting previously unselected package ruby-diff-lcs. Preparing to unpack .../117-ruby-diff-lcs_1.5.1-1_all.deb ... Unpacking ruby-diff-lcs (1.5.1-1) ... Selecting previously unselected package ruby-eventmachine:arm64. Preparing to unpack .../118-ruby-eventmachine_1.3~pre20220315-df4ab006-5+b2_arm64.deb ... Unpacking ruby-eventmachine:arm64 (1.3~pre20220315-df4ab006-5+b2) ... Selecting previously unselected package ruby-formatador. Preparing to unpack .../119-ruby-formatador_1.1.0-1_all.deb ... Unpacking ruby-formatador (1.1.0-1) ... Selecting previously unselected package ruby-kgio. Preparing to unpack .../120-ruby-kgio_2.11.2-2+b9_arm64.deb ... Unpacking ruby-kgio (2.11.2-2+b9) ... Selecting previously unselected package ruby-multi-json. Preparing to unpack .../121-ruby-multi-json_1.15.0-1_all.deb ... Unpacking ruby-multi-json (1.15.0-1) ... Selecting previously unselected package ruby-mustermann. Preparing to unpack .../122-ruby-mustermann_3.0.0-2_all.deb ... Unpacking ruby-mustermann (3.0.0-2) ... Selecting previously unselected package ruby-open4. Preparing to unpack .../123-ruby-open4_1.3.4-3_all.deb ... Unpacking ruby-open4 (1.3.4-3) ... Selecting previously unselected package ruby-rack. Preparing to unpack .../124-ruby-rack_3.1.16-0.1_all.deb ... Unpacking ruby-rack (3.1.16-0.1) ... Selecting previously unselected package ruby-rack-protection. Preparing to unpack .../125-ruby-rack-protection_4.1.1-5_all.deb ... Unpacking ruby-rack-protection (4.1.1-5) ... Selecting previously unselected package ruby-rack-session. Preparing to unpack .../126-ruby-rack-session_2.1.1-0.1_all.deb ... Unpacking ruby-rack-session (2.1.1-0.1) ... Selecting previously unselected package ruby-rackup. Preparing to unpack .../127-ruby-rackup_2.1.0-4_all.deb ... Unpacking ruby-rackup (2.1.0-4) ... Selecting previously unselected package ruby-raindrops:arm64. Preparing to unpack .../128-ruby-raindrops_0.20.0-2+b1_arm64.deb ... Unpacking ruby-raindrops:arm64 (0.20.0-2+b1) ... Selecting previously unselected package ruby-rspec-support. Preparing to unpack .../129-ruby-rspec-support_3.13.0c0e0m0s1-2_all.deb ... Unpacking ruby-rspec-support (3.13.0c0e0m0s1-2) ... Selecting previously unselected package ruby-rspec-core. Preparing to unpack .../130-ruby-rspec-core_3.13.0c0e0m0s1-2_all.deb ... Unpacking ruby-rspec-core (3.13.0c0e0m0s1-2) ... Selecting previously unselected package ruby-rspec-expectations. Preparing to unpack .../131-ruby-rspec-expectations_3.13.0c0e0m0s1-2_all.deb ... Unpacking ruby-rspec-expectations (3.13.0c0e0m0s1-2) ... Selecting previously unselected package ruby-rspec-mocks. Preparing to unpack .../132-ruby-rspec-mocks_3.13.0c0e0m0s1-2_all.deb ... Unpacking ruby-rspec-mocks (3.13.0c0e0m0s1-2) ... Selecting previously unselected package ruby-rspec. Preparing to unpack .../133-ruby-rspec_3.13.0c0e0m0s1-2_all.deb ... Unpacking ruby-rspec (3.13.0c0e0m0s1-2) ... Selecting previously unselected package ruby-shindo. Preparing to unpack .../134-ruby-shindo_0.3.10-2_all.deb ... Unpacking ruby-shindo (0.3.10-2) ... Selecting previously unselected package ruby-tilt. Preparing to unpack .../135-ruby-tilt_2.4.0-3_all.deb ... Unpacking ruby-tilt (2.4.0-3) ... Selecting previously unselected package ruby-sinatra. Preparing to unpack .../136-ruby-sinatra_4.1.1-5_all.deb ... Unpacking ruby-sinatra (4.1.1-5) ... Selecting previously unselected package ruby-sinatra-contrib. Preparing to unpack .../137-ruby-sinatra-contrib_4.1.1-5_all.deb ... Unpacking ruby-sinatra-contrib (4.1.1-5) ... Selecting previously unselected package unicorn. Preparing to unpack .../138-unicorn_6.1.0+git.20250131.1370f52-1+b1_arm64.deb ... Unpacking unicorn (6.1.0+git.20250131.1370f52-1+b1) ... Setting up media-types (13.0.0) ... Setting up libpipeline1:arm64 (1.5.8-1) ... Setting up wdiff (1.2.2-9) ... Setting up ruby-multi-json (1.15.0-1) ... Setting up libfile-which-perl (1.27-2) ... Setting up libnpth0t64:arm64 (1.8-3) ... Setting up ruby-ruby2-keywords (0.0.5-1) ... Setting up ruby-mustermann (3.0.0-2) ... Setting up bsdextrautils (2.41-5) ... Setting up libgpg-error0:arm64 (1.51-4) ... Setting up ruby-open4 (1.3.4-3) ... Setting up libdynaloader-functions-perl (0.004-2) ... Setting up libclass-method-modifiers-perl (2.15-1) ... Setting up ruby-power-assert (2.0.3-1) ... Setting up libmagic-mgc (1:5.46-5) ... Setting up libclone-perl:arm64 (0.47-1+b1) ... Setting up libarchive-zip-perl (1.68-1) ... Setting up libyaml-0-2:arm64 (0.2.5-2) ... Setting up libhtml-tagset-perl (3.24-1) ... Setting up libdebhelper-perl (13.24.2) ... Setting up liblwp-mediatypes-perl (6.04-2) ... Setting up libmagic1t64:arm64 (1:5.46-5) ... Setting up libtry-tiny-perl (0.32-1) ... Setting up perl-openssl-defaults:arm64 (7+b2) ... Setting up gettext-base (0.23.1-2) ... Setting up m4 (1.4.19-8) ... Setting up libgcrypt20:arm64 (1.11.0-7) ... Setting up libencode-locale-perl (1.05-3) ... Setting up file (1:5.46-5) ... Setting up ruby-concurrent (1.3.5-1) ... Setting up libelf1t64:arm64 (0.192-4) ... Setting up tzdata (2025b-4) ... Current default time zone: 'Etc/UTC' Local time is now: Wed Aug 6 03:48:58 UTC 2025. Universal Time is now: Wed Aug 6 03:48:58 UTC 2025. Run 'dpkg-reconfigure tzdata' if you wish to change it. Setting up ruby-minitest (5.25.4-3) ... Setting up autotools-dev (20240727.1) ... Setting up libgmpxx4ldbl:arm64 (2:6.3.0+dfsg-3) ... Setting up ruby-test-unit (3.6.2-1) ... Setting up ruby-net-telnet (0.2.0-1) ... Setting up ruby-csv (3.3.4-1) ... Setting up ruby-base64 (0.2.0-2) ... Setting up libunistring5:arm64 (1.3-2) ... Setting up libio-html-perl (1.004-3) ... Setting up autopoint (0.23.1-2) ... Setting up libb-hooks-op-check-perl:arm64 (0.22-3+b2) ... Setting up ruby-i18n (1.14.7-1) ... Setting up autoconf (2.72-3.1) ... Setting up ruby-rspec-support (3.13.0c0e0m0s1-2) ... Setting up libtimedate-perl (2.3300-2) ... Setting up ruby-webrick (1.9.1-1) ... Setting up libffi8:arm64 (3.4.8-2) ... Setting up dwz (0.15-1+b1) ... Setting up sensible-utils (0.0.25) ... Setting up gpgv (2.4.7-21+b3) ... Setting up libuchardet0:arm64 (0.0.8-1+b2) ... Setting up libassuan9:arm64 (3.0.2-2) ... Setting up librole-tiny-perl (2.002004-1) ... Setting up netbase (6.5) ... Setting up libsub-quote-perl (2.006008-1) ... Setting up libclass-xsaccessor-perl (1.19-4+b5) ... Setting up ruby-connection-pool (2.4.1-1) ... Setting up ruby-did-you-mean (1.6.3-2) ... Setting up libfile-dirlist-perl (0.05-3) ... Setting up libfile-homedir-perl (1.006-2) ... Setting up openssl (3.5.1-1) ... Setting up readline-common (8.2-6) ... Setting up ruby-numerizer (0.2.0-3) ... Setting up ruby-xmlrpc (0.3.3-2) ... Setting up libxml2:arm64 (2.12.7+dfsg+really2.9.14-2.1) ... Setting up liburi-perl (5.30-1) ... Setting up libfile-touch-perl (0.12-2) ... Setting up libnet-ssleay-perl:arm64 (1.94-3) ... Setting up automake (1:1.17-4) ... update-alternatives: using /usr/bin/automake-1.17 to provide /usr/bin/automake (automake) in auto mode Setting up libksba8:arm64 (1.6.7-2+b1) ... Setting up pinentry-curses (1.3.1-2) ... Setting up libfile-stripnondeterminism-perl (1.14.1-2) ... Setting up libhttp-date-perl (6.06-1) ... Setting up gettext (0.23.1-2) ... Setting up libgmp-dev:arm64 (2:6.3.0+dfsg-3) ... Setting up libfile-listing-perl (6.16-1) ... Setting up libtool (2.5.4-4) ... Setting up ruby-chronic (0.10.5-3) ... Setting up ruby-tzinfo (2.0.6-1) ... Setting up libnet-http-perl (6.23-1) ... Setting up libdevel-callchecker-perl:arm64 (0.009-2) ... Setting up intltool-debian (0.35.0+20060710.6) ... Setting up dh-autoreconf (20) ... Setting up patchutils (0.4.2-1+b1) ... Setting up ca-certificates (20250419) ... Updating certificates in /etc/ssl/certs... 150 added, 0 removed; done. Setting up libreadline8t64:arm64 (8.2-6) ... Setting up dh-strip-nondeterminism (1.14.1-2) ... Setting up libwww-robotrules-perl (6.02-1) ... Setting up groff-base (1.23.0-9) ... Setting up libhtml-parser-perl:arm64 (3.83-1+b2) ... Setting up gpgconf (2.4.7-21+b3) ... Setting up libpython3.13-stdlib:arm64 (3.13.5-2) ... Setting up libio-socket-ssl-perl (2.089-1) ... Setting up gpg (2.4.7-21+b3) ... Setting up libpython3-stdlib:arm64 (3.13.5-1) ... Setting up libhttp-message-perl (7.00-2) ... Setting up libhttp-negotiate-perl (6.01-2) ... Setting up gpg-agent (2.4.7-21+b3) ... Setting up libhttp-cookies-perl (6.11-1) ... Setting up python3.13 (3.13.5-2) ... Setting up po-debconf (1.0.21+nmu1) ... Setting up libhtml-tree-perl (5.07-3) ... Setting up libparams-classify-perl:arm64 (0.015-2+b4) ... Setting up python3 (3.13.5-1) ... Setting up rubygems-integration (1.19) ... Setting up sopv-gpgv (0.1.4-1) ... update-alternatives: using /usr/bin/sopv-gpgv to provide /usr/bin/sopv (sopv) in auto mode Setting up man-db (2.13.1-1) ... Not building database; man-db/auto-update is not 'true'. Setting up libmodule-runtime-perl (0.018-1) ... Setting up libimport-into-perl (1.002005-2) ... Setting up libmoo-perl (2.005005-1) ... Setting up debhelper (13.24.2) ... Setting up rake (13.2.1-1) ... Setting up liblwp-protocol-https-perl (6.14-1) ... Setting up libwww-perl (6.78-1) ... Setting up libruby3.3:arm64 (3.3.8-2) ... Setting up ruby-activesupport (2:7.2.2.1+dfsg-7) ... Setting up ruby-rubygems (3.6.7-2) ... Setting up devscripts (2.25.15) ... Setting up ruby3.3-dev:arm64 (3.3.8-2) ... Setting up ruby3.3 (3.3.8-2) ... Setting up libruby:arm64 (1:3.3+b1) ... Setting up ruby-eventmachine:arm64 (1.3~pre20220315-df4ab006-5+b2) ... Setting up ruby-raindrops:arm64 (0.20.0-2+b1) ... Setting up ruby-all-dev:arm64 (1:3.3+b1) ... Setting up ruby (1:3.3+b1) ... Setting up ruby-nio4r (2.7.3-1+b2) ... Setting up ruby-rspec-core (3.13.0c0e0m0s1-2) ... Setting up ruby-tilt (2.4.0-3) ... Setting up ruby-kgio (2.11.2-2+b9) ... Setting up ruby-diff-lcs (1.5.1-1) ... Setting up puma (6.6.0-4) ... Setting up ruby-delorean (2.1.0-2.1) ... Setting up ruby-rack (3.1.16-0.1) ... Setting up gem2deb-test-runner (2.2.5) ... Setting up ruby-formatador (1.1.0-1) ... Setting up unicorn (6.1.0+git.20250131.1370f52-1+b1) ... Setting up ruby-rspec-expectations (3.13.0c0e0m0s1-2) ... Setting up ruby-rspec-mocks (3.13.0c0e0m0s1-2) ... Setting up ruby-shindo (0.3.10-2) ... Setting up gem2deb (2.2.5) ... Setting up ruby-rack-session (2.1.1-0.1) ... Setting up ruby-rack-protection (4.1.1-5) ... Setting up ruby-rackup (2.1.0-4) ... Setting up ruby-rspec (3.13.0c0e0m0s1-2) ... Setting up ruby-sinatra (4.1.1-5) ... Setting up ruby-sinatra-contrib (4.1.1-5) ... Processing triggers for libc-bin (2.41-11) ... Processing triggers for ca-certificates (20250419) ... Updating certificates in /etc/ssl/certs... 0 added, 0 removed; done. Running hooks in /etc/ca-certificates/update.d... done. Reading package lists... Building dependency tree... Reading state information... Reading extended state information... Initializing package states... Writing extended state information... Building tag database... -> Finished parsing the build-deps I: Building the package I: Running cd /build/reproducible-path/ruby-excon-0.112.0/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-genchanges -S > ../ruby-excon_0.112.0-4_source.changes dpkg-buildpackage: info: source package ruby-excon dpkg-buildpackage: info: source version 0.112.0-4 dpkg-buildpackage: info: source distribution unstable dpkg-buildpackage: info: source changed by Sruthi Chandran dpkg-source --before-build . dpkg-buildpackage: info: host architecture arm64 debian/rules clean dh clean --buildsystem=ruby --with ruby dh_auto_clean -O--buildsystem=ruby dh_ruby --clean dh_autoreconf_clean -O--buildsystem=ruby dh_clean -O--buildsystem=ruby debian/rules binary dh binary --buildsystem=ruby --with ruby dh_update_autotools_config -O--buildsystem=ruby dh_autoreconf -O--buildsystem=ruby dh_auto_configure -O--buildsystem=ruby dh_ruby --configure dh_auto_build -O--buildsystem=ruby dh_ruby --build dh_auto_test -O--buildsystem=ruby dh_ruby --test create-stamp debian/debhelper-build-stamp dh_testroot -O--buildsystem=ruby dh_prep -O--buildsystem=ruby dh_auto_install --destdir=debian/ruby-excon/ -O--buildsystem=ruby dh_ruby --install /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon ┌──────────────────────────────────────────────────────────────────────────────┐ │ ruby-excon: Installing files and building extensions for ruby3.3 │ └──────────────────────────────────────────────────────────────────────────────┘ /usr/bin/ruby3.3 -S gem build --config-file /dev/null --verbose /tmp/d20250805-3966589-rxugdb/gemspec WARNING: open-ended dependency on rspec (>= 3.5.0, development) is not recommended if rspec is semantically versioned, use: add_development_dependency "rspec", "~> 3.5", ">= 3.5.0" WARNING: open-ended dependency on activesupport (>= 0, development) is not recommended use a bounded requirement, such as "~> x.y" WARNING: open-ended dependency on delorean (>= 0, development) is not recommended use a bounded requirement, such as "~> x.y" WARNING: open-ended dependency on eventmachine (>= 1.0.4, development) is not recommended if eventmachine is semantically versioned, use: add_development_dependency "eventmachine", "~> 1.0", ">= 1.0.4" WARNING: open-ended dependency on open4 (>= 0, development) is not recommended use a bounded requirement, such as "~> x.y" WARNING: open-ended dependency on rake (>= 0, development) is not recommended use a bounded requirement, such as "~> x.y" WARNING: open-ended dependency on shindo (>= 0, development) is not recommended use a bounded requirement, such as "~> x.y" WARNING: open-ended dependency on sinatra (>= 0, development) is not recommended use a bounded requirement, such as "~> x.y" WARNING: open-ended dependency on sinatra-contrib (>= 0, development) is not recommended use a bounded requirement, such as "~> x.y" WARNING: open-ended dependency on json (>= 1.8.5, development) is not recommended if json is semantically versioned, use: add_development_dependency "json", "~> 1.8", ">= 1.8.5" WARNING: open-ended dependency on puma (>= 0, development) is not recommended use a bounded requirement, such as "~> x.y" WARNING: open-ended dependency on webrick (>= 0, development) is not recommended use a bounded requirement, such as "~> x.y" WARNING: You have specified the uri: https://github.com/excon/excon for all of the following keys: homepage_uri source_code_uri Only the first one will be shown on rubygems.org WARNING: See https://guides.rubygems.org/specification-reference/ for help Successfully built RubyGem Name: excon Version: 0.112.0 File: excon-0.112.0.gem /usr/bin/ruby3.3 -S gem install --config-file /dev/null --verbose --local --verbose --no-document --ignore-dependencies --install-dir debian/ruby-excon/usr/share/rubygems-integration/all /tmp/d20250805-3966589-rxugdb/excon-0.112.0.gem /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/data/cacert.pem /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/connection.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/constants.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/error.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/extensions/uri.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/headers.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/instrumentors/logging_instrumentor.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/instrumentors/standard_instrumentor.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/middlewares/base.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/middlewares/capture_cookies.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/middlewares/decompress.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/middlewares/escape_path.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/middlewares/expects.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/middlewares/idempotent.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/middlewares/instrumentor.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/middlewares/mock.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/middlewares/redirect_follower.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/middlewares/response_parser.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/pretty_printer.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/response.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/socket.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/ssl_socket.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/test/plugin/server/exec.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/test/plugin/server/puma.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/test/plugin/server/unicorn.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/test/plugin/server/webrick.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/test/server.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/unix_socket.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/utils.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/version.rb Successfully installed excon-0.112.0 1 gem installed cd debian/ruby-excon/usr/share/rubygems-integration/all rm -rf bin rm -rf build_info rm -rf cache rm -rf doc rm -rf extensions rmdir plugins cd gems/excon-0.112.0 rm -f chmod 644 lib/excon/connection.rb lib/excon/constants.rb lib/excon/error.rb lib/excon/extensions/uri.rb lib/excon/headers.rb lib/excon/instrumentors/logging_instrumentor.rb lib/excon/instrumentors/standard_instrumentor.rb lib/excon/middlewares/base.rb lib/excon/middlewares/capture_cookies.rb lib/excon/middlewares/decompress.rb lib/excon/middlewares/escape_path.rb lib/excon/middlewares/expects.rb lib/excon/middlewares/idempotent.rb lib/excon/middlewares/instrumentor.rb lib/excon/middlewares/mock.rb lib/excon/middlewares/redirect_follower.rb lib/excon/middlewares/response_parser.rb lib/excon/pretty_printer.rb lib/excon/response.rb lib/excon/socket.rb lib/excon/ssl_socket.rb lib/excon/test/plugin/server/exec.rb lib/excon/test/plugin/server/puma.rb lib/excon/test/plugin/server/unicorn.rb lib/excon/test/plugin/server/webrick.rb lib/excon/test/server.rb lib/excon/unix_socket.rb lib/excon/utils.rb lib/excon/version.rb lib/excon.rb find lib/ -type d -empty -delete cd - cd - /usr/bin/ruby3.3 /usr/bin/gem2deb-test-runner ┌──────────────────────────────────────────────────────────────────────────────┐ │ Checking Rubygems dependency resolution on ruby3.3 │ └──────────────────────────────────────────────────────────────────────────────┘ RUBYLIB=. GEM_PATH=/build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all:/build/reproducible-path/ruby-excon-0.112.0/debian/.debhelper/generated/_source/home/.local/share/gem/ruby/3.3.0:/var/lib/gems/3.3.0:/usr/local/lib/ruby/gems/3.3.0:/usr/lib/ruby/gems/3.3.0:/usr/lib/aarch64-linux-gnu/ruby/gems/3.3.0:/usr/share/rubygems-integration/3.3.0:/usr/share/rubygems-integration/all:/usr/lib/aarch64-linux-gnu/rubygems-integration/3.3.0 ruby3.3 -e gem\ \"excon\" ┌──────────────────────────────────────────────────────────────────────────────┐ │ Run tests for ruby3.3 from debian/ruby-tests.rake │ └──────────────────────────────────────────────────────────────────────────────┘ RUBYLIB=. GEM_PATH=/build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all:/build/reproducible-path/ruby-excon-0.112.0/debian/.debhelper/generated/_source/home/.local/share/gem/ruby/3.3.0:/var/lib/gems/3.3.0:/usr/local/lib/ruby/gems/3.3.0:/usr/lib/ruby/gems/3.3.0:/usr/lib/aarch64-linux-gnu/ruby/gems/3.3.0:/usr/share/rubygems-integration/3.3.0:/usr/share/rubygems-integration/all:/usr/lib/aarch64-linux-gnu/rubygems-integration/3.3.0 ruby3.3 -S rake --rakelibdir /gem2deb-nonexistent -f debian/ruby-tests.rake sh: 1: git: not found /usr/bin/ruby3.3 -S shindo Excon bad server interaction header splitting prevents key splitting + raises Excon::Error::InvalidHeaderKey prevents value splitting + raises Excon::Error::InvalidHeaderValue bad server: causes EOFError with no content length and no chunking without a block response.body + returns "hello" with a block body from chunks + returns "hello" eof server: causes EOFError request + raises Excon::Error::Socket Excon basics + returns true nonblock => true, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 explicit uri passed to connection GET /content-length/100 + returns 200 Excon streaming basics http + returns true simple blocking request on streaming endpoint + returns ["Hellostreamyworld", "response time ok"] simple blocking request on streaming endpoint with fixed length + returns ["Hellostreamyworld", "response time ok"] simple request with response_block on streaming endpoint + returns [["Hello", "streamy", "world"], "response times ok"] simple request with response_block on streaming endpoint with fixed length + returns [["Hello", "streamy", "world"], "response times ok"] https + returns true simple blocking request on streaming endpoint + returns ["Hellostreamyworld", "response time ok"] simple blocking request on streaming endpoint with fixed length + returns ["Hellostreamyworld", "response time ok"] simple request with response_block on streaming endpoint + returns [["Hello", "streamy", "world"], "response times ok"] simple request with response_block on streaming endpoint with fixed length + returns [["Hello", "streamy", "world"], "response times ok"] Excon basics (Basic Auth Pass) + returns true nonblock => true, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 with frozen args + returns 200 with user/pass on request + returns 200 with user/pass on connection and request + returns 200 Excon basics (Basic Auth Fail) response.status for correct user, no password + returns 401 response.status for correct user, wrong password + returns 401 response.status for wrong user, correct password + returns 401 Excon basics (ssl) + returns true nonblock => true, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 [2025-08-05 15:49:24] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' [2025-08-05 15:49:25] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' Excon basics verify_hostname (ssl) + returns true response.status + returns 200 Excon ssl verify peer (ssl) + returns true response.status + returns 200 + returns true response.status + returns 200 + returns true response.status + returns 200 Excon ssl verify peer (ssl cert store) + returns true response.status + returns 200 Excon basics (ssl file) (focus) GET /content-length/100 + raises Excon::Error::Socket + returns true nonblock => true, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 [2025-08-05 15:49:35] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' [2025-08-05 15:49:36] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' [2025-08-05 15:49:36] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' [2025-08-05 15:49:36] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' [2025-08-05 15:49:39] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' Excon basics (ssl chain) (focus) GET /content-length/100 + raises Excon::Error::Socket + returns true nonblock => true, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 [2025-08-05 15:49:44] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' [2025-08-05 15:49:44] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' [2025-08-05 15:49:46] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' [2025-08-05 15:49:47] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' Excon basics (ssl file paths) (focus) GET /content-length/100 + raises Excon::Error::Socket + returns true nonblock => true, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 [2025-08-05 15:49:55] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' [2025-08-05 15:49:55] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' Excon basics (ssl string) (focus) + returns true nonblock => true, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 [2025-08-05 15:50:01] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' Excon basics (Unix socket) + returns true nonblock => true, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" # Time.parse(response.headers['Date']).is_a?(Time) # !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip # returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" # Time.parse(response.headers['Date']).is_a?(Time) # !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip # returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" # Time.parse(response.headers['Date']).is_a?(Time) # !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip # returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" # Time.parse(response.headers['Date']).is_a?(Time) # !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip # returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 explicit uri passed to connection GET /content-length/100 + returns 200 http Host header is empty GET /headers + returns "" Excon basics (reusable local port) (localportreuse) has a local port + returns true local port can be re-bound # returns "xxxxxxxxxx" Excon Connection #socket connects, sets data[:remote_ip] + returns "127.0.0.1" persistent connections + successful uninterrupted request + resets connection after interrupt + fork safety inspect redaction + authorization/proxy-authorization headers concealed for user & pass + password param concealed for user & pass + password param not mutated for user & pass + proxy password param concealed for proxy: user & pass + proxy password param not mutated for proxy: user & pass + authorization/proxy-authorization headers concealed for email & pass + password param concealed for email & pass + password param not mutated for email & pass + proxy password param concealed for proxy: email & pass + proxy password param not mutated for proxy: email & pass + authorization/proxy-authorization headers concealed for user no pass + authorization/proxy-authorization headers concealed for pass no user + password param concealed for pass no user + password param not mutated for pass no user + proxy password param concealed for proxy: pass no user + proxy password param not mutated for proxy: pass no user HTTPStatusError request/response debugging Excon::Error knows about pertinent errors new returns an Error + returns true new raises errors for bad URIs + returns true new raises errors for bad paths + returns true can raise standard error and catch standard error + returns true can raise legacy errors and catch legacy errors + returns true can raise standard error and catch legacy errors + returns true can raise with status_error() and catch with standard error + returns true can raise with status_error() and catch with legacy error + returns true can raise with legacy status_error() and catch with legacy + returns true can raise with legacy status_error() and catch with standard + returns true message does not include response or response info + returns true message includes only request info + returns true message includes only response info + returns true message include request and response info + returns true Excon response header support Excon::Headers storage stores and retrieves as received + returns "expected" enumerates keys as received contains Exact-Case + returns true contains Another-Fixture + returns true supports case-insensitive access + returns "expected" but still returns nil for missing keys + returns nil Hash methods that should support case-insensitive access #assoc + returns ["exact-case", "expected"] #delete with just a key + returns "yes" with a proc + returns "called with notpresent" #fetch when present + returns "expected" with a default value + returns "default" with a default proc + returns "got missing" #has_key? when present + returns true when absent + returns false #values_at all present + returns ["expected", "another"] some missing + returns ["expected", nil] Response#get_header with variable header capitalization response.get_header("mixedcase-header") + returns "MixedCase" response.get_header("uppercase-header") + returns "UPPERCASE" response.get_header("lowercase-header") + returns "lowercase" when provided key capitalization varies response.get_header("MIXEDCASE-HEADER") + returns "MixedCase" response.get_header("MiXeDcAsE-hEaDeR") + returns "MixedCase" when header is unavailable response.get_header("missing") + returns nil logging instrumentor connection logger + returns true connection logger with query as hash + returns true Excon middleware succeeds without defining valid_parameter_keys Excon support for middlewares that return canned responses does not mutate the canned response body + returns "canned" yields non-mutated body to response_block + returns "canned" Excon redirecting with cookie preserved second request will send cookies set by the first + returns "ok" second request will send multiple cookies set by the first + returns "ok" runs normally when there are no cookies set + returns "ok" Excon Decompress Middleware gzip response body decompressed + returns "hello world" server sent content-encoding + returns "gzip" removes processed encoding from header + returns "" empty response body + returns "" deflate response body decompressed + returns "hello world" server sent content-encoding + returns "deflate" removes processed encoding from header + returns "" deflate-raw response body decompressed + returns "hello world" server sent content-encoding + returns "deflate" removes processed encoding from header + returns "" with pre-encoding server sent content-encoding + returns "other, gzip" processed encoding removed from header + returns "other" response body decompressed + returns "hello world" with post-encoding server sent content-encoding + returns "gzip, other" unprocessed since last applied is unknown + returns "gzip, other" response body still compressed + returns "hello world" with a :response_block server sent content-encoding + returns "gzip" unprocessed since :response_block was used + returns "gzip" :response_block passed unprocessed data + returns "hello world" adds Accept-Encoding if needed without a :response_block + returns "deflate, gzip" with a :response_block + returns nil Excon Decompress Middleware encoded uri passed to connection GET /echo%20dirty + returns 200 unencoded uri passed to connection GET /echo dirty + returns 200 Excon request idempotencey Non-idempotent call with an erroring socket + raises Excon::Error::Socket Idempotent request with socket erroring first 3 times + returns 200 Idempotent request with socket erroring first 5 times + raises Excon::Error::Socket Lowered retry limit with socket erroring first time + returns 200 Lowered retry limit with socket erroring first 3 times + raises Excon::Error::Socket Raised retry limit with socket erroring first 5 times + returns 200 Raised retry limit with socket erroring first 9 times + raises Excon::Error::Socket Retry limit in constructor with socket erroring first 5 times + returns 200 Retry limit and sleep in constructor with socket erroring first 2 times + returns 200 Retry limit and sleep in constructor with socket erroring first 2 times + raises Excon::Error::Socket Idempotent request with custom error first 3 times + returns 200 Idempotent request with custom error first 5 times + raises RuntimeError Overriding default retry_errors + raises Excon::Error::Socket request_block rewound + returns true response_block rewound + returns true Excon instrumentation basic notification + returns ["excon.request", "excon.response"] captures scheme, host, port, and path + returns [:host, :path, :port, :scheme] params in request overwrite those in constructor + returns "/cheezburger" notify on retry + returns 3 notify on error + raises Excon::Error::Socket + returns true filtering + raises Excon::Error::Socket + returns ["excon.request", "excon.error"] more filtering + raises Excon::Error::Socket + returns ["excon.retry", "excon.retry", "excon.retry"] indicates duration + returns true standard instrumentor success + raises Excon::Error::Socket + returns ["excon.request", "excon.retry", "excon.retry", "excon.retry", "excon.error"] authorization header REDACT + raises Excon::Error::Socket + does not appear in response + does not mutate Authorization value password REDACT + raises Excon::Error::Socket + does not appear in response + does not mutate password value proxy password REDACT + raises Excon::Error::Socket + does not appear in response + does not mutate password value use our own instrumentor + raises Excon::Error::Socket + returns ["excon.request", "excon.retry", "excon.retry", "excon.retry", "excon.error"] always passes the block + returns ["excon.request", "excon.response"] does not generate events when not provided + returns 0 allows setting the prefix + raises Excon::Error::Socket + returns ["gug.request", "gug.retry", "gug.retry", "gug.retry", "gug.error"] allows setting the prefix when not idempotent + raises Excon::Error::Socket + returns ["gug.request", "gug.error"] works unmocked + returns ["excon.request", "excon.response"] Excon stubs missing stub + raises Excon::Error::StubNotFound stub({}) + raises ArgumentError stub({}, {}) {} + raises ArgumentError stub({:method => :get}, {:body => 'body', :status => 200}) response.body + returns "body" response.headers + returns {} response.status + returns 200 response_block yields body + returns "body" response.body empty with response_block + returns "" stub({:path => %r{/tests/(S+)}}, {:body => $1, :status => 200}) response.body + returns "test" response.headers + returns {} response.status + returns 200 stub({:body => 'body', :method => :get}) {|params| {:body => params[:body], :headers => params[:headers], :status => 200}} response.body + returns "body" response.headers + returns {"Accept"=>"*/*", "Host"=>"127.0.0.1:9292", "User-Agent"=>"excon/0.112.0"} response.status + returns 200 response_block yields body + returns "body" response.body empty with response_block + returns "" stub({:body => File.open(...), :method => :get}, { :status => 200 }) response.status + returns 200 invalid stub response + raises Excon::Error::InvalidStub mismatched stub + raises Excon::Error::StubNotFound allow mismatched stub + returns 200 stub({}, {:body => 'x' * (Excon::DEFAULT_CHUNK_SIZE + 1)}) + response_block yields body response.body empty with response_block + returns "" stub({:url => 'https://user:pass@foo.bar.com:9999/baz?quux=true'}, {:status => 200}) + get(:expects => 200) stub({}, {:status => 404, :body => 'Not Found'} request(:expects => 200, :method => :get, :path => '/') + raises Excon::Error::NotFound Expects exception should contain response object + returns Excon::Response + request(:expects => 200, :method => :get, :path => '/') with block does not invoke the block since it raises an error stub_for({}) stub_for({}) + returns [{}, {}] unstub({}) unstub({}) + returns [{}, {}] request(:method => :get) + raises Excon::Error::StubNotFound unstub({path: %r{/path}}) unstub({path: %r{/path}}) + returns [{:path=>/\/path/, :captures=>{:headers=>{}}}, {}] unstub non-existent stub unstub({}) + returns nil global stubs get on a different thread + returns "2" get on main thread + returns "2" thread-local stubs get on a different thread + returns "2" get on main thread + returns "1" Excon redirector support request(:method => :get, :path => '/old').body + returns "new" Excon redirector support with redirect loop request(:method => :get, :path => '/old') + raises Excon::Error::TooManyRedirects Excon redirect support for relative Location headers request(:method => :get, :path => '/old').body + returns "new" Excon redirect support for relative Location headers with dot segments request(:method => :get, :path => '/foo/baz/').body + returns "/foo/bar/" Excon redirecting post request request not have content-length and body + returns "ok" Pipelined Requests with default :persistent => true + connection is persistent with default :persistent => false + connection is persistent per call to #requests Excon proxy support proxy configuration no proxy connection.data[:proxy] + returns nil empty proxy connection.data[:proxy] + returns nil with fully-specified proxy: https://myproxy.net:8080 connection.data[:proxy][:host] + returns "myproxy.net" connection.data[:proxy][:port] + returns 8080 connection.data[:proxy][:scheme] + returns "https" with fully-specified Unix socket proxy: unix:/// connection.data[:proxy][:host] + returns nil connection.data[:proxy][:port] + returns nil connection.data[:proxy][:scheme] + returns "unix" connection.data[:proxy][:path] + returns "/tmp/myproxy.sock" with complete proxy config from the environment lowercase an http connection connection.data[:proxy][:host] + returns "myproxy" connection.data[:proxy][:port] + returns 8080 connection.data[:proxy][:scheme] + returns "http" with disable_proxy set connection.data[:proxy] + returns nil an https connection connection.data[:proxy][:host] + returns "mysecureproxy" connection.data[:proxy][:port] + returns 8081 connection.data[:proxy][:scheme] + returns "http" with disable_proxy set connection.data[:proxy] + returns nil http proxy from the environment overrides config connection.data[:proxy][:host] + returns "myproxy" connection.data[:proxy][:port] + returns 8080 an http connection in no_proxy connection.data[:proxy] + returns nil an http connection not completely matching no_proxy connection.data[:proxy][:host] + returns "myproxy" an http connection with subdomain in no_proxy connection.data[:proxy] + returns nil uppercase an http connection connection.data[:proxy][:host] + returns "myproxy" connection.data[:proxy][:port] + returns 8080 connection.data[:proxy][:scheme] + returns "http" with disable_proxy set connection.data[:proxy] + returns nil an https connection connection.data[:proxy][:host] + returns "mysecureproxy" connection.data[:proxy][:port] + returns 8081 connection.data[:proxy][:scheme] + returns "http" with disable_proxy set connection.data[:proxy] + returns nil http proxy from the environment overrides config connection.data[:proxy][:host] + returns "myproxy" connection.data[:proxy][:port] + returns 8080 an http connection in no_proxy connection.data[:proxy] + returns nil an http connection not completely matching no_proxy connection.data[:proxy][:host] + returns "myproxy" an http connection with subdomain in no_proxy connection.data[:proxy] + returns nil with only http_proxy config from the environment an https connection connection.data[:proxy][:host] + returns "myproxy" connection.data[:proxy][:port] + returns 8080 connection.data[:proxy][:scheme] + returns "http" with a unix socket proxy config from the environment an https connection connection.data[:proxy][:host] + returns nil connection.data[:proxy][:port] + returns nil connection.data[:proxy][:scheme] + returns "unix" connection.data[:proxy][:path] + returns "/tmp/myproxy.sock" http proxying: http://foo.com:8080 response.status + returns 200 sent Request URI + returns "http://foo.com:8080/bar?alpha=kappa" sent Sent-Host header + returns "foo.com:8080" sent Proxy-Connection header + returns "Keep-Alive" response.body (proxied content) + returns "proxied content" http proxying: http://user:pass@foo.com:8080 response.status + returns 200 sent Request URI + returns "http://foo.com:8080/bar?alpha=kappa" sent Host header + returns "foo.com:8080" sent Proxy-Connection header + returns "Keep-Alive" response.body (proxied content) + returns "proxied content" http proxying over unix socket: http://foo.com:8080 response.status + returns 200 sent Sent-Host header + returns "foo.com:8080" sent Proxy-Connection header + returns "Keep-Alive" response.body (proxied content) + returns "proxied content" Excon query string variants :query => {:foo => 'bar'} query string sent + returns "foo=bar" :query => {:foo => nil} query string sent + returns "foo" :query => {:foo => 'bar', :me => nil} + query string sent includes 'foo=bar' + query string sent includes 'me' :query => {:foo => 'bar', :me => 'too'} + query string sent includes 'foo=bar' + query string sent includes 'me=too' :query => {'foo[]' => ['bar', 'baz'], :me => 'too'} + query string sent includes 'foo%5B%5D=bar' + query string sent includes 'foo%5B%5D=baz' + query string sent includes 'me=too' :query => {'foo%=#' => 'bar%=#'} query string sent + returns "foo%25%3D%23=bar%25%3D%23" :query => {'foo%=#' => nil} query string sent + returns "foo%25%3D%23" Excon request methods empty headers sent + Excon.post header order host is the first sent header by default + returns "host: localhost:9292" Excon request methods one-offs Excon.get + returns "GET" Excon.post + returns "POST" Excon.delete + returns "DELETE" with a connection object connection.get + returns "GET" connection.post + returns "POST" connection.delete + returns "DELETE" not modifies path argument + returns "path" Request Tests persistent connections with default :persistent => true, 127.0.0.1:9292 + uses a persistent connection + :persistent => false resets connection with default :persistent => false, 127.0.0.1:9292 + does not use a persistent connection + :persistent => true enables persistence with default :persistent => true, [::1]:9293 + uses a persistent connection + :persistent => false resets connection with default :persistent => false, [::1]:9293 + does not use a persistent connection + :persistent => true enables persistence Excon Response Parsing responses with chunked transfer-encoding simple response + returns "hello world" with :response_block simple response + returns [["hello ", nil, nil], ["world", nil, nil]] simple response has empty body + returns "" with expected response status + returns [["hello ", nil, nil], ["world", nil, nil]] with unexpected response status + returns "hello world" merges trailers into headers + returns "one, two, three, four, five, six" removes 'chunked' from Transfer-Encoding + returns nil responses with content-length simple response + returns "hello world" with :response_block simple response + returns [["hello", 6, 11], [" worl", 1, 11], ["d", 0, 11]] simple response has empty body + returns "" with expected response status + returns [["hello", 6, 11], [" worl", 1, 11], ["d", 0, 11]] with unexpected response status + returns "hello world" responses with unknown length simple response + returns "hello world" with :response_block simple response + returns [["hello", nil, nil], [" worl", nil, nil], ["d", nil, nil]] simple response has empty body + returns "" with expected response status + returns [["hello", nil, nil], [" worl", nil, nil], ["d", nil, nil]] with unexpected response status + returns "hello world" cookies parses cookies into array + returns ["one, two", "three, four"] header continuation proper continuation + returns "one, two, three, four, five, six" malformed header + raises Excon::Error::Socket malformed header continuation + raises Excon::Error::Socket status line parsing proper status code + returns 404 proper reason phrase + returns "Not Found" socket chunk_size: read_nonblock readline nonblock is efficient + returns ["one\n", 1, [8, "EOF"]] readline nonblock works sequentially + returns [["one\n", "two\n"], 1, [8, "EOF"]] readline nonblock can handle partial reads + returns [["one\n", "two\n"], 2, [5, "EAGAIN", 3, "EOF"]] readline nonblock before read + returns [["one\n", "two\n"], 2, [8, "EOF"]] read_nonblock does not EOF early + returns [["one", "two"], 2, [3, "EAGAIN", 3, "EOF"]] chunk_size: 512 read_nonblock readline nonblock is efficient + returns ["one\n", 1, [8, "EOF"]] readline nonblock works sequentially + returns [["one\n", "two\n"], 1, [8, "EOF"]] readline nonblock can handle partial reads + returns [["one\n", "two\n"], 2, [5, "EAGAIN", 3, "EOF"]] readline nonblock before read + returns [["one\n", "two\n"], 2, [8, "EOF"]] read_nonblock does not EOF early + returns [["one", "two"], 2, [3, "EAGAIN", 3, "EOF"]] Excon thread safety thread_safe_sockets configuration thread_safe_sockets default + returns true with thread_safe_sockets set false + returns false + long_thread + short_thread read should timeout nonblock => false hits read_timeout + raises Excon::Error::Timeout nonblock => true hits read_timeout + raises Excon::Error::Timeout Excon::Utils #connection_uri using UNIX scheme + returns "unix:///tmp/some.sock" using HTTP scheme with default port + returns "http://foo.com:80" without default port + returns "http://foo.com" #request_uri using UNIX scheme without query + returns "unix:///tmp/some.sock/some/path" with query + returns "unix:///tmp/some.sock/some/path?bar=that&foo=this" using HTTP scheme without query + returns "http://foo.com:80/some/path" with query + returns "http://foo.com:80/some/path?bar=that&foo=this" #escape_uri + returns "/hello%20excon" #unescape_uri + returns "/hello excon" #unescape_form + returns "message=We love excon!" #split_header_value + returns ["value"] #split_header_value + returns ["value1", "value2"] #split_header_value + returns ["text/html;q=0.5", "application/json; version=1"] #split_header_value + returns ["foo/bar;key=\"A,B,C\""] #split_header_value + returns [] 13 pending and 1457 succeeded in 65.07714783657006 seconds /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 Excon::Error #status_errors .keys returns the pertinent HTTP error numbers #new returns an Excon::Error raises errors for bad URIs raises errors for bad paths when remaining backwards compatible #new should raise standard error and catch standard error should raise legacy errors and catch legacy errors should raise standard error and catch legacy errors #status_error should raise with status_error() and catch with standard error should raise with status_error() and catch with legacy error should raise with legacy status_error() and catch with standard when exceptions are rescued when :debug_request and :debug_response are switched off exception message does not include response or response info when :debug_request and :debug_response are switched on exception message includes request and response info when only :debug_request is turned on exception message includes only request info when only :debug_response is turned on exception message includes only response info Excon::Test::Server when the web server is webrick it should behave like a excon test server returns an instance starts the server stops the server when the web server is unicorn bound to a tcp socket it should behave like a excon test server returns an instance starts the server stops the server bound to a unix socket it should behave like a excon test server returns an instance starts the server stops the server when the web server is puma it should behave like a excon test server returns an instance starts the server stops the server when the web server is a executable it should behave like a excon test server returns an instance starts the server stops the server Excon has a version number Excon::Connection when an explicit uri is passed .new returns an instance when :method is :get and :path is /content-length/100 #request returns an Excon::Response Excon::Response #status returns 200 when nonblock is true and persistent is false when :method is get and :path is /content-length/100 #request returns an Excon::Response Excon::Response #status returns 200 #status returns 200 #headers ["Content-Length"] returns 100 ["Content-Type"] returns "text/html;charset=utf-8" ['Date'] returns a valid date ['Server'] matches /^WEBrick/ ['Custom'] returns Foo: bar #remote_ip returns 127.0.0.1 when tcp_nodelay is true #request returns an Excon::Response Excon::Response #body .status #returns 200 when utilizing deprecated block usage #request yields with a chunk, remaining length, and total length completes with expected data when utilizing response_block usage #request yields a chunk, remaining length, and total_length completes with expected data when method is :post when :path is /body-sink when a body parameter is supplied returns an Excon::Response Excon::Response #body equals "5000000" when the body parameter is an empty string returns an Excon::Response Excon::Response #body equals "0" when :path is /echo when a file handle is the body paramter Excon::Response #body equals "x" * 100 + "\n" when a string is the body paramter does not change the enconding of the body without request_block Excon::Response #body equals 'x' * 100) when a request_block paramter is supplied Excon::Response #body equals'x' * 100 when a multi-byte string is the body paramter Excon::Response #body properly concatenates request+headers and body when nonblock is true and persistent is true when :method is get and :path is /content-length/100 #request returns an Excon::Response Excon::Response #status returns 200 #status returns 200 #headers ["Content-Length"] returns 100 ["Content-Type"] returns "text/html;charset=utf-8" ['Date'] returns a valid date ['Server'] matches /^WEBrick/ ['Custom'] returns Foo: bar #remote_ip returns 127.0.0.1 when tcp_nodelay is true #request returns an Excon::Response Excon::Response #body .status #returns 200 when utilizing deprecated block usage #request yields with a chunk, remaining length, and total length completes with expected data when utilizing response_block usage #request yields a chunk, remaining length, and total_length completes with expected data when method is :post when :path is /body-sink when a body parameter is supplied returns an Excon::Response Excon::Response #body equals "5000000" when the body parameter is an empty string returns an Excon::Response Excon::Response #body equals "0" when :path is /echo when a file handle is the body paramter Excon::Response #body equals "x" * 100 + "\n" when a string is the body paramter does not change the enconding of the body without request_block Excon::Response #body equals 'x' * 100) when a request_block paramter is supplied Excon::Response #body equals'x' * 100 when a multi-byte string is the body paramter Excon::Response #body properly concatenates request+headers and body when nonblock is false and persistent is true when :method is get and :path is /content-length/100 #request returns an Excon::Response Excon::Response #status returns 200 #status returns 200 #headers ["Content-Length"] returns 100 ["Content-Type"] returns "text/html;charset=utf-8" ['Date'] returns a valid date ['Server'] matches /^WEBrick/ ['Custom'] returns Foo: bar #remote_ip returns 127.0.0.1 when tcp_nodelay is true #request returns an Excon::Response Excon::Response #body .status #returns 200 when utilizing deprecated block usage #request yields with a chunk, remaining length, and total length completes with expected data when utilizing response_block usage #request yields a chunk, remaining length, and total_length completes with expected data when method is :post when :path is /body-sink when a body parameter is supplied returns an Excon::Response Excon::Response #body equals "5000000" when the body parameter is an empty string returns an Excon::Response Excon::Response #body equals "0" when :path is /echo when a file handle is the body paramter Excon::Response #body equals "x" * 100 + "\n" when a string is the body paramter does not change the enconding of the body without request_block Excon::Response #body equals 'x' * 100) when a request_block paramter is supplied Excon::Response #body equals'x' * 100 when a multi-byte string is the body paramter Excon::Response #body properly concatenates request+headers and body when nonblock is false and persistent is false when :method is get and :path is /content-length/100 #request returns an Excon::Response Excon::Response #status returns 200 #status returns 200 #headers ["Content-Length"] returns 100 ["Content-Type"] returns "text/html;charset=utf-8" ['Date'] returns a valid date ['Server'] matches /^WEBrick/ ['Custom'] returns Foo: bar #remote_ip returns 127.0.0.1 when tcp_nodelay is true #request returns an Excon::Response Excon::Response #body .status #returns 200 when utilizing deprecated block usage #request yields with a chunk, remaining length, and total length completes with expected data when utilizing response_block usage #request yields a chunk, remaining length, and total_length completes with expected data when method is :post when :path is /body-sink when a body parameter is supplied returns an Excon::Response Excon::Response #body equals "5000000" when the body parameter is an empty string returns an Excon::Response Excon::Response #body equals "0" when :path is /echo when a file handle is the body paramter Excon::Response #body equals "x" * 100 + "\n" when a string is the body paramter does not change the enconding of the body without request_block Excon::Response #body equals 'x' * 100) when a request_block paramter is supplied Excon::Response #body equals'x' * 100 when a multi-byte string is the body paramter Excon::Response #body properly concatenates request+headers and body Excon::Socket passes the dns_timeouts to Resolv::DNS::Config (PENDING: Temporarily skipped with xit) when the DNS server is unreachable returns a Excon::Error::Socket Excon when dispatching requests to a server that does not supply response headers when no block is given should rescue from an EOFError and return response when a block is given should rescue from EOFError and return response to a server that prematurely aborts the request with no response should raise an EOFError Excon::Socket resolv_resolver config reaches Resolv::DNS::Config (PENDING: Temporarily skipped with xit) when the DNS server is unreachable returns a Excon::Error::Socket Excon::Connection blocking connection when timeout is not set does not error when timeout is not triggered does not error when timeout is triggered does not raise non-blocking connection when timeout is not set does not error when timeout is not triggered does not error when timeout is triggered returns a request Excon::Error::Timeout when read timeout is triggered returns a read Excon::Error::Timeout Excon::Connection when speaking to a UNIX socket via Excon.new accepts the unix:/ URL Host header handling sends an empty Host= by default doesn't overwrite an explicit Host header Excon::Connection validating parameters with default middleware Connection.new warns on invalid parameter keys Connection#request warns on invalid parameter keys with custom middleware at instantiation Connection.new accepts parameters that are valid for the provided middleware Connection.new warns on parameters that are not valid for the provided middleware Connection#request accepts parameters that are valid for the provided middleware Connection#request warns on parameters that are not valid for the provided middleware with custom middleware at request time Connection#request accepts parameters that are valid for the provided middleware Connection#request warns on parameters that are not valid for the request middleware Connection#request warns on parameters from instantiation that are not valid for the request middleware Pending: (Failures listed here are expected and do not affect your suite's status) 1) Excon::Socket passes the dns_timeouts to Resolv::DNS::Config # Temporarily skipped with xit # ./spec/requests/dns_timeout_spec.rb:10 2) Excon::Socket resolv_resolver config reaches Resolv::DNS::Config # Temporarily skipped with xit # ./spec/requests/resolv_resolver_spec.rb:14 Finished in 5.87 seconds (files took 0.29035 seconds to load) 155 examples, 0 failures, 2 pending ┌──────────────────────────────────────────────────────────────────────────────┐ │ dh_ruby --install finished │ └──────────────────────────────────────────────────────────────────────────────┘ dh_installdocs -O--buildsystem=ruby dh_ruby_fixdocs -O--buildsystem=ruby dh_installchangelogs -O--buildsystem=ruby dh_installsystemduser -O--buildsystem=ruby dh_perl -O--buildsystem=ruby dh_link -O--buildsystem=ruby dh_strip_nondeterminism -O--buildsystem=ruby dh_compress -X.rb -O--buildsystem=ruby dh_fixperms -O--buildsystem=ruby dh_missing -O--buildsystem=ruby dh_ruby_fixdepends -O--buildsystem=ruby dh_installdeb -O--buildsystem=ruby dh_gencontrol -O--buildsystem=ruby dh_md5sums -O--buildsystem=ruby dh_builddeb -O--buildsystem=ruby dpkg-deb: building package 'ruby-excon' in '../ruby-excon_0.112.0-4_all.deb'. dpkg-genbuildinfo --build=binary -O../ruby-excon_0.112.0-4_arm64.buildinfo dpkg-genchanges --build=binary -O../ruby-excon_0.112.0-4_arm64.changes dpkg-genchanges: info: binary-only upload (no source code included) dpkg-source --after-build . dpkg-buildpackage: info: binary-only upload (no source included) dpkg-genchanges: info: not including original source code in upload I: copying local configuration I: unmounting dev/ptmx filesystem I: unmounting dev/pts filesystem I: unmounting dev/shm filesystem I: unmounting proc filesystem I: unmounting sys filesystem I: cleaning the build env I: removing directory /srv/workspace/pbuilder/3958215 and its subdirectories I: Current time: Tue Aug 5 15:50:27 -12 2025 I: pbuilder-time-stamp: 1754452227 Wed Aug 6 03:50:28 UTC 2025 I: 1st build successful. Starting 2nd build on remote node codethink03-arm64.debian.net. Wed Aug 6 03:50:28 UTC 2025 I: Preparing to do remote build '2' on codethink03-arm64.debian.net. Wed Aug 6 03:50:28 UTC 2025 - checking /var/lib/jenkins/offline_nodes if codethink03-arm64.debian.net is marked as down. Wed Aug 6 03:50:28 UTC 2025 - checking via ssh if codethink03-arm64.debian.net is up. removed '/tmp/read-only-fs-test-FsH536' ==================================================================================== Tue Sep 8 10:13:29 UTC 2026 - running /srv/jenkins/bin/reproducible_build.sh (for job /srv/jenkins/bin/reproducible_build.sh) on codethink03-arm64, called using "2 ruby-excon trixie /srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz 0.112.0-4" as arguments. Tue Sep 8 10:13:29 UTC 2026 - actually running "reproducible_build.sh" (md5sum 44ec6a3142940d5e9a7ab76543d96029) as "/tmp/jenkins-script-mXNupPv2" $ git clone https://salsa.debian.org/qa/jenkins.debian.net.git ; more CONTRIBUTING Tue Sep 8 10:13:30 UTC 2026 I: Downloading source for trixie/ruby-excon=0.112.0-4 Reading package lists... NOTICE: 'ruby-excon' packaging is maintained in the 'Git' version control system at: https://salsa.debian.org/ruby-team/ruby-excon.git Please use: git clone https://salsa.debian.org/ruby-team/ruby-excon.git to retrieve the latest (possibly unreleased) updates to the package. Need to get 248 kB of source archives. Get:1 http://deb.debian.org/debian trixie/main ruby-excon 0.112.0-4 (dsc) [2078 B] Get:2 http://deb.debian.org/debian trixie/main ruby-excon 0.112.0-4 (tar) [240 kB] Get:3 http://deb.debian.org/debian trixie/main ruby-excon 0.112.0-4 (diff) [6416 B] Fetched 248 kB in 0s (6102 kB/s) Download complete and in download only mode Reading package lists... NOTICE: 'ruby-excon' packaging is maintained in the 'Git' version control system at: https://salsa.debian.org/ruby-team/ruby-excon.git Please use: git clone https://salsa.debian.org/ruby-team/ruby-excon.git to retrieve the latest (possibly unreleased) updates to the package. Need to get 248 kB of source archives. Get:1 http://deb.debian.org/debian trixie/main ruby-excon 0.112.0-4 (dsc) [2078 B] Get:2 http://deb.debian.org/debian trixie/main ruby-excon 0.112.0-4 (tar) [240 kB] Get:3 http://deb.debian.org/debian trixie/main ruby-excon 0.112.0-4 (diff) [6416 B] Fetched 248 kB in 0s (6102 kB/s) Download complete and in download only mode ============================================================================= Re-Building ruby-excon in trixie on arm64 on codethink03-arm64 now. Date: Tue Sep 8 11:13:30 BST 2026 Date UTC: Tue Sep 8 10:13:30 UTC 2026 ============================================================================= ++ mktemp -t pbuilderrc_XXXX --tmpdir=/srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz + local TMPCFG=/srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz/pbuilderrc_Hdpr + case ${ARCH} in + case $ARCH in + locale=nl_BE + language=nl + case "${SUITE}" in + reproducible_buildflags=+all + extra_deb_build_options= + case "${SRCPACKAGE}" in + cat + echo BUILDDIR=/build/reproducible-path + '[' ruby-excon = debian-installer -o ruby-excon = debian-installer-netboot-images ']' + pbuilder_options=() + local pbuilder_options + DEBBUILDOPTS=-b + BINARYTARGET= + '[' ruby-excon = u-boot ']' + case "${SRCPACKAGE}" in + PBUILDERTIMEOUT=24 + local PRESULT=0 + sudo timeout -k 24.1h 24h /usr/bin/ionice -c 3 /usr/bin/nice -n 11 /usr/bin/unshare --uts -- /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz/pbuilderrc_Hdpr --distribution trixie --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/trixie-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz/b2 --logfile b2/build.log ruby-excon_0.112.0-4.dsc W: /root/.pbuilderrc does not exist I: Logging to b2/build.log I: pbuilder: network access will be disabled during build I: Current time: Wed Sep 9 00:13:30 +14 2026 I: pbuilder-time-stamp: 1788862410 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/trixie-reproducible-base.tgz] I: copying local configuration W: --override-config is not set; not updating apt.conf Read the manpage for details. I: mounting /proc filesystem I: mounting /sys filesystem I: creating /{dev,run}/shm I: mounting /dev/pts filesystem I: redirecting /dev/ptmx to /dev/pts/ptmx I: policy-rc.d already exists I: Copying source file I: copying [ruby-excon_0.112.0-4.dsc] I: copying [./ruby-excon_0.112.0.orig.tar.gz] I: copying [./ruby-excon_0.112.0-4.debian.tar.xz] I: Extracting source dpkg-source: warning: cannot verify inline signature for ./ruby-excon_0.112.0-4.dsc: no acceptable signature found dpkg-source: info: extracting ruby-excon in ruby-excon-0.112.0 dpkg-source: info: unpacking ruby-excon_0.112.0.orig.tar.gz dpkg-source: info: unpacking ruby-excon_0.112.0-4.debian.tar.xz dpkg-source: info: using patch list from debian/patches/series dpkg-source: info: applying 00_disable-local-port-reuse-tests.patch dpkg-source: info: applying 01_use_ca-certificates.patch dpkg-source: info: applying 03_remove_rubygems_bundler_add_requires_from_gemspec.patch dpkg-source: info: applying 0004-test-rackups-fallback-to-using-Rack-if-Rackup-is-not.patch dpkg-source: info: applying 0005-no-internet-access.patch I: Not using root during the build. I: Installing the build-deps I: user script /srv/workspace/pbuilder/3118618/tmp/hooks/D01_modify_environment starting debug: Running on codethink03-arm64. I: Changing host+domainname to test build reproducibility I: Adding a custom variable just for the fun of it... I: Changing /bin/sh to bash '/bin/sh' -> '/bin/bash' lrwxrwxrwx 1 root root 9 Sep 8 10:13 /bin/sh -> /bin/bash I: Setting pbuilder2's login shell to /bin/bash I: Setting pbuilder2's GECOS to second user,second room,second work-phone,second home-phone,second other I: user script /srv/workspace/pbuilder/3118618/tmp/hooks/D01_modify_environment finished I: user script /srv/workspace/pbuilder/3118618/tmp/hooks/D02_print_environment starting I: set BASH=/bin/sh BASHOPTS=checkwinsize:cmdhist:complete_fullquote:extquote:force_fignore:globasciiranges:globskipdots:hostcomplete:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath BASH_ALIASES=() BASH_ARGC=() BASH_ARGV=() BASH_CMDS=() BASH_LINENO=([0]="12" [1]="0") BASH_LOADABLES_PATH=/usr/local/lib/bash:/usr/lib/bash:/opt/local/lib/bash:/usr/pkg/lib/bash:/opt/pkg/lib/bash:. BASH_SOURCE=([0]="/tmp/hooks/D02_print_environment" [1]="/tmp/hooks/D02_print_environment") BASH_VERSINFO=([0]="5" [1]="2" [2]="37" [3]="1" [4]="release" [5]="aarch64-unknown-linux-gnu") BASH_VERSION='5.2.37(1)-release' BUILDDIR=/build/reproducible-path BUILDUSERGECOS='second user,second room,second work-phone,second home-phone,second other' BUILDUSERNAME=pbuilder2 BUILD_ARCH=arm64 DEBIAN_FRONTEND=noninteractive DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=12 ' DIRSTACK=() DISTRIBUTION=trixie EUID=0 FUNCNAME=([0]="Echo" [1]="main") GROUPS=() HOME=/root HOSTNAME=i-capture-the-hostname HOSTTYPE=aarch64 HOST_ARCH=arm64 IFS=' ' INVOCATION_ID=07d84dad71b6407cbfac20b44c95cb02 LANG=C LANGUAGE=nl_BE:nl LC_ALL=C MACHTYPE=aarch64-unknown-linux-gnu MAIL=/var/mail/root OPTERR=1 OPTIND=1 OSTYPE=linux-gnu PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path PBCURRENTCOMMANDLINEOPERATION=build PBUILDER_OPERATION=build PBUILDER_PKGDATADIR=/usr/share/pbuilder PBUILDER_PKGLIBDIR=/usr/lib/pbuilder PBUILDER_SYSCONFDIR=/etc PIPESTATUS=([0]="0") POSIXLY_CORRECT=y PPID=3118618 PS4='+ ' PWD=/ SHELL=/bin/bash SHELLOPTS=braceexpand:errexit:hashall:interactive-comments:posix SHLVL=3 SUDO_COMMAND='/usr/bin/timeout -k 24.1h 24h /usr/bin/ionice -c 3 /usr/bin/nice -n 11 /usr/bin/unshare --uts -- /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz/pbuilderrc_Hdpr --distribution trixie --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/trixie-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz/b2 --logfile b2/build.log ruby-excon_0.112.0-4.dsc' SUDO_GID=109 SUDO_UID=104 SUDO_USER=jenkins TERM=unknown TZ=/usr/share/zoneinfo/Etc/GMT-14 UID=0 USER=root _='I: set' http_proxy=http://192.168.101.4:3128 I: uname -a Linux i-capture-the-hostname 6.1.0-37-cloud-arm64 #1 SMP Debian 6.1.140-1 (2025-05-22) aarch64 GNU/Linux I: ls -l /bin lrwxrwxrwx 1 root root 7 May 12 2025 /bin -> usr/bin I: user script /srv/workspace/pbuilder/3118618/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy Version: 0.invalid.0 Architecture: arm64 Maintainer: Debian Pbuilder Team Description: Dummy package to satisfy dependencies with aptitude - created by pbuilder This package was created automatically by pbuilder to satisfy the build-dependencies of the package being currently built. Depends: debhelper-compat (= 13), gem2deb (>= 1), rake, ruby-activesupport, ruby-chronic, ruby-delorean, ruby-eventmachine, ruby-open4, ruby-rackup, ruby-rspec, ruby-shindo, ruby-sinatra (>= 4.1.1-5), ruby-webrick (>= 1.7~), unicorn, puma, ruby-sinatra-contrib (>= 4.1.1-5) dpkg-deb: building package 'pbuilder-satisfydepends-dummy' in '/tmp/satisfydepends-aptitude/pbuilder-satisfydepends-dummy.deb'. Selecting previously unselected package pbuilder-satisfydepends-dummy. (Reading database ... 19965 files and directories currently installed.) Preparing to unpack .../pbuilder-satisfydepends-dummy.deb ... Unpacking pbuilder-satisfydepends-dummy (0.invalid.0) ... dpkg: pbuilder-satisfydepends-dummy: dependency problems, but configuring anyway as you requested: pbuilder-satisfydepends-dummy depends on debhelper-compat (= 13); however: Package debhelper-compat is not installed. pbuilder-satisfydepends-dummy depends on gem2deb (>= 1); however: Package gem2deb is not installed. pbuilder-satisfydepends-dummy depends on rake; however: Package rake is not installed. pbuilder-satisfydepends-dummy depends on ruby-activesupport; however: Package ruby-activesupport is not installed. pbuilder-satisfydepends-dummy depends on ruby-chronic; however: Package ruby-chronic is not installed. pbuilder-satisfydepends-dummy depends on ruby-delorean; however: Package ruby-delorean is not installed. pbuilder-satisfydepends-dummy depends on ruby-eventmachine; however: Package ruby-eventmachine is not installed. pbuilder-satisfydepends-dummy depends on ruby-open4; however: Package ruby-open4 is not installed. pbuilder-satisfydepends-dummy depends on ruby-rackup; however: Package ruby-rackup is not installed. pbuilder-satisfydepends-dummy depends on ruby-rspec; however: Package ruby-rspec is not installed. pbuilder-satisfydepends-dummy depends on ruby-shindo; however: Package ruby-shindo is not installed. pbuilder-satisfydepends-dummy depends on ruby-sinatra (>= 4.1.1-5); however: Package ruby-sinatra is not installed. pbuilder-satisfydepends-dummy depends on ruby-webrick (>= 1.7~); however: Package ruby-webrick is not installed. pbuilder-satisfydepends-dummy depends on unicorn; however: Package unicorn is not installed. pbuilder-satisfydepends-dummy depends on puma; however: Package puma is not installed. pbuilder-satisfydepends-dummy depends on ruby-sinatra-contrib (>= 4.1.1-5); however: Package ruby-sinatra-contrib is not installed. Setting up pbuilder-satisfydepends-dummy (0.invalid.0) ... Reading package lists... Building dependency tree... Reading state information... Initializing package states... Writing extended state information... Building tag database... pbuilder-satisfydepends-dummy is already installed at the requested version (0.invalid.0) pbuilder-satisfydepends-dummy is already installed at the requested version (0.invalid.0) The following NEW packages will be installed: autoconf{a} automake{a} autopoint{a} autotools-dev{a} bsdextrautils{a} ca-certificates{a} debhelper{a} devscripts{a} dh-autoreconf{a} dh-strip-nondeterminism{a} dwz{a} file{a} gem2deb{a} gem2deb-test-runner{a} gettext{a} gettext-base{a} gpg{a} gpg-agent{a} gpgconf{a} gpgv{a} groff-base{a} intltool-debian{a} libarchive-zip-perl{a} libassuan9{a} libb-hooks-op-check-perl{a} libclass-method-modifiers-perl{a} libclass-xsaccessor-perl{a} libclone-perl{a} libdebhelper-perl{a} libdevel-callchecker-perl{a} libdynaloader-functions-perl{a} libelf1t64{a} libencode-locale-perl{a} libexpat1{a} libffi8{a} libfile-dirlist-perl{a} libfile-homedir-perl{a} libfile-listing-perl{a} libfile-stripnondeterminism-perl{a} libfile-touch-perl{a} libfile-which-perl{a} libgcrypt20{a} libgmp-dev{a} libgmpxx4ldbl{a} libgpg-error0{a} libhtml-parser-perl{a} libhtml-tagset-perl{a} libhtml-tree-perl{a} libhttp-cookies-perl{a} libhttp-date-perl{a} libhttp-message-perl{a} libhttp-negotiate-perl{a} libimport-into-perl{a} libio-html-perl{a} libio-socket-ssl-perl{a} libksba8{a} liblwp-mediatypes-perl{a} liblwp-protocol-https-perl{a} libmagic-mgc{a} libmagic1t64{a} libmodule-runtime-perl{a} libmoo-perl{a} libnet-http-perl{a} libnet-ssleay-perl{a} libnpth0t64{a} libparams-classify-perl{a} libpipeline1{a} libpython3-stdlib{a} libpython3.13-minimal{a} libpython3.13-stdlib{a} libreadline8t64{a} librole-tiny-perl{a} libruby{a} libruby3.3{a} libsub-quote-perl{a} libtimedate-perl{a} libtool{a} libtry-tiny-perl{a} libuchardet0{a} libunistring5{a} liburi-perl{a} libwww-perl{a} libwww-robotrules-perl{a} libxml2{a} libyaml-0-2{a} m4{a} man-db{a} media-types{a} netbase{a} openssl{a} patchutils{a} perl-openssl-defaults{a} pinentry-curses{a} po-debconf{a} puma{a} python3{a} python3-minimal{a} python3.13{a} python3.13-minimal{a} rake{a} readline-common{a} ruby{a} ruby-activesupport{a} ruby-all-dev{a} ruby-base64{a} ruby-chronic{a} ruby-concurrent{a} ruby-connection-pool{a} ruby-csv{a} ruby-delorean{a} ruby-did-you-mean{a} ruby-diff-lcs{a} ruby-eventmachine{a} ruby-formatador{a} ruby-i18n{a} ruby-kgio{a} ruby-minitest{a} ruby-multi-json{a} ruby-mustermann{a} ruby-net-telnet{a} ruby-nio4r{a} ruby-numerizer{a} ruby-open4{a} ruby-power-assert{a} ruby-rack{a} ruby-rack-protection{a} ruby-rack-session{a} ruby-rackup{a} ruby-raindrops{a} ruby-rspec{a} ruby-rspec-core{a} ruby-rspec-expectations{a} ruby-rspec-mocks{a} ruby-rspec-support{a} ruby-ruby2-keywords{a} ruby-rubygems{a} ruby-shindo{a} ruby-sinatra{a} ruby-sinatra-contrib{a} ruby-test-unit{a} ruby-tilt{a} ruby-tzinfo{a} ruby-webrick{a} ruby-xmlrpc{a} ruby3.3{a} ruby3.3-dev{a} rubygems-integration{a} sensible-utils{a} sopv-gpgv{a} tzdata{a} unicorn{a} wdiff{a} The following packages are RECOMMENDED but will NOT be installed: apt-file curl dctrl-tools debian-keyring debian-tag2upload-keyring dput dput-ng dupload equivs fonts-lato gnupg libarchive-cpio-perl libdata-dump-perl libdistro-info-perl libgit-wrapper-perl libgitlab-api-v4-perl libgpg-error-l10n libhtml-form-perl libhtml-format-perl libhttp-daemon-perl libio-compress-brotli-perl libjs-jquery libjson-perl liblist-compare-perl libltdl-dev libmail-sendmail-perl libmailtools-perl libnamespace-clean-perl libsoap-lite-perl libstring-shellquote-perl libxstring-perl licensecheck lintian lynx lzip pristine-tar python3-apt python3-argcomplete python3-debian python3-magic python3-requests python3-unidiff python3-xdg ruby-oj ruby-sdbm ruby3.3-doc sopv-doc strace unzip wget zip 0 packages upgraded, 152 newly installed, 0 to remove and 0 not upgraded. Need to get 36.2 MB of archives. After unpacking 144 MB will be used. Writing extended state information... Get: 1 http://deb.debian.org/debian trixie/main arm64 libexpat1 arm64 2.7.1-2 [93.3 kB] Get: 2 http://deb.debian.org/debian trixie/main arm64 libpython3.13-minimal arm64 3.13.5-2 [856 kB] Get: 3 http://deb.debian.org/debian trixie/main arm64 python3.13-minimal arm64 3.13.5-2 [2003 kB] Get: 4 http://deb.debian.org/debian trixie/main arm64 python3-minimal arm64 3.13.5-1 [27.2 kB] Get: 5 http://deb.debian.org/debian trixie/main arm64 media-types all 13.0.0 [29.3 kB] Get: 6 http://deb.debian.org/debian trixie/main arm64 netbase all 6.5 [12.4 kB] Get: 7 http://deb.debian.org/debian trixie/main arm64 tzdata all 2025b-4 [260 kB] Get: 8 http://deb.debian.org/debian trixie/main arm64 libffi8 arm64 3.4.8-2 [21.3 kB] Get: 9 http://deb.debian.org/debian trixie/main arm64 readline-common all 8.2-6 [69.4 kB] Get: 10 http://deb.debian.org/debian trixie/main arm64 libreadline8t64 arm64 8.2-6 [159 kB] Get: 11 http://deb.debian.org/debian trixie/main arm64 libpython3.13-stdlib arm64 3.13.5-2 [1892 kB] Get: 12 http://deb.debian.org/debian trixie/main arm64 python3.13 arm64 3.13.5-2 [757 kB] Get: 13 http://deb.debian.org/debian trixie/main arm64 libpython3-stdlib arm64 3.13.5-1 [10.2 kB] Get: 14 http://deb.debian.org/debian trixie/main arm64 python3 arm64 3.13.5-1 [28.2 kB] Get: 15 http://deb.debian.org/debian trixie/main arm64 sensible-utils all 0.0.25 [25.0 kB] Get: 16 http://deb.debian.org/debian trixie/main arm64 openssl arm64 3.5.1-1 [1457 kB] Get: 17 http://deb.debian.org/debian trixie/main arm64 ca-certificates all 20250419 [162 kB] Get: 18 http://deb.debian.org/debian trixie/main arm64 libmagic-mgc arm64 1:5.46-5 [338 kB] Get: 19 http://deb.debian.org/debian trixie/main arm64 libmagic1t64 arm64 1:5.46-5 [103 kB] Get: 20 http://deb.debian.org/debian trixie/main arm64 file arm64 1:5.46-5 [43.7 kB] Get: 21 http://deb.debian.org/debian trixie/main arm64 gettext-base arm64 0.23.1-2 [241 kB] Get: 22 http://deb.debian.org/debian trixie/main arm64 libuchardet0 arm64 0.0.8-1+b2 [69.2 kB] Get: 23 http://deb.debian.org/debian trixie/main arm64 groff-base arm64 1.23.0-9 [1130 kB] Get: 24 http://deb.debian.org/debian trixie/main arm64 bsdextrautils arm64 2.41-5 [93.8 kB] Get: 25 http://deb.debian.org/debian trixie/main arm64 libpipeline1 arm64 1.5.8-1 [40.2 kB] Get: 26 http://deb.debian.org/debian trixie/main arm64 man-db arm64 2.13.1-1 [1453 kB] Get: 27 http://deb.debian.org/debian trixie/main arm64 m4 arm64 1.4.19-8 [285 kB] Get: 28 http://deb.debian.org/debian trixie/main arm64 autoconf all 2.72-3.1 [494 kB] Get: 29 http://deb.debian.org/debian trixie/main arm64 autotools-dev all 20240727.1 [60.2 kB] Get: 30 http://deb.debian.org/debian trixie/main arm64 automake all 1:1.17-4 [862 kB] Get: 31 http://deb.debian.org/debian trixie/main arm64 autopoint all 0.23.1-2 [770 kB] Get: 32 http://deb.debian.org/debian trixie/main arm64 libdebhelper-perl all 13.24.2 [90.9 kB] Get: 33 http://deb.debian.org/debian trixie/main arm64 libtool all 2.5.4-4 [539 kB] Get: 34 http://deb.debian.org/debian trixie/main arm64 dh-autoreconf all 20 [17.1 kB] Get: 35 http://deb.debian.org/debian trixie/main arm64 libarchive-zip-perl all 1.68-1 [104 kB] Get: 36 http://deb.debian.org/debian trixie/main arm64 libfile-stripnondeterminism-perl all 1.14.1-2 [19.7 kB] Get: 37 http://deb.debian.org/debian trixie/main arm64 dh-strip-nondeterminism all 1.14.1-2 [8620 B] Get: 38 http://deb.debian.org/debian trixie/main arm64 libelf1t64 arm64 0.192-4 [189 kB] Get: 39 http://deb.debian.org/debian trixie/main arm64 dwz arm64 0.15-1+b1 [102 kB] Get: 40 http://deb.debian.org/debian trixie/main arm64 libunistring5 arm64 1.3-2 [453 kB] Get: 41 http://deb.debian.org/debian trixie/main arm64 libxml2 arm64 2.12.7+dfsg+really2.9.14-2.1 [630 kB] Get: 42 http://deb.debian.org/debian trixie/main arm64 gettext arm64 0.23.1-2 [1611 kB] Get: 43 http://deb.debian.org/debian trixie/main arm64 intltool-debian all 0.35.0+20060710.6 [22.9 kB] Get: 44 http://deb.debian.org/debian trixie/main arm64 po-debconf all 1.0.21+nmu1 [248 kB] Get: 45 http://deb.debian.org/debian trixie/main arm64 debhelper all 13.24.2 [919 kB] Get: 46 http://deb.debian.org/debian trixie/main arm64 libgpg-error0 arm64 1.51-4 [78.5 kB] Get: 47 http://deb.debian.org/debian trixie/main arm64 libassuan9 arm64 3.0.2-2 [59.1 kB] Get: 48 http://deb.debian.org/debian trixie/main arm64 libgcrypt20 arm64 1.11.0-7 [742 kB] Get: 49 http://deb.debian.org/debian trixie/main arm64 gpgconf arm64 2.4.7-21+b3 [121 kB] Get: 50 http://deb.debian.org/debian trixie/main arm64 libksba8 arm64 1.6.7-2+b1 [125 kB] Get: 51 http://deb.debian.org/debian trixie/main arm64 libnpth0t64 arm64 1.8-3 [22.9 kB] Get: 52 http://deb.debian.org/debian trixie/main arm64 gpg arm64 2.4.7-21+b3 [578 kB] Get: 53 http://deb.debian.org/debian trixie/main arm64 pinentry-curses arm64 1.3.1-2 [83.5 kB] Get: 54 http://deb.debian.org/debian trixie/main arm64 gpg-agent arm64 2.4.7-21+b3 [249 kB] Get: 55 http://deb.debian.org/debian trixie/main arm64 libfile-dirlist-perl all 0.05-3 [7600 B] Get: 56 http://deb.debian.org/debian trixie/main arm64 libfile-which-perl all 1.27-2 [15.1 kB] Get: 57 http://deb.debian.org/debian trixie/main arm64 libfile-homedir-perl all 1.006-2 [42.4 kB] Get: 58 http://deb.debian.org/debian trixie/main arm64 libfile-touch-perl all 0.12-2 [8816 B] Get: 59 http://deb.debian.org/debian trixie/main arm64 libclass-method-modifiers-perl all 2.15-1 [18.0 kB] Get: 60 http://deb.debian.org/debian trixie/main arm64 libclass-xsaccessor-perl arm64 1.19-4+b5 [34.9 kB] Get: 61 http://deb.debian.org/debian trixie/main arm64 libb-hooks-op-check-perl arm64 0.22-3+b2 [10.6 kB] Get: 62 http://deb.debian.org/debian trixie/main arm64 libdynaloader-functions-perl all 0.004-2 [12.2 kB] Get: 63 http://deb.debian.org/debian trixie/main arm64 libdevel-callchecker-perl arm64 0.009-2 [15.7 kB] Get: 64 http://deb.debian.org/debian trixie/main arm64 libparams-classify-perl arm64 0.015-2+b4 [22.3 kB] Get: 65 http://deb.debian.org/debian trixie/main arm64 libmodule-runtime-perl all 0.018-1 [17.8 kB] Get: 66 http://deb.debian.org/debian trixie/main arm64 libimport-into-perl all 1.002005-2 [11.3 kB] Get: 67 http://deb.debian.org/debian trixie/main arm64 librole-tiny-perl all 2.002004-1 [21.4 kB] Get: 68 http://deb.debian.org/debian trixie/main arm64 libsub-quote-perl all 2.006008-1 [21.8 kB] Get: 69 http://deb.debian.org/debian trixie/main arm64 libmoo-perl all 2.005005-1 [58.0 kB] Get: 70 http://deb.debian.org/debian trixie/main arm64 libencode-locale-perl all 1.05-3 [12.9 kB] Get: 71 http://deb.debian.org/debian trixie/main arm64 libtimedate-perl all 2.3300-2 [39.3 kB] Get: 72 http://deb.debian.org/debian trixie/main arm64 libhttp-date-perl all 6.06-1 [10.7 kB] Get: 73 http://deb.debian.org/debian trixie/main arm64 libfile-listing-perl all 6.16-1 [12.4 kB] Get: 74 http://deb.debian.org/debian trixie/main arm64 libhtml-tagset-perl all 3.24-1 [14.7 kB] Get: 75 http://deb.debian.org/debian trixie/main arm64 liburi-perl all 5.30-1 [105 kB] Get: 76 http://deb.debian.org/debian trixie/main arm64 libhtml-parser-perl arm64 3.83-1+b2 [97.5 kB] Get: 77 http://deb.debian.org/debian trixie/main arm64 libhtml-tree-perl all 5.07-3 [211 kB] Get: 78 http://deb.debian.org/debian trixie/main arm64 libclone-perl arm64 0.47-1+b1 [13.7 kB] Get: 79 http://deb.debian.org/debian trixie/main arm64 libio-html-perl all 1.004-3 [16.2 kB] Get: 80 http://deb.debian.org/debian trixie/main arm64 liblwp-mediatypes-perl all 6.04-2 [20.2 kB] Get: 81 http://deb.debian.org/debian trixie/main arm64 libhttp-message-perl all 7.00-2 [79.8 kB] Get: 82 http://deb.debian.org/debian trixie/main arm64 libhttp-cookies-perl all 6.11-1 [19.1 kB] Get: 83 http://deb.debian.org/debian trixie/main arm64 libhttp-negotiate-perl all 6.01-2 [13.1 kB] Get: 84 http://deb.debian.org/debian trixie/main arm64 perl-openssl-defaults arm64 7+b2 [6712 B] Get: 85 http://deb.debian.org/debian trixie/main arm64 libnet-ssleay-perl arm64 1.94-3 [323 kB] Get: 86 http://deb.debian.org/debian trixie/main arm64 libio-socket-ssl-perl all 2.089-1 [223 kB] Get: 87 http://deb.debian.org/debian trixie/main arm64 libnet-http-perl all 6.23-1 [23.9 kB] Get: 88 http://deb.debian.org/debian trixie/main arm64 liblwp-protocol-https-perl all 6.14-1 [10.8 kB] Get: 89 http://deb.debian.org/debian trixie/main arm64 libtry-tiny-perl all 0.32-1 [22.9 kB] Get: 90 http://deb.debian.org/debian trixie/main arm64 libwww-robotrules-perl all 6.02-1 [12.9 kB] Get: 91 http://deb.debian.org/debian trixie/main arm64 libwww-perl all 6.78-1 [183 kB] Get: 92 http://deb.debian.org/debian trixie/main arm64 patchutils arm64 0.4.2-1+b1 [71.3 kB] Get: 93 http://deb.debian.org/debian trixie/main arm64 gpgv arm64 2.4.7-21+b3 [220 kB] Get: 94 http://deb.debian.org/debian trixie/main arm64 sopv-gpgv all 0.1.4-1 [11.3 kB] Get: 95 http://deb.debian.org/debian trixie/main arm64 wdiff arm64 1.2.2-9 [122 kB] Get: 96 http://deb.debian.org/debian trixie/main arm64 devscripts all 2.25.15 [1067 kB] Get: 97 http://deb.debian.org/debian trixie/main arm64 rubygems-integration all 1.19 [5488 B] Get: 98 http://deb.debian.org/debian trixie/main arm64 ruby-csv all 3.3.4-1 [42.2 kB] Get: 99 http://deb.debian.org/debian trixie/main arm64 ruby-did-you-mean all 1.6.3-2 [20.9 kB] Get: 100 http://deb.debian.org/debian trixie/main arm64 ruby-net-telnet all 0.2.0-1 [13.1 kB] Get: 101 http://deb.debian.org/debian trixie/main arm64 ruby-ruby2-keywords all 0.0.5-1 [4300 B] Get: 102 http://deb.debian.org/debian trixie/main arm64 ruby-webrick all 1.9.1-1 [59.6 kB] Get: 103 http://deb.debian.org/debian trixie/main arm64 ruby-xmlrpc all 0.3.3-2 [24.4 kB] Get: 104 http://deb.debian.org/debian trixie/main arm64 libyaml-0-2 arm64 0.2.5-2 [49.2 kB] Get: 105 http://deb.debian.org/debian trixie/main arm64 libruby3.3 arm64 3.3.8-2 [6142 kB] Get: 106 http://deb.debian.org/debian trixie/main arm64 ruby3.3 arm64 3.3.8-2 [834 kB] Get: 107 http://deb.debian.org/debian trixie/main arm64 libruby arm64 1:3.3+b1 [5436 B] Get: 108 http://deb.debian.org/debian trixie/main arm64 ruby-rubygems all 3.6.7-2 [407 kB] Get: 109 http://deb.debian.org/debian trixie/main arm64 ruby arm64 1:3.3+b1 [6560 B] Get: 110 http://deb.debian.org/debian trixie/main arm64 rake all 13.2.1-1 [65.2 kB] Get: 111 http://deb.debian.org/debian trixie/main arm64 ruby-minitest all 5.25.4-3 [66.3 kB] Get: 112 http://deb.debian.org/debian trixie/main arm64 ruby-power-assert all 2.0.3-1 [11.8 kB] Get: 113 http://deb.debian.org/debian trixie/main arm64 ruby-test-unit all 3.6.2-1 [79.1 kB] Get: 114 http://deb.debian.org/debian trixie/main arm64 gem2deb-test-runner arm64 2.2.5 [17.9 kB] Get: 115 http://deb.debian.org/debian trixie/main arm64 libgmpxx4ldbl arm64 2:6.3.0+dfsg-3 [329 kB] Get: 116 http://deb.debian.org/debian trixie/main arm64 libgmp-dev arm64 2:6.3.0+dfsg-3 [621 kB] Get: 117 http://deb.debian.org/debian trixie/main arm64 ruby3.3-dev arm64 3.3.8-2 [1045 kB] Get: 118 http://deb.debian.org/debian trixie/main arm64 ruby-all-dev arm64 1:3.3+b1 [6496 B] Get: 119 http://deb.debian.org/debian trixie/main arm64 gem2deb arm64 2.2.5 [48.0 kB] Get: 120 http://deb.debian.org/debian trixie/main arm64 ruby-nio4r arm64 2.7.3-1+b2 [112 kB] Get: 121 http://deb.debian.org/debian trixie/main arm64 puma arm64 6.6.0-4 [189 kB] Get: 122 http://deb.debian.org/debian trixie/main arm64 ruby-concurrent all 1.3.5-1 [291 kB] Get: 123 http://deb.debian.org/debian trixie/main arm64 ruby-i18n all 1.14.7-1 [41.7 kB] Get: 124 http://deb.debian.org/debian trixie/main arm64 ruby-tzinfo all 2.0.6-1 [66.7 kB] Get: 125 http://deb.debian.org/debian trixie/main arm64 ruby-connection-pool all 2.4.1-1 [10.5 kB] Get: 126 http://deb.debian.org/debian trixie/main arm64 ruby-base64 all 0.2.0-2 [7116 B] Get: 127 http://deb.debian.org/debian trixie/main arm64 ruby-activesupport all 2:7.2.2.1+dfsg-7 [223 kB] Get: 128 http://deb.debian.org/debian trixie/main arm64 ruby-numerizer all 0.2.0-3 [4888 B] Get: 129 http://deb.debian.org/debian trixie/main arm64 ruby-chronic all 0.10.5-3 [28.8 kB] Get: 130 http://deb.debian.org/debian trixie/main arm64 ruby-delorean all 2.1.0-2.1 [5612 B] Get: 131 http://deb.debian.org/debian trixie/main arm64 ruby-diff-lcs all 1.5.1-1 [28.1 kB] Get: 132 http://deb.debian.org/debian trixie/main arm64 ruby-eventmachine arm64 1.3~pre20220315-df4ab006-5+b2 [150 kB] Get: 133 http://deb.debian.org/debian trixie/main arm64 ruby-formatador all 1.1.0-1 [9304 B] Get: 134 http://deb.debian.org/debian trixie/main arm64 ruby-kgio arm64 2.11.2-2+b9 [27.8 kB] Get: 135 http://deb.debian.org/debian trixie/main arm64 ruby-multi-json all 1.15.0-1 [20.4 kB] Get: 136 http://deb.debian.org/debian trixie/main arm64 ruby-mustermann all 3.0.0-2 [37.7 kB] Get: 137 http://deb.debian.org/debian trixie/main arm64 ruby-open4 all 1.3.4-3 [14.5 kB] Get: 138 http://deb.debian.org/debian trixie/main arm64 ruby-rack all 3.1.16-0.1 [98.3 kB] Get: 139 http://deb.debian.org/debian trixie/main arm64 ruby-rack-protection all 4.1.1-5 [41.8 kB] Get: 140 http://deb.debian.org/debian trixie/main arm64 ruby-rack-session all 2.1.1-0.1 [12.5 kB] Get: 141 http://deb.debian.org/debian trixie/main arm64 ruby-rackup all 2.1.0-4 [12.7 kB] Get: 142 http://deb.debian.org/debian trixie/main arm64 ruby-raindrops arm64 0.20.0-2+b1 [29.2 kB] Get: 143 http://deb.debian.org/debian trixie/main arm64 ruby-rspec-support all 3.13.0c0e0m0s1-2 [28.5 kB] Get: 144 http://deb.debian.org/debian trixie/main arm64 ruby-rspec-core all 3.13.0c0e0m0s1-2 [164 kB] Get: 145 http://deb.debian.org/debian trixie/main arm64 ruby-rspec-expectations all 3.13.0c0e0m0s1-2 [90.2 kB] Get: 146 http://deb.debian.org/debian trixie/main arm64 ruby-rspec-mocks all 3.13.0c0e0m0s1-2 [81.3 kB] Get: 147 http://deb.debian.org/debian trixie/main arm64 ruby-rspec all 3.13.0c0e0m0s1-2 [5184 B] Get: 148 http://deb.debian.org/debian trixie/main arm64 ruby-shindo all 0.3.10-2 [12.0 kB] Get: 149 http://deb.debian.org/debian trixie/main arm64 ruby-tilt all 2.4.0-3 [32.2 kB] Get: 150 http://deb.debian.org/debian trixie/main arm64 ruby-sinatra all 4.1.1-5 [122 kB] Get: 151 http://deb.debian.org/debian trixie/main arm64 ruby-sinatra-contrib all 4.1.1-5 [54.8 kB] Get: 152 http://deb.debian.org/debian trixie/main arm64 unicorn arm64 6.1.0+git.20250131.1370f52-1+b1 [97.5 kB] Fetched 36.2 MB in 1s (66.2 MB/s) Preconfiguring packages ... Selecting previously unselected package libexpat1:arm64. (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 ... 19965 files and directories currently installed.) Preparing to unpack .../libexpat1_2.7.1-2_arm64.deb ... Unpacking libexpat1:arm64 (2.7.1-2) ... Selecting previously unselected package libpython3.13-minimal:arm64. Preparing to unpack .../libpython3.13-minimal_3.13.5-2_arm64.deb ... Unpacking libpython3.13-minimal:arm64 (3.13.5-2) ... Selecting previously unselected package python3.13-minimal. Preparing to unpack .../python3.13-minimal_3.13.5-2_arm64.deb ... Unpacking python3.13-minimal (3.13.5-2) ... Setting up libpython3.13-minimal:arm64 (3.13.5-2) ... Setting up libexpat1:arm64 (2.7.1-2) ... Setting up python3.13-minimal (3.13.5-2) ... Selecting previously unselected package python3-minimal. (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 ... 20299 files and directories currently installed.) Preparing to unpack .../0-python3-minimal_3.13.5-1_arm64.deb ... Unpacking python3-minimal (3.13.5-1) ... Selecting previously unselected package media-types. Preparing to unpack .../1-media-types_13.0.0_all.deb ... Unpacking media-types (13.0.0) ... Selecting previously unselected package netbase. Preparing to unpack .../2-netbase_6.5_all.deb ... Unpacking netbase (6.5) ... Selecting previously unselected package tzdata. Preparing to unpack .../3-tzdata_2025b-4_all.deb ... Unpacking tzdata (2025b-4) ... Selecting previously unselected package libffi8:arm64. Preparing to unpack .../4-libffi8_3.4.8-2_arm64.deb ... Unpacking libffi8:arm64 (3.4.8-2) ... Selecting previously unselected package readline-common. Preparing to unpack .../5-readline-common_8.2-6_all.deb ... Unpacking readline-common (8.2-6) ... Selecting previously unselected package libreadline8t64:arm64. Preparing to unpack .../6-libreadline8t64_8.2-6_arm64.deb ... Adding 'diversion of /lib/aarch64-linux-gnu/libhistory.so.8 to /lib/aarch64-linux-gnu/libhistory.so.8.usr-is-merged by libreadline8t64' Adding 'diversion of /lib/aarch64-linux-gnu/libhistory.so.8.2 to /lib/aarch64-linux-gnu/libhistory.so.8.2.usr-is-merged by libreadline8t64' Adding 'diversion of /lib/aarch64-linux-gnu/libreadline.so.8 to /lib/aarch64-linux-gnu/libreadline.so.8.usr-is-merged by libreadline8t64' Adding 'diversion of /lib/aarch64-linux-gnu/libreadline.so.8.2 to /lib/aarch64-linux-gnu/libreadline.so.8.2.usr-is-merged by libreadline8t64' Unpacking libreadline8t64:arm64 (8.2-6) ... Selecting previously unselected package libpython3.13-stdlib:arm64. Preparing to unpack .../7-libpython3.13-stdlib_3.13.5-2_arm64.deb ... Unpacking libpython3.13-stdlib:arm64 (3.13.5-2) ... Selecting previously unselected package python3.13. Preparing to unpack .../8-python3.13_3.13.5-2_arm64.deb ... Unpacking python3.13 (3.13.5-2) ... Selecting previously unselected package libpython3-stdlib:arm64. Preparing to unpack .../9-libpython3-stdlib_3.13.5-1_arm64.deb ... Unpacking libpython3-stdlib:arm64 (3.13.5-1) ... Setting up python3-minimal (3.13.5-1) ... Selecting previously unselected package python3. (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 ... 21314 files and directories currently installed.) Preparing to unpack .../000-python3_3.13.5-1_arm64.deb ... Unpacking python3 (3.13.5-1) ... Selecting previously unselected package sensible-utils. Preparing to unpack .../001-sensible-utils_0.0.25_all.deb ... Unpacking sensible-utils (0.0.25) ... Selecting previously unselected package openssl. Preparing to unpack .../002-openssl_3.5.1-1_arm64.deb ... Unpacking openssl (3.5.1-1) ... Selecting previously unselected package ca-certificates. Preparing to unpack .../003-ca-certificates_20250419_all.deb ... Unpacking ca-certificates (20250419) ... Selecting previously unselected package libmagic-mgc. Preparing to unpack .../004-libmagic-mgc_1%3a5.46-5_arm64.deb ... Unpacking libmagic-mgc (1:5.46-5) ... Selecting previously unselected package libmagic1t64:arm64. Preparing to unpack .../005-libmagic1t64_1%3a5.46-5_arm64.deb ... Unpacking libmagic1t64:arm64 (1:5.46-5) ... Selecting previously unselected package file. Preparing to unpack .../006-file_1%3a5.46-5_arm64.deb ... Unpacking file (1:5.46-5) ... Selecting previously unselected package gettext-base. Preparing to unpack .../007-gettext-base_0.23.1-2_arm64.deb ... Unpacking gettext-base (0.23.1-2) ... Selecting previously unselected package libuchardet0:arm64. Preparing to unpack .../008-libuchardet0_0.0.8-1+b2_arm64.deb ... Unpacking libuchardet0:arm64 (0.0.8-1+b2) ... Selecting previously unselected package groff-base. Preparing to unpack .../009-groff-base_1.23.0-9_arm64.deb ... Unpacking groff-base (1.23.0-9) ... Selecting previously unselected package bsdextrautils. Preparing to unpack .../010-bsdextrautils_2.41-5_arm64.deb ... Unpacking bsdextrautils (2.41-5) ... Selecting previously unselected package libpipeline1:arm64. Preparing to unpack .../011-libpipeline1_1.5.8-1_arm64.deb ... Unpacking libpipeline1:arm64 (1.5.8-1) ... Selecting previously unselected package man-db. Preparing to unpack .../012-man-db_2.13.1-1_arm64.deb ... Unpacking man-db (2.13.1-1) ... Selecting previously unselected package m4. Preparing to unpack .../013-m4_1.4.19-8_arm64.deb ... Unpacking m4 (1.4.19-8) ... Selecting previously unselected package autoconf. Preparing to unpack .../014-autoconf_2.72-3.1_all.deb ... Unpacking autoconf (2.72-3.1) ... Selecting previously unselected package autotools-dev. Preparing to unpack .../015-autotools-dev_20240727.1_all.deb ... Unpacking autotools-dev (20240727.1) ... Selecting previously unselected package automake. Preparing to unpack .../016-automake_1%3a1.17-4_all.deb ... Unpacking automake (1:1.17-4) ... Selecting previously unselected package autopoint. Preparing to unpack .../017-autopoint_0.23.1-2_all.deb ... Unpacking autopoint (0.23.1-2) ... Selecting previously unselected package libdebhelper-perl. Preparing to unpack .../018-libdebhelper-perl_13.24.2_all.deb ... Unpacking libdebhelper-perl (13.24.2) ... Selecting previously unselected package libtool. Preparing to unpack .../019-libtool_2.5.4-4_all.deb ... Unpacking libtool (2.5.4-4) ... Selecting previously unselected package dh-autoreconf. Preparing to unpack .../020-dh-autoreconf_20_all.deb ... Unpacking dh-autoreconf (20) ... Selecting previously unselected package libarchive-zip-perl. Preparing to unpack .../021-libarchive-zip-perl_1.68-1_all.deb ... Unpacking libarchive-zip-perl (1.68-1) ... Selecting previously unselected package libfile-stripnondeterminism-perl. Preparing to unpack .../022-libfile-stripnondeterminism-perl_1.14.1-2_all.deb ... Unpacking libfile-stripnondeterminism-perl (1.14.1-2) ... Selecting previously unselected package dh-strip-nondeterminism. Preparing to unpack .../023-dh-strip-nondeterminism_1.14.1-2_all.deb ... Unpacking dh-strip-nondeterminism (1.14.1-2) ... Selecting previously unselected package libelf1t64:arm64. Preparing to unpack .../024-libelf1t64_0.192-4_arm64.deb ... Unpacking libelf1t64:arm64 (0.192-4) ... Selecting previously unselected package dwz. Preparing to unpack .../025-dwz_0.15-1+b1_arm64.deb ... Unpacking dwz (0.15-1+b1) ... Selecting previously unselected package libunistring5:arm64. Preparing to unpack .../026-libunistring5_1.3-2_arm64.deb ... Unpacking libunistring5:arm64 (1.3-2) ... Selecting previously unselected package libxml2:arm64. Preparing to unpack .../027-libxml2_2.12.7+dfsg+really2.9.14-2.1_arm64.deb ... Unpacking libxml2:arm64 (2.12.7+dfsg+really2.9.14-2.1) ... Selecting previously unselected package gettext. Preparing to unpack .../028-gettext_0.23.1-2_arm64.deb ... Unpacking gettext (0.23.1-2) ... Selecting previously unselected package intltool-debian. Preparing to unpack .../029-intltool-debian_0.35.0+20060710.6_all.deb ... Unpacking intltool-debian (0.35.0+20060710.6) ... Selecting previously unselected package po-debconf. Preparing to unpack .../030-po-debconf_1.0.21+nmu1_all.deb ... Unpacking po-debconf (1.0.21+nmu1) ... Selecting previously unselected package debhelper. Preparing to unpack .../031-debhelper_13.24.2_all.deb ... Unpacking debhelper (13.24.2) ... Selecting previously unselected package libgpg-error0:arm64. Preparing to unpack .../032-libgpg-error0_1.51-4_arm64.deb ... Unpacking libgpg-error0:arm64 (1.51-4) ... Selecting previously unselected package libassuan9:arm64. Preparing to unpack .../033-libassuan9_3.0.2-2_arm64.deb ... Unpacking libassuan9:arm64 (3.0.2-2) ... Selecting previously unselected package libgcrypt20:arm64. Preparing to unpack .../034-libgcrypt20_1.11.0-7_arm64.deb ... Unpacking libgcrypt20:arm64 (1.11.0-7) ... Selecting previously unselected package gpgconf. Preparing to unpack .../035-gpgconf_2.4.7-21+b3_arm64.deb ... Unpacking gpgconf (2.4.7-21+b3) ... Selecting previously unselected package libksba8:arm64. Preparing to unpack .../036-libksba8_1.6.7-2+b1_arm64.deb ... Unpacking libksba8:arm64 (1.6.7-2+b1) ... Selecting previously unselected package libnpth0t64:arm64. Preparing to unpack .../037-libnpth0t64_1.8-3_arm64.deb ... Unpacking libnpth0t64:arm64 (1.8-3) ... Selecting previously unselected package gpg. Preparing to unpack .../038-gpg_2.4.7-21+b3_arm64.deb ... Unpacking gpg (2.4.7-21+b3) ... Selecting previously unselected package pinentry-curses. Preparing to unpack .../039-pinentry-curses_1.3.1-2_arm64.deb ... Unpacking pinentry-curses (1.3.1-2) ... Selecting previously unselected package gpg-agent. Preparing to unpack .../040-gpg-agent_2.4.7-21+b3_arm64.deb ... Unpacking gpg-agent (2.4.7-21+b3) ... Selecting previously unselected package libfile-dirlist-perl. Preparing to unpack .../041-libfile-dirlist-perl_0.05-3_all.deb ... Unpacking libfile-dirlist-perl (0.05-3) ... Selecting previously unselected package libfile-which-perl. Preparing to unpack .../042-libfile-which-perl_1.27-2_all.deb ... Unpacking libfile-which-perl (1.27-2) ... Selecting previously unselected package libfile-homedir-perl. Preparing to unpack .../043-libfile-homedir-perl_1.006-2_all.deb ... Unpacking libfile-homedir-perl (1.006-2) ... Selecting previously unselected package libfile-touch-perl. Preparing to unpack .../044-libfile-touch-perl_0.12-2_all.deb ... Unpacking libfile-touch-perl (0.12-2) ... Selecting previously unselected package libclass-method-modifiers-perl. Preparing to unpack .../045-libclass-method-modifiers-perl_2.15-1_all.deb ... Unpacking libclass-method-modifiers-perl (2.15-1) ... Selecting previously unselected package libclass-xsaccessor-perl. Preparing to unpack .../046-libclass-xsaccessor-perl_1.19-4+b5_arm64.deb ... Unpacking libclass-xsaccessor-perl (1.19-4+b5) ... Selecting previously unselected package libb-hooks-op-check-perl:arm64. Preparing to unpack .../047-libb-hooks-op-check-perl_0.22-3+b2_arm64.deb ... Unpacking libb-hooks-op-check-perl:arm64 (0.22-3+b2) ... Selecting previously unselected package libdynaloader-functions-perl. Preparing to unpack .../048-libdynaloader-functions-perl_0.004-2_all.deb ... Unpacking libdynaloader-functions-perl (0.004-2) ... Selecting previously unselected package libdevel-callchecker-perl:arm64. Preparing to unpack .../049-libdevel-callchecker-perl_0.009-2_arm64.deb ... Unpacking libdevel-callchecker-perl:arm64 (0.009-2) ... Selecting previously unselected package libparams-classify-perl:arm64. Preparing to unpack .../050-libparams-classify-perl_0.015-2+b4_arm64.deb ... Unpacking libparams-classify-perl:arm64 (0.015-2+b4) ... Selecting previously unselected package libmodule-runtime-perl. Preparing to unpack .../051-libmodule-runtime-perl_0.018-1_all.deb ... Unpacking libmodule-runtime-perl (0.018-1) ... Selecting previously unselected package libimport-into-perl. Preparing to unpack .../052-libimport-into-perl_1.002005-2_all.deb ... Unpacking libimport-into-perl (1.002005-2) ... Selecting previously unselected package librole-tiny-perl. Preparing to unpack .../053-librole-tiny-perl_2.002004-1_all.deb ... Unpacking librole-tiny-perl (2.002004-1) ... Selecting previously unselected package libsub-quote-perl. Preparing to unpack .../054-libsub-quote-perl_2.006008-1_all.deb ... Unpacking libsub-quote-perl (2.006008-1) ... Selecting previously unselected package libmoo-perl. Preparing to unpack .../055-libmoo-perl_2.005005-1_all.deb ... Unpacking libmoo-perl (2.005005-1) ... Selecting previously unselected package libencode-locale-perl. Preparing to unpack .../056-libencode-locale-perl_1.05-3_all.deb ... Unpacking libencode-locale-perl (1.05-3) ... Selecting previously unselected package libtimedate-perl. Preparing to unpack .../057-libtimedate-perl_2.3300-2_all.deb ... Unpacking libtimedate-perl (2.3300-2) ... Selecting previously unselected package libhttp-date-perl. Preparing to unpack .../058-libhttp-date-perl_6.06-1_all.deb ... Unpacking libhttp-date-perl (6.06-1) ... Selecting previously unselected package libfile-listing-perl. Preparing to unpack .../059-libfile-listing-perl_6.16-1_all.deb ... Unpacking libfile-listing-perl (6.16-1) ... Selecting previously unselected package libhtml-tagset-perl. Preparing to unpack .../060-libhtml-tagset-perl_3.24-1_all.deb ... Unpacking libhtml-tagset-perl (3.24-1) ... Selecting previously unselected package liburi-perl. Preparing to unpack .../061-liburi-perl_5.30-1_all.deb ... Unpacking liburi-perl (5.30-1) ... Selecting previously unselected package libhtml-parser-perl:arm64. Preparing to unpack .../062-libhtml-parser-perl_3.83-1+b2_arm64.deb ... Unpacking libhtml-parser-perl:arm64 (3.83-1+b2) ... Selecting previously unselected package libhtml-tree-perl. Preparing to unpack .../063-libhtml-tree-perl_5.07-3_all.deb ... Unpacking libhtml-tree-perl (5.07-3) ... Selecting previously unselected package libclone-perl:arm64. Preparing to unpack .../064-libclone-perl_0.47-1+b1_arm64.deb ... Unpacking libclone-perl:arm64 (0.47-1+b1) ... Selecting previously unselected package libio-html-perl. Preparing to unpack .../065-libio-html-perl_1.004-3_all.deb ... Unpacking libio-html-perl (1.004-3) ... Selecting previously unselected package liblwp-mediatypes-perl. Preparing to unpack .../066-liblwp-mediatypes-perl_6.04-2_all.deb ... Unpacking liblwp-mediatypes-perl (6.04-2) ... Selecting previously unselected package libhttp-message-perl. Preparing to unpack .../067-libhttp-message-perl_7.00-2_all.deb ... Unpacking libhttp-message-perl (7.00-2) ... Selecting previously unselected package libhttp-cookies-perl. Preparing to unpack .../068-libhttp-cookies-perl_6.11-1_all.deb ... Unpacking libhttp-cookies-perl (6.11-1) ... Selecting previously unselected package libhttp-negotiate-perl. Preparing to unpack .../069-libhttp-negotiate-perl_6.01-2_all.deb ... Unpacking libhttp-negotiate-perl (6.01-2) ... Selecting previously unselected package perl-openssl-defaults:arm64. Preparing to unpack .../070-perl-openssl-defaults_7+b2_arm64.deb ... Unpacking perl-openssl-defaults:arm64 (7+b2) ... Selecting previously unselected package libnet-ssleay-perl:arm64. Preparing to unpack .../071-libnet-ssleay-perl_1.94-3_arm64.deb ... Unpacking libnet-ssleay-perl:arm64 (1.94-3) ... Selecting previously unselected package libio-socket-ssl-perl. Preparing to unpack .../072-libio-socket-ssl-perl_2.089-1_all.deb ... Unpacking libio-socket-ssl-perl (2.089-1) ... Selecting previously unselected package libnet-http-perl. Preparing to unpack .../073-libnet-http-perl_6.23-1_all.deb ... Unpacking libnet-http-perl (6.23-1) ... Selecting previously unselected package liblwp-protocol-https-perl. Preparing to unpack .../074-liblwp-protocol-https-perl_6.14-1_all.deb ... Unpacking liblwp-protocol-https-perl (6.14-1) ... Selecting previously unselected package libtry-tiny-perl. Preparing to unpack .../075-libtry-tiny-perl_0.32-1_all.deb ... Unpacking libtry-tiny-perl (0.32-1) ... Selecting previously unselected package libwww-robotrules-perl. Preparing to unpack .../076-libwww-robotrules-perl_6.02-1_all.deb ... Unpacking libwww-robotrules-perl (6.02-1) ... Selecting previously unselected package libwww-perl. Preparing to unpack .../077-libwww-perl_6.78-1_all.deb ... Unpacking libwww-perl (6.78-1) ... Selecting previously unselected package patchutils. Preparing to unpack .../078-patchutils_0.4.2-1+b1_arm64.deb ... Unpacking patchutils (0.4.2-1+b1) ... Selecting previously unselected package gpgv. Preparing to unpack .../079-gpgv_2.4.7-21+b3_arm64.deb ... Unpacking gpgv (2.4.7-21+b3) ... Selecting previously unselected package sopv-gpgv. Preparing to unpack .../080-sopv-gpgv_0.1.4-1_all.deb ... Unpacking sopv-gpgv (0.1.4-1) ... Selecting previously unselected package wdiff. Preparing to unpack .../081-wdiff_1.2.2-9_arm64.deb ... Unpacking wdiff (1.2.2-9) ... Selecting previously unselected package devscripts. Preparing to unpack .../082-devscripts_2.25.15_all.deb ... Unpacking devscripts (2.25.15) ... Selecting previously unselected package rubygems-integration. Preparing to unpack .../083-rubygems-integration_1.19_all.deb ... Unpacking rubygems-integration (1.19) ... Selecting previously unselected package ruby-csv. Preparing to unpack .../084-ruby-csv_3.3.4-1_all.deb ... Unpacking ruby-csv (3.3.4-1) ... Selecting previously unselected package ruby-did-you-mean. Preparing to unpack .../085-ruby-did-you-mean_1.6.3-2_all.deb ... Unpacking ruby-did-you-mean (1.6.3-2) ... Selecting previously unselected package ruby-net-telnet. Preparing to unpack .../086-ruby-net-telnet_0.2.0-1_all.deb ... Unpacking ruby-net-telnet (0.2.0-1) ... Selecting previously unselected package ruby-ruby2-keywords. Preparing to unpack .../087-ruby-ruby2-keywords_0.0.5-1_all.deb ... Unpacking ruby-ruby2-keywords (0.0.5-1) ... Selecting previously unselected package ruby-webrick. Preparing to unpack .../088-ruby-webrick_1.9.1-1_all.deb ... Unpacking ruby-webrick (1.9.1-1) ... Selecting previously unselected package ruby-xmlrpc. Preparing to unpack .../089-ruby-xmlrpc_0.3.3-2_all.deb ... Unpacking ruby-xmlrpc (0.3.3-2) ... Selecting previously unselected package libyaml-0-2:arm64. Preparing to unpack .../090-libyaml-0-2_0.2.5-2_arm64.deb ... Unpacking libyaml-0-2:arm64 (0.2.5-2) ... Selecting previously unselected package libruby3.3:arm64. Preparing to unpack .../091-libruby3.3_3.3.8-2_arm64.deb ... Unpacking libruby3.3:arm64 (3.3.8-2) ... Selecting previously unselected package ruby3.3. Preparing to unpack .../092-ruby3.3_3.3.8-2_arm64.deb ... Unpacking ruby3.3 (3.3.8-2) ... Selecting previously unselected package libruby:arm64. Preparing to unpack .../093-libruby_1%3a3.3+b1_arm64.deb ... Unpacking libruby:arm64 (1:3.3+b1) ... Selecting previously unselected package ruby-rubygems. Preparing to unpack .../094-ruby-rubygems_3.6.7-2_all.deb ... Unpacking ruby-rubygems (3.6.7-2) ... Selecting previously unselected package ruby. Preparing to unpack .../095-ruby_1%3a3.3+b1_arm64.deb ... Unpacking ruby (1:3.3+b1) ... Selecting previously unselected package rake. Preparing to unpack .../096-rake_13.2.1-1_all.deb ... Unpacking rake (13.2.1-1) ... Selecting previously unselected package ruby-minitest. Preparing to unpack .../097-ruby-minitest_5.25.4-3_all.deb ... Unpacking ruby-minitest (5.25.4-3) ... Selecting previously unselected package ruby-power-assert. Preparing to unpack .../098-ruby-power-assert_2.0.3-1_all.deb ... Unpacking ruby-power-assert (2.0.3-1) ... Selecting previously unselected package ruby-test-unit. Preparing to unpack .../099-ruby-test-unit_3.6.2-1_all.deb ... Unpacking ruby-test-unit (3.6.2-1) ... Selecting previously unselected package gem2deb-test-runner. Preparing to unpack .../100-gem2deb-test-runner_2.2.5_arm64.deb ... Unpacking gem2deb-test-runner (2.2.5) ... Selecting previously unselected package libgmpxx4ldbl:arm64. Preparing to unpack .../101-libgmpxx4ldbl_2%3a6.3.0+dfsg-3_arm64.deb ... Unpacking libgmpxx4ldbl:arm64 (2:6.3.0+dfsg-3) ... Selecting previously unselected package libgmp-dev:arm64. Preparing to unpack .../102-libgmp-dev_2%3a6.3.0+dfsg-3_arm64.deb ... Unpacking libgmp-dev:arm64 (2:6.3.0+dfsg-3) ... Selecting previously unselected package ruby3.3-dev:arm64. Preparing to unpack .../103-ruby3.3-dev_3.3.8-2_arm64.deb ... Unpacking ruby3.3-dev:arm64 (3.3.8-2) ... Selecting previously unselected package ruby-all-dev:arm64. Preparing to unpack .../104-ruby-all-dev_1%3a3.3+b1_arm64.deb ... Unpacking ruby-all-dev:arm64 (1:3.3+b1) ... Selecting previously unselected package gem2deb. Preparing to unpack .../105-gem2deb_2.2.5_arm64.deb ... Unpacking gem2deb (2.2.5) ... Selecting previously unselected package ruby-nio4r. Preparing to unpack .../106-ruby-nio4r_2.7.3-1+b2_arm64.deb ... Unpacking ruby-nio4r (2.7.3-1+b2) ... Selecting previously unselected package puma. Preparing to unpack .../107-puma_6.6.0-4_arm64.deb ... Unpacking puma (6.6.0-4) ... Selecting previously unselected package ruby-concurrent. Preparing to unpack .../108-ruby-concurrent_1.3.5-1_all.deb ... Unpacking ruby-concurrent (1.3.5-1) ... Selecting previously unselected package ruby-i18n. Preparing to unpack .../109-ruby-i18n_1.14.7-1_all.deb ... Unpacking ruby-i18n (1.14.7-1) ... Selecting previously unselected package ruby-tzinfo. Preparing to unpack .../110-ruby-tzinfo_2.0.6-1_all.deb ... Unpacking ruby-tzinfo (2.0.6-1) ... Selecting previously unselected package ruby-connection-pool. Preparing to unpack .../111-ruby-connection-pool_2.4.1-1_all.deb ... Unpacking ruby-connection-pool (2.4.1-1) ... Selecting previously unselected package ruby-base64. Preparing to unpack .../112-ruby-base64_0.2.0-2_all.deb ... Unpacking ruby-base64 (0.2.0-2) ... Selecting previously unselected package ruby-activesupport. Preparing to unpack .../113-ruby-activesupport_2%3a7.2.2.1+dfsg-7_all.deb ... Unpacking ruby-activesupport (2:7.2.2.1+dfsg-7) ... Selecting previously unselected package ruby-numerizer. Preparing to unpack .../114-ruby-numerizer_0.2.0-3_all.deb ... Unpacking ruby-numerizer (0.2.0-3) ... Selecting previously unselected package ruby-chronic. Preparing to unpack .../115-ruby-chronic_0.10.5-3_all.deb ... Unpacking ruby-chronic (0.10.5-3) ... Selecting previously unselected package ruby-delorean. Preparing to unpack .../116-ruby-delorean_2.1.0-2.1_all.deb ... Unpacking ruby-delorean (2.1.0-2.1) ... Selecting previously unselected package ruby-diff-lcs. Preparing to unpack .../117-ruby-diff-lcs_1.5.1-1_all.deb ... Unpacking ruby-diff-lcs (1.5.1-1) ... Selecting previously unselected package ruby-eventmachine:arm64. Preparing to unpack .../118-ruby-eventmachine_1.3~pre20220315-df4ab006-5+b2_arm64.deb ... Unpacking ruby-eventmachine:arm64 (1.3~pre20220315-df4ab006-5+b2) ... Selecting previously unselected package ruby-formatador. Preparing to unpack .../119-ruby-formatador_1.1.0-1_all.deb ... Unpacking ruby-formatador (1.1.0-1) ... Selecting previously unselected package ruby-kgio. Preparing to unpack .../120-ruby-kgio_2.11.2-2+b9_arm64.deb ... Unpacking ruby-kgio (2.11.2-2+b9) ... Selecting previously unselected package ruby-multi-json. Preparing to unpack .../121-ruby-multi-json_1.15.0-1_all.deb ... Unpacking ruby-multi-json (1.15.0-1) ... Selecting previously unselected package ruby-mustermann. Preparing to unpack .../122-ruby-mustermann_3.0.0-2_all.deb ... Unpacking ruby-mustermann (3.0.0-2) ... Selecting previously unselected package ruby-open4. Preparing to unpack .../123-ruby-open4_1.3.4-3_all.deb ... Unpacking ruby-open4 (1.3.4-3) ... Selecting previously unselected package ruby-rack. Preparing to unpack .../124-ruby-rack_3.1.16-0.1_all.deb ... Unpacking ruby-rack (3.1.16-0.1) ... Selecting previously unselected package ruby-rack-protection. Preparing to unpack .../125-ruby-rack-protection_4.1.1-5_all.deb ... Unpacking ruby-rack-protection (4.1.1-5) ... Selecting previously unselected package ruby-rack-session. Preparing to unpack .../126-ruby-rack-session_2.1.1-0.1_all.deb ... Unpacking ruby-rack-session (2.1.1-0.1) ... Selecting previously unselected package ruby-rackup. Preparing to unpack .../127-ruby-rackup_2.1.0-4_all.deb ... Unpacking ruby-rackup (2.1.0-4) ... Selecting previously unselected package ruby-raindrops:arm64. Preparing to unpack .../128-ruby-raindrops_0.20.0-2+b1_arm64.deb ... Unpacking ruby-raindrops:arm64 (0.20.0-2+b1) ... Selecting previously unselected package ruby-rspec-support. Preparing to unpack .../129-ruby-rspec-support_3.13.0c0e0m0s1-2_all.deb ... Unpacking ruby-rspec-support (3.13.0c0e0m0s1-2) ... Selecting previously unselected package ruby-rspec-core. Preparing to unpack .../130-ruby-rspec-core_3.13.0c0e0m0s1-2_all.deb ... Unpacking ruby-rspec-core (3.13.0c0e0m0s1-2) ... Selecting previously unselected package ruby-rspec-expectations. Preparing to unpack .../131-ruby-rspec-expectations_3.13.0c0e0m0s1-2_all.deb ... Unpacking ruby-rspec-expectations (3.13.0c0e0m0s1-2) ... Selecting previously unselected package ruby-rspec-mocks. Preparing to unpack .../132-ruby-rspec-mocks_3.13.0c0e0m0s1-2_all.deb ... Unpacking ruby-rspec-mocks (3.13.0c0e0m0s1-2) ... Selecting previously unselected package ruby-rspec. Preparing to unpack .../133-ruby-rspec_3.13.0c0e0m0s1-2_all.deb ... Unpacking ruby-rspec (3.13.0c0e0m0s1-2) ... Selecting previously unselected package ruby-shindo. Preparing to unpack .../134-ruby-shindo_0.3.10-2_all.deb ... Unpacking ruby-shindo (0.3.10-2) ... Selecting previously unselected package ruby-tilt. Preparing to unpack .../135-ruby-tilt_2.4.0-3_all.deb ... Unpacking ruby-tilt (2.4.0-3) ... Selecting previously unselected package ruby-sinatra. Preparing to unpack .../136-ruby-sinatra_4.1.1-5_all.deb ... Unpacking ruby-sinatra (4.1.1-5) ... Selecting previously unselected package ruby-sinatra-contrib. Preparing to unpack .../137-ruby-sinatra-contrib_4.1.1-5_all.deb ... Unpacking ruby-sinatra-contrib (4.1.1-5) ... Selecting previously unselected package unicorn. Preparing to unpack .../138-unicorn_6.1.0+git.20250131.1370f52-1+b1_arm64.deb ... Unpacking unicorn (6.1.0+git.20250131.1370f52-1+b1) ... Setting up media-types (13.0.0) ... Setting up libpipeline1:arm64 (1.5.8-1) ... Setting up wdiff (1.2.2-9) ... Setting up ruby-multi-json (1.15.0-1) ... Setting up libfile-which-perl (1.27-2) ... Setting up libnpth0t64:arm64 (1.8-3) ... Setting up ruby-ruby2-keywords (0.0.5-1) ... Setting up ruby-mustermann (3.0.0-2) ... Setting up bsdextrautils (2.41-5) ... Setting up libgpg-error0:arm64 (1.51-4) ... Setting up ruby-open4 (1.3.4-3) ... Setting up libdynaloader-functions-perl (0.004-2) ... Setting up libclass-method-modifiers-perl (2.15-1) ... Setting up ruby-power-assert (2.0.3-1) ... Setting up libmagic-mgc (1:5.46-5) ... Setting up libclone-perl:arm64 (0.47-1+b1) ... Setting up libarchive-zip-perl (1.68-1) ... Setting up libyaml-0-2:arm64 (0.2.5-2) ... Setting up libhtml-tagset-perl (3.24-1) ... Setting up libdebhelper-perl (13.24.2) ... Setting up liblwp-mediatypes-perl (6.04-2) ... Setting up libmagic1t64:arm64 (1:5.46-5) ... Setting up libtry-tiny-perl (0.32-1) ... Setting up perl-openssl-defaults:arm64 (7+b2) ... Setting up gettext-base (0.23.1-2) ... Setting up m4 (1.4.19-8) ... Setting up libgcrypt20:arm64 (1.11.0-7) ... Setting up libencode-locale-perl (1.05-3) ... Setting up file (1:5.46-5) ... Setting up ruby-concurrent (1.3.5-1) ... Setting up libelf1t64:arm64 (0.192-4) ... Setting up tzdata (2025b-4) ... Current default time zone: 'Etc/UTC' Local time is now: Tue Sep 8 10:14:05 UTC 2026. Universal Time is now: Tue Sep 8 10:14:05 UTC 2026. Run 'dpkg-reconfigure tzdata' if you wish to change it. Setting up ruby-minitest (5.25.4-3) ... Setting up autotools-dev (20240727.1) ... Setting up libgmpxx4ldbl:arm64 (2:6.3.0+dfsg-3) ... Setting up ruby-test-unit (3.6.2-1) ... Setting up ruby-net-telnet (0.2.0-1) ... Setting up ruby-csv (3.3.4-1) ... Setting up ruby-base64 (0.2.0-2) ... Setting up libunistring5:arm64 (1.3-2) ... Setting up libio-html-perl (1.004-3) ... Setting up autopoint (0.23.1-2) ... Setting up libb-hooks-op-check-perl:arm64 (0.22-3+b2) ... Setting up ruby-i18n (1.14.7-1) ... Setting up autoconf (2.72-3.1) ... Setting up ruby-rspec-support (3.13.0c0e0m0s1-2) ... Setting up libtimedate-perl (2.3300-2) ... Setting up ruby-webrick (1.9.1-1) ... Setting up libffi8:arm64 (3.4.8-2) ... Setting up dwz (0.15-1+b1) ... Setting up sensible-utils (0.0.25) ... Setting up gpgv (2.4.7-21+b3) ... Setting up libuchardet0:arm64 (0.0.8-1+b2) ... Setting up libassuan9:arm64 (3.0.2-2) ... Setting up librole-tiny-perl (2.002004-1) ... Setting up netbase (6.5) ... Setting up libsub-quote-perl (2.006008-1) ... Setting up libclass-xsaccessor-perl (1.19-4+b5) ... Setting up ruby-connection-pool (2.4.1-1) ... Setting up ruby-did-you-mean (1.6.3-2) ... Setting up libfile-dirlist-perl (0.05-3) ... Setting up libfile-homedir-perl (1.006-2) ... Setting up openssl (3.5.1-1) ... Setting up readline-common (8.2-6) ... Setting up ruby-numerizer (0.2.0-3) ... Setting up ruby-xmlrpc (0.3.3-2) ... Setting up libxml2:arm64 (2.12.7+dfsg+really2.9.14-2.1) ... Setting up liburi-perl (5.30-1) ... Setting up libfile-touch-perl (0.12-2) ... Setting up libnet-ssleay-perl:arm64 (1.94-3) ... Setting up automake (1:1.17-4) ... update-alternatives: using /usr/bin/automake-1.17 to provide /usr/bin/automake (automake) in auto mode Setting up libksba8:arm64 (1.6.7-2+b1) ... Setting up pinentry-curses (1.3.1-2) ... Setting up libfile-stripnondeterminism-perl (1.14.1-2) ... Setting up libhttp-date-perl (6.06-1) ... Setting up gettext (0.23.1-2) ... Setting up libgmp-dev:arm64 (2:6.3.0+dfsg-3) ... Setting up libfile-listing-perl (6.16-1) ... Setting up libtool (2.5.4-4) ... Setting up ruby-chronic (0.10.5-3) ... Setting up ruby-tzinfo (2.0.6-1) ... Setting up libnet-http-perl (6.23-1) ... Setting up libdevel-callchecker-perl:arm64 (0.009-2) ... Setting up intltool-debian (0.35.0+20060710.6) ... Setting up dh-autoreconf (20) ... Setting up patchutils (0.4.2-1+b1) ... Setting up ca-certificates (20250419) ... Updating certificates in /etc/ssl/certs... 150 added, 0 removed; done. Setting up libreadline8t64:arm64 (8.2-6) ... Setting up dh-strip-nondeterminism (1.14.1-2) ... Setting up libwww-robotrules-perl (6.02-1) ... Setting up groff-base (1.23.0-9) ... Setting up libhtml-parser-perl:arm64 (3.83-1+b2) ... Setting up gpgconf (2.4.7-21+b3) ... Setting up libpython3.13-stdlib:arm64 (3.13.5-2) ... Setting up libio-socket-ssl-perl (2.089-1) ... Setting up gpg (2.4.7-21+b3) ... Setting up libpython3-stdlib:arm64 (3.13.5-1) ... Setting up libhttp-message-perl (7.00-2) ... Setting up libhttp-negotiate-perl (6.01-2) ... Setting up gpg-agent (2.4.7-21+b3) ... Setting up libhttp-cookies-perl (6.11-1) ... Setting up python3.13 (3.13.5-2) ... Setting up po-debconf (1.0.21+nmu1) ... Setting up libhtml-tree-perl (5.07-3) ... Setting up libparams-classify-perl:arm64 (0.015-2+b4) ... Setting up python3 (3.13.5-1) ... Setting up rubygems-integration (1.19) ... Setting up sopv-gpgv (0.1.4-1) ... update-alternatives: using /usr/bin/sopv-gpgv to provide /usr/bin/sopv (sopv) in auto mode Setting up man-db (2.13.1-1) ... Not building database; man-db/auto-update is not 'true'. Setting up libmodule-runtime-perl (0.018-1) ... Setting up libimport-into-perl (1.002005-2) ... Setting up libmoo-perl (2.005005-1) ... Setting up debhelper (13.24.2) ... Setting up rake (13.2.1-1) ... Setting up liblwp-protocol-https-perl (6.14-1) ... Setting up libwww-perl (6.78-1) ... Setting up libruby3.3:arm64 (3.3.8-2) ... Setting up ruby-activesupport (2:7.2.2.1+dfsg-7) ... Setting up ruby-rubygems (3.6.7-2) ... Setting up devscripts (2.25.15) ... Setting up ruby3.3-dev:arm64 (3.3.8-2) ... Setting up ruby3.3 (3.3.8-2) ... Setting up libruby:arm64 (1:3.3+b1) ... Setting up ruby-eventmachine:arm64 (1.3~pre20220315-df4ab006-5+b2) ... Setting up ruby-raindrops:arm64 (0.20.0-2+b1) ... Setting up ruby-all-dev:arm64 (1:3.3+b1) ... Setting up ruby (1:3.3+b1) ... Setting up ruby-nio4r (2.7.3-1+b2) ... Setting up ruby-rspec-core (3.13.0c0e0m0s1-2) ... Setting up ruby-tilt (2.4.0-3) ... Setting up ruby-kgio (2.11.2-2+b9) ... Setting up ruby-diff-lcs (1.5.1-1) ... Setting up puma (6.6.0-4) ... Setting up ruby-delorean (2.1.0-2.1) ... Setting up ruby-rack (3.1.16-0.1) ... Setting up gem2deb-test-runner (2.2.5) ... Setting up ruby-formatador (1.1.0-1) ... Setting up unicorn (6.1.0+git.20250131.1370f52-1+b1) ... Setting up ruby-rspec-expectations (3.13.0c0e0m0s1-2) ... Setting up ruby-rspec-mocks (3.13.0c0e0m0s1-2) ... Setting up ruby-shindo (0.3.10-2) ... Setting up gem2deb (2.2.5) ... Setting up ruby-rack-session (2.1.1-0.1) ... Setting up ruby-rack-protection (4.1.1-5) ... Setting up ruby-rackup (2.1.0-4) ... Setting up ruby-rspec (3.13.0c0e0m0s1-2) ... Setting up ruby-sinatra (4.1.1-5) ... Setting up ruby-sinatra-contrib (4.1.1-5) ... Processing triggers for libc-bin (2.41-11) ... Processing triggers for ca-certificates (20250419) ... Updating certificates in /etc/ssl/certs... 0 added, 0 removed; done. Running hooks in /etc/ca-certificates/update.d... done. Reading package lists... Building dependency tree... Reading state information... Reading extended state information... Initializing package states... Writing extended state information... Building tag database... -> Finished parsing the build-deps I: Building the package I: user script /srv/workspace/pbuilder/3118618/tmp/hooks/A99_set_merged_usr starting Not re-configuring usrmerge for trixie I: user script /srv/workspace/pbuilder/3118618/tmp/hooks/A99_set_merged_usr finished hostname: Name or service not known I: Running cd /build/reproducible-path/ruby-excon-0.112.0/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-genchanges -S > ../ruby-excon_0.112.0-4_source.changes dpkg-buildpackage: info: source package ruby-excon dpkg-buildpackage: info: source version 0.112.0-4 dpkg-buildpackage: info: source distribution unstable dpkg-buildpackage: info: source changed by Sruthi Chandran dpkg-source --before-build . dpkg-buildpackage: info: host architecture arm64 debian/rules clean dh clean --buildsystem=ruby --with ruby dh_auto_clean -O--buildsystem=ruby dh_ruby --clean dh_autoreconf_clean -O--buildsystem=ruby dh_clean -O--buildsystem=ruby debian/rules binary dh binary --buildsystem=ruby --with ruby dh_update_autotools_config -O--buildsystem=ruby dh_autoreconf -O--buildsystem=ruby dh_auto_configure -O--buildsystem=ruby dh_ruby --configure dh_auto_build -O--buildsystem=ruby dh_ruby --build dh_auto_test -O--buildsystem=ruby dh_ruby --test create-stamp debian/debhelper-build-stamp dh_testroot -O--buildsystem=ruby dh_prep -O--buildsystem=ruby dh_auto_install --destdir=debian/ruby-excon/ -O--buildsystem=ruby dh_ruby --install /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon ┌──────────────────────────────────────────────────────────────────────────────┐ │ ruby-excon: Installing files and building extensions for ruby3.3 │ └──────────────────────────────────────────────────────────────────────────────┘ /usr/bin/ruby3.3 -S gem build --config-file /dev/null --verbose /tmp/d20260909-3132119-3f08ef/gemspec WARNING: open-ended dependency on rspec (>= 3.5.0, development) is not recommended if rspec is semantically versioned, use: add_development_dependency "rspec", "~> 3.5", ">= 3.5.0" WARNING: open-ended dependency on activesupport (>= 0, development) is not recommended use a bounded requirement, such as "~> x.y" WARNING: open-ended dependency on delorean (>= 0, development) is not recommended use a bounded requirement, such as "~> x.y" WARNING: open-ended dependency on eventmachine (>= 1.0.4, development) is not recommended if eventmachine is semantically versioned, use: add_development_dependency "eventmachine", "~> 1.0", ">= 1.0.4" WARNING: open-ended dependency on open4 (>= 0, development) is not recommended use a bounded requirement, such as "~> x.y" WARNING: open-ended dependency on rake (>= 0, development) is not recommended use a bounded requirement, such as "~> x.y" WARNING: open-ended dependency on shindo (>= 0, development) is not recommended use a bounded requirement, such as "~> x.y" WARNING: open-ended dependency on sinatra (>= 0, development) is not recommended use a bounded requirement, such as "~> x.y" WARNING: open-ended dependency on sinatra-contrib (>= 0, development) is not recommended use a bounded requirement, such as "~> x.y" WARNING: open-ended dependency on json (>= 1.8.5, development) is not recommended if json is semantically versioned, use: add_development_dependency "json", "~> 1.8", ">= 1.8.5" WARNING: open-ended dependency on puma (>= 0, development) is not recommended use a bounded requirement, such as "~> x.y" WARNING: open-ended dependency on webrick (>= 0, development) is not recommended use a bounded requirement, such as "~> x.y" WARNING: You have specified the uri: https://github.com/excon/excon for all of the following keys: homepage_uri source_code_uri Only the first one will be shown on rubygems.org WARNING: See https://guides.rubygems.org/specification-reference/ for help Successfully built RubyGem Name: excon Version: 0.112.0 File: excon-0.112.0.gem /usr/bin/ruby3.3 -S gem install --config-file /dev/null --verbose --local --verbose --no-document --ignore-dependencies --install-dir debian/ruby-excon/usr/share/rubygems-integration/all /tmp/d20260909-3132119-3f08ef/excon-0.112.0.gem /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/data/cacert.pem /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/connection.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/constants.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/error.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/extensions/uri.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/headers.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/instrumentors/logging_instrumentor.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/instrumentors/standard_instrumentor.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/middlewares/base.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/middlewares/capture_cookies.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/middlewares/decompress.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/middlewares/escape_path.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/middlewares/expects.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/middlewares/idempotent.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/middlewares/instrumentor.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/middlewares/mock.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/middlewares/redirect_follower.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/middlewares/response_parser.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/pretty_printer.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/response.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/socket.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/ssl_socket.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/test/plugin/server/exec.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/test/plugin/server/puma.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/test/plugin/server/unicorn.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/test/plugin/server/webrick.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/test/server.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/unix_socket.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/utils.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/version.rb Successfully installed excon-0.112.0 1 gem installed cd debian/ruby-excon/usr/share/rubygems-integration/all rm -rf bin rm -rf build_info rm -rf cache rm -rf doc rm -rf extensions rmdir plugins cd gems/excon-0.112.0 rm -f chmod 644 lib/excon/connection.rb lib/excon/constants.rb lib/excon/error.rb lib/excon/extensions/uri.rb lib/excon/headers.rb lib/excon/instrumentors/logging_instrumentor.rb lib/excon/instrumentors/standard_instrumentor.rb lib/excon/middlewares/base.rb lib/excon/middlewares/capture_cookies.rb lib/excon/middlewares/decompress.rb lib/excon/middlewares/escape_path.rb lib/excon/middlewares/expects.rb lib/excon/middlewares/idempotent.rb lib/excon/middlewares/instrumentor.rb lib/excon/middlewares/mock.rb lib/excon/middlewares/redirect_follower.rb lib/excon/middlewares/response_parser.rb lib/excon/pretty_printer.rb lib/excon/response.rb lib/excon/socket.rb lib/excon/ssl_socket.rb lib/excon/test/plugin/server/exec.rb lib/excon/test/plugin/server/puma.rb lib/excon/test/plugin/server/unicorn.rb lib/excon/test/plugin/server/webrick.rb lib/excon/test/server.rb lib/excon/unix_socket.rb lib/excon/utils.rb lib/excon/version.rb lib/excon.rb find lib/ -type d -empty -delete cd - cd - /usr/bin/ruby3.3 /usr/bin/gem2deb-test-runner ┌──────────────────────────────────────────────────────────────────────────────┐ │ Checking Rubygems dependency resolution on ruby3.3 │ └──────────────────────────────────────────────────────────────────────────────┘ RUBYLIB=. GEM_PATH=/build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all:/build/reproducible-path/ruby-excon-0.112.0/debian/.debhelper/generated/_source/home/.local/share/gem/ruby/3.3.0:/var/lib/gems/3.3.0:/usr/local/lib/ruby/gems/3.3.0:/usr/lib/ruby/gems/3.3.0:/usr/lib/aarch64-linux-gnu/ruby/gems/3.3.0:/usr/share/rubygems-integration/3.3.0:/usr/share/rubygems-integration/all:/usr/lib/aarch64-linux-gnu/rubygems-integration/3.3.0 ruby3.3 -e gem\ \"excon\" ┌──────────────────────────────────────────────────────────────────────────────┐ │ Run tests for ruby3.3 from debian/ruby-tests.rake │ └──────────────────────────────────────────────────────────────────────────────┘ RUBYLIB=. GEM_PATH=/build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all:/build/reproducible-path/ruby-excon-0.112.0/debian/.debhelper/generated/_source/home/.local/share/gem/ruby/3.3.0:/var/lib/gems/3.3.0:/usr/local/lib/ruby/gems/3.3.0:/usr/lib/ruby/gems/3.3.0:/usr/lib/aarch64-linux-gnu/ruby/gems/3.3.0:/usr/share/rubygems-integration/3.3.0:/usr/share/rubygems-integration/all:/usr/lib/aarch64-linux-gnu/rubygems-integration/3.3.0 ruby3.3 -S rake --rakelibdir /gem2deb-nonexistent -f debian/ruby-tests.rake sh: line 1: git: command not found /usr/bin/ruby3.3 -S shindo Excon bad server interaction header splitting prevents key splitting + raises Excon::Error::InvalidHeaderKey prevents value splitting + raises Excon::Error::InvalidHeaderValue bad server: causes EOFError with no content length and no chunking without a block response.body + returns "hello" with a block body from chunks + returns "hello" eof server: causes EOFError request + raises Excon::Error::Socket Excon basics + returns true nonblock => true, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 explicit uri passed to connection GET /content-length/100 + returns 200 Excon streaming basics http + returns true simple blocking request on streaming endpoint + returns ["Hellostreamyworld", "response time ok"] simple blocking request on streaming endpoint with fixed length + returns ["Hellostreamyworld", "response time ok"] simple request with response_block on streaming endpoint + returns [["Hello", "streamy", "world"], "response times ok"] simple request with response_block on streaming endpoint with fixed length + returns [["Hello", "streamy", "world"], "response times ok"] https + returns true simple blocking request on streaming endpoint + returns ["Hellostreamyworld", "response time ok"] simple blocking request on streaming endpoint with fixed length + returns ["Hellostreamyworld", "response time ok"] simple request with response_block on streaming endpoint + returns [["Hello", "streamy", "world"], "response times ok"] simple request with response_block on streaming endpoint with fixed length + returns [["Hello", "streamy", "world"], "response times ok"] Excon basics (Basic Auth Pass) + returns true nonblock => true, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 with frozen args + returns 200 with user/pass on request + returns 200 with user/pass on connection and request + returns 200 Excon basics (Basic Auth Fail) response.status for correct user, no password + returns 401 response.status for correct user, wrong password + returns 401 response.status for wrong user, correct password + returns 401 Excon basics (ssl) + returns true nonblock => true, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 [2026-09-09 00:15:18] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' [2026-09-09 00:15:20] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' Excon basics verify_hostname (ssl) + returns true response.status + returns 200 Excon ssl verify peer (ssl) + returns true response.status + returns 200 + returns true response.status + returns 200 + returns true response.status + returns 200 Excon ssl verify peer (ssl cert store) + returns true response.status + returns 200 Excon basics (ssl file) (focus) GET /content-length/100 + raises Excon::Error::Socket + returns true nonblock => true, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 [2026-09-09 00:15:36] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' [2026-09-09 00:15:37] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' [2026-09-09 00:15:37] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' [2026-09-09 00:15:37] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' [2026-09-09 00:15:40] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' [2026-09-09 00:15:42] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' Excon basics (ssl chain) (focus) GET /content-length/100 + raises Excon::Error::Socket + returns true nonblock => true, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 [2026-09-09 00:15:47] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' [2026-09-09 00:15:48] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' [2026-09-09 00:15:50] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' [2026-09-09 00:15:50] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' Excon basics (ssl file paths) (focus) GET /content-length/100 + raises Excon::Error::Socket + returns true nonblock => true, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 [2026-09-09 00:16:05] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' [2026-09-09 00:16:05] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' Excon basics (ssl string) (focus) + returns true nonblock => true, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" + Time.parse(response.headers['Date']).is_a?(Time) + !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip + returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 [2026-09-09 00:16:12] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' [2026-09-09 00:16:15] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' Excon basics (Unix socket) + returns true nonblock => true, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" # Time.parse(response.headers['Date']).is_a?(Time) # !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip # returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => true, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" # Time.parse(response.headers['Date']).is_a?(Time) # !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip # returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => true method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" # Time.parse(response.headers['Date']).is_a?(Time) # !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip # returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 + returns true nonblock => false, persistent => false method and path defaults request().body + returns "GET /" request(:headers => {'host' => '127.0.0.1'}) + returns "GET /" request(:method => :get).body + returns "GET /" request(:path => '/').body + returns "GET /" request(:method => :get, :path => '/').body + returns "GET /" GET /content-length/100 response.status + returns 200 response[:status] + returns 200 response.headers['Content-Length'] + returns "100" response.headers['Content-Type'] + returns "text/html;charset=utf-8" # Time.parse(response.headers['Date']).is_a?(Time) # !!(response.headers['Server'] =~ /^WEBrick/) response.headers['Custom'] + returns "Foo: bar" response.remote_ip # returns "127.0.0.1" response.body + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" deprecated block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] response_block usage + returns ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 100] POST /body-sink response.body + returns "5000000" empty body + returns "0" POST /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body PUT /echo with file + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" without request_block + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" request_block usage + returns "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" with multi-byte strings + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 explicit uri passed to connection GET /content-length/100 + returns 200 http Host header is empty GET /headers + returns "" Excon basics (reusable local port) (localportreuse) has a local port + returns true local port can be re-bound # returns "xxxxxxxxxx" Excon Connection #socket connects, sets data[:remote_ip] + returns "127.0.0.1" persistent connections + successful uninterrupted request + resets connection after interrupt + fork safety inspect redaction + authorization/proxy-authorization headers concealed for user & pass + password param concealed for user & pass + password param not mutated for user & pass + proxy password param concealed for proxy: user & pass + proxy password param not mutated for proxy: user & pass + authorization/proxy-authorization headers concealed for email & pass + password param concealed for email & pass + password param not mutated for email & pass + proxy password param concealed for proxy: email & pass + proxy password param not mutated for proxy: email & pass + authorization/proxy-authorization headers concealed for user no pass + authorization/proxy-authorization headers concealed for pass no user + password param concealed for pass no user + password param not mutated for pass no user + proxy password param concealed for proxy: pass no user + proxy password param not mutated for proxy: pass no user HTTPStatusError request/response debugging Excon::Error knows about pertinent errors new returns an Error + returns true new raises errors for bad URIs + returns true new raises errors for bad paths + returns true can raise standard error and catch standard error + returns true can raise legacy errors and catch legacy errors + returns true can raise standard error and catch legacy errors + returns true can raise with status_error() and catch with standard error + returns true can raise with status_error() and catch with legacy error + returns true can raise with legacy status_error() and catch with legacy + returns true can raise with legacy status_error() and catch with standard + returns true message does not include response or response info + returns true message includes only request info + returns true message includes only response info + returns true message include request and response info + returns true Excon response header support Excon::Headers storage stores and retrieves as received + returns "expected" enumerates keys as received contains Exact-Case + returns true contains Another-Fixture + returns true supports case-insensitive access + returns "expected" but still returns nil for missing keys + returns nil Hash methods that should support case-insensitive access #assoc + returns ["exact-case", "expected"] #delete with just a key + returns "yes" with a proc + returns "called with notpresent" #fetch when present + returns "expected" with a default value + returns "default" with a default proc + returns "got missing" #has_key? when present + returns true when absent + returns false #values_at all present + returns ["expected", "another"] some missing + returns ["expected", nil] Response#get_header with variable header capitalization response.get_header("mixedcase-header") + returns "MixedCase" response.get_header("uppercase-header") + returns "UPPERCASE" response.get_header("lowercase-header") + returns "lowercase" when provided key capitalization varies response.get_header("MIXEDCASE-HEADER") + returns "MixedCase" response.get_header("MiXeDcAsE-hEaDeR") + returns "MixedCase" when header is unavailable response.get_header("missing") + returns nil logging instrumentor connection logger + returns true connection logger with query as hash + returns true Excon middleware succeeds without defining valid_parameter_keys Excon support for middlewares that return canned responses does not mutate the canned response body + returns "canned" yields non-mutated body to response_block + returns "canned" Excon redirecting with cookie preserved second request will send cookies set by the first + returns "ok" second request will send multiple cookies set by the first + returns "ok" runs normally when there are no cookies set + returns "ok" Excon Decompress Middleware gzip response body decompressed + returns "hello world" server sent content-encoding + returns "gzip" removes processed encoding from header + returns "" empty response body + returns "" deflate response body decompressed + returns "hello world" server sent content-encoding + returns "deflate" removes processed encoding from header + returns "" deflate-raw response body decompressed + returns "hello world" server sent content-encoding + returns "deflate" removes processed encoding from header + returns "" with pre-encoding server sent content-encoding + returns "other, gzip" processed encoding removed from header + returns "other" response body decompressed + returns "hello world" with post-encoding server sent content-encoding + returns "gzip, other" unprocessed since last applied is unknown + returns "gzip, other" response body still compressed + returns "hello world" with a :response_block server sent content-encoding + returns "gzip" unprocessed since :response_block was used + returns "gzip" :response_block passed unprocessed data + returns "hello world" adds Accept-Encoding if needed without a :response_block + returns "deflate, gzip" with a :response_block + returns nil Excon Decompress Middleware encoded uri passed to connection GET /echo%20dirty + returns 200 unencoded uri passed to connection GET /echo dirty + returns 200 Excon request idempotencey Non-idempotent call with an erroring socket + raises Excon::Error::Socket Idempotent request with socket erroring first 3 times + returns 200 Idempotent request with socket erroring first 5 times + raises Excon::Error::Socket Lowered retry limit with socket erroring first time + returns 200 Lowered retry limit with socket erroring first 3 times + raises Excon::Error::Socket Raised retry limit with socket erroring first 5 times + returns 200 Raised retry limit with socket erroring first 9 times + raises Excon::Error::Socket Retry limit in constructor with socket erroring first 5 times + returns 200 Retry limit and sleep in constructor with socket erroring first 2 times + returns 200 Retry limit and sleep in constructor with socket erroring first 2 times + raises Excon::Error::Socket Idempotent request with custom error first 3 times + returns 200 Idempotent request with custom error first 5 times + raises RuntimeError Overriding default retry_errors + raises Excon::Error::Socket request_block rewound + returns true response_block rewound + returns true Excon instrumentation basic notification + returns ["excon.request", "excon.response"] captures scheme, host, port, and path + returns [:host, :path, :port, :scheme] params in request overwrite those in constructor + returns "/cheezburger" notify on retry + returns 3 notify on error + raises Excon::Error::Socket + returns true filtering + raises Excon::Error::Socket + returns ["excon.request", "excon.error"] more filtering + raises Excon::Error::Socket + returns ["excon.retry", "excon.retry", "excon.retry"] indicates duration + returns true standard instrumentor success + raises Excon::Error::Socket + returns ["excon.request", "excon.retry", "excon.retry", "excon.retry", "excon.error"] authorization header REDACT + raises Excon::Error::Socket + does not appear in response + does not mutate Authorization value password REDACT + raises Excon::Error::Socket + does not appear in response + does not mutate password value proxy password REDACT + raises Excon::Error::Socket + does not appear in response + does not mutate password value use our own instrumentor + raises Excon::Error::Socket + returns ["excon.request", "excon.retry", "excon.retry", "excon.retry", "excon.error"] always passes the block + returns ["excon.request", "excon.response"] does not generate events when not provided + returns 0 allows setting the prefix + raises Excon::Error::Socket + returns ["gug.request", "gug.retry", "gug.retry", "gug.retry", "gug.error"] allows setting the prefix when not idempotent + raises Excon::Error::Socket + returns ["gug.request", "gug.error"] works unmocked + returns ["excon.request", "excon.response"] Excon stubs missing stub + raises Excon::Error::StubNotFound stub({}) + raises ArgumentError stub({}, {}) {} + raises ArgumentError stub({:method => :get}, {:body => 'body', :status => 200}) response.body + returns "body" response.headers + returns {} response.status + returns 200 response_block yields body + returns "body" response.body empty with response_block + returns "" stub({:path => %r{/tests/(S+)}}, {:body => $1, :status => 200}) response.body + returns "test" response.headers + returns {} response.status + returns 200 stub({:body => 'body', :method => :get}) {|params| {:body => params[:body], :headers => params[:headers], :status => 200}} response.body + returns "body" response.headers + returns {"Accept"=>"*/*", "Host"=>"127.0.0.1:9292", "User-Agent"=>"excon/0.112.0"} response.status + returns 200 response_block yields body + returns "body" response.body empty with response_block + returns "" stub({:body => File.open(...), :method => :get}, { :status => 200 }) response.status + returns 200 invalid stub response + raises Excon::Error::InvalidStub mismatched stub + raises Excon::Error::StubNotFound allow mismatched stub + returns 200 stub({}, {:body => 'x' * (Excon::DEFAULT_CHUNK_SIZE + 1)}) + response_block yields body response.body empty with response_block + returns "" stub({:url => 'https://user:pass@foo.bar.com:9999/baz?quux=true'}, {:status => 200}) + get(:expects => 200) stub({}, {:status => 404, :body => 'Not Found'} request(:expects => 200, :method => :get, :path => '/') + raises Excon::Error::NotFound Expects exception should contain response object + returns Excon::Response + request(:expects => 200, :method => :get, :path => '/') with block does not invoke the block since it raises an error stub_for({}) stub_for({}) + returns [{}, {}] unstub({}) unstub({}) + returns [{}, {}] request(:method => :get) + raises Excon::Error::StubNotFound unstub({path: %r{/path}}) unstub({path: %r{/path}}) + returns [{:path=>/\/path/, :captures=>{:headers=>{}}}, {}] unstub non-existent stub unstub({}) + returns nil global stubs get on a different thread + returns "2" get on main thread + returns "2" thread-local stubs get on a different thread + returns "2" get on main thread + returns "1" Excon redirector support request(:method => :get, :path => '/old').body + returns "new" Excon redirector support with redirect loop request(:method => :get, :path => '/old') + raises Excon::Error::TooManyRedirects Excon redirect support for relative Location headers request(:method => :get, :path => '/old').body + returns "new" Excon redirect support for relative Location headers with dot segments request(:method => :get, :path => '/foo/baz/').body + returns "/foo/bar/" Excon redirecting post request request not have content-length and body + returns "ok" Pipelined Requests with default :persistent => true + connection is persistent with default :persistent => false + connection is persistent per call to #requests Excon proxy support proxy configuration no proxy connection.data[:proxy] + returns nil empty proxy connection.data[:proxy] + returns nil with fully-specified proxy: https://myproxy.net:8080 connection.data[:proxy][:host] + returns "myproxy.net" connection.data[:proxy][:port] + returns 8080 connection.data[:proxy][:scheme] + returns "https" with fully-specified Unix socket proxy: unix:/// connection.data[:proxy][:host] + returns nil connection.data[:proxy][:port] + returns nil connection.data[:proxy][:scheme] + returns "unix" connection.data[:proxy][:path] + returns "/tmp/myproxy.sock" with complete proxy config from the environment lowercase an http connection connection.data[:proxy][:host] + returns "myproxy" connection.data[:proxy][:port] + returns 8080 connection.data[:proxy][:scheme] + returns "http" with disable_proxy set connection.data[:proxy] + returns nil an https connection connection.data[:proxy][:host] + returns "mysecureproxy" connection.data[:proxy][:port] + returns 8081 connection.data[:proxy][:scheme] + returns "http" with disable_proxy set connection.data[:proxy] + returns nil http proxy from the environment overrides config connection.data[:proxy][:host] + returns "myproxy" connection.data[:proxy][:port] + returns 8080 an http connection in no_proxy connection.data[:proxy] + returns nil an http connection not completely matching no_proxy connection.data[:proxy][:host] + returns "myproxy" an http connection with subdomain in no_proxy connection.data[:proxy] + returns nil uppercase an http connection connection.data[:proxy][:host] + returns "myproxy" connection.data[:proxy][:port] + returns 8080 connection.data[:proxy][:scheme] + returns "http" with disable_proxy set connection.data[:proxy] + returns nil an https connection connection.data[:proxy][:host] + returns "mysecureproxy" connection.data[:proxy][:port] + returns 8081 connection.data[:proxy][:scheme] + returns "http" with disable_proxy set connection.data[:proxy] + returns nil http proxy from the environment overrides config connection.data[:proxy][:host] + returns "myproxy" connection.data[:proxy][:port] + returns 8080 an http connection in no_proxy connection.data[:proxy] + returns nil an http connection not completely matching no_proxy connection.data[:proxy][:host] + returns "myproxy" an http connection with subdomain in no_proxy connection.data[:proxy] + returns nil with only http_proxy config from the environment an https connection connection.data[:proxy][:host] + returns "myproxy" connection.data[:proxy][:port] + returns 8080 connection.data[:proxy][:scheme] + returns "http" with a unix socket proxy config from the environment an https connection connection.data[:proxy][:host] + returns nil connection.data[:proxy][:port] + returns nil connection.data[:proxy][:scheme] + returns "unix" connection.data[:proxy][:path] + returns "/tmp/myproxy.sock" http proxying: http://foo.com:8080 response.status + returns 200 sent Request URI + returns "http://foo.com:8080/bar?alpha=kappa" sent Sent-Host header + returns "foo.com:8080" sent Proxy-Connection header + returns "Keep-Alive" response.body (proxied content) + returns "proxied content" http proxying: http://user:pass@foo.com:8080 response.status + returns 200 sent Request URI + returns "http://foo.com:8080/bar?alpha=kappa" sent Host header + returns "foo.com:8080" sent Proxy-Connection header + returns "Keep-Alive" response.body (proxied content) + returns "proxied content" http proxying over unix socket: http://foo.com:8080 response.status + returns 200 sent Sent-Host header + returns "foo.com:8080" sent Proxy-Connection header + returns "Keep-Alive" response.body (proxied content) + returns "proxied content" Excon query string variants :query => {:foo => 'bar'} query string sent + returns "foo=bar" :query => {:foo => nil} query string sent + returns "foo" :query => {:foo => 'bar', :me => nil} + query string sent includes 'foo=bar' + query string sent includes 'me' :query => {:foo => 'bar', :me => 'too'} + query string sent includes 'foo=bar' + query string sent includes 'me=too' :query => {'foo[]' => ['bar', 'baz'], :me => 'too'} + query string sent includes 'foo%5B%5D=bar' + query string sent includes 'foo%5B%5D=baz' + query string sent includes 'me=too' :query => {'foo%=#' => 'bar%=#'} query string sent + returns "foo%25%3D%23=bar%25%3D%23" :query => {'foo%=#' => nil} query string sent + returns "foo%25%3D%23" Excon request methods empty headers sent + Excon.post header order host is the first sent header by default + returns "host: localhost:9292" Excon request methods one-offs Excon.get + returns "GET" Excon.post + returns "POST" Excon.delete + returns "DELETE" with a connection object connection.get + returns "GET" connection.post + returns "POST" connection.delete + returns "DELETE" not modifies path argument + returns "path" Request Tests persistent connections with default :persistent => true, 127.0.0.1:9292 + uses a persistent connection + :persistent => false resets connection with default :persistent => false, 127.0.0.1:9292 + does not use a persistent connection + :persistent => true enables persistence with default :persistent => true, [::1]:9293 + uses a persistent connection + :persistent => false resets connection with default :persistent => false, [::1]:9293 + does not use a persistent connection + :persistent => true enables persistence Excon Response Parsing responses with chunked transfer-encoding simple response + returns "hello world" with :response_block simple response + returns [["hello ", nil, nil], ["world", nil, nil]] simple response has empty body + returns "" with expected response status + returns [["hello ", nil, nil], ["world", nil, nil]] with unexpected response status + returns "hello world" merges trailers into headers + returns "one, two, three, four, five, six" removes 'chunked' from Transfer-Encoding + returns nil responses with content-length simple response + returns "hello world" with :response_block simple response + returns [["hello", 6, 11], [" worl", 1, 11], ["d", 0, 11]] simple response has empty body + returns "" with expected response status + returns [["hello", 6, 11], [" worl", 1, 11], ["d", 0, 11]] with unexpected response status + returns "hello world" responses with unknown length simple response + returns "hello world" with :response_block simple response + returns [["hello", nil, nil], [" worl", nil, nil], ["d", nil, nil]] simple response has empty body + returns "" with expected response status + returns [["hello", nil, nil], [" worl", nil, nil], ["d", nil, nil]] with unexpected response status + returns "hello world" cookies parses cookies into array + returns ["one, two", "three, four"] header continuation proper continuation + returns "one, two, three, four, five, six" malformed header + raises Excon::Error::Socket malformed header continuation + raises Excon::Error::Socket status line parsing proper status code + returns 404 proper reason phrase + returns "Not Found" socket chunk_size: read_nonblock readline nonblock is efficient + returns ["one\n", 1, [8, "EOF"]] readline nonblock works sequentially + returns [["one\n", "two\n"], 1, [8, "EOF"]] readline nonblock can handle partial reads + returns [["one\n", "two\n"], 2, [5, "EAGAIN", 3, "EOF"]] readline nonblock before read + returns [["one\n", "two\n"], 2, [8, "EOF"]] read_nonblock does not EOF early + returns [["one", "two"], 2, [3, "EAGAIN", 3, "EOF"]] chunk_size: 512 read_nonblock readline nonblock is efficient + returns ["one\n", 1, [8, "EOF"]] readline nonblock works sequentially + returns [["one\n", "two\n"], 1, [8, "EOF"]] readline nonblock can handle partial reads + returns [["one\n", "two\n"], 2, [5, "EAGAIN", 3, "EOF"]] readline nonblock before read + returns [["one\n", "two\n"], 2, [8, "EOF"]] read_nonblock does not EOF early + returns [["one", "two"], 2, [3, "EAGAIN", 3, "EOF"]] Excon thread safety thread_safe_sockets configuration thread_safe_sockets default + returns true with thread_safe_sockets set false + returns false + long_thread + short_thread read should timeout nonblock => false hits read_timeout + raises Excon::Error::Timeout nonblock => true hits read_timeout + raises Excon::Error::Timeout Excon::Utils #connection_uri using UNIX scheme + returns "unix:///tmp/some.sock" using HTTP scheme with default port + returns "http://foo.com:80" without default port + returns "http://foo.com" #request_uri using UNIX scheme without query + returns "unix:///tmp/some.sock/some/path" with query + returns "unix:///tmp/some.sock/some/path?bar=that&foo=this" using HTTP scheme without query + returns "http://foo.com:80/some/path" with query + returns "http://foo.com:80/some/path?bar=that&foo=this" #escape_uri + returns "/hello%20excon" #unescape_uri + returns "/hello excon" #unescape_form + returns "message=We love excon!" #split_header_value + returns ["value"] #split_header_value + returns ["value1", "value2"] #split_header_value + returns ["text/html;q=0.5", "application/json; version=1"] #split_header_value + returns ["foo/bar;key=\"A,B,C\""] #split_header_value + returns [] 13 pending and 1457 succeeded in 115.5204063060564 seconds /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 Excon::Error #status_errors .keys returns the pertinent HTTP error numbers #new returns an Excon::Error raises errors for bad URIs raises errors for bad paths when remaining backwards compatible #new should raise standard error and catch standard error should raise legacy errors and catch legacy errors should raise standard error and catch legacy errors #status_error should raise with status_error() and catch with standard error should raise with status_error() and catch with legacy error should raise with legacy status_error() and catch with standard when exceptions are rescued when :debug_request and :debug_response are switched off exception message does not include response or response info when :debug_request and :debug_response are switched on exception message includes request and response info when only :debug_request is turned on exception message includes only request info when only :debug_response is turned on exception message includes only response info Excon::Test::Server when the web server is webrick it should behave like a excon test server returns an instance starts the server stops the server when the web server is unicorn bound to a tcp socket it should behave like a excon test server returns an instance starts the server stops the server bound to a unix socket it should behave like a excon test server returns an instance starts the server stops the server when the web server is puma it should behave like a excon test server returns an instance starts the server stops the server when the web server is a executable it should behave like a excon test server returns an instance starts the server stops the server Excon has a version number Excon::Connection when an explicit uri is passed .new returns an instance when :method is :get and :path is /content-length/100 #request returns an Excon::Response Excon::Response #status returns 200 when nonblock is true and persistent is false when :method is get and :path is /content-length/100 #request returns an Excon::Response Excon::Response #status returns 200 #status returns 200 #headers ["Content-Length"] returns 100 ["Content-Type"] returns "text/html;charset=utf-8" ['Date'] returns a valid date ['Server'] matches /^WEBrick/ ['Custom'] returns Foo: bar #remote_ip returns 127.0.0.1 when tcp_nodelay is true #request returns an Excon::Response Excon::Response #body .status #returns 200 when utilizing deprecated block usage #request yields with a chunk, remaining length, and total length completes with expected data when utilizing response_block usage #request yields a chunk, remaining length, and total_length completes with expected data when method is :post when :path is /body-sink when a body parameter is supplied returns an Excon::Response Excon::Response #body equals "5000000" when the body parameter is an empty string returns an Excon::Response Excon::Response #body equals "0" when :path is /echo when a file handle is the body paramter Excon::Response #body equals "x" * 100 + "\n" when a string is the body paramter does not change the enconding of the body without request_block Excon::Response #body equals 'x' * 100) when a request_block paramter is supplied Excon::Response #body equals'x' * 100 when a multi-byte string is the body paramter Excon::Response #body properly concatenates request+headers and body when nonblock is true and persistent is true when :method is get and :path is /content-length/100 #request returns an Excon::Response Excon::Response #status returns 200 #status returns 200 #headers ["Content-Length"] returns 100 ["Content-Type"] returns "text/html;charset=utf-8" ['Date'] returns a valid date ['Server'] matches /^WEBrick/ ['Custom'] returns Foo: bar #remote_ip returns 127.0.0.1 when tcp_nodelay is true #request returns an Excon::Response Excon::Response #body .status #returns 200 when utilizing deprecated block usage #request yields with a chunk, remaining length, and total length completes with expected data when utilizing response_block usage #request yields a chunk, remaining length, and total_length completes with expected data when method is :post when :path is /body-sink when a body parameter is supplied returns an Excon::Response Excon::Response #body equals "5000000" when the body parameter is an empty string returns an Excon::Response Excon::Response #body equals "0" when :path is /echo when a file handle is the body paramter Excon::Response #body equals "x" * 100 + "\n" when a string is the body paramter does not change the enconding of the body without request_block Excon::Response #body equals 'x' * 100) when a request_block paramter is supplied Excon::Response #body equals'x' * 100 when a multi-byte string is the body paramter Excon::Response #body properly concatenates request+headers and body when nonblock is false and persistent is true when :method is get and :path is /content-length/100 #request returns an Excon::Response Excon::Response #status returns 200 #status returns 200 #headers ["Content-Length"] returns 100 ["Content-Type"] returns "text/html;charset=utf-8" ['Date'] returns a valid date ['Server'] matches /^WEBrick/ ['Custom'] returns Foo: bar #remote_ip returns 127.0.0.1 when tcp_nodelay is true #request returns an Excon::Response Excon::Response #body .status #returns 200 when utilizing deprecated block usage #request yields with a chunk, remaining length, and total length completes with expected data when utilizing response_block usage #request yields a chunk, remaining length, and total_length completes with expected data when method is :post when :path is /body-sink when a body parameter is supplied returns an Excon::Response Excon::Response #body equals "5000000" when the body parameter is an empty string returns an Excon::Response Excon::Response #body equals "0" when :path is /echo when a file handle is the body paramter Excon::Response #body equals "x" * 100 + "\n" when a string is the body paramter does not change the enconding of the body without request_block Excon::Response #body equals 'x' * 100) when a request_block paramter is supplied Excon::Response #body equals'x' * 100 when a multi-byte string is the body paramter Excon::Response #body properly concatenates request+headers and body when nonblock is false and persistent is false when :method is get and :path is /content-length/100 #request returns an Excon::Response Excon::Response #status returns 200 #status returns 200 #headers ["Content-Length"] returns 100 ["Content-Type"] returns "text/html;charset=utf-8" ['Date'] returns a valid date ['Server'] matches /^WEBrick/ ['Custom'] returns Foo: bar #remote_ip returns 127.0.0.1 when tcp_nodelay is true #request returns an Excon::Response Excon::Response #body .status #returns 200 when utilizing deprecated block usage #request yields with a chunk, remaining length, and total length completes with expected data when utilizing response_block usage #request yields a chunk, remaining length, and total_length completes with expected data when method is :post when :path is /body-sink when a body parameter is supplied returns an Excon::Response Excon::Response #body equals "5000000" when the body parameter is an empty string returns an Excon::Response Excon::Response #body equals "0" when :path is /echo when a file handle is the body paramter Excon::Response #body equals "x" * 100 + "\n" when a string is the body paramter does not change the enconding of the body without request_block Excon::Response #body equals 'x' * 100) when a request_block paramter is supplied Excon::Response #body equals'x' * 100 when a multi-byte string is the body paramter Excon::Response #body properly concatenates request+headers and body Excon::Socket passes the dns_timeouts to Resolv::DNS::Config (PENDING: Temporarily skipped with xit) when the DNS server is unreachable returns a Excon::Error::Socket Excon when dispatching requests to a server that does not supply response headers when no block is given should rescue from an EOFError and return response when a block is given should rescue from EOFError and return response to a server that prematurely aborts the request with no response should raise an EOFError Excon::Socket resolv_resolver config reaches Resolv::DNS::Config (PENDING: Temporarily skipped with xit) when the DNS server is unreachable returns a Excon::Error::Socket Excon::Connection blocking connection when timeout is not set does not error when timeout is not triggered does not error when timeout is triggered does not raise non-blocking connection when timeout is not set does not error when timeout is not triggered does not error when timeout is triggered returns a request Excon::Error::Timeout when read timeout is triggered returns a read Excon::Error::Timeout Excon::Connection when speaking to a UNIX socket via Excon.new accepts the unix:/ URL Host header handling sends an empty Host= by default doesn't overwrite an explicit Host header Excon::Connection validating parameters with default middleware Connection.new warns on invalid parameter keys Connection#request warns on invalid parameter keys with custom middleware at instantiation Connection.new accepts parameters that are valid for the provided middleware Connection.new warns on parameters that are not valid for the provided middleware Connection#request accepts parameters that are valid for the provided middleware Connection#request warns on parameters that are not valid for the provided middleware with custom middleware at request time Connection#request accepts parameters that are valid for the provided middleware Connection#request warns on parameters that are not valid for the request middleware Connection#request warns on parameters from instantiation that are not valid for the request middleware Pending: (Failures listed here are expected and do not affect your suite's status) 1) Excon::Socket passes the dns_timeouts to Resolv::DNS::Config # Temporarily skipped with xit # ./spec/requests/dns_timeout_spec.rb:10 2) Excon::Socket resolv_resolver config reaches Resolv::DNS::Config # Temporarily skipped with xit # ./spec/requests/resolv_resolver_spec.rb:14 Finished in 14.1 seconds (files took 0.32613 seconds to load) 155 examples, 0 failures, 2 pending ┌──────────────────────────────────────────────────────────────────────────────┐ │ dh_ruby --install finished │ └──────────────────────────────────────────────────────────────────────────────┘ dh_installdocs -O--buildsystem=ruby dh_ruby_fixdocs -O--buildsystem=ruby dh_installchangelogs -O--buildsystem=ruby dh_installsystemduser -O--buildsystem=ruby dh_perl -O--buildsystem=ruby dh_link -O--buildsystem=ruby dh_strip_nondeterminism -O--buildsystem=ruby dh_compress -X.rb -O--buildsystem=ruby dh_fixperms -O--buildsystem=ruby dh_missing -O--buildsystem=ruby dh_ruby_fixdepends -O--buildsystem=ruby dh_installdeb -O--buildsystem=ruby dh_gencontrol -O--buildsystem=ruby dh_md5sums -O--buildsystem=ruby dh_builddeb -O--buildsystem=ruby dpkg-deb: building package 'ruby-excon' in '../ruby-excon_0.112.0-4_all.deb'. dpkg-genbuildinfo --build=binary -O../ruby-excon_0.112.0-4_arm64.buildinfo dpkg-genchanges --build=binary -O../ruby-excon_0.112.0-4_arm64.changes dpkg-genchanges: info: binary-only upload (no source code included) dpkg-source --after-build . dpkg-buildpackage: info: binary-only upload (no source included) dpkg-genchanges: info: not including original source code in upload I: copying local configuration I: user script /srv/workspace/pbuilder/3118618/tmp/hooks/B01_cleanup starting I: user script /srv/workspace/pbuilder/3118618/tmp/hooks/B01_cleanup finished I: unmounting dev/ptmx filesystem I: unmounting dev/pts filesystem I: unmounting dev/shm filesystem I: unmounting proc filesystem I: unmounting sys filesystem I: cleaning the build env I: removing directory /srv/workspace/pbuilder/3118618 and its subdirectories I: Current time: Wed Sep 9 00:16:59 +14 2026 I: pbuilder-time-stamp: 1788862619 + false + set +x Tue Sep 8 10:16:59 UTC 2026 I: Signing ./b2/ruby-excon_0.112.0-4_arm64.buildinfo as ruby-excon_0.112.0-4_arm64.buildinfo.asc Tue Sep 8 10:16:59 UTC 2026 I: Signed ./b2/ruby-excon_0.112.0-4_arm64.buildinfo as ./b2/ruby-excon_0.112.0-4_arm64.buildinfo.asc Tue Sep 8 10:16:59 UTC 2026 - build #2 for ruby-excon/trixie/arm64 on codethink03-arm64 done. Starting cleanup. All cleanup done. Tue Sep 8 10:16:59 UTC 2026 - reproducible_build.sh stopped running as /tmp/jenkins-script-mXNupPv2, removing. /srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz: total 236 drwxr-xr-x 2 jenkins jenkins 4096 Aug 6 03:50 b1 drwxr-xr-x 2 jenkins jenkins 4096 Aug 6 03:54 b2 -rw------- 1 jenkins jenkins 223433 Aug 6 03:50 rbuildlog.oJSIOas -rw-r--r-- 1 jenkins jenkins 2078 Jan 31 2025 ruby-excon_0.112.0-4.dsc /srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz/b1: total 440 -rw-r--r-- 1 jenkins jenkins 219918 Aug 6 03:50 build.log -rw-r--r-- 1 jenkins jenkins 6416 Aug 6 03:50 ruby-excon_0.112.0-4.debian.tar.xz -rw-r--r-- 1 jenkins jenkins 2078 Aug 6 03:50 ruby-excon_0.112.0-4.dsc -rw-r--r-- 1 jenkins jenkins 175856 Aug 6 03:50 ruby-excon_0.112.0-4_all.deb -rw-r--r-- 1 jenkins jenkins 8383 Aug 6 03:50 ruby-excon_0.112.0-4_arm64.buildinfo -rw-r--r-- 1 jenkins jenkins 9265 Aug 6 03:50 ruby-excon_0.112.0-4_arm64.buildinfo.asc -rw-r--r-- 1 jenkins jenkins 1185 Aug 6 03:50 ruby-excon_0.112.0-4_arm64.changes -rw-r--r-- 1 jenkins jenkins 1336 Aug 6 03:50 ruby-excon_0.112.0-4_source.changes /srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz/b2: total 436 -rw-r--r-- 1 jenkins jenkins 222815 Aug 6 03:54 build.log -rw-r--r-- 1 jenkins jenkins 6416 Aug 6 03:54 ruby-excon_0.112.0-4.debian.tar.xz -rw-r--r-- 1 jenkins jenkins 2078 Aug 6 03:54 ruby-excon_0.112.0-4.dsc -rw-r--r-- 1 jenkins jenkins 175856 Aug 6 03:54 ruby-excon_0.112.0-4_all.deb -rw-r--r-- 1 jenkins jenkins 8383 Aug 6 03:54 ruby-excon_0.112.0-4_arm64.buildinfo -rw-r--r-- 1 jenkins jenkins 9265 Aug 6 03:54 ruby-excon_0.112.0-4_arm64.buildinfo.asc -rw-r--r-- 1 jenkins jenkins 1185 Aug 6 03:54 ruby-excon_0.112.0-4_arm64.changes -rw-r--r-- 1 jenkins jenkins 1336 Aug 6 03:54 ruby-excon_0.112.0-4_source.changes Wed Aug 6 03:54:00 UTC 2025 I: Deleting $TMPDIR on codethink03-arm64.debian.net. Wed Aug 6 03:54:01 UTC 2025 I: ruby-excon_0.112.0-4_arm64.changes: Format: 1.8 Date: Fri, 31 Jan 2025 15:38:18 +0100 Source: ruby-excon Binary: ruby-excon Architecture: all Version: 0.112.0-4 Distribution: unstable Urgency: medium Maintainer: Debian Ruby Team Changed-By: Sruthi Chandran Description: ruby-excon - Ruby library for creating fast, persistent, HTTP(S) connections Closes: 1094551 Changes: ruby-excon (0.112.0-4) unstable; urgency=medium . * Team upload * Add ruby-rackup to builddeps (Closes: #1094551) * Set minimum version for ruby-sinatra and ruby-sinatra-contrib Checksums-Sha1: 69feeeecee260b82cd7022fd25c0b8b55fa8adde 175856 ruby-excon_0.112.0-4_all.deb 10a484fc18b83193ff181f38c7a7c493a1b1665a 8383 ruby-excon_0.112.0-4_arm64.buildinfo Checksums-Sha256: b6ede5e34746ccb0b42dbc7736d55afcdb2dd456f038befd2005e0064bc89135 175856 ruby-excon_0.112.0-4_all.deb 1e6d454ac1f6660279d7234c79a64674a935748eaaf39f46f4faa010b28842ac 8383 ruby-excon_0.112.0-4_arm64.buildinfo Files: a4b11c30e9c81674a335e1a27d2b5d64 175856 ruby optional ruby-excon_0.112.0-4_all.deb f422382621ec593fdde2867764b7f32e 8383 ruby optional ruby-excon_0.112.0-4_arm64.buildinfo removed '/var/lib/jenkins/userContent/reproducible/debian/rbuild/trixie/arm64/ruby-excon_0.112.0-4.rbuild.log' removed '/var/lib/jenkins/userContent/reproducible/debian/rbuild/trixie/arm64/ruby-excon_0.112.0-4.rbuild.log.gz' removed '/var/lib/jenkins/userContent/reproducible/debian/logs/trixie/arm64/ruby-excon_0.112.0-4.build1.log.gz' removed '/var/lib/jenkins/userContent/reproducible/debian/logs/trixie/arm64/ruby-excon_0.112.0-4.build2.log.gz' removed '/var/lib/jenkins/userContent/reproducible/debian/buildinfo/trixie/arm64/ruby-excon_0.112.0-4_arm64.buildinfo' removed '/var/lib/jenkins/userContent/reproducible/debian/logdiffs/trixie/arm64/ruby-excon_0.112.0-4.diff.gz' Diff of the two buildlogs: -- --- b1/build.log 2025-08-06 03:50:28.112472528 +0000 +++ b2/build.log 2025-08-06 03:54:00.504748654 +0000 @@ -1,6 +1,6 @@ I: pbuilder: network access will be disabled during build -I: Current time: Tue Aug 5 15:48:34 -12 2025 -I: pbuilder-time-stamp: 1754452114 +I: Current time: Wed Sep 9 00:13:30 +14 2026 +I: pbuilder-time-stamp: 1788862410 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/trixie-reproducible-base.tgz] I: copying local configuration @@ -28,52 +28,84 @@ dpkg-source: info: applying 0005-no-internet-access.patch I: Not using root during the build. I: Installing the build-deps -I: user script /srv/workspace/pbuilder/3958215/tmp/hooks/D02_print_environment starting +I: user script /srv/workspace/pbuilder/3118618/tmp/hooks/D01_modify_environment starting +debug: Running on codethink03-arm64. +I: Changing host+domainname to test build reproducibility +I: Adding a custom variable just for the fun of it... +I: Changing /bin/sh to bash +'/bin/sh' -> '/bin/bash' +lrwxrwxrwx 1 root root 9 Sep 8 10:13 /bin/sh -> /bin/bash +I: Setting pbuilder2's login shell to /bin/bash +I: Setting pbuilder2's GECOS to second user,second room,second work-phone,second home-phone,second other +I: user script /srv/workspace/pbuilder/3118618/tmp/hooks/D01_modify_environment finished +I: user script /srv/workspace/pbuilder/3118618/tmp/hooks/D02_print_environment starting I: set - BUILDDIR='/build/reproducible-path' - BUILDUSERGECOS='first user,first room,first work-phone,first home-phone,first other' - BUILDUSERNAME='pbuilder1' - BUILD_ARCH='arm64' - DEBIAN_FRONTEND='noninteractive' + BASH=/bin/sh + BASHOPTS=checkwinsize:cmdhist:complete_fullquote:extquote:force_fignore:globasciiranges:globskipdots:hostcomplete:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath + BASH_ALIASES=() + BASH_ARGC=() + BASH_ARGV=() + BASH_CMDS=() + BASH_LINENO=([0]="12" [1]="0") + BASH_LOADABLES_PATH=/usr/local/lib/bash:/usr/lib/bash:/opt/local/lib/bash:/usr/pkg/lib/bash:/opt/pkg/lib/bash:. + BASH_SOURCE=([0]="/tmp/hooks/D02_print_environment" [1]="/tmp/hooks/D02_print_environment") + BASH_VERSINFO=([0]="5" [1]="2" [2]="37" [3]="1" [4]="release" [5]="aarch64-unknown-linux-gnu") + BASH_VERSION='5.2.37(1)-release' + BUILDDIR=/build/reproducible-path + BUILDUSERGECOS='second user,second room,second work-phone,second home-phone,second other' + BUILDUSERNAME=pbuilder2 + BUILD_ARCH=arm64 + DEBIAN_FRONTEND=noninteractive DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=12 ' - DISTRIBUTION='trixie' - HOME='/root' - HOST_ARCH='arm64' + DIRSTACK=() + DISTRIBUTION=trixie + EUID=0 + FUNCNAME=([0]="Echo" [1]="main") + GROUPS=() + HOME=/root + HOSTNAME=i-capture-the-hostname + HOSTTYPE=aarch64 + HOST_ARCH=arm64 IFS=' ' - INVOCATION_ID='136b63c0e11e48df9aee5e24cf875801' - LANG='C' - LANGUAGE='en_US:en' - LC_ALL='C' - MAIL='/var/mail/root' - OPTIND='1' - PATH='/usr/sbin:/usr/bin:/sbin:/bin:/usr/games' - PBCURRENTCOMMANDLINEOPERATION='build' - PBUILDER_OPERATION='build' - PBUILDER_PKGDATADIR='/usr/share/pbuilder' - PBUILDER_PKGLIBDIR='/usr/lib/pbuilder' - PBUILDER_SYSCONFDIR='/etc' - PPID='3958215' - PS1='# ' - PS2='> ' + INVOCATION_ID=07d84dad71b6407cbfac20b44c95cb02 + LANG=C + LANGUAGE=nl_BE:nl + LC_ALL=C + MACHTYPE=aarch64-unknown-linux-gnu + MAIL=/var/mail/root + OPTERR=1 + OPTIND=1 + OSTYPE=linux-gnu + PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path + PBCURRENTCOMMANDLINEOPERATION=build + PBUILDER_OPERATION=build + PBUILDER_PKGDATADIR=/usr/share/pbuilder + PBUILDER_PKGLIBDIR=/usr/lib/pbuilder + PBUILDER_SYSCONFDIR=/etc + PIPESTATUS=([0]="0") + POSIXLY_CORRECT=y + PPID=3118618 PS4='+ ' - PWD='/' - SHELL='/bin/bash' - SHLVL='2' - SUDO_COMMAND='/usr/bin/timeout -k 18.1h 18h /usr/bin/ionice -c 3 /usr/bin/nice /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz/pbuilderrc_s3f5 --distribution trixie --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/trixie-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz/b1 --logfile b1/build.log ruby-excon_0.112.0-4.dsc' - SUDO_GID='109' - SUDO_UID='104' - SUDO_USER='jenkins' - TERM='unknown' - TZ='/usr/share/zoneinfo/Etc/GMT+12' - USER='root' - _='/usr/bin/systemd-run' - http_proxy='http://192.168.101.4:3128' + PWD=/ + SHELL=/bin/bash + SHELLOPTS=braceexpand:errexit:hashall:interactive-comments:posix + SHLVL=3 + SUDO_COMMAND='/usr/bin/timeout -k 24.1h 24h /usr/bin/ionice -c 3 /usr/bin/nice -n 11 /usr/bin/unshare --uts -- /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz/pbuilderrc_Hdpr --distribution trixie --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/trixie-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz/b2 --logfile b2/build.log ruby-excon_0.112.0-4.dsc' + SUDO_GID=109 + SUDO_UID=104 + SUDO_USER=jenkins + TERM=unknown + TZ=/usr/share/zoneinfo/Etc/GMT-14 + UID=0 + USER=root + _='I: set' + http_proxy=http://192.168.101.4:3128 I: uname -a - Linux codethink04-arm64 6.1.0-37-cloud-arm64 #1 SMP Debian 6.1.140-1 (2025-05-22) aarch64 GNU/Linux + Linux i-capture-the-hostname 6.1.0-37-cloud-arm64 #1 SMP Debian 6.1.140-1 (2025-05-22) aarch64 GNU/Linux I: ls -l /bin - lrwxrwxrwx 1 root root 7 May 12 19:25 /bin -> usr/bin -I: user script /srv/workspace/pbuilder/3958215/tmp/hooks/D02_print_environment finished + lrwxrwxrwx 1 root root 7 May 12 2025 /bin -> usr/bin +I: user script /srv/workspace/pbuilder/3118618/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy @@ -291,7 +323,7 @@ Get: 150 http://deb.debian.org/debian trixie/main arm64 ruby-sinatra all 4.1.1-5 [122 kB] Get: 151 http://deb.debian.org/debian trixie/main arm64 ruby-sinatra-contrib all 4.1.1-5 [54.8 kB] Get: 152 http://deb.debian.org/debian trixie/main arm64 unicorn arm64 6.1.0+git.20250131.1370f52-1+b1 [97.5 kB] -Fetched 36.2 MB in 0s (113 MB/s) +Fetched 36.2 MB in 1s (66.2 MB/s) Preconfiguring packages ... Selecting previously unselected package libexpat1:arm64. (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 ... 19965 files and directories currently installed.) @@ -794,8 +826,8 @@ Setting up tzdata (2025b-4) ... Current default time zone: 'Etc/UTC' -Local time is now: Wed Aug 6 03:48:58 UTC 2025. -Universal Time is now: Wed Aug 6 03:48:58 UTC 2025. +Local time is now: Tue Sep 8 10:14:05 UTC 2026. +Universal Time is now: Tue Sep 8 10:14:05 UTC 2026. Run 'dpkg-reconfigure tzdata' if you wish to change it. Setting up ruby-minitest (5.25.4-3) ... @@ -934,7 +966,11 @@ Building tag database... -> Finished parsing the build-deps I: Building the package -I: Running cd /build/reproducible-path/ruby-excon-0.112.0/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-genchanges -S > ../ruby-excon_0.112.0-4_source.changes +I: user script /srv/workspace/pbuilder/3118618/tmp/hooks/A99_set_merged_usr starting +Not re-configuring usrmerge for trixie +I: user script /srv/workspace/pbuilder/3118618/tmp/hooks/A99_set_merged_usr finished +hostname: Name or service not known +I: Running cd /build/reproducible-path/ruby-excon-0.112.0/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-genchanges -S > ../ruby-excon_0.112.0-4_source.changes dpkg-buildpackage: info: source package ruby-excon dpkg-buildpackage: info: source version 0.112.0-4 dpkg-buildpackage: info: source distribution unstable @@ -967,7 +1003,7 @@ │ ruby-excon: Installing files and building extensions for ruby3.3 │ └──────────────────────────────────────────────────────────────────────────────┘ -/usr/bin/ruby3.3 -S gem build --config-file /dev/null --verbose /tmp/d20250805-3966589-rxugdb/gemspec +/usr/bin/ruby3.3 -S gem build --config-file /dev/null --verbose /tmp/d20260909-3132119-3f08ef/gemspec WARNING: open-ended dependency on rspec (>= 3.5.0, development) is not recommended if rspec is semantically versioned, use: add_development_dependency "rspec", "~> 3.5", ">= 3.5.0" @@ -1006,7 +1042,7 @@ Name: excon Version: 0.112.0 File: excon-0.112.0.gem -/usr/bin/ruby3.3 -S gem install --config-file /dev/null --verbose --local --verbose --no-document --ignore-dependencies --install-dir debian/ruby-excon/usr/share/rubygems-integration/all /tmp/d20250805-3966589-rxugdb/excon-0.112.0.gem +/usr/bin/ruby3.3 -S gem install --config-file /dev/null --verbose --local --verbose --no-document --ignore-dependencies --install-dir debian/ruby-excon/usr/share/rubygems-integration/all /tmp/d20260909-3132119-3f08ef/excon-0.112.0.gem /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/data/cacert.pem /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon.rb /build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all/gems/excon-0.112.0/lib/excon/connection.rb @@ -1066,7 +1102,7 @@ └──────────────────────────────────────────────────────────────────────────────┘ RUBYLIB=. GEM_PATH=/build/reproducible-path/ruby-excon-0.112.0/debian/ruby-excon/usr/share/rubygems-integration/all:/build/reproducible-path/ruby-excon-0.112.0/debian/.debhelper/generated/_source/home/.local/share/gem/ruby/3.3.0:/var/lib/gems/3.3.0:/usr/local/lib/ruby/gems/3.3.0:/usr/lib/ruby/gems/3.3.0:/usr/lib/aarch64-linux-gnu/ruby/gems/3.3.0:/usr/share/rubygems-integration/3.3.0:/usr/share/rubygems-integration/all:/usr/lib/aarch64-linux-gnu/rubygems-integration/3.3.0 ruby3.3 -S rake --rakelibdir /gem2deb-nonexistent -f debian/ruby-tests.rake -sh: 1: git: not found +sh: line 1: git: command not found /usr/bin/ruby3.3 -S shindo Excon bad server interaction @@ -1544,14 +1580,14 @@ + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 -[2025-08-05 15:49:24] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading +[2026-09-09 00:15:18] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' -[2025-08-05 15:49:25] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading +[2026-09-09 00:15:20] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' @@ -1865,35 +1901,42 @@ + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 -[2025-08-05 15:49:35] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading +[2026-09-09 00:15:36] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' -[2025-08-05 15:49:36] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading +[2026-09-09 00:15:37] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' -[2025-08-05 15:49:36] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading +[2026-09-09 00:15:37] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' -[2025-08-05 15:49:36] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading +[2026-09-09 00:15:37] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' -[2025-08-05 15:49:39] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading +[2026-09-09 00:15:40] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading + /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' + /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' + /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' + /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' + /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' + +[2026-09-09 00:15:42] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' @@ -2191,28 +2234,28 @@ + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 -[2025-08-05 15:49:44] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading +[2026-09-09 00:15:47] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' -[2025-08-05 15:49:44] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading +[2026-09-09 00:15:48] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' -[2025-08-05 15:49:46] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading +[2026-09-09 00:15:50] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' -[2025-08-05 15:49:47] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading +[2026-09-09 00:15:50] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' @@ -2366,14 +2409,14 @@ + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 -[2025-08-05 15:49:55] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading +[2026-09-09 00:16:05] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' -[2025-08-05 15:49:55] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading +[2026-09-09 00:16:05] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' @@ -2526,7 +2569,14 @@ + properly concatenates request+headers and body should succeed with tcp_nodelay + returns 200 -[2025-08-05 15:50:01] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading +[2026-09-09 00:16:12] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading + /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' + /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' + /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' + /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/httpserver.rb:82:in `run' + /usr/share/rubygems-integration/all/gems/webrick-1.9.1/lib/webrick/server.rb:310:in `block in start_thread' + +[2026-09-09 00:16:15] ERROR OpenSSL::SSL::SSLError: SSL_read: unexpected eof while reading /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `sysread' /usr/lib/ruby/3.3.0/openssl/buffering.rb:80:in `fill_rbuff' /usr/lib/ruby/3.3.0/openssl/buffering.rb:329:in `eof?' @@ -3173,7 +3223,7 @@ #split_header_value + returns ["foo/bar;key=\"A,B,C\""] #split_header_value + returns [] - 13 pending and 1457 succeeded in 65.07714783657006 seconds + 13 pending and 1457 succeeded in 115.5204063060564 seconds /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 @@ -3549,7 +3599,7 @@ # Temporarily skipped with xit # ./spec/requests/resolv_resolver_spec.rb:14 -Finished in 5.87 seconds (files took 0.29035 seconds to load) +Finished in 14.1 seconds (files took 0.32613 seconds to load) 155 examples, 0 failures, 2 pending @@ -3580,12 +3630,14 @@ dpkg-buildpackage: info: binary-only upload (no source included) dpkg-genchanges: info: not including original source code in upload I: copying local configuration +I: user script /srv/workspace/pbuilder/3118618/tmp/hooks/B01_cleanup starting +I: user script /srv/workspace/pbuilder/3118618/tmp/hooks/B01_cleanup finished I: unmounting dev/ptmx filesystem I: unmounting dev/pts filesystem I: unmounting dev/shm filesystem I: unmounting proc filesystem I: unmounting sys filesystem I: cleaning the build env -I: removing directory /srv/workspace/pbuilder/3958215 and its subdirectories -I: Current time: Tue Aug 5 15:50:27 -12 2025 -I: pbuilder-time-stamp: 1754452227 +I: removing directory /srv/workspace/pbuilder/3118618 and its subdirectories +I: Current time: Wed Sep 9 00:16:59 +14 2026 +I: pbuilder-time-stamp: 1788862619 Compressing the 2nd log... /var/lib/jenkins/userContent/reproducible/debian/logdiffs/trixie/arm64/ruby-excon_0.112.0-4.diff: 78.6% -- replaced with /var/lib/jenkins/userContent/reproducible/debian/logdiffs/trixie/arm64/ruby-excon_0.112.0-4.diff.gz b2/build.log: 90.1% -- replaced with stdout Compressing the 1st log... b1/build.log: 90.3% -- replaced with stdout Wed Aug 6 03:54:01 UTC 2025 I: diffoscope 303 will be used to compare the two builds: ++ date -u +%s + DIFFOSCOPE_STAMP=/var/log/reproducible-builds/diffoscope_stamp_ruby-excon_trixie_arm64_1754452441 + touch /var/log/reproducible-builds/diffoscope_stamp_ruby-excon_trixie_arm64_1754452441 + RESULT=0 + systemd-run '--description=diffoscope on ruby-excon/0.112.0-4 in trixie/arm64' --slice=rb-build-diffoscope.slice -u rb-diffoscope-arm64_8-81459 '--property=SuccessExitStatus=1 124' --user --send-sighup --pipe --wait -E TMPDIR timeout 155m nice schroot --directory /srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz --run-session -c jenkins-reproducible-trixie-diffoscope-5ca21f2f-ad98-4ee6-8e0f-9152022a83a5 -- sh -c 'export TMPDIR=/srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz/dbd-tmp-eS886fW ; timeout 150m diffoscope --timeout 7200 --html /srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz/ruby-excon_0.112.0-4.diffoscope.html --text /srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz/ruby-excon_0.112.0-4.diffoscope.txt --json /srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz/ruby-excon_0.112.0-4.diffoscope.json --profile=- /srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz/b1/ruby-excon_0.112.0-4_arm64.changes /srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz/b2/ruby-excon_0.112.0-4_arm64.changes' + false + set +x Running as unit: rb-diffoscope-arm64_8-81459.service # Profiling output for: /usr/bin/diffoscope --timeout 7200 --html /srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz/ruby-excon_0.112.0-4.diffoscope.html --text /srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz/ruby-excon_0.112.0-4.diffoscope.txt --json /srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz/ruby-excon_0.112.0-4.diffoscope.json --profile=- /srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz/b1/ruby-excon_0.112.0-4_arm64.changes /srv/reproducible-results/rbuild-debian/r-b-build.eKFwCmlz/b2/ruby-excon_0.112.0-4_arm64.changes ## command (total time: 0.000s) 0.000s 1 call cmp (internal) ## has_same_content_as (total time: 0.000s) 0.000s 1 call diffoscope.comparators.binary.FilesystemFile ## main (total time: 0.003s) 0.003s 2 calls outputs 0.000s 1 call cleanup Finished with result: success Main processes terminated with: code=exited/status=0 Service runtime: 161ms CPU time consumed: 163ms _ _ __ _ _| |__ _ _ _____ _____ ___ _ __ | '__| | | | '_ \| | | |_____ / _ \ \/ / __/ _ \| '_ \ | | | |_| | |_) | |_| |_____| __/> < (_| (_) | | | | |_| \__,_|_.__/ \__, | \___/_/\_\___\___/|_| |_| |___/ Wed Aug 6 03:54:02 UTC 2025 I: diffoscope 303 found no differences in the changes files, and a .buildinfo file also exists. Wed Aug 6 03:54:02 UTC 2025 I: ruby-excon from trixie built successfully and reproducibly on arm64. INSERT 0 1 INSERT 0 1 DELETE 1 [2025-08-06 03:54:02] INFO: Starting at 2025-08-06 03:54:02.679360 [2025-08-06 03:54:02] INFO: Generating the pages of 1 package(s) [2025-08-06 03:54:02] CRITICAL: https://tests.reproducible-builds.org/debian/trixie/arm64/ruby-excon didn't produce a buildlog, even though it has been built. [2025-08-06 03:54:02] ERROR: Either /var/lib/jenkins/userContent/reproducible/debian/logs/bullseye/amd64/ruby-excon_0.79.0-2.build2.log.gz or /var/lib/jenkins/userContent/reproducible/debian/logdiffs/bullseye/amd64/ruby-excon_0.79.0-2.diff.gz is missing [2025-08-06 03:54:02] ERROR: Either /var/lib/jenkins/userContent/reproducible/debian/logs/bullseye/arm64/ruby-excon_0.79.0-2.build2.log.gz or /var/lib/jenkins/userContent/reproducible/debian/logdiffs/bullseye/arm64/ruby-excon_0.79.0-2.diff.gz is missing [2025-08-06 03:54:02] ERROR: Either /var/lib/jenkins/userContent/reproducible/debian/logs/bullseye/armhf/ruby-excon_0.79.0-2.build2.log.gz or /var/lib/jenkins/userContent/reproducible/debian/logdiffs/bullseye/armhf/ruby-excon_0.79.0-2.diff.gz is missing [2025-08-06 03:54:02] INFO: Finished at 2025-08-06 03:54:02.912926, took: 0:00:00.233569 Wed Aug 6 03:54:02 UTC 2025 - successfully updated the database and updated https://tests.reproducible-builds.org/debian/rb-pkg/trixie/arm64/ruby-excon.html Wed Aug 6 03:54:02 UTC 2025 I: Removing signed ruby-excon_0.112.0-4_arm64.buildinfo.asc files: removed './b1/ruby-excon_0.112.0-4_arm64.buildinfo.asc' removed './b2/ruby-excon_0.112.0-4_arm64.buildinfo.asc' 1754452442 arm64 trixie ruby-excon Starting cleanup. /var/lib/jenkins/userContent/reproducible/debian/rbuild/trixie/arm64/ruby-excon_0.112.0-4.rbuild.log: 89.4% -- replaced with /var/lib/jenkins/userContent/reproducible/debian/rbuild/trixie/arm64/ruby-excon_0.112.0-4.rbuild.log.gz [2025-08-06 03:54:03] INFO: Starting at 2025-08-06 03:54:03.170663 [2025-08-06 03:54:03] INFO: Generating the pages of 1 package(s) [2025-08-06 03:54:03] ERROR: Either /var/lib/jenkins/userContent/reproducible/debian/logs/bullseye/amd64/ruby-excon_0.79.0-2.build2.log.gz or /var/lib/jenkins/userContent/reproducible/debian/logdiffs/bullseye/amd64/ruby-excon_0.79.0-2.diff.gz is missing [2025-08-06 03:54:03] ERROR: Either /var/lib/jenkins/userContent/reproducible/debian/logs/bullseye/arm64/ruby-excon_0.79.0-2.build2.log.gz or /var/lib/jenkins/userContent/reproducible/debian/logdiffs/bullseye/arm64/ruby-excon_0.79.0-2.diff.gz is missing [2025-08-06 03:54:03] ERROR: Either /var/lib/jenkins/userContent/reproducible/debian/logs/bullseye/armhf/ruby-excon_0.79.0-2.build2.log.gz or /var/lib/jenkins/userContent/reproducible/debian/logdiffs/bullseye/armhf/ruby-excon_0.79.0-2.diff.gz is missing [2025-08-06 03:54:03] INFO: Finished at 2025-08-06 03:54:03.392430, took: 0:00:00.221770 All cleanup done. Wed Aug 6 03:54:03 UTC 2025 - total duration: 0h 5m 47s. Wed Aug 6 03:54:03 UTC 2025 - reproducible_build.sh stopped running as /tmp/jenkins-script-Xz93ml6e, removing. Finished with result: success Main processes terminated with: code=exited/status=0 Service runtime: 5min 47.867s CPU time consumed: 4.737s