curb 0.9.4 → 0.9.10
Sign up to get free protection for your applications and to get access to all the features.
- 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
|