@@ -1493,6 +1493,80 @@ describe('#unit RoutingConnectionProvider', () => {
1493
1493
expect ( error ) . toBe ( expectedError )
1494
1494
} )
1495
1495
1496
+ it ( 'should purge connections for address when TokenExpired happens' , async ( ) => {
1497
+ const pool = newPool ( )
1498
+
1499
+ jest . spyOn ( pool , 'purge' )
1500
+
1501
+ const connectionProvider = newRoutingConnectionProvider (
1502
+ [
1503
+ newRoutingTable (
1504
+ null ,
1505
+ [ server1 , server2 ] ,
1506
+ [ server3 , server2 ] ,
1507
+ [ server2 , server4 ]
1508
+ )
1509
+ ] ,
1510
+ pool
1511
+ )
1512
+
1513
+ const error = newError (
1514
+ 'Message' ,
1515
+ 'Neo.ClientError.Security.TokenExpired'
1516
+ )
1517
+
1518
+ const server2Connection = await connectionProvider . acquireConnection ( {
1519
+ accessMode : 'WRITE' ,
1520
+ database : null
1521
+ } )
1522
+
1523
+ const server3Connection = await connectionProvider . acquireConnection ( {
1524
+ accessMode : 'READ' ,
1525
+ database : null
1526
+ } )
1527
+
1528
+ server3Connection . handleAndTransformError ( error , server3 )
1529
+ server2Connection . handleAndTransformError ( error , server2 )
1530
+
1531
+ expect ( pool . purge ) . toHaveBeenCalledWith ( server3 )
1532
+ expect ( pool . purge ) . toHaveBeenCalledWith ( server2 )
1533
+ } )
1534
+
1535
+ it ( 'should not change error when TokenExpired happens' , async ( ) => {
1536
+ const pool = newPool ( )
1537
+
1538
+ jest . spyOn ( pool , 'purge' )
1539
+
1540
+ const connectionProvider = newRoutingConnectionProvider (
1541
+ [
1542
+ newRoutingTable (
1543
+ null ,
1544
+ [ server1 , server2 ] ,
1545
+ [ server3 , server2 ] ,
1546
+ [ server2 , server4 ]
1547
+ )
1548
+ ] ,
1549
+ pool
1550
+ )
1551
+
1552
+ const expectedError = newError (
1553
+ 'Message' ,
1554
+ 'Neo.ClientError.Security.TokenExpired'
1555
+ )
1556
+
1557
+ const server2Connection = await connectionProvider . acquireConnection ( {
1558
+ accessMode : 'WRITE' ,
1559
+ database : null
1560
+ } )
1561
+
1562
+ const error = server2Connection . handleAndTransformError (
1563
+ expectedError ,
1564
+ server2
1565
+ )
1566
+
1567
+ expect ( error ) . toBe ( expectedError )
1568
+ } )
1569
+
1496
1570
it ( 'should use resolved seed router after accepting table with no writers' , done => {
1497
1571
const routingTable1 = newRoutingTable (
1498
1572
null ,
@@ -1674,6 +1748,80 @@ describe('#unit RoutingConnectionProvider', () => {
1674
1748
expect ( error ) . toBe ( expectedError )
1675
1749
} )
1676
1750
1751
+ it ( 'should purge connections for address when TokenExpired happens' , async ( ) => {
1752
+ const pool = newPool ( )
1753
+
1754
+ jest . spyOn ( pool , 'purge' )
1755
+
1756
+ const connectionProvider = newRoutingConnectionProvider (
1757
+ [
1758
+ newRoutingTable (
1759
+ 'databaseA' ,
1760
+ [ server1 , server2 ] ,
1761
+ [ server1 ] ,
1762
+ [ server2 ]
1763
+ ) ,
1764
+ newRoutingTable ( 'databaseB' , [ serverA , serverB ] , [ serverA ] , [ serverB ] )
1765
+ ] ,
1766
+ pool
1767
+ )
1768
+
1769
+ const error = newError (
1770
+ 'Message' ,
1771
+ 'Neo.ClientError.Security.TokenExpired'
1772
+ )
1773
+
1774
+ const server2Connection = await connectionProvider . acquireConnection ( {
1775
+ accessMode : 'WRITE' ,
1776
+ database : 'databaseA'
1777
+ } )
1778
+
1779
+ const serverAConnection = await connectionProvider . acquireConnection ( {
1780
+ accessMode : 'READ' ,
1781
+ database : 'databaseB'
1782
+ } )
1783
+
1784
+ serverAConnection . handleAndTransformError ( error , serverA )
1785
+ server2Connection . handleAndTransformError ( error , server2 )
1786
+
1787
+ expect ( pool . purge ) . toHaveBeenCalledWith ( serverA )
1788
+ expect ( pool . purge ) . toHaveBeenCalledWith ( server2 )
1789
+ } )
1790
+
1791
+ it ( 'should not change error when TokenExpired happens' , async ( ) => {
1792
+ const pool = newPool ( )
1793
+
1794
+ const connectionProvider = newRoutingConnectionProvider (
1795
+ [
1796
+ newRoutingTable (
1797
+ 'databaseA' ,
1798
+ [ server1 , server2 ] ,
1799
+ [ server1 ] ,
1800
+ [ server2 ]
1801
+ ) ,
1802
+ newRoutingTable ( 'databaseB' , [ serverA , serverB ] , [ serverA ] , [ serverB ] )
1803
+ ] ,
1804
+ pool
1805
+ )
1806
+
1807
+ const expectedError = newError (
1808
+ 'Message' ,
1809
+ 'Neo.ClientError.Security.TokenExpired'
1810
+ )
1811
+
1812
+ const server2Connection = await connectionProvider . acquireConnection ( {
1813
+ accessMode : 'WRITE' ,
1814
+ database : 'databaseA'
1815
+ } )
1816
+
1817
+ const error = server2Connection . handleAndTransformError (
1818
+ expectedError ,
1819
+ server2
1820
+ )
1821
+
1822
+ expect ( error ) . toBe ( expectedError )
1823
+ } )
1824
+
1677
1825
it ( 'should acquire write connection from correct routing table' , async ( ) => {
1678
1826
const pool = newPool ( )
1679
1827
const connectionProvider = newRoutingConnectionProvider (
0 commit comments