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