diff --git a/src/v1/driver.js b/src/v1/driver.js index bca4985ab..934048071 100644 --- a/src/v1/driver.js +++ b/src/v1/driver.js @@ -72,7 +72,7 @@ class Driver { let conn = connect(url, this._config); conn.initialize(this._userAgent, this._token, streamObserver); conn._id = sessionId; - conn._release = () => release(this._url, conn); + conn._release = () => release(url, conn); this._openSessions[sessionId] = conn; return conn; diff --git a/test/resources/boltkit/single_write_server.script b/test/resources/boltkit/single_write_server.script new file mode 100644 index 000000000..61da0193f --- /dev/null +++ b/test/resources/boltkit/single_write_server.script @@ -0,0 +1,9 @@ +!: AUTO INIT +!: AUTO RESET +!: AUTO PULL_ALL + +C: RUN "CALL dbms.cluster.routing.getServers" {} + PULL_ALL +S: SUCCESS {"fields": ["ttl", "servers"]} + RECORD [9223372036854775807, [{"addresses": ["127.0.0.1:9001"],"role": "WRITE"}, {"addresses": ["127.0.0.1:9005","127.0.0.1:9003"], "role": "READ"},{"addresses": ["127.0.0.1:9004","127.0.0.1:9002","127.0.0.1:9003"], "role": "ROUTE"}]] + SUCCESS {} diff --git a/test/resources/boltkit/two_write_responses_server.script b/test/resources/boltkit/two_write_responses_server.script new file mode 100644 index 000000000..8e2e381f1 --- /dev/null +++ b/test/resources/boltkit/two_write_responses_server.script @@ -0,0 +1,12 @@ +!: AUTO INIT +!: AUTO RESET +!: AUTO PULL_ALL + +C: RUN "CREATE (n {name:'Bob'})" {} + PULL_ALL +S: SUCCESS {} + SUCCESS {} +C: RUN "CREATE ()" {} + PULL_ALL +S: SUCCESS {} + SUCCESS {} diff --git a/test/v1/routing.driver.boltkit.it.js b/test/v1/routing.driver.boltkit.it.js index 2cc813ba1..76277ac38 100644 --- a/test/v1/routing.driver.boltkit.it.js +++ b/test/v1/routing.driver.boltkit.it.js @@ -640,5 +640,37 @@ describe('routing driver ', function () { }); }); }); -}); + it('should re-use connections', function (done) { + if (!boltkit.BoltKitSupport) { + done(); + return; + } + // Given + var kit = new boltkit.BoltKit(); + var seedServer = kit.start('./test/resources/boltkit/single_write_server.script', 9002); + var writeServer = kit.start('./test/resources/boltkit/two_write_responses_server.script', 9001); + kit.run(function () { + var driver = neo4j.driver("bolt+routing://127.0.0.1:9002", neo4j.auth.basic("neo4j", "neo4j")); + // When + var session = driver.session(neo4j.session.WRITE); + session.run("CREATE (n {name:'Bob'})").then(function () { + session.close(function() { + var connections = Object.keys(driver._openSessions).length + session = driver.session(neo4j.session.WRITE); + session.run("CREATE ()").then(function () { + driver.close(); + seedServer.exit(function (code1) { + writeServer.exit(function (code2) { + expect(connections).toEqual(Object.keys(driver._openSessions).length) + expect(code1).toEqual(0); + expect(code2).toEqual(0); + done(); + }); + }); + }); + }); + }); + }); + }); +});