httpclient 2.2.4 → 2.2.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.
@@ -76,10 +76,10 @@ class TestHTTPClient < Test::Unit::TestCase
76
76
  assert_equal("= Request", lines[0])
77
77
  assert_equal("! CONNECTION ESTABLISHED", lines[2])
78
78
  assert_equal("GET /hello HTTP/0.9", lines[3])
79
- assert_equal("Connection: close", lines[5])
80
- assert_equal("= Response", lines[6])
81
- assert_match(/^hello$/, lines[7])
82
- assert_match(/^world$/, lines[8])
79
+ assert_equal("Connection: close", lines[6])
80
+ assert_equal("= Response", lines[7])
81
+ assert_match(/^hello$/, lines[8])
82
+ assert_match(/^world$/, lines[9])
83
83
  end
84
84
 
85
85
  def test_protocol_version_http10
@@ -93,8 +93,24 @@ class TestHTTPClient < Test::Unit::TestCase
93
93
  assert_equal("= Request", lines[0])
94
94
  assert_equal("! CONNECTION ESTABLISHED", lines[2])
95
95
  assert_equal("GET /hello HTTP/1.0", lines[3])
96
- assert_equal("Connection: close", lines[5])
97
- assert_equal("= Response", lines[6])
96
+ assert_equal("Connection: close", lines[6])
97
+ assert_equal("= Response", lines[7])
98
+ end
99
+
100
+ def test_header_accept_by_default
101
+ str = ""
102
+ @client.debug_dev = str
103
+ @client.get(serverurl)
104
+ lines = str.split(/(?:\r?\n)+/)
105
+ assert_equal("Accept: */*", lines[4])
106
+ end
107
+
108
+ def test_header_accept
109
+ str = ""
110
+ @client.debug_dev = str
111
+ @client.get(serverurl, :header => {:Accept => 'text/html'})
112
+ lines = str.split(/(?:\r?\n)+/)
113
+ assert_equal("Accept: text/html", lines[4])
98
114
  end
99
115
 
100
116
  def test_host_given
@@ -105,7 +121,7 @@ class TestHTTPClient < Test::Unit::TestCase
105
121
  assert_equal("= Request", lines[0])
106
122
  assert_equal("! CONNECTION ESTABLISHED", lines[2])
107
123
  assert_equal("GET / HTTP/1.1", lines[3])
108
- assert_equal("Host: localhost:#{serverport}", lines[5])
124
+ assert_equal("Host: localhost:#{serverport}", lines[6])
109
125
  #
110
126
  @client.reset_all
111
127
  str = ""
@@ -127,7 +143,7 @@ class TestHTTPClient < Test::Unit::TestCase
127
143
  assert_equal("= Request", lines[0])
128
144
  assert_equal("! CONNECTION ESTABLISHED", lines[2])
129
145
  assert_equal("GET / HTTP/1.1", lines[3])
130
- assert_equal("Host: localhost:#{serverport}", lines[5])
146
+ assert_equal("Host: localhost:#{serverport}", lines[6])
131
147
  @client.protocol_version = 'HTTP/1.1'
132
148
  assert_equal('HTTP/1.1', @client.protocol_version)
133
149
  str = ""
@@ -416,7 +432,9 @@ EOS
416
432
 
417
433
  def test_redirect_relative
418
434
  @client.test_loopback_http_response << "HTTP/1.0 302 OK\nLocation: hello\n\n"
419
- assert_equal('hello', @client.get_content(serverurl + 'redirect1'))
435
+ silent do
436
+ assert_equal('hello', @client.get_content(serverurl + 'redirect1'))
437
+ end
420
438
  #
421
439
  @client.reset_all
422
440
  @client.redirect_uri_callback = @client.method(:strict_redirect_uri_callback)
@@ -437,7 +455,9 @@ EOS
437
455
  https_url.scheme = 'https'
438
456
  @client.test_loopback_http_response << "HTTP/1.0 302 OK\nLocation: /foo\n\n"
439
457
  @client.test_loopback_http_response << "HTTP/1.0 200 OK\n\nhello"
440
- assert_equal('hello', @client.get_content(https_url))
458
+ silent do
459
+ assert_equal('hello', @client.get_content(https_url))
460
+ end
441
461
  end
442
462
 
443
463
  def test_no_content
@@ -538,26 +558,29 @@ EOS
538
558
 
539
559
  def test_head
540
560
  assert_equal("head", @client.head(serverurl + 'servlet').header["x-head"][0])
541
- res = @client.head(serverurl + 'servlet', {1=>2, 3=>4})
542
- assert_equal('1=2&3=4', res.header["x-query"][0])
561
+ param = {'1'=>'2', '3'=>'4'}
562
+ res = @client.head(serverurl + 'servlet', param)
563
+ assert_equal(param, params(res.header["x-query"][0]))
543
564
  end
544
565
 
545
566
  def test_head_async
546
- conn = @client.head_async(serverurl + 'servlet', {1=>2, 3=>4})
567
+ param = {'1'=>'2', '3'=>'4'}
568
+ conn = @client.head_async(serverurl + 'servlet', param)
547
569
  Thread.pass while !conn.finished?
548
570
  res = conn.pop
549
- assert_equal('1=2&3=4', res.header["x-query"][0])
571
+ assert_equal(param, params(res.header["x-query"][0]))
550
572
  end
551
573
 
552
574
  def test_get
553
575
  assert_equal("get", @client.get(serverurl + 'servlet').content)
554
- res = @client.get(serverurl + 'servlet', {1=>2, 3=>4})
555
- assert_equal('1=2&3=4', res.header["x-query"][0])
576
+ param = {'1'=>'2', '3'=>'4'}
577
+ res = @client.get(serverurl + 'servlet', param)
578
+ assert_equal(param, params(res.header["x-query"][0]))
556
579
  assert_nil(res.contenttype)
557
580
  #
558
581
  url = serverurl.to_s + 'servlet?5=6&7=8'
559
- res = @client.get(url, {1=>2, 3=>4})
560
- assert_equal('1=2&3=4&5=6&7=8', res.header["x-query"][0])
582
+ res = @client.get(url, param)
583
+ assert_equal(param.merge("5"=>"6", "7"=>"8"), params(res.header["x-query"][0]))
561
584
  assert_nil(res.contenttype)
562
585
  end
563
586
 
@@ -568,10 +591,11 @@ EOS
568
591
  end
569
592
 
570
593
  def test_get_async
571
- conn = @client.get_async(serverurl + 'servlet', {1=>2, 3=>4})
594
+ param = {'1'=>'2', '3'=>'4'}
595
+ conn = @client.get_async(serverurl + 'servlet', param)
572
596
  Thread.pass while !conn.finished?
573
597
  res = conn.pop
574
- assert_equal('1=2&3=4', res.header["x-query"][0])
598
+ assert_equal(param, params(res.header["x-query"][0]))
575
599
  end
576
600
 
577
601
  def test_get_async_for_largebody
@@ -603,8 +627,9 @@ EOS
603
627
 
604
628
  def test_post
605
629
  assert_equal("post", @client.post(serverurl + 'servlet').content[0, 4])
606
- res = @client.post(serverurl + 'servlet', {1=>2, 3=>4})
607
- assert_equal('1=2&3=4', res.header["x-query"][0])
630
+ param = {'1'=>'2', '3'=>'4'}
631
+ res = @client.post(serverurl + 'servlet', param)
632
+ assert_equal(param, params(res.header["x-query"][0]))
608
633
  end
609
634
 
610
635
  def test_post_follow_redirect
@@ -614,20 +639,21 @@ EOS
614
639
  end
615
640
 
616
641
  def test_post_with_content_type
642
+ param = [['1', '2'], ['3', '4']]
617
643
  ext = {'content-type' => 'application/x-www-form-urlencoded', 'hello' => 'world'}
618
644
  assert_equal("post", @client.post(serverurl + 'servlet').content[0, 4], ext)
619
- res = @client.post(serverurl + 'servlet', {1=>2, 3=>4}, ext)
620
- assert_equal('1=2&3=4', res.header["x-query"][0])
645
+ res = @client.post(serverurl + 'servlet', param, ext)
646
+ assert_equal(Hash[param], params(res.header["x-query"][0]))
621
647
  #
622
648
  ext = [['content-type', 'multipart/form-data'], ['hello', 'world']]
623
649
  assert_equal("post", @client.post(serverurl + 'servlet').content[0, 4], ext)
624
- res = @client.post(serverurl + 'servlet', {1=>2, 3=>4}, ext)
650
+ res = @client.post(serverurl + 'servlet', param, ext)
625
651
  assert_match(/Content-Disposition: form-data; name="1"/, res.content)
626
652
  assert_match(/Content-Disposition: form-data; name="3"/, res.content)
627
653
  #
628
654
  ext = {'content-type' => 'multipart/form-data; boundary=hello'}
629
655
  assert_equal("post", @client.post(serverurl + 'servlet').content[0, 4], ext)
630
- res = @client.post(serverurl + 'servlet', {1=>2, 3=>4}, ext)
656
+ res = @client.post(serverurl + 'servlet', param, ext)
631
657
  assert_match(/Content-Disposition: form-data; name="1"/, res.content)
632
658
  assert_match(/Content-Disposition: form-data; name="3"/, res.content)
633
659
  assert_equal("post,--hello\r\nContent-Disposition: form-data; name=\"1\"\r\n\r\n2\r\n--hello\r\nContent-Disposition: form-data; name=\"3\"\r\n\r\n4\r\n--hello--\r\n\r\n", res.content)
@@ -643,6 +669,19 @@ EOS
643
669
  end
644
670
  end
645
671
 
672
+ def test_post_with_file_without_size
673
+ STDOUT.sync = true
674
+ File.open(__FILE__) do |file|
675
+ def file.size
676
+ # Simulates some strange Windows behaviour
677
+ raise SystemCallError.new "Unknown Error (20047)"
678
+ end
679
+ assert_nothing_raised do
680
+ @client.post(serverurl + 'servlet', {1=>2, 3=>file})
681
+ end
682
+ end
683
+ end
684
+
646
685
  def test_post_with_io # streaming, but not chunked
647
686
  myio = StringIO.new("X" * (HTTP::Message::Body::DEFAULT_CHUNK_SIZE + 1))
648
687
  def myio.read(*args)
@@ -677,10 +716,11 @@ EOS
677
716
  end
678
717
 
679
718
  def test_post_async
680
- conn = @client.post_async(serverurl + 'servlet', {1=>2, 3=>4})
719
+ param = {'1'=>'2', '3'=>'4'}
720
+ conn = @client.post_async(serverurl + 'servlet', param)
681
721
  Thread.pass while !conn.finished?
682
722
  res = conn.pop
683
- assert_equal('1=2&3=4', res.header["x-query"][0])
723
+ assert_equal(param, params(res.header["x-query"][0]))
684
724
  end
685
725
 
686
726
  def test_post_with_block
@@ -693,7 +733,8 @@ EOS
693
733
  assert_nil(res.content)
694
734
  #
695
735
  called = false
696
- res = @client.post(serverurl + 'servlet', {1=>2, 3=>4}) { |str|
736
+ param = [['1', '2'], ['3', '4']]
737
+ res = @client.post(serverurl + 'servlet', param) { |str|
697
738
  assert_equal('post,1=2&3=4', str)
698
739
  called = true
699
740
  }
@@ -735,8 +776,9 @@ EOS
735
776
 
736
777
  def test_put
737
778
  assert_equal("put", @client.put(serverurl + 'servlet').content)
738
- res = @client.put(serverurl + 'servlet', {1=>2, 3=>4})
739
- assert_equal('1=2&3=4', res.header["x-query"][0])
779
+ param = {'1'=>'2', '3'=>'4'}
780
+ res = @client.put(serverurl + 'servlet', param)
781
+ assert_equal(param, params(res.header["x-query"][0]))
740
782
  end
741
783
 
742
784
  def test_put_bytesize
@@ -746,10 +788,11 @@ EOS
746
788
  end
747
789
 
748
790
  def test_put_async
749
- conn = @client.put_async(serverurl + 'servlet', {1=>2, 3=>4})
791
+ param = {'1'=>'2', '3'=>'4'}
792
+ conn = @client.put_async(serverurl + 'servlet', param)
750
793
  Thread.pass while !conn.finished?
751
794
  res = conn.pop
752
- assert_equal('1=2&3=4', res.header["x-query"][0])
795
+ assert_equal(param, params(res.header["x-query"][0]))
753
796
  end
754
797
 
755
798
  def test_delete
@@ -787,30 +830,34 @@ EOS
787
830
 
788
831
  def test_proppatch
789
832
  assert_equal("proppatch", @client.proppatch(serverurl + 'servlet').content)
790
- res = @client.proppatch(serverurl + 'servlet', {1=>2, 3=>4})
833
+ param = {'1'=>'2', '3'=>'4'}
834
+ res = @client.proppatch(serverurl + 'servlet', param)
791
835
  assert_equal('proppatch', res.content)
792
- assert_equal('1=2&3=4', res.header["x-query"][0])
836
+ assert_equal(param, params(res.header["x-query"][0]))
793
837
  end
794
838
 
795
839
  def test_proppatch_async
796
- conn = @client.proppatch_async(serverurl + 'servlet', {1=>2, 3=>4})
840
+ param = {'1'=>'2', '3'=>'4'}
841
+ conn = @client.proppatch_async(serverurl + 'servlet', param)
797
842
  Thread.pass while !conn.finished?
798
843
  res = conn.pop
799
844
  assert_equal('proppatch', res.content.read)
800
- assert_equal('1=2&3=4', res.header["x-query"][0])
845
+ assert_equal(param, params(res.header["x-query"][0]))
801
846
  end
802
847
 
803
848
  def test_trace
804
849
  assert_equal("trace", @client.trace(serverurl + 'servlet').content)
805
- res = @client.trace(serverurl + 'servlet', {1=>2, 3=>4})
806
- assert_equal('1=2&3=4', res.header["x-query"][0])
850
+ param = {'1'=>'2', '3'=>'4'}
851
+ res = @client.trace(serverurl + 'servlet', param)
852
+ assert_equal(param, params(res.header["x-query"][0]))
807
853
  end
808
854
 
809
855
  def test_trace_async
810
- conn = @client.trace_async(serverurl + 'servlet', {1=>2, 3=>4})
856
+ param = {'1'=>'2', '3'=>'4'}
857
+ conn = @client.trace_async(serverurl + 'servlet', param)
811
858
  Thread.pass while !conn.finished?
812
859
  res = conn.pop
813
- assert_equal('1=2&3=4', res.header["x-query"][0])
860
+ assert_equal(param, params(res.header["x-query"][0]))
814
861
  end
815
862
 
816
863
  def test_chunked
@@ -874,6 +921,13 @@ EOS
874
921
  assert_match("ABC: DEF", lines[5])
875
922
  end
876
923
 
924
+ def test_http_custom_date_header
925
+ @client.debug_dev = (str = "")
926
+ res = @client.get(serverurl + 'hello', :header => {'Date' => 'foo'})
927
+ lines = str.split(/(?:\r?\n)+/)
928
+ assert_equal('Date: foo', lines[4])
929
+ end
930
+
877
931
  def test_timeout
878
932
  assert_equal(60, @client.connect_timeout)
879
933
  assert_equal(120, @client.send_timeout)
@@ -1357,12 +1411,14 @@ EOS
1357
1411
  end
1358
1412
 
1359
1413
  def test_socket_local
1360
- @client.socket_local.host = 'localhost'
1414
+ @client.socket_local.host = '127.0.0.1'
1361
1415
  assert_equal('hello', @client.get_content(serverurl + 'hello'))
1362
1416
  @client.reset_all
1363
1417
  @client.socket_local.port = serverport
1364
- assert_raises(Errno::EADDRINUSE) do
1365
- assert_equal('hello', @client.get_content(serverurl + 'hello'))
1418
+ begin
1419
+ @client.get_content(serverurl + 'hello')
1420
+ rescue Errno::EADDRINUSE, SocketError
1421
+ assert(true)
1366
1422
  end
1367
1423
  end
1368
1424
 
@@ -1412,15 +1468,6 @@ private
1412
1468
  @server_thread = start_server_thread(@server)
1413
1469
  end
1414
1470
 
1415
- def escape_env
1416
- env = {}
1417
- env.update(ENV)
1418
- yield
1419
- ensure
1420
- ENV.clear
1421
- ENV.update(env)
1422
- end
1423
-
1424
1471
  def escape_noproxy
1425
1472
  backup = HTTPClient::NO_PROXY_HOSTS.dup
1426
1473
  HTTPClient::NO_PROXY_HOSTS.clear
data/test/test_ssl.rb CHANGED
@@ -34,7 +34,7 @@ class TestSSL < Test::Unit::TestCase
34
34
  assert_nil(cfg.verify_callback)
35
35
  assert_nil(cfg.timeout)
36
36
  assert_equal(OpenSSL::SSL::OP_ALL | OpenSSL::SSL::OP_NO_SSLv2, cfg.options)
37
- assert_equal("ALL:!ADH:!LOW:!EXP:!MD5:+SSLv2:@STRENGTH", cfg.ciphers)
37
+ assert_equal("ALL:!aNULL:!eNULL:!SSLv2", cfg.ciphers)
38
38
  assert_instance_of(OpenSSL::X509::Store, cfg.cert_store)
39
39
  end
40
40
 
@@ -155,6 +155,17 @@ end
155
155
  assert_equal("hello", @client.get_content(@url))
156
156
  end
157
157
 
158
+ def test_set_default_paths
159
+ assert_raise(OpenSSL::SSL::SSLError) do
160
+ @client.get(@url)
161
+ end
162
+ escape_env do
163
+ ENV['SSL_CERT_FILE'] = File.join(DIR, 'ca-chain.cert')
164
+ @client.ssl_config.set_default_paths
165
+ @client.get(@url)
166
+ end
167
+ end
168
+
158
169
  private
159
170
 
160
171
  def cert(filename)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: httpclient
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.4
4
+ version: 2.2.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-08 00:00:00.000000000 Z
12
+ date: 2012-05-06 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description:
15
15
  email: nahi@ruby-lang.org
@@ -57,6 +57,7 @@ files:
57
57
  - test/server.cert
58
58
  - test/htdigest
59
59
  - test/test_ssl.rb
60
+ - test/test_hexdump.rb
60
61
  - test/test_cookie.rb
61
62
  - test/runner.rb
62
63
  - test/htpasswd
@@ -66,8 +67,10 @@ files:
66
67
  - test/ca.cert
67
68
  - test/sslsvr.rb
68
69
  - test/subca.cert
70
+ - test/ca-chain.cert
69
71
  - test/server.key
70
72
  - test/test_httpclient.rb
73
+ - README.txt
71
74
  homepage: http://github.com/nahi/httpclient
72
75
  licenses: []
73
76
  post_install_message:
@@ -80,15 +83,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
80
83
  - - ! '>='
81
84
  - !ruby/object:Gem::Version
82
85
  version: '0'
86
+ segments:
87
+ - 0
88
+ hash: -3213102379838367907
83
89
  required_rubygems_version: !ruby/object:Gem::Requirement
84
90
  none: false
85
91
  requirements:
86
92
  - - ! '>='
87
93
  - !ruby/object:Gem::Version
88
94
  version: '0'
95
+ segments:
96
+ - 0
97
+ hash: -3213102379838367907
89
98
  requirements: []
90
99
  rubyforge_project:
91
- rubygems_version: 1.8.11
100
+ rubygems_version: 1.8.23
92
101
  signing_key:
93
102
  specification_version: 3
94
103
  summary: gives something like the functionality of libwww-perl (LWP) in Ruby