jersey 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,39 @@
1
+ # Need this so we load up .env.test
2
+ ENV['RACK_ENV'] = 'test'
3
+
4
+ # Requies all the Gems
5
+ require_relative '../lib/jersey'
6
+ Jersey.setup
7
+
8
+ # require test runner
9
+ require 'minitest/autorun'
10
+ require 'minitest/pride' # :)
11
+
12
+ # load the test helpers
13
+ # Dir["./test/helpers/**/*.rb"].sort.each { |f| require f }
14
+
15
+ module JsonHelpers
16
+ def json; JSON.parse(last_response.body); end
17
+ end
18
+
19
+ class UnitTest < Minitest::Test
20
+ def setup
21
+ super
22
+ Jersey.logger.reset!
23
+ Jersey.logger.stream = StringIO.new unless ENV['LOG']
24
+ end
25
+
26
+ def logs
27
+ Jersey.logger.stream.string
28
+ end
29
+ end
30
+
31
+ class ApiTest < UnitTest
32
+ include Rack::Test::Methods
33
+ include JsonHelpers
34
+
35
+ # default app method to return an app named `App`
36
+ def app
37
+ self.class.const_get(:App)
38
+ end
39
+ end
@@ -0,0 +1,55 @@
1
+ require 'helper'
2
+
3
+ class LogTest < UnitTest
4
+ def setup
5
+ super
6
+ Jersey.logger.stream = StringIO.new
7
+ end
8
+
9
+ def test_log_json
10
+ logger = Jersey::JSONLogger.new(stream: StringIO.new)
11
+ logger.log(foo: "bar")
12
+ logdata = JSON.parse(logger.stream.string)
13
+ assert_equal('bar', logdata['foo'])
14
+ end
15
+
16
+ def test_log_nothing_logs_time
17
+ Jersey.log()
18
+ logdata = Logfmt.parse(logs)
19
+ assert(logdata['now'], 'must log time')
20
+ end
21
+
22
+ def test_log_hash
23
+ Jersey.log(foo: 'bar')
24
+ logdata = Logfmt.parse(logs)
25
+ assert_equal('bar', logdata['foo'])
26
+ assert(logdata['now'], 'must log time')
27
+ end
28
+
29
+ def test_log_error
30
+ begin
31
+ raise "boom!"
32
+ rescue => e
33
+ Jersey.log(e)
34
+ loglines = logs.lines
35
+ logdata = Logfmt.parse(loglines[0])
36
+ assert_equal('boom!', logdata['message'])
37
+ assert_equal(e.object_id, logdata['id'])
38
+ assert(logdata['now'], 'must log time')
39
+
40
+ logdata = Logfmt.parse(loglines[1])
41
+ assert_equal(1, logdata['line_number'])
42
+ assert_equal(e.object_id, logdata['id'])
43
+
44
+ logdata = Logfmt.parse(loglines[2])
45
+ assert_equal(2, logdata['line_number'])
46
+ assert_equal(e.object_id, logdata['id'])
47
+
48
+ logdata = Logfmt.parse(loglines.last)
49
+ assert_equal(10, logdata['line_number'])
50
+ assert_equal(e.object_id, logdata['id'])
51
+
52
+ assert_equal(11, loglines.size)
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,161 @@
1
+ require 'helper'
2
+
3
+ class RequestLoggerTest < ApiTest
4
+ class App < Sinatra::Base
5
+ use Jersey::Middleware::RequestLogger
6
+
7
+ get('/get') { 'OK' }
8
+ post('/') { 'OK' }
9
+ put('/') { status(201); 'OK' }
10
+ delete('/') { 'OK' }
11
+ end
12
+
13
+ def setup
14
+ super
15
+ Jersey.logger.stream = StringIO.new
16
+ end
17
+
18
+ def test_logs_GET_request_method_path_and_time
19
+ get '/get'
20
+ loglines = logs.lines
21
+ logdata = Logfmt.parse(loglines[0])
22
+ assert_equal('start', logdata['at'])
23
+ assert_equal('GET', logdata['method'])
24
+ assert_equal('/get', logdata['path'])
25
+ assert(logdata['now'], 'must log time')
26
+
27
+ logdata = Logfmt.parse(loglines[1])
28
+ assert_equal('finish', logdata['at'])
29
+ assert_equal('GET', logdata['method'])
30
+ assert_equal('/get', logdata['path'])
31
+ assert_equal(200, logdata['status'])
32
+ assert_equal(2, logdata['content_length'])
33
+ assert(logdata['now'], 'must log time')
34
+ assert(logdata['elapsed'], 'must log duration')
35
+ end
36
+
37
+ def test_logs_POST_request_method_path_and_time
38
+ post '/'
39
+ logdata = Logfmt.parse(logs.lines[0])
40
+ assert_equal('POST', logdata['method'])
41
+ assert_equal('/', logdata['path'])
42
+ end
43
+
44
+ def test_logs_PUT_request_method_path_and_time
45
+ put '/'
46
+ logdata = Logfmt.parse(logs.lines[0])
47
+ assert_equal('PUT', logdata['method'])
48
+
49
+ logdata = Logfmt.parse(logs.lines[1])
50
+ assert_equal('PUT', logdata['method'])
51
+ assert_equal(201, logdata['status'])
52
+ end
53
+ end
54
+
55
+ class RequestLoggerWithRequestIDsTest < ApiTest
56
+ class App < Sinatra::Base
57
+ use RequestStore::Middleware
58
+ use Jersey::Middleware::RequestID
59
+ use Jersey::Middleware::RequestLogger
60
+
61
+ get('/') do
62
+ Jersey.log(at: 'mid-request')
63
+ 'OK'
64
+ end
65
+ end
66
+
67
+ def setup
68
+ super
69
+ Jersey.logger.stream = StringIO.new
70
+ end
71
+
72
+ # Testing a few things here
73
+ def test_logs_request_id
74
+ get '/'
75
+ loglines = logs.lines
76
+
77
+ logdata = Logfmt.parse(loglines[0])
78
+ request_id = logdata['request_id']
79
+ assert_equal('start', logdata['at'])
80
+ assert(request_id, 'must log request id')
81
+
82
+ logdata = Logfmt.parse(loglines[1])
83
+ assert_equal('mid-request', logdata['at'])
84
+ assert_equal(request_id, logdata['request_id'])
85
+
86
+ logdata = Logfmt.parse(loglines[2])
87
+ assert_equal('finish', logdata['at'])
88
+ assert_equal(request_id, logdata['request_id'])
89
+
90
+ end
91
+
92
+
93
+ def test_doesnt_persist_request_id
94
+ get '/'
95
+ logdata = Logfmt.parse(logs.lines[0])
96
+ request_id = logdata['request_id']
97
+
98
+ Jersey.log(foo: 'bar')
99
+ logdata = Logfmt.parse(logs.lines.last)
100
+ assert_equal('bar', logdata['foo'])
101
+ refute(logdata['request_id'], 'should not have request id')
102
+ end
103
+
104
+ def test_doesnt_clear_everything
105
+ Jersey.logger << {app_name: 'hotness'}
106
+ get '/'
107
+ logdata = Logfmt.parse(logs.lines[0])
108
+ assert_equal('hotness', logdata['app_name'])
109
+
110
+ get '/'
111
+ logdata = Logfmt.parse(logs.lines[3])
112
+ assert_equal('hotness', logdata['app_name'])
113
+ end
114
+ end
115
+
116
+ class RequestLoggerNoRequestStore < ApiTest
117
+ class App < Sinatra::Base
118
+ use Jersey::Middleware::RequestID
119
+ use Jersey::Middleware::RequestLogger
120
+
121
+ get('/') do
122
+ Jersey.log(at: 'mid-request')
123
+ 'OK'
124
+ end
125
+ end
126
+
127
+ def setup
128
+ super
129
+ Jersey.logger.stream = StringIO.new
130
+ end
131
+
132
+ # Testing a few things here
133
+ def test_logs_request_id
134
+ get '/'
135
+ loglines = logs.lines
136
+
137
+ logdata = Logfmt.parse(loglines[0])
138
+ request_id = logdata['request_id']
139
+ assert_equal('start', logdata['at'])
140
+ assert(request_id, 'must log request id')
141
+
142
+ logdata = Logfmt.parse(loglines[1])
143
+ assert_equal('mid-request', logdata['at'])
144
+ assert_equal(request_id, logdata['request_id'])
145
+
146
+ logdata = Logfmt.parse(loglines[2])
147
+ assert_equal('finish', logdata['at'])
148
+ assert_equal(request_id, logdata['request_id'])
149
+ end
150
+
151
+ def test_doesnt_persist_request_id
152
+ get '/'
153
+ logdata = Logfmt.parse(logs.lines[0])
154
+ request_id = logdata['request_id']
155
+
156
+ Jersey.log(foo: 'bar')
157
+ logdata = Logfmt.parse(logs.lines.last)
158
+ assert_equal('bar', logdata['foo'])
159
+ refute(logdata['request_id'], 'should not have request id')
160
+ end
161
+ end
@@ -0,0 +1,13 @@
1
+ require 'helper'
2
+
3
+ class SetupTest < UnitTest
4
+ def test_time_zone
5
+ t = Time.now
6
+ assert_equal('UTC', t.zone)
7
+ end
8
+
9
+ def test_time_to_s
10
+ t = Time.now
11
+ assert_equal(t.iso8601, t.to_s)
12
+ end
13
+ end
metadata ADDED
@@ -0,0 +1,162 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jersey
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - csquared
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sinatra
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.4'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.4'
27
+ - !ruby/object:Gem::Dependency
28
+ name: sinatra-contrib
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.4'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.4'
41
+ - !ruby/object:Gem::Dependency
42
+ name: env-conf
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: request_store
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: bundler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.7'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.7'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '10.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '10.0'
97
+ description: Set of composable middleware and helpers for production sinatra APIs
98
+ email:
99
+ - christopher.continanza@gmail.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - ".gitignore"
105
+ - Gemfile
106
+ - LICENSE.txt
107
+ - README.md
108
+ - Rakefile
109
+ - examples/readme.ru
110
+ - jersey.gemspec
111
+ - lib/jersey.rb
112
+ - lib/jersey/api.rb
113
+ - lib/jersey/base.rb
114
+ - lib/jersey/extensions/error_handler.rb
115
+ - lib/jersey/extensions/route_signature.rb
116
+ - lib/jersey/helpers/log.rb
117
+ - lib/jersey/http_errors.rb
118
+ - lib/jersey/log.rb
119
+ - lib/jersey/logging/base_logger.rb
120
+ - lib/jersey/logging/json_logger.rb
121
+ - lib/jersey/logging/logfmt_logger.rb
122
+ - lib/jersey/logging/mixins.rb
123
+ - lib/jersey/middleware/request_id.rb
124
+ - lib/jersey/middleware/request_logger.rb
125
+ - lib/jersey/setup.rb
126
+ - lib/jersey/time.rb
127
+ - lib/jersey/version.rb
128
+ - test/errors_test.rb
129
+ - test/helper.rb
130
+ - test/log_test.rb
131
+ - test/request_logger_test.rb
132
+ - test/setup_test.rb
133
+ homepage: ''
134
+ licenses:
135
+ - MIT
136
+ metadata: {}
137
+ post_install_message:
138
+ rdoc_options: []
139
+ require_paths:
140
+ - lib
141
+ required_ruby_version: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ required_rubygems_version: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ version: '0'
151
+ requirements: []
152
+ rubyforge_project:
153
+ rubygems_version: 2.2.0
154
+ signing_key:
155
+ specification_version: 4
156
+ summary: Write APIs in the New Jersey Style
157
+ test_files:
158
+ - test/errors_test.rb
159
+ - test/helper.rb
160
+ - test/log_test.rb
161
+ - test/request_logger_test.rb
162
+ - test/setup_test.rb