@@ -24,8 +24,13 @@ import {
24
24
defaultResource
25
25
} from './util' ;
26
26
import { TestMetricReader } from './export/TestMetricReader' ;
27
+ import * as sinon from 'sinon' ;
27
28
28
29
describe ( 'MeterProvider' , ( ) => {
30
+ afterEach ( ( ) => {
31
+ sinon . restore ( ) ;
32
+ } ) ;
33
+
29
34
describe ( 'constructor' , ( ) => {
30
35
it ( 'should construct without exceptions' , ( ) => {
31
36
const meterProvider = new MeterProvider ( ) ;
@@ -422,4 +427,53 @@ describe('MeterProvider', () => {
422
427
} ) ;
423
428
} ) ;
424
429
} ) ;
430
+
431
+ describe ( 'shutdown' , ( ) => {
432
+ it ( 'should shutdown all registered metric readers' , async ( ) => {
433
+ const meterProvider = new MeterProvider ( { resource : defaultResource } ) ;
434
+ const reader1 = new TestMetricReader ( ) ;
435
+ const reader2 = new TestMetricReader ( ) ;
436
+ const reader1ShutdownSpy = sinon . spy ( reader1 , 'shutdown' ) ;
437
+ const reader2ShutdownSpy = sinon . spy ( reader2 , 'shutdown' ) ;
438
+
439
+ meterProvider . addMetricReader ( reader1 ) ;
440
+ meterProvider . addMetricReader ( reader2 ) ;
441
+
442
+ await meterProvider . shutdown ( { timeoutMillis : 1234 } ) ;
443
+ await meterProvider . shutdown ( ) ;
444
+ await meterProvider . shutdown ( ) ;
445
+
446
+ assert . strictEqual ( reader1ShutdownSpy . callCount , 1 ) ;
447
+ assert . deepStrictEqual ( reader1ShutdownSpy . args [ 0 ] [ 0 ] , { timeoutMillis : 1234 } ) ;
448
+ assert . strictEqual ( reader2ShutdownSpy . callCount , 1 ) ;
449
+ assert . deepStrictEqual ( reader2ShutdownSpy . args [ 0 ] [ 0 ] , { timeoutMillis : 1234 } ) ;
450
+ } ) ;
451
+ } ) ;
452
+
453
+ describe ( 'forceFlush' , ( ) => {
454
+ it ( 'should forceFlush all registered metric readers' , async ( ) => {
455
+ const meterProvider = new MeterProvider ( { resource : defaultResource } ) ;
456
+ const reader1 = new TestMetricReader ( ) ;
457
+ const reader2 = new TestMetricReader ( ) ;
458
+ const reader1ForceFlushSpy = sinon . spy ( reader1 , 'forceFlush' ) ;
459
+ const reader2ForceFlushSpy = sinon . spy ( reader2 , 'forceFlush' ) ;
460
+
461
+ meterProvider . addMetricReader ( reader1 ) ;
462
+ meterProvider . addMetricReader ( reader2 ) ;
463
+
464
+ await meterProvider . forceFlush ( { timeoutMillis : 1234 } ) ;
465
+ await meterProvider . forceFlush ( { timeoutMillis : 5678 } ) ;
466
+ assert . strictEqual ( reader1ForceFlushSpy . callCount , 2 ) ;
467
+ assert . deepStrictEqual ( reader1ForceFlushSpy . args [ 0 ] [ 0 ] , { timeoutMillis : 1234 } ) ;
468
+ assert . deepStrictEqual ( reader1ForceFlushSpy . args [ 1 ] [ 0 ] , { timeoutMillis : 5678 } ) ;
469
+ assert . strictEqual ( reader2ForceFlushSpy . callCount , 2 ) ;
470
+ assert . deepStrictEqual ( reader2ForceFlushSpy . args [ 0 ] [ 0 ] , { timeoutMillis : 1234 } ) ;
471
+ assert . deepStrictEqual ( reader2ForceFlushSpy . args [ 1 ] [ 0 ] , { timeoutMillis : 5678 } ) ;
472
+
473
+ await meterProvider . shutdown ( ) ;
474
+ await meterProvider . forceFlush ( ) ;
475
+ assert . strictEqual ( reader1ForceFlushSpy . callCount , 2 ) ;
476
+ assert . strictEqual ( reader2ForceFlushSpy . callCount , 2 ) ;
477
+ } ) ;
478
+ } ) ;
425
479
} ) ;
0 commit comments