From 4ac844045898af544f61c9869bacaa73b7a08218 Mon Sep 17 00:00:00 2001 From: Pontus Melke Date: Mon, 16 May 2016 15:29:22 +0200 Subject: [PATCH] Better error message when connecting to http port --- neo4j/v1/connection.py | 9 ++++++++- test/test_session.py | 9 +++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/neo4j/v1/connection.py b/neo4j/v1/connection.py index cccdd26f9..670327bab 100644 --- a/neo4j/v1/connection.py +++ b/neo4j/v1/connection.py @@ -442,5 +442,12 @@ def connect(host, port=None, ssl_context=None, **config): if __debug__: log_info("~~ [CLOSE]") s.shutdown(SHUT_RDWR) s.close() - else: + elif agreed_version == 1: return Connection(s, der_encoded_server_certificate=der_encoded_server_certificate, **config) + elif agreed_version == 1213486160: + log_error("S: [CLOSE]") + raise ProtocolError("Server responded HTTP. Make sure you are not trying to connect to the http endpoint " + + "(HTTP defaults to port 7474 whereas BOLT defaults to port 7687)") + else: + log_error("S: [CLOSE]") + raise ProtocolError("Unknown Bolt protocol version: %d", agreed_version) diff --git a/test/test_session.py b/test/test_session.py index d421aafb3..400511b16 100644 --- a/test/test_session.py +++ b/test/test_session.py @@ -90,6 +90,15 @@ def test_sessions_are_not_reused_if_still_in_use(self): session_1.close() assert session_1 is not session_2 + def test_fail_nicely_when_connecting_to_http_port(self): + driver = GraphDatabase.driver("bolt://localhost:7474", auth=auth_token, encrypted=False) + with self.assertRaises(ProtocolError) as context: + driver.session() + + assert str(context.exception) == "Server responded HTTP. Make sure you are not trying to connect to the http " \ + "endpoint (HTTP defaults to port 7474 whereas BOLT defaults to port 7687)" + + class SecurityTestCase(ServerTestCase):