raygun4ruby 1.1.2 → 1.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +17 -0
- data/.travis.yml +9 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/Rakefile +24 -0
- data/lib/raygun/client.rb +10 -1
- data/lib/raygun/version.rb +1 -1
- data/raygun4ruby.gemspec +34 -0
- data/test/integration/client_test.rb +20 -0
- data/test/test_helper.rb +47 -0
- data/test/unit/client_test.rb +275 -0
- data/test/unit/configuration_test.rb +63 -0
- data/test/unit/rails_insert_affected_user_test.rb +95 -0
- data/test/unit/resque_failure_test.rb +22 -0
- data/test/unit/sidekiq_failure_test.rb +30 -0
- metadata +24 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d9e6e07eb62a1e5b014f23705b3438154a8d5645
|
4
|
+
data.tar.gz: 1669c3ed97bc8ab9f2234db2d351e1542539136e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8ce62d3015545c77a1cdbdf76dc5215c9f8aa01b1ff7930d77debda1140dd267eb52cf01ee4736c10866ff8c9c67565b9de9748b74179d08477f1fc1d0edfc08
|
7
|
+
data.tar.gz: 96f8dc35a93f66b220d368f0370b413e605a080a07ee849747ef3009be7230df23ac4a401e55a657b23ecd941fdce3b7a7348df6abdfc53df2a6b45a2d319449
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Nik Wakelin
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
require "bundler/gem_tasks"
|
3
|
+
|
4
|
+
require "rake/testtask"
|
5
|
+
|
6
|
+
namespace :test do
|
7
|
+
|
8
|
+
desc "Test the basics of the adapter"
|
9
|
+
Rake::TestTask.new(:units) do |t|
|
10
|
+
t.libs << "lib/raygun"
|
11
|
+
t.test_files = FileList["test/unit/*_test.rb"]
|
12
|
+
t.verbose = true
|
13
|
+
end
|
14
|
+
|
15
|
+
desc "Run a test against the live API"
|
16
|
+
Rake::TestTask.new(:integration) do |t|
|
17
|
+
t.libs << "lib/raygun"
|
18
|
+
t.test_files = FileList["test/integration/*_test.rb"]
|
19
|
+
t.verbose = true
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
task default: "test:units"
|
data/lib/raygun/client.rb
CHANGED
@@ -2,6 +2,9 @@ module Raygun
|
|
2
2
|
# client for the Raygun REST APIv1
|
3
3
|
# as per http://raygun.io/raygun-providers/rest-json-api?v=1
|
4
4
|
class Client
|
5
|
+
|
6
|
+
ENV_IP_ADDRESS_KEYS = %w(action_dispatch.remote_ip raygun.remote_ip REMOTE_ADDR)
|
7
|
+
|
5
8
|
include HTTParty
|
6
9
|
|
7
10
|
base_uri "https://api.raygun.io/"
|
@@ -73,7 +76,7 @@ module Raygun
|
|
73
76
|
hostName: env["SERVER_NAME"],
|
74
77
|
url: env["PATH_INFO"],
|
75
78
|
httpMethod: env["REQUEST_METHOD"],
|
76
|
-
iPAddress: env
|
79
|
+
iPAddress: ip_address_from(env),
|
77
80
|
queryString: Rack::Utils.parse_nested_query(env["QUERY_STRING"]),
|
78
81
|
form: form_data(env),
|
79
82
|
headers: headers(env),
|
@@ -142,5 +145,11 @@ module Raygun
|
|
142
145
|
end
|
143
146
|
end
|
144
147
|
|
148
|
+
def ip_address_from(env_hash)
|
149
|
+
ENV_IP_ADDRESS_KEYS.each do |key_to_try|
|
150
|
+
return env_hash[key_to_try] unless env_hash[key_to_try].nil? || env_hash[key_to_try] == ""
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
145
154
|
end
|
146
155
|
end
|
data/lib/raygun/version.rb
CHANGED
data/raygun4ruby.gemspec
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'raygun/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "raygun4ruby"
|
8
|
+
spec.version = Raygun::VERSION
|
9
|
+
spec.authors = ["Mindscape", "Nik Wakelin"]
|
10
|
+
spec.email = ["hello@raygun.io"]
|
11
|
+
spec.description = %q{Ruby Adapter for Raygun.io}
|
12
|
+
spec.summary = %q{This gem provides support for Ruby and Ruby on Rails for the Raygun.io error reporter}
|
13
|
+
spec.homepage = "http://raygun.io"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files | grep -Ev '^(test)'`.split("\n")
|
17
|
+
spec.test_files = `git ls-files -- test/*`.split("\n")
|
18
|
+
|
19
|
+
spec.executables = []
|
20
|
+
spec.require_paths = ["lib"]
|
21
|
+
|
22
|
+
spec.add_runtime_dependency "httparty", "~> 0.11"
|
23
|
+
spec.add_runtime_dependency "json"
|
24
|
+
spec.add_runtime_dependency "rack"
|
25
|
+
|
26
|
+
spec.add_development_dependency "bundler", ">= 1.1"
|
27
|
+
spec.add_development_dependency "rake"
|
28
|
+
spec.add_development_dependency "fakeweb", ["~> 1.3"]
|
29
|
+
spec.add_development_dependency "timecop"
|
30
|
+
spec.add_development_dependency "minitest", "~> 4.2"
|
31
|
+
spec.add_development_dependency "redis-namespace", ">= 1.3.1"
|
32
|
+
spec.add_development_dependency "resque"
|
33
|
+
spec.add_development_dependency "sidekiq", "~> 3"
|
34
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative "../test_helper.rb"
|
2
|
+
|
3
|
+
class ClientTest < Raygun::IntegrationTest
|
4
|
+
|
5
|
+
class InnocentTestException < StandardError
|
6
|
+
def message
|
7
|
+
"I am nothing but a test exception"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_sending_a_sample_exception
|
12
|
+
begin
|
13
|
+
raise InnocentTestException.new
|
14
|
+
rescue InnocentTestException => e
|
15
|
+
response = Raygun.track_exception(e)
|
16
|
+
assert_equal 202, response.code, "Raygun Request Failed: #{response.inspect}"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
require_relative "../lib/raygun.rb"
|
2
|
+
require "minitest/autorun"
|
3
|
+
require "minitest/pride"
|
4
|
+
require "fakeweb"
|
5
|
+
require "timecop"
|
6
|
+
|
7
|
+
class NoApiKey < StandardError; end
|
8
|
+
|
9
|
+
class Raygun::IntegrationTest < Minitest::Unit::TestCase
|
10
|
+
|
11
|
+
def setup
|
12
|
+
Raygun.setup do |config|
|
13
|
+
config.api_key = File.open(File.expand_path("~/.raygun4ruby-test-key"), "rb").read
|
14
|
+
config.version = Raygun::VERSION
|
15
|
+
end
|
16
|
+
|
17
|
+
rescue Errno::ENOENT
|
18
|
+
raise NoApiKey.new("Place a valid Raygun API key into ~/.raygun4ruby-test-key to run integration tests") unless api_key
|
19
|
+
end
|
20
|
+
|
21
|
+
def teardown
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
class Raygun::UnitTest < MiniTest::Unit::TestCase
|
27
|
+
|
28
|
+
def setup
|
29
|
+
FakeWeb.allow_net_connect = false
|
30
|
+
Raygun.configuration.api_key = "test api key"
|
31
|
+
end
|
32
|
+
|
33
|
+
def fake_successful_entry
|
34
|
+
FakeWeb.register_uri(:post, "https://api.raygun.io/entries", body: "", status: 202)
|
35
|
+
end
|
36
|
+
|
37
|
+
def teardown
|
38
|
+
FakeWeb.clean_registry
|
39
|
+
FakeWeb.allow_net_connect = true
|
40
|
+
reset_configuration
|
41
|
+
end
|
42
|
+
|
43
|
+
def reset_configuration
|
44
|
+
Raygun.configuration = Raygun::Configuration.new
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,275 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require_relative "../test_helper.rb"
|
3
|
+
require 'stringio'
|
4
|
+
|
5
|
+
class ClientTest < Raygun::UnitTest
|
6
|
+
|
7
|
+
class TestException < StandardError; end
|
8
|
+
|
9
|
+
def setup
|
10
|
+
super
|
11
|
+
@client = Raygun::Client.new
|
12
|
+
fake_successful_entry
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_api_key_required_exception
|
16
|
+
Raygun.configuration.api_key = nil
|
17
|
+
|
18
|
+
assert_raises Raygun::ApiKeyRequired do
|
19
|
+
second_client = Raygun::Client.new
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_track_exception
|
24
|
+
response = Raygun.track_exceptions do
|
25
|
+
raise TestException.new
|
26
|
+
end
|
27
|
+
|
28
|
+
assert response.success?
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_error_details
|
32
|
+
e = TestException.new("A test message")
|
33
|
+
e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'",
|
34
|
+
"/another/path/foo.rb:1234:in `block (3 levels) run'"])
|
35
|
+
|
36
|
+
expected_hash = {
|
37
|
+
className: "ClientTest::TestException",
|
38
|
+
message: e.message,
|
39
|
+
stackTrace: [
|
40
|
+
{ lineNumber: "123", fileName: "/some/folder/some_file.rb", methodName: "some_method_name" },
|
41
|
+
{ lineNumber: "1234", fileName: "/another/path/foo.rb", methodName: "block (3 levels) run"}
|
42
|
+
]
|
43
|
+
}
|
44
|
+
|
45
|
+
assert_equal expected_hash, @client.send(:error_details, e)
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_client_details
|
49
|
+
expected_hash = {
|
50
|
+
name: Raygun::CLIENT_NAME,
|
51
|
+
version: Raygun::VERSION,
|
52
|
+
clientUrl: Raygun::CLIENT_URL
|
53
|
+
}
|
54
|
+
|
55
|
+
assert_equal expected_hash, @client.send(:client_details)
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
def test_version
|
60
|
+
Raygun.setup do |config|
|
61
|
+
config.version = 123
|
62
|
+
end
|
63
|
+
|
64
|
+
assert_equal 123, @client.send(:version)
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_affected_user
|
68
|
+
e = TestException.new("A test message")
|
69
|
+
test_env = { "raygun.affected_user" => { :identifier => "somepooruser@yourapp.com" } }
|
70
|
+
expected_hash = test_env["raygun.affected_user"]
|
71
|
+
|
72
|
+
assert_equal expected_hash, @client.send(:build_payload_hash, e, test_env)[:details][:user]
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_hostname
|
76
|
+
assert_equal Socket.gethostname, @client.send(:hostname)
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_unicode
|
80
|
+
e = TestException.new('日本語のメッセージ')
|
81
|
+
|
82
|
+
assert_silent { @client.track_exception(e) }
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_bad_encoding
|
86
|
+
bad_message = (100..1000).to_a.pack('c*').force_encoding('utf-8')
|
87
|
+
bad_exception = TestException.new(bad_message)
|
88
|
+
|
89
|
+
assert !bad_message.valid_encoding?
|
90
|
+
assert_silent { @client.track_exception(bad_exception) }
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_full_payload_hash
|
94
|
+
Timecop.freeze do
|
95
|
+
Raygun.configuration.version = 123
|
96
|
+
e = TestException.new("A test message")
|
97
|
+
e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'",
|
98
|
+
"/another/path/foo.rb:1234:in `block (3 levels) run'"])
|
99
|
+
|
100
|
+
expected_hash = {
|
101
|
+
occurredOn: Time.now.utc.iso8601,
|
102
|
+
details: {
|
103
|
+
machineName: Socket.gethostname,
|
104
|
+
version: 123,
|
105
|
+
client: {
|
106
|
+
name: Raygun::CLIENT_NAME,
|
107
|
+
version: Raygun::VERSION,
|
108
|
+
clientUrl: Raygun::CLIENT_URL
|
109
|
+
},
|
110
|
+
error: {
|
111
|
+
className: "ClientTest::TestException",
|
112
|
+
message: e.message,
|
113
|
+
stackTrace: [
|
114
|
+
{ lineNumber: "123", fileName: "/some/folder/some_file.rb", methodName: "some_method_name" },
|
115
|
+
{ lineNumber: "1234", fileName: "/another/path/foo.rb", methodName: "block (3 levels) run"}
|
116
|
+
]
|
117
|
+
},
|
118
|
+
userCustomData: {},
|
119
|
+
request: {}
|
120
|
+
}
|
121
|
+
}
|
122
|
+
|
123
|
+
assert_equal expected_hash, @client.send(:build_payload_hash, e)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
def test_getting_request_information
|
128
|
+
sample_env_hash = {
|
129
|
+
"SERVER_NAME"=>"localhost",
|
130
|
+
"REQUEST_METHOD"=>"GET",
|
131
|
+
"REQUEST_PATH"=>"/",
|
132
|
+
"PATH_INFO"=>"/",
|
133
|
+
"QUERY_STRING"=>"a=b&c=4945438",
|
134
|
+
"REQUEST_URI"=>"/?a=b&c=4945438",
|
135
|
+
"HTTP_VERSION"=>"HTTP/1.1",
|
136
|
+
"HTTP_HOST"=>"localhost:3000",
|
137
|
+
"HTTP_CONNECTION"=>"keep-alive",
|
138
|
+
"HTTP_CACHE_CONTROL"=>"max-age=0",
|
139
|
+
"HTTP_ACCEPT"=>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
|
140
|
+
"HTTP_USER_AGENT"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.22 Safari/537.36",
|
141
|
+
"HTTP_ACCEPT_ENCODING"=>"gzip,deflate,sdch",
|
142
|
+
"HTTP_ACCEPT_LANGUAGE"=>"en-US,en;q=0.8",
|
143
|
+
"HTTP_COOKIE"=>"cookieval",
|
144
|
+
"GATEWAY_INTERFACE"=>"CGI/1.2",
|
145
|
+
"SERVER_PORT"=>"3000",
|
146
|
+
"SERVER_PROTOCOL"=>"HTTP/1.1",
|
147
|
+
"SCRIPT_NAME"=>"",
|
148
|
+
"REMOTE_ADDR"=>"127.0.0.1"
|
149
|
+
}
|
150
|
+
|
151
|
+
expected_hash = {
|
152
|
+
hostName: "localhost",
|
153
|
+
url: "/",
|
154
|
+
httpMethod: "GET",
|
155
|
+
iPAddress: "127.0.0.1",
|
156
|
+
queryString: { "a" => "b", "c" => "4945438" },
|
157
|
+
form: nil,
|
158
|
+
headers: { "Version"=>"HTTP/1.1", "Host"=>"localhost:3000", "Connection"=>"keep-alive", "Cache-Control"=>"max-age=0", "Accept"=>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "User-Agent"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.22 Safari/537.36", "Accept-Encoding"=>"gzip,deflate,sdch", "Accept-Language"=>"en-US,en;q=0.8", "Cookie"=>"cookieval" },
|
159
|
+
rawData: []
|
160
|
+
}
|
161
|
+
|
162
|
+
assert_equal expected_hash, @client.send(:request_information, sample_env_hash)
|
163
|
+
end
|
164
|
+
|
165
|
+
def test_getting_request_information_with_nil_env
|
166
|
+
assert_equal({}, @client.send(:request_information, nil))
|
167
|
+
end
|
168
|
+
|
169
|
+
def test_filtering_parameters
|
170
|
+
post_body_env_hash = {
|
171
|
+
"SERVER_NAME"=>"localhost",
|
172
|
+
"REQUEST_METHOD"=>"POST",
|
173
|
+
"REQUEST_PATH"=>"/",
|
174
|
+
"PATH_INFO"=>"/",
|
175
|
+
"QUERY_STRING"=>"",
|
176
|
+
"REQUEST_URI"=>"/",
|
177
|
+
"HTTP_VERSION"=>"HTTP/1.1",
|
178
|
+
"HTTP_HOST"=>"localhost:3000",
|
179
|
+
"HTTP_CONNECTION"=>"keep-alive",
|
180
|
+
"HTTP_CACHE_CONTROL"=>"max-age=0",
|
181
|
+
"HTTP_ACCEPT"=>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
|
182
|
+
"HTTP_USER_AGENT"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.22 Safari/537.36",
|
183
|
+
"HTTP_ACCEPT_ENCODING"=>"gzip,deflate,sdch",
|
184
|
+
"HTTP_ACCEPT_LANGUAGE"=>"en-US,en;q=0.8",
|
185
|
+
"HTTP_COOKIE"=>"cookieval",
|
186
|
+
"GATEWAY_INTERFACE"=>"CGI/1.2",
|
187
|
+
"SERVER_PORT"=>"3000",
|
188
|
+
"SERVER_PROTOCOL"=>"HTTP/1.1",
|
189
|
+
"SCRIPT_NAME"=>"",
|
190
|
+
"REMOTE_ADDR"=>"127.0.0.1",
|
191
|
+
"rack.input"=>StringIO.new("a=b&c=4945438&password=swordfish")
|
192
|
+
}
|
193
|
+
|
194
|
+
expected_form_hash = { "a" => "b", "c" => "4945438", "password" => "[FILTERED]" }
|
195
|
+
|
196
|
+
assert_equal expected_form_hash, @client.send(:request_information, post_body_env_hash)[:form]
|
197
|
+
end
|
198
|
+
|
199
|
+
def test_filtering_nested_params
|
200
|
+
post_body_env_hash = {
|
201
|
+
"SERVER_NAME"=>"localhost",
|
202
|
+
"REQUEST_METHOD"=>"POST",
|
203
|
+
"REQUEST_PATH"=>"/",
|
204
|
+
"PATH_INFO"=>"/",
|
205
|
+
"QUERY_STRING"=>"",
|
206
|
+
"REQUEST_URI"=>"/",
|
207
|
+
"HTTP_VERSION"=>"HTTP/1.1",
|
208
|
+
"HTTP_HOST"=>"localhost:3000",
|
209
|
+
"HTTP_CONNECTION"=>"keep-alive",
|
210
|
+
"HTTP_CACHE_CONTROL"=>"max-age=0",
|
211
|
+
"HTTP_ACCEPT"=>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
|
212
|
+
"HTTP_USER_AGENT"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.22 Safari/537.36",
|
213
|
+
"HTTP_ACCEPT_ENCODING"=>"gzip,deflate,sdch",
|
214
|
+
"HTTP_ACCEPT_LANGUAGE"=>"en-US,en;q=0.8",
|
215
|
+
"HTTP_COOKIE"=>"cookieval",
|
216
|
+
"GATEWAY_INTERFACE"=>"CGI/1.2",
|
217
|
+
"SERVER_PORT"=>"3000",
|
218
|
+
"SERVER_PROTOCOL"=>"HTTP/1.1",
|
219
|
+
"SCRIPT_NAME"=>"",
|
220
|
+
"REMOTE_ADDR"=>"127.0.0.1",
|
221
|
+
"rack.input"=>StringIO.new("a=b&bank%5Bcredit_card%5D%5Bcard_number%5D=my_secret_bank_number&bank%5Bname%5D=something&c=123456&user%5Bpassword%5D=my_fancy_password")
|
222
|
+
}
|
223
|
+
|
224
|
+
expected_form_hash = { "a" => "b", "bank" => { "credit_card" => { "card_number" => "[FILTERED]" }, "name" => "something" }, "c" => "123456", "user" => { "password" => "[FILTERED]" } }
|
225
|
+
|
226
|
+
assert_equal expected_form_hash, @client.send(:request_information, post_body_env_hash)[:form]
|
227
|
+
end
|
228
|
+
|
229
|
+
def test_ip_address_from_action_dispatch
|
230
|
+
sample_env_hash = {
|
231
|
+
"HTTP_VERSION"=>"HTTP/1.1",
|
232
|
+
"HTTP_HOST"=>"localhost:3000",
|
233
|
+
"HTTP_CONNECTION"=>"keep-alive",
|
234
|
+
"HTTP_CACHE_CONTROL"=>"max-age=0",
|
235
|
+
"HTTP_ACCEPT"=>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
|
236
|
+
"HTTP_USER_AGENT"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.22 Safari/537.36",
|
237
|
+
"HTTP_ACCEPT_ENCODING"=>"gzip,deflate,sdch",
|
238
|
+
"HTTP_ACCEPT_LANGUAGE"=>"en-US,en;q=0.8",
|
239
|
+
"HTTP_COOKIE"=>"cookieval",
|
240
|
+
"GATEWAY_INTERFACE"=>"CGI/1.2",
|
241
|
+
"SERVER_PORT"=>"3000",
|
242
|
+
"SERVER_PROTOCOL"=>"HTTP/1.1",
|
243
|
+
"SCRIPT_NAME"=>"",
|
244
|
+
"REMOTE_ADDR"=>"127.0.0.1",
|
245
|
+
"action_dispatch.remote_ip"=>"123.456.789.012"
|
246
|
+
}
|
247
|
+
|
248
|
+
assert_equal "123.456.789.012", @client.send(:ip_address_from, sample_env_hash)
|
249
|
+
assert_equal "123.456.789.012", @client.send(:request_information, sample_env_hash)[:iPAddress]
|
250
|
+
end
|
251
|
+
|
252
|
+
def test_ip_address_from_raygun_specific_key
|
253
|
+
sample_env_hash = {
|
254
|
+
"HTTP_VERSION"=>"HTTP/1.1",
|
255
|
+
"HTTP_HOST"=>"localhost:3000",
|
256
|
+
"HTTP_CONNECTION"=>"keep-alive",
|
257
|
+
"HTTP_CACHE_CONTROL"=>"max-age=0",
|
258
|
+
"HTTP_ACCEPT"=>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
|
259
|
+
"HTTP_USER_AGENT"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.22 Safari/537.36",
|
260
|
+
"HTTP_ACCEPT_ENCODING"=>"gzip,deflate,sdch",
|
261
|
+
"HTTP_ACCEPT_LANGUAGE"=>"en-US,en;q=0.8",
|
262
|
+
"HTTP_COOKIE"=>"cookieval",
|
263
|
+
"GATEWAY_INTERFACE"=>"CGI/1.2",
|
264
|
+
"SERVER_PORT"=>"3000",
|
265
|
+
"SERVER_PROTOCOL"=>"HTTP/1.1",
|
266
|
+
"SCRIPT_NAME"=>"",
|
267
|
+
"REMOTE_ADDR"=>"127.0.0.1",
|
268
|
+
"raygun.remote_ip"=>"123.456.789.012"
|
269
|
+
}
|
270
|
+
|
271
|
+
assert_equal "123.456.789.012", @client.send(:ip_address_from, sample_env_hash)
|
272
|
+
assert_equal "123.456.789.012", @client.send(:request_information, sample_env_hash)[:iPAddress]
|
273
|
+
end
|
274
|
+
|
275
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require_relative "../test_helper.rb"
|
2
|
+
|
3
|
+
class ConfigurationTest < Raygun::UnitTest
|
4
|
+
|
5
|
+
class TestException < StandardError; end
|
6
|
+
class Test2Exception < StandardError; end
|
7
|
+
|
8
|
+
def setup
|
9
|
+
Raygun.setup do |config|
|
10
|
+
config.api_key = "a test api key"
|
11
|
+
config.version = 9.9
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_setting_api_key_and_version
|
16
|
+
assert_equal 9.9, Raygun.configuration.version
|
17
|
+
assert_equal "a test api key", Raygun.configuration.api_key
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_hash_style_access
|
21
|
+
assert_equal 9.9, Raygun.configuration[:version]
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_enable_reporting
|
25
|
+
Raygun.configuration.enable_reporting = false
|
26
|
+
|
27
|
+
# should be no API call
|
28
|
+
assert_nil Raygun.track_exception(TestException.new)
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_silence_reporting
|
32
|
+
Raygun.configuration.silence_reporting = true
|
33
|
+
|
34
|
+
# nothing returned as there's no HTTP call
|
35
|
+
assert_nil Raygun.track_exception(TestException.new)
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_ignoring_exceptions
|
39
|
+
Raygun.configuration.ignore << TestException.to_s
|
40
|
+
|
41
|
+
assert_nil Raygun.track_exception(TestException.new)
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_ignoring_multiple_exceptions
|
45
|
+
Raygun.configuration.ignore << [TestException.to_s, Test2Exception.to_s]
|
46
|
+
|
47
|
+
assert_nil Raygun.track_exception(TestException.new)
|
48
|
+
assert_nil Raygun.track_exception(Test2Exception.new)
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_default_values
|
52
|
+
assert_equal({}, Raygun.configuration.custom_data)
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_overriding_defaults
|
56
|
+
Raygun.default_configuration.custom_data = { robby: "robot" }
|
57
|
+
assert_equal({ robby: "robot" }, Raygun.configuration.custom_data)
|
58
|
+
|
59
|
+
Raygun.configuration.custom_data = { sally: "stegosaurus" }
|
60
|
+
assert_equal({ sally: "stegosaurus" }, Raygun.configuration.custom_data)
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require_relative "../test_helper.rb"
|
2
|
+
require 'ostruct'
|
3
|
+
require 'raygun/middleware/rails_insert_affected_user'
|
4
|
+
|
5
|
+
class ClientTest < Raygun::UnitTest
|
6
|
+
|
7
|
+
class TestException < StandardError; end
|
8
|
+
|
9
|
+
class MockController
|
10
|
+
|
11
|
+
def user_with_email
|
12
|
+
OpenStruct.new(email: "testemail@something.com")
|
13
|
+
end
|
14
|
+
|
15
|
+
def user_with_login
|
16
|
+
OpenStruct.new(login: "topsecret")
|
17
|
+
end
|
18
|
+
|
19
|
+
def user_as_string
|
20
|
+
"some-string-identifier"
|
21
|
+
end
|
22
|
+
|
23
|
+
def no_logged_in_user
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class MockApp
|
28
|
+
attr_accessor :env
|
29
|
+
|
30
|
+
def call(env)
|
31
|
+
@env = env
|
32
|
+
raise TestException.new
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def setup
|
37
|
+
super
|
38
|
+
@client = Raygun::Client.new
|
39
|
+
fake_successful_entry
|
40
|
+
|
41
|
+
@app = MockApp.new
|
42
|
+
@controller = MockController.new
|
43
|
+
@middleware = Raygun::Middleware::RailsInsertAffectedUser.new(@app)
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_inserting_user_object_with_email
|
47
|
+
Raygun.configuration.affected_user_method = :user_with_email
|
48
|
+
assert @controller.respond_to?(Raygun.configuration.affected_user_method)
|
49
|
+
|
50
|
+
begin
|
51
|
+
@middleware.call("action_controller.instance" => @controller)
|
52
|
+
rescue TestException
|
53
|
+
user_hash = { :identifier => "testemail@something.com" }
|
54
|
+
assert_equal user_hash, @app.env["raygun.affected_user"]
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_inserting_user_object_with_login
|
59
|
+
Raygun.configuration.affected_user_method = :user_with_login
|
60
|
+
Raygun.configuration.affected_user_identifier_methods << :login
|
61
|
+
|
62
|
+
assert @controller.respond_to?(Raygun.configuration.affected_user_method)
|
63
|
+
|
64
|
+
begin
|
65
|
+
@middleware.call("action_controller.instance" => @controller)
|
66
|
+
rescue TestException
|
67
|
+
user_hash = { :identifier => "topsecret" }
|
68
|
+
assert_equal user_hash, @app.env["raygun.affected_user"]
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_inserting_user_as_plain_string
|
73
|
+
Raygun.configuration.affected_user_method = :user_as_string
|
74
|
+
assert @controller.respond_to?(Raygun.configuration.affected_user_method)
|
75
|
+
|
76
|
+
begin
|
77
|
+
@middleware.call("action_controller.instance" => @controller)
|
78
|
+
rescue TestException
|
79
|
+
user_hash = { :identifier => "some-string-identifier" }
|
80
|
+
assert_equal user_hash, @app.env["raygun.affected_user"]
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_with_a_nil_user
|
85
|
+
Raygun.configuration.affected_user_method = :no_logged_in_user
|
86
|
+
assert @controller.respond_to?(Raygun.configuration.affected_user_method)
|
87
|
+
|
88
|
+
begin
|
89
|
+
@middleware.call("action_controller.instance" => @controller)
|
90
|
+
rescue TestException
|
91
|
+
assert_nil @app.env["raygun.affected_user"]
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require_relative "../test_helper.rb"
|
2
|
+
|
3
|
+
# Very simple test
|
4
|
+
class ResqueFailureTest < Raygun::UnitTest
|
5
|
+
|
6
|
+
require "resque/failure/raygun"
|
7
|
+
|
8
|
+
def setup
|
9
|
+
super
|
10
|
+
fake_successful_entry
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_failure_backend_appears_to_work
|
14
|
+
assert Resque::Failure::Raygun.new(
|
15
|
+
StandardError.new("Worker Problem"),
|
16
|
+
"TestWorker PID 123",
|
17
|
+
"super_important_jobs",
|
18
|
+
class: "SendCookies", args: [ "nik" ]
|
19
|
+
).save.success?
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require_relative "../test_helper.rb"
|
2
|
+
|
3
|
+
require "sidekiq"
|
4
|
+
# Convince Sidekiq it's on a server :)
|
5
|
+
module Sidekiq
|
6
|
+
def self.server?
|
7
|
+
true
|
8
|
+
end
|
9
|
+
end
|
10
|
+
require "raygun/sidekiq"
|
11
|
+
|
12
|
+
class SidekiqFailureTest < Raygun::UnitTest
|
13
|
+
|
14
|
+
def setup
|
15
|
+
super
|
16
|
+
fake_successful_entry
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_failure_backend_appears_to_work
|
20
|
+
assert Raygun::SidekiqReporter.call(
|
21
|
+
StandardError.new("Oh no! Your Sidekiq has failed!"),
|
22
|
+
sidekick_name: "robin"
|
23
|
+
).success?
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_we_are_in_sidekiqs_list_of_error_handlers
|
27
|
+
assert Sidekiq.error_handlers.include?(Raygun::SidekiqReporter)
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: raygun4ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mindscape
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-07-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: httparty
|
@@ -172,7 +172,12 @@ executables: []
|
|
172
172
|
extensions: []
|
173
173
|
extra_rdoc_files: []
|
174
174
|
files:
|
175
|
+
- .gitignore
|
176
|
+
- .travis.yml
|
177
|
+
- Gemfile
|
178
|
+
- LICENSE.txt
|
175
179
|
- README.md
|
180
|
+
- Rakefile
|
176
181
|
- lib/generators/raygun/install_generator.rb
|
177
182
|
- lib/raygun.rb
|
178
183
|
- lib/raygun/client.rb
|
@@ -186,6 +191,14 @@ files:
|
|
186
191
|
- lib/raygun4ruby.rb
|
187
192
|
- lib/resque/failure/raygun.rb
|
188
193
|
- lib/tasks/raygun.tasks
|
194
|
+
- raygun4ruby.gemspec
|
195
|
+
- test/integration/client_test.rb
|
196
|
+
- test/test_helper.rb
|
197
|
+
- test/unit/client_test.rb
|
198
|
+
- test/unit/configuration_test.rb
|
199
|
+
- test/unit/rails_insert_affected_user_test.rb
|
200
|
+
- test/unit/resque_failure_test.rb
|
201
|
+
- test/unit/sidekiq_failure_test.rb
|
189
202
|
homepage: http://raygun.io
|
190
203
|
licenses:
|
191
204
|
- MIT
|
@@ -206,9 +219,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
206
219
|
version: '0'
|
207
220
|
requirements: []
|
208
221
|
rubyforge_project:
|
209
|
-
rubygems_version: 2.
|
222
|
+
rubygems_version: 2.3.0
|
210
223
|
signing_key:
|
211
224
|
specification_version: 4
|
212
225
|
summary: This gem provides support for Ruby and Ruby on Rails for the Raygun.io error
|
213
226
|
reporter
|
214
|
-
test_files:
|
227
|
+
test_files:
|
228
|
+
- test/integration/client_test.rb
|
229
|
+
- test/test_helper.rb
|
230
|
+
- test/unit/client_test.rb
|
231
|
+
- test/unit/configuration_test.rb
|
232
|
+
- test/unit/rails_insert_affected_user_test.rb
|
233
|
+
- test/unit/resque_failure_test.rb
|
234
|
+
- test/unit/sidekiq_failure_test.rb
|