Correctly track hijacked requests

This commit is contained in:
Sam
2017-11-28 16:47:20 +11:00
parent b3b55e18d1
commit df84e1c358
5 changed files with 106 additions and 19 deletions

View File

@@ -6,15 +6,16 @@ describe Hijack do
include Hijack
def initialize
def initialize(env = {})
@io = StringIO.new
self.request = ActionController::TestRequest.new({
env.merge!(
"rack.hijack" => lambda { @io },
"rack.input" => StringIO.new
},
nil,
nil
)
self.request = ActionController::TestRequest.new(env, nil, nil)
# we need this for the 418
self.response = ActionDispatch::Response.new
end
@@ -29,6 +30,43 @@ describe Hijack do
Hijack::Tester.new
end
context "Request Tracker integration" do
let :logger do
lambda do |env, data|
@calls += 1
@status = data[:status]
@total = data[:timing][:total_duration]
end
end
before do
Middleware::RequestTracker.register_detailed_request_logger logger
@calls = 0
end
after do
Middleware::RequestTracker.unregister_detailed_request_logger logger
end
it "can properly track execution" do
app = lambda do |env|
tester = Hijack::Tester.new(env)
tester.hijack_test do
render body: "hello", status: 201
end
end
env = {}
middleware = Middleware::RequestTracker.new(app)
middleware.call(env)
expect(@calls).to eq(1)
expect(@status).to eq(201)
expect(@status).to be > 0
end
end
it "dupes the request params and env" do
orig_req = tester.request
copy_req = nil

View File

@@ -0,0 +1,25 @@
require 'rails_helper'
require_dependency 'method_profiler'
describe MethodProfiler do
class Sneetch
def beach
end
end
it "can transfer data between threads" do
MethodProfiler.patch(Sneetch, [:beach], :at_beach)
MethodProfiler.start
Sneetch.new.beach
data = MethodProfiler.transfer
result = nil
Thread.new do
MethodProfiler.start(data)
Sneetch.new.beach
result = MethodProfiler.stop
end.join
expect(result[:at_beach][:calls]).to eq(2)
end
end