File tree Expand file tree Collapse file tree 2 files changed +30
-3
lines changed Expand file tree Collapse file tree 2 files changed +30
-3
lines changed Original file line number Diff line number Diff line change @@ -10,7 +10,7 @@ import {
10
10
ObjectCallback ,
11
11
UPDATE ,
12
12
} from './informer.js' ;
13
- import { KubernetesObject } from './types.js' ;
13
+ import { KubernetesObject , KubernetesListObject } from './types.js' ;
14
14
import { ObjectSerializer } from './serializer.js' ;
15
15
import { Watch } from './watch.js' ;
16
16
@@ -143,8 +143,14 @@ export class ListWatch implements ObjectCache, In
143
143
}
144
144
this . callbackCache [ CONNECT ] . forEach ( ( elt : ErrorCallback ) => elt ( undefined ) ) ;
145
145
if ( ! this . resourceVersion ) {
146
- const promise = this . listFn ( ) ;
147
- const list = await promise ;
146
+ let list : KubernetesListObject < T > ;
147
+ try {
148
+ const promise = this . listFn ( ) ;
149
+ list = await promise ;
150
+ } catch ( err ) {
151
+ this . callbackCache [ ERROR ] . forEach ( ( elt : ErrorCallback ) => elt ( err ) ) ;
152
+ return ;
153
+ }
148
154
this . objects = deleteItems ( this . objects , list . items , this . callbackCache [ DELETE ] . slice ( ) ) ;
149
155
this . addOrUpdateItems ( list . items ) ;
150
156
this . resourceVersion = list . metadata ! . resourceVersion || '' ;
Original file line number Diff line number Diff line change @@ -1460,4 +1460,25 @@ describe('delete items', () => {
1460
1460
1461
1461
strictEqual ( await connectPromise , true ) ;
1462
1462
} ) ;
1463
+
1464
+ it ( 'should correctly handle errors in the initial list' , async ( ) => {
1465
+ const fake = mock . mock ( Watch ) ;
1466
+ const requestErr = Error ( 'request failed' ) ;
1467
+ const listFn : ListPromise < V1Namespace > = function ( ) : Promise < V1NamespaceList > {
1468
+ return new Promise < V1NamespaceList > ( ( resolve , reject ) => {
1469
+ reject ( requestErr ) ;
1470
+ } ) ;
1471
+ } ;
1472
+ const lw = new ListWatch ( '/some/path' , fake , listFn ) ;
1473
+ let gotErr : Error | null = null ;
1474
+ const errCalled = new Promise < void > ( ( resolve , reject ) => {
1475
+ lw . on ( 'error' , ( err ) => {
1476
+ gotErr = err ;
1477
+ resolve ( ) ;
1478
+ } ) ;
1479
+ } ) ;
1480
+ await lw . start ( ) ;
1481
+ await errCalled ;
1482
+ strictEqual ( gotErr , requestErr ) ;
1483
+ } ) ;
1463
1484
} ) ;
You can’t perform that action at this time.
0 commit comments