Skip to content

Instantly share code, notes, and snippets.

@psi
Last active October 26, 2015 22:48
Show Gist options
  • Save psi/31e45d81ab26b446f129 to your computer and use it in GitHub Desktop.
Save psi/31e45d81ab26b446f129 to your computer and use it in GitHub Desktop.
before(:all) do
@mock_servers = []
@mock_servers << MockHttpServer.new(9000, 'backend-service-1')
@mock_servers << MockHttpServer.new(9001, 'backend-service-2')
end
it 'sends requests for /backend1 backend-service-1 backend' do
backend1_uri = 'http://localhost/backend1'
expect(get(backend1_uri)).to reach_backend('backend-service-1')
end
after(:all) do
@mock_servers.each { |server| server.stop }
end
require 'rack'
class MockHttpServer
def initialize(port, response_body)
@response_body = response_body
@thread = Thread.new do
Rack::Handler::WEBrick.run(self, Host: '0.0.0.0', Port: port)
end
end
def stop
Thread.kill(@thread)
end
def call(env)
[ 200, { 'Content-Type' => 'text/plain' }, [@response_body] ]
end
end
require 'serverspec'
require 'mock_http_server'
set :backend, :exec
RSpec::Matchers.define :reach_backend do |expected|
match do |actual|
actual.body == expected
end
end
RSpec::Matchers.define :contain_header do |expected|
match do |actual|
expected_header = expected.to_a.flatten
expected_header_name = expected_header[0]
expected_header_value = expected_header[1]
actual_headers = actual.to_hash
actual_headers[expected_header_name][0] == expected_header_value
end
end
def get(uri, headers = {})
uri = URI(uri)
Net::HTTP.start(uri.host, uri.port) do |http|
req = Net::HTTP::Get.new(uri, headers)
http.request(req)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment