kronk 1.4.0 → 1.5.0

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.
@@ -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