test/unit/client_test.rb in raygun4ruby-1.2.1 vs test/unit/client_test.rb in raygun4ruby-1.3.0

- old
+ new

@@ -2,11 +2,16 @@ require_relative "../test_helper.rb" require 'stringio' class ClientTest < Raygun::UnitTest - class TestException < StandardError; end + class TestException < StandardError + def initialize(message = nil) + super(message || "A test message") + end + end + class NilMessageError < StandardError def message nil end end @@ -41,24 +46,11 @@ assert response.success? end def test_error_details - e = TestException.new("A test message") - e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'", - "/another/path/foo.rb:1234:in `block (3 levels) run'"]) - - expected_hash = { - className: "ClientTest::TestException", - message: e.message, - stackTrace: [ - { lineNumber: "123", fileName: "/some/folder/some_file.rb", methodName: "some_method_name" }, - { lineNumber: "1234", fileName: "/another/path/foo.rb", methodName: "block (3 levels) run"} - ] - } - - assert_equal expected_hash, @client.send(:error_details, e) + assert_equal exception_hash, @client.send(:error_details, test_exception) end def test_error_details_with_nil_message e = NilMessageError.new expected_message = "" @@ -83,15 +75,14 @@ assert_equal 123, @client.send(:version) end def test_affected_user - e = TestException.new("A test message") test_env = { "raygun.affected_user" => { :identifier => "somepooruser@yourapp.com" } } expected_hash = test_env["raygun.affected_user"] - assert_equal expected_hash, @client.send(:build_payload_hash, e, test_env)[:details][:user] + assert_equal expected_hash, @client.send(:build_payload_hash, test_exception, test_env)[:details][:user] end def test_tags configuration_tags = %w{alpha beta gaga} explicit_env_tags = %w{one two three four} @@ -99,15 +90,14 @@ Raygun.setup do |config| config.tags = configuration_tags end - e = TestException.new("A test message") test_env = { tags: explicit_env_tags } expected_tags = configuration_tags + explicit_env_tags + rack_env_tag - assert_equal expected_tags, @client.send(:build_payload_hash, e, test_env)[:details][:tags] + assert_equal expected_tags, @client.send(:build_payload_hash, test_exception, test_env)[:details][:tags] end def test_hostname assert_equal Socket.gethostname, @client.send(:hostname) end @@ -139,14 +129,10 @@ end def test_full_payload_hash Timecop.freeze do Raygun.configuration.version = 123 - e = TestException.new("A test message") - e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'", - "/another/path/foo.rb:1234:in `block (3 levels) run'"]) - grouping_key = "my custom group" expected_hash = { occurredOn: Time.now.utc.iso8601, details: { @@ -155,113 +141,99 @@ client: { name: Raygun::CLIENT_NAME, version: Raygun::VERSION, clientUrl: Raygun::CLIENT_URL }, - error: { - className: "ClientTest::TestException", - message: e.message, - stackTrace: [ - { lineNumber: "123", fileName: "/some/folder/some_file.rb", methodName: "some_method_name" }, - { lineNumber: "1234", fileName: "/another/path/foo.rb", methodName: "block (3 levels) run"} - ] - }, + error: exception_hash, userCustomData: {}, tags: ["test"], request: {}, groupingKey: grouping_key } } - assert_equal expected_hash, @client.send(:build_payload_hash, e, { grouping_key: grouping_key }) + assert_equal expected_hash, @client.send(:build_payload_hash, test_exception, { grouping_key: grouping_key }) end end def test_getting_request_information - sample_env_hash = { - "SERVER_NAME"=>"localhost", - "REQUEST_METHOD"=>"GET", - "REQUEST_PATH"=>"/", - "PATH_INFO"=>"/", + env_hash = sample_env_hash.merge({ "QUERY_STRING"=>"a=b&c=4945438", "REQUEST_URI"=>"/?a=b&c=4945438", - "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" - } + }) expected_hash = { hostName: "localhost", url: "/", httpMethod: "GET", iPAddress: "127.0.0.1", queryString: { "a" => "b", "c" => "4945438" }, - 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" }, + headers: { "Version"=>"HTTP/1.1", "Host"=>"localhost:3000", "Cookie"=>"cookieval" }, form: {}, rawData: {} } - assert_equal expected_hash, @client.send(:request_information, sample_env_hash) + assert_equal expected_hash, @client.send(:request_information, env_hash) end def test_getting_request_information_with_nil_env assert_equal({}, @client.send(:request_information, nil)) end def test_non_form_parameters - put_body_env_hash = { - "SERVER_NAME"=>"localhost", + put_body_env_hash = sample_env_hash.merge({ "REQUEST_METHOD"=>"PUT", - "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", "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_error_raygun_custom_data + custom_data = { "kappa" => "keepo" } + e = Raygun::Error.new("A test message", custom_data) + test_env = {} + expected_form_hash = test_env.merge(custom_data) + + assert_equal expected_form_hash, @client.send(:build_payload_hash, e, test_env)[:details][:userCustomData] + end + + def test_custom_data_configuration_with_hash + custom_data = {foo: '123'} + Raygun.configuration.custom_data = custom_data + + assert_equal custom_data, @client.send(:build_payload_hash, test_exception, sample_env_hash)[:details][:userCustomData] + end + + def test_custom_data_configuration_with_proc + Raygun.configuration.custom_data do |exception, env| + {exception_message: exception.message, server_name: env["SERVER_NAME"]} + end + expected = { + exception_message: "A test message", + server_name: "localhost" + } + + assert_equal expected, @client.send(:build_payload_hash, test_exception, sample_env_hash)[:details][:userCustomData] + end + def test_filtering_parameters post_body_env_hash = sample_env_hash.merge( + "REQUEST_METHOD" => "POST", "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 = sample_env_hash.merge( + "REQUEST_METHOD" => "POST", "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]" } } @@ -280,10 +252,11 @@ sanitized_hash end end post_body_env_hash = sample_env_hash.merge( + "REQUEST_METHOD" => "POST", "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" } @@ -309,106 +282,52 @@ "password_confirmation" => "[FILTERED]", "PasswORD_weird_case" => "[FILTERED]" } post_body_env_hash = sample_env_hash.merge( + "REQUEST_METHOD" => "POST", "rack.input" => StringIO.new(URI.encode_www_form(parameters)) ) 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", - "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", + env_hash = sample_env_hash.merge({ "action_dispatch.remote_ip"=> "123.456.789.012" - } + }) - 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] + assert_equal "123.456.789.012", @client.send(:ip_address_from, env_hash) + assert_equal "123.456.789.012", @client.send(:request_information, 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", - "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", + env_hash = sample_env_hash.merge({ "action_dispatch.remote_ip"=> old_action_dispatch_ip - } + }) - assert_equal old_action_dispatch_ip, @client.send(:ip_address_from, sample_env_hash) - assert_equal "123.456.789.012", @client.send(:request_information, sample_env_hash)[:iPAddress] + assert_equal old_action_dispatch_ip, @client.send(:ip_address_from, env_hash) + assert_equal "123.456.789.012", @client.send(:request_information, env_hash)[:iPAddress] end def test_ip_address_from_raygun_specific_key - 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"=>"", - "REMOTE_ADDR"=>"127.0.0.1", + env_hash = sample_env_hash.merge({ "raygun.remote_ip"=>"123.456.789.012" - } + }) - 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] + assert_equal "123.456.789.012", @client.send(:ip_address_from, env_hash) + assert_equal "123.456.789.012", @client.send(:request_information, 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"=>"" - } + env_hash = sample_env_hash.dup + env_hash.delete("REMOTE_ADDR") - assert_equal "(Not Available)", @client.send(:ip_address_from, sample_env_hash) + assert_equal "(Not Available)", @client.send(:ip_address_from, env_hash) end def test_setting_up_http_proxy begin Raygun.configuration.proxy_settings[:address] = "http://proxy.com" @@ -425,53 +344,32 @@ def test_filter_payload_with_whitelist_never_filters_toplevel Timecop.freeze do Raygun.configuration.filter_payload_with_whitelist = true Raygun.configuration.whitelist_payload_shape = {} - e = TestException.new("A test message") - e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'", - "/another/path/foo.rb:1234:in `block (3 levels) run'"]) + e = test_exception - client_details = @client.send(:client_details) - assert_equal Time.now.utc.iso8601, @client.send(:build_payload_hash, e)[:occurredOn] assert_equal Hash, @client.send(:build_payload_hash, e)[:details].class end end def test_filter_payload_with_whitelist_never_filters_client Raygun.configuration.filter_payload_with_whitelist = true Raygun.configuration.whitelist_payload_shape = {} - e = TestException.new("A test message") - e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'", - "/another/path/foo.rb:1234:in `block (3 levels) run'"]) - client_details = @client.send(:client_details) - assert_equal client_details, @client.send(:build_payload_hash, e)[:details][:client] + assert_equal client_details, @client.send(:build_payload_hash, test_exception)[:details][:client] end def test_filter_payload_with_whitelist_default_error Raygun.configuration.filter_payload_with_whitelist = true - e = TestException.new("A test message") - e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'", - "/another/path/foo.rb:1234:in `block (3 levels) run'"]) + details = @client.send(:build_payload_hash, test_exception)[:details] - details = @client.send(:build_payload_hash, e)[:details] - - expected_hash = { - className: "ClientTest::TestException", - message: e.message, - stackTrace: [ - { lineNumber: "123", fileName: "/some/folder/some_file.rb", methodName: "some_method_name" }, - { lineNumber: "1234", fileName: "/another/path/foo.rb", methodName: "block (3 levels) run" } - ] - } - - assert_equal expected_hash, details[:error] + assert_equal exception_hash, details[:error] end def test_filter_payload_with_whitelist_exclude_error_keys Raygun.configuration.filter_payload_with_whitelist = true Raygun.configuration.whitelist_payload_shape = { @@ -480,26 +378,13 @@ message: true, stackTrace: true } } - e = TestException.new("A test message") - e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'", - "/another/path/foo.rb:1234:in `block (3 levels) run'"]) + details = @client.send(:build_payload_hash, test_exception)[:details] - details = @client.send(:build_payload_hash, e)[:details] - - expected_hash = { - className: "ClientTest::TestException", - message: e.message, - stackTrace: [ - { lineNumber: "123", fileName: "/some/folder/some_file.rb", methodName: "some_method_name" }, - { lineNumber: "1234", fileName: "/another/path/foo.rb", methodName: "block (3 levels) run" } - ] - } - - assert_equal expected_hash, details[:error] + assert_equal exception_hash, details[:error] end def test_filter_payload_with_whitelist_exclude_error_except_stacktrace Raygun.configuration.filter_payload_with_whitelist = true Raygun.configuration.whitelist_payload_shape = { @@ -507,69 +392,47 @@ className: true, message: true, } } - e = TestException.new("A test message") - e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'", - "/another/path/foo.rb:1234:in `block (3 levels) run'"]) + details = @client.send(:build_payload_hash, test_exception)[:details] - details = @client.send(:build_payload_hash, e)[:details] - - expected_hash = { - className: "ClientTest::TestException", - message: "A test message", + expected_hash = exception_hash.merge({ stackTrace: "[FILTERED]" - } + }) assert_equal expected_hash, details[:error] end def test_filter_payload_with_whitelist_proc Raygun.configuration.filter_payload_with_whitelist = true Raygun.configuration.whitelist_payload_shape do |payload| payload end - e = TestException.new("A test message") - e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'", - "/another/path/foo.rb:1234:in `block (3 levels) run'"]) + details = @client.send(:build_payload_hash, test_exception)[:details] - details = @client.send(:build_payload_hash, e)[:details] - - expected_hash = { - className: "ClientTest::TestException", - message: "A test message", - stackTrace: [ - { lineNumber: "123", fileName: "/some/folder/some_file.rb", methodName: "some_method_name" }, - { lineNumber: "1234", fileName: "/another/path/foo.rb", methodName: "block (3 levels) run" } - ] - } - - assert_equal expected_hash, details[:error] + assert_equal exception_hash, details[:error] end def test_filter_payload_with_whitelist_default_request_post Raygun.configuration.filter_payload_with_whitelist = true - e = TestException.new("A test message") - e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'", - "/another/path/foo.rb:1234:in `block (3 levels) run'"]) - post_body_env_hash = sample_env_hash.merge( + "REQUEST_METHOD" => "POST", "rack.input"=>StringIO.new("a=b&c=4945438&password=swordfish") ) - details = @client.send(:build_payload_hash, e, post_body_env_hash)[:details] + details = @client.send(:build_payload_hash, test_exception, post_body_env_hash)[:details] expected_hash = { hostName: "localhost", url: "/", httpMethod: "POST", iPAddress: "127.0.0.1", queryString: { }, - 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" }, + headers: { "Version"=>"HTTP/1.1", "Host"=>"localhost:3000", "Cookie"=>"cookieval" }, form: { "a" => "[FILTERED]", "c" => "[FILTERED]", "password" => "[FILTERED]" }, rawData: nil } assert_equal expected_hash, details[:request] @@ -583,76 +446,50 @@ username: true } ) Raygun.configuration.whitelist_payload_shape = shape - e = TestException.new("A test message") - e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'", - "/another/path/foo.rb:1234:in `block (3 levels) run'"]) - post_body_env_hash = sample_env_hash.merge( + "REQUEST_METHOD" => "POST", "rack.input"=>StringIO.new("username=foo&password=swordfish") ) - details = @client.send(:build_payload_hash, e, post_body_env_hash)[:details] + details = @client.send(:build_payload_hash, test_exception, post_body_env_hash)[:details] expected_hash = { hostName: "localhost", url: "/", httpMethod: "POST", iPAddress: "127.0.0.1", queryString: { }, - 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" }, + headers: { "Version"=>"HTTP/1.1", "Host"=>"localhost:3000", "Cookie"=>"cookieval" }, form: { "username" => "foo", "password" => "[FILTERED]" }, rawData: nil } assert_equal expected_hash, details[:request] end def test_filter_payload_with_whitelist_default_request_get Raygun.configuration.filter_payload_with_whitelist = true - e = TestException.new("A test message") - e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'", - "/another/path/foo.rb:1234:in `block (3 levels) run'"]) - - sample_env_hash = { - "SERVER_NAME"=>"localhost", - "REQUEST_METHOD"=>"GET", - "REQUEST_PATH"=>"/", - "PATH_INFO"=>"/", + env_hash = sample_env_hash.merge({ "QUERY_STRING"=>"a=b&c=4945438", "REQUEST_URI"=>"/?a=b&c=4945438", - "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" - } - + }) expected_hash = { hostName: "localhost", url: "/", httpMethod: "GET", iPAddress: "127.0.0.1", queryString: { "a" => "b", "c" => "4945438" }, - 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" }, + headers: { "Version"=>"HTTP/1.1", "Host"=>"localhost:3000", "Cookie"=>"cookieval" }, form: {}, rawData: {} } - details = @client.send(:build_payload_hash, e, sample_env_hash)[:details] + details = @client.send(:build_payload_hash, test_exception, env_hash)[:details] assert_equal expected_hash, details[:request] end def test_filter_payload_with_whitelist_default_request_get_except_querystring @@ -661,94 +498,45 @@ shape[:request] = Raygun::Configuration::DEFAULT_WHITELIST_PAYLOAD_SHAPE_REQUEST.dup.tap do |h| h.delete(:queryString) end Raygun.configuration.whitelist_payload_shape = shape - e = TestException.new("A test message") - e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'", - "/another/path/foo.rb:1234:in `block (3 levels) run'"]) - - sample_env_hash = { - "SERVER_NAME"=>"localhost", - "REQUEST_METHOD"=>"GET", - "REQUEST_PATH"=>"/", - "PATH_INFO"=>"/", - "QUERY_STRING"=>"a=b&c=4945438", - "REQUEST_URI"=>"/?a=b&c=4945438", - "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" - } - expected_hash = { hostName: "localhost", url: "/", httpMethod: "GET", iPAddress: "127.0.0.1", queryString: "[FILTERED]", - 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" }, + headers: { "Version"=>"HTTP/1.1", "Host"=>"localhost:3000", "Cookie"=>"cookieval" }, form: {}, rawData: {} } - details = @client.send(:build_payload_hash, e, sample_env_hash)[:details] + details = @client.send(:build_payload_hash, test_exception, sample_env_hash)[:details] assert_equal expected_hash, details[:request] end def test_filter_payload_with_whitelist_being_false_does_not_filter_query_string Raygun.configuration.filter_payload_with_whitelist = false - e = TestException.new("A test message") - e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'", - "/another/path/foo.rb:1234:in `block (3 levels) run'"]) - sample_env_hash = { - "SERVER_NAME"=>"localhost", - "REQUEST_METHOD"=>"GET", - "REQUEST_PATH"=>"/", - "PATH_INFO"=>"/", + env_hash = sample_env_hash.merge({ "QUERY_STRING"=>"a=b&c=4945438", "REQUEST_URI"=>"/?a=b&c=4945438", - "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" - } - + }) expected_hash = { hostName: "localhost", url: "/", httpMethod: "GET", iPAddress: "127.0.0.1", queryString: { "a" => "b", "c" => "4945438" }, - 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" }, + headers: { "Version"=>"HTTP/1.1", "Host"=>"localhost:3000", "Cookie"=>"cookieval" }, form: {}, rawData: {} } - details = @client.send(:build_payload_hash, e, sample_env_hash)[:details] + details = @client.send(:build_payload_hash, test_exception, env_hash)[:details] assert_equal expected_hash, details[:request] end def test_filter_payload_with_whitelist_request_specific_keys @@ -759,48 +547,70 @@ httpMethod: true, hostName: true } } - e = TestException.new("A test message") - e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'", - "/another/path/foo.rb:1234:in `block (3 levels) run'"]) + details = @client.send(:build_payload_hash, test_exception, sample_env_hash)[:details] - details = @client.send(:build_payload_hash, e, sample_env_hash)[:details] - expected_hash = { hostName: "localhost", url: "/", - httpMethod: "POST", + httpMethod: "GET", iPAddress: "[FILTERED]", queryString: "[FILTERED]", headers: "[FILTERED]", form: "[FILTERED]", rawData: "[FILTERED]" } assert_equal expected_hash, details[:request] end + def test_build_payload_hash_adds_affected_user_details_when_supplied_with_user + user = OpenStruct.new(id: '123', email: 'test@email.com', first_name: 'Taylor') + expected_details = { + :IsAnonymous => false, + :Identifier => '123', + :Email => 'test@email.com', + :FirstName => 'Taylor', + } + user_details = @client.send(:build_payload_hash, test_exception, sample_env_hash, user)[:details][:user] + + assert_equal expected_details, user_details + end + private + def test_exception + e = TestException.new + e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'", + "/another/path/foo.rb:1234:in `block (3 levels) run'"]) + + e + end + + def exception_hash + { + className: "ClientTest::TestException", + message: "A test message", + stackTrace: [ + { lineNumber: "123", fileName: "/some/folder/some_file.rb", methodName: "some_method_name" }, + { lineNumber: "1234", fileName: "/another/path/foo.rb", methodName: "block (3 levels) run"} + ] + } + end + def sample_env_hash { "SERVER_NAME"=>"localhost", - "REQUEST_METHOD"=>"POST", + "REQUEST_METHOD"=>"GET", "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"=>"",