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