Skip to content

Commit bb614b9

Browse files
committed
Added test for routing among several servers
1 parent 226de19 commit bb614b9

File tree

4 files changed

+103
-31
lines changed

4 files changed

+103
-31
lines changed

src/v1/routing-driver.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ function newClusterView(session) {
240240
if (e.code === 'Neo.ClientError.Procedure.ProcedureNotFound') {
241241
return Promise.reject(newError("Server could not perform routing, make sure you are connecting to a causal cluster", SERVICE_UNAVAILABLE));
242242
} else {
243-
return Promise.reject(newError("No servers could be found at this instant.", SERVICE_UNAVAILABLE));
243+
return Promise.reject(newError("No servers could be found at this instant.", SERVICE_UNAVAILABLE));
244244
}
245245
});
246246
}
+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
!: AUTO INIT
2+
!: AUTO RESET
3+
!: AUTO PULL_ALL
4+
5+
C: RUN "CALL dbms.cluster.routing.getServers" {}
6+
PULL_ALL
7+
S: SUCCESS {"fields": ["ttl", "servers"]}
8+
RECORD [0, [{"addresses": ["127.0.0.1:9007","127.0.0.1:9008"],"role": "WRITE"}, {"addresses": ["127.0.0.1:9004"], "role": "READ"},{"addresses": ["127.0.0.1:9001","127.0.0.1:9002","127.0.0.1:9003"], "role": "ROUTE"}]]
9+
SUCCESS {}

test/v1/examples.test.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ describe('examples', function() {
3333

3434
beforeAll(function () {
3535
var neo4j = neo4jv1;
36+
originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
37+
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
3638

3739
//tag::construct-driver[]
3840
var driver = neo4j.driver("bolt://localhost", neo4j.auth.basic("neo4j", "neo4j"));
@@ -41,8 +43,7 @@ describe('examples', function() {
4143
});
4244

4345
beforeEach(function(done) {
44-
originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
45-
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
46+
4647
// Override console.log, to assert on stdout output
4748
out = [];
4849
console = { log: function(msg) { out.push(msg); } };

test/v1/routing.driver.boltkit.it.js

+90-28
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,17 @@
1919

2020
var neo4j = require("../../lib/v1");
2121
var boltkit = require('./boltkit');
22-
describe('routing driver ', function() {
22+
describe('routing driver ', function () {
23+
var originalTimeout;
24+
25+
beforeAll(function(){
26+
originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
27+
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
28+
});
29+
30+
afterAll(function(){
31+
jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
32+
});
2333

2434
it('should discover server', function (done) {
2535
if (!boltkit.BoltKitSupport) {
@@ -34,21 +44,21 @@ describe('routing driver ', function() {
3444
var driver = neo4j.driver("bolt+routing://127.0.0.1:9001", neo4j.auth.basic("neo4j", "neo4j"));
3545
// When
3646
var session = driver.session();
37-
session.run("MATCH (n) RETURN n.name").then(function() {
47+
session.run("MATCH (n) RETURN n.name").then(function () {
3848

39-
session.close();
40-
// Then
41-
expect(driver._pool.has('127.0.0.1:9001')).toBeTruthy();
42-
expect(driver._clusterView.routers.toArray()).toEqual(["127.0.0.1:9001","127.0.0.1:9002","127.0.0.1:9003"]);
43-
expect(driver._clusterView.readers.toArray()).toEqual(["127.0.0.1:9002","127.0.0.1:9003"]);
44-
expect(driver._clusterView.writers.toArray()).toEqual(["127.0.0.1:9001"]);
49+
session.close();
50+
// Then
51+
expect(driver._pool.has('127.0.0.1:9001')).toBeTruthy();
52+
expect(driver._clusterView.routers.toArray()).toEqual(["127.0.0.1:9001", "127.0.0.1:9002", "127.0.0.1:9003"]);
53+
expect(driver._clusterView.readers.toArray()).toEqual(["127.0.0.1:9002", "127.0.0.1:9003"]);
54+
expect(driver._clusterView.writers.toArray()).toEqual(["127.0.0.1:9001"]);
4555

46-
driver.close();
47-
server.exit(function (code) {
48-
expect(code).toEqual(0);
49-
done();
50-
});
56+
driver.close();
57+
server.exit(function (code) {
58+
expect(code).toEqual(0);
59+
done();
5160
});
61+
});
5262
});
5363
});
5464

@@ -65,11 +75,11 @@ describe('routing driver ', function() {
6575
var driver = neo4j.driver("bolt+routing://127.0.0.1:9001", neo4j.auth.basic("neo4j", "neo4j"));
6676
// When
6777
var session = driver.session();
68-
session.run("MATCH (n) RETURN n.name").then(function() {
78+
session.run("MATCH (n) RETURN n.name").then(function () {
6979

7080
// Then
71-
expect(driver._clusterView.routers.toArray()).toEqual(["127.0.0.1:9004","127.0.0.1:9002","127.0.0.1:9003"]);
72-
expect(driver._clusterView.readers.toArray()).toEqual(["127.0.0.1:9005","127.0.0.1:9003"]);
81+
expect(driver._clusterView.routers.toArray()).toEqual(["127.0.0.1:9004", "127.0.0.1:9002", "127.0.0.1:9003"]);
82+
expect(driver._clusterView.readers.toArray()).toEqual(["127.0.0.1:9005", "127.0.0.1:9003"]);
7383
expect(driver._clusterView.writers.toArray()).toEqual(["127.0.0.1:9001"]);
7484

7585
driver.close();
@@ -135,7 +145,9 @@ describe('routing driver ', function() {
135145
expect(code).toEqual(0);
136146
done();
137147
});
138-
}).catch(function (err) {console.log(err)});
148+
}).catch(function (err) {
149+
console.log(err)
150+
});
139151
});
140152
});
141153

@@ -153,7 +165,7 @@ describe('routing driver ', function() {
153165
var driver = neo4j.driver("bolt+routing://127.0.0.1:9001", neo4j.auth.basic("neo4j", "neo4j"));
154166
// When
155167
var session = driver.session(neo4j.session.READ);
156-
session.run("MATCH (n) RETURN n.name").then(function(res) {
168+
session.run("MATCH (n) RETURN n.name").then(function (res) {
157169

158170
session.close();
159171

@@ -175,6 +187,56 @@ describe('routing driver ', function() {
175187
});
176188
});
177189

190+
fit('should pick first available route-server', function (done) {
191+
if (!boltkit.BoltKitSupport) {
192+
done();
193+
return;
194+
}
195+
// Given
196+
var kit = new boltkit.BoltKit();
197+
var seedServer = kit.start('./test/resources/boltkit/short_ttl.script', 9000);
198+
var nextRouter = kit.start('./test/resources/boltkit/acquire_endpoints.script', 9003);
199+
var readServer1 = kit.start('./test/resources/boltkit/read_server.script', 9004);
200+
var readServer2 = kit.start('./test/resources/boltkit/read_server.script', 9005);
201+
202+
kit.run(function () {
203+
var driver = neo4j.driver("bolt+routing://127.0.0.1:9000", neo4j.auth.basic("neo4j", "neo4j"));
204+
//driver.onError = console.log;
205+
// When
206+
var session = driver.session(neo4j.session.READ);
207+
session.run("MATCH (n) RETURN n.name").then(function (res) {
208+
// Then
209+
expect(res.records[0].get('n.name')).toEqual('Bob');
210+
expect(res.records[1].get('n.name')).toEqual('Alice');
211+
expect(res.records[2].get('n.name')).toEqual('Tina');
212+
session.close();
213+
214+
session = driver.session(neo4j.session.READ);
215+
session.run("MATCH (n) RETURN n.name").then(function (res) {
216+
// Then
217+
expect(res.records[0].get('n.name')).toEqual('Bob');
218+
expect(res.records[1].get('n.name')).toEqual('Alice');
219+
expect(res.records[2].get('n.name')).toEqual('Tina');
220+
session.close();
221+
driver.close();
222+
seedServer.exit(function (code1) {
223+
nextRouter.exit(function (code2) {
224+
readServer1.exit(function (code3) {
225+
readServer2.exit(function (code4) {
226+
expect(code1).toEqual(0);
227+
expect(code2).toEqual(0);
228+
expect(code3).toEqual(0);
229+
expect(code4).toEqual(0);
230+
done();
231+
});
232+
});
233+
});
234+
});
235+
});
236+
});
237+
});
238+
});
239+
178240
it('should round-robin among read servers', function (done) {
179241
if (!boltkit.BoltKitSupport) {
180242
done();
@@ -262,7 +324,7 @@ describe('routing driver ', function() {
262324
var driver = neo4j.driver("bolt+routing://127.0.0.1:9001", neo4j.auth.basic("neo4j", "neo4j"));
263325
// When
264326
var session = driver.session(neo4j.session.WRITE);
265-
session.run("CREATE (n {name:'Bob'})").then(function() {
327+
session.run("CREATE (n {name:'Bob'})").then(function () {
266328

267329
// Then
268330
driver.close();
@@ -354,7 +416,7 @@ describe('routing driver ', function() {
354416
var driver = neo4j.driver("bolt+routing://127.0.0.1:9001", neo4j.auth.basic("neo4j", "neo4j"));
355417
// When
356418
var session = driver.session(neo4j.session.READ);
357-
session.run("MATCH (n) RETURN n.name").then(function() {
419+
session.run("MATCH (n) RETURN n.name").then(function () {
358420

359421
// Then
360422
expect(driver._clusterView.routers.toArray()).toEqual(['127.0.0.1:9001', '127.0.0.1:9002', '127.0.0.1:9003']);
@@ -386,7 +448,7 @@ describe('routing driver ', function() {
386448
var driver = neo4j.driver("bolt+routing://127.0.0.1:9001", neo4j.auth.basic("neo4j", "neo4j"));
387449
// When
388450
var session = driver.session(neo4j.session.READ);
389-
session.run("MATCH (n) RETURN n.name").catch(function() {
451+
session.run("MATCH (n) RETURN n.name").catch(function () {
390452
session.close();
391453
// Then
392454
expect(driver._pool.has('127.0.0.1:9001')).toBeTruthy();
@@ -419,7 +481,7 @@ describe('routing driver ', function() {
419481
var driver = neo4j.driver("bolt+routing://127.0.0.1:9001", neo4j.auth.basic("neo4j", "neo4j"));
420482
// When
421483
var session = driver.session(neo4j.session.READ);
422-
session.run("MATCH (n) RETURN n.name").catch(function(err) {
484+
session.run("MATCH (n) RETURN n.name").catch(function (err) {
423485
session.close();
424486
// Then
425487
expect(driver._pool.has('127.0.0.1:9001')).toBeTruthy();
@@ -429,9 +491,9 @@ describe('routing driver ', function() {
429491
expect(driver._clusterView.writers.toArray()).toEqual(['127.0.0.1:9007', '127.0.0.1:9008']);
430492
driver.close();
431493
seedServer.exit(function (code) {
432-
expect(code).toEqual(0);
433-
done();
434-
});
494+
expect(code).toEqual(0);
495+
done();
496+
});
435497
});
436498
});
437499
});
@@ -483,7 +545,7 @@ describe('routing driver ', function() {
483545
expect(err.code).toEqual(neo4j.error.SERVICE_UNAVAILABLE);
484546
session.close();
485547
driver.close();
486-
server.exit(function(code) {
548+
server.exit(function (code) {
487549
expect(code).toEqual(0);
488550
done();
489551
});
@@ -507,7 +569,7 @@ describe('routing driver ', function() {
507569
var session = driver.session();
508570
session.run("CREATE ()").catch(function (err) {
509571
//the server at 9007 should have been removed
510-
expect(driver._clusterView.writers.toArray()).toEqual([ '127.0.0.1:9008']);
572+
expect(driver._clusterView.writers.toArray()).toEqual(['127.0.0.1:9008']);
511573
expect(err.code).toEqual(neo4j.error.SESSION_EXPIRED);
512574
session.close();
513575
driver.close();
@@ -541,7 +603,7 @@ describe('routing driver ', function() {
541603

542604
tx.commit().catch(function (err) {
543605
//the server at 9007 should have been removed
544-
expect(driver._clusterView.writers.toArray()).toEqual([ '127.0.0.1:9008']);
606+
expect(driver._clusterView.writers.toArray()).toEqual(['127.0.0.1:9008']);
545607
expect(err.code).toEqual(neo4j.error.SESSION_EXPIRED);
546608
session.close();
547609
driver.close();

0 commit comments

Comments
 (0)