@@ -6,7 +6,7 @@ const { createServer } = require('node:http')
6
6
const { once } = require ( 'node:events' )
7
7
8
8
const { Client, interceptors } = require ( '../..' )
9
- const { retry, redirect } = interceptors
9
+ const { retry, redirect, dns } = interceptors
10
10
11
11
test ( 'Should retry status code' , async t => {
12
12
t = tspl ( t , { plan : 4 } )
@@ -74,6 +74,49 @@ test('Should retry status code', async t => {
74
74
t . equal ( await response . body . text ( ) , 'hello world!' )
75
75
} )
76
76
77
+ test ( 'Should retry on error code' , async t => {
78
+ t = tspl ( t , { plan : 2 } )
79
+
80
+ let counter = 0
81
+ const retryOptions = {
82
+ retry : ( err , _state , done ) => {
83
+ if ( counter < 5 ) {
84
+ counter ++
85
+ setTimeout ( done , 500 )
86
+ } else {
87
+ done ( err )
88
+ }
89
+ } ,
90
+ maxRetries : 5
91
+ }
92
+ const requestOptions = {
93
+ origin : 'http://localhost:123' ,
94
+ method : 'GET' ,
95
+ path : '/' ,
96
+ headers : {
97
+ 'content-type' : 'application/json'
98
+ }
99
+ }
100
+
101
+ const client = new Client (
102
+ 'http://localhost:123'
103
+ ) . compose ( dns ( {
104
+ lookup : ( _h , _o , cb ) => {
105
+ const error = new Error ( 'ENOTFOUND' )
106
+ error . code = 'ENOTFOUND'
107
+
108
+ cb ( error )
109
+ }
110
+ } ) , retry ( retryOptions ) )
111
+
112
+ after ( async ( ) => {
113
+ await client . close ( )
114
+ } )
115
+
116
+ await t . rejects ( client . request ( requestOptions ) , { code : 'ENOTFOUND' } )
117
+ t . equal ( counter , 5 )
118
+ } )
119
+
77
120
test ( 'Should use retry-after header for retries' , async t => {
78
121
t = tspl ( t , { plan : 3 } )
79
122
0 commit comments