json_test.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package v2
  2. import (
  3. "bufio"
  4. "bytes"
  5. "reflect"
  6. "testing"
  7. )
  8. type RWC struct {
  9. *bufio.ReadWriter
  10. }
  11. func (rwc *RWC) Close() error {
  12. return nil
  13. }
  14. func TestJSONRequestParsing(t *testing.T) {
  15. server := NewServer()
  16. service := new(Service)
  17. if err := server.RegisterName("calc", service); err != nil {
  18. t.Fatalf("%v", err)
  19. }
  20. req := bytes.NewBufferString(`{"id": 1234, "jsonrpc": "2.0", "method": "calc_add", "params": [11, 22]}`)
  21. var str string
  22. reply := bytes.NewBufferString(str)
  23. rw := &RWC{bufio.NewReadWriter(bufio.NewReader(req), bufio.NewWriter(reply))}
  24. codec := NewJSONCodec(rw)
  25. requests, batch, err := codec.ReadRequestHeaders()
  26. if err != nil {
  27. t.Fatalf("%v", err)
  28. }
  29. if batch {
  30. t.Fatalf("Request isn't a batch")
  31. }
  32. if len(requests) != 1 {
  33. t.Fatalf("Expected 1 request but got %d requests - %v", len(requests), requests)
  34. }
  35. if requests[0].service != "calc" {
  36. t.Fatalf("Expected service 'calc' but got '%s'", requests[0].service)
  37. }
  38. if requests[0].method != "add" {
  39. t.Fatalf("Expected method 'Add' but got '%s'", requests[0].method)
  40. }
  41. if requests[0].id != 1234 {
  42. t.Fatalf("Expected id 1234 but got %d", requests[0].id)
  43. }
  44. var arg int
  45. args := []reflect.Type{reflect.TypeOf(arg), reflect.TypeOf(arg)}
  46. v, err := codec.ParseRequestArguments(args, requests[0].params)
  47. if err != nil {
  48. t.Fatalf("%v", err)
  49. }
  50. if len(v) != 2 {
  51. t.Fatalf("Expected 2 argument values, got %d", len(v))
  52. }
  53. if v[0].Int() != 11 || v[1].Int() != 22 {
  54. t.Fatalf("expected %d == 11 && %d == 22", v[0].Int(), v[1].Int())
  55. }
  56. }