mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
PERF: hijack onebox requests so they do not use up a unicorn worker
This commit is contained in:
70
spec/components/hijack_spec.rb
Normal file
70
spec/components/hijack_spec.rb
Normal file
@@ -0,0 +1,70 @@
|
||||
require 'rails_helper'
|
||||
|
||||
describe Hijack do
|
||||
class Hijack::Tester
|
||||
attr_reader :io
|
||||
|
||||
include Hijack
|
||||
def initialize
|
||||
@io = StringIO.new
|
||||
end
|
||||
|
||||
def hijack_test(&blk)
|
||||
hijack do
|
||||
self.instance_eval(&blk)
|
||||
end
|
||||
end
|
||||
|
||||
def request
|
||||
@req ||= ActionController::TestRequest.new(
|
||||
{ "rack.hijack" => lambda { @io } },
|
||||
nil,
|
||||
nil
|
||||
)
|
||||
end
|
||||
|
||||
def render(*opts)
|
||||
# don't care
|
||||
end
|
||||
end
|
||||
|
||||
let :tester do
|
||||
Hijack::Tester.new
|
||||
end
|
||||
|
||||
it "renders non 200 status if asked for" do
|
||||
tester.hijack_test do
|
||||
render body: "hello world", status: 402
|
||||
end
|
||||
|
||||
expect(tester.io.string).to include("402")
|
||||
expect(tester.io.string).to include("world")
|
||||
end
|
||||
|
||||
it "renders stuff correctly if it works" do
|
||||
tester.hijack_test do
|
||||
render plain: "hello world"
|
||||
end
|
||||
|
||||
result = "HTTP/1.1 200 OK\r\nContent-Length: 11\r\nContent-Type: text/plain\r\nConnection: close\r\n\r\nhello world"
|
||||
expect(tester.io.string).to eq(result)
|
||||
end
|
||||
|
||||
it "returns 500 by default" do
|
||||
tester.hijack_test
|
||||
|
||||
expected = "HTTP/1.1 500 OK\r\nContent-Length: 0\r\nContent-Type: text/plain\r\nConnection: close\r\n\r\n"
|
||||
expect(tester.io.string).to eq(expected)
|
||||
end
|
||||
|
||||
it "does not run the block if io is closed" do
|
||||
tester.io.close
|
||||
|
||||
ran = false
|
||||
tester.hijack_test do
|
||||
ran = true
|
||||
end
|
||||
|
||||
expect(ran).to eq(false)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user