Lighthouse has a new layout. Prefer the old one? Return to the old layout, and switch back any time from the link at the top of each page.

0.7.0 (and master) spec failures

#51

Ok, I mentioned in ticket #50 REQUEST: Separate performance specs from other specs 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.

Reported by Wincent Colaiuta · March 1st, 2008 @ 02:00 PM

State: open
Milestone: 0.8.0
Assigned to: macournoyer macournoyer

Activity

  1. Wincent Colaiuta
    Wincent Colaiuta

    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

    March 1st, 2008 @ 02:27 PM

  2. macournoyer
    macournoyer
    • 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.

    March 1st, 2008 @ 03:59 PM

  3. macournoyer
    macournoyer

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

    March 1st, 2008 @ 04:55 PM

  4. macournoyer
    macournoyer

    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?

    March 2nd, 2008 @ 01:51 AM

  5. macournoyer
    macournoyer

    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?

    March 2nd, 2008 @ 01:38 PM

  6. Wincent Colaiuta
    Wincent Colaiuta

    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.

    March 2nd, 2008 @ 04:52 PM

  7. Wincent Colaiuta
    Wincent Colaiuta

    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:
    

    March 2nd, 2008 @ 04:56 PM

  8. Kevin Williams
    Kevin Williams

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

    March 2nd, 2008 @ 06:44 PM

  9. Wincent Colaiuta
    Wincent Colaiuta

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

    March 2nd, 2008 @ 07:13 PM

  10. macournoyer
    macournoyer

    aaarg nooo

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

    March 2nd, 2008 @ 07:39 PM

  11. Wincent Colaiuta
    Wincent Colaiuta

    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.

    March 2nd, 2008 @ 07:16 PM

  12. Wincent Colaiuta
    Wincent Colaiuta

    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.

    March 2nd, 2008 @ 07:17 PM

  13. Wincent Colaiuta
    Wincent Colaiuta

    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.

    March 2nd, 2008 @ 08:01 PM

  14. Wincent Colaiuta
    Wincent Colaiuta

    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...

    March 2nd, 2008 @ 08:19 PM

  15. macournoyer
    macournoyer

    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 ?

    March 2nd, 2008 @ 08:28 PM

  16. macournoyer
    macournoyer

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

    March 2nd, 2008 @ 08:16 PM

  17. Kevin Williams
    Kevin Williams

    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. :)

    March 2nd, 2008 @ 08:50 PM

  18. Kevin Williams
    Kevin Williams

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

    March 2nd, 2008 @ 08:28 PM

  19. Wincent Colaiuta
    Wincent Colaiuta

    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?

    March 2nd, 2008 @ 09:05 PM

  20. macournoyer
    macournoyer

    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.

    March 2nd, 2008 @ 08:49 PM

  21. Wincent Colaiuta
    Wincent Colaiuta

    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
    

    March 3rd, 2008 @ 05:26 AM

  22. macournoyer
    macournoyer

    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 ?

    March 3rd, 2008 @ 10:50 AM

  23. macournoyer
    macournoyer
    • 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

    March 6th, 2008 @ 02:11 PM

  24. Wincent Colaiuta
    Wincent Colaiuta

    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.

    March 7th, 2008 @ 02:49 PM

  25. macournoyer
    macournoyer
    • Milestone changed from 0.8.0 to 1.0

    April 7th, 2008 @ 01:48 PM

  26. macournoyer
    macournoyer
    • Milestone changed from 1.0 to Future
    • Tag set to specs

    :/

    October 21st, 2008 @ 11:29 PM

  27. John
    John

    As far as i know, not every online casino is great. If you take a look at mrbet casino casino you'll make sure that it is something that can help you stop doing the job you hate.There you can find the biggest number of various games from table games to slot https://mrbetcanada.com/ games.

    February 28th, 2024 @ 01:30 PM

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.