@@ -420,6 +420,135 @@ func TestTriggers_isReady(t *testing.T) {
420420 {triggerInput {newElementCount : 1 , endOfWindowReached : true }, false },
421421 {triggerInput {newElementCount : 1 , endOfWindowReached : true }, true }, // Late
422422 },
423+ }, {
424+ name : "afterProcessingTime_Delay_Exact" ,
425+ trig : & TriggerAfterProcessingTime {
426+ Transforms : []TimestampTransform {
427+ {Delay : 3 * time .Second },
428+ },
429+ },
430+ inputs : []io {
431+ {triggerInput {emNow : 0 }, false }, // the trigger is set to fire at 3s after 0
432+ {triggerInput {emNow : 1000 }, false },
433+ {triggerInput {emNow : 2000 }, false },
434+ {triggerInput {emNow : 3000 }, true }, // fire
435+ {triggerInput {emNow : 4000 }, false },
436+ {triggerInput {emNow : 5000 }, false },
437+ {triggerInput {emNow : 6000 }, false },
438+ {triggerInput {emNow : 7000 }, false },
439+ },
440+ }, {
441+ name : "afterProcessingTime_Delay_Late" ,
442+ trig : & TriggerAfterProcessingTime {
443+ Transforms : []TimestampTransform {
444+ {Delay : 3 * time .Second },
445+ },
446+ },
447+ inputs : []io {
448+ {triggerInput {emNow : 0 }, false }, // the trigger is set to fire at 3s after 0
449+ {triggerInput {emNow : 1000 }, false },
450+ {triggerInput {emNow : 2000 }, false },
451+ {triggerInput {emNow : 3001 }, true }, // fire a little after the preset time
452+ {triggerInput {emNow : 4000 }, false },
453+ },
454+ }, {
455+ name : "afterProcessingTime_AlignToPeriodOnly" ,
456+ trig : & TriggerAfterProcessingTime {
457+ Transforms : []TimestampTransform {
458+ {AlignToPeriod : 5 * time .Second },
459+ },
460+ },
461+ inputs : []io {
462+ {triggerInput {emNow : 1500 }, false }, // align 1.5s to 5s
463+ {triggerInput {emNow : 2000 }, false },
464+ {triggerInput {emNow : 4999 }, false },
465+ {triggerInput {emNow : 5000 }, true }, // fire at 5
466+ {triggerInput {emNow : 5001 }, false },
467+ },
468+ }, {
469+ name : "afterProcessingTime_AlignToPeriodAndOffset" ,
470+ trig : & TriggerAfterProcessingTime {
471+ Transforms : []TimestampTransform {
472+ {AlignToPeriod : 5 * time .Second , AlignToOffset : 200 * time .Millisecond },
473+ },
474+ },
475+ inputs : []io {
476+ {triggerInput {emNow : 1500 }, false }, // align 1.5s to 5s plus an 0.2 offset
477+ {triggerInput {emNow : 2000 }, false },
478+ {triggerInput {emNow : 5119 }, false },
479+ {triggerInput {emNow : 5200 }, true }, // fire at 5.2s
480+ {triggerInput {emNow : 5201 }, false },
481+ },
482+ }, {
483+ name : "afterProcessingTime_TwoTransforms" ,
484+ trig : & TriggerAfterProcessingTime {
485+ Transforms : []TimestampTransform {
486+ {AlignToPeriod : 5 * time .Second , AlignToOffset : 200 * time .Millisecond },
487+ {Delay : 1 * time .Second },
488+ },
489+ },
490+ inputs : []io {
491+ {triggerInput {emNow : 1500 }, false }, // align 1.5s to 5s plus an 0.2 offset and a 1s delay
492+ {triggerInput {emNow : 2000 }, false },
493+ {triggerInput {emNow : 5119 }, false },
494+ {triggerInput {emNow : 5200 }, false },
495+ {triggerInput {emNow : 5201 }, false },
496+ {triggerInput {emNow : 6119 }, false },
497+ {triggerInput {emNow : 6200 }, true }, // fire
498+ {triggerInput {emNow : 6201 }, false },
499+ },
500+ }, {
501+ name : "afterProcessingTime_Repeated" , trig : & TriggerRepeatedly {
502+ & TriggerAfterProcessingTime {
503+ Transforms : []TimestampTransform {
504+ {Delay : 3 * time .Second },
505+ }}},
506+ inputs : []io {
507+ {triggerInput {emNow : 0 }, false },
508+ {triggerInput {emNow : 1000 }, false },
509+ {triggerInput {emNow : 2000 }, false },
510+ {triggerInput {emNow : 3000 }, true }, // firing the first time, trigger set again
511+ {triggerInput {emNow : 4000 }, false },
512+ {triggerInput {emNow : 5000 }, false },
513+ {triggerInput {emNow : 6000 }, true }, // firing the second time
514+ },
515+ }, {
516+ name : "afterProcessingTime_Repeated_AcrossWindows" , trig : & TriggerRepeatedly {
517+ & TriggerAfterProcessingTime {
518+ Transforms : []TimestampTransform {
519+ {Delay : 3 * time .Second },
520+ }}},
521+ inputs : []io {
522+ {triggerInput {emNow : 0 }, false },
523+ {triggerInput {emNow : 1000 }, false },
524+ {triggerInput {emNow : 2000 }, false },
525+ {triggerInput {emNow : 3000 }, true }, // fire the first time, trigger is set again
526+ {triggerInput {emNow : 4000 }, false },
527+ {triggerInput {emNow : 5000 }, false },
528+ {triggerInput {emNow : 6000 ,
529+ endOfWindowReached : true }, true }, // fire the second time, reach end of window and start over
530+ {triggerInput {emNow : 7000 }, false }, // trigger firing time is set to 7s + 3s = 10s
531+ {triggerInput {emNow : 8000 }, false },
532+ {triggerInput {emNow : 9000 }, false },
533+ {triggerInput {emNow : 10000 }, true }, // fire in the new window
534+ },
535+ }, {
536+ name : "afterProcessingTime_Repeated_Composite" , trig : & TriggerRepeatedly {
537+ & TriggerAfterAny {SubTriggers : []Trigger {
538+ & TriggerAfterProcessingTime {
539+ Transforms : []TimestampTransform {
540+ {Delay : 3 * time .Second },
541+ },
542+ },
543+ & TriggerElementCount {ElementCount : 2 },
544+ }}},
545+ inputs : []io {
546+ {triggerInput {emNow : 0 , newElementCount : 1 }, false }, // ElmCount = 1, set AfterProcessingTime trigger firing time to 3s
547+ {triggerInput {emNow : 1000 , newElementCount : 1 }, true }, // ElmCount = 2, fire ElmCount trigger and reset ElmCount and AfterProcessingTime firing time (4s)
548+ {triggerInput {emNow : 4000 , newElementCount : 1 }, true }, // ElmCount = 1, fire AfterProcessingTime trigger and reset ElmCount and AfterProcessingTime firing time (7s)
549+ {triggerInput {emNow : 5000 , newElementCount : 1 }, false }, // ElmCount = 1
550+ {triggerInput {emNow : 5500 , newElementCount : 1 }, true }, // ElmCount = 2, fire ElmCount trigger
551+ },
423552 }, {
424553 name : "default" ,
425554 trig : & TriggerDefault {},
0 commit comments