@@ -124,4 +124,59 @@ describe('Cross-language interaction', function() {
124124 rclnodejs . spin ( node ) ;
125125 } ) ;
126126 } ) ;
127+
128+ describe ( 'Node.js client' , function ( ) {
129+ it ( 'Node.js client should work with Python service' , function ( done ) {
130+ var node = rclnodejs . createNode ( 'js_add_client' ) ;
131+ const AddTwoInts = rclnodejs . require ( 'example_interfaces' ) . srv . AddTwoInts ;
132+ var destroy = false ;
133+
134+ var pyService = utils . launchPythonProcess ( [ `${ __dirname } /py/service.py` ] ) ;
135+ var client = node . createClient ( AddTwoInts , 'py_js_add_service' ) ;
136+ let request = new AddTwoInts . Request ( ) ;
137+ request . a = 1 ;
138+ request . b = 2 ;
139+
140+ var timer = setInterval ( ( ) => {
141+ client . sendRequest ( request , ( response ) => {
142+ if ( ! destroy ) {
143+ assert . deepStrictEqual ( response . sum , 3 ) ;
144+ clearInterval ( timer ) ;
145+ node . destroy ( ) ;
146+ pyService . kill ( 'SIGINT' ) ;
147+ destroy = true ;
148+ done ( ) ;
149+ }
150+ } ) ;
151+ } , 100 ) ;
152+
153+ rclnodejs . spin ( node ) ;
154+ } ) ;
155+ } ) ;
156+
157+ describe ( 'Node.js service' , function ( ) {
158+ it ( 'Node.js service should work with Python client' , function ( done ) {
159+ var node = rclnodejs . createNode ( 'js_add_service' ) ;
160+ const AddTwoInts = rclnodejs . require ( 'example_interfaces' ) . srv . AddTwoInts ;
161+ var destroy = false ;
162+
163+ var service = node . createService ( AddTwoInts , 'js_py_add_service' , ( request , response ) => {
164+ assert . deepStrictEqual ( typeof request . a , 'number' ) ;
165+ assert . deepStrictEqual ( typeof request . b , 'number' ) ;
166+ response . sum = request . a + request . b ;
167+ return response ;
168+ } ) ;
169+ rclnodejs . spin ( node ) ;
170+
171+ var pyClient = utils . launchPythonProcess ( [ `${ __dirname } /py/client.py` ] ) ;
172+ pyClient . stdout . on ( 'data' , function ( data ) {
173+ assert . deepEqual ( parseInt ( data , 10 ) , 3 ) ;
174+ if ( ! destroy ) {
175+ node . destroy ( ) ;
176+ destroy = true ;
177+ done ( ) ;
178+ }
179+ } ) ;
180+ } ) ;
181+ } ) ;
127182} ) ;
0 commit comments