@@ -18,6 +18,8 @@ class FakeAggregator extends EventEmitter {
1818 super ( )
1919 this . enabled = opts . enabled
2020 this . method = opts . method
21+ this . delay = opts . delay ?? 0
22+ this . duration = opts . duration ?? 0
2123 }
2224
2325 start ( ) { }
@@ -40,19 +42,21 @@ function createAggregator(sandbox, opts) {
4042}
4143
4244test . beforeEach ( ( ctx ) => {
43- ctx . nr = { }
44-
4545 const sandbox = sinon . createSandbox ( )
4646 const aggregators = [
4747 createAggregator ( sandbox , { enabled : true , method : 'agg1' } ) ,
4848 createAggregator ( sandbox , { enabled : false , method : 'agg2' } )
4949 ]
50- const harvester = new Harvester ( )
50+ const logger = require ( './mocks/logger' ) ( sandbox )
51+ const harvester = new Harvester ( { logger } )
5152 aggregators . forEach ( ( a ) => harvester . add ( a ) )
5253
53- ctx . nr . sandbox = sandbox
54- ctx . nr . aggregators = aggregators
55- ctx . nr . harvester = harvester
54+ ctx . nr = {
55+ sandbox,
56+ aggregators,
57+ harvester,
58+ logger
59+ }
5660} )
5761
5862test . afterEach ( ( ctx ) => {
@@ -71,10 +75,11 @@ test('should add aggregator to this.aggregators', (t) => {
7175} )
7276
7377test ( 'should start all aggregators that are enabled' , ( t ) => {
74- const { harvester, aggregators } = t . nr
78+ const { harvester, aggregators, logger } = t . nr
7579 harvester . start ( )
7680 assert . equal ( aggregators [ 0 ] . start . callCount , 1 , 'should start enabled aggregator' )
7781 assert . equal ( aggregators [ 1 ] . start . callCount , 0 , 'should not start disabled aggregator' )
82+ assert . equal ( logger . debug . callCount , 0 )
7883} )
7984
8085test ( 'should stop all aggregators' , ( t ) => {
@@ -103,3 +108,52 @@ test('resolve when all data is sent', async (t) => {
103108 } )
104109 await promise
105110} )
111+
112+ test ( 'should delay starting of aggregator when it has a delay property' , ( t ) => {
113+ const { sandbox, logger } = t . nr
114+ const clock = sandbox . useFakeTimers ( )
115+ const delayAggregator = createAggregator ( sandbox , { enabled : true , method : 'test-method' , delay : 200 } )
116+ const harvester = new Harvester ( { logger } )
117+ harvester . add ( delayAggregator )
118+ harvester . start ( )
119+ assert . equal ( logger . debug . callCount , 1 )
120+ assert . equal ( logger . debug . args [ 0 ] [ 0 ] , 'Delay start of test-method by 200 milliseconds' )
121+ const { aggregators } = harvester
122+ assert . equal ( aggregators [ 0 ] . start . callCount , 0 , 'should not start delayed aggregator yet' )
123+ clock . tick ( 201 )
124+ assert . equal ( aggregators [ 0 ] . start . callCount , 1 , 'should start delayed aggregator after delay has elapsed' )
125+ } )
126+
127+ test ( 'should stop aggregator dynamically when it has a duration property' , ( t ) => {
128+ const { sandbox, logger } = t . nr
129+ const clock = sandbox . useFakeTimers ( )
130+ const delayAggregator = createAggregator ( sandbox , { enabled : true , method : 'test-method' , duration : 200 } )
131+ const harvester = new Harvester ( { logger } )
132+ harvester . add ( delayAggregator )
133+ harvester . start ( )
134+ assert . equal ( logger . debug . callCount , 1 )
135+ assert . equal ( logger . debug . args [ 0 ] [ 0 ] , 'Running test-method for 200 milliseconds' )
136+ const { aggregators } = harvester
137+ assert . equal ( aggregators [ 0 ] . start . callCount , 1 , 'should start aggregator' )
138+ assert . equal ( aggregators [ 0 ] . stop . callCount , 0 , 'should not stop aggregator yet' )
139+ clock . tick ( 201 )
140+ assert . equal ( aggregators [ 0 ] . stop . callCount , 1 , 'should stop aggregator after duration has elapsed' )
141+ } )
142+
143+ test ( 'should delay start and stop aggregator after duration' , ( t ) => {
144+ const { sandbox, logger } = t . nr
145+ const clock = sandbox . useFakeTimers ( )
146+ const delayAggregator = createAggregator ( sandbox , { enabled : true , method : 'test-method' , delay : 100 , duration : 200 } )
147+ const harvester = new Harvester ( { logger } )
148+ harvester . add ( delayAggregator )
149+ harvester . start ( )
150+ assert . equal ( logger . debug . callCount , 2 )
151+ const { aggregators } = harvester
152+ assert . equal ( aggregators [ 0 ] . start . callCount , 0 , 'should not start delayed aggregator yet' )
153+ assert . equal ( aggregators [ 0 ] . stop . callCount , 0 , 'should not stop aggregator yet' )
154+ clock . tick ( 101 )
155+ assert . equal ( aggregators [ 0 ] . start . callCount , 1 , 'should start delayed aggregator after delay has elapsed' )
156+ assert . equal ( aggregators [ 0 ] . stop . callCount , 0 , 'should not stop aggregator yet' )
157+ clock . tick ( 200 )
158+ assert . equal ( aggregators [ 0 ] . stop . callCount , 1 , 'should stop aggregator after duration has elapsed' )
159+ } )
0 commit comments