test/test_evdispatch.rb in evdispatch-0.1.3 vs test/test_evdispatch.rb in evdispatch-0.1.4
- old
+ new
@@ -1,11 +1,93 @@
require File.dirname(__FILE__) + '/test_helper.rb'
class TestEvdispatch < Test::Unit::TestCase
- def setup
+ def test_object_test
+ # start up the test server
+ pid = fork do
+ require File.dirname(__FILE__) + '/../ext/revdispatch/server'
+ start_test_server
+ end
+ sleep 1 unless ARGV[0] == 'r'
+
+ d = Evdispatch::Loop.new
+
+ # start the event loop thread
+ d.start
+
+ begin
+
+ ObjectSpace.garbage_collect
+
+ 10.times do
+ begin
+ start_count = ObjectSpace.each_object { }
+ duration = run_trial(d, 10)
+ new_count = ObjectSpace.each_object { }
+ puts "10 trials: #{duration} seconds, new objects #{new_count - start_count}, #{new_count} - #{start_count}"
+ end
+
+ begin
+ start_count = ObjectSpace.each_object { }
+ duration = run_trial(d, 100)
+ new_count = ObjectSpace.each_object { }
+ puts "100 trials: #{duration} seconds, new objects #{new_count - start_count}, #{new_count} - #{start_count}"
+ end
+
+ end
+
+ rescue => e
+ puts e.message, e.backtrace
+ end
+
+ count = ObjectSpace.each_object { }
+ puts "Final Total objects: #{count}"
+ count = nil
+ ObjectSpace.garbage_collect
+ count = ObjectSpace.each_object { }
+ puts "After garbage collection objects: #{count}"
+
+ # sometime later you can stop the event loop
+ d.stop
+ ensure
+ Process.kill('HUP', pid) unless ARGV[0] == 'r'
end
-
- def test_truth
- assert true
+
+ def request_bytes_from( d, base, amount, range )
+ ids = []
+ amount.times do|i|
+ am = rand( range )
+ ids << d.request_http( base + "bytes/#{am}/" )
+ end
+ ids
+ end
+
+ def request_delay_from( d, base, amount, delay )
+ ids = []
+ amount.times do|i|
+ am = rand( delay )
+ ids << d.request_http( base + "delay/#{delay}/" )
+ end
+ ids
+ end
+
+ def run_trial( d, trials )
+
+ ebbbase = "http://127.0.0.1:4044/"
+ timer = Time.now
+ ids = request_bytes_from( d, ebbbase, trials, 1000 )
+ ids += request_delay_from( d, ebbbase, trials, 1 )
+
+ # wait for each response
+ puts "expecting #{ids.size} responses..."
+ ids.each do|id|
+ response = d.response( id )
+ #puts response[:name]
+ end
+
+ duration = Time.now - timer
+
+
+ duration
end
end