1+ var tape = require ( "tape" ) ;
2+
3+ var protobuf = require ( ".." ) ;
4+
5+ tape . test ( "services" , function ( test ) {
6+
7+ protobuf . load ( "tests/data/service.proto" , function ( err , root ) {
8+ if ( err )
9+ return test . fail ( err . message ) ;
10+
11+ var myservice = root . lookup ( "myservice" ) . resolveAll ( ) ,
12+ MyService = myservice . MyService ,
13+ DoSomethingRequest = myservice . DoSomethingRequest ,
14+ DoSomethingResponse = myservice . DoSomethingResponse ,
15+ DoSomething = MyService . get ( "DoSomething" ) ;
16+
17+ function rpcImpl ( method , requestData , callback ) {
18+ if ( requestData ) {
19+ test . equal ( method , DoSomething , "rpcImpl should reference the correct method" ) ;
20+ test . ok ( callback , "rpcImpl should provide a callback" ) ;
21+ setTimeout ( function ( ) {
22+ callback ( null , DoSomethingResponse . create ( ) ) ;
23+ } ) ;
24+ } else {
25+ test . equal ( method , null , "rpcImpl should not reference a method when closed" ) ;
26+ test . equal ( callback , null , "rpcImpl should not provide a callback when closed" ) ;
27+ }
28+ }
29+
30+ var service = MyService . create ( rpcImpl ) ;
31+ var dataEmitted = false ;
32+ service . on ( "data" , function ( responseData ) {
33+ dataEmitted = true ;
34+ test . ok ( responseData , "should emit the data event" ) ;
35+ } ) ;
36+ var endCalled = false ;
37+ service . on ( "end" , function ( ) {
38+ test . notOk ( endCalled , "should not emit the end event twice" ) ;
39+ endCalled = true ;
40+ test . pass ( "should call the end event" ) ;
41+ service . end ( ) ;
42+ test . end ( ) ;
43+ } ) ;
44+ service . doSomething ( DoSomethingRequest . create ( ) , function ( err , res ) {
45+ test . notOk ( err , "should not raise an error" ) ;
46+ test . ok ( res instanceof DoSomethingResponse . getCtor ( ) , "should return a properly typed response" ) ;
47+ test . ok ( dataEmitted , "should have emitted the data event" ) ;
48+ service . end ( ) ;
49+ } ) ;
50+ } ) ;
51+
52+ } ) ;
0 commit comments