@@ -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 ( ) ;
@@ -563,7 +563,7 @@ describe('routing driver with stub server', () => {
563
563
const session1 = driver . session ( neo4j . session . READ ) ;
564
564
session1 . run ( "MATCH (n) RETURN n.name" ) . catch ( ( ) => {
565
565
const session2 = driver . session ( neo4j . session . READ ) ;
566
- session2 . run ( " MATCH (n) RETURN n.name" ) . then ( ( ) => {
566
+ session2 . run ( ' MATCH (n) RETURN n.name' ) . then ( ( ) => {
567
567
driver . close ( ) ;
568
568
seedServer . exit ( code1 => {
569
569
readServer . exit ( code2 => {
@@ -592,8 +592,8 @@ describe('routing driver with stub server', () => {
592
592
const session = driver . session ( ) ;
593
593
session . run ( "MATCH (n) RETURN n.name" ) . catch ( err => {
594
594
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' ] ) ;
595
+ expect ( err . message ) . toContain ( 'Could not perform discovery' ) ;
596
+ assertHasRouters ( driver , [ ] ) ;
597
597
session . close ( ) ;
598
598
driver . close ( ) ;
599
599
server . exit ( code => {
@@ -960,31 +960,31 @@ describe('routing driver with stub server', () => {
960
960
} ) ;
961
961
} ) ;
962
962
963
- it ( 'should throw protocol error when no records' , done => {
963
+ it ( 'should throw error when no records' , done => {
964
964
testForProtocolError ( './test/resources/boltstub/empty_get_servers_response.script' , done ) ;
965
965
} ) ;
966
966
967
- it ( 'should throw protocol error when no TTL entry' , done => {
967
+ it ( 'should throw error when no TTL entry' , done => {
968
968
testForProtocolError ( './test/resources/boltstub/no_ttl_entry_get_servers.script' , done ) ;
969
969
} ) ;
970
970
971
- it ( 'should throw protocol error when no servers entry' , done => {
971
+ it ( 'should throw error when no servers entry' , done => {
972
972
testForProtocolError ( './test/resources/boltstub/no_servers_entry_get_servers.script' , done ) ;
973
973
} ) ;
974
974
975
- it ( 'should throw protocol error when multiple records' , done => {
975
+ it ( 'should throw error when multiple records' , done => {
976
976
testForProtocolError ( './test/resources/boltstub/unparsable_ttl_get_servers.script' , done ) ;
977
977
} ) ;
978
978
979
- it ( 'should throw protocol error on unparsable record' , done => {
979
+ it ( 'should throw error on unparsable record' , done => {
980
980
testForProtocolError ( './test/resources/boltstub/unparsable_servers_get_servers.script' , done ) ;
981
981
} ) ;
982
982
983
- it ( 'should throw protocol error when no routers' , done => {
983
+ it ( 'should throw error when no routers' , done => {
984
984
testForProtocolError ( './test/resources/boltstub/no_routers_get_servers.script' , done ) ;
985
985
} ) ;
986
986
987
- it ( 'should throw protocol error when no readers' , done => {
987
+ it ( 'should throw error when no readers' , done => {
988
988
testForProtocolError ( './test/resources/boltstub/no_readers_get_servers.script' , done ) ;
989
989
} ) ;
990
990
@@ -2125,6 +2125,49 @@ describe('routing driver with stub server', () => {
2125
2125
} ) ;
2126
2126
} )
2127
2127
2128
+ it ( 'should revert to initial router if the only known router returns invalid routing table' , done => {
2129
+ if ( ! boltStub . supported ) {
2130
+ done ( ) ;
2131
+ return ;
2132
+ }
2133
+
2134
+ // the first seed to get the routing table
2135
+ // the returned routing table includes a non-reachable read-server and points to only one router
2136
+ // which will return an invalid routing table
2137
+ const router1 = boltStub . start ( './test/resources/boltstub/acquire_endpoints_v3_point_to_empty_router_and_exit.script' , 9001 ) ;
2138
+ // returns an empty routing table
2139
+ const router2 = boltStub . start ( './test/resources/boltstub/acquire_endpoints_v3_empty.script' , 9004 ) ;
2140
+ // returns a normal routing table
2141
+ const router3 = boltStub . start ( './test/resources/boltstub/acquire_endpoints_v3_three_servers_and_exit.script' , 9003 ) ;
2142
+ // ordinary read server
2143
+ const reader = boltStub . start ( './test/resources/boltstub/read_server_v3_read_tx.script' , 9002 ) ;
2144
+
2145
+ boltStub . run ( ( ) => {
2146
+ const driver = boltStub . newDriver ( 'bolt+routing://my.virtual.host:8080' , {
2147
+ resolver : address => [ '127.0.0.1:9001' , '127.0.0.1:9003' ]
2148
+ } ) ;
2149
+
2150
+ const session = driver . session ( neo4j . session . READ ) ;
2151
+ session . readTransaction ( tx => tx . run ( 'MATCH (n) RETURN n.name' ) ) . then ( res => {
2152
+ session . close ( ) ;
2153
+ driver . close ( ) ;
2154
+ router1 . exit ( code1 => {
2155
+ router2 . exit ( code2 => {
2156
+ router3 . exit ( code3 => {
2157
+ reader . exit ( code4 => {
2158
+ expect ( code1 ) . toEqual ( 0 ) ;
2159
+ expect ( code2 ) . toEqual ( 0 ) ;
2160
+ expect ( code3 ) . toEqual ( 0 ) ;
2161
+ expect ( code4 ) . toEqual ( 0 ) ;
2162
+ done ( ) ;
2163
+ } ) ;
2164
+ } ) ;
2165
+ } ) ;
2166
+ } ) ;
2167
+ } ) . catch ( error => done . fail ( error ) ) ;
2168
+ } ) ;
2169
+ } ) ;
2170
+
2128
2171
function testAddressPurgeOnDatabaseError ( query , accessMode , done ) {
2129
2172
if ( ! boltStub . supported ) {
2130
2173
done ( ) ;
@@ -2254,7 +2297,7 @@ describe('routing driver with stub server', () => {
2254
2297
2255
2298
const session = driver . session ( ) ;
2256
2299
session . run ( 'MATCH (n) RETURN n.name' ) . catch ( error => {
2257
- expect ( error . code ) . toEqual ( neo4j . error . PROTOCOL_ERROR ) ;
2300
+ expect ( error . code ) . toEqual ( neo4j . error . SERVICE_UNAVAILABLE ) ;
2258
2301
2259
2302
session . close ( ) ;
2260
2303
driver . close ( ) ;
0 commit comments