@@ -235,6 +235,7 @@ describe('ListWatchCache', () => {
235
235
watchHandler ( 'ADDED' , {
236
236
metadata : {
237
237
name : 'name3' ,
238
+ resourceVersion : 'blah' ,
238
239
} as V1ObjectMeta ,
239
240
} as V1Namespace ) ;
240
241
@@ -245,40 +246,28 @@ describe('ListWatchCache', () => {
245
246
} as V1ObjectMeta ,
246
247
} as V1Namespace ) ;
247
248
248
- watchHandler (
249
- 'DELETED' ,
250
- {
251
- metadata : {
252
- name : 'name2' ,
253
- resourceVersion : 'blah' ,
254
- } as V1ObjectMeta ,
255
- } as V1Namespace ,
256
- {
257
- metadata : {
258
- resourceVersion : '54321' ,
259
- } ,
260
- } ,
261
- ) ;
249
+ watchHandler ( 'DELETED' , {
250
+ metadata : {
251
+ name : 'name2' ,
252
+ resourceVersion : '54321' ,
253
+ } as V1ObjectMeta ,
254
+ } as V1Namespace ) ;
262
255
263
256
const [ addResult , updateResult , deleteResult ] = await Promise . all ( [
264
257
addPromise ,
265
258
updatePromise ,
266
259
deletePromise ,
267
260
] ) ;
268
- deepStrictEqual ( addResult . metadata , { name : 'name3' } ) ;
261
+ deepStrictEqual ( addResult . metadata , { name : 'name3' , resourceVersion : 'blah' } ) ;
269
262
deepStrictEqual ( updateResult . metadata , { name : 'name3' , resourceVersion : 'baz' } ) ;
270
- deepStrictEqual ( deleteResult . metadata , { name : 'name2' , resourceVersion : 'blah ' } ) ;
263
+ deepStrictEqual ( deleteResult . metadata , { name : 'name2' , resourceVersion : '54321 ' } ) ;
271
264
strictEqual ( informer . latestResourceVersion ( ) , '54321' ) ;
272
265
273
- watchHandler (
274
- 'BOOKMARK' ,
275
- { } ,
276
- {
277
- metadata : {
278
- resourceVersion : '5454' ,
279
- } ,
266
+ watchHandler ( 'BOOKMARK' , {
267
+ metadata : {
268
+ resourceVersion : '5454' ,
280
269
} ,
281
- ) ;
270
+ } ) ;
282
271
strictEqual ( informer . latestResourceVersion ( ) , '5454' ) ;
283
272
} ) ;
284
273
@@ -1205,9 +1194,10 @@ describe('ListWatchCache', () => {
1205
1194
{
1206
1195
metadata : {
1207
1196
name : 'name3' ,
1197
+ resourceVersion : '23456' ,
1208
1198
} as V1ObjectMeta ,
1209
1199
} as V1Namespace ,
1210
- { metadata : { resourceVersion : '23456' } } ,
1200
+ { type : 'ADDED' , metadata : { resourceVersion : '23456' } } ,
1211
1201
) ;
1212
1202
1213
1203
await informer . stop ( ) ;
@@ -1259,9 +1249,87 @@ describe('ListWatchCache', () => {
1259
1249
{
1260
1250
metadata : {
1261
1251
name : 'name3' ,
1252
+ resourceVersion : '23456' ,
1262
1253
} as V1ObjectMeta ,
1263
1254
} as V1Namespace ,
1264
- { metadata : { resourceVersion : '23456' } } ,
1255
+ { type : 'ADDED' , metadata : { resourceVersion : '23456' } } ,
1256
+ ) ;
1257
+
1258
+ await informer . stop ( ) ;
1259
+
1260
+ let errorEmitted = false ;
1261
+ informer . on ( 'error' , ( ) => ( errorEmitted = true ) ) ;
1262
+
1263
+ promise = new Promise ( ( resolve ) => {
1264
+ mock . when (
1265
+ fakeWatch . watch ( mock . anything ( ) , mock . anything ( ) , mock . anything ( ) , mock . anything ( ) ) ,
1266
+ ) . thenCall ( ( ) => {
1267
+ resolve ( { } ) ;
1268
+ } ) ;
1269
+ } ) ;
1270
+
1271
+ informer . start ( ) ;
1272
+ await promise ;
1273
+
1274
+ const [ , , , doneHandler ] = mock . capture ( fakeWatch . watch ) . last ( ) ;
1275
+
1276
+ const object = {
1277
+ kind : 'Status' ,
1278
+ apiVersion : 'v1' ,
1279
+ metadata : { } ,
1280
+ status : 'Failure' ,
1281
+ message : 'too old resource version: 12345 (1234)' ,
1282
+ reason : 'Expired' ,
1283
+ code : 410 ,
1284
+ } ;
1285
+ await watchHandler ( 'ERROR' , object , { type : 'ERROR' , object } ) ;
1286
+ await doneHandler ( null ) ;
1287
+
1288
+ mock . verify (
1289
+ fakeWatch . watch ( mock . anything ( ) , mock . anything ( ) , mock . anything ( ) , mock . anything ( ) ) ,
1290
+ ) . thrice ( ) ;
1291
+ strictEqual ( errorEmitted , false ) ;
1292
+ strictEqual ( listCalls , 2 ) ;
1293
+ } ) ;
1294
+
1295
+ it ( 'should list if the watch errors from the last version' , async ( ) => {
1296
+ const fakeWatch = mock . mock ( Watch ) ;
1297
+
1298
+ let listCalls = 0 ;
1299
+ const listFn : ListPromise < V1Namespace > = function ( ) : Promise < V1NamespaceList > {
1300
+ return new Promise < V1NamespaceList > ( ( resolve , reject ) => {
1301
+ listCalls ++ ;
1302
+ resolve ( {
1303
+ metadata : {
1304
+ resourceVersion : '12345' ,
1305
+ } as V1ListMeta ,
1306
+ items : [ ] ,
1307
+ } as V1NamespaceList ) ;
1308
+ } ) ;
1309
+ } ;
1310
+ let promise = new Promise ( ( resolve ) => {
1311
+ mock . when (
1312
+ fakeWatch . watch ( mock . anything ( ) , mock . anything ( ) , mock . anything ( ) , mock . anything ( ) ) ,
1313
+ ) . thenCall ( ( ) => {
1314
+ resolve ( { } ) ;
1315
+ } ) ;
1316
+ } ) ;
1317
+
1318
+ const informer = new ListWatch ( '/some/path' , mock . instance ( fakeWatch ) , listFn , false ) ;
1319
+
1320
+ informer . start ( ) ;
1321
+ await promise ;
1322
+
1323
+ const [ , , watchHandler ] = mock . capture ( fakeWatch . watch ) . last ( ) ;
1324
+ watchHandler (
1325
+ 'ADDED' ,
1326
+ {
1327
+ metadata : {
1328
+ name : 'name3' ,
1329
+ resourceVersion : '23456' ,
1330
+ } as V1ObjectMeta ,
1331
+ } as V1Namespace ,
1332
+ { type : 'ADDED' , metadata : { resourceVersion : '23456' } } ,
1265
1333
) ;
1266
1334
1267
1335
await informer . stop ( ) ;
@@ -1335,6 +1403,8 @@ describe('ListWatchCache', () => {
1335
1403
) ;
1336
1404
1337
1405
await informer . stop ( ) ;
1406
+ strictEqual ( listCalls , 1 ) ;
1407
+ listCalls = 0 ;
1338
1408
1339
1409
let errorEmitted = false ;
1340
1410
informer . on ( 'error' , ( ) => ( errorEmitted = true ) ) ;
0 commit comments