Skip to content

HTTP::StateError: body has already been consumed #340

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
petecheslock opened this issue Jul 24, 2023 · 0 comments
Open

HTTP::StateError: body has already been consumed #340

petecheslock opened this issue Jul 24, 2023 · 0 comments

Comments

@petecheslock
Copy link

petecheslock commented Jul 24, 2023

When running the latest AppMap gem on the Mastodon project, a handful of rspec tests will fail when APPMAP=true and will pass when APPMAP=false.

My Appmap yaml

---
name: mastodon
language: ruby
appmap_dir: tmp/appmap
packages:
- path: app
- path: lib
exclude:
- Request::ClientLimit#body_with_limit
- Request::ClientLimit#truncated_body
- ActivityPub::FetchRepliesWorker#perform
Stack Trace of Error
 1) ActivityPub::FetchRepliesWorker perform performs a request if the collection URI is from the same host
     Failure/Error: while (chunk = readpartial)
     
     HTTP::StateError:
       body has already been consumed
     # ./.bundle/ruby/3.0.0/gems/http-5.1.1/lib/http/response/body.rb:67:in `stream!'
     # ./.bundle/ruby/3.0.0/gems/http-5.1.1/lib/http/response/body.rb:29:in `readpartial'
     # ./app/lib/request.rb:170:in `truncated_body'
     # ./app/lib/request.rb:183:in `body_with_limit'
     # ./app/helpers/jsonld_helper.rb:179:in `block in fetch_resource_without_id_validation'
     # ./app/lib/request.rb:73:in `perform'
     # ./.bundle/ruby/3.0.0/gems/appmap-0.100.0/lib/appmap/hook/method/ruby3.rb:40:in `bind_call'
     # ./.bundle/ruby/3.0.0/gems/appmap-0.100.0/lib/appmap/hook/method/ruby3.rb:40:in `do_call'
     # ./.bundle/ruby/3.0.0/gems/appmap-0.100.0/lib/appmap/hook/method/ruby3.rb:49:in `trace_call'
     # ./.bundle/ruby/3.0.0/gems/appmap-0.100.0/lib/appmap/hook/method/ruby3.rb:16:in `call'
     # ./.bundle/ruby/3.0.0/gems/appmap-0.100.0/lib/appmap/hook/method/ruby3.rb:63:in `block in hook_method_def'
     # ./app/helpers/jsonld_helper.rb:176:in `fetch_resource_without_id_validation'
     # ./.bundle/ruby/3.0.0/gems/appmap-0.100.0/lib/appmap/hook/method/ruby3.rb:40:in `bind_call'
     # ./.bundle/ruby/3.0.0/gems/appmap-0.100.0/lib/appmap/hook/method/ruby3.rb:40:in `do_call'
     # ./.bundle/ruby/3.0.0/gems/appmap-0.100.0/lib/appmap/hook/method/ruby3.rb:49:in `trace_call'
     # ./.bundle/ruby/3.0.0/gems/appmap-0.100.0/lib/appmap/hook/method/ruby3.rb:16:in `call'
     # ./.bundle/ruby/3.0.0/gems/appmap-0.100.0/lib/appmap/hook/method/ruby3.rb:63:in `block in hook_method_def'
     # ./app/services/activitypub/fetch_replies_service.rb:39:in `fetch_collection'
     # ./app/services/activitypub/fetch_replies_service.rb:21:in `collection_items'
     # ./app/services/activitypub/fetch_replies_service.rb:10:in `call'
     # ./app/workers/activitypub/fetch_replies_worker.rb:10:in `perform'
     # ./spec/workers/activitypub/fetch_replies_worker_spec.rb:25:in `block (3 levels) in <top (required)>'
     # ./.bundle/ruby/3.0.0/gems/appmap-0.100.0/lib/appmap/rspec.rb:251:in `instance_exec'
     # ./.bundle/ruby/3.0.0/gems/appmap-0.100.0/lib/appmap/rspec.rb:251:in `block in wrap_example_block'
     # ./.bundle/ruby/3.0.0/gems/webmock-3.18.1/lib/webmock/rspec.rb:37:in `block (2 levels) in <top (required)>'

To recreate:
Clone the forked version of Mastodon
Start docker and run

$ docker-compose up -d db redis 

Source the rspec env vars

$ source .env-rspec      

Setup the DB

bundle exec rails db:setup

Run one of the tests that will fail:

RAILS_ENV=test DISABLE_SPRING=true bundle exec rspec ./spec/workers/activitypub/fetch_replies_worker_spec.rb
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant