spec/proxy_spec.rb in em-proxy-0.1.7 vs spec/proxy_spec.rb in em-proxy-0.1.8
- old
+ new
@@ -1,8 +1,9 @@
require 'helper'
describe Proxy do
+ include POSIX::Spawn
def failed
EventMachine.stop
fail
end
@@ -66,11 +67,11 @@
EventMachine.add_timer(0.1) do
EventMachine::HttpRequest.new('http://127.0.0.1:8080/test').get({:timeout => 1})
end
Proxy.start(:host => "0.0.0.0", :port => 8080) do |conn|
- conn.server :bing, :host => "google.com", :port => 80
+ conn.server :goog, :host => "google.com", :port => 80
conn.server :yhoo, :host => "yahoo.com", :port => 80
conn.on_data { |data| data }
seen = []
conn.on_response do |backend, resp|
@@ -84,10 +85,16 @@
end
seen.uniq!
EventMachine.stop if seen.size == 2
end
+
+ conn.on_finish do |name|
+ # keep the connection open if we're still expecting a response
+ seen.count == 2 ? :close : :keep
+ end
+
end
end
end
it "should intercept & alter response from Google" do
@@ -162,6 +169,71 @@
end
end
}.should_not raise_error
end
+
+ context "echo server" do
+ before :each do
+ @echo_server = File.expand_path("../../spec/support/echo_server.rb", __FILE__)
+ end
+
+ context "with a server listening on a TCP port" do
+ before :each do
+ @host = '127.0.0.1'
+ @port = 4242
+ @pid = spawn("ruby #{@echo_server} #{@host} #{@port}")
+ sleep 1 # let the server come up
+ end
+ after :each do
+ Process.kill('QUIT', @pid)
+ end
+ it "should connect to a unix socket" do
+ connected = false
+ EM.run do
+ EventMachine.add_timer(0.1) do
+ EventMachine::HttpRequest.new('http://127.0.0.1:8080/').get({:timeout => 1})
+ end
+ host = @host
+ port = @port
+ Proxy.start(:host => "0.0.0.0", :port => 8080) do |conn|
+ conn.server :local, :host => host, :port => port
+ conn.on_connect do |name|
+ connected = true
+ EventMachine.stop
+ end
+ end
+ end
+ connected.should == true
+ end
+ end
+
+ context "with a server listening on a unix socket" do
+ before :each do
+ @socket = File.join(Dir.tmpdir, 'em-proxy.sock')
+ @pid = spawn("ruby #{@echo_server} #{@socket}")
+ sleep 1 # let the server come up
+ end
+ after :each do
+ Process.kill('QUIT', @pid)
+ end
+ it "should connect to a unix socket" do
+ connected = false
+ EM.run do
+ EventMachine.add_timer(0.1) do
+ EventMachine::HttpRequest.new('http://127.0.0.1:8080/').get({:timeout => 1})
+ end
+ socket = @socket
+ Proxy.start(:host => "0.0.0.0", :port => 8080) do |conn|
+ conn.server :local, :socket => socket
+ conn.on_connect do |name|
+ connected = true
+ EventMachine.stop
+ end
+ end
+ end
+ connected.should == true
+ end
+ end
+ end
+
end