kronk 1.8.7 → 1.9.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -384,8 +384,13 @@ class TestPlayer < Test::Unit::TestCase
384
384
  req1 = Kronk::Request.new "example.com"
385
385
  req2 = Kronk::Request.new "beta-example.com"
386
386
 
387
- Kronk::Request.expects(:new).returns req2
388
- Kronk::Request.expects(:new).returns req1
387
+ Kronk::Request.expects(:new).
388
+ with("example.com", :uri_suffix => '/test', :include_headers => true).
389
+ returns req1
390
+
391
+ Kronk::Request.expects(:new).
392
+ with("beta-example.com", :uri_suffix => '/test', :include_headers => true).
393
+ returns req2
389
394
 
390
395
  req1.expects(:retrieve).returns resp1
391
396
  req2.expects(:retrieve).returns resp2
@@ -77,7 +77,7 @@ class TestRequest < Test::Unit::TestCase
77
77
  def test_retrieve_post
78
78
  expect_request "POST", "http://example.com/request/path?foo=bar",
79
79
  :data => {'test' => 'thing'},
80
- :headers => {'X-THING' => 'thing', 'Content-Length' => '10'}
80
+ :headers => {'X-THING' => 'thing'}
81
81
 
82
82
  resp = Kronk::Request.new("http://example.com/request/path?foo=bar",
83
83
  :data => 'test=thing', :headers => {'X-THING' => 'thing'},
@@ -154,11 +154,11 @@ class TestRequest < Test::Unit::TestCase
154
154
  req = Kronk::Request.new "foo.com"
155
155
  req.headers['Transfer-Encoding'] = "chunked"
156
156
  req.body = {:foo => :bar}
157
+ req = req.http_request
157
158
 
158
159
  assert_equal "foo=bar", req.body
159
- assert_equal nil, req.headers['Transfer-Encoding']
160
- assert_equal "application/x-www-form-urlencoded",
161
- req.headers['Content-Type']
160
+ assert_equal 'chunked', req['Transfer-Encoding']
161
+ assert_equal "application/x-www-form-urlencoded", req['Content-Type']
162
162
  end
163
163
 
164
164
 
@@ -166,23 +166,37 @@ class TestRequest < Test::Unit::TestCase
166
166
  req = Kronk::Request.new "foo.com", :form => "blah"
167
167
  req.headers['Transfer-Encoding'] = "chunked"
168
168
  req.body = "foo=bar"
169
+ req = req.http_request
169
170
 
170
171
  assert_equal "foo=bar", req.body
171
- assert_equal nil, req.headers['Transfer-Encoding']
172
- assert_equal '7', req.headers['Content-Length']
173
- assert_equal "application/x-www-form-urlencoded",
174
- req.headers['Content-Type']
172
+ assert_equal 'chunked', req['Transfer-Encoding']
173
+ assert_equal '7', req['Content-Length']
174
+ assert_equal "application/x-www-form-urlencoded", req['Content-Type']
175
175
  end
176
176
 
177
177
 
178
178
  def test_body_string_io
179
179
  req = Kronk::Request.new "foo.com"
180
180
  req.body = str_io = StringIO.new("foo=bar")
181
+ req = req.http_request
181
182
 
182
- assert_equal str_io, req.body
183
- assert_equal nil, req.headers['Transfer-Encoding']
184
- assert_equal 'application/binary', req.headers['Content-Type']
185
- assert_equal '7', req.headers['Content-Length']
183
+ assert_equal str_io, req.body_stream
184
+ assert_equal nil, req['Transfer-Encoding']
185
+ assert_equal 'application/binary', req['Content-Type']
186
+ assert_equal '7', req['Content-Length']
187
+ end
188
+
189
+
190
+ def test_body_nil
191
+ req = Kronk::Request.new "foo.com"
192
+ req.body = nil
193
+ req = req.http_request
194
+
195
+ assert_equal nil, req.body_stream
196
+ assert_equal "", req.body
197
+ assert_equal nil, req['Transfer-Encoding']
198
+ assert_equal nil, req['Content-Type']
199
+ assert_equal '0', req['Content-Length']
186
200
  end
187
201
 
188
202
 
@@ -190,23 +204,25 @@ class TestRequest < Test::Unit::TestCase
190
204
  req = Kronk::Request.new "foo.com"
191
205
  io, = IO.pipe
192
206
  req.body = io
207
+ req = req.http_request
193
208
 
194
- assert_equal io, req.body
195
- assert_equal 'chunked', req.headers['Transfer-Encoding']
196
- assert_equal 'application/binary', req.headers['Content-Type']
197
- assert_equal nil, req.headers['Content-Length']
209
+ assert_equal io, req.body_stream
210
+ assert_equal 'chunked', req['Transfer-Encoding']
211
+ assert_equal 'application/binary', req['Content-Type']
212
+ assert_equal nil, req['Content-Length']
198
213
  end
199
214
 
200
215
 
201
216
  def test_body_file_io
202
- io = File.open 'TODO.rdoc', 'r'
217
+ io = File.open 'Manifest.txt', 'r'
203
218
  req = Kronk::Request.new "foo.com"
204
219
  req.body = io
220
+ req = req.http_request
205
221
 
206
- assert_equal io, req.body
207
- assert_equal nil, req.headers['Transfer-Encoding']
208
- assert_equal 'application/rdoc', req.headers['Content-Type']
209
- assert_equal io.size.to_s, req.headers['Content-Length']
222
+ assert_equal io, req.body_stream
223
+ assert_equal nil, req['Transfer-Encoding']
224
+ assert_equal 'text/plain', req['Content-Type']
225
+ assert_equal io.size.to_s, req['Content-Length']
210
226
 
211
227
  ensure
212
228
  io.close
@@ -217,10 +233,11 @@ class TestRequest < Test::Unit::TestCase
217
233
  req = Kronk::Request.new "foo.com"
218
234
  req.headers['Transfer-Encoding'] = "chunked"
219
235
  req.body = 12345
236
+ req = req.http_request
220
237
 
221
- assert_equal "12345", req.body
222
- assert_equal nil, req.headers['Transfer-Encoding']
223
- assert_equal nil, req.headers['Content-Type']
238
+ assert_equal "12345", req.body
239
+ assert_equal "chunked", req['Transfer-Encoding']
240
+ assert_equal nil, req['Content-Type']
224
241
  end
225
242
 
226
243
 
@@ -392,9 +409,7 @@ class TestRequest < Test::Unit::TestCase
392
409
 
393
410
 
394
411
  def test_retrieve_ssl
395
- expect_request "GET", "https://example.com" do |http, req, resp|
396
- req.expects(:use_ssl=).with true
397
- end
412
+ expect_request "GET", "https://example.com", :ssl => true
398
413
 
399
414
  resp = Kronk::Request.new("https://example.com").retrieve
400
415
 
@@ -479,10 +494,7 @@ class TestRequest < Test::Unit::TestCase
479
494
  :password => "smith"
480
495
  }
481
496
 
482
- expect_request "GET", "http://example.com"
483
-
484
- Kronk::HTTP.expects(:Proxy).with("proxy.com", 8080, "john", "smith").
485
- returns Kronk::HTTP
497
+ expect_request "GET", "http://example.com", :proxy => proxy
486
498
 
487
499
  Kronk::Request.new("http://example.com", :proxy => proxy).retrieve
488
500
  end
@@ -491,22 +503,16 @@ class TestRequest < Test::Unit::TestCase
491
503
  def test_retrieve_proxy_string
492
504
  proxy = "proxy.com:8888"
493
505
 
494
- expect_request "GET", "http://example.com"
495
-
496
- Kronk::HTTP.expects(:Proxy).with("proxy.com", "8888", nil, nil).
497
- returns Kronk::HTTP
506
+ expect_request "GET", "http://example.com",
507
+ :proxy => {:host => 'proxy.com', :port => "8888"}
498
508
 
499
509
  Kronk::Request.new("http://example.com", :proxy => proxy).retrieve
500
510
  end
501
511
 
502
512
 
503
- def test_proxy_nil
504
- assert_equal Kronk::HTTP, Kronk::Request.new("host.com").http_proxy(nil)
505
- end
506
-
507
-
508
513
  def test_proxy_string
509
- proxy_class = Kronk::Request.new("host.com").http_proxy("myproxy.com:80")
514
+ proxy_class = Kronk::Request.new("host.com", :proxy => "myproxy.com:80").
515
+ connection.class
510
516
 
511
517
  assert_equal "myproxy.com",
512
518
  proxy_class.instance_variable_get("@proxy_address")
@@ -519,7 +525,8 @@ class TestRequest < Test::Unit::TestCase
519
525
 
520
526
 
521
527
  def test_proxy_no_port
522
- proxy_class = Kronk::Request.new("host.com").http_proxy("myproxy.com")
528
+ proxy_class = Kronk::Request.new("host.com", :proxy => "myproxy.com").
529
+ connection.class
523
530
 
524
531
  assert_equal "myproxy.com",
525
532
  proxy_class.instance_variable_get("@proxy_address")
@@ -538,7 +545,7 @@ class TestRequest < Test::Unit::TestCase
538
545
  :username => "john",
539
546
  :password => "smith" }
540
547
 
541
- proxy_class = req.http_proxy req.proxy[:host], req.proxy
548
+ proxy_class = req.connection.class
542
549
 
543
550
  assert_equal "myproxy.com",
544
551
  proxy_class.instance_variable_get("@proxy_address")
@@ -582,4 +589,114 @@ class TestRequest < Test::Unit::TestCase
582
589
  assert_equal "some/path", req.path
583
590
  assert_equal "vanilla kronk", req['User-Agent']
584
591
  end
592
+
593
+
594
+ def test_multipart_hash
595
+ file1 = File.open("test/mocks/200_gzip.txt", "rb")
596
+ file2 = File.open("test/mocks/200_response.json", "rb")
597
+ File.stubs(:open).with("test/mocks/200_gzip.txt", "rb").returns file1
598
+ File.stubs(:open).with("test/mocks/200_response.json", "rb").returns file2
599
+
600
+ req = Kronk::Request.new "host.com",
601
+ :form => {:foo => ["bar"]},
602
+ :form_upload => {:foo => ["test/mocks/200_gzip.txt"],
603
+ :bar => "test/mocks/200_response.json"}
604
+
605
+ assert_equal Kronk::Multipart, req.body.class
606
+ assert_equal 3, req.body.parts.length
607
+
608
+ expected = [{"content-disposition"=>"form-data; name=\"foo[]\""}, "bar"]
609
+ assert req.body.parts.include?(expected),
610
+ "Request body should include foo[]=bar"
611
+
612
+ expected = [{
613
+ 'content-disposition' =>
614
+ "form-data; name=\"foo[]\"; filename=\"#{File.basename file1.path}\"",
615
+ 'Content-Type' => "text/plain",
616
+ 'Content-Transfer-Encoding' => 'binary'
617
+ }, file1]
618
+ assert req.body.parts.include?(expected),
619
+ "Request body should include foo[]=#{file1.inspect}"
620
+
621
+ expected = [{
622
+ 'content-disposition' =>
623
+ "form-data; name=\"bar\"; filename=\"#{File.basename file2.path}\"",
624
+ 'Content-Type' => "application/json",
625
+ 'Content-Transfer-Encoding' => 'binary'
626
+ }, file2]
627
+ assert req.body.parts.include?(expected),
628
+ "Request body should include bar=#{file2.inspect}"
629
+
630
+ ensure
631
+ file1.close
632
+ file2.close
633
+ end
634
+
635
+
636
+ def test_multipart_string
637
+ file1 = File.open("test/mocks/200_gzip.txt", "rb")
638
+ file2 = File.open("test/mocks/200_response.json", "rb")
639
+ File.stubs(:open).with("test/mocks/200_gzip.txt", "rb").returns file1
640
+ File.stubs(:open).with("test/mocks/200_response.json", "rb").returns file2
641
+
642
+ req = Kronk::Request.new "host.com",
643
+ :form => "foo[]=bar",
644
+ :form_upload =>
645
+ "foo[]=test/mocks/200_gzip.txt&bar=test/mocks/200_response.json"
646
+
647
+ assert_equal Kronk::Multipart, req.body.class
648
+ assert_equal 3, req.body.parts.length
649
+
650
+ expected = [{"content-disposition"=>"form-data; name=\"foo[]\""}, "bar"]
651
+ assert req.body.parts.include?(expected),
652
+ "Request body should include foo[]=bar"
653
+
654
+ expected = [{
655
+ 'content-disposition' =>
656
+ "form-data; name=\"foo[]\"; filename=\"#{File.basename file1.path}\"",
657
+ 'Content-Type' => "text/plain",
658
+ 'Content-Transfer-Encoding' => 'binary'
659
+ }, file1]
660
+ assert req.body.parts.include?(expected),
661
+ "Request body should include foo[]=#{file1.inspect}"
662
+
663
+ expected = [{
664
+ 'content-disposition' =>
665
+ "form-data; name=\"bar\"; filename=\"#{File.basename file2.path}\"",
666
+ 'Content-Type' => "application/json",
667
+ 'Content-Transfer-Encoding' => 'binary'
668
+ }, file2]
669
+ assert req.body.parts.include?(expected),
670
+ "Request body should include bar=#{file2.inspect}"
671
+
672
+ ensure
673
+ file1.close
674
+ file2.close
675
+ end
676
+
677
+
678
+ def test_http_request_multipart
679
+ file1 = File.open("test/mocks/200_gzip.txt", "rb")
680
+ file2 = File.open("test/mocks/200_response.json", "rb")
681
+ File.stubs(:open).with("test/mocks/200_gzip.txt", "rb").returns file1
682
+ File.stubs(:open).with("test/mocks/200_response.json", "rb").returns file2
683
+
684
+ req = Kronk::Request.new "host.com",
685
+ :form => "foo[]=bar",
686
+ :form_upload =>
687
+ "foo[]=test/mocks/200_gzip.txt&bar=test/mocks/200_response.json"
688
+
689
+ hreq = req.http_request
690
+ assert_equal Kronk::MultipartIO, hreq.body_stream.class
691
+ assert_equal req.body.to_io.size.to_s, hreq['Content-Length']
692
+ assert_equal 5, hreq.body_stream.parts.length
693
+ assert hreq.body_stream.parts.include?(file1),
694
+ "HTTPRequest body stream should include #{file1.inspect}"
695
+ assert hreq.body_stream.parts.include?(file2),
696
+ "HTTPRequest body stream should include #{file2.inspect}"
697
+
698
+ ensure
699
+ file1.close
700
+ file2.close
701
+ end
585
702
  end
@@ -11,6 +11,38 @@ class TestResponse < Test::Unit::TestCase
11
11
  end
12
12
 
13
13
 
14
+ def test_ext
15
+ assert_equal "html", @html_resp.ext
16
+ assert_equal "json", @json_resp.ext
17
+ assert_equal "plist", @plist_resp.ext
18
+ assert_equal "xml", @xml_resp.ext
19
+ end
20
+
21
+
22
+ def test_ext_file
23
+ yml = Kronk::Response.
24
+ read_file("test/mocks/cookies.yml", :allow_headless => true)
25
+
26
+ assert_equal "text/x-yaml; charset=ASCII-8BIT", yml.headers['content-type']
27
+ assert_equal "yaml", yml.ext
28
+
29
+ yml.headers.delete('content-type')
30
+ assert_equal "yml", yml.ext
31
+ end
32
+
33
+
34
+ def test_ext_default
35
+ bin = Kronk::Response.
36
+ read_file("bin/kronk", :allow_headless => true)
37
+
38
+ assert_equal "text/plain; charset=ASCII-8BIT", bin.headers['content-type']
39
+ assert_equal "txt", bin.ext
40
+
41
+ bin.headers.delete('content-type')
42
+ assert_equal "txt", bin.ext
43
+ end
44
+
45
+
14
46
  def test_init_encoding
15
47
  assert_equal "ISO-8859-1", @html_resp.encoding.to_s
16
48
  assert_equal "ISO-8859-1", @html_resp.body.encoding.to_s if
@@ -259,8 +291,8 @@ class TestResponse < Test::Unit::TestCase
259
291
  resp = Kronk::Response.new io
260
292
 
261
293
  assert_equal "just this one line!", resp.body
262
- enc = "".encoding rescue "UTF-8"
263
- assert_equal "text/html; charset=#{enc}", resp['Content-Type']
294
+ enc = "".encoding rescue "ASCII-8BIT"
295
+ assert_equal "text/plain; charset=#{enc}", resp['Content-Type']
264
296
  end
265
297
 
266
298
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kronk
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.7
4
+ version: 1.9.0
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: 2012-04-30 00:00:00.000000000 Z
12
+ date: 2012-05-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
@@ -59,6 +59,22 @@ dependencies:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
61
  version: 1.0.0
62
+ - !ruby/object:Gem::Dependency
63
+ name: mime-types
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 1.18.0
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 1.18.0
62
78
  - !ruby/object:Gem::Dependency
63
79
  name: rdoc
64
80
  requirement: !ruby/object:Gem::Requirement
@@ -149,7 +165,7 @@ description: ! 'Kronk is a command line swiss-army-knife for HTTP services.
149
165
  your HTTP applications.
150
166
 
151
167
 
152
- Kronk was made possible by the sponsoring of AT&T Interactive.'
168
+ Kronk was made possible by the sponsoring of YP.com.'
153
169
  email:
154
170
  - yaksnrainbows@gmail.com
155
171
  executables:
@@ -168,6 +184,7 @@ files:
168
184
  - Rakefile
169
185
  - bin/kronk
170
186
  - lib/kronk.rb
187
+ - lib/kronk/buffered_io.rb
171
188
  - lib/kronk/cmd.rb
172
189
  - lib/kronk/constants.rb
173
190
  - lib/kronk/data_string.rb
@@ -176,9 +193,11 @@ files:
176
193
  - lib/kronk/diff/color_format.rb
177
194
  - lib/kronk/diff/output.rb
178
195
  - lib/kronk/http.rb
179
- - lib/kronk/buffered_io.rb
196
+ - lib/kronk/multipart.rb
197
+ - lib/kronk/multipart_io.rb
180
198
  - lib/kronk/player.rb
181
199
  - lib/kronk/player/benchmark.rb
200
+ - lib/kronk/player/download.rb
182
201
  - lib/kronk/player/input_reader.rb
183
202
  - lib/kronk/player/request_parser.rb
184
203
  - lib/kronk/player/suite.rb
@@ -212,6 +231,8 @@ files:
212
231
  - test/test_helper_methods.rb
213
232
  - test/test_input_reader.rb
214
233
  - test/test_kronk.rb
234
+ - test/test_multipart.rb
235
+ - test/test_multipart_io.rb
215
236
  - test/test_player.rb
216
237
  - test/test_request.rb
217
238
  - test/test_request_parser.rb
@@ -254,6 +275,8 @@ test_files:
254
275
  - test/test_helper_methods.rb
255
276
  - test/test_input_reader.rb
256
277
  - test/test_kronk.rb
278
+ - test/test_multipart.rb
279
+ - test/test_multipart_io.rb
257
280
  - test/test_player.rb
258
281
  - test/test_request.rb
259
282
  - test/test_request_parser.rb