curb 0.8.4 → 1.3.5

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.
Files changed (55) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +522 -0
  3. data/Rakefile +79 -26
  4. data/ext/banned.h +32 -0
  5. data/ext/curb.c +549 -230
  6. data/ext/curb.h +19 -10
  7. data/ext/curb_easy.c +1935 -366
  8. data/ext/curb_easy.h +16 -0
  9. data/ext/curb_errors.c +115 -18
  10. data/ext/curb_errors.h +8 -5
  11. data/ext/curb_macros.h +33 -21
  12. data/ext/curb_multi.c +1858 -272
  13. data/ext/curb_multi.h +10 -3
  14. data/ext/curb_postfield.c +149 -77
  15. data/ext/curb_postfield.h +1 -0
  16. data/ext/curb_upload.c +38 -11
  17. data/ext/curb_upload.h +2 -0
  18. data/ext/extconf.rb +353 -35
  19. data/lib/curb.rb +1 -0
  20. data/lib/curl/easy.rb +314 -78
  21. data/lib/curl/multi.rb +134 -28
  22. data/lib/curl.rb +217 -11
  23. data/tests/bug_crash_on_debug.rb +14 -28
  24. data/tests/bug_crash_on_progress.rb +32 -16
  25. data/tests/bug_curb_easy_blocks_ruby_threads.rb +10 -15
  26. data/tests/bug_curb_easy_post_with_string_no_content_length_header.rb +6 -30
  27. data/tests/bug_follow_redirect_288.rb +83 -0
  28. data/tests/bug_instance_post_differs_from_class_post.rb +3 -5
  29. data/tests/bug_issue102.rb +1 -1
  30. data/tests/bug_issue_noproxy.rb +56 -0
  31. data/tests/bug_issue_post_redirect.rb +93 -0
  32. data/tests/bug_issue_spnego.rb +41 -0
  33. data/tests/bug_multi_segfault.rb +1 -0
  34. data/tests/bug_raise_on_callback.rb +30 -0
  35. data/tests/helper.rb +400 -44
  36. data/tests/leak_trace.rb +237 -0
  37. data/tests/mem_check.rb +3 -0
  38. data/tests/tc_curl.rb +31 -1
  39. data/tests/tc_curl_download.rb +12 -7
  40. data/tests/tc_curl_easy.rb +911 -63
  41. data/tests/tc_curl_easy_cookielist.rb +277 -0
  42. data/tests/tc_curl_easy_request_target.rb +41 -0
  43. data/tests/tc_curl_easy_resolve.rb +48 -0
  44. data/tests/tc_curl_maxfilesize.rb +12 -0
  45. data/tests/tc_curl_multi.rb +855 -53
  46. data/tests/tc_curl_native_coverage.rb +145 -0
  47. data/tests/tc_curl_postfield.rb +207 -30
  48. data/tests/tc_curl_protocols.rb +37 -0
  49. data/tests/tc_fiber_scheduler.rb +543 -0
  50. data/tests/tc_ftp_options.rb +39 -0
  51. data/tests/tc_gc_compact.rb +223 -0
  52. data/tests/tc_test_server_methods.rb +110 -0
  53. data/tests/timeout.rb +30 -6
  54. metadata +59 -36
  55. data/README +0 -194
@@ -0,0 +1,223 @@
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path('helper', __dir__)
4
+
5
+ class TestGcCompact < Test::Unit::TestCase
6
+ ITERATIONS = (ENV['CURB_GC_COMPACT_ITERATIONS'] || 50).to_i
7
+ EASY_PER_MULTI = 3
8
+ GC_CRASH_REGRESSION_ITERATIONS = (ENV['CURB_GC_CRASH_REGRESSION_ITERATIONS'] || [ITERATIONS, 10].min).to_i
9
+
10
+ def setup
11
+ omit('GC.compact unavailable on this Ruby') unless defined?(GC.compact)
12
+ end
13
+
14
+ def test_multi_perform_with_gc_compact
15
+ ITERATIONS.times do
16
+ run_multi_perform_compact_iteration
17
+ collect_after_iteration
18
+ end
19
+ end
20
+
21
+ def test_gc_compact_during_multi_cleanup
22
+ omit('GC cleanup isolation requires fork') if NO_FORK || WINDOWS
23
+
24
+ pid = fork do
25
+ begin
26
+ ITERATIONS.times do
27
+ run_multi_cleanup_compact_iteration
28
+ collect_after_iteration
29
+ end
30
+ exit! 0
31
+ rescue StandardError => e
32
+ warn("#{e.class}: #{e.message}")
33
+ warn(e.backtrace.join("\n")) if e.backtrace
34
+ exit! 1
35
+ end
36
+ end
37
+
38
+ _child_pid, status = Process.wait2(pid)
39
+ assert_predicate status, :success?
40
+ end
41
+
42
+ def test_gc_compact_after_detach
43
+ run_multi_detach_compact_iteration
44
+ collect_after_iteration
45
+ end
46
+
47
+ def test_gc_compact_after_failed_implicit_multi_cleanup
48
+ GC_CRASH_REGRESSION_ITERATIONS.times do
49
+ run_failed_implicit_multi_cleanup_iteration(compact: true, cleanup_with_objectspace: false)
50
+ collect_after_iteration
51
+ end
52
+ end
53
+
54
+ def test_gc_cleanup_after_failed_implicit_multi_callback
55
+ omit('GC cleanup isolation requires fork') if NO_FORK || WINDOWS
56
+
57
+ assert_child_process_success do
58
+ GC_CRASH_REGRESSION_ITERATIONS.times do
59
+ run_failed_implicit_multi_cleanup_iteration(compact: true, cleanup_with_objectspace: true)
60
+ end
61
+ end
62
+ end
63
+
64
+ def test_gc_cleanup_after_invalid_multi_assignment_rejection
65
+ omit('GC cleanup isolation requires fork') if NO_FORK || WINDOWS
66
+
67
+ assert_child_process_success do
68
+ GC_CRASH_REGRESSION_ITERATIONS.times do
69
+ easy = Curl::Easy.new($TEST_URL)
70
+
71
+ begin
72
+ easy.multi = Object.new
73
+ raise 'expected TypeError from Curl::Easy#multi='
74
+ rescue TypeError => error
75
+ raise "unexpected error message: #{error.message}" unless /Curl::Multi/.match?(error.message)
76
+ end
77
+
78
+ easy = nil
79
+ full_gc(compact: true)
80
+ end
81
+ end
82
+ end
83
+
84
+ def test_gc_compact_easy
85
+ iteration = 0
86
+ responses = []
87
+ while iteration < ITERATIONS
88
+ res = Curl.get($TEST_URL) do |easy|
89
+ easy.timeout = 5
90
+ easy.on_complete { |_e| }
91
+ easy.on_failure { |_e, _code| }
92
+ end
93
+ iteration += 1
94
+ responses << res.body
95
+ compact
96
+ end
97
+ end
98
+
99
+ private
100
+
101
+ def run_multi_perform_compact_iteration
102
+ multi = Curl::Multi.new
103
+ handles = add_easy_handles(multi)
104
+
105
+ compact
106
+ multi.perform { compact }
107
+ compact
108
+ ensure
109
+ handles&.each do |easy|
110
+ begin
111
+ easy.close
112
+ rescue StandardError
113
+ nil
114
+ end
115
+ end
116
+ multi&.close
117
+ end
118
+
119
+ def run_multi_cleanup_compact_iteration
120
+ multi = Curl::Multi.new
121
+ add_easy_handles(multi)
122
+
123
+ compact
124
+ multi = nil
125
+ compact
126
+ end
127
+
128
+ def run_multi_detach_compact_iteration
129
+ multi = Curl::Multi.new
130
+ handles = add_easy_handles(multi)
131
+
132
+ compact
133
+ multi.perform { compact }
134
+
135
+ handles.each { |easy| multi.remove(easy); compact }
136
+ compact
137
+ ensure
138
+ multi&.close
139
+ end
140
+
141
+ def run_failed_implicit_multi_cleanup_iteration(compact:, cleanup_with_objectspace:)
142
+ easy = Curl::Easy.new($TEST_URL)
143
+ easy.on_complete { raise 'complete blew up' }
144
+
145
+ begin
146
+ easy.perform
147
+ raise 'expected callback abort'
148
+ rescue Curl::Err::AbortedByCallbackError => error
149
+ raise "unexpected callback message: #{error.message}" unless error.message == 'complete blew up'
150
+ end
151
+
152
+ raise 'expected implicit cleanup to clear easy.multi' unless easy.multi.nil?
153
+ ensure
154
+ easy = nil
155
+ if cleanup_with_objectspace
156
+ run_teardown_multi_cleanup
157
+ flush_deferred_multi_closes_all
158
+ else
159
+ flush_deferred_multi_closes_all
160
+ end
161
+ full_gc(compact: compact)
162
+ end
163
+
164
+ def add_easy_handles(multi)
165
+ Array.new(EASY_PER_MULTI) do
166
+ Curl::Easy.new($TEST_URL) do |easy|
167
+ easy.timeout = 5
168
+ easy.on_complete { |_e| }
169
+ easy.on_failure { |_e, _code| }
170
+ end.tap { |easy| multi.add(easy) }
171
+ end
172
+ end
173
+
174
+ def compact
175
+ GC.compact
176
+ end
177
+
178
+ def full_gc(compact: false)
179
+ GC.start(full_mark: true, immediate_sweep: true)
180
+ GC.compact if compact && GC.respond_to?(:compact)
181
+ GC.start(full_mark: true, immediate_sweep: true)
182
+ end
183
+
184
+ def flush_deferred_multi_closes_all
185
+ return unless Curl::Easy.respond_to?(:flush_deferred_multi_closes)
186
+
187
+ Curl::Easy.flush_deferred_multi_closes(all_threads: true)
188
+ end
189
+
190
+ def run_teardown_multi_cleanup
191
+ ObjectSpace.each_object(Curl::Multi) do |multi|
192
+ begin
193
+ next if multi.instance_variable_defined?(:@deferred_close) && multi.instance_variable_get(:@deferred_close)
194
+
195
+ multi.instance_variable_set(:@requests, {})
196
+ multi._close
197
+ rescue StandardError
198
+ nil
199
+ end
200
+ end
201
+ end
202
+
203
+ def assert_child_process_success
204
+ pid = fork do
205
+ begin
206
+ yield
207
+ exit! 0
208
+ rescue Exception => e
209
+ warn("#{e.class}: #{e.message}")
210
+ warn(e.backtrace.join("\n")) if e.backtrace
211
+ exit! 1
212
+ end
213
+ end
214
+
215
+ _child_pid, status = Process.wait2(pid)
216
+ assert_predicate status, :success?
217
+ end
218
+
219
+ def collect_after_iteration
220
+ ObjectSpace.garbage_collect
221
+ ObjectSpace.garbage_collect
222
+ end
223
+ end
@@ -0,0 +1,110 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
2
+ require 'tmpdir'
3
+
4
+ class TestServerMethodsWaitForServerReady < Test::Unit::TestCase
5
+ include TestServerMethods
6
+
7
+ def server_startup_timeout
8
+ 0.05
9
+ end
10
+
11
+ def unused_port
12
+ server = TCPServer.new('127.0.0.1', 0)
13
+ port = server.addr[1]
14
+ server.close
15
+ port
16
+ end
17
+
18
+ def test_wait_for_server_ready_returns_false_when_thread_dies
19
+ thread = Thread.new {}
20
+ thread.join
21
+
22
+ started = Process.clock_gettime(Process::CLOCK_MONOTONIC)
23
+ assert_equal false, wait_for_server_ready(unused_port, thread: thread)
24
+ elapsed = Process.clock_gettime(Process::CLOCK_MONOTONIC) - started
25
+
26
+ assert_operator elapsed, :<, 0.5
27
+ end
28
+
29
+ def test_wait_for_server_ready_times_out_when_server_never_starts
30
+ error = assert_raise(RuntimeError) do
31
+ wait_for_server_ready(unused_port)
32
+ end
33
+
34
+ assert_match(/Failed to startup test server/, error.message)
35
+ end
36
+ end
37
+
38
+ class TestServerMethodsLockHandling < Test::Unit::TestCase
39
+ include TestServerMethods
40
+
41
+ def setup
42
+ @lock_dir = Dir.mktmpdir('curb-server-lock')
43
+ @__port = unused_port
44
+ end
45
+
46
+ def teardown
47
+ super
48
+ FileUtils.remove_entry(@lock_dir) if @lock_dir && File.exist?(@lock_dir)
49
+ end
50
+
51
+ def server_startup_timeout
52
+ 0.05
53
+ end
54
+
55
+ def locked_file
56
+ File.join(@lock_dir, "server_lock-#{@__port}")
57
+ end
58
+
59
+ def unused_port
60
+ server = TCPServer.new('127.0.0.1', 0)
61
+ port = server.addr[1]
62
+ server.close
63
+ port
64
+ end
65
+
66
+ def test_clear_stale_server_lock_removes_legacy_lock_when_server_is_down
67
+ File.write(locked_file, 'locked')
68
+
69
+ clear_stale_server_lock(@__port)
70
+
71
+ assert_equal false, File.exist?(locked_file)
72
+ end
73
+
74
+ def test_clear_stale_server_lock_removes_dead_pid_lock_when_server_is_down
75
+ File.write(locked_file, "999999\n")
76
+
77
+ clear_stale_server_lock(@__port)
78
+
79
+ assert_equal false, File.exist?(locked_file)
80
+ end
81
+
82
+ def test_clear_stale_server_lock_keeps_live_pid_lock_during_startup_window
83
+ write_server_lock(Process.pid)
84
+
85
+ clear_stale_server_lock(@__port)
86
+
87
+ assert_equal true, File.exist?(locked_file)
88
+ end
89
+
90
+ def test_clear_stale_server_lock_removes_non_responding_live_pid_lock_after_timeout
91
+ write_server_lock(Process.pid)
92
+ stale_time = Time.now - 1
93
+ File.utime(stale_time, stale_time, locked_file)
94
+
95
+ clear_stale_server_lock(@__port)
96
+
97
+ assert_equal false, File.exist?(locked_file)
98
+ end
99
+
100
+ def test_stop_test_server_removes_owned_lock_and_shuts_listener_down
101
+ server_setup(@__port)
102
+ assert_equal true, File.exist?(locked_file)
103
+ assert_equal true, server_responding?(@__port)
104
+
105
+ stop_test_server
106
+
107
+ assert_equal false, File.exist?(locked_file)
108
+ assert_equal false, server_responding?(@__port)
109
+ end
110
+ end
data/tests/timeout.rb CHANGED
@@ -13,15 +13,27 @@ class TestCurbTimeouts < Test::Unit::TestCase
13
13
  elapsed = Time.now - start
14
14
  assert elapsed > 2
15
15
  end
16
-
16
+
17
17
  def test_overall_timeout_on_dead_transfer
18
18
  curl = Curl::Easy.new(wait_url(2))
19
19
  curl.timeout = 1
20
+ exception = assert_raise(Curl::Err::TimeoutError) do
21
+ curl.http_get
22
+ end
23
+ assert_match(
24
+ /^Timeout was reached: Operation timed out after/,
25
+ exception.message
26
+ )
27
+ end
28
+
29
+ def test_overall_timeout_ms_on_dead_transfer
30
+ curl = Curl::Easy.new(wait_url(2))
31
+ curl.timeout_ms = 1000
20
32
  assert_raise(Curl::Err::TimeoutError) do
21
33
  curl.http_get
22
34
  end
23
35
  end
24
-
36
+
25
37
  def test_clearing_timeout
26
38
  curl = Curl::Easy.new(wait_url(2))
27
39
  curl.timeout = 1
@@ -36,16 +48,20 @@ class TestCurbTimeouts < Test::Unit::TestCase
36
48
  curl = Curl::Easy.new(serve_url(100, 2, 3))
37
49
  curl.timeout = 1
38
50
  # transfer is aborted despite data being exchanged
39
- assert_raise(Curl::Err::TimeoutError) do
51
+ exception = assert_raise(Curl::Err::TimeoutError) do
40
52
  curl.http_get
41
53
  end
54
+ assert_match(
55
+ /^Timeout was reached: Operation timed out after/,
56
+ exception.message
57
+ )
42
58
  end
43
59
 
44
60
  def test_low_speed_time_on_slow_transfer
45
61
  curl = Curl::Easy.new(serve_url(100, 1, 3))
46
62
  curl.low_speed_time = 2
47
63
  # use default low_speed_limit of 1
48
- assert true, curl.http_get
64
+ assert_equal true, curl.http_get
49
65
  end
50
66
 
51
67
  def test_low_speed_time_on_very_slow_transfer
@@ -55,18 +71,26 @@ class TestCurbTimeouts < Test::Unit::TestCase
55
71
  # XXX for some reason this test fails if low speed limit is not specified
56
72
  curl.low_speed_limit = 1
57
73
  # use default low_speed_limit of 1
58
- assert_raise(Curl::Err::TimeoutError) do
74
+ exception = assert_raise(Curl::Err::TimeoutError) do
59
75
  curl.http_get
60
76
  end
77
+ assert_match(
78
+ /^Timeout was reached: Operation too slow/,
79
+ exception.message
80
+ )
61
81
  end
62
82
 
63
83
  def test_low_speed_limit_on_slow_transfer
64
84
  curl = Curl::Easy.new(serve_url(10, 1, 3))
65
85
  curl.low_speed_time = 2
66
86
  curl.low_speed_limit = 1000
67
- assert_raise(Curl::Err::TimeoutError) do
87
+ exception = assert_raise(Curl::Err::TimeoutError) do
68
88
  curl.http_get
69
89
  end
90
+ assert_match(
91
+ /^Timeout was reached: Operation too slow/,
92
+ exception.message
93
+ )
70
94
  end
71
95
 
72
96
  def test_clearing_low_speed_time
metadata CHANGED
@@ -1,16 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: curb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.4
5
- prerelease:
4
+ version: 1.3.5
6
5
  platform: ruby
7
6
  authors:
8
7
  - Ross Bamford
9
8
  - Todd A. Fisher
10
- autorequire:
11
9
  bindir: bin
12
10
  cert_chain: []
13
- date: 2013-05-20 00:00:00.000000000 Z
11
+ date: 2026-05-14 00:00:00.000000000 Z
14
12
  dependencies: []
15
13
  description: Curb (probably CUrl-RuBy or something) provides Ruby-language bindings
16
14
  for the libcurl(3), a fully-featured client-side URL transfer library. cURL and
@@ -21,87 +19,96 @@ extensions:
21
19
  - ext/extconf.rb
22
20
  extra_rdoc_files:
23
21
  - LICENSE
24
- - README
22
+ - README.md
25
23
  files:
26
24
  - LICENSE
27
- - README
25
+ - README.md
28
26
  - Rakefile
29
27
  - doc.rb
30
- - ext/extconf.rb
31
- - lib/curb.rb
32
- - lib/curl/easy.rb
33
- - lib/curl/multi.rb
34
- - lib/curl.rb
28
+ - ext/banned.h
35
29
  - ext/curb.c
36
- - ext/curb_easy.c
37
- - ext/curb_errors.c
38
- - ext/curb_multi.c
39
- - ext/curb_postfield.c
40
- - ext/curb_upload.c
41
30
  - ext/curb.h
31
+ - ext/curb_easy.c
42
32
  - ext/curb_easy.h
33
+ - ext/curb_errors.c
43
34
  - ext/curb_errors.h
44
35
  - ext/curb_macros.h
36
+ - ext/curb_multi.c
45
37
  - ext/curb_multi.h
38
+ - ext/curb_postfield.c
46
39
  - ext/curb_postfield.h
40
+ - ext/curb_upload.c
47
41
  - ext/curb_upload.h
42
+ - ext/extconf.rb
43
+ - lib/curb.rb
44
+ - lib/curl.rb
45
+ - lib/curl/easy.rb
46
+ - lib/curl/multi.rb
48
47
  - tests/alltests.rb
49
48
  - tests/bug_crash_on_debug.rb
50
49
  - tests/bug_crash_on_progress.rb
51
50
  - tests/bug_curb_easy_blocks_ruby_threads.rb
52
51
  - tests/bug_curb_easy_post_with_string_no_content_length_header.rb
52
+ - tests/bug_follow_redirect_288.rb
53
53
  - tests/bug_instance_post_differs_from_class_post.rb
54
54
  - tests/bug_issue102.rb
55
+ - tests/bug_issue_noproxy.rb
56
+ - tests/bug_issue_post_redirect.rb
57
+ - tests/bug_issue_spnego.rb
55
58
  - tests/bug_multi_segfault.rb
56
59
  - tests/bug_postfields_crash.rb
57
60
  - tests/bug_postfields_crash2.rb
61
+ - tests/bug_raise_on_callback.rb
58
62
  - tests/bug_require_last_or_segfault.rb
59
63
  - tests/bugtests.rb
60
64
  - tests/helper.rb
65
+ - tests/leak_trace.rb
61
66
  - tests/mem_check.rb
62
67
  - tests/require_last_or_segfault_script.rb
63
68
  - tests/signals.rb
64
69
  - tests/tc_curl.rb
65
70
  - tests/tc_curl_download.rb
66
71
  - tests/tc_curl_easy.rb
72
+ - tests/tc_curl_easy_cookielist.rb
73
+ - tests/tc_curl_easy_request_target.rb
74
+ - tests/tc_curl_easy_resolve.rb
67
75
  - tests/tc_curl_easy_setopt.rb
76
+ - tests/tc_curl_maxfilesize.rb
68
77
  - tests/tc_curl_multi.rb
78
+ - tests/tc_curl_native_coverage.rb
69
79
  - tests/tc_curl_postfield.rb
80
+ - tests/tc_curl_protocols.rb
81
+ - tests/tc_fiber_scheduler.rb
82
+ - tests/tc_ftp_options.rb
83
+ - tests/tc_gc_compact.rb
84
+ - tests/tc_test_server_methods.rb
70
85
  - tests/timeout.rb
71
86
  - tests/timeout_server.rb
72
87
  - tests/unittests.rb
73
- homepage: http://curb.rubyforge.org/
74
- licenses: []
75
- post_install_message:
88
+ homepage: https://github.com/taf2/curb
89
+ licenses:
90
+ - Ruby
91
+ metadata:
92
+ changelog_uri: https://github.com/taf2/curb/blob/master/ChangeLog.md
76
93
  rdoc_options:
77
- - --main
78
- - README
94
+ - "--main"
95
+ - README.md
79
96
  require_paths:
80
97
  - lib
81
98
  - ext
82
99
  required_ruby_version: !ruby/object:Gem::Requirement
83
- none: false
84
100
  requirements:
85
- - - ! '>='
101
+ - - ">="
86
102
  - !ruby/object:Gem::Version
87
- version: '0'
88
- segments:
89
- - 0
90
- hash: -243569426931689339
103
+ version: '2.2'
91
104
  required_rubygems_version: !ruby/object:Gem::Requirement
92
- none: false
93
105
  requirements:
94
- - - ! '>='
106
+ - - ">="
95
107
  - !ruby/object:Gem::Version
96
108
  version: '0'
97
- segments:
98
- - 0
99
- hash: -243569426931689339
100
109
  requirements: []
101
- rubyforge_project: curb
102
- rubygems_version: 1.8.24
103
- signing_key:
104
- specification_version: 3
110
+ rubygems_version: 4.0.10
111
+ specification_version: 4
105
112
  summary: Ruby libcurl bindings
106
113
  test_files:
107
114
  - tests/alltests.rb
@@ -109,23 +116,39 @@ test_files:
109
116
  - tests/bug_crash_on_progress.rb
110
117
  - tests/bug_curb_easy_blocks_ruby_threads.rb
111
118
  - tests/bug_curb_easy_post_with_string_no_content_length_header.rb
119
+ - tests/bug_follow_redirect_288.rb
112
120
  - tests/bug_instance_post_differs_from_class_post.rb
113
121
  - tests/bug_issue102.rb
122
+ - tests/bug_issue_noproxy.rb
123
+ - tests/bug_issue_post_redirect.rb
124
+ - tests/bug_issue_spnego.rb
114
125
  - tests/bug_multi_segfault.rb
115
126
  - tests/bug_postfields_crash.rb
116
127
  - tests/bug_postfields_crash2.rb
128
+ - tests/bug_raise_on_callback.rb
117
129
  - tests/bug_require_last_or_segfault.rb
118
130
  - tests/bugtests.rb
119
131
  - tests/helper.rb
132
+ - tests/leak_trace.rb
120
133
  - tests/mem_check.rb
121
134
  - tests/require_last_or_segfault_script.rb
122
135
  - tests/signals.rb
123
136
  - tests/tc_curl.rb
124
137
  - tests/tc_curl_download.rb
125
138
  - tests/tc_curl_easy.rb
139
+ - tests/tc_curl_easy_cookielist.rb
140
+ - tests/tc_curl_easy_request_target.rb
141
+ - tests/tc_curl_easy_resolve.rb
126
142
  - tests/tc_curl_easy_setopt.rb
143
+ - tests/tc_curl_maxfilesize.rb
127
144
  - tests/tc_curl_multi.rb
145
+ - tests/tc_curl_native_coverage.rb
128
146
  - tests/tc_curl_postfield.rb
147
+ - tests/tc_curl_protocols.rb
148
+ - tests/tc_fiber_scheduler.rb
149
+ - tests/tc_ftp_options.rb
150
+ - tests/tc_gc_compact.rb
151
+ - tests/tc_test_server_methods.rb
129
152
  - tests/timeout.rb
130
153
  - tests/timeout_server.rb
131
154
  - tests/unittests.rb