curb 1.0.0 → 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,6 +3,7 @@
3
3
  # irb: multi = Curl::Multi.new
4
4
  # irb: exit
5
5
  # <main>:47140: [BUG] Bus Error
6
+ require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
6
7
  $:.unshift File.expand_path(File.join(File.dirname(__FILE__),'..','ext'))
7
8
  $:.unshift File.expand_path(File.join(File.dirname(__FILE__),'..','lib'))
8
9
  require 'curb'
@@ -0,0 +1,29 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
2
+
3
+ class BugRaiseOnCallback < Test::Unit::TestCase
4
+ include BugTestServerSetupTeardown
5
+
6
+ def setup
7
+ @port = 9999
8
+ super
9
+ end
10
+
11
+ def test_on_complte
12
+ c = Curl::Easy.new('http://127.0.0.1:9999/test')
13
+ did_raise = false
14
+ begin
15
+ c.on_complete do|x|
16
+ assert_equal 'http://127.0.0.1:9999/test', x.url
17
+ raise "error complete" # this will get swallowed
18
+ end
19
+ c.perform
20
+ rescue => e
21
+ did_raise = true
22
+ end
23
+ assert did_raise, "we want to raise an exception if the ruby callbacks raise"
24
+
25
+ end
26
+
27
+ end
28
+
29
+ #test_on_debug
data/tests/helper.rb CHANGED
@@ -135,6 +135,32 @@ class TestServlet < WEBrick::HTTPServlet::AbstractServlet
135
135
 
136
136
  end
137
137
 
138
+ module BugTestServerSetupTeardown
139
+ def setup
140
+ @port ||= 9992
141
+ @server = WEBrick::HTTPServer.new( :Port => @port )
142
+ @server.mount_proc("/test") do|req,res|
143
+ if @response_proc
144
+ @response_proc.call(res)
145
+ else
146
+ res.body = "hi"
147
+ res['Content-Type'] = "text/html"
148
+ end
149
+ end
150
+
151
+ @thread = Thread.new(@server) do|srv|
152
+ srv.start
153
+ end
154
+ end
155
+
156
+ def teardown
157
+ while @server.status != :Shutdown
158
+ @server.shutdown
159
+ end
160
+ @thread.join
161
+ end
162
+ end
163
+
138
164
  module TestServerMethods
139
165
  def locked_file
140
166
  File.join(File.dirname(__FILE__),"server_lock-#{@__port}")
@@ -10,6 +10,14 @@ class TestCurbCurlEasy < Test::Unit::TestCase
10
10
  Curl.reset
11
11
  end
12
12
 
13
+ def test_nested_easy_methods
14
+ easy = Curl.get(TestServlet.url) {|http|
15
+ res = Curl.get(TestServlet.url + '/not_here')
16
+ assert_equal 404, res.code
17
+ }
18
+ assert_equal 200, easy.code
19
+ end
20
+
13
21
  def test_curlopt_stderr_with_file
14
22
  # does not work with Tempfile directly
15
23
  path = Tempfile.new('curb_test_curlopt_stderr').path
@@ -713,9 +721,9 @@ class TestCurbCurlEasy < Test::Unit::TestCase
713
721
  on_success_called = false
714
722
  curl.on_success {|c|
715
723
  on_success_called = true
716
- assert_not_nil c.body_str
717
- assert_equal "", c.header_str
718
- assert_match(/^# DO NOT REMOVE THIS COMMENT/, c.body_str)
724
+ assert_not_nil c.body
725
+ assert_match(/Content-Length: /, c.head)
726
+ assert_match(/^# DO NOT REMOVE THIS COMMENT/, c.body)
719
727
  }
720
728
  curl.perform
721
729
  assert on_success_called, "Success handler not called"
@@ -1139,7 +1147,7 @@ class TestCurbCurlEasy < Test::Unit::TestCase
1139
1147
  c = Curl::Easy.new($TEST_URL)
1140
1148
  c.on_success {|x| raise "error" }
1141
1149
  c.perform
1142
- rescue => e
1150
+ rescue Curl::Err::AbortedByCallbackError => e
1143
1151
  assert_equal 'Curl::Err::AbortedByCallbackError', e.class.to_s
1144
1152
  c.close
1145
1153
  end
@@ -74,7 +74,9 @@ class TestCurbCurlMulti < Test::Unit::TestCase
74
74
  assert did_complete
75
75
  after_open = open_fds.call
76
76
  #puts "after_open: #{after_open} before_open: #{before_open.inspect}"
77
- assert_equal 1, (after_open - before_open), "with max connections set to 1 at this point the connection to google should still be open"
77
+ # ruby process may keep a connection alive
78
+ assert (after_open - before_open) < 3, "with max connections set to 1 at this point the connection to google should still be open"
79
+ assert (after_open - before_open) > 0, "with max connections set to 1 at this point the connection to google should still be open"
78
80
  multi.close
79
81
 
80
82
  after_open = open_fds.call
@@ -159,6 +161,44 @@ class TestCurbCurlMulti < Test::Unit::TestCase
159
161
 
160
162
  end
161
163
 
164
+ def test_multi_easy_get
165
+ n = 1
166
+ urls = []
167
+ n.times { urls << $TEST_URL }
168
+ Curl::Multi.get(urls, {timeout: 5}) {|easy|
169
+ assert_match(/file:/, easy.last_effective_url)
170
+ }
171
+ end
172
+
173
+ def test_multi_easy_get_with_error
174
+ begin
175
+ did_raise = false
176
+ n = 3
177
+ urls = []
178
+ n.times { urls << $TEST_URL }
179
+ error_line_number_should_be = nil
180
+ Curl::Multi.get(urls, {timeout: 5}) {|easy|
181
+ # if we got this right the error will be reported to be on the line below our error_line_number_should_be
182
+ error_line_number_should_be = __LINE__
183
+ raise
184
+ }
185
+
186
+ rescue Curl::Err::AbortedByCallbackError => e
187
+ did_raise = true
188
+ in_file = e.backtrace.detect {|err| err.match?(File.basename(__FILE__)) }
189
+ in_file_stack = e.backtrace.select {|err| err.match?(File.basename(__FILE__)) }
190
+ assert_match(__FILE__, in_file)
191
+ in_file.gsub!(__FILE__)
192
+ parts = in_file.split(':')
193
+ parts.shift
194
+ line_no = parts.shift.to_i
195
+ assert_equal error_line_number_should_be+1, line_no.to_i
196
+ end
197
+
198
+ assert did_raise, "we should have raised an exception"
199
+
200
+ end
201
+
162
202
  # NOTE: if this test runs slowly on Mac OSX, it is probably due to the use of a port install curl+ssl+ares install
163
203
  # on my MacBook, this causes curl_easy_init to take nearly 0.01 seconds / * 100 below is 1 second too many!
164
204
  def test_n_requests
@@ -480,7 +520,7 @@ class TestCurbCurlMulti < Test::Unit::TestCase
480
520
  { :url => TestServlet.url, :method => :get }
481
521
  ]
482
522
  Curl::Multi.http(urls, {:pipeline => true}) do|easy, code, method|
483
- assert_equal nil, code
523
+ assert_equal 200, code
484
524
  case method
485
525
  when :post
486
526
  assert_match(/POST/, easy.body_str)
@@ -494,20 +534,20 @@ class TestCurbCurlMulti < Test::Unit::TestCase
494
534
  end
495
535
 
496
536
  def test_multi_easy_http_with_max_connects
497
- urls = [
537
+ urls = [
498
538
  { :url => TestServlet.url + '?q=1', :method => :get },
499
539
  { :url => TestServlet.url + '?q=2', :method => :get },
500
540
  { :url => TestServlet.url + '?q=3', :method => :get }
501
541
  ]
502
542
  Curl::Multi.http(urls, {:pipeline => true, :max_connects => 1}) do|easy, code, method|
503
- assert_equal nil, code
543
+ assert_equal 200, code
504
544
  case method
505
545
  when :post
506
- assert_match(/POST/, easy.body_str)
546
+ assert_match(/POST/, easy.body)
507
547
  when :get
508
- assert_match(/GET/, easy.body_str)
548
+ assert_match(/GET/, easy.body)
509
549
  when :put
510
- assert_match(/PUT/, easy.body_str)
550
+ assert_match(/PUT/, easy.body)
511
551
  end
512
552
  end
513
553
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: curb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ross Bamford
8
8
  - Todd A. Fisher
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-01-14 00:00:00.000000000 Z
12
+ date: 2023-01-04 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
@@ -50,11 +50,14 @@ files:
50
50
  - tests/bug_crash_on_progress.rb
51
51
  - tests/bug_curb_easy_blocks_ruby_threads.rb
52
52
  - tests/bug_curb_easy_post_with_string_no_content_length_header.rb
53
+ - tests/bug_follow_redirect_288.rb
53
54
  - tests/bug_instance_post_differs_from_class_post.rb
54
55
  - tests/bug_issue102.rb
56
+ - tests/bug_issue277.rb
55
57
  - tests/bug_multi_segfault.rb
56
58
  - tests/bug_postfields_crash.rb
57
59
  - tests/bug_postfields_crash2.rb
60
+ - tests/bug_raise_on_callback.rb
58
61
  - tests/bug_require_last_or_segfault.rb
59
62
  - tests/bugtests.rb
60
63
  - tests/helper.rb
@@ -77,7 +80,7 @@ homepage: https://github.com/taf2/curb
77
80
  licenses:
78
81
  - MIT
79
82
  metadata: {}
80
- post_install_message:
83
+ post_install_message:
81
84
  rdoc_options:
82
85
  - "--main"
83
86
  - README.markdown
@@ -95,8 +98,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
95
98
  - !ruby/object:Gem::Version
96
99
  version: '0'
97
100
  requirements: []
98
- rubygems_version: 3.3.3
99
- signing_key:
101
+ rubygems_version: 3.2.33
102
+ signing_key:
100
103
  specification_version: 4
101
104
  summary: Ruby libcurl bindings
102
105
  test_files:
@@ -105,11 +108,14 @@ test_files:
105
108
  - tests/bug_crash_on_progress.rb
106
109
  - tests/bug_curb_easy_blocks_ruby_threads.rb
107
110
  - tests/bug_curb_easy_post_with_string_no_content_length_header.rb
111
+ - tests/bug_follow_redirect_288.rb
108
112
  - tests/bug_instance_post_differs_from_class_post.rb
109
113
  - tests/bug_issue102.rb
114
+ - tests/bug_issue277.rb
110
115
  - tests/bug_multi_segfault.rb
111
116
  - tests/bug_postfields_crash.rb
112
117
  - tests/bug_postfields_crash2.rb
118
+ - tests/bug_raise_on_callback.rb
113
119
  - tests/bug_require_last_or_segfault.rb
114
120
  - tests/bugtests.rb
115
121
  - tests/helper.rb