Diff of the two buildlogs: -- --- b1/build.log 2024-07-29 06:40:19.267900990 +0000 +++ b2/build.log 2024-07-29 06:48:55.637976157 +0000 @@ -1,6 +1,6 @@ I: pbuilder: network access will be disabled during build -I: Current time: Sun Jul 28 18:36:16 -12 2024 -I: pbuilder-time-stamp: 1722234976 +I: Current time: Mon Jul 29 20:40:31 +14 2024 +I: pbuilder-time-stamp: 1722235231 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/trixie-reproducible-base.tgz] I: copying local configuration @@ -33,52 +33,84 @@ dpkg-source: info: applying 0006-Fix-spec-for-ruby3_3.patch I: Not using root during the build. I: Installing the build-deps -I: user script /srv/workspace/pbuilder/8618/tmp/hooks/D02_print_environment starting +I: user script /srv/workspace/pbuilder/24870/tmp/hooks/D01_modify_environment starting +debug: Running on ff64a. +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 Jul 29 06:41 /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/24870/tmp/hooks/D01_modify_environment finished +I: user script /srv/workspace/pbuilder/24870/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='armhf' - DEBIAN_FRONTEND='noninteractive' - DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=3 ' - DISTRIBUTION='trixie' - HOME='/root' - HOST_ARCH='armhf' + 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]="21" [3]="1" [4]="release" [5]="arm-unknown-linux-gnueabihf") + BASH_VERSION='5.2.21(1)-release' + BUILDDIR=/build/reproducible-path + BUILDUSERGECOS='second user,second room,second work-phone,second home-phone,second other' + BUILDUSERNAME=pbuilder2 + BUILD_ARCH=armhf + DEBIAN_FRONTEND=noninteractive + DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=6 ' + DIRSTACK=() + DISTRIBUTION=trixie + EUID=0 + FUNCNAME=([0]="Echo" [1]="main") + GROUPS=() + HOME=/root + HOSTNAME=i-capture-the-hostname + HOSTTYPE=arm + HOST_ARCH=armhf IFS=' ' - INVOCATION_ID='e6a68c83b2f343a9b9ad61e7aa7699b0' - 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='8618' - PS1='# ' - PS2='> ' + INVOCATION_ID=3d6476ebecf84cf48576852922b4248d + LANG=C + LANGUAGE=it_CH:it + LC_ALL=C + MACHTYPE=arm-unknown-linux-gnueabihf + MAIL=/var/mail/root + OPTERR=1 + OPTIND=1 + OSTYPE=linux-gnueabihf + 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=24870 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.FP7G5hwg/pbuilderrc_ie2g --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.FP7G5hwg/b1 --logfile b1/build.log ruby-http_4.4.1-6.dsc' - SUDO_GID='113' - SUDO_UID='107' - SUDO_USER='jenkins' - TERM='unknown' - TZ='/usr/share/zoneinfo/Etc/GMT+12' - USER='root' - _='/usr/bin/systemd-run' - http_proxy='http://10.0.0.15:3142/' + 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.FP7G5hwg/pbuilderrc_SzUK --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.FP7G5hwg/b2 --logfile b2/build.log ruby-http_4.4.1-6.dsc' + SUDO_GID=114 + SUDO_UID=109 + SUDO_USER=jenkins + TERM=unknown + TZ=/usr/share/zoneinfo/Etc/GMT-14 + UID=0 + USER=root + _='I: set' + http_proxy=http://10.0.0.15:3142/ I: uname -a - Linux cbxi4a 6.1.0-23-armmp #1 SMP Debian 6.1.99-1 (2024-07-15) armv7l GNU/Linux + Linux i-capture-the-hostname 6.1.0-23-arm64 #1 SMP Debian 6.1.99-1 (2024-07-15) aarch64 GNU/Linux I: ls -l /bin lrwxrwxrwx 1 root root 7 Jun 5 22:35 /bin -> usr/bin -I: user script /srv/workspace/pbuilder/8618/tmp/hooks/D02_print_environment finished +I: user script /srv/workspace/pbuilder/24870/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy @@ -294,7 +326,7 @@ Get: 156 http://deb.debian.org/debian trixie/main armhf ruby-rspec-mocks all 3.13.0c0e0m0s1-2 [81.3 kB] Get: 157 http://deb.debian.org/debian trixie/main armhf ruby-rspec all 3.13.0c0e0m0s1-2 [5184 B] Get: 158 http://deb.debian.org/debian trixie/main armhf ruby-rspec-its all 1.3.0-1 [6864 B] -Fetched 43.0 MB in 3s (14.5 MB/s) +Fetched 43.0 MB in 3s (12.4 MB/s) debconf: delaying package configuration, since apt-utils is not installed Selecting previously unselected package libpython3.12-minimal:armhf. (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 ... 19503 files and directories currently installed.) @@ -818,8 +850,8 @@ Setting up tzdata (2024a-4) ... Current default time zone: 'Etc/UTC' -Local time is now: Mon Jul 29 06:38:18 UTC 2024. -Universal Time is now: Mon Jul 29 06:38:18 UTC 2024. +Local time is now: Mon Jul 29 06:44:29 UTC 2024. +Universal Time is now: Mon Jul 29 06:44:29 UTC 2024. Run 'dpkg-reconfigure tzdata' if you wish to change it. Setting up autotools-dev (20220109.1) ... @@ -960,7 +992,11 @@ Building tag database... -> Finished parsing the build-deps I: Building the package -I: Running cd /build/reproducible-path/ruby-http-4.4.1/ && 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-http_4.4.1-6_source.changes +I: user script /srv/workspace/pbuilder/24870/tmp/hooks/A99_set_merged_usr starting +Not re-configuring usrmerge for trixie +I: user script /srv/workspace/pbuilder/24870/tmp/hooks/A99_set_merged_usr finished +hostname: Name or service not known +I: Running cd /build/reproducible-path/ruby-http-4.4.1/ && 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-http_4.4.1-6_source.changes dpkg-buildpackage: info: source package ruby-http dpkg-buildpackage: info: source version 4.4.1-6 dpkg-buildpackage: info: source distribution unstable @@ -1060,160 +1096,16 @@ All examples were filtered out; ignoring {:focus=>true} -Randomized with seed 48828 - -HTTP::ContentType - .parse - with text/plain;charset=utf-8;foo=bar - charset - is expected to eq "utf-8" - mime_type - is expected to eq "text/plain" - with text/plain; charset=utf-8 - mime_type - is expected to eq "text/plain" - charset - is expected to eq "utf-8" - with text/plain; charSET=utf-8 - mime_type - is expected to eq "text/plain" - charset - is expected to eq "utf-8" - with text/plain - charset - is expected to be nil - mime_type - is expected to eq "text/plain" - with text/plain; charset="utf-8" - mime_type - is expected to eq "text/plain" - charset - is expected to eq "utf-8" - with text/plain; foo=bar; charset=utf-8 - charset - is expected to eq "utf-8" - mime_type - is expected to eq "text/plain" - with tEXT/plaIN - charset - is expected to be nil - mime_type - is expected to eq "text/plain" - -HTTP::Options features - defaults to be empty - accepts feature name with its options in array - raises error for not supported features - accepts plain symbols in array - -HTTP::Connection - #readpartial - reads data in parts - #read_headers! - reads data in parts +Randomized with seed 43654 HTTP::Response::Status - #network_authentication_required? - when code is higher than 511 - is expected to equal false - when code is 511 - is expected to equal true - when code is lower than 511 - is expected to equal false - .coerce - is aliased as `.[]` - fails if coercion failed - with String - coerces reasons - fails when reason is unknown - with Numeric - coerces as Fixnum code - with Symbol - coerces symbolized reasons - fails when symbolized reason is unknown - #upgrade_required? - when code is higher than 426 - is expected to equal false - when code is 426 - is expected to equal true - when code is lower than 426 - is expected to equal false - ::SYMBOLS - [200] - is expected to equal :ok - [400] - is expected to equal :bad_request - #inspect - returns quoted code and reason phrase - #forbidden? - when code is lower than 403 - is expected to equal false - when code is 403 - is expected to equal true - when code is higher than 403 - is expected to equal false - #method_not_allowed? - when code is higher than 405 - is expected to equal false - when code is lower than 405 - is expected to equal false - when code is 405 - is expected to equal true - #insufficient_storage? - when code is 507 - is expected to equal true - when code is higher than 507 - is expected to equal false - when code is lower than 507 - is expected to equal false - #precondition_failed? - when code is 412 - is expected to equal true - when code is higher than 412 - is expected to equal false - when code is lower than 412 - is expected to equal false - #partial_content? - when code is higher than 206 - is expected to equal false - when code is 206 - is expected to equal true - when code is lower than 206 - is expected to equal false - #multiple_choices? - when code is lower than 300 - is expected to equal false - when code is 300 - is expected to equal true - when code is higher than 300 - is expected to equal false - with 3xx codes - is not #server_error? - is not #client_error? - is #redirect? - is not #success? - is not #informational? - #payment_required? - when code is lower than 402 - is expected to equal false - when code is 402 - is expected to equal true - when code is higher than 402 - is expected to equal false - #unavailable_for_legal_reasons? - when code is lower than 451 + #gone? + when code is lower than 410 is expected to equal false - when code is 451 + when code is 410 is expected to equal true - when code is higher than 451 - is expected to equal false - #conflict? - when code is lower than 409 - is expected to equal false - when code is higher than 409 + when code is higher than 410 is expected to equal false - when code is 409 - is expected to equal true #proxy_authentication_required? when code is higher than 407 is expected to equal false @@ -1221,645 +1113,612 @@ is expected to equal false when code is 407 is expected to equal true - #multi_status? - when code is higher than 207 + #accepted? + when code is higher than 202 is expected to equal false - when code is 207 + when code is 202 is expected to equal true - when code is lower than 207 + when code is lower than 202 is expected to equal false - #not_found? - when code is lower than 404 + #request_timeout? + when code is higher than 408 is expected to equal false - when code is higher than 404 + when code is lower than 408 is expected to equal false - when code is 404 + when code is 408 is expected to equal true - #processing? - when code is lower than 102 - is expected to equal false - when code is 102 + #failed_dependency? + when code is 424 is expected to equal true - when code is higher than 102 - is expected to equal false - #not_extended? - when code is higher than 510 + when code is lower than 424 is expected to equal false - when code is lower than 510 + when code is higher than 424 is expected to equal false - when code is 510 - is expected to equal true #temporary_redirect? when code is 307 is expected to equal true - when code is higher than 307 - is expected to equal false when code is lower than 307 is expected to equal false - #not_acceptable? - when code is 406 - is expected to equal true - when code is higher than 406 - is expected to equal false - when code is lower than 406 - is expected to equal false - #failed_dependency? - when code is higher than 424 - is expected to equal false - when code is lower than 424 - is expected to equal false - when code is 424 - is expected to equal true - #permanent_redirect? - when code is higher than 308 - is expected to equal false - when code is lower than 308 - is expected to equal false - when code is 308 - is expected to equal true - #already_reported? - when code is lower than 208 - is expected to equal false - when code is higher than 208 - is expected to equal false - when code is 208 - is expected to equal true - #code - is expected to be a kind of Integer - is expected to eq 200 - #created? - when code is higher than 201 - is expected to equal false - when code is 201 - is expected to equal true - when code is lower than 201 - is expected to equal false - #loop_detected? - when code is 508 - is expected to equal true - when code is higher than 508 - is expected to equal false - when code is lower than 508 - is expected to equal false - #use_proxy? - when code is lower than 305 - is expected to equal false - when code is 305 - is expected to equal true - when code is higher than 305 - is expected to equal false - #request_timeout? - when code is lower than 408 - is expected to equal false - when code is 408 - is expected to equal true - when code is higher than 408 - is expected to equal false - #non_authoritative_information? - when code is higher than 203 - is expected to equal false - when code is 203 - is expected to equal true - when code is lower than 203 - is expected to equal false - #found? - when code is lower than 302 - is expected to equal false - when code is higher than 302 - is expected to equal false - when code is 302 - is expected to equal true - #not_modified? - when code is 304 - is expected to equal true - when code is lower than 304 - is expected to equal false - when code is higher than 304 - is expected to equal false - #too_many_requests? - when code is lower than 429 - is expected to equal false - when code is higher than 429 - is expected to equal false - when code is 429 - is expected to equal true - #length_required? - when code is higher than 411 - is expected to equal false - when code is 411 - is expected to equal true - when code is lower than 411 - is expected to equal false - #variant_also_negotiates? - when code is 506 - is expected to equal true - when code is lower than 506 - is expected to equal false - when code is higher than 506 - is expected to equal false - #reset_content? - when code is higher than 205 - is expected to equal false - when code is 205 - is expected to equal true - when code is lower than 205 - is expected to equal false - #unauthorized? - when code is 401 - is expected to equal true - when code is higher than 401 - is expected to equal false - when code is lower than 401 - is expected to equal false - #request_header_fields_too_large? - when code is higher than 431 - is expected to equal false - when code is lower than 431 - is expected to equal false - when code is 431 - is expected to equal true - #locked? - when code is 423 - is expected to equal true - when code is higher than 423 - is expected to equal false - when code is lower than 423 - is expected to equal false - #see_other? - when code is higher than 303 - is expected to equal false - when code is lower than 303 - is expected to equal false - when code is 303 - is expected to equal true - #im_used? - when code is higher than 226 - is expected to equal false - when code is 226 - is expected to equal true - when code is lower than 226 - is expected to equal false - #gone? - when code is 410 - is expected to equal true - when code is higher than 410 - is expected to equal false - when code is lower than 410 + when code is higher than 307 is expected to equal false - #http_version_not_supported? - when code is 505 + #precondition_required? + when code is 428 is expected to equal true - when code is lower than 505 - is expected to equal false - when code is higher than 505 - is expected to equal false - with 4xx codes - is #client_error? - is not #redirect? - is not #informational? - is not #success? - is not #server_error? - #payload_too_large? - when code is higher than 413 + when code is higher than 428 is expected to equal false - when code is lower than 413 + when code is lower than 428 is expected to equal false - when code is 413 - is expected to equal true #to_sym - with well-known code: 412 - is expected to equal :precondition_failed - with well-known code: 510 - is expected to equal :not_extended - with well-known code: 405 - is expected to equal :method_not_allowed - with well-known code: 415 - is expected to equal :unsupported_media_type - with well-known code: 422 - is expected to equal :unprocessable_entity - with well-known code: 226 - is expected to equal :im_used - with well-known code: 205 - is expected to equal :reset_content - with well-known code: 200 - is expected to equal :ok - with well-known code: 101 - is expected to equal :switching_protocols - with well-known code: 202 - is expected to equal :accepted - with well-known code: 406 - is expected to equal :not_acceptable + with well-known code: 402 + is expected to equal :payment_required + with well-known code: 307 + is expected to equal :temporary_redirect + with well-known code: 403 + is expected to equal :forbidden with well-known code: 411 is expected to equal :length_required - with well-known code: 501 - is expected to equal :not_implemented - with well-known code: 421 - is expected to equal :misdirected_request - with well-known code: 100 - is expected to equal :continue - with well-known code: 407 - is expected to equal :proxy_authentication_required - with well-known code: 505 - is expected to equal :http_version_not_supported + with well-known code: 504 + is expected to equal :gateway_timeout + with well-known code: 206 + is expected to equal :partial_content + with well-known code: 431 + is expected to equal :request_header_fields_too_large + with well-known code: 201 + is expected to equal :created + with well-known code: 102 + is expected to equal :processing + with well-known code: 451 + is expected to equal :unavailable_for_legal_reasons with well-known code: 302 is expected to equal :found - with well-known code: 300 - is expected to equal :multiple_choices - with well-known code: 506 - is expected to equal :variant_also_negotiates + with well-known code: 417 + is expected to equal :expectation_failed + with well-known code: 301 + is expected to equal :moved_permanently + with well-known code: 205 + is expected to equal :reset_content with well-known code: 401 is expected to equal :unauthorized - with well-known code: 503 - is expected to equal :service_unavailable - with well-known code: 404 - is expected to equal :not_found - with well-known code: 409 - is expected to equal :conflict - with well-known code: 204 - is expected to equal :no_content - with well-known code: 308 - is expected to equal :permanent_redirect - with well-known code: 303 - is expected to equal :see_other - with well-known code: 500 - is expected to equal :internal_server_error - with well-known code: 416 - is expected to equal :range_not_satisfiable - with well-known code: 431 - is expected to equal :request_header_fields_too_large - with well-known code: 402 - is expected to equal :payment_required + with well-known code: 505 + is expected to equal :http_version_not_supported + with well-known code: 502 + is expected to equal :bad_gateway with well-known code: 414 is expected to equal :uri_too_long - with well-known code: 301 - is expected to equal :moved_permanently + with well-known code: 208 + is expected to equal :already_reported with well-known code: 423 is expected to equal :locked - with well-known code: 207 - is expected to equal :multi_status - with unknown code - is expected to be nil - with well-known code: 502 - is expected to equal :bad_gateway - with well-known code: 507 - is expected to equal :insufficient_storage - with well-known code: 424 - is expected to equal :failed_dependency - with well-known code: 429 - is expected to equal :too_many_requests - with well-known code: 201 - is expected to equal :created - with well-known code: 304 - is expected to equal :not_modified with well-known code: 203 is expected to equal :non_authoritative_information - with well-known code: 208 - is expected to equal :already_reported - with well-known code: 508 - is expected to equal :loop_detected - with well-known code: 307 - is expected to equal :temporary_redirect + with well-known code: 100 + is expected to equal :continue + with well-known code: 416 + is expected to equal :range_not_satisfiable + with well-known code: 429 + is expected to equal :too_many_requests + with well-known code: 421 + is expected to equal :misdirected_request + with well-known code: 300 + is expected to equal :multiple_choices + with unknown code + is expected to be nil + with well-known code: 400 + is expected to equal :bad_request with well-known code: 426 is expected to equal :upgrade_required - with well-known code: 206 - is expected to equal :partial_content - with well-known code: 408 - is expected to equal :request_timeout - with well-known code: 403 - is expected to equal :forbidden - with well-known code: 410 - is expected to equal :gone - with well-known code: 413 - is expected to equal :payload_too_large - with well-known code: 504 - is expected to equal :gateway_timeout + with well-known code: 508 + is expected to equal :loop_detected + with well-known code: 204 + is expected to equal :no_content + with well-known code: 200 + is expected to equal :ok + with well-known code: 422 + is expected to equal :unprocessable_entity with well-known code: 428 is expected to equal :precondition_required - with well-known code: 451 - is expected to equal :unavailable_for_legal_reasons - with well-known code: 417 - is expected to equal :expectation_failed - with well-known code: 400 - is expected to equal :bad_request - with well-known code: 102 - is expected to equal :processing - with well-known code: 305 - is expected to equal :use_proxy + with well-known code: 409 + is expected to equal :conflict + with well-known code: 501 + is expected to equal :not_implemented + with well-known code: 304 + is expected to equal :not_modified + with well-known code: 413 + is expected to equal :payload_too_large + with well-known code: 500 + is expected to equal :internal_server_error + with well-known code: 404 + is expected to equal :not_found with well-known code: 511 is expected to equal :network_authentication_required - #switching_protocols? - when code is 101 - is expected to equal true - when code is lower than 101 - is expected to equal false - when code is higher than 101 - is expected to equal false - #moved_permanently? - when code is higher than 301 - is expected to equal false - when code is lower than 301 - is expected to equal false - when code is 301 - is expected to equal true - #not_implemented? - when code is lower than 501 - is expected to equal false - when code is higher than 501 - is expected to equal false - when code is 501 - is expected to equal true - #misdirected_request? - when code is lower than 421 - is expected to equal false - when code is 421 - is expected to equal true - when code is higher than 421 - is expected to equal false - #ok? - when code is higher than 200 - is expected to equal false - when code is lower than 200 - is expected to equal false - when code is 200 - is expected to equal true - #service_unavailable? - when code is lower than 503 - is expected to equal false - when code is 503 - is expected to equal true - when code is higher than 503 - is expected to equal false - with 5xx codes - is not #informational? - is not #client_error? - is #server_error? - is not #redirect? - is not #success? + with well-known code: 410 + is expected to equal :gone + with well-known code: 305 + is expected to equal :use_proxy + with well-known code: 101 + is expected to equal :switching_protocols + with well-known code: 408 + is expected to equal :request_timeout + with well-known code: 303 + is expected to equal :see_other + with well-known code: 407 + is expected to equal :proxy_authentication_required + with well-known code: 308 + is expected to equal :permanent_redirect + with well-known code: 405 + is expected to equal :method_not_allowed + with well-known code: 507 + is expected to equal :insufficient_storage + with well-known code: 412 + is expected to equal :precondition_failed + with well-known code: 202 + is expected to equal :accepted + with well-known code: 226 + is expected to equal :im_used + with well-known code: 506 + is expected to equal :variant_also_negotiates + with well-known code: 424 + is expected to equal :failed_dependency + with well-known code: 510 + is expected to equal :not_extended + with well-known code: 503 + is expected to equal :service_unavailable + with well-known code: 207 + is expected to equal :multi_status + with well-known code: 406 + is expected to equal :not_acceptable + with well-known code: 415 + is expected to equal :unsupported_media_type #bad_gateway? - when code is higher than 502 - is expected to equal false - when code is lower than 502 - is expected to equal false when code is 502 is expected to equal true - with 2xx codes - is #success? - is not #client_error? - is not #server_error? - is not #redirect? - is not #informational? - #internal_server_error? - when code is lower than 500 - is expected to equal false - when code is higher than 500 - is expected to equal false - when code is 500 - is expected to equal true - #expectation_failed? - when code is 417 - is expected to equal true - when code is higher than 417 - is expected to equal false - when code is lower than 417 - is expected to equal false - #precondition_required? - when code is 428 - is expected to equal true - when code is higher than 428 + when code is lower than 502 is expected to equal false - when code is lower than 428 + when code is higher than 502 is expected to equal false #reason - with well-known code: 407 - is expected to be frozen - is expected to eq "Proxy Authentication Required" - with well-known code: 405 - is expected to eq "Method Not Allowed" - is expected to be frozen - with well-known code: 451 - is expected to eq "Unavailable For Legal Reasons" - is expected to be frozen - with well-known code: 226 - is expected to eq "IM Used" + with well-known code: 307 is expected to be frozen - with well-known code: 504 + is expected to eq "Temporary Redirect" + with well-known code: 422 is expected to be frozen - is expected to eq "Gateway Timeout" - with well-known code: 416 + is expected to eq "Unprocessable Entity" + with well-known code: 305 is expected to be frozen - is expected to eq "Range Not Satisfiable" - with well-known code: 206 + is expected to eq "Use Proxy" + with well-known code: 204 + is expected to eq "No Content" is expected to be frozen - is expected to eq "Partial Content" - with well-known code: 408 + with well-known code: 428 + is expected to eq "Precondition Required" is expected to be frozen - is expected to eq "Request Timeout" - with well-known code: 100 + with well-known code: 208 + is expected to eq "Already Reported" is expected to be frozen - is expected to eq "Continue" - with well-known code: 507 - is expected to eq "Insufficient Storage" + with unknown code + is expected to be nil + with well-known code: 401 + is expected to eq "Unauthorized" is expected to be frozen - with well-known code: 200 - is expected to eq "OK" + with well-known code: 431 is expected to be frozen - with well-known code: 402 - is expected to eq "Payment Required" + is expected to eq "Request Header Fields Too Large" + with well-known code: 303 + is expected to eq "See Other" is expected to be frozen with well-known code: 502 is expected to be frozen is expected to eq "Bad Gateway" - with well-known code: 411 + with well-known code: 300 + is expected to eq "Multiple Choices" is expected to be frozen - is expected to eq "Length Required" - with well-known code: 404 - is expected to eq "Not Found" + with well-known code: 405 + is expected to eq "Method Not Allowed" is expected to be frozen - with well-known code: 409 + with well-known code: 101 + is expected to eq "Switching Protocols" + is expected to be frozen + with well-known code: 102 + is expected to be frozen + is expected to eq "Processing" + with well-known code: 408 + is expected to eq "Request Timeout" is expected to be frozen - is expected to eq "Conflict" with well-known code: 304 is expected to be frozen is expected to eq "Not Modified" - with well-known code: 431 + with well-known code: 203 + is expected to eq "Non-Authoritative Information" is expected to be frozen - is expected to eq "Request Header Fields Too Large" - with well-known code: 501 + with well-known code: 414 + is expected to eq "URI Too Long" is expected to be frozen - is expected to eq "Not Implemented" - with well-known code: 204 - is expected to eq "No Content" + with well-known code: 202 + is expected to eq "Accepted" is expected to be frozen - with well-known code: 429 - is expected to eq "Too Many Requests" + with well-known code: 207 + is expected to eq "Multi-Status" is expected to be frozen - with well-known code: 205 - is expected to eq "Reset Content" + with well-known code: 506 + is expected to eq "Variant Also Negotiates" is expected to be frozen - with well-known code: 410 + with well-known code: 511 + is expected to eq "Network Authentication Required" is expected to be frozen - is expected to eq "Gone" - with well-known code: 202 - is expected to eq "Accepted" + with well-known code: 409 is expected to be frozen - with well-known code: 203 - is expected to eq "Non-Authoritative Information" + is expected to eq "Conflict" + with well-known code: 504 + is expected to eq "Gateway Timeout" is expected to be frozen - with well-known code: 510 + with well-known code: 302 + is expected to eq "Found" is expected to be frozen - is expected to eq "Not Extended" - with well-known code: 303 + with well-known code: 200 is expected to be frozen - is expected to eq "See Other" - with well-known code: 208 - is expected to eq "Already Reported" + is expected to eq "OK" + with well-known code: 508 is expected to be frozen - with well-known code: 301 - is expected to eq "Moved Permanently" + is expected to eq "Loop Detected" + with well-known code: 510 + is expected to eq "Not Extended" is expected to be frozen - with well-known code: 400 - is expected to eq "Bad Request" + with well-known code: 226 + is expected to eq "IM Used" + is expected to be frozen + with well-known code: 100 + is expected to eq "Continue" is expected to be frozen - with unknown code - is expected to be nil with well-known code: 403 is expected to be frozen is expected to eq "Forbidden" - with well-known code: 417 - is expected to eq "Expectation Failed" + with well-known code: 407 is expected to be frozen - with well-known code: 401 - is expected to eq "Unauthorized" + is expected to eq "Proxy Authentication Required" + with well-known code: 201 is expected to be frozen - with well-known code: 413 + is expected to eq "Created" + with well-known code: 415 + is expected to eq "Unsupported Media Type" is expected to be frozen - is expected to eq "Payload Too Large" - with well-known code: 428 - is expected to eq "Precondition Required" + with well-known code: 505 + is expected to eq "HTTP Version Not Supported" is expected to be frozen - with well-known code: 508 - is expected to eq "Loop Detected" + with well-known code: 301 is expected to be frozen - with well-known code: 426 - is expected to eq "Upgrade Required" + is expected to eq "Moved Permanently" + with well-known code: 406 is expected to be frozen - with well-known code: 302 + is expected to eq "Not Acceptable" + with well-known code: 417 + is expected to eq "Expectation Failed" is expected to be frozen - is expected to eq "Found" - with well-known code: 422 - is expected to eq "Unprocessable Entity" + with well-known code: 308 + is expected to eq "Permanent Redirect" is expected to be frozen - with well-known code: 506 - is expected to eq "Variant Also Negotiates" + with well-known code: 411 + is expected to eq "Length Required" is expected to be frozen with well-known code: 500 - is expected to be frozen is expected to eq "Internal Server Error" - with well-known code: 307 is expected to be frozen - is expected to eq "Temporary Redirect" - with well-known code: 505 + with well-known code: 410 + is expected to eq "Gone" is expected to be frozen - is expected to eq "HTTP Version Not Supported" - with well-known code: 421 + with well-known code: 412 is expected to be frozen - is expected to eq "Misdirected Request" - with well-known code: 102 + is expected to eq "Precondition Failed" + with well-known code: 424 is expected to be frozen - is expected to eq "Processing" - with well-known code: 305 + is expected to eq "Failed Dependency" + with well-known code: 402 is expected to be frozen - is expected to eq "Use Proxy" - with well-known code: 207 - is expected to eq "Multi-Status" + is expected to eq "Payment Required" + with well-known code: 206 + is expected to eq "Partial Content" is expected to be frozen - with well-known code: 101 + with well-known code: 501 + is expected to eq "Not Implemented" is expected to be frozen - is expected to eq "Switching Protocols" - with well-known code: 300 - is expected to eq "Multiple Choices" + with well-known code: 429 + is expected to eq "Too Many Requests" is expected to be frozen - with well-known code: 424 - is expected to eq "Failed Dependency" + with well-known code: 503 + is expected to be frozen + is expected to eq "Service Unavailable" + with well-known code: 416 + is expected to eq "Range Not Satisfiable" is expected to be frozen with well-known code: 423 is expected to eq "Locked" is expected to be frozen - with well-known code: 414 + with well-known code: 421 is expected to be frozen - is expected to eq "URI Too Long" - with well-known code: 503 - is expected to eq "Service Unavailable" + is expected to eq "Misdirected Request" + with well-known code: 426 + is expected to eq "Upgrade Required" is expected to be frozen - with well-known code: 406 - is expected to eq "Not Acceptable" + with well-known code: 507 is expected to be frozen - with well-known code: 201 - is expected to eq "Created" + is expected to eq "Insufficient Storage" + with well-known code: 404 + is expected to eq "Not Found" is expected to be frozen - with well-known code: 415 + with well-known code: 451 + is expected to eq "Unavailable For Legal Reasons" is expected to be frozen - is expected to eq "Unsupported Media Type" - with well-known code: 412 + with well-known code: 205 + is expected to eq "Reset Content" is expected to be frozen - is expected to eq "Precondition Failed" - with well-known code: 511 - is expected to eq "Network Authentication Required" + with well-known code: 413 is expected to be frozen - with well-known code: 308 + is expected to eq "Payload Too Large" + with well-known code: 400 is expected to be frozen - is expected to eq "Permanent Redirect" - .new - accepts any object that responds to #to_i - fails if given value does not respond to #to_i - #accepted? - when code is 202 + is expected to eq "Bad Request" + #request_header_fields_too_large? + when code is 431 is expected to equal true - when code is lower than 202 + when code is lower than 431 is expected to equal false - when code is higher than 202 + when code is higher than 431 is expected to equal false + with 2xx codes + is not #informational? + is not #redirect? + is #success? + is not #client_error? + is not #server_error? #unprocessable_entity? + when code is lower than 422 + is expected to equal false when code is higher than 422 is expected to equal false when code is 422 is expected to equal true - when code is lower than 422 + #conflict? + when code is 409 + is expected to equal true + when code is lower than 409 is expected to equal false - with 1xx codes + when code is higher than 409 + is expected to equal false + .new + fails if given value does not respond to #to_i + accepts any object that responds to #to_i + with 4xx codes + is not #informational? + is not #redirect? + is #client_error? is not #server_error? - is not #client_error? is not #success? - is #informational? - is not #redirect? - #continue? - when code is higher than 100 + #too_many_requests? + when code is higher than 429 is expected to equal false - when code is lower than 100 + when code is lower than 429 is expected to equal false - when code is 100 + when code is 429 is expected to equal true - #no_content? - when code is 204 + #see_other? + when code is lower than 303 + is expected to equal false + when code is higher than 303 + is expected to equal false + when code is 303 + is expected to equal true + #locked? + when code is 423 + is expected to equal true + when code is lower than 423 + is expected to equal false + when code is higher than 423 + is expected to equal false + #multi_status? + when code is higher than 207 + is expected to equal false + when code is lower than 207 + is expected to equal false + when code is 207 + is expected to equal true + #not_modified? + when code is higher than 304 + is expected to equal false + when code is lower than 304 + is expected to equal false + when code is 304 + is expected to equal true + #partial_content? + when code is lower than 206 + is expected to equal false + when code is higher than 206 + is expected to equal false + when code is 206 + is expected to equal true + #already_reported? + when code is higher than 208 + is expected to equal false + when code is 208 + is expected to equal true + when code is lower than 208 + is expected to equal false + #reset_content? + when code is higher than 205 + is expected to equal false + when code is lower than 205 + is expected to equal false + when code is 205 + is expected to equal true + #use_proxy? + when code is higher than 305 + is expected to equal false + when code is lower than 305 + is expected to equal false + when code is 305 + is expected to equal true + #payment_required? + when code is 402 + is expected to equal true + when code is lower than 402 + is expected to equal false + when code is higher than 402 + is expected to equal false + #moved_permanently? + when code is lower than 301 + is expected to equal false + when code is higher than 301 + is expected to equal false + when code is 301 + is expected to equal true + #ok? + when code is lower than 200 + is expected to equal false + when code is 200 + is expected to equal true + when code is higher than 200 + is expected to equal false + #not_found? + when code is higher than 404 + is expected to equal false + when code is 404 + is expected to equal true + when code is lower than 404 + is expected to equal false + #variant_also_negotiates? + when code is higher than 506 + is expected to equal false + when code is 506 + is expected to equal true + when code is lower than 506 + is expected to equal false + #non_authoritative_information? + when code is lower than 203 + is expected to equal false + when code is 203 is expected to equal true + when code is higher than 203 + is expected to equal false + #no_content? when code is lower than 204 is expected to equal false when code is higher than 204 is expected to equal false + when code is 204 + is expected to equal true + with 5xx codes + is not #redirect? + is not #client_error? + is #server_error? + is not #success? + is not #informational? + ::SYMBOLS + [400] + is expected to equal :bad_request + [200] + is expected to equal :ok + #bad_request? + when code is higher than 400 + is expected to equal false + when code is 400 + is expected to equal true + when code is lower than 400 + is expected to equal false + with 1xx codes + is not #success? + is #informational? + is not #client_error? + is not #redirect? + is not #server_error? + #network_authentication_required? + when code is higher than 511 + is expected to equal false + when code is 511 + is expected to equal true + when code is lower than 511 + is expected to equal false + #insufficient_storage? + when code is 507 + is expected to equal true + when code is lower than 507 + is expected to equal false + when code is higher than 507 + is expected to equal false #unsupported_media_type? + when code is higher than 415 + is expected to equal false when code is 415 is expected to equal true when code is lower than 415 is expected to equal false - when code is higher than 415 + #method_not_allowed? + when code is higher than 405 is expected to equal false - #range_not_satisfiable? - when code is lower than 416 + when code is lower than 405 is expected to equal false - when code is higher than 416 + when code is 405 + is expected to equal true + #upgrade_required? + when code is higher than 426 is expected to equal false - when code is 416 + when code is lower than 426 + is expected to equal false + when code is 426 + is expected to equal true + #not_acceptable? + when code is lower than 406 + is expected to equal false + when code is higher than 406 + is expected to equal false + when code is 406 + is expected to equal true + #multiple_choices? + when code is 300 + is expected to equal true + when code is lower than 300 + is expected to equal false + when code is higher than 300 + is expected to equal false + #forbidden? + when code is higher than 403 + is expected to equal false + when code is lower than 403 + is expected to equal false + when code is 403 + is expected to equal true + #loop_detected? + when code is lower than 508 + is expected to equal false + when code is higher than 508 + is expected to equal false + when code is 508 + is expected to equal true + #processing? + when code is higher than 102 + is expected to equal false + when code is 102 + is expected to equal true + when code is lower than 102 + is expected to equal false + #expectation_failed? + when code is 417 + is expected to equal true + when code is higher than 417 + is expected to equal false + when code is lower than 417 + is expected to equal false + #gateway_timeout? + when code is lower than 504 + is expected to equal false + when code is 504 + is expected to equal true + when code is higher than 504 + is expected to equal false + #http_version_not_supported? + when code is higher than 505 + is expected to equal false + when code is 505 is expected to equal true + when code is lower than 505 + is expected to equal false #uri_too_long? when code is higher than 414 is expected to equal false @@ -1867,920 +1726,1097 @@ is expected to equal true when code is lower than 414 is expected to equal false - #gateway_timeout? - when code is 504 + #permanent_redirect? + when code is 308 is expected to equal true - when code is higher than 504 + when code is lower than 308 is expected to equal false - when code is lower than 504 + when code is higher than 308 is expected to equal false - #bad_request? - when code is 400 + #range_not_satisfiable? + when code is 416 is expected to equal true - when code is lower than 400 + when code is higher than 416 is expected to equal false - when code is higher than 400 + when code is lower than 416 is expected to equal false - -HTTP::Features::AutoDeflate - accepts string as method - accepts gzip method - accepts deflate method - uses gzip by default - raises error for wrong type - #deflated_body - when method is gzip - caches compressed content when size is called - returns object which yields gzipped content of the given body - when method is deflate - caches compressed content when size is called - returns object which yields deflated content of the given body - -HTTP::Request::Writer - #stream - when body is nonempty - writes it to the socket and sets Content-Length - when multiple headers are set - separates headers with carriage return and line feed - when Transfer-Encoding is chunked - writes encoded content and omits Content-Length - when writing to socket raises an exception - raises a ConnectionError - when server won't accept any more data - aborts silently - when body is empty - doesn't write anything to the socket and sets Content-Length - when Content-Length header is set - keeps the given value - -HTTP::Options body - may be specified with with_body - defaults to nil - -HTTP::Response::Body - streams bodies from responses - when body is gzipped - decodes body - #readpartial - streams decoded body - when body empty - returns responds to empty? with true - #readpartial - returns content in specified encoding - without size given - calls underlying connection readpartial without specific size - does not blows up - with size given - passes value to underlying connection - -HTTP::Features::Logging - logging the response - should log the response - logging the request - should log the request - -HTTP::Options - coerces to a Hash - has reader methods for attributes - -HTTP::Response - includes HTTP::Headers::Mixin - #connection - returns the connection object used to instantiate the response - #cookies - does not contains cookies limited to non-requeted uri - contains cookies without domain restriction - is expected to be a kind of HTTP::CookieJar - contains cookies limited to domain of request uri - #content_length - without Content-Length header - is expected to be nil - with Content-Length: 5 - is expected to eq 5 - with invalid Content-Length - is expected to be nil - mime_type - with Content-Type: text/html; charset=utf-8 - is expected to eq "text/html" - without Content-Type header - is expected to be nil - with Content-Type: text/html - is expected to eq "text/html" - #parse - with explicitly given mime type - supports MIME type aliases - ignores mime_type of response - with known content type - returns parsed body - with unknown content type - raises HTTP::Error - #inspect - is expected to eq "#\"text/plain\"}>" - charset - without Content-Type header - is expected to be nil - with Content-Type: text/html; charset=utf-8 - is expected to eq "utf-8" - with Content-Type: text/html - is expected to be nil - to_a - returns a Rack-like array - #flush - returns response self-reference - flushes body - #chunked? - is expected not to be chunked - when encoding is set to chunked - is expected to be chunked - -HTTP::Options merge - merges as excepted in complex cases - supports a Hash - supports another Options - -HTTP::Features::Instrumentation - logging the response - should log the response - logging the request - should log the request - -HTTP::Options headers - may be specified with with_headers - defaults to be empty - accepts any object that respond to :to_hash - -HTTP::Options form - defaults to nil - may be specified with with_form_data - -HTTP::Options proxy - may be specified with with_proxy - defaults to {} - accepts proxy address, port, username, and password - -HTTP::URI - sets default ports for HTTPS URIs - sets default ports for HTTP URIs - knows URI schemes - #dup - doesn't share internal value between duplicates - -HTTP::Options new - supports a Options instance - with a Hash - coerces :form correctly - coerces :proxy correctly - coerces :headers correctly - coerces :response correctly - -HTTP::Request::Body - #size - when body is an IO without size - raises a RequestError - when body is an IO with size - returns IO size - when body is an Enumerable - raises a RequestError - when body is nil - returns zero - when body is a string - returns string bytesize - #initialize - when body is a string - does not raise an error - when body is an Enumerable - does not raise an error - when body is an IO - does not raise an error - when body is nil - does not raise an error - when body is of unrecognized type - raises an error - #each - when body is a string - yields the string - when body is an Enumerable IO - yields chunks of content - allows to enumerate multiple times - when body is a pipe - yields chunks of content - when body is nil - yields nothing - when body is a non-Enumerable IO - yields chunks of content - when body is an Enumerable - yields elements - #== - when sources are equivalent - returns true - when sources are not equivalent - returns false - when objects are not of the same class - returns false - #source - returns the original object - -HTTP::Headers - is Enumerable - #merge! - leaves headers not presented in other as is - appends other headers, not presented in base - overwrites existing values + #unauthorized? + when code is lower than 401 + is expected to equal false + when code is 401 + is expected to equal true + when code is higher than 401 + is expected to equal false + #precondition_failed? + when code is higher than 412 + is expected to equal false + when code is lower than 412 + is expected to equal false + when code is 412 + is expected to equal true + #payload_too_large? + when code is lower than 413 + is expected to equal false + when code is 413 + is expected to equal true + when code is higher than 413 + is expected to equal false + #im_used? + when code is higher than 226 + is expected to equal false + when code is lower than 226 + is expected to equal false + when code is 226 + is expected to equal true #inspect - is expected to eq "#[\"hoo=ray\", \"woo=hoo\"]}>" + returns quoted code and reason phrase + #continue? + when code is higher than 100 + is expected to equal false + when code is lower than 100 + is expected to equal false + when code is 100 + is expected to equal true + with 3xx codes + is not #success? + is not #client_error? + is not #informational? + is #redirect? + is not #server_error? + #not_implemented? + when code is higher than 501 + is expected to equal false + when code is 501 + is expected to equal true + when code is lower than 501 + is expected to equal false + #found? + when code is 302 + is expected to equal true + when code is lower than 302 + is expected to equal false + when code is higher than 302 + is expected to equal false + #length_required? + when code is lower than 411 + is expected to equal false + when code is 411 + is expected to equal true + when code is higher than 411 + is expected to equal false + #misdirected_request? + when code is lower than 421 + is expected to equal false + when code is higher than 421 + is expected to equal false + when code is 421 + is expected to equal true + #created? + when code is lower than 201 + is expected to equal false + when code is 201 + is expected to equal true + when code is higher than 201 + is expected to equal false + #code + is expected to eq 200 + is expected to be a kind of Integer + #internal_server_error? + when code is 500 + is expected to equal true + when code is higher than 500 + is expected to equal false + when code is lower than 500 + is expected to equal false .coerce - accepts any object that respond to #to_h - fails if given object cannot be coerced - accepts any object that respond to #to_hash - is aliased as .[] - accepts any object that respond to #to_a - with duplicate header keys (mixed case) - adds all headers - #to_a - returns Array of key/value pairs with normalized keys - returns an Array - #dup - is expected not to equal ["Content-Type", "application/json"] - is expected to be a kind of HTTP::Headers - has headers copied - modifying a copy - modifies dupped copy - does not affects original headers - #hash - equals if two headers equals - .empty? - initially + is aliased as `.[]` + fails if coercion failed + with Symbol + fails when symbolized reason is unknown + coerces symbolized reasons + with Numeric + coerces as Fixnum code + with String + fails when reason is unknown + coerces reasons + #not_extended? + when code is lower than 510 + is expected to equal false + when code is higher than 510 + is expected to equal false + when code is 510 is expected to equal true - when last header was removed + #switching_protocols? + when code is lower than 101 + is expected to equal false + when code is higher than 101 + is expected to equal false + when code is 101 is expected to equal true - when header exists + #unavailable_for_legal_reasons? + when code is higher than 451 is expected to equal false - #[] - when header has a multiple values - returns array of associated values - normalizes header name - when header has a single value - normalizes header name - returns it returns a single value - when header does not exists - returns nil - #set - normalizes header name - fails with invalid header name - overwrites previous value - sets header value - allows set multiple values - fails with empty header name - #== - allows comparison with Array of key/value pairs - sensitive to headers order - sensitive to header values order - compares header keys and values - #[]= - allows set multiple values - sets header value - normalizes header name - overwrites previous value - #keys - returns uniq keys only - normalizes keys - #merge - is expected not to equal ["Host", "example.com"] and ["Accept", "application/json"] - is expected to be a kind of HTTP::Headers - overwrites existing values - does not affects original headers - appends other headers, not presented in base - leaves headers not presented in other as is - #include? - normalizes given header name - tells whenever given headers is set or not - #to_h - returns Hash with normalized keys - returns a Hash - for a header with single value - provides a value as is - for a header with multiple values - provides an array of values - #delete - normalizes header name - fails with empty header name - fails with invalid header name - removes given header - #add - appends new value if header exists - fails with empty header name - allows append multiple values - sets header value - normalizes header name - fails with invalid header name - #each - yields each key/value pair separatedly - returns Enumerator if no block given - returns self instance if block given - yields headers in the same order they were added - #get - fails with empty header name - returns array of associated values - normalizes header name - fails with invalid header name - when header does not exists - returns empty array - -HTTP::Response::Parser - whole response in one part - parses headers - parses body - response in many parts - parses headers - parses body + when code is lower than 451 + is expected to equal false + when code is 451 + is expected to equal true + #service_unavailable? + when code is lower than 503 + is expected to equal false + when code is higher than 503 + is expected to equal false + when code is 503 + is expected to equal true HTTP unifies socket errors into HTTP::ConnectionError - .nodelay - sets TCP_NODELAY on the underlying socket + with redirects + is easy for 302 + is easy for 301 .via anonymous proxy raises an argument error if no port given - proxies the request ignores credentials + proxies the request responds with the endpoint's body ssl - ignores credentials (PENDING: Temporarily skipped with xcontext) responds with the endpoint's body (PENDING: Temporarily skipped with xcontext) + ignores credentials (PENDING: Temporarily skipped with xcontext) proxy with authentication - proxies the request responds with 407 when wrong credentials given responds with 407 if no credentials given responds with the endpoint's body + proxies the request ssl - responds with 407 when wrong credentials given (PENDING: Temporarily skipped with xcontext) responds with the endpoint's body (PENDING: Temporarily skipped with xcontext) + responds with 407 when wrong credentials given (PENDING: Temporarily skipped with xcontext) responds with 407 if no credentials given (PENDING: Temporarily skipped with xcontext) .basic_auth fails when :user is not given fails when :pass is not given - fails when options is not a Hash sets Authorization header with proper BasicAuth value - getting resources - is easy - with query string parameters in the URI and opts hash - includes both - with query string parameters - is easy - with headers - is easy - with two leading slashes in path - is allowed - with a large request body - with `.timeout(:null)` - writes the whole body - with `.timeout(6)` - writes the whole body - with `.timeout({:read=>2, :write=>2, :connect=>2})` - writes the whole body - with URI instance - is easy - posting forms to resources - is easy + fails when options is not a Hash posting with an explicit body is easy - loading text with no charset - is binary encoded - .cookies - properly merges Cookie headers and cookies - passes correct `Cookie` header - properly merges cookies - properly works with cookie jars from response - .timeout - specifying a global timeout - sets timeout_class to Global - sets given timeout option - specifying a null timeout - sets timeout_class to Null - specifying per operation timeouts - sets timeout_class to PerOperation - sets given timeout options + head requests + is easy .use turns on given feature with :normalize_uri - uses the default URI normalizer uses the custom URI Normalizer method normalizes URI + uses the default URI normalizer + with :auto_deflate + sends gzipped body + sends deflated body with :auto_inflate returns decoded body returns deflated body returns raw body when Content-Encoding type is missing - with :auto_deflate - sends gzipped body - sends deflated body + loading text with no charset + is binary encoded + .cookies + passes correct `Cookie` header + properly merges cookies + properly merges Cookie headers and cookies + properly works with cookie jars from response loading endpoint with charset uses charset from headers with encoding option respects option - head requests + getting resources is easy - passing a string encoding type - finds encoding + with query string parameters + is easy + with a large request body + with `.timeout({:read=>2, :write=>2, :connect=>2})` + writes the whole body + with `.timeout(6)` + writes the whole body + with `.timeout(:null)` + writes the whole body + with URI instance + is easy + with query string parameters in the URI and opts hash + includes both + with headers + is easy + with two leading slashes in path + is allowed + posting forms to resources + is easy + loading binary data + is encoded as bytes .persistent - with timeout specified - sets keep_alive_timeout - with host and block given - auto-closes connection (PENDING: Temporarily skipped with xit) - returns last evaluation of last expression (PENDING: Temporarily skipped with xit) with host only given example at ./spec/lib/http_spec.rb:260 (PENDING: Temporarily skipped with xit) example at ./spec/lib/http_spec.rb:261 (PENDING: Temporarily skipped with xit) - with redirects - is easy for 301 - is easy for 302 + with host and block given + returns last evaluation of last expression (PENDING: Temporarily skipped with xit) + auto-closes connection (PENDING: Temporarily skipped with xit) + with timeout specified + sets keep_alive_timeout .auth accepts any #to_s object sets Authorization header to the given value - loading binary data - is encoded as bytes + .nodelay + sets TCP_NODELAY on the underlying socket + .timeout + specifying a global timeout + sets timeout_class to Global + sets given timeout option + specifying a null timeout + sets timeout_class to Null + specifying per operation timeouts + sets given timeout options + sets timeout_class to PerOperation + passing a string encoding type + finds encoding + +HTTP::Options body + may be specified with with_body + defaults to nil + +HTTP::Response::Parser + response in many parts + parses body + parses headers + whole response in one part + parses headers + parses body + +HTTP::ContentType + .parse + with tEXT/plaIN + mime_type + is expected to eq "text/plain" + charset + is expected to be nil + with text/plain; charset=utf-8 + mime_type + is expected to eq "text/plain" + charset + is expected to eq "utf-8" + with text/plain; charSET=utf-8 + charset + is expected to eq "utf-8" + mime_type + is expected to eq "text/plain" + with text/plain; foo=bar; charset=utf-8 + mime_type + is expected to eq "text/plain" + charset + is expected to eq "utf-8" + with text/plain;charset=utf-8;foo=bar + charset + is expected to eq "utf-8" + mime_type + is expected to eq "text/plain" + with text/plain + charset + is expected to be nil + mime_type + is expected to eq "text/plain" + with text/plain; charset="utf-8" + mime_type + is expected to eq "text/plain" + charset + is expected to eq "utf-8" + +HTTP::Features::Logging + logging the request + should log the request + logging the response + should log the response + +HTTP::Options merge + supports a Hash + merges as excepted in complex cases + supports another Options + +HTTP::Connection + #readpartial + reads data in parts + #read_headers! + reads data in parts + +HTTP::Request::Body + #each + when body is a string + yields the string + when body is an Enumerable IO + yields chunks of content + allows to enumerate multiple times + when body is a pipe + yields chunks of content + when body is nil + yields nothing + when body is a non-Enumerable IO + yields chunks of content + when body is an Enumerable + yields elements + #initialize + when body is a string + does not raise an error + when body is an Enumerable + does not raise an error + when body is an IO + does not raise an error + when body is nil + does not raise an error + when body is of unrecognized type + raises an error + #size + when body is an Enumerable + raises a RequestError + when body is nil + returns zero + when body is an IO with size + returns IO size + when body is an IO without size + raises a RequestError + when body is a string + returns string bytesize + #== + when sources are equivalent + returns true + when objects are not of the same class + returns false + when sources are not equivalent + returns false + #source + returns the original object HTTP::Redirector #max_hops by default is expected to eq 5 + #strict + by default + is expected to equal true #perform - fails with EndlessRedirectError if endless loop detected - returns first non-redirect response fails with TooManyRedirectsError if max hops reached + returns first non-redirect response + fails with EndlessRedirectError if endless loop detected fails with StateError if there were no Location header concatenates multiple Location headers - following 307 redirect + following 308 redirect follows with original request's verb - following 302 redirect - with strict mode - raises StateError if original request was POST - raises StateError if original request was DELETE - raises StateError if original request was PUT - it follows with original verb if it's safe + following 301 redirect with non-strict mode - it follows with original verb if it's safe - it follows with GET if original request was POST it follows with GET if original request was DELETE it follows with GET if original request was PUT - following 300 redirect + it follows with original verb if it's safe + it follows with GET if original request was POST + with strict mode + it follows with original verb if it's safe + raises StateError if original request was PUT + raises StateError if original request was DELETE + raises StateError if original request was POST + following 302 redirect with non-strict mode it follows with GET if original request was DELETE it follows with GET if original request was PUT it follows with original verb if it's safe it follows with GET if original request was POST with strict mode - raises StateError if original request was POST - it follows with original verb if it's safe - raises StateError if original request was DELETE raises StateError if original request was PUT + raises StateError if original request was DELETE + it follows with original verb if it's safe + raises StateError if original request was POST following 303 redirect - follows with GET if original request was neither GET nor HEAD follows with HEAD if original request was HEAD + follows with GET if original request was neither GET nor HEAD follows with GET if original request was GET - following 301 redirect + following 300 redirect with strict mode - raises StateError if original request was DELETE raises StateError if original request was POST - raises StateError if original request was PUT it follows with original verb if it's safe + raises StateError if original request was DELETE + raises StateError if original request was PUT with non-strict mode it follows with GET if original request was POST it follows with GET if original request was DELETE - it follows with original verb if it's safe it follows with GET if original request was PUT - following 308 redirect + it follows with original verb if it's safe + following 307 redirect follows with original request's verb - #strict - by default - is expected to equal true + +HTTP::URI + knows URI schemes + sets default ports for HTTPS URIs + sets default ports for HTTP URIs + #dup + doesn't share internal value between duplicates + +HTTP::Request::Writer + #stream + when multiple headers are set + separates headers with carriage return and line feed + when Transfer-Encoding is chunked + writes encoded content and omits Content-Length + when body is nonempty + writes it to the socket and sets Content-Length + when Content-Length header is set + keeps the given value + when server won't accept any more data + aborts silently + when writing to socket raises an exception + raises a ConnectionError + when body is empty + doesn't write anything to the socket and sets Content-Length + +HTTP::Options json + defaults to nil + may be specified with with_json data + +HTTP::Headers::Mixin + #[] + proxies to headers#[] + #headers + returns @headers instance variable + #[]= + proxies to headers#[] + +HTTP::Options features + defaults to be empty + raises error for not supported features + accepts plain symbols in array + accepts feature name with its options in array + +HTTP::Features::AutoDeflate + accepts gzip method + accepts deflate method + raises error for wrong type + accepts string as method + uses gzip by default + #deflated_body + when method is deflate + caches compressed content when size is called + returns object which yields deflated content of the given body + when method is gzip + caches compressed content when size is called + returns object which yields gzipped content of the given body + +HTTP::Client + without timeouts + works + #perform + calls finish_response once body was fully flushed + when server fully flushes response in one chunk + properly reads body + with HEAD request + does not iterates through body + finishes response after headers were received + when uses chunked transfer encoding + properly reads body + with broken body (too early closed connection) + raises HTTP::ConnectionError + with a global timeout + errors if reading takes too long + errors if connecting takes too long + it resets state when reusing connections + does not timeout + working with SSL + just works (PENDING: Temporarily skipped with xdescribe) + fails with OpenSSL::SSL::SSLError if host mismatch (PENDING: Temporarily skipped with xdescribe) + with a global timeout + errors if reading takes too long (PENDING: Temporarily skipped with xdescribe) + errors if connecting takes too long (PENDING: Temporarily skipped with xdescribe) + it resets state when reusing connections + does not timeout (PENDING: Temporarily skipped with xdescribe) + with SSL options instead of a context + just works (PENDING: Temporarily skipped with xdescribe) + without timeouts + works (PENDING: Temporarily skipped with xdescribe) + connection reuse + when enabled + re-uses the socket (PENDING: Temporarily skipped with xdescribe) + with a socket issue + transparently reopens (PENDING: Temporarily skipped with xdescribe) + when trying to read a stale body + errors (PENDING: Temporarily skipped with xdescribe) + when reading a cached body + succeeds (PENDING: Temporarily skipped with xdescribe) + without a host + infers host from persistent config (PENDING: Temporarily skipped with xdescribe) + with a change in host + errors (PENDING: Temporarily skipped with xdescribe) + on a mixed state + re-opens the connection (PENDING: Temporarily skipped with xdescribe) + when disabled + opens new sockets (PENDING: Temporarily skipped with xdescribe) + with a per operation timeout + works (PENDING: Temporarily skipped with xdescribe) + read + of 0 + times out (PENDING: Temporarily skipped with xit) + of 2.5 + does not time out (PENDING: Temporarily skipped with xdescribe) + connection + of 1 + does not time out (PENDING: Temporarily skipped with xdescribe) + passing json + encodes given object + following redirects + fails upon endless redirects + prepends previous request uri scheme and host if needed + fails if max amount of hops reached + returns response of new location + with non-ASCII URLs + theoretically works like a charm (PENDING: Temporarily skipped with xit) + works like a charm in real world (PENDING: Temporarily skipped with xit) + connection reuse + when enabled + re-uses the socket + on a mixed state + re-opens the connection + with a change in host + errors + when reading a cached body + succeeds + with a socket issue + transparently reopens + without a host + infers host from persistent config + when trying to read a stale body + errors + when disabled + opens new sockets + #request + with explicitly given `Host` header + keeps `Host` header as is (PENDING: Temporarily skipped with xit) + when :auto_deflate was specified + deletes Content-Length header + sets Content-Encoding header + and there is no body + doesn't set Content-Encoding header + with non-ASCII URLs + works like a charm in real world (PENDING: Temporarily skipped with xit) + theoretically works like a charm (PENDING: Temporarily skipped with xit) + with a per operation timeout + works + read + of 0 + times out (PENDING: Temporarily skipped with xit) + of 2.5 + does not time out + connection + of 1 + does not time out + parsing params + does not corrupts index-less arrays + accepts params within the provided URL + does not modifies query part if no params were given + properly encodes colons + merges duplicate values + does not convert newlines into \r\n before encoding string values + combines GET params from the URI with the passed in params + passing multipart form data + creates multipart form data object + creates url encoded form data object + when passing an HTTP::FormData object directly + creates url encoded form data object + +HTTP::Options + coerces to a Hash + has reader methods for attributes HTTP::Request - provides a #scheme accessor + includes HTTP::Headers::Mixin provides a #verb accessor requires URI to have scheme part - includes HTTP::Headers::Mixin + provides a #scheme accessor sets given headers - User-Agent header - was explicitly given - is expected to eq "MrCrawly/123" - was not given - is expected to eq "http.rb/4.4.1" + #headline + is expected to eq "GET /foo?bar=baz HTTP/1.1" + when URI contains fragment + omits fragment part + with proxy + is expected to eq "GET http://example.com/foo?bar=baz HTTP/1.1" + and HTTPS uri + is expected to eq "GET /foo?bar=baz HTTP/1.1" + when URI contains non-ASCII path + encodes non-ASCII path part + when URI contains encoded query + does not unencodes query part + #inspect + is expected to eq "#" #redirect presets new Host header - with new verb given - verb - is expected to equal :get uri - is expected to eq # - body - is expected to eq # + is expected to eq # with relative URL that misses leading slash given keeps Host header - proxy - is expected to eq {:proxy_password=>"adams", :proxy_username=>"douglas"} + with original URI having non-standard port + uri + is expected to eq # + body + is expected to eq # uri - is expected to eq # + is expected to eq # verb is expected to eq :post - body - is expected to eq # - with original URI having non-standard port - uri - is expected to eq # - proxy - is expected to eq {:proxy_password=>"adams", :proxy_username=>"douglas"} + proxy + is expected to eq {:proxy_password=>"adams", :proxy_username=>"douglas"} with relative URL given keeps Host header body - is expected to eq # + is expected to eq # + verb + is expected to eq :post + proxy + is expected to eq {:proxy_password=>"adams", :proxy_username=>"douglas"} uri - is expected to eq # + is expected to eq # with original URI having non-standard port uri - is expected to eq # + is expected to eq # + body + is expected to eq # + proxy + is expected to eq {:proxy_password=>"adams", :proxy_username=>"douglas"} + with URL with non-standard port given + presets new Host header + body + is expected to eq # verb is expected to eq :post + uri + is expected to eq # proxy is expected to eq {:proxy_password=>"adams", :proxy_username=>"douglas"} verb is expected to eq :post - with URL with non-standard port given + with schema-less absolute URL given presets new Host header proxy is expected to eq {:proxy_password=>"adams", :proxy_username=>"douglas"} verb is expected to eq :post uri - is expected to eq # - body - is expected to eq # - with schema-less absolute URL given - presets new Host header + is expected to eq # body - is expected to eq # - uri - is expected to eq # - proxy - is expected to eq {:proxy_password=>"adams", :proxy_username=>"douglas"} + is expected to eq # + with new verb given verb - is expected to eq :post + is expected to equal :get Host header - was explicitly given - is expected to eq "github.com" was not given is expected to eq "example.com" and request URI has non-standard port is expected to eq "example.com:3000" - #headline - is expected to eq "GET /foo?bar=baz HTTP/1.1" - when URI contains non-ASCII path - encodes non-ASCII path part - when URI contains encoded query - does not unencodes query part - when URI contains fragment - omits fragment part - with proxy - is expected to eq "GET http://example.com/foo?bar=baz HTTP/1.1" - and HTTPS uri - is expected to eq "GET /foo?bar=baz HTTP/1.1" + was explicitly given + is expected to eq "github.com" + User-Agent header + was explicitly given + is expected to eq "MrCrawly/123" + was not given + is expected to eq "http.rb/4.4.1" + +HTTP::Response::Body + streams bodies from responses + when body empty + returns responds to empty? with true + #readpartial + returns content in specified encoding + without size given + does not blows up + calls underlying connection readpartial without specific size + with size given + passes value to underlying connection + when body is gzipped + decodes body + #readpartial + streams decoded body + +HTTP::Response + includes HTTP::Headers::Mixin + charset + with Content-Type: text/html + is expected to be nil + with Content-Type: text/html; charset=utf-8 + is expected to eq "utf-8" + without Content-Type header + is expected to be nil + #flush + returns response self-reference + flushes body + #cookies + contains cookies without domain restriction + contains cookies limited to domain of request uri + does not contains cookies limited to non-requeted uri + is expected to be a kind of HTTP::CookieJar + #connection + returns the connection object used to instantiate the response + #parse + with known content type + returns parsed body + with unknown content type + raises HTTP::Error + with explicitly given mime type + ignores mime_type of response + supports MIME type aliases + #content_length + with Content-Length: 5 + is expected to eq 5 + without Content-Length header + is expected to be nil + with invalid Content-Length + is expected to be nil + to_a + returns a Rack-like array + mime_type + without Content-Type header + is expected to be nil + with Content-Type: text/html; charset=utf-8 + is expected to eq "text/html" + with Content-Type: text/html + is expected to eq "text/html" #inspect - is expected to eq "#" + is expected to eq "#\"text/plain\"}>" + #chunked? + is expected not to be chunked + when encoding is set to chunked + is expected to be chunked -HTTP::Client - following redirects - fails if max amount of hops reached - returns response of new location - fails upon endless redirects - prepends previous request uri scheme and host if needed - with non-ASCII URLs - theoretically works like a charm (PENDING: Temporarily skipped with xit) - works like a charm in real world (PENDING: Temporarily skipped with xit) - with a global timeout - errors if reading takes too long - errors if connecting takes too long - it resets state when reusing connections - does not timeout - without timeouts - works - #perform - calls finish_response once body was fully flushed - when uses chunked transfer encoding - properly reads body - with broken body (too early closed connection) - raises HTTP::ConnectionError - when server fully flushes response in one chunk - properly reads body - with HEAD request - does not iterates through body - finishes response after headers were received - passing multipart form data - creates multipart form data object - creates url encoded form data object - when passing an HTTP::FormData object directly - creates url encoded form data object - parsing params - accepts params within the provided URL - merges duplicate values - combines GET params from the URI with the passed in params - does not corrupts index-less arrays - does not modifies query part if no params were given - does not convert newlines into \r\n before encoding string values - properly encodes colons - #request - with explicitly given `Host` header - keeps `Host` header as is (PENDING: Temporarily skipped with xit) - with non-ASCII URLs - theoretically works like a charm (PENDING: Temporarily skipped with xit) - works like a charm in real world (PENDING: Temporarily skipped with xit) - when :auto_deflate was specified - deletes Content-Length header - sets Content-Encoding header - and there is no body - doesn't set Content-Encoding header - passing json - encodes given object - with a per operation timeout - works - connection - of 1 - does not time out - read - of 0 - times out (PENDING: Temporarily skipped with xit) - of 2.5 - does not time out - connection reuse - when enabled - re-uses the socket - on a mixed state - re-opens the connection - with a change in host - errors - when reading a cached body - succeeds - without a host - infers host from persistent config - when trying to read a stale body - errors - with a socket issue - transparently reopens - when disabled - opens new sockets - working with SSL - just works (PENDING: Temporarily skipped with xdescribe) - fails with OpenSSL::SSL::SSLError if host mismatch (PENDING: Temporarily skipped with xdescribe) - with SSL options instead of a context - just works (PENDING: Temporarily skipped with xdescribe) - connection reuse - when disabled - opens new sockets (PENDING: Temporarily skipped with xdescribe) - when enabled - re-uses the socket (PENDING: Temporarily skipped with xdescribe) - with a change in host - errors (PENDING: Temporarily skipped with xdescribe) - on a mixed state - re-opens the connection (PENDING: Temporarily skipped with xdescribe) - with a socket issue - transparently reopens (PENDING: Temporarily skipped with xdescribe) - when reading a cached body - succeeds (PENDING: Temporarily skipped with xdescribe) - without a host - infers host from persistent config (PENDING: Temporarily skipped with xdescribe) - when trying to read a stale body - errors (PENDING: Temporarily skipped with xdescribe) - with a per operation timeout - works (PENDING: Temporarily skipped with xdescribe) - connection - of 1 - does not time out (PENDING: Temporarily skipped with xdescribe) - read - of 0 - times out (PENDING: Temporarily skipped with xit) - of 2.5 - does not time out (PENDING: Temporarily skipped with xdescribe) - without timeouts - works (PENDING: Temporarily skipped with xdescribe) - with a global timeout - errors if connecting takes too long (PENDING: Temporarily skipped with xdescribe) - errors if reading takes too long (PENDING: Temporarily skipped with xdescribe) - it resets state when reusing connections - does not timeout (PENDING: Temporarily skipped with xdescribe) +HTTP::Features::Instrumentation + logging the request + should log the request + logging the response + should log the response -HTTP::Headers::Mixin - #headers - returns @headers instance variable - #[]= - proxies to headers#[] - #[] - proxies to headers#[] +HTTP::Options headers + accepts any object that respond to :to_hash + may be specified with with_headers + defaults to be empty + +HTTP::Options new + supports a Options instance + with a Hash + coerces :headers correctly + coerces :proxy correctly + coerces :form correctly + coerces :response correctly HTTP::Features::AutoInflate #wrap_response for deflate Content-Encoding header returns a HTTP::Response wrapping the inflated response body - for unknown Content-Encoding header - returns original request - when there is no Content-Encoding header - returns original request - for gzip Content-Encoding header - returns a HTTP::Response wrapping the inflated response body for x-gzip Content-Encoding header returns a HTTP::Response wrapping the inflated response body + for unknown Content-Encoding header + returns original request for identity Content-Encoding header returns original request + when there is no Content-Encoding header + returns original request when response has uri preserves uri in wrapped response + for gzip Content-Encoding header + returns a HTTP::Response wrapping the inflated response body -HTTP::Options json +HTTP::Options form defaults to nil - may be specified with with_json data + may be specified with with_form_data -Pending: (Failures listed here are expected and do not affect your suite's status) +HTTP::Headers + is Enumerable + #dup + has headers copied + is expected not to equal ["Content-Type", "application/json"] + is expected to be a kind of HTTP::Headers + modifying a copy + does not affects original headers + modifies dupped copy + #add + fails with invalid header name + sets header value + allows append multiple values + normalizes header name + appends new value if header exists + fails with empty header name + #delete + removes given header + normalizes header name + fails with invalid header name + fails with empty header name + .empty? + initially + is expected to equal true + when last header was removed + is expected to equal true + when header exists + is expected to equal false + #to_a + returns Array of key/value pairs with normalized keys + returns an Array + #merge + appends other headers, not presented in base + is expected not to equal ["Host", "example.com"] and ["Accept", "application/json"] + leaves headers not presented in other as is + does not affects original headers + is expected to be a kind of HTTP::Headers + overwrites existing values + #get + fails with invalid header name + normalizes header name + returns array of associated values + fails with empty header name + when header does not exists + returns empty array + #merge! + overwrites existing values + leaves headers not presented in other as is + appends other headers, not presented in base + #each + returns Enumerator if no block given + yields headers in the same order they were added + yields each key/value pair separatedly + returns self instance if block given + #[]= + sets header value + overwrites previous value + allows set multiple values + normalizes header name + #== + sensitive to header values order + sensitive to headers order + allows comparison with Array of key/value pairs + compares header keys and values + #[] + when header has a single value + normalizes header name + returns it returns a single value + when header does not exists + returns nil + when header has a multiple values + returns array of associated values + normalizes header name + #to_h + returns Hash with normalized keys + returns a Hash + for a header with multiple values + provides an array of values + for a header with single value + provides a value as is + #inspect + is expected to eq "#[\"hoo=ray\", \"woo=hoo\"]}>" + #set + sets header value + normalizes header name + fails with invalid header name + fails with empty header name + overwrites previous value + allows set multiple values + .coerce + accepts any object that respond to #to_a + accepts any object that respond to #to_h + accepts any object that respond to #to_hash + is aliased as .[] + fails if given object cannot be coerced + with duplicate header keys (mixed case) + adds all headers + #hash + equals if two headers equals + #keys + normalizes keys + returns uniq keys only + #include? + tells whenever given headers is set or not + normalizes given header name - 1) HTTP.via anonymous proxy ssl ignores credentials - # Temporarily skipped with xcontext - # ./spec/lib/http_spec.rb:104 +HTTP::Options proxy + defaults to {} + may be specified with with_proxy + accepts proxy address, port, username, and password + +Pending: (Failures listed here are expected and do not affect your suite's status) - 2) HTTP.via anonymous proxy ssl responds with the endpoint's body + 1) HTTP.via anonymous proxy ssl responds with the endpoint's body # Temporarily skipped with xcontext # ./spec/lib/http_spec.rb:99 - 3) HTTP.via proxy with authentication ssl responds with 407 when wrong credentials given + 2) HTTP.via anonymous proxy ssl ignores credentials # Temporarily skipped with xcontext - # ./spec/lib/http_spec.rb:140 + # ./spec/lib/http_spec.rb:104 - 4) HTTP.via proxy with authentication ssl responds with the endpoint's body + 3) HTTP.via proxy with authentication ssl responds with the endpoint's body # Temporarily skipped with xcontext # ./spec/lib/http_spec.rb:135 + 4) HTTP.via proxy with authentication ssl responds with 407 when wrong credentials given + # Temporarily skipped with xcontext + # ./spec/lib/http_spec.rb:140 + 5) HTTP.via proxy with authentication ssl responds with 407 if no credentials given # Temporarily skipped with xcontext # ./spec/lib/http_spec.rb:145 - 6) HTTP.persistent with host and block given auto-closes connection - # Temporarily skipped with xit - # ./spec/lib/http_spec.rb:269 - - 7) HTTP.persistent with host and block given returns last evaluation of last expression - # Temporarily skipped with xit - # ./spec/lib/http_spec.rb:265 - - 8) HTTP.persistent with host only given + 6) HTTP.persistent with host only given # Temporarily skipped with xit # ./spec/lib/http_spec.rb:260 - 9) HTTP.persistent with host only given + 7) HTTP.persistent with host only given # Temporarily skipped with xit # ./spec/lib/http_spec.rb:261 - 10) HTTP::Client following redirects with non-ASCII URLs theoretically works like a charm - # Temporarily skipped with xit - # ./spec/lib/http/client_spec.rb:91 - - 11) HTTP::Client following redirects with non-ASCII URLs works like a charm in real world - # Temporarily skipped with xit - # ./spec/lib/http/client_spec.rb:100 - - 12) HTTP::Client#request with explicitly given `Host` header keeps `Host` header as is - # Temporarily skipped with xit - # ./spec/lib/http/client_spec.rb:241 - - 13) HTTP::Client#request with non-ASCII URLs theoretically works like a charm + 8) HTTP.persistent with host and block given returns last evaluation of last expression # Temporarily skipped with xit - # ./spec/lib/http/client_spec.rb:225 - - 14) HTTP::Client#request with non-ASCII URLs works like a charm in real world - # Temporarily skipped with xit - # ./spec/lib/http/client_spec.rb:230 + # ./spec/lib/http_spec.rb:265 - 15) HTTP::Client with a per operation timeout read of 0 times out + 9) HTTP.persistent with host and block given auto-closes connection # Temporarily skipped with xit - # ./spec/support/http_handling_shared.rb:47 + # ./spec/lib/http_spec.rb:269 - 16) HTTP::Client working with SSL just works + 10) HTTP::Client working with SSL just works # Temporarily skipped with xdescribe # ./spec/lib/http/client_spec.rb:304 - 17) HTTP::Client working with SSL fails with OpenSSL::SSL::SSLError if host mismatch + 11) HTTP::Client working with SSL fails with OpenSSL::SSL::SSLError if host mismatch # Temporarily skipped with xdescribe # ./spec/lib/http/client_spec.rb:309 - 18) HTTP::Client working with SSL with SSL options instead of a context just works + 12) HTTP::Client working with SSL with a global timeout errors if reading takes too long # Temporarily skipped with xdescribe - # ./spec/lib/http/client_spec.rb:319 + # ./spec/support/http_handling_shared.rb:83 - 19) HTTP::Client working with SSL connection reuse when disabled opens new sockets + 13) HTTP::Client working with SSL with a global timeout errors if connecting takes too long # Temporarily skipped with xdescribe - # ./spec/support/http_handling_shared.rb:184 + # ./spec/support/http_handling_shared.rb:75 - 20) HTTP::Client working with SSL connection reuse when enabled re-uses the socket + 14) HTTP::Client working with SSL with a global timeout it resets state when reusing connections does not timeout # Temporarily skipped with xdescribe - # ./spec/support/http_handling_shared.rb:117 + # ./spec/support/http_handling_shared.rb:93 - 21) HTTP::Client working with SSL connection reuse when enabled with a change in host errors + 15) HTTP::Client working with SSL with SSL options instead of a context just works # Temporarily skipped with xdescribe - # ./spec/support/http_handling_shared.rb:175 + # ./spec/lib/http/client_spec.rb:319 - 22) HTTP::Client working with SSL connection reuse when enabled on a mixed state re-opens the connection + 16) HTTP::Client working with SSL without timeouts works # Temporarily skipped with xdescribe - # ./spec/support/http_handling_shared.rb:123 + # ./spec/support/http_handling_shared.rb:7 + + 17) HTTP::Client working with SSL connection reuse when enabled re-uses the socket + # Temporarily skipped with xdescribe + # ./spec/support/http_handling_shared.rb:117 - 23) HTTP::Client working with SSL connection reuse when enabled with a socket issue transparently reopens + 18) HTTP::Client working with SSL connection reuse when enabled with a socket issue transparently reopens # Temporarily skipped with xdescribe # ./spec/support/http_handling_shared.rb:154 - 24) HTTP::Client working with SSL connection reuse when enabled when reading a cached body succeeds + 19) HTTP::Client working with SSL connection reuse when enabled when trying to read a stale body errors + # Temporarily skipped with xdescribe + # ./spec/support/http_handling_shared.rb:135 + + 20) HTTP::Client working with SSL connection reuse when enabled when reading a cached body succeeds # Temporarily skipped with xdescribe # ./spec/support/http_handling_shared.rb:142 - 25) HTTP::Client working with SSL connection reuse when enabled without a host infers host from persistent config + 21) HTTP::Client working with SSL connection reuse when enabled without a host infers host from persistent config # Temporarily skipped with xdescribe # ./spec/support/http_handling_shared.rb:112 - 26) HTTP::Client working with SSL connection reuse when enabled when trying to read a stale body errors + 22) HTTP::Client working with SSL connection reuse when enabled with a change in host errors # Temporarily skipped with xdescribe - # ./spec/support/http_handling_shared.rb:135 + # ./spec/support/http_handling_shared.rb:175 - 27) HTTP::Client working with SSL with a per operation timeout works + 23) HTTP::Client working with SSL connection reuse when enabled on a mixed state re-opens the connection # Temporarily skipped with xdescribe - # ./spec/support/http_handling_shared.rb:29 + # ./spec/support/http_handling_shared.rb:123 - 28) HTTP::Client working with SSL with a per operation timeout connection of 1 does not time out + 24) HTTP::Client working with SSL connection reuse when disabled opens new sockets # Temporarily skipped with xdescribe - # ./spec/support/http_handling_shared.rb:37 + # ./spec/support/http_handling_shared.rb:184 - 29) HTTP::Client working with SSL with a per operation timeout read of 0 times out + 25) HTTP::Client working with SSL with a per operation timeout works + # Temporarily skipped with xdescribe + # ./spec/support/http_handling_shared.rb:29 + + 26) HTTP::Client working with SSL with a per operation timeout read of 0 times out # Temporarily skipped with xit # ./spec/support/http_handling_shared.rb:47 - 30) HTTP::Client working with SSL with a per operation timeout read of 2.5 does not time out + 27) HTTP::Client working with SSL with a per operation timeout read of 2.5 does not time out # Temporarily skipped with xdescribe # ./spec/support/http_handling_shared.rb:55 - 31) HTTP::Client working with SSL without timeouts works + 28) HTTP::Client working with SSL with a per operation timeout connection of 1 does not time out # Temporarily skipped with xdescribe - # ./spec/support/http_handling_shared.rb:7 + # ./spec/support/http_handling_shared.rb:37 - 32) HTTP::Client working with SSL with a global timeout errors if connecting takes too long - # Temporarily skipped with xdescribe - # ./spec/support/http_handling_shared.rb:75 + 29) HTTP::Client following redirects with non-ASCII URLs theoretically works like a charm + # Temporarily skipped with xit + # ./spec/lib/http/client_spec.rb:91 - 33) HTTP::Client working with SSL with a global timeout errors if reading takes too long - # Temporarily skipped with xdescribe - # ./spec/support/http_handling_shared.rb:83 + 30) HTTP::Client following redirects with non-ASCII URLs works like a charm in real world + # Temporarily skipped with xit + # ./spec/lib/http/client_spec.rb:100 - 34) HTTP::Client working with SSL with a global timeout it resets state when reusing connections does not timeout - # Temporarily skipped with xdescribe - # ./spec/support/http_handling_shared.rb:93 + 31) HTTP::Client#request with explicitly given `Host` header keeps `Host` header as is + # Temporarily skipped with xit + # ./spec/lib/http/client_spec.rb:241 -Top 10 slowest examples (11.82 seconds, 63.0% of total time): - HTTP::Client with a global timeout it resets state when reusing connections does not timeout - 4.09 seconds ./spec/support/http_handling_shared.rb:93 + 32) HTTP::Client#request with non-ASCII URLs works like a charm in real world + # Temporarily skipped with xit + # ./spec/lib/http/client_spec.rb:230 + + 33) HTTP::Client#request with non-ASCII URLs theoretically works like a charm + # Temporarily skipped with xit + # ./spec/lib/http/client_spec.rb:225 + + 34) HTTP::Client with a per operation timeout read of 0 times out + # Temporarily skipped with xit + # ./spec/support/http_handling_shared.rb:47 + +Top 10 slowest examples (24.18 seconds, 63.0% of total time): HTTP unifies socket errors into HTTP::ConnectionError - 2.49 seconds ./spec/lib/http_spec.rb:455 + 14.42 seconds ./spec/lib/http_spec.rb:455 + HTTP::Client with a global timeout it resets state when reusing connections does not timeout + 4.15 seconds ./spec/support/http_handling_shared.rb:93 HTTP::Client with a per operation timeout read of 2.5 does not time out - 2.02 seconds ./spec/support/http_handling_shared.rb:55 - HTTP::Client with a global timeout errors if reading takes too long - 1.02 seconds ./spec/support/http_handling_shared.rb:83 + 2.04 seconds ./spec/support/http_handling_shared.rb:55 HTTP::Client with a global timeout errors if connecting takes too long - 1.02 seconds ./spec/support/http_handling_shared.rb:75 - HTTP::Connection#readpartial reads data in parts - 0.34463 seconds ./spec/lib/http/connection_spec.rb:54 + 1.06 seconds ./spec/support/http_handling_shared.rb:75 + HTTP::Client with a global timeout errors if reading takes too long + 1.03 seconds ./spec/support/http_handling_shared.rb:83 HTTP getting resources with a large request body with `.timeout(6)` writes the whole body - 0.27703 seconds ./spec/lib/http_spec.rb:64 - HTTP getting resources with a large request body with `.timeout({:read=>2, :write=>2, :connect=>2})` writes the whole body - 0.25432 seconds ./spec/lib/http_spec.rb:64 + 0.33497 seconds ./spec/lib/http_spec.rb:64 + HTTP::Client connection reuse when enabled re-uses the socket + 0.32084 seconds ./spec/support/http_handling_shared.rb:117 HTTP getting resources with a large request body with `.timeout(:null)` writes the whole body - 0.21847 seconds ./spec/lib/http_spec.rb:64 - HTTP::Client connection reuse when enabled when reading a cached body succeeds - 0.08495 seconds ./spec/support/http_handling_shared.rb:142 + 0.2798 seconds ./spec/lib/http_spec.rb:64 + HTTP getting resources with a large request body with `.timeout({:read=>2, :write=>2, :connect=>2})` writes the whole body + 0.2718 seconds ./spec/lib/http_spec.rb:64 + HTTP.cookies properly merges cookies + 0.26921 seconds ./spec/lib/http_spec.rb:340 Top 10 slowest example groups: - HTTP::Connection - 0.18124 seconds average (0.36248 seconds / 2 examples) ./spec/lib/http/connection_spec.rb:3 - HTTP::Client - 0.14337 seconds average (9.18 seconds / 64 examples) ./spec/lib/http/client_spec.rb:8 HTTP - 0.0768 seconds average (4.84 seconds / 63 examples) ./spec/lib/http_spec.rb:9 + 0.30538 seconds average (19.24 seconds / 63 examples) ./spec/lib/http_spec.rb:9 + HTTP::Client + 0.16471 seconds average (10.54 seconds / 64 examples) ./spec/lib/http/client_spec.rb:8 + HTTP::Connection + 0.03103 seconds average (0.06207 seconds / 2 examples) ./spec/lib/http/connection_spec.rb:3 + HTTP::Request + 0.02888 seconds average (1.3 seconds / 45 examples) ./spec/lib/http/request_spec.rb:4 HTTP::Redirector - 0.01822 seconds average (0.656 seconds / 36 examples) ./spec/lib/http/redirector_spec.rb:3 - HTTP::Options features - 0.01318 seconds average (0.05272 seconds / 4 examples) ./spec/lib/http/options/features_spec.rb:3 + 0.02583 seconds average (0.92995 seconds / 36 examples) ./spec/lib/http/redirector_spec.rb:3 HTTP::Response::Parser - 0.0111 seconds average (0.04442 seconds / 4 examples) ./spec/lib/http/response/parser_spec.rb:3 - HTTP::Response - 0.01045 seconds average (0.26136 seconds / 25 examples) ./spec/lib/http/response_spec.rb:3 - HTTP::Request - 0.0098 seconds average (0.44079 seconds / 45 examples) ./spec/lib/http/request_spec.rb:4 - HTTP::ContentType - 0.00769 seconds average (0.10765 seconds / 14 examples) ./spec/lib/http/content_type_spec.rb:3 + 0.02057 seconds average (0.08228 seconds / 4 examples) ./spec/lib/http/response/parser_spec.rb:3 + HTTP::Features::Instrumentation + 0.01252 seconds average (0.02504 seconds / 2 examples) ./spec/lib/http/features/instrumentation_spec.rb:3 HTTP::Response::Body - 0.00672 seconds average (0.05372 seconds / 8 examples) ./spec/lib/http/response/body_spec.rb:3 + 0.01207 seconds average (0.0966 seconds / 8 examples) ./spec/lib/http/response/body_spec.rb:3 + HTTP::Features::Logging + 0.01127 seconds average (0.02255 seconds / 2 examples) ./spec/lib/http/features/logging_spec.rb:5 + HTTP::Features::AutoInflate + 0.01125 seconds average (0.07872 seconds / 7 examples) ./spec/lib/http/features/auto_inflate_spec.rb:3 -Finished in 18.75 seconds (files took 7.63 seconds to load) +Finished in 38.39 seconds (files took 14.96 seconds to load) 811 examples, 0 failures, 34 pending -Randomized with seed 48828 +Randomized with seed 43654 Coverage report generated for RSpec to /build/reproducible-path/ruby-http-4.4.1/coverage. 1268 / 1361 LOC (93.17%) covered. [Coveralls] Outside the CI environment, not sending data. @@ -2817,12 +2853,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/24870/tmp/hooks/B01_cleanup starting +I: user script /srv/workspace/pbuilder/24870/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/8618 and its subdirectories -I: Current time: Sun Jul 28 18:40:14 -12 2024 -I: pbuilder-time-stamp: 1722235214 +I: removing directory /srv/workspace/pbuilder/24870 and its subdirectories +I: Current time: Mon Jul 29 20:48:50 +14 2024 +I: pbuilder-time-stamp: 1722235730