@@ -2,6 +2,7 @@ import {sleep} from 'jaasync/lib/cancelable';
2
2
3
3
import * as Strongbus from './' ;
4
4
import { Scanner } from './scanner' ;
5
+ import { Logger } from './types/logger' ;
5
6
import { EventKeys } from './types/utility' ;
6
7
7
8
type TestEventMap = {
@@ -92,6 +93,70 @@ describe('Strongbus.Bus', () => {
92
93
} ) ;
93
94
} ) ;
94
95
96
+ describe ( 'listener logging thresholds' , ( ) => {
97
+ let logger : jasmine . SpyObj < Logger > ;
98
+
99
+ function addListeners ( numListenersToAdd : number ) {
100
+ for ( let i = 0 ; i < numListenersToAdd ; i ++ ) {
101
+ bus . on ( 'bar' , ( ) => true ) ;
102
+ }
103
+ }
104
+
105
+ beforeEach ( ( ) => {
106
+ logger = jasmine . createSpyObj ( 'logger' , [ 'info' , 'warn' , 'error' ] ) ;
107
+ } ) ;
108
+
109
+ it ( 'logs if the number of listeners exceeds the thresholds' , ( ) => {
110
+ bus = new Strongbus . Bus < TestEventMap > ( {
111
+ logger,
112
+ thresholds : {
113
+ info : 10 ,
114
+ warn : 20 ,
115
+ error : 30
116
+ }
117
+ } ) ;
118
+ // no logging up to the threshold
119
+ addListeners ( 10 ) ;
120
+ expect ( logger . info ) . not . toHaveBeenCalled ( ) ;
121
+ expect ( logger . warn ) . not . toHaveBeenCalled ( ) ;
122
+ expect ( logger . error ) . not . toHaveBeenCalled ( ) ;
123
+
124
+ // 11th listener triggers info
125
+ addListeners ( 1 ) ;
126
+ expect ( bus . listeners . get ( 'bar' ) . size ) . toEqual ( 11 ) ;
127
+ expect ( logger . info ) . toHaveBeenCalledTimes ( 1 ) ;
128
+ expect ( logger . warn ) . not . toHaveBeenCalled ( ) ;
129
+ expect ( logger . error ) . not . toHaveBeenCalled ( ) ;
130
+
131
+ // 21st listener triggers warn
132
+ addListeners ( 10 ) ;
133
+ expect ( logger . info ) . toHaveBeenCalledTimes ( 10 ) ;
134
+ expect ( logger . warn ) . toHaveBeenCalledTimes ( 1 ) ;
135
+ expect ( logger . error ) . not . toHaveBeenCalled ( ) ;
136
+
137
+ // 31st listener triggers error
138
+ addListeners ( 10 ) ;
139
+ expect ( logger . info ) . toHaveBeenCalledTimes ( 10 ) ;
140
+ expect ( logger . warn ) . toHaveBeenCalledTimes ( 10 ) ;
141
+ expect ( logger . error ) . toHaveBeenCalledTimes ( 1 ) ;
142
+ } ) ;
143
+
144
+ it ( 'logs at the highest severity that passes the threshold' , ( ) => {
145
+ bus = new Strongbus . Bus < TestEventMap > ( {
146
+ logger,
147
+ thresholds : {
148
+ // only warn-level specified, info is at default of 100
149
+ warn : 20
150
+ }
151
+ } ) ;
152
+
153
+ addListeners ( 21 ) ;
154
+ expect ( logger . info ) . not . toHaveBeenCalled ( ) ;
155
+ expect ( logger . warn ) . toHaveBeenCalledTimes ( 1 ) ;
156
+ expect ( logger . error ) . not . toHaveBeenCalled ( ) ;
157
+ } ) ;
158
+ } ) ;
159
+
95
160
describe ( '#on' , ( ) => {
96
161
it ( 'subscribes handler to an event as a key of its typemap' , ( ) => {
97
162
const handleFoo = jasmine . createSpy ( 'handleFoo' ) as ( fooPayload : string ) => void ;
0 commit comments