@@ -149,4 +149,62 @@ describe('Health checking', () => {
149149 } ) ;
150150 } )
151151 } ) ;
152+ describe ( '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+
152210} ) ;
0 commit comments