rpc: new RPC implementation with pub/sub support
This commit is contained in:
		
							
								
								
									
										73
									
								
								rpc/v2/json_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								rpc/v2/json_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,73 @@ | ||||
| package v2 | ||||
|  | ||||
| import ( | ||||
| 	"bufio" | ||||
| 	"bytes" | ||||
| 	"reflect" | ||||
| 	"testing" | ||||
| ) | ||||
|  | ||||
| type RWC struct { | ||||
| 	*bufio.ReadWriter | ||||
| } | ||||
|  | ||||
| func (rwc *RWC) Close() error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func TestJSONRequestParsing(t *testing.T) { | ||||
| 	server := NewServer() | ||||
| 	service := new(Service) | ||||
|  | ||||
| 	if err := server.RegisterName("calc", service); err != nil { | ||||
| 		t.Fatalf("%v", err) | ||||
| 	} | ||||
|  | ||||
| 	req := bytes.NewBufferString(`{"id": 1234, "jsonrpc": "2.0", "method": "calc_add", "params": [11, 22]}`) | ||||
| 	var str string | ||||
| 	reply := bytes.NewBufferString(str) | ||||
| 	rw := &RWC{bufio.NewReadWriter(bufio.NewReader(req), bufio.NewWriter(reply))} | ||||
|  | ||||
| 	codec := NewJSONCodec(rw) | ||||
|  | ||||
| 	requests, batch, err := codec.ReadRequestHeaders() | ||||
| 	if err != nil { | ||||
| 		t.Fatalf("%v", err) | ||||
| 	} | ||||
|  | ||||
| 	if batch { | ||||
| 		t.Fatalf("Request isn't a batch") | ||||
| 	} | ||||
|  | ||||
| 	if len(requests) != 1 { | ||||
| 		t.Fatalf("Expected 1 request but got %d requests - %v", len(requests), requests) | ||||
| 	} | ||||
|  | ||||
| 	if requests[0].service != "calc" { | ||||
| 		t.Fatalf("Expected service 'calc' but got '%s'", requests[0].service) | ||||
| 	} | ||||
|  | ||||
| 	if requests[0].method != "add" { | ||||
| 		t.Fatalf("Expected method 'Add' but got '%s'", requests[0].method) | ||||
| 	} | ||||
|  | ||||
| 	if requests[0].id != 1234 { | ||||
| 		t.Fatalf("Expected id 1234 but got %d", requests[0].id) | ||||
| 	} | ||||
|  | ||||
| 	var arg int | ||||
| 	args := []reflect.Type{reflect.TypeOf(arg), reflect.TypeOf(arg)} | ||||
|  | ||||
| 	v, err := codec.ParseRequestArguments(args, requests[0].params) | ||||
| 	if err != nil { | ||||
| 		t.Fatalf("%v", err) | ||||
| 	} | ||||
|  | ||||
| 	if len(v) != 2 { | ||||
| 		t.Fatalf("Expected 2 argument values, got %d", len(v)) | ||||
| 	} | ||||
|  | ||||
| 	if v[0].Int() != 11 || v[1].Int() != 22 { | ||||
| 		t.Fatalf("expected %d == 11 && %d == 22", v[0].Int(), v[1].Int()) | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user