@@ -198,7 +198,7 @@ describe('routing driver with stub server', () => {
198
198
// When
199
199
const session = driver . session ( neo4j . READ ) ;
200
200
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 ) ;
202
202
203
203
session . close ( ) ;
204
204
driver . close ( ) ;
@@ -562,8 +562,6 @@ describe('routing driver with stub server', () => {
562
562
// When
563
563
const session1 = driver . session ( neo4j . session . READ ) ;
564
564
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 ( ( ) => {
567
565
driver . close ( ) ;
568
566
seedServer . exit ( code1 => {
569
567
readServer . exit ( code2 => {
@@ -572,7 +570,6 @@ describe('routing driver with stub server', () => {
572
570
done ( ) ;
573
571
} ) ;
574
572
} ) ;
575
- } ) ;
576
573
} ) ;
577
574
} ) ;
578
575
} ) ;
@@ -592,8 +589,8 @@ describe('routing driver with stub server', () => {
592
589
const session = driver . session ( ) ;
593
590
session . run ( "MATCH (n) RETURN n.name" ) . catch ( err => {
594
591
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 , [ ] ) ;
597
594
session . close ( ) ;
598
595
driver . close ( ) ;
599
596
server . exit ( code => {
@@ -960,31 +957,31 @@ describe('routing driver with stub server', () => {
960
957
} ) ;
961
958
} ) ;
962
959
963
- it ( 'should throw protocol error when no records' , done => {
960
+ it ( 'should throw error when no records' , done => {
964
961
testForProtocolError ( './test/resources/boltstub/empty_get_servers_response.script' , done ) ;
965
962
} ) ;
966
963
967
- it ( 'should throw protocol error when no TTL entry' , done => {
964
+ it ( 'should throw error when no TTL entry' , done => {
968
965
testForProtocolError ( './test/resources/boltstub/no_ttl_entry_get_servers.script' , done ) ;
969
966
} ) ;
970
967
971
- it ( 'should throw protocol error when no servers entry' , done => {
968
+ it ( 'should throw error when no servers entry' , done => {
972
969
testForProtocolError ( './test/resources/boltstub/no_servers_entry_get_servers.script' , done ) ;
973
970
} ) ;
974
971
975
- it ( 'should throw protocol error when multiple records' , done => {
972
+ it ( 'should throw error when multiple records' , done => {
976
973
testForProtocolError ( './test/resources/boltstub/unparsable_ttl_get_servers.script' , done ) ;
977
974
} ) ;
978
975
979
- it ( 'should throw protocol error on unparsable record' , done => {
976
+ it ( 'should throw error on unparsable record' , done => {
980
977
testForProtocolError ( './test/resources/boltstub/unparsable_servers_get_servers.script' , done ) ;
981
978
} ) ;
982
979
983
- it ( 'should throw protocol error when no routers' , done => {
980
+ it ( 'should throw error when no routers' , done => {
984
981
testForProtocolError ( './test/resources/boltstub/no_routers_get_servers.script' , done ) ;
985
982
} ) ;
986
983
987
- it ( 'should throw protocol error when no readers' , done => {
984
+ it ( 'should throw error when no readers' , done => {
988
985
testForProtocolError ( './test/resources/boltstub/no_readers_get_servers.script' , done ) ;
989
986
} ) ;
990
987
@@ -2125,6 +2122,49 @@ describe('routing driver with stub server', () => {
2125
2122
} ) ;
2126
2123
} )
2127
2124
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
+
2128
2168
function testAddressPurgeOnDatabaseError ( query , accessMode , done ) {
2129
2169
if ( ! boltStub . supported ) {
2130
2170
done ( ) ;
@@ -2254,7 +2294,7 @@ describe('routing driver with stub server', () => {
2254
2294
2255
2295
const session = driver . session ( ) ;
2256
2296
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 ) ;
2258
2298
2259
2299
session . close ( ) ;
2260
2300
driver . close ( ) ;
0 commit comments