@@ -198,7 +198,7 @@ describe('routing driver with stub server', () => {
198198 // When
199199 const session = driver . session ( neo4j . READ ) ;
200200 session . run ( "MATCH (n) RETURN n.name" ) . catch ( err => {
201- expect ( err . code ) . toEqual ( neo4j . error . PROTOCOL_ERROR ) ;
201+ expect ( err . code ) . toEqual ( neo4j . error . SERVICE_UNAVAILABLE ) ;
202202
203203 session . close ( ) ;
204204 driver . close ( ) ;
@@ -562,8 +562,6 @@ describe('routing driver with stub server', () => {
562562 // When
563563 const session1 = driver . session ( neo4j . session . READ ) ;
564564 session1 . run ( "MATCH (n) RETURN n.name" ) . catch ( ( ) => {
565- const session2 = driver . session ( neo4j . session . READ ) ;
566- session2 . run ( "MATCH (n) RETURN n.name" ) . then ( ( ) => {
567565 driver . close ( ) ;
568566 seedServer . exit ( code1 => {
569567 readServer . exit ( code2 => {
@@ -572,7 +570,6 @@ describe('routing driver with stub server', () => {
572570 done ( ) ;
573571 } ) ;
574572 } ) ;
575- } ) ;
576573 } ) ;
577574 } ) ;
578575 } ) ;
@@ -592,8 +589,8 @@ describe('routing driver with stub server', () => {
592589 const session = driver . session ( ) ;
593590 session . run ( "MATCH (n) RETURN n.name" ) . catch ( err => {
594591 expect ( err . code ) . toEqual ( neo4j . error . SERVICE_UNAVAILABLE ) ;
595- expect ( err . message . indexOf ( 'Make sure you are connecting to a causal cluster' ) > 0 ) . toBeTruthy ( ) ;
596- assertHasRouters ( driver , [ '127.0.0.1:9001' ] ) ;
592+ expect ( err . message ) . toContain ( 'Could not perform discovery' ) ;
593+ assertHasRouters ( driver , [ ] ) ;
597594 session . close ( ) ;
598595 driver . close ( ) ;
599596 server . exit ( code => {
@@ -960,31 +957,31 @@ describe('routing driver with stub server', () => {
960957 } ) ;
961958 } ) ;
962959
963- it ( 'should throw protocol error when no records' , done => {
960+ it ( 'should throw error when no records' , done => {
964961 testForProtocolError ( './test/resources/boltstub/empty_get_servers_response.script' , done ) ;
965962 } ) ;
966963
967- it ( 'should throw protocol error when no TTL entry' , done => {
964+ it ( 'should throw error when no TTL entry' , done => {
968965 testForProtocolError ( './test/resources/boltstub/no_ttl_entry_get_servers.script' , done ) ;
969966 } ) ;
970967
971- it ( 'should throw protocol error when no servers entry' , done => {
968+ it ( 'should throw error when no servers entry' , done => {
972969 testForProtocolError ( './test/resources/boltstub/no_servers_entry_get_servers.script' , done ) ;
973970 } ) ;
974971
975- it ( 'should throw protocol error when multiple records' , done => {
972+ it ( 'should throw error when multiple records' , done => {
976973 testForProtocolError ( './test/resources/boltstub/unparsable_ttl_get_servers.script' , done ) ;
977974 } ) ;
978975
979- it ( 'should throw protocol error on unparsable record' , done => {
976+ it ( 'should throw error on unparsable record' , done => {
980977 testForProtocolError ( './test/resources/boltstub/unparsable_servers_get_servers.script' , done ) ;
981978 } ) ;
982979
983- it ( 'should throw protocol error when no routers' , done => {
980+ it ( 'should throw error when no routers' , done => {
984981 testForProtocolError ( './test/resources/boltstub/no_routers_get_servers.script' , done ) ;
985982 } ) ;
986983
987- it ( 'should throw protocol error when no readers' , done => {
984+ it ( 'should throw error when no readers' , done => {
988985 testForProtocolError ( './test/resources/boltstub/no_readers_get_servers.script' , done ) ;
989986 } ) ;
990987
@@ -2125,6 +2122,49 @@ describe('routing driver with stub server', () => {
21252122 } ) ;
21262123 } )
21272124
2125+ it ( 'should revert to initial router if the only known router returns invalid routing table' , done => {
2126+ if ( ! boltStub . supported ) {
2127+ done ( ) ;
2128+ return ;
2129+ }
2130+
2131+ // the first seed to get the routing table
2132+ // the returned routing table includes a non-reachable read-server and points to only one router
2133+ // which will return an invalid routing table
2134+ const seedServer1 = boltStub . start ( './test/resources/boltstub/acquire_endpoints_v3_point_to_empty_router.script' , 9001 ) ;
2135+ // returns an empty routing table
2136+ const failingSeedServer2 = boltStub . start ( './test/resources/boltstub/acquire_endpoints_v3_empty.script' , 9004 ) ;
2137+ // returns a normal routing table
2138+ const seedServer3 = boltStub . start ( './test/resources/boltstub/acquire_endpoints_v3_three_servers.script' , 9003 ) ;
2139+ // ordinary read server
2140+ const readServer = boltStub . start ( './test/resources/boltstub/read_server_v3_read_tx.script' , 9002 ) ;
2141+
2142+ boltStub . run ( ( ) => {
2143+ const driver = boltStub . newDriver ( 'bolt+routing://my.virtual.host:8080' , {
2144+ resolver : address => [ '127.0.0.1:9001' , '127.0.0.1:9003' ]
2145+ } ) ;
2146+
2147+ const session = driver . session ( neo4j . session . READ ) ;
2148+ session . readTransaction ( tx => tx . run ( 'MATCH (n) RETURN n.name' ) ) . then ( res => {
2149+ session . close ( ) ;
2150+ driver . close ( ) ;
2151+ seedServer1 . exit ( code1 => {
2152+ failingSeedServer2 . exit ( code2 => {
2153+ seedServer3 . exit ( code3 => {
2154+ readServer . exit ( code4 => {
2155+ expect ( code1 ) . toEqual ( 0 ) ;
2156+ expect ( code2 ) . toEqual ( 0 ) ;
2157+ expect ( code3 ) . toEqual ( 0 ) ;
2158+ expect ( code4 ) . toEqual ( 0 ) ;
2159+ done ( ) ;
2160+ } ) ;
2161+ } ) ;
2162+ } ) ;
2163+ } ) ;
2164+ } ) . catch ( error => done . fail ( error ) ) ;
2165+ } ) ;
2166+ } ) ;
2167+
21282168 function testAddressPurgeOnDatabaseError ( query , accessMode , done ) {
21292169 if ( ! boltStub . supported ) {
21302170 done ( ) ;
@@ -2254,7 +2294,7 @@ describe('routing driver with stub server', () => {
22542294
22552295 const session = driver . session ( ) ;
22562296 session . run ( 'MATCH (n) RETURN n.name' ) . catch ( error => {
2257- expect ( error . code ) . toEqual ( neo4j . error . PROTOCOL_ERROR ) ;
2297+ expect ( error . code ) . toEqual ( neo4j . error . SERVICE_UNAVAILABLE ) ;
22582298
22592299 session . close ( ) ;
22602300 driver . close ( ) ;
0 commit comments