kronk 1.4.0 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,31 @@
1
+ require 'test/test_helper'
2
+
3
+ class TestRequestParser < Test::Unit::TestCase
4
+
5
+ def test_start_new
6
+ assert Kronk::Player::RequestParser.start_new?("/foobar\r\n")
7
+ assert Kronk::Player::RequestParser.start_new?("GET /foobar\r\n")
8
+ assert !Kronk::Player::RequestParser.start_new?("http://example.com\r\n")
9
+ assert !Kronk::Player::RequestParser.start_new?("foobar\r\n")
10
+ end
11
+
12
+
13
+ def test_parse
14
+ expected = {:uri_suffix => "/foobar"}
15
+ assert_equal expected, Kronk::Player::RequestParser.parse("/foobar")
16
+
17
+ expected = {:http_method => "GET", :uri_suffix => "/foobar"}
18
+ assert_equal expected, Kronk::Player::RequestParser.parse("GET /foobar")
19
+
20
+ expected.merge! :host => "example.com"
21
+ raw = "GET /foobar\r\nHost: example.com"
22
+ assert_equal expected, Kronk::Player::RequestParser.parse(raw)
23
+
24
+ expected.merge! :http_method => "POST",
25
+ :data => "foo=bar",
26
+ :headers => {'Accept' => 'json'}
27
+
28
+ raw = "POST /foobar\r\nAccept: json\r\nHost: example.com\r\n\r\nfoo=bar"
29
+ assert_equal expected, Kronk::Player::RequestParser.parse(raw)
30
+ end
31
+ end
@@ -3,24 +3,81 @@ require 'test/test_helper'
3
3
  class TestResponse < Test::Unit::TestCase
4
4
 
5
5
  def setup
6
- @html_resp = Kronk::Request.retrieve_file "test/mocks/200_response.txt"
7
- @json_resp = Kronk::Request.retrieve_file "test/mocks/200_response.json"
8
- @plist_resp = Kronk::Request.retrieve_file "test/mocks/200_response.plist"
9
- @xml_resp = Kronk::Request.retrieve_file "test/mocks/200_response.xml"
6
+ @html_resp = Kronk::Response.read_file "test/mocks/200_response.txt"
7
+ @json_resp = Kronk::Response.read_file "test/mocks/200_response.json"
8
+ @plist_resp = Kronk::Response.read_file "test/mocks/200_response.plist"
9
+ @xml_resp = Kronk::Response.read_file "test/mocks/200_response.xml"
10
10
  end
11
11
 
12
12
 
13
- def test_read_new
14
- File.open "test/mocks/200_response.txt", "r" do |file|
15
- resp = Kronk::Response.read_new file
13
+ def test_init_encoding
14
+ assert_equal "ISO-8859-1", @html_resp.encoding.to_s
15
+ assert_equal "ISO-8859-1", @html_resp.body.encoding.to_s if
16
+ "".respond_to? :encoding
17
+ assert_equal "UTF-8", @json_resp.encoding.to_s.upcase
16
18
 
19
+ png = Kronk::Response.read_file "test/mocks/200_response.png"
20
+ assert_equal "ASCII-8BIT", png.encoding.to_s
21
+ end
17
22
 
18
- expected_header = "#{mock_200_response.split("\r\n\r\n", 2)[0]}\r\n"
19
23
 
20
- assert Net::HTTPResponse === resp
21
- assert_equal mock_200_response, resp.raw
22
- assert_equal expected_header, resp.raw_header
23
- end
24
+ def test_bytes
25
+ png = Kronk::Response.read_file "test/mocks/200_response.png"
26
+ assert_equal 8469, png.bytes
27
+ assert_equal png['Content-Length'].to_i, png.bytes
28
+
29
+ headless = Kronk::Response.new "foobar"
30
+ assert_equal "foobar".bytes.count, headless.bytes
31
+ end
32
+
33
+
34
+ def test_byterate
35
+ @html_resp.time = 10
36
+ assert_equal 930.3, @html_resp.byterate
37
+ @html_resp.time = 100
38
+ assert_equal 93.03, @html_resp.byterate
39
+ end
40
+
41
+
42
+ def test_total_bytes
43
+ assert_equal @html_resp.raw.bytes.count, @html_resp.total_bytes
44
+ end
45
+
46
+
47
+ def test_cookie
48
+ assert_nil @html_resp.cookie
49
+ @html_resp['Cookie'] = "blahblahblah"
50
+ assert_equal "blahblahblah", @html_resp.cookie
51
+ end
52
+
53
+
54
+ def test_headless
55
+ assert Kronk::Response.new("blah blah blah").headless?,
56
+ "Expected a headless HTTP response"
57
+
58
+ assert !Kronk::Response.new("HTTP/1.1 200 OK\r\n\r\nHI").headless?,
59
+ "Expected full valid HTTP response"
60
+ end
61
+
62
+
63
+ def test_new_from_one_line_io
64
+ io = StringIO.new "just this one line!"
65
+ resp = Kronk::Response.new io
66
+
67
+ assert_equal "just this one line!", resp.body
68
+ enc = "".encoding rescue "UTF-8"
69
+ assert_equal ["text/html; charset=#{enc}"], resp['Content-Type']
70
+ end
71
+
72
+
73
+ def test_read_file
74
+ resp = Kronk::Response.read_file "test/mocks/200_response.txt"
75
+
76
+ expected_header = "#{mock_200_response.split("\r\n\r\n", 2)[0]}\r\n"
77
+
78
+ assert Net::HTTPResponse === resp.instance_variable_get("@_res")
79
+ assert_equal mock_200_response, resp.raw
80
+ assert_equal expected_header, resp.raw_header
24
81
  end
25
82
 
26
83
 
@@ -33,8 +90,8 @@ class TestResponse < Test::Unit::TestCase
33
90
 
34
91
  io = StringIO.new str
35
92
 
36
- resp = Kronk::Response.read_new StringIO.new(mock_200_response)
37
- req, resp, bytes = resp.read_raw_from io
93
+ resp = Kronk::Response.new mock_200_response
94
+ req, resp, bytes = resp.send :read_raw_from, io
38
95
 
39
96
  assert_equal "mock debug request", req
40
97
  assert_equal mock_200_response, resp
@@ -269,7 +326,6 @@ class TestResponse < Test::Unit::TestCase
269
326
  end
270
327
 
271
328
 
272
-
273
329
  def test_selective_data_collected_and_ignored
274
330
  expected = {"business" => {"id" => "1234"}}
275
331
 
@@ -277,4 +333,139 @@ class TestResponse < Test::Unit::TestCase
277
333
  @json_resp.selective_data(:only_data => "**/id",
278
334
  :ignore_data => "original_request")
279
335
  end
336
+
337
+
338
+ def test_redirect?
339
+ res = Kronk::Response.new mock_301_response
340
+ assert res.redirect?
341
+
342
+ res = Kronk::Response.new mock_302_response
343
+ assert res.redirect?
344
+
345
+ res = Kronk::Response.new mock_200_response
346
+ assert !res.redirect?
347
+ end
348
+
349
+
350
+ def test_follow_redirect
351
+ res1 = Kronk::Response.new mock_301_response
352
+ assert res1.redirect?
353
+
354
+ expect_request "GET", "http://www.google.com/"
355
+ res2 = res1.follow_redirect
356
+
357
+ assert_equal mock_200_response, res2.raw
358
+ end
359
+
360
+
361
+ def test_force_encoding
362
+ return unless "".respond_to? :encoding
363
+
364
+ res = Kronk::Response.new mock_200_response
365
+ expected_encoding = Encoding.find "ISO-8859-1"
366
+
367
+ assert_equal expected_encoding, res.encoding
368
+ assert_equal expected_encoding, res.body.encoding
369
+ assert_equal expected_encoding, res.raw.encoding
370
+
371
+ res.force_encoding "utf-8"
372
+ expected_encoding = Encoding.find "utf-8"
373
+
374
+ assert_equal expected_encoding, res.encoding
375
+ assert_equal expected_encoding, res.body.encoding
376
+ assert_equal expected_encoding, res.raw.encoding
377
+ end
378
+
379
+
380
+ def test_stringify_string
381
+ str = Kronk::Response.read_file("test/mocks/200_response.json").stringify
382
+ expected = <<-STR
383
+ {
384
+ "business": {
385
+ "address": "3845 Rivertown Pkwy SW Ste 500",
386
+ "city": "Grandville",
387
+ "description": {
388
+ "additional_urls": [
389
+ {
390
+ "destination": "http://example.com",
391
+ "url_click": "http://example.com"
392
+ }
393
+ ],
394
+ "general_info": "<p>A Paint Your Own Pottery Studios..</p>",
395
+ "op_hours": "Fri 1pm-7pm, Sat 10am-6pm, Sun 1pm-4pm, Appointments Available",
396
+ "payment_text": "DISCOVER, AMEX, VISA, MASTERCARD",
397
+ "slogan": "<p>Pottery YOU dress up</p>"
398
+ },
399
+ "distance": 0.0,
400
+ "has_detail_page": true,
401
+ "headings": [
402
+ "Pottery"
403
+ ],
404
+ "id": "1234",
405
+ "impression_id": "mock_iid",
406
+ "improvable": true,
407
+ "latitude": 42.882561,
408
+ "listing_id": "1234",
409
+ "listing_type": "free",
410
+ "longitude": -85.759586,
411
+ "mappable": true,
412
+ "name": "Naked Plates",
413
+ "omit_address": false,
414
+ "omit_phone": false,
415
+ "phone": "6168055326",
416
+ "rateable": true,
417
+ "rating_count": 0,
418
+ "red_listing": false,
419
+ "state": "MI",
420
+ "website": "http://example.com",
421
+ "year_established": "1996",
422
+ "zip": "49418"
423
+ },
424
+ "original_request": {
425
+ "id": "1234"
426
+ },
427
+ "request_id": "mock_rid"
428
+ }
429
+ STR
430
+ assert_equal expected.strip, str
431
+ end
432
+
433
+
434
+ def test_stringify_raw
435
+ str = Kronk::Response.
436
+ read_file("test/mocks/200_response.json").stringify :raw => 1
437
+
438
+ expected = File.read("test/mocks/200_response.json").split("\r\n\r\n")[1]
439
+ assert_equal expected, str
440
+ end
441
+
442
+
443
+ def test_stringify_struct
444
+ str = Kronk::Response.read_file("test/mocks/200_response.json").
445
+ stringify :struct => true
446
+
447
+ expected = JSON.parse \
448
+ File.read("test/mocks/200_response.json").split("\r\n\r\n")[1]
449
+
450
+ expected = Kronk::Diff.ordered_data_string expected, true
451
+
452
+ assert_equal expected, str
453
+ end
454
+
455
+
456
+ def test_stringify_missing_parser
457
+ str = Kronk::Response.read_file("test/mocks/200_response.txt").stringify
458
+ expected = File.read("test/mocks/200_response.txt").split("\r\n\r\n")[1]
459
+
460
+ assert_equal expected, str
461
+ end
462
+
463
+
464
+ def test_success?
465
+ resp = Kronk::Response.read_file("test/mocks/200_response.txt")
466
+ assert resp.success?
467
+
468
+ resp = Kronk::Response.read_file("test/mocks/302_response.txt")
469
+ assert !resp.success?
470
+ end
280
471
  end
metadata CHANGED
@@ -1,12 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kronk
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 1
7
- - 4
8
- - 0
9
- version: 1.4.0
4
+ prerelease:
5
+ version: 1.5.0
10
6
  platform: ruby
11
7
  authors:
12
8
  - Jeremie Castagna
@@ -14,112 +10,74 @@ autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
12
 
17
- date: 2011-07-04 00:00:00 -07:00
18
- default_executable:
13
+ date: 2011-08-11 00:00:00 Z
19
14
  dependencies:
20
15
  - !ruby/object:Gem::Dependency
21
- name: plist
16
+ name: json
22
17
  prerelease: false
23
18
  requirement: &id001 !ruby/object:Gem::Requirement
24
19
  none: false
25
20
  requirements:
26
21
  - - ~>
27
22
  - !ruby/object:Gem::Version
28
- segments:
29
- - 3
30
- - 1
31
- - 0
32
- version: 3.1.0
23
+ version: "1.5"
33
24
  type: :runtime
34
25
  version_requirements: *id001
35
26
  - !ruby/object:Gem::Dependency
36
- name: json
27
+ name: cookiejar
37
28
  prerelease: false
38
29
  requirement: &id002 !ruby/object:Gem::Requirement
39
30
  none: false
40
31
  requirements:
41
32
  - - ~>
42
33
  - !ruby/object:Gem::Version
43
- segments:
44
- - 1
45
- - 5
46
- version: "1.5"
34
+ version: 0.3.0
47
35
  type: :runtime
48
36
  version_requirements: *id002
49
37
  - !ruby/object:Gem::Dependency
50
- name: nokogiri
38
+ name: plist
51
39
  prerelease: false
52
40
  requirement: &id003 !ruby/object:Gem::Requirement
53
41
  none: false
54
42
  requirements:
55
43
  - - ~>
56
44
  - !ruby/object:Gem::Version
57
- segments:
58
- - 1
59
- - 4
60
- version: "1.4"
61
- type: :runtime
45
+ version: 3.1.0
46
+ type: :development
62
47
  version_requirements: *id003
63
48
  - !ruby/object:Gem::Dependency
64
- name: cookiejar
49
+ name: nokogiri
65
50
  prerelease: false
66
51
  requirement: &id004 !ruby/object:Gem::Requirement
67
52
  none: false
68
53
  requirements:
69
54
  - - ~>
70
55
  - !ruby/object:Gem::Version
71
- segments:
72
- - 0
73
- - 3
74
- - 0
75
- version: 0.3.0
76
- type: :runtime
77
- version_requirements: *id004
78
- - !ruby/object:Gem::Dependency
79
- name: rubyforge
80
- prerelease: false
81
- requirement: &id005 !ruby/object:Gem::Requirement
82
- none: false
83
- requirements:
84
- - - ">="
85
- - !ruby/object:Gem::Version
86
- segments:
87
- - 2
88
- - 0
89
- - 4
90
- version: 2.0.4
56
+ version: "1.4"
91
57
  type: :development
92
- version_requirements: *id005
58
+ version_requirements: *id004
93
59
  - !ruby/object:Gem::Dependency
94
60
  name: mocha
95
61
  prerelease: false
96
- requirement: &id006 !ruby/object:Gem::Requirement
62
+ requirement: &id005 !ruby/object:Gem::Requirement
97
63
  none: false
98
64
  requirements:
99
65
  - - ~>
100
66
  - !ruby/object:Gem::Version
101
- segments:
102
- - 0
103
- - 9
104
- - 10
105
- version: 0.9.10
67
+ version: 0.9.12
106
68
  type: :development
107
- version_requirements: *id006
69
+ version_requirements: *id005
108
70
  - !ruby/object:Gem::Dependency
109
71
  name: hoe
110
72
  prerelease: false
111
- requirement: &id007 !ruby/object:Gem::Requirement
73
+ requirement: &id006 !ruby/object:Gem::Requirement
112
74
  none: false
113
75
  requirements:
114
76
  - - ">="
115
77
  - !ruby/object:Gem::Version
116
- segments:
117
- - 2
118
- - 7
119
- - 0
120
- version: 2.7.0
78
+ version: 2.9.1
121
79
  type: :development
122
- version_requirements: *id007
80
+ version_requirements: *id006
123
81
  description: |-
124
82
  Kronk runs diffs against data from live and cached http responses.
125
83
  Kronk was made possible by the sponsoring of AT&T Interactive.
@@ -127,7 +85,6 @@ email:
127
85
  - yaksnrainbows@gmail.com
128
86
  executables:
129
87
  - kronk
130
- - yzma
131
88
  extensions: []
132
89
 
133
90
  extra_rdoc_files:
@@ -141,15 +98,22 @@ files:
141
98
  - README.rdoc
142
99
  - Rakefile
143
100
  - bin/kronk
144
- - bin/yzma
145
101
  - lib/kronk.rb
102
+ - lib/kronk/constants.rb
146
103
  - lib/kronk/cmd.rb
147
- - lib/kronk/data_set.rb
104
+ - lib/kronk/data_renderer.rb
148
105
  - lib/kronk/diff.rb
149
106
  - lib/kronk/diff/ascii_format.rb
150
107
  - lib/kronk/diff/color_format.rb
151
108
  - lib/kronk/path.rb
152
109
  - lib/kronk/path/transaction.rb
110
+ - lib/kronk/player.rb
111
+ - lib/kronk/player/benchmark.rb
112
+ - lib/kronk/player/input_reader.rb
113
+ - lib/kronk/player/output.rb
114
+ - lib/kronk/player/request_parser.rb
115
+ - lib/kronk/player/suite.rb
116
+ - lib/kronk/player/stream.rb
153
117
  - lib/kronk/plist_parser.rb
154
118
  - lib/kronk/request.rb
155
119
  - lib/kronk/response.rb
@@ -158,9 +122,6 @@ files:
158
122
  - lib/kronk/test/core_ext.rb
159
123
  - lib/kronk/test/helper_methods.rb
160
124
  - lib/kronk/xml_parser.rb
161
- - lib/yzma.rb
162
- - lib/yzma/randomizer.rb
163
- - lib/yzma/report.rb
164
125
  - script/kronk_completion
165
126
  - test/mocks/200_response.json
166
127
  - test/mocks/200_response.plist
@@ -168,19 +129,24 @@ files:
168
129
  - test/mocks/200_response.xml
169
130
  - test/mocks/301_response.txt
170
131
  - test/mocks/302_response.txt
132
+ - test/mocks/cookies.yml
133
+ - test/mocks/get_request.txt
171
134
  - test/test_assertions.rb
172
135
  - test/test_core_ext.rb
136
+ - test/test_cmd.rb
173
137
  - test/test_helper_methods.rb
174
- - test/test_data_set.rb
175
138
  - test/test_diff.rb
176
139
  - test/test_helper.rb
140
+ - test/test_input_reader.rb
177
141
  - test/test_kronk.rb
178
142
  - test/test_path.rb
143
+ - test/test_player.rb
179
144
  - test/test_request.rb
145
+ - test/test_request_parser.rb
180
146
  - test/test_response.rb
181
147
  - test/test_transaction.rb
182
148
  - test/test_xml_parser.rb
183
- has_rdoc: true
149
+ - .gemtest
184
150
  homepage: https://github.com/yaksnrainbows/kronk
185
151
  licenses: []
186
152
 
@@ -195,7 +161,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
195
161
  requirements:
196
162
  - - ">="
197
163
  - !ruby/object:Gem::Version
198
- hash: 855220484149539505
164
+ hash: 4569364273501075801
199
165
  segments:
200
166
  - 0
201
167
  version: "0"
@@ -204,26 +170,27 @@ required_rubygems_version: !ruby/object:Gem::Requirement
204
170
  requirements:
205
171
  - - ">="
206
172
  - !ruby/object:Gem::Version
207
- segments:
208
- - 0
209
173
  version: "0"
210
174
  requirements: []
211
175
 
212
176
  rubyforge_project: kronk
213
- rubygems_version: 1.3.7
177
+ rubygems_version: 1.8.6
214
178
  signing_key:
215
179
  specification_version: 3
216
180
  summary: Kronk runs diffs against data from live and cached http responses
217
181
  test_files:
218
182
  - test/test_assertions.rb
183
+ - test/test_cmd.rb
219
184
  - test/test_core_ext.rb
220
- - test/test_data_set.rb
221
185
  - test/test_diff.rb
222
186
  - test/test_helper.rb
223
187
  - test/test_helper_methods.rb
188
+ - test/test_input_reader.rb
224
189
  - test/test_kronk.rb
225
190
  - test/test_path.rb
191
+ - test/test_player.rb
226
192
  - test/test_request.rb
193
+ - test/test_request_parser.rb
227
194
  - test/test_response.rb
228
195
  - test/test_transaction.rb
229
196
  - test/test_xml_parser.rb