@@ -466,6 +466,7 @@ describe("Consumer", () => {
466
466
"Unexpected message handler failure: Processing error" ,
467
467
) ;
468
468
assert . equal ( message . MessageId , "123" ) ;
469
+ assert . deepEqual ( ( err as any ) . messageIds , [ "123" ] ) ;
469
470
} ) ;
470
471
471
472
it ( "fires an `error` event when an `SQSError` occurs processing a message" , async ( ) => {
@@ -1674,6 +1675,8 @@ describe("Consumer", () => {
1674
1675
1675
1676
assert . ok ( err ) ;
1676
1677
assert . equal ( err . message , "Error changing visibility timeout: failed" ) ;
1678
+ assert . equal ( err . queueUrl , QUEUE_URL ) ;
1679
+ assert . deepEqual ( err . messageIds , [ "1" ] ) ;
1677
1680
} ) ;
1678
1681
1679
1682
it ( "emit error when changing visibility timeout fails for batch handler functions" , async ( ) => {
@@ -1706,6 +1709,156 @@ describe("Consumer", () => {
1706
1709
1707
1710
assert . ok ( err ) ;
1708
1711
assert . equal ( err . message , "Error changing visibility timeout: failed" ) ;
1712
+ assert . equal ( err . queueUrl , QUEUE_URL ) ;
1713
+ assert . deepEqual ( err . messageIds , [ "1" , "2" ] ) ;
1714
+ } ) ;
1715
+
1716
+ it ( "includes messageIds in timeout errors" , async ( ) => {
1717
+ const handleMessageTimeout = 500 ;
1718
+ consumer = new Consumer ( {
1719
+ queueUrl : QUEUE_URL ,
1720
+ region : REGION ,
1721
+ handleMessage : ( ) =>
1722
+ new Promise ( ( resolve ) => setTimeout ( resolve , 1000 ) ) ,
1723
+ handleMessageTimeout,
1724
+ sqs,
1725
+ authenticationErrorTimeout : AUTHENTICATION_ERROR_TIMEOUT ,
1726
+ } ) ;
1727
+
1728
+ consumer . start ( ) ;
1729
+ const [ err ] : any = await Promise . all ( [
1730
+ pEvent ( consumer , "timeout_error" ) ,
1731
+ clock . tickAsync ( handleMessageTimeout ) ,
1732
+ ] ) ;
1733
+ consumer . stop ( ) ;
1734
+
1735
+ assert . ok ( err ) ;
1736
+ assert . equal (
1737
+ err . message ,
1738
+ `Message handler timed out after ${ handleMessageTimeout } ms: Operation timed out.` ,
1739
+ ) ;
1740
+ assert . deepEqual ( err . messageIds , [ "123" ] ) ;
1741
+ } ) ;
1742
+
1743
+ it ( "includes messageIds in batch processing errors" , async ( ) => {
1744
+ sqs . send . withArgs ( mockReceiveMessage ) . resolves ( {
1745
+ Messages : [
1746
+ { MessageId : "1" , ReceiptHandle : "receipt-handle-1" , Body : "body-1" } ,
1747
+ { MessageId : "2" , ReceiptHandle : "receipt-handle-2" , Body : "body-2" } ,
1748
+ ] ,
1749
+ } ) ;
1750
+
1751
+ consumer = new Consumer ( {
1752
+ queueUrl : QUEUE_URL ,
1753
+ region : REGION ,
1754
+ handleMessageBatch : ( ) => {
1755
+ throw new Error ( "Batch processing error" ) ;
1756
+ } ,
1757
+ batchSize : 2 ,
1758
+ sqs,
1759
+ authenticationErrorTimeout : AUTHENTICATION_ERROR_TIMEOUT ,
1760
+ } ) ;
1761
+
1762
+ consumer . start ( ) ;
1763
+ const [ err ] : any = await Promise . all ( [
1764
+ pEvent ( consumer , "error" ) ,
1765
+ clock . tickAsync ( 100 ) ,
1766
+ ] ) ;
1767
+ consumer . stop ( ) ;
1768
+
1769
+ assert . ok ( err ) ;
1770
+ assert . equal (
1771
+ err . message ,
1772
+ "Unexpected message handler failure: Batch processing error" ,
1773
+ ) ;
1774
+ assert . deepEqual ( err . messageIds , [ "1" , "2" ] ) ;
1775
+ } ) ;
1776
+
1777
+ it ( "includes queueUrl and messageIds in SQS errors when deleting message" , async ( ) => {
1778
+ const deleteErr = new Error ( "Delete error" ) ;
1779
+ deleteErr . name = "SQSError" ;
1780
+
1781
+ handleMessage . resolves ( null ) ;
1782
+ sqs . send . withArgs ( mockDeleteMessage ) . rejects ( deleteErr ) ;
1783
+
1784
+ consumer . start ( ) ;
1785
+ const [ err ] : any = await Promise . all ( [
1786
+ pEvent ( consumer , "error" ) ,
1787
+ clock . tickAsync ( 100 ) ,
1788
+ ] ) ;
1789
+ consumer . stop ( ) ;
1790
+
1791
+ assert . ok ( err ) ;
1792
+ assert . equal ( err . message , "SQS delete message failed: Delete error" ) ;
1793
+ assert . equal ( err . queueUrl , QUEUE_URL ) ;
1794
+ assert . deepEqual ( err . messageIds , [ "123" ] ) ;
1795
+ } ) ;
1796
+
1797
+ it ( "includes queueUrl and messageIds in SQS errors when changing visibility timeout" , async ( ) => {
1798
+ sqs . send . withArgs ( mockReceiveMessage ) . resolves ( {
1799
+ Messages : [
1800
+ { MessageId : "1" , ReceiptHandle : "receipt-handle-1" , Body : "body-1" } ,
1801
+ ] ,
1802
+ } ) ;
1803
+ consumer = new Consumer ( {
1804
+ queueUrl : QUEUE_URL ,
1805
+ region : REGION ,
1806
+ handleMessage : ( ) =>
1807
+ new Promise ( ( resolve ) => setTimeout ( resolve , 75000 ) ) ,
1808
+ sqs,
1809
+ visibilityTimeout : 40 ,
1810
+ heartbeatInterval : 30 ,
1811
+ } ) ;
1812
+
1813
+ const receiveErr = new MockSQSError ( "failed" ) ;
1814
+ sqs . send . withArgs ( mockChangeMessageVisibility ) . rejects ( receiveErr ) ;
1815
+
1816
+ consumer . start ( ) ;
1817
+ const [ err ] : any = await Promise . all ( [
1818
+ pEvent ( consumer , "error" ) ,
1819
+ clock . tickAsync ( 75000 ) ,
1820
+ ] ) ;
1821
+ consumer . stop ( ) ;
1822
+
1823
+ assert . ok ( err ) ;
1824
+ assert . equal ( err . message , "Error changing visibility timeout: failed" ) ;
1825
+ assert . equal ( err . queueUrl , QUEUE_URL ) ;
1826
+ assert . deepEqual ( err . messageIds , [ "1" ] ) ;
1827
+ } ) ;
1828
+
1829
+ it ( "includes queueUrl and messageIds in batch SQS errors" , async ( ) => {
1830
+ sqs . send . withArgs ( mockReceiveMessage ) . resolves ( {
1831
+ Messages : [
1832
+ { MessageId : "1" , ReceiptHandle : "receipt-handle-1" , Body : "body-1" } ,
1833
+ { MessageId : "2" , ReceiptHandle : "receipt-handle-2" , Body : "body-2" } ,
1834
+ ] ,
1835
+ } ) ;
1836
+
1837
+ consumer = new Consumer ( {
1838
+ queueUrl : QUEUE_URL ,
1839
+ region : REGION ,
1840
+ handleMessageBatch : ( ) =>
1841
+ new Promise ( ( resolve ) => setTimeout ( resolve , 75000 ) ) ,
1842
+ sqs,
1843
+ batchSize : 2 ,
1844
+ visibilityTimeout : 40 ,
1845
+ heartbeatInterval : 30 ,
1846
+ } ) ;
1847
+
1848
+ const receiveErr = new MockSQSError ( "failed" ) ;
1849
+ sqs . send . withArgs ( mockChangeMessageVisibilityBatch ) . rejects ( receiveErr ) ;
1850
+
1851
+ consumer . start ( ) ;
1852
+ const [ err ] : any = await Promise . all ( [
1853
+ pEvent ( consumer , "error" ) ,
1854
+ clock . tickAsync ( 75000 ) ,
1855
+ ] ) ;
1856
+ consumer . stop ( ) ;
1857
+
1858
+ assert . ok ( err ) ;
1859
+ assert . equal ( err . message , "Error changing visibility timeout: failed" ) ;
1860
+ assert . equal ( err . queueUrl , QUEUE_URL ) ;
1861
+ assert . deepEqual ( err . messageIds , [ "1" , "2" ] ) ;
1709
1862
} ) ;
1710
1863
} ) ;
1711
1864
0 commit comments