#51 open
Wincent Colaiuta

0.7.0 (and master) spec failures

Reported by Wincent Colaiuta | March 1st, 2008 @ 02:00 PM | in Future

Ok, I mentioned in ticket #50 that some specs were failing for me on RHEL. Just to confirm that it's not a machine-local issue I tried to reproduce on Mac OS X 10.5.2 as well running ruby 1.8.6 (2007-09-24 patchlevel 111).

Ruby actually crashes once (sometimes twice) during the spec run, will attach a crash log although it's next-to-useless.

These were the specs which failed for 0.7.0 the first time I ran them (using "rake spec"):

..................................................................................................................................F........../spec/server/swiftiply_spec.rb:6:in `exec': No such file or directory - swiftiply -c ./spec/server/swiftiply.yml (Errno::ENOENT)
	from ./spec/server/swiftiply_spec.rb:6
	from ./spec/server/swiftiply_spec.rb:5:in `fork'
	from ./spec/server/swiftiply_spec.rb:5
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:47:in `instance_eval'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:47:in `eval_each_fail_fast'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:46:in `each'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:46:in `eval_each_fail_fast'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_group_methods.rb:255:in `run_before_each'
	 ... 14 levels...
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/runner/example_group_runner.rb:21:in `run'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/runner/options.rb:90:in `run_examples'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/runner/command_line.rb:19:in `run'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/bin/spec:4
F./spec/server/swiftiply_spec.rb:6:in `exec': No such file or directory - swiftiply -c ./spec/server/swiftiply.yml (Errno::ENOENT)
	from ./spec/server/swiftiply_spec.rb:6
	from ./spec/server/swiftiply_spec.rb:5:in `fork'
	from ./spec/server/swiftiply_spec.rb:5
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:47:in `instance_eval'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:47:in `eval_each_fail_fast'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:46:in `each'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:46:in `eval_each_fail_fast'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_group_methods.rb:255:in `run_before_each'
	 ... 14 levels...
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/runner/example_group_runner.rb:21:in `run'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/runner/options.rb:90:in `run_examples'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/runner/command_line.rb:19:in `run'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/bin/spec:4
F......F........

1)
NoMethodError in 'Thin::Server app builder should work with Rack url mapper'
You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.+
/Library/Ruby/Gems/1.8/gems/rack-0.3.0/lib/rack/urlmap.rb:37:in `call'
/Library/Ruby/Gems/1.8/gems/rack-0.3.0/lib/rack/urlmap.rb:32:in `each'
/Library/Ruby/Gems/1.8/gems/rack-0.3.0/lib/rack/urlmap.rb:32:in `call'
./spec/server/builder_spec.rb:36:

2)
Errno::ECONNREFUSED in 'Thin::Server on Swiftiply should GET from Net::HTTP'
Connection refused - connect(2)
./spec/server/swiftiply_spec.rb:16:

3)
Errno::ECONNREFUSED in 'Thin::Server on Swiftiply should POST from Net::HTTP'
Connection refused - connect(2)
./spec/server/swiftiply_spec.rb:20:

4)
'Thin::Server on TCP socket should handle GET in less then 0.0045 RubySecond' FAILED
took <0.00634547591069331 RubySeconds>, should take less than 0.0045 RubySeconds.
./spec/server/tcp_spec.rb:40:

Finished in 49.680854 seconds

Running a second time ("rake clean" followed by "rake spec"):

..................................................................................................................................F........../spec/server/swiftiply_spec.rb:6:in `exec': No such file or directory - swiftiply -c ./spec/server/swiftiply.yml (Errno::ENOENT)
	from ./spec/server/swiftiply_spec.rb:6
	from ./spec/server/swiftiply_spec.rb:5:in `fork'
	from ./spec/server/swiftiply_spec.rb:5
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:47:in `instance_eval'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:47:in `eval_each_fail_fast'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:46:in `each'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:46:in `eval_each_fail_fast'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_group_methods.rb:255:in `run_before_each'
	 ... 14 levels...
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/runner/example_group_runner.rb:21:in `run'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/runner/options.rb:90:in `run_examples'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/runner/command_line.rb:19:in `run'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/bin/spec:4
F./spec/server/swiftiply_spec.rb:6:in `exec': No such file or directory - swiftiply -c ./spec/server/swiftiply.yml (Errno::ENOENT)
	from ./spec/server/swiftiply_spec.rb:6
	from ./spec/server/swiftiply_spec.rb:5:in `fork'
	from ./spec/server/swiftiply_spec.rb:5
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:47:in `instance_eval'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:47:in `eval_each_fail_fast'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:46:in `each'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:46:in `eval_each_fail_fast'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_group_methods.rb:255:in `run_before_each'
	 ... 14 levels...
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/runner/example_group_runner.rb:21:in `run'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/runner/options.rb:90:in `run_examples'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/runner/command_line.rb:19:in `run'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/bin/spec:4
F...............

1)
NoMethodError in 'Thin::Server app builder should work with Rack url mapper'
You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.+
/Library/Ruby/Gems/1.8/gems/rack-0.3.0/lib/rack/urlmap.rb:37:in `call'
/Library/Ruby/Gems/1.8/gems/rack-0.3.0/lib/rack/urlmap.rb:32:in `each'
/Library/Ruby/Gems/1.8/gems/rack-0.3.0/lib/rack/urlmap.rb:32:in `call'
./spec/server/builder_spec.rb:36:

2)
Errno::ECONNREFUSED in 'Thin::Server on Swiftiply should GET from Net::HTTP'
Connection refused - connect(2)
./spec/server/swiftiply_spec.rb:16:

3)
Errno::ECONNREFUSED in 'Thin::Server on Swiftiply should POST from Net::HTTP'
Connection refused - connect(2)
./spec/server/swiftiply_spec.rb:20:

And these are the failures for the current HEAD of master, first time:

1)
'Thin::Request legacy Mongrel tests should raise error on large mangled field values' FAILED
expected Thin::InvalidRequest but nothing was raised
./spec/request/mongrel_spec.rb:11:

2)
'Thin::Server HTTP pipelining should pipeline request on same socket' FAILED
expected "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nContent-Length: 8\r\nConnection: keep-alive\r\nServer: thin 0.7.1 codename Fancy Pants\r\n\r\n/first-1" to include "/first-1" and "/second-2"
./spec/server/pipelining_spec.rb:24:

3)
Errno::ECONNREFUSED in 'Thin::Server on Swiftiply should GET from Net::HTTP'
Connection refused - connect(2)
./spec/server/swiftiply_spec.rb:16:

4)
Errno::ECONNREFUSED in 'Thin::Server on Swiftiply should POST from Net::HTTP'
Connection refused - connect(2)
./spec/server/swiftiply_spec.rb:20:

5)
Timeout::Error in 'Thin::Server on TCP socket should handle GET in less then 0.0045 RubySecond'
execution expired
./spec/server/../spec_helper.rb:144:in `start_server'
./spec/server/tcp_spec.rb:5:

6)
Timeout::Error in 'Thin::Server on TCP socket should handle POST in less then 0.007 RubySecond'
execution expired
./spec/server/../spec_helper.rb:144:in `start_server'
./spec/server/tcp_spec.rb:5:

7)
Timeout::Error in 'Thin::Server on TCP socket should retreive remote address'
execution expired
./spec/server/../spec_helper.rb:144:in `start_server'
./spec/server/tcp_spec.rb:5:

And second time:

...................................................................................................................................F......FF./spec/server/swiftiply_spec.rb:6:in `exec': No such file or directory - swiftiply -c ./spec/server/swiftiply.yml (Errno::ENOENT)
	from ./spec/server/swiftiply_spec.rb:6
	from ./spec/server/swiftiply_spec.rb:5:in `fork'
	from ./spec/server/swiftiply_spec.rb:5
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:47:in `instance_eval'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:47:in `eval_each_fail_fast'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:46:in `each'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:46:in `eval_each_fail_fast'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_group_methods.rb:255:in `run_before_each'
	 ... 14 levels...
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/runner/example_group_runner.rb:21:in `run'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/runner/options.rb:90:in `run_examples'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/runner/command_line.rb:19:in `run'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/bin/spec:4
../spec/server/swiftiply_spec.rb:6:in `exec': No such file or directory - swiftiply -c ./spec/server/swiftiply.yml (Errno::ENOENT)
	from ./spec/server/swiftiply_spec.rb:6
	from ./spec/server/swiftiply_spec.rb:5:in `fork'
	from ./spec/server/swiftiply_spec.rb:5
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:47:in `instance_eval'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:47:in `eval_each_fail_fast'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:46:in `each'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:46:in `eval_each_fail_fast'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_group_methods.rb:255:in `run_before_each'
	 ... 14 levels...
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/runner/example_group_runner.rb:21:in `run'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/runner/options.rb:90:in `run_examples'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/runner/command_line.rb:19:in `run'
	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/bin/spec:4
.FFFFF..F...F...

1)
'Thin::Server HTTP pipelining should pipeline request on same socket' FAILED
expected "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nContent-Length: 8\r\nConnection: keep-alive\r\nServer: thin 0.7.1 codename Fancy Pants\r\n\r\n/first-1" to include "/first-1" and "/second-2"
./spec/server/pipelining_spec.rb:24:

2)
Timeout::Error in 'Thin::Server stopping should not accept new requests when soft stopping'
execution expired
./spec/server/../spec_helper.rb:144:in `start_server'
./spec/server/stopping_spec.rb:5:

3)
Timeout::Error in 'Thin::Server stopping should drop current requests when hard stopping'
execution expired
./spec/server/../spec_helper.rb:144:in `start_server'
./spec/server/stopping_spec.rb:5:

4)
Timeout::Error in 'Thin::Server on TCP socket should GET from Net::HTTP'
execution expired
./spec/server/../spec_helper.rb:144:in `start_server'
./spec/server/tcp_spec.rb:5:

5)
Timeout::Error in 'Thin::Server on TCP socket should GET from TCPSocket'
execution expired
./spec/server/../spec_helper.rb:144:in `start_server'
./spec/server/tcp_spec.rb:5:

6)
Timeout::Error in 'Thin::Server on TCP socket should return empty string on incomplete headers'
execution expired
./spec/server/../spec_helper.rb:144:in `start_server'
./spec/server/tcp_spec.rb:5:

7)
Timeout::Error in 'Thin::Server on TCP socket should return empty string on incorrect Content-Length'
execution expired
./spec/server/../spec_helper.rb:144:in `start_server'
./spec/server/tcp_spec.rb:5:

8)
Timeout::Error in 'Thin::Server on TCP socket should POST from Net::HTTP'
execution expired
./spec/server/../spec_helper.rb:144:in `start_server'
./spec/server/tcp_spec.rb:5:

9)
'Thin::Server on TCP socket should handle POST in less then 0.007 RubySecond' FAILED
took <0.00768630276826997 RubySeconds>, should take less than 0.007 RubySeconds.
./spec/server/tcp_spec.rb:44:

10)
Errno::ENOENT in 'Thin::Server on UNIX domain socket should handle GET in less then 0.002 RubySecond'
No such file or directory - /tmp/thin_test.sock
./spec/server/../spec_helper.rb:156:in `initialize'
./spec/server/../spec_helper.rb:156:in `new'
./spec/server/../spec_helper.rb:156:in `send_data'
./spec/server/../spec_helper.rb:168:in `get'
./spec/server/unix_socket_spec.rb:19:
./spec/server/../spec_helper.rb:40:in `times'
./spec/server/../spec_helper.rb:40:in `matches?'
/Library/Ruby/Gems/1.8/gems/benchmark_unit-0.1/lib/benchmark/unit.rb:22:in `measure'
/Library/Ruby/Gems/1.8/gems/benchmark_unit-0.1/lib/benchmark/unit.rb:21:in `measure'
./spec/server/../spec_helper.rb:39:in `matches?'
./spec/server/unix_socket_spec.rb:19:

As you can see the number of failures is variable, but 0.7.0 fails less (3 or 4) than HEAD of master (7 or 10).

Perhaps there is some local dependency that isn't satisfied here, but it is on your machine.

Comments and changes to this ticket

  • Wincent Colaiuta

    Wincent Colaiuta March 1st, 2008 @ 02:27 PM

    The relevant gems I've got installed here:

    • benchmark_unit 0.1
    • daemons 1.0.9
    • eventmachine 0.10.0
    • rack 0.3.0
    • rspec 1.1.3
  • macournoyer

    macournoyer March 1st, 2008 @ 03:59 PM

    • Milestone set to 0.7.1
    • State changed from “new” to “open”

    Most seem to be due to Swiftiply not beeing installed. I'll make those conditional.

    Also the "Thin::Server app builder should work with Rack url mapper" failure should be fixed on master now.

  • macournoyer

    macournoyer March 1st, 2008 @ 04:55 PM

    I fixed a couple on master. I still get 4 failures on my Ubuntu VM.

  • macournoyer

    macournoyer March 2nd, 2008 @ 01:51 AM

    Only 1 spec still fails now on my new Ubuntu VM.

    Can you run the specs again and see if it's better for you now?

  • macournoyer

    macournoyer March 2nd, 2008 @ 01:38 PM

    I got all specs running on both Mac OS 10.5 and an Ubuntu VM.

    But there's a couple phantom process left after running the specs on Ubuntu, I'll try to fix that.

    Anyone else can confirm all specs are green before I close this?

  • Wincent Colaiuta

    Wincent Colaiuta March 2nd, 2008 @ 04:52 PM

    Ok, on my Mac OS X 10.5.2 install on the first spec run I got everything passing, but I got two Ruby crashes during the spec run; not sure why they don't result in spec failures.

    This is printed at the time of the first crash:

    /Users/wincent/trabajo/vendor/thin/thin.git/lib/thin/daemonizing.rb:39:in `daemonize': test.pid already exist, seems like it's already running. Stop the process or delete test.pid. (Thin::PidFileExist)
    	from ./spec/daemonizing_spec.rb:119
    	from ./spec/daemonizing_spec.rb:117:in `fork'
    	from ./spec/daemonizing_spec.rb:117
    	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:78:in `instance_eval'
    	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:78:in `run_with_description_capturing'
    	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:19:in `execute'
    	from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/timeout.rb:48:in `timeout'
    	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:16:in `execute'
    	 ... 6 levels...
    	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/runner/example_group_runner.rb:21:in `run'
    	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/runner/options.rb:90:in `run_examples'
    	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/runner/command_line.rb:19:in `run'
    	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/bin/spec:4
    

    There was no extra console output for the second one.

    Running the specs again there was only one crash instead of two, but there was one failure:

    1)
    'Daemonizing should send kill signal if timeout' FAILED
    expected false, got true
    ./spec/daemonizing_spec.rb:112:
    

    Will repeat these tests on RHEL 5.1 and add another comment.

  • Wincent Colaiuta

    Wincent Colaiuta March 2nd, 2008 @ 04:56 PM

    Ok, these are the remaining failures on RHEL 5.1 (with my Ruby 1.8.5 patch applied):

    1)
    NoMethodError in 'Thin::Logging should output debug when set to true'
    protected method `debug' called for #<TestLogging:0xb79ceae8>
    ./spec/logging_spec.rb:16:
    
    2)
    NoMethodError in 'Thin::Logging should output trace when set to true'
    protected method `trace' called for #<TestLogging:0xb79cd47c>
    ./spec/logging_spec.rb:22:
    
    3)
    NoMethodError in 'Thin::Logging should not output when silenced'
    protected method `log' called for #<TestLogging:0xb79cbe24>
    ./spec/logging_spec.rb:28:
    
    4)
    NoMethodError in 'Thin::Logging should not output when silenced [deprecated]'
    protected method `log' called for #<TestLogging:0xb79cabf0>
    ./spec/logging_spec.rb:36:
    

    After a "rake clean" and "rake spec" I get the same four failures, plus this fifth one:

    5)
    'Thin::Server HTTP pipelining should not allow more persistent connection then maximum' FAILED
    expected: 2,
         got: 1 (using ==)
    ./spec/server/pipelining_spec.rb:80:
    
  • Kevin Williams

    Kevin Williams March 2nd, 2008 @ 06:44 PM

    are there any phantom ruby processes? I used to have that problem all the time, but I haven't compiled lately.

  • Wincent Colaiuta

    Wincent Colaiuta March 2nd, 2008 @ 07:13 PM

    Yes, there are, on both Mac OS X 10.5.2 and RHEL 5.1.

  • macournoyer

    macournoyer March 2nd, 2008 @ 07:39 PM

    aaarg nooo

    what are the names of those processes? ruby, swifitply or "Thin test server" ?

  • Wincent Colaiuta

    Wincent Colaiuta March 2nd, 2008 @ 07:16 PM

    Speaking of which, any idea how to kill them? "kill", "kill -9", "sudo kill" and "sudo kill -9" a all ineffective against them. I'd prefer not to have to reboot the server to get rid of them.

  • Wincent Colaiuta

    Wincent Colaiuta March 2nd, 2008 @ 07:17 PM

    Output of "ps auxww|grep ruby":

    wincent  56326   0.0  0,0        0      0   ??  Z    Sat07PM   0:00.00 (ruby)
    wincent  56323   0.0  0,0        0      0   ??  Z    Sat07PM   0:00.00 (ruby)
    wincent  56320   0.0  0,0        0      0   ??  Z    Sat07PM   0:00.00 (ruby)
    wincent  56317   0.0  0,0        0      0   ??  Z    Sat07PM   0:00.00 (ruby)
    wincent  55696   0.0  0,0        0      0   ??  Z    Sat07PM   0:00.00 (ruby)
    wincent  55693   0.0  0,0        0      0   ??  Z    Sat07PM   0:00.00 (ruby)
    wincent  55690   0.0  0,0        0      0   ??  Z    Sat07PM   0:00.00 (ruby)
    wincent  55686   0.0  0,0        0      0   ??  Z    Sat07PM   0:00.00 (ruby)
    

    That's on Mac OS X 10.5.2, but the RHEL 5.1 output is basically the same.

  • Wincent Colaiuta

    Wincent Colaiuta March 2nd, 2008 @ 08:01 PM

    Ok, answering my own question, to kill the zombies you have to kill the parent. If you have "pstree":

     pstree -s ruby
    -+= 00001 root /sbin/launchd
     |-+- 55654 wincent thin                                                                                                           
     | |--- 55686 wincent (ruby)
     | |--- 55690 wincent (ruby)
     | |--- 55693 wincent (ruby)
     | \--- 55696 wincent (ruby)
     \-+- 56284 wincent thin                                                                                                           
       |--- 56317 wincent (ruby)
       |--- 56320 wincent (ruby)
       |--- 56323 wincent (ruby)
       \--- 56326 wincent (ruby)
    $ kill 55654
    $ kill 56284
    $ pstree -s ruby
    

    Note that those thin processes, 55654 and 56284, weren't explicitly started by me; they were vestiges left behind by the spec run.

    This is reproducible for me (I always get crashes, zombie processes, and/or failed specs on every spec run), although alarmingly erratic (the number of crashes, zombies and failed specs varies).

    For example, I just did some more test runs on Mac OS X 10.5.2:

    Run 1: 4 crashed Ruby processes, 1 failed spec, 6 zombies; the zombies went away after a few seconds though.

    Run 2: 3 crashed Ruby processes, 0 failed specs, 0 zombies.

    Run 3: 3 crashed Ruby processes, 1 failed spec, 0 zombies.

    Run 4: 2 crashed Ruby processes, 0 failed specs, 0 zombies, 1 "test.pid already exist" emitted during spec run.

  • Wincent Colaiuta

    Wincent Colaiuta March 2nd, 2008 @ 08:19 PM

    I'm seeing some different failures now on the HEAD of the current master (4c30c78) on Mac OS X 10.5.2.

    Failures from one run:

    1)
    'Thin::Server on TCP socket should POST from Net::HTTP' FAILED
    expected "/-2" to include "arg=pirate"
    ./spec/server/tcp_spec.rb:31:
    
    2)
    'Thin::Server on TCP socket should handle big POST' FAILED
    expected "/-3" to include "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    ./spec/server/tcp_spec.rb:36:
    
    3)
    'Thin::Server on TCP socket should retreive remote address' FAILED
    expected "/-4" to include "\"REMOTE_ADDR\"=>\"127.0.0.1\""
    ./spec/server/tcp_spec.rb:40:
    
    Finished in 22.739092 seconds
    
    149 examples, 3 failures
    

    Another run:

    1)
    'Thin::Server HTTP pipelining should pipeline request on same socket' FAILED
    expected "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nContent-Length: 645\r\nConnection: keep-alive\r\nServer: thin 0.7.1 codename Fancy Pants\r\n\r\n{\"rack.url_scheme\"=>\"http\", \"PATH_INFO\"=>\"/first\", \"rack.run_once\"=>false, \"rack.input\"=>#<StringIO:0x1a5bae4>, \"SCRIPT_NAME\"=>\"\", \"SERVER_PROTOCOL\"=>\"HTTP/1.1\", \"rack.errors\"=>#<IO:/Users/wincent/trabajo/vendor/thin/thin.git/log/daemonizing_test.log>, \"REMOTE_ADDR\"=>\"127.0.0.1\", \"REQUEST_PATH\"=>\"/first\", \"SERVER_SOFTWARE\"=>\"thin 0.7.1 codename Fancy Pants\", \"HTTP_VERSION\"=>\"HTTP/1.1\", \"rack.multithread\"=>false, \"rack.version\"=>[0, 3], \"REQUEST_URI\"=>\"/first\", \"rack.multiprocess\"=>false, \"QUERY_STRING\"=>\"\", \"GATEWAY_INTERFACE\"=>\"CGI/1.2\", \"HTTP_CONNECTION\"=>\"keep-alive\", \"REQUEST_METHOD\"=>\"GET\"}GET /second HTTP/1.1\r\nConnection: close\r\n\r\n" to include "/first-1" and "/second-2"
    ./spec/server/pipelining_spec.rb:24:
    
    Finished in 30.694682 seconds
    
    149 examples, 1 failure
    

    Another:

    1)
    Errno::EPIPE in 'Thin::Server on TCP socket should POST from Net::HTTP'
    Broken pipe
    ./spec/server/../spec_helper.rb:197:in `post'
    ./spec/server/tcp_spec.rb:31:
    
    2)
    Errno::ECONNREFUSED in 'Thin::Server on TCP socket should handle big POST'
    Connection refused - connect(2)
    ./spec/server/../spec_helper.rb:197:in `post'
    ./spec/server/tcp_spec.rb:36:
    
    Finished in 21.831561 seconds
    
    149 examples, 2 failures
    

    And another, where the spec run died midway through:

    Thin::Server stopping
    - should wait for current requests before soft stopping
    terminate called after throwing an instance of 'std::runtime_error'
      what():  not initialized
    rake aborted!
    Command ruby -I"/Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib" "/Library/Ruby/Gems/1.8/gems/rspec-1.1.3/bin/spec" "spec/backends/swiftiply_client_spec.rb" "spec/backends/tcp_server_spec.rb" "spec/backends/unix_server_spec.rb" "spec/command_spec.rb" "spec/connection_spec.rb" "spec/controllers/cluster_spec.rb" "spec/controllers/controller_spec.rb" "spec/controllers/service_spec.rb" "spec/daemonizing_spec.rb" "spec/headers_spec.rb" "spec/logging_spec.rb" "spec/rack_rails_spec.rb" "spec/request/mongrel_spec.rb" "spec/request/parser_spec.rb" "spec/request/persistent_spec.rb" "spec/request/processing_spec.rb" "spec/response_spec.rb" "spec/runner_spec.rb" "spec/server/builder_spec.rb" "spec/server/pipelining_spec.rb" "spec/server/stopping_spec.rb" "spec/server/swiftiply_spec.rb" "spec/server/tcp_spec.rb" "spec/server/unix_socket_spec.rb" "spec/server_spec.rb" -fs -c failed
    
    (See full trace by running task with --trace)
    

    So as you can see, it's a bit all over the place right now...

  • macournoyer

    macournoyer March 2nd, 2008 @ 08:28 PM

    that's crazy, I get no failures and no zombies on my Mac OS 10.5. But I do get those "std::runtime_error" sometimes which are due to EventMachine crashing, I've asked them if they could raise Ruby exception instead...

    Maybe it's your version of EventMachine, are you on trunk or using the gem version: 0.10 ?

  • macournoyer

    macournoyer March 2nd, 2008 @ 08:16 PM

    The thin w/ those crashed is that it's impossible to rescue those errors. I submitted a ticket to EM: http://rubyeventmachine.com/tick...

  • Kevin Williams

    Kevin Williams March 2nd, 2008 @ 08:50 PM

    I just sync'd and re-ran 'rake spec'. I get one error on the "Thin::Server on TCP socket should GET from Net::HTTP" spec saying "Connection reset by peer". I'm using EventMachine trunk. I have one ghost process named "Thin test server". This is my Mac 10.5.2.

    I really haven't tried building and testing Thin on Linux, so I can't comment there. It runs fine, though.

    I set up a Windows 2000 virtual to have as clean an env. as possible for building and testing the win32 gem. The current error is:

    ./spec/backends/../spec_helper.rb:17:in ``': No such file or directory - which swiftiply (Errno::ENOENT)

    I can fix that later. Suffice it to say that running specs on windows is worse. :)

  • Kevin Williams

    Kevin Williams March 2nd, 2008 @ 08:28 PM

    The EM trunk has the "std::runtime_error" errors fixed, or so they say. That's why I'm running EM trunk.

  • Wincent Colaiuta

    Wincent Colaiuta March 2nd, 2008 @ 09:05 PM

    I'm running the EventMachine 0.10 from the Gem. Aside from the issue of whether they should throw uncatchable errors or rescuable exceptions, I'm more concerned with what those internal errors might be in the first place, and why they are getting triggered in the specs. Do you know what's provoking the internal errors?

  • macournoyer

    macournoyer March 2nd, 2008 @ 08:49 PM

    I'm guessing it's because we start/stop EM multiple times in the specs. When I run each spec files individually I never get those.

  • Wincent Colaiuta

    Wincent Colaiuta March 3rd, 2008 @ 05:26 AM

    I get 3 Ruby crashes and 1 spec failure when I run all the specs individually using:

    find spec -name '*_spec.rb' -exec spec {} \;
    

    The failed spec is this one:

    1)
    'Daemonizing should send kill signal if timeout' FAILED
    expected false, got true
    ./spec/daemonizing_spec.rb:112:
    

    I don't have any zombies, but I do have a lingering "Thin test server" process that's still hanging around.

    On repeating the test run in the same way I get 2 Ruby crashes, no failed specs, plus this emitted:

    Daemonizing
    - should have a pid file
    - should create a pid file
    - should redirect stdio to a log file
    - should change privilege
    /Users/wincent/trabajo/vendor/thin/thin.git/lib/thin/daemonizing.rb:39:in `daemonize': test.pid already exist, seems like it's already running. Stop the process or delete test.pid. (Thin::PidFileExist)
    	from ./spec/daemonizing_spec.rb:80
    	from ./spec/daemonizing_spec.rb:79:in `fork'
    	from ./spec/daemonizing_spec.rb:79
    	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:78:in `instance_eval'
    	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:78:in `run_with_description_capturing'
    	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:19:in `execute'
    	from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/timeout.rb:48:in `timeout'
    	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/example/example_methods.rb:16:in `execute'
    	 ... 8 levels...
    	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/lib/spec/runner/command_line.rb:19:in `run'
    	from /Library/Ruby/Gems/1.8/gems/rspec-1.1.3/bin/spec:4
    	from /usr/bin/spec:19:in `load'
    	from /usr/bin/spec:19
    
  • macournoyer

    macournoyer March 3rd, 2008 @ 10:50 AM

    The last Daemonizing failyre is due to the previous crash I presume, cause the pid file is still there.

    When you say Ruby crash, you mean the: std::runtime_error ?

  • macournoyer

    macournoyer March 6th, 2008 @ 02:11 PM

    • Milestone changed from 0.7.1 to 0.8.0

    I got specs consistently passing on both Mac OS and Ubuntu. I'll try to setup other VMs and check on those

  • Wincent Colaiuta

    Wincent Colaiuta March 7th, 2008 @ 02:49 PM

    Sorry, I've been offline all week due to problems with my ISP.

    By "Ruby crash" I mean that while the spec suite is running Mac OS X throws up a crash report dialog during the spec run (that's where I got the spec_crash.txt attachment that I attached earlier on). The crash is occurring in a child process, not the actual RSpec process itself, because the specs continue running after the crashes.

    Unfortunately, because the crash shows up in a dialog there's no real way to know exactly which spec is running at the time of the crash. It may be the std::runtime_error, but I don't know.

    I'm going to pull down the latest changes and also upgrade EventMachine to stop those failures from confusing the issue. Speaking of EventMachine, I notice they're pretty quiet on their Trac; they haven't responded to that ticket you opened yet.

  • macournoyer

    macournoyer April 7th, 2008 @ 01:48 PM

    • Milestone changed from 0.8.0 to 1.0
  • macournoyer

    macournoyer October 21st, 2008 @ 11:29 PM

    • Milestone changed from 1.0 to Future
    • Tag set to specs

    :/

Please Sign in or create a free account to add a new ticket.

With your very own profile, you can contribute to projects, track your activity, watch tickets, receive and update tickets through your email and much more.

New-ticket Create new ticket

Create your profile

Help contribute to this project by taking a few moments to create your personal profile. Create your profile ยป

Attachments

Tags

Referenced by

Pages