1919
2020var neo4j = require ( "../../lib/v1" ) ;
2121var 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+ it ( '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