@@ -149,4 +149,62 @@ describe('Health checking', () => {
149
149
} ) ;
150
150
} )
151
151
} ) ;
152
+ describe . only ( 'list' , ( ) => {
153
+ it ( 'Should return all registered service statuses' , done => {
154
+ healthClient . list ( { } , ( error , response ) => {
155
+ assert . ifError ( error ) ;
156
+ assert ( response ) ;
157
+ assert . deepStrictEqual ( response . statuses , {
158
+ '' : { status : 'SERVING' } ,
159
+ 'grpc.test.TestServiceNotServing' : { status : 'NOT_SERVING' } ,
160
+ 'grpc.test.TestServiceServing' : { status : 'SERVING' }
161
+ } ) ;
162
+ done ( ) ;
163
+ } ) ;
164
+ } ) ;
165
+
166
+ it ( 'Should return an empty list when no services are registered' , done => {
167
+ // Create a new server with no services registered
168
+ const emptyServer = new grpc . Server ( ) ;
169
+ const emptyImpl = new HealthImplementation ( { } ) ;
170
+ emptyImpl . addToServer ( emptyServer ) ;
171
+ emptyServer . bindAsync ( 'localhost:0' , grpc . ServerCredentials . createInsecure ( ) , ( error , port ) => {
172
+ assert . ifError ( error ) ;
173
+ const HealthClientConstructor = grpc . makeClientConstructor ( healthServiceDefinition , 'grpc.health.v1.HealthService' ) ;
174
+ const emptyClient = new HealthClientConstructor ( `localhost:${ port } ` , grpc . credentials . createInsecure ( ) ) as unknown as HealthClient ;
175
+ emptyServer . start ( ) ;
176
+ emptyClient . list ( { } , ( error , response ) => {
177
+ assert . ifError ( error ) ;
178
+ assert ( response ) ;
179
+ assert . deepStrictEqual ( response . statuses , { } ) ;
180
+ emptyClient . close ( ) ;
181
+ emptyServer . tryShutdown ( done ) ;
182
+ } ) ;
183
+ } ) ;
184
+ } ) ;
185
+
186
+ it ( 'Should return RESOURCE_EXHAUSTED when too many services are registered' , done => {
187
+ const largeStatusMap : ServingStatusMap = { } ;
188
+ for ( let i = 0 ; i < 101 ; i ++ ) {
189
+ largeStatusMap [ `service-${ i } ` ] = 'SERVING' ;
190
+ }
191
+ const largeServer = new grpc . Server ( ) ;
192
+ const largeImpl = new HealthImplementation ( largeStatusMap ) ;
193
+ largeImpl . addToServer ( largeServer ) ;
194
+ largeServer . bindAsync ( 'localhost:0' , grpc . ServerCredentials . createInsecure ( ) , ( error , port ) => {
195
+ assert . ifError ( error ) ;
196
+ const HealthClientConstructor = grpc . makeClientConstructor ( healthServiceDefinition , 'grpc.health.v1.HealthService' ) ;
197
+ const largeClient = new HealthClientConstructor ( `localhost:${ port } ` , grpc . credentials . createInsecure ( ) ) as unknown as HealthClient ;
198
+ largeServer . start ( ) ;
199
+ largeClient . list ( { } , ( error , response ) => {
200
+ assert ( error ) ;
201
+ assert . strictEqual ( error . code , grpc . status . RESOURCE_EXHAUSTED ) ;
202
+ assert . strictEqual ( response , undefined ) ;
203
+ largeClient . close ( ) ;
204
+ largeServer . tryShutdown ( done ) ;
205
+ } ) ;
206
+ } ) ;
207
+ } ) ;
208
+ } ) ;
209
+
152
210
} ) ;
0 commit comments