test/unit/client_test.rb in raygun4ruby-1.1.4 vs test/unit/client_test.rb in raygun4ruby-1.1.5
- old
+ new
@@ -3,10 +3,15 @@
require 'stringio'
class ClientTest < Raygun::UnitTest
class TestException < StandardError; end
+ class NilMessageError < StandardError
+ def message
+ nil
+ end
+ end
class FakeActionDispatcherIp
attr_reader :ip
def initialize remote_ip
@ip = remote_ip
@@ -53,10 +58,16 @@
}
assert_equal expected_hash, @client.send(:error_details, e)
end
+ def test_error_details_with_nil_message
+ e = NilMessageError.new
+ expected_message = ""
+ assert_equal expected_message, @client.send(:error_details, e)[:message]
+ end
+
def test_client_details
expected_hash = {
name: Raygun::CLIENT_NAME,
version: Raygun::VERSION,
clientUrl: Raygun::CLIENT_URL
@@ -136,10 +147,11 @@
{ lineNumber: "123", fileName: "/some/folder/some_file.rb", methodName: "some_method_name" },
{ lineNumber: "1234", fileName: "/another/path/foo.rb", methodName: "block (3 levels) run"}
]
},
userCustomData: {},
+ tags: ["test"],
request: {}
}
}
assert_equal expected_hash, @client.send(:build_payload_hash, e)
@@ -174,26 +186,26 @@
hostName: "localhost",
url: "/",
httpMethod: "GET",
iPAddress: "127.0.0.1",
queryString: { "a" => "b", "c" => "4945438" },
- form: nil,
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" },
- rawData: []
+ form: {},
+ rawData: {}
}
assert_equal expected_hash, @client.send(:request_information, sample_env_hash)
end
def test_getting_request_information_with_nil_env
assert_equal({}, @client.send(:request_information, nil))
end
- def test_filtering_parameters
- post_body_env_hash = {
+ def test_non_form_parameters
+ put_body_env_hash = {
"SERVER_NAME"=>"localhost",
- "REQUEST_METHOD"=>"POST",
+ "REQUEST_METHOD"=>"PUT",
"REQUEST_PATH"=>"/",
"PATH_INFO"=>"/",
"QUERY_STRING"=>"",
"REQUEST_URI"=>"/",
"HTTP_VERSION"=>"HTTP/1.1",
@@ -208,48 +220,60 @@
"GATEWAY_INTERFACE"=>"CGI/1.2",
"SERVER_PORT"=>"3000",
"SERVER_PROTOCOL"=>"HTTP/1.1",
"SCRIPT_NAME"=>"",
"REMOTE_ADDR"=>"127.0.0.1",
- "rack.input"=>StringIO.new("a=b&c=4945438&password=swordfish")
+ "action_dispatch.request.parameters"=> { "a" => "b", "c" => "4945438", "password" => "swordfish" }
}
expected_form_hash = { "a" => "b", "c" => "4945438", "password" => "[FILTERED]" }
+ assert_equal expected_form_hash, @client.send(:request_information, put_body_env_hash)[:rawData]
+ end
+
+ def test_filtering_parameters
+ post_body_env_hash = sample_env_hash.merge(
+ "rack.input"=>StringIO.new("a=b&c=4945438&password=swordfish")
+ )
+
+ expected_form_hash = { "a" => "b", "c" => "4945438", "password" => "[FILTERED]" }
+
assert_equal expected_form_hash, @client.send(:request_information, post_body_env_hash)[:form]
end
def test_filtering_nested_params
- post_body_env_hash = {
- "SERVER_NAME"=>"localhost",
- "REQUEST_METHOD"=>"POST",
- "REQUEST_PATH"=>"/",
- "PATH_INFO"=>"/",
- "QUERY_STRING"=>"",
- "REQUEST_URI"=>"/",
- "HTTP_VERSION"=>"HTTP/1.1",
- "HTTP_HOST"=>"localhost:3000",
- "HTTP_CONNECTION"=>"keep-alive",
- "HTTP_CACHE_CONTROL"=>"max-age=0",
- "HTTP_ACCEPT"=>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
- "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",
- "HTTP_ACCEPT_ENCODING"=>"gzip,deflate,sdch",
- "HTTP_ACCEPT_LANGUAGE"=>"en-US,en;q=0.8",
- "HTTP_COOKIE"=>"cookieval",
- "GATEWAY_INTERFACE"=>"CGI/1.2",
- "SERVER_PORT"=>"3000",
- "SERVER_PROTOCOL"=>"HTTP/1.1",
- "SCRIPT_NAME"=>"",
- "REMOTE_ADDR"=>"127.0.0.1",
- "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")
- }
+ post_body_env_hash = sample_env_hash.merge(
+ "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")
+ )
expected_form_hash = { "a" => "b", "bank" => { "credit_card" => { "card_number" => "[FILTERED]" }, "name" => "something" }, "c" => "123456", "user" => { "password" => "[FILTERED]" } }
assert_equal expected_form_hash, @client.send(:request_information, post_body_env_hash)[:form]
end
+ def test_filter_parameters_using_proc
+ # filter any parameters that start with "nsa_only"
+ Raygun.configuration.filter_parameters do |hash|
+ hash.inject({}) do |sanitized_hash, pair|
+ k, v = pair
+ v = "[OUREYESONLY]" if k[0...8] == "nsa_only"
+ sanitized_hash[k] = v
+ sanitized_hash
+ end
+ end
+
+ post_body_env_hash = sample_env_hash.merge(
+ "rack.input" => StringIO.new("nsa_only_info=123&nsa_only_metadata=seekrit&something_normal=hello")
+ )
+
+ expected_form_hash = { "nsa_only_info" => "[OUREYESONLY]", "nsa_only_metadata" => "[OUREYESONLY]", "something_normal" => "hello" }
+
+ assert_equal expected_form_hash, @client.send(:request_information, post_body_env_hash)[:form]
+ ensure
+ Raygun.configuration.filter_parameters = nil
+ end
+
def test_ip_address_from_action_dispatch
sample_env_hash = {
"HTTP_VERSION"=>"HTTP/1.1",
"HTTP_HOST"=>"localhost:3000",
"HTTP_CONNECTION"=>"keep-alive",
@@ -268,10 +292,11 @@
}
assert_equal "123.456.789.012", @client.send(:ip_address_from, sample_env_hash)
assert_equal "123.456.789.012", @client.send(:request_information, sample_env_hash)[:iPAddress]
end
+
def test_ip_address_from_old_action_dispatch
old_action_dispatch_ip = FakeActionDispatcherIp.new("123.456.789.012")
sample_env_hash = {
"HTTP_VERSION"=>"HTTP/1.1",
"HTTP_HOST"=>"localhost:3000",
@@ -314,7 +339,67 @@
}
assert_equal "123.456.789.012", @client.send(:ip_address_from, sample_env_hash)
assert_equal "123.456.789.012", @client.send(:request_information, sample_env_hash)[:iPAddress]
end
+
+ def test_ip_address_returns_not_available_if_not_set
+ sample_env_hash = {
+ "HTTP_VERSION"=>"HTTP/1.1",
+ "HTTP_HOST"=>"localhost:3000",
+ "HTTP_CONNECTION"=>"keep-alive",
+ "HTTP_CACHE_CONTROL"=>"max-age=0",
+ "HTTP_ACCEPT"=>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
+ "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",
+ "HTTP_ACCEPT_ENCODING"=>"gzip,deflate,sdch",
+ "HTTP_ACCEPT_LANGUAGE"=>"en-US,en;q=0.8",
+ "HTTP_COOKIE"=>"cookieval",
+ "GATEWAY_INTERFACE"=>"CGI/1.2",
+ "SERVER_PORT"=>"3000",
+ "SERVER_PROTOCOL"=>"HTTP/1.1",
+ "SCRIPT_NAME"=>""
+ }
+
+ assert_equal "(Not Available)", @client.send(:ip_address_from, sample_env_hash)
+ end
+
+ def test_setting_up_http_proxy
+ begin
+ Raygun.configuration.proxy_settings[:address] = "http://proxy.com"
+ Raygun::Client.expects(:http_proxy).with("http://proxy.com", "80", nil, nil)
+
+ Raygun.track_exceptions do
+ raise TestException.new
+ end
+ ensure
+ Raygun.configuration.proxy_settings = {}
+ end
+ end
+
+ private
+
+ def sample_env_hash
+ {
+ "SERVER_NAME"=>"localhost",
+ "REQUEST_METHOD"=>"POST",
+ "REQUEST_PATH"=>"/",
+ "PATH_INFO"=>"/",
+ "QUERY_STRING"=>"",
+ "REQUEST_URI"=>"/",
+ "HTTP_VERSION"=>"HTTP/1.1",
+ "HTTP_HOST"=>"localhost:3000",
+ "HTTP_CONNECTION"=>"keep-alive",
+ "HTTP_CACHE_CONTROL"=>"max-age=0",
+ "HTTP_ACCEPT"=>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
+ "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",
+ "HTTP_ACCEPT_ENCODING"=>"gzip,deflate,sdch",
+ "HTTP_ACCEPT_LANGUAGE"=>"en-US,en;q=0.8",
+ "HTTP_COOKIE"=>"cookieval",
+ "GATEWAY_INTERFACE"=>"CGI/1.2",
+ "SERVER_PORT"=>"3000",
+ "SERVER_PROTOCOL"=>"HTTP/1.1",
+ "SCRIPT_NAME"=>"",
+ "REMOTE_ADDR"=>"127.0.0.1"
+ }
+ end
end