curb 0.9.4 → 0.9.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/README.markdown +39 -19
- data/Rakefile +26 -10
- data/ext/curb.c +33 -6
- data/ext/curb.h +11 -4
- data/ext/curb_easy.c +375 -57
- data/ext/curb_easy.h +4 -0
- data/ext/curb_errors.c +86 -0
- data/ext/curb_multi.c +126 -165
- data/ext/curb_multi.h +0 -1
- data/ext/extconf.rb +31 -6
- data/lib/curb.rb +1 -0
- data/lib/curl.rb +7 -2
- data/lib/curl/easy.rb +10 -4
- data/lib/curl/multi.rb +50 -11
- data/tests/bug_issue277.rb +32 -0
- data/tests/helper.rb +89 -7
- data/tests/tc_curl.rb +31 -1
- data/tests/tc_curl_easy.rb +120 -16
- data/tests/tc_curl_easy_resolve.rb +16 -0
- data/tests/tc_curl_maxfilesize.rb +12 -0
- data/tests/tc_curl_multi.rb +68 -5
- metadata +27 -21
    
        data/tests/tc_curl.rb
    CHANGED
    
    | @@ -31,7 +31,37 @@ class TestCurl < Test::Unit::TestCase | |
| 31 31 | 
             
                assert_equal "OPTIONSfoo=bar", curl.body_str
         | 
| 32 32 | 
             
              end
         | 
| 33 33 |  | 
| 34 | 
            -
               | 
| 34 | 
            +
              def test_urlalize_without_extra_params
         | 
| 35 | 
            +
                url_no_params = 'http://localhost/test'
         | 
| 36 | 
            +
                url_with_params = 'http://localhost/test?a=1'
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                assert_equal(url_no_params, Curl.urlalize(url_no_params))
         | 
| 39 | 
            +
                assert_equal(url_with_params, Curl.urlalize(url_with_params))
         | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
              def test_urlalize_with_nil_as_params
         | 
| 43 | 
            +
                url = 'http://localhost/test'
         | 
| 44 | 
            +
                assert_equal(url, Curl.urlalize(url, nil))
         | 
| 45 | 
            +
              end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
              def test_urlalize_with_extra_params
         | 
| 48 | 
            +
                url_no_params = 'http://localhost/test'
         | 
| 49 | 
            +
                url_with_params = 'http://localhost/test?a=1'
         | 
| 50 | 
            +
                extra_params = { :b => 2 }
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                expected_url_no_params = 'http://localhost/test?b=2'
         | 
| 53 | 
            +
                expected_url_with_params = 'http://localhost/test?a=1&b=2'
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                assert_equal(expected_url_no_params, Curl.urlalize(url_no_params, extra_params))
         | 
| 56 | 
            +
                assert_equal(expected_url_with_params, Curl.urlalize(url_with_params, extra_params))
         | 
| 57 | 
            +
              end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
              def test_urlalize_does_not_strip_trailing_?
         | 
| 60 | 
            +
                url_empty_params = 'http://localhost/test?'
         | 
| 61 | 
            +
                assert_equal(url_empty_params, Curl.urlalize(url_empty_params))
         | 
| 62 | 
            +
              end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
              include TestServerMethods
         | 
| 35 65 |  | 
| 36 66 | 
             
              def setup
         | 
| 37 67 | 
             
                server_setup
         | 
    
        data/tests/tc_curl_easy.rb
    CHANGED
    
    | @@ -10,6 +10,76 @@ class TestCurbCurlEasy < Test::Unit::TestCase | |
| 10 10 | 
             
                Curl.reset
         | 
| 11 11 | 
             
              end
         | 
| 12 12 |  | 
| 13 | 
            +
              def test_curlopt_stderr_with_file
         | 
| 14 | 
            +
                # does not work with Tempfile directly
         | 
| 15 | 
            +
                path = Tempfile.new('curb_test_curlopt_stderr').path
         | 
| 16 | 
            +
                File.open(path, 'w') do |file|
         | 
| 17 | 
            +
                  easy = Curl::Easy.new(TestServlet.url)
         | 
| 18 | 
            +
                  easy.verbose = true
         | 
| 19 | 
            +
                  easy.setopt(Curl::CURLOPT_STDERR, file)
         | 
| 20 | 
            +
                  easy.perform
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
                output = File.read(path)
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                assert_match('HTTP/1.1 200 OK ', output)
         | 
| 25 | 
            +
                assert_match('Host: 127.0.0.1:9129', output)
         | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
              def test_curlopt_stderr_with_io
         | 
| 29 | 
            +
                path = Tempfile.new('curb_test_curlopt_stderr').path
         | 
| 30 | 
            +
                fd = IO.sysopen(path, 'w')
         | 
| 31 | 
            +
                io = IO.for_fd(fd)
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                easy = Curl::Easy.new(TestServlet.url)
         | 
| 34 | 
            +
                easy.verbose = true
         | 
| 35 | 
            +
                easy.setopt(Curl::CURLOPT_STDERR, io)
         | 
| 36 | 
            +
                easy.perform
         | 
| 37 | 
            +
             | 
| 38 | 
            +
             | 
| 39 | 
            +
                output = File.read(path)
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                assert_match(output, 'HTTP/1.1 200 OK')
         | 
| 42 | 
            +
                assert_match(output, 'Host: 127.0.0.1:9129')
         | 
| 43 | 
            +
              end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
              def test_curlopt_stderr_fails_with_tempdir
         | 
| 46 | 
            +
                Tempfile.open('curb_test_curlopt_stderr') do |tempfile|
         | 
| 47 | 
            +
                  easy = Curl::Easy.new(TestServlet.url)
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                  assert_raise(TypeError) do
         | 
| 50 | 
            +
                    easy.setopt(Curl::CURLOPT_STDERR, tempfile)
         | 
| 51 | 
            +
                  end
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
              end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
              def test_curlopt_stderr_fails_with_stringio
         | 
| 56 | 
            +
                stringio = StringIO.new
         | 
| 57 | 
            +
                easy = Curl::Easy.new(TestServlet.url)
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                assert_raise(TypeError) do
         | 
| 60 | 
            +
                  easy.setopt(Curl::CURLOPT_STDERR, stringio)
         | 
| 61 | 
            +
                end
         | 
| 62 | 
            +
              end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
              def test_curlopt_stderr_fails_with_string
         | 
| 65 | 
            +
                string = String.new
         | 
| 66 | 
            +
                easy = Curl::Easy.new(TestServlet.url)
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                assert_raise(TypeError) do
         | 
| 69 | 
            +
                  easy.setopt(Curl::CURLOPT_STDERR, string)
         | 
| 70 | 
            +
                end
         | 
| 71 | 
            +
              end
         | 
| 72 | 
            +
             | 
| 73 | 
            +
              def test_exception
         | 
| 74 | 
            +
                begin
         | 
| 75 | 
            +
                  Curl.get('NOT_FOUND_URL')
         | 
| 76 | 
            +
                rescue
         | 
| 77 | 
            +
                  assert true
         | 
| 78 | 
            +
                rescue Exception
         | 
| 79 | 
            +
                  assert false, "We should raise StandardError"
         | 
| 80 | 
            +
                end
         | 
| 81 | 
            +
              end
         | 
| 82 | 
            +
             | 
| 13 83 | 
             
              def test_threads
         | 
| 14 84 | 
             
                t = []
         | 
| 15 85 | 
             
                5.times do
         | 
| @@ -18,8 +88,6 @@ class TestCurbCurlEasy < Test::Unit::TestCase | |
| 18 88 | 
             
                      c = Curl.get($TEST_URL)
         | 
| 19 89 | 
             
                      assert_match(/^# DO NOT REMOVE THIS COMMENT/, c.body_str)
         | 
| 20 90 | 
             
                      assert_match(/^# DO NOT REMOVE THIS COMMENT/, c.body)
         | 
| 21 | 
            -
                      assert_equal "", c.header_str
         | 
| 22 | 
            -
                      assert_equal "", c.head
         | 
| 23 91 | 
             
                    end
         | 
| 24 92 | 
             
                  end
         | 
| 25 93 | 
             
                end
         | 
| @@ -31,7 +99,6 @@ class TestCurbCurlEasy < Test::Unit::TestCase | |
| 31 99 | 
             
                assert_instance_of Curl::Easy, c = Curl::Easy.perform($TEST_URL)
         | 
| 32 100 | 
             
                assert_match(/^# DO NOT REMOVE THIS COMMENT/, c.body_str)
         | 
| 33 101 | 
             
                assert_match(/^# DO NOT REMOVE THIS COMMENT/, c.body)
         | 
| 34 | 
            -
                assert_equal "", c.header_str
         | 
| 35 102 | 
             
              end    
         | 
| 36 103 |  | 
| 37 104 | 
             
              def test_class_perform_02
         | 
| @@ -39,7 +106,6 @@ class TestCurbCurlEasy < Test::Unit::TestCase | |
| 39 106 | 
             
                assert_instance_of Curl::Easy, c = Curl::Easy.perform($TEST_URL) { |curl| curl.on_body { |d| data << d; d.length } }    
         | 
| 40 107 |  | 
| 41 108 | 
             
                assert_nil c.body_str
         | 
| 42 | 
            -
                assert_equal "", c.header_str
         | 
| 43 109 | 
             
                assert_match(/^# DO NOT REMOVE THIS COMMENT/, data)
         | 
| 44 110 | 
             
              end    
         | 
| 45 111 |  | 
| @@ -134,7 +200,6 @@ class TestCurbCurlEasy < Test::Unit::TestCase | |
| 134 200 | 
             
                c = Curl::Easy.new($TEST_URL)    
         | 
| 135 201 | 
             
                assert_equal true, c.http_get
         | 
| 136 202 | 
             
                assert_match(/^# DO NOT REMOVE THIS COMMENT/, c.body_str)
         | 
| 137 | 
            -
                assert_equal "", c.header_str
         | 
| 138 203 | 
             
              end    
         | 
| 139 204 |  | 
| 140 205 | 
             
              def test_get_02
         | 
| @@ -146,7 +211,6 @@ class TestCurbCurlEasy < Test::Unit::TestCase | |
| 146 211 | 
             
                assert_equal true, c.http_get    
         | 
| 147 212 |  | 
| 148 213 | 
             
                assert_nil c.body_str
         | 
| 149 | 
            -
                assert_equal "", c.header_str
         | 
| 150 214 | 
             
                assert_match(/^# DO NOT REMOVE THIS COMMENT/, data)
         | 
| 151 215 | 
             
              end    
         | 
| 152 216 |  | 
| @@ -329,29 +393,69 @@ class TestCurbCurlEasy < Test::Unit::TestCase | |
| 329 393 | 
             
                c.max_redirects = nil
         | 
| 330 394 | 
             
                assert_nil c.max_redirects
         | 
| 331 395 | 
             
              end
         | 
| 332 | 
            -
             | 
| 396 | 
            +
             | 
| 397 | 
            +
              def test_timeout_with_floats
         | 
| 398 | 
            +
                c = Curl::Easy.new($TEST_URL)
         | 
| 399 | 
            +
             | 
| 400 | 
            +
                c.timeout = 1.5
         | 
| 401 | 
            +
                assert_equal 1500, c.timeout_ms
         | 
| 402 | 
            +
                assert_equal 1.5, c.timeout
         | 
| 403 | 
            +
              end
         | 
| 404 | 
            +
             | 
| 405 | 
            +
              def test_timeout_with_negative
         | 
| 406 | 
            +
                c = Curl::Easy.new($TEST_URL)
         | 
| 407 | 
            +
             | 
| 408 | 
            +
                c.timeout = -1.5
         | 
| 409 | 
            +
                assert_equal 0, c.timeout
         | 
| 410 | 
            +
                assert_equal 0, c.timeout_ms
         | 
| 411 | 
            +
             | 
| 412 | 
            +
                c.timeout = -4.8
         | 
| 413 | 
            +
                assert_equal 0, c.timeout
         | 
| 414 | 
            +
                assert_equal 0, c.timeout_ms
         | 
| 415 | 
            +
              end
         | 
| 416 | 
            +
             | 
| 333 417 | 
             
              def test_timeout_01
         | 
| 334 418 | 
             
                c = Curl::Easy.new($TEST_URL)
         | 
| 335 | 
            -
             | 
| 336 | 
            -
                 | 
| 337 | 
            -
             | 
| 419 | 
            +
             | 
| 420 | 
            +
                assert_equal 0, c.timeout
         | 
| 421 | 
            +
             | 
| 338 422 | 
             
                c.timeout = 3
         | 
| 339 423 | 
             
                assert_equal 3, c.timeout
         | 
| 340 | 
            -
             | 
| 341 | 
            -
                c.timeout =  | 
| 342 | 
            -
                 | 
| 424 | 
            +
             | 
| 425 | 
            +
                c.timeout = 0
         | 
| 426 | 
            +
                assert_equal 0, c.timeout
         | 
| 343 427 | 
             
              end
         | 
| 344 428 |  | 
| 345 429 | 
             
              def test_timeout_ms_01
         | 
| 346 430 | 
             
                c = Curl::Easy.new($TEST_URL)
         | 
| 347 431 |  | 
| 348 | 
            -
                 | 
| 432 | 
            +
                assert_equal 0, c.timeout_ms
         | 
| 349 433 |  | 
| 350 434 | 
             
                c.timeout_ms = 100
         | 
| 351 435 | 
             
                assert_equal 100, c.timeout_ms
         | 
| 352 436 |  | 
| 353 437 | 
             
                c.timeout_ms = nil
         | 
| 354 | 
            -
                 | 
| 438 | 
            +
                assert_equal 0, c.timeout_ms
         | 
| 439 | 
            +
              end
         | 
| 440 | 
            +
             | 
| 441 | 
            +
              def test_timeout_ms_with_floats
         | 
| 442 | 
            +
                c = Curl::Easy.new($TEST_URL)
         | 
| 443 | 
            +
             | 
| 444 | 
            +
                c.timeout_ms = 55.5
         | 
| 445 | 
            +
                assert_equal 55, c.timeout_ms
         | 
| 446 | 
            +
                assert_equal 0.055, c.timeout
         | 
| 447 | 
            +
              end
         | 
| 448 | 
            +
             | 
| 449 | 
            +
              def test_timeout_ms_with_negative
         | 
| 450 | 
            +
                c = Curl::Easy.new($TEST_URL)
         | 
| 451 | 
            +
             | 
| 452 | 
            +
                c.timeout_ms = -1.5
         | 
| 453 | 
            +
                assert_equal 0, c.timeout
         | 
| 454 | 
            +
                assert_equal 0, c.timeout_ms
         | 
| 455 | 
            +
             | 
| 456 | 
            +
                c.timeout_ms = -4.8
         | 
| 457 | 
            +
                assert_equal 0, c.timeout
         | 
| 458 | 
            +
                assert_equal 0, c.timeout_ms
         | 
| 355 459 | 
             
              end
         | 
| 356 460 |  | 
| 357 461 | 
             
              def test_connect_timeout_01
         | 
| @@ -598,7 +702,7 @@ class TestCurbCurlEasy < Test::Unit::TestCase | |
| 598 702 | 
             
              def test_cookielist
         | 
| 599 703 | 
             
                c = Curl::Easy.new TestServlet.url
         | 
| 600 704 | 
             
                c.enable_cookies = true
         | 
| 601 | 
            -
                c.post_body = URI.encode_www_form | 
| 705 | 
            +
                c.post_body = URI.encode_www_form('c' => 'somename=somevalue')
         | 
| 602 706 | 
             
                assert_nil c.cookielist
         | 
| 603 707 | 
             
                c.perform
         | 
| 604 708 | 
             
                assert_match(/somevalue/, c.cookielist.join(''))
         | 
| @@ -0,0 +1,16 @@ | |
| 1 | 
            +
            require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class TestCurbCurlEasyResolve < Test::Unit::TestCase
         | 
| 4 | 
            +
              def setup
         | 
| 5 | 
            +
                @easy = Curl::Easy.new
         | 
| 6 | 
            +
              end
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              def test_resolve
         | 
| 9 | 
            +
                @easy.resolve = [ "example.com:80:127.0.0.1" ]
         | 
| 10 | 
            +
                assert_equal @easy.resolve, [ "example.com:80:127.0.0.1" ]
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              def test_empty_resolve
         | 
| 14 | 
            +
                assert_equal @easy.resolve, nil
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
            end
         | 
| @@ -0,0 +1,12 @@ | |
| 1 | 
            +
            require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class TestCurbCurlMaxFileSize < Test::Unit::TestCase
         | 
| 4 | 
            +
              def setup
         | 
| 5 | 
            +
                @easy = Curl::Easy.new
         | 
| 6 | 
            +
              end
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              def test_maxfilesize
         | 
| 9 | 
            +
                @easy.set(Curl::CURLOPT_MAXFILESIZE, 5000000)
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            end
         | 
    
        data/tests/tc_curl_multi.rb
    CHANGED
    
    | @@ -6,6 +6,70 @@ class TestCurbCurlMulti < Test::Unit::TestCase | |
| 6 6 | 
             
                ObjectSpace.garbage_collect
         | 
| 7 7 | 
             
              end
         | 
| 8 8 |  | 
| 9 | 
            +
              # for https://github.com/taf2/curb/issues/277
         | 
| 10 | 
            +
              # must connect to an external
         | 
| 11 | 
            +
              def test_connection_keepalive
         | 
| 12 | 
            +
                # 0123456 default & reserved RubyVM. It will probably include 7 from Dir.glob
         | 
| 13 | 
            +
                lsof=`/usr/bin/which lsof`.strip
         | 
| 14 | 
            +
                open_fds = lambda do 
         | 
| 15 | 
            +
                  `#{lsof} -p #{Process.pid} | egrep "TCP|UDP" | wc -l`.strip.to_i
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
                before_open = open_fds.call
         | 
| 18 | 
            +
                assert !Curl::Multi.autoclose
         | 
| 19 | 
            +
                multi = Curl::Multi.new
         | 
| 20 | 
            +
                multi.max_connects = 1 # limit to 1 connection within the multi handle
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                did_complete = false
         | 
| 23 | 
            +
                5.times do |n|
         | 
| 24 | 
            +
                  # NOTE: we use google here because connecting to our TEST_URL as a local host address appears to not register correctly with lsof as a socket... if anyone knows a better way would be great to not have an external dependency here in the test
         | 
| 25 | 
            +
                  easy = Curl::Easy.new("http://google.com/") do |curl|
         | 
| 26 | 
            +
                    curl.timeout = 5 # ensure we don't hang for ever connecting to an external host
         | 
| 27 | 
            +
                    curl.on_complete {
         | 
| 28 | 
            +
                      did_complete = true
         | 
| 29 | 
            +
                    }
         | 
| 30 | 
            +
                  end
         | 
| 31 | 
            +
                  multi.add(easy)
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                multi.perform
         | 
| 35 | 
            +
                assert did_complete
         | 
| 36 | 
            +
                after_open = open_fds.call
         | 
| 37 | 
            +
                assert_equal (after_open - before_open), 1, "with max connections set to 1 at this point the connection to google should still be open"
         | 
| 38 | 
            +
                multi.close
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                after_open = open_fds.call
         | 
| 41 | 
            +
                assert_equal (after_open - before_open), 0, "after closing the multi handle all connections should be closed"
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                Curl::Multi.autoclose = true
         | 
| 44 | 
            +
                multi = Curl::Multi.new
         | 
| 45 | 
            +
                did_complete = false
         | 
| 46 | 
            +
                5.times do |n|
         | 
| 47 | 
            +
                  # NOTE: we use google here because connecting to our TEST_URL as a local host address appears to not register correctly with lsof as a socket... if anyone knows a better way would be great to not have an external dependency here in the test
         | 
| 48 | 
            +
                  easy = Curl::Easy.new("http://google.com/") do |curl|
         | 
| 49 | 
            +
                    curl.timeout = 5 # ensure we don't hang for ever connecting to an external host
         | 
| 50 | 
            +
                    curl.on_complete {
         | 
| 51 | 
            +
                      did_complete = true
         | 
| 52 | 
            +
                    }
         | 
| 53 | 
            +
                  end
         | 
| 54 | 
            +
                  multi.add(easy)
         | 
| 55 | 
            +
                end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                multi.perform
         | 
| 58 | 
            +
                assert did_complete
         | 
| 59 | 
            +
                after_open = open_fds.call
         | 
| 60 | 
            +
                assert_equal (after_open - before_open), 0, "auto close the connections"
         | 
| 61 | 
            +
              ensure
         | 
| 62 | 
            +
                Curl::Multi.autoclose = false # restore default
         | 
| 63 | 
            +
              end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
              def test_connection_autoclose
         | 
| 66 | 
            +
                assert !Curl::Multi.autoclose
         | 
| 67 | 
            +
                Curl::Multi.autoclose = true
         | 
| 68 | 
            +
                assert Curl::Multi.autoclose
         | 
| 69 | 
            +
              ensure
         | 
| 70 | 
            +
                Curl::Multi.autoclose = false # restore default
         | 
| 71 | 
            +
              end
         | 
| 72 | 
            +
             | 
| 9 73 | 
             
              def test_new_multi_01
         | 
| 10 74 | 
             
                d1 = ""
         | 
| 11 75 | 
             
                c1 = Curl::Easy.new($TEST_URL) do |curl|
         | 
| @@ -125,7 +189,7 @@ class TestCurbCurlMulti < Test::Unit::TestCase | |
| 125 189 | 
             
              def test_requests
         | 
| 126 190 | 
             
                m = Curl::Multi.new
         | 
| 127 191 |  | 
| 128 | 
            -
                assert_equal( | 
| 192 | 
            +
                assert_equal(0, m.requests.length, 'A new Curl::Multi handle should have no requests')
         | 
| 129 193 |  | 
| 130 194 | 
             
                10.times do
         | 
| 131 195 | 
             
                  m.add(Curl::Easy.new($TEST_URL))
         | 
| @@ -135,7 +199,7 @@ class TestCurbCurlMulti < Test::Unit::TestCase | |
| 135 199 |  | 
| 136 200 | 
             
                m.perform
         | 
| 137 201 |  | 
| 138 | 
            -
                assert_equal( | 
| 202 | 
            +
                assert_equal(0, m.requests.length, 'A new Curl::Multi handle should have no requests after a perform')
         | 
| 139 203 | 
             
              end
         | 
| 140 204 |  | 
| 141 205 | 
             
              def test_cancel
         | 
| @@ -148,7 +212,7 @@ class TestCurbCurlMulti < Test::Unit::TestCase | |
| 148 212 |  | 
| 149 213 | 
             
                m.cancel!
         | 
| 150 214 |  | 
| 151 | 
            -
                assert_equal( | 
| 215 | 
            +
                assert_equal(0, m.requests.size, 'A new Curl::Multi handle should have no requests after being canceled')
         | 
| 152 216 | 
             
              end
         | 
| 153 217 |  | 
| 154 218 | 
             
              def test_with_success
         | 
| @@ -192,7 +256,7 @@ class TestCurbCurlMulti < Test::Unit::TestCase | |
| 192 256 | 
             
                c1.on_success do|c|
         | 
| 193 257 | 
             
                  success_called1 = true
         | 
| 194 258 | 
             
                  #puts "success 1 called: #{c.body_str.inspect}"
         | 
| 195 | 
            -
                   | 
| 259 | 
            +
                  assert_match(/^# DO NOT REMOVE THIS COMMENT/, c.body_str)
         | 
| 196 260 | 
             
                end
         | 
| 197 261 |  | 
| 198 262 | 
             
                c1.on_failure do|c,rc|
         | 
| @@ -484,5 +548,4 @@ class TestCurbCurlMulti < Test::Unit::TestCase | |
| 484 548 | 
             
              def setup
         | 
| 485 549 | 
             
                server_setup
         | 
| 486 550 | 
             
              end
         | 
| 487 | 
            -
             | 
| 488 551 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: curb
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.9. | 
| 4 | 
            +
              version: 0.9.10
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Ross Bamford
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date:  | 
| 12 | 
            +
            date: 2019-04-18 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies: []
         | 
| 14 14 | 
             
            description: Curb (probably CUrl-RuBy or something) provides Ruby-language bindings
         | 
| 15 15 | 
             
              for the libcurl(3), a fully-featured client-side URL transfer library. cURL and
         | 
| @@ -51,6 +51,7 @@ files: | |
| 51 51 | 
             
            - tests/bug_curb_easy_post_with_string_no_content_length_header.rb
         | 
| 52 52 | 
             
            - tests/bug_instance_post_differs_from_class_post.rb
         | 
| 53 53 | 
             
            - tests/bug_issue102.rb
         | 
| 54 | 
            +
            - tests/bug_issue277.rb
         | 
| 54 55 | 
             
            - tests/bug_multi_segfault.rb
         | 
| 55 56 | 
             
            - tests/bug_postfields_crash.rb
         | 
| 56 57 | 
             
            - tests/bug_postfields_crash2.rb
         | 
| @@ -63,13 +64,15 @@ files: | |
| 63 64 | 
             
            - tests/tc_curl.rb
         | 
| 64 65 | 
             
            - tests/tc_curl_download.rb
         | 
| 65 66 | 
             
            - tests/tc_curl_easy.rb
         | 
| 67 | 
            +
            - tests/tc_curl_easy_resolve.rb
         | 
| 66 68 | 
             
            - tests/tc_curl_easy_setopt.rb
         | 
| 69 | 
            +
            - tests/tc_curl_maxfilesize.rb
         | 
| 67 70 | 
             
            - tests/tc_curl_multi.rb
         | 
| 68 71 | 
             
            - tests/tc_curl_postfield.rb
         | 
| 69 72 | 
             
            - tests/timeout.rb
         | 
| 70 73 | 
             
            - tests/timeout_server.rb
         | 
| 71 74 | 
             
            - tests/unittests.rb
         | 
| 72 | 
            -
            homepage:  | 
| 75 | 
            +
            homepage: https://github.com/taf2/curb
         | 
| 73 76 | 
             
            licenses:
         | 
| 74 77 | 
             
            - MIT
         | 
| 75 78 | 
             
            metadata: {}
         | 
| @@ -92,33 +95,36 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 92 95 | 
             
                  version: '0'
         | 
| 93 96 | 
             
            requirements: []
         | 
| 94 97 | 
             
            rubyforge_project: curb
         | 
| 95 | 
            -
            rubygems_version: 2. | 
| 98 | 
            +
            rubygems_version: 2.7.9
         | 
| 96 99 | 
             
            signing_key: 
         | 
| 97 100 | 
             
            specification_version: 4
         | 
| 98 101 | 
             
            summary: Ruby libcurl bindings
         | 
| 99 102 | 
             
            test_files:
         | 
| 103 | 
            +
            - tests/tc_curl_multi.rb
         | 
| 100 104 | 
             
            - tests/alltests.rb
         | 
| 101 | 
            -
            - tests/ | 
| 102 | 
            -
            - tests/ | 
| 103 | 
            -
            - tests/bug_curb_easy_blocks_ruby_threads.rb
         | 
| 104 | 
            -
            - tests/bug_curb_easy_post_with_string_no_content_length_header.rb
         | 
| 105 | 
            -
            - tests/bug_instance_post_differs_from_class_post.rb
         | 
| 106 | 
            -
            - tests/bug_issue102.rb
         | 
| 107 | 
            -
            - tests/bug_multi_segfault.rb
         | 
| 105 | 
            +
            - tests/tc_curl_easy_setopt.rb
         | 
| 106 | 
            +
            - tests/tc_curl.rb
         | 
| 108 107 | 
             
            - tests/bug_postfields_crash.rb
         | 
| 108 | 
            +
            - tests/bug_crash_on_progress.rb
         | 
| 109 | 
            +
            - tests/helper.rb
         | 
| 110 | 
            +
            - tests/bug_issue277.rb
         | 
| 109 111 | 
             
            - tests/bug_postfields_crash2.rb
         | 
| 110 112 | 
             
            - tests/bug_require_last_or_segfault.rb
         | 
| 111 | 
            -
            - tests/ | 
| 112 | 
            -
            - tests/ | 
| 113 | 
            -
            - tests/ | 
| 113 | 
            +
            - tests/timeout.rb
         | 
| 114 | 
            +
            - tests/bug_crash_on_debug.rb
         | 
| 115 | 
            +
            - tests/unittests.rb
         | 
| 116 | 
            +
            - tests/bug_issue102.rb
         | 
| 117 | 
            +
            - tests/bug_curb_easy_blocks_ruby_threads.rb
         | 
| 118 | 
            +
            - tests/bug_multi_segfault.rb
         | 
| 119 | 
            +
            - tests/bug_instance_post_differs_from_class_post.rb
         | 
| 114 120 | 
             
            - tests/require_last_or_segfault_script.rb
         | 
| 115 | 
            -
            - tests/ | 
| 116 | 
            -
            - tests/tc_curl.rb
         | 
| 121 | 
            +
            - tests/timeout_server.rb
         | 
| 117 122 | 
             
            - tests/tc_curl_download.rb
         | 
| 118 123 | 
             
            - tests/tc_curl_easy.rb
         | 
| 119 | 
            -
            - tests/ | 
| 120 | 
            -
            - tests/tc_curl_multi.rb
         | 
| 124 | 
            +
            - tests/mem_check.rb
         | 
| 121 125 | 
             
            - tests/tc_curl_postfield.rb
         | 
| 122 | 
            -
            - tests/ | 
| 123 | 
            -
            - tests/ | 
| 124 | 
            -
            - tests/ | 
| 126 | 
            +
            - tests/tc_curl_maxfilesize.rb
         | 
| 127 | 
            +
            - tests/bugtests.rb
         | 
| 128 | 
            +
            - tests/tc_curl_easy_resolve.rb
         | 
| 129 | 
            +
            - tests/signals.rb
         | 
| 130 | 
            +
            - tests/bug_curb_easy_post_with_string_no_content_length_header.rb
         |