| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package prpc | 5 package prpc |
| 6 | 6 |
| 7 import ( | 7 import ( |
| 8 "bytes" | 8 "bytes" |
| 9 "encoding/base64" | 9 "encoding/base64" |
| 10 "io/ioutil" | 10 "io/ioutil" |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 49 | 49 |
| 50 test(mtJSON, formatJSONPB, nil) | 50 test(mtJSON, formatJSONPB, nil) |
| 51 test(mtJSON+"; whatever=true", formatJSONPB, nil) | 51 test(mtJSON+"; whatever=true", formatJSONPB, nil) |
| 52 | 52 |
| 53 test("x", 0, `"x" is not supported`) | 53 test("x", 0, `"x" is not supported`) |
| 54 test("x,y", 0, "mime: expected slash after first token") | 54 test("x,y", 0, "mime: expected slash after first token") |
| 55 }) | 55 }) |
| 56 | 56 |
| 57 Convey("readMessage", t, func() { | 57 Convey("readMessage", t, func() { |
| 58 var msg HelloRequest | 58 var msg HelloRequest |
| 59 » » read := func(contentType string, body []byte) error { | 59 » » read := func(contentType string, body []byte) *protocolError { |
| 60 req := &http.Request{ | 60 req := &http.Request{ |
| 61 Body: ioutil.NopCloser(bytes.NewBuffer(body)), | 61 Body: ioutil.NopCloser(bytes.NewBuffer(body)), |
| 62 Header: http.Header{}, | 62 Header: http.Header{}, |
| 63 } | 63 } |
| 64 req.Header.Set("Content-Type", contentType) | 64 req.Header.Set("Content-Type", contentType) |
| 65 return readMessage(req, &msg) | 65 return readMessage(req, &msg) |
| 66 } | 66 } |
| 67 | 67 |
| 68 testLucy := func(contentType string, body []byte) { | 68 testLucy := func(contentType string, body []byte) { |
| 69 err := read(contentType, body) | 69 err := read(contentType, body) |
| 70 So(err, ShouldBeNil) | 70 So(err, ShouldBeNil) |
| 71 So(msg.Name, ShouldEqual, "Lucy") | 71 So(msg.Name, ShouldEqual, "Lucy") |
| 72 } | 72 } |
| 73 | 73 |
| 74 Convey("binary", func() { | 74 Convey("binary", func() { |
| 75 testMsg := &HelloRequest{Name: "Lucy"} | 75 testMsg := &HelloRequest{Name: "Lucy"} |
| 76 body, err := proto.Marshal(testMsg) | 76 body, err := proto.Marshal(testMsg) |
| 77 So(err, ShouldBeNil) | 77 So(err, ShouldBeNil) |
| 78 | 78 |
| 79 Convey(mtPRPC, func() { | 79 Convey(mtPRPC, func() { |
| 80 testLucy(mtPRPC, body) | 80 testLucy(mtPRPC, body) |
| 81 }) | 81 }) |
| 82 Convey(mtPRPCBinary, func() { | 82 Convey(mtPRPCBinary, func() { |
| 83 testLucy(mtPRPCBinary, body) | 83 testLucy(mtPRPCBinary, body) |
| 84 }) | 84 }) |
| 85 Convey("malformed body", func() { | 85 Convey("malformed body", func() { |
| 86 err := read(mtPRPCBinary, []byte{0}) | 86 err := read(mtPRPCBinary, []byte{0}) |
| 87 So(err, ShouldNotBeNil) | 87 So(err, ShouldNotBeNil) |
| 88 » » » » So(ErrorStatus(err), ShouldEqual, http.StatusBad
Request) | 88 » » » » So(err.status, ShouldEqual, http.StatusBadReques
t) |
| 89 }) | 89 }) |
| 90 Convey("empty body", func() { | 90 Convey("empty body", func() { |
| 91 err := read(mtPRPCBinary, nil) | 91 err := read(mtPRPCBinary, nil) |
| 92 So(err, ShouldBeNil) | 92 So(err, ShouldBeNil) |
| 93 }) | 93 }) |
| 94 }) | 94 }) |
| 95 | 95 |
| 96 Convey("json", func() { | 96 Convey("json", func() { |
| 97 body := []byte(`{"name": "Lucy"}`) | 97 body := []byte(`{"name": "Lucy"}`) |
| 98 Convey(mtJSON, func() { | 98 Convey(mtJSON, func() { |
| 99 testLucy(mtJSON, body) | 99 testLucy(mtJSON, body) |
| 100 }) | 100 }) |
| 101 Convey(mtPRPCJSNOPB, func() { | 101 Convey(mtPRPCJSNOPB, func() { |
| 102 testLucy(mtPRPCJSNOPB, body) | 102 testLucy(mtPRPCJSNOPB, body) |
| 103 }) | 103 }) |
| 104 Convey("malformed body", func() { | 104 Convey("malformed body", func() { |
| 105 err := read(mtPRPCJSNOPB, []byte{0}) | 105 err := read(mtPRPCJSNOPB, []byte{0}) |
| 106 So(err, ShouldNotBeNil) | 106 So(err, ShouldNotBeNil) |
| 107 » » » » So(ErrorStatus(err), ShouldEqual, http.StatusBad
Request) | 107 » » » » So(err.status, ShouldEqual, http.StatusBadReques
t) |
| 108 }) | 108 }) |
| 109 Convey("empty body", func() { | 109 Convey("empty body", func() { |
| 110 err := read(mtPRPCJSNOPB, nil) | 110 err := read(mtPRPCJSNOPB, nil) |
| 111 So(err, ShouldBeNil) | 111 So(err, ShouldBeNil) |
| 112 }) | 112 }) |
| 113 }) | 113 }) |
| 114 | 114 |
| 115 Convey("text", func() { | 115 Convey("text", func() { |
| 116 Convey(mtPRPCText, func() { | 116 Convey(mtPRPCText, func() { |
| 117 body := []byte(`name: "Lucy"`) | 117 body := []byte(`name: "Lucy"`) |
| 118 testLucy(mtPRPCText, body) | 118 testLucy(mtPRPCText, body) |
| 119 }) | 119 }) |
| 120 Convey("malformed body", func() { | 120 Convey("malformed body", func() { |
| 121 err := read(mtPRPCText, []byte{0}) | 121 err := read(mtPRPCText, []byte{0}) |
| 122 So(err, ShouldNotBeNil) | 122 So(err, ShouldNotBeNil) |
| 123 » » » » So(ErrorStatus(err), ShouldEqual, http.StatusBad
Request) | 123 » » » » So(err.status, ShouldEqual, http.StatusBadReques
t) |
| 124 }) | 124 }) |
| 125 Convey("empty body", func() { | 125 Convey("empty body", func() { |
| 126 err := read(mtPRPCText, nil) | 126 err := read(mtPRPCText, nil) |
| 127 So(err, ShouldBeNil) | 127 So(err, ShouldBeNil) |
| 128 }) | 128 }) |
| 129 }) | 129 }) |
| 130 | 130 |
| 131 Convey("unsupported media type", func() { | 131 Convey("unsupported media type", func() { |
| 132 err := read("blah", nil) | 132 err := read("blah", nil) |
| 133 So(err, ShouldNotBeNil) | 133 So(err, ShouldNotBeNil) |
| 134 » » » So(ErrorStatus(err), ShouldEqual, http.StatusUnsupported
MediaType) | 134 » » » So(err.status, ShouldEqual, http.StatusUnsupportedMediaT
ype) |
| 135 }) | 135 }) |
| 136 }) | 136 }) |
| 137 | 137 |
| 138 Convey("parseHeader", t, func() { | 138 Convey("parseHeader", t, func() { |
| 139 c := context.Background() | 139 c := context.Background() |
| 140 | 140 |
| 141 header := func(name, value string) http.Header { | 141 header := func(name, value string) http.Header { |
| 142 return http.Header{ | 142 return http.Header{ |
| 143 name: []string{value}, | 143 name: []string{value}, |
| 144 } | 144 } |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 218 }) | 218 }) |
| 219 Convey("Fails", func() { | 219 Convey("Fails", func() { |
| 220 c2, err := parseHeader(c, header("Name-B
in", "zzz")) | 220 c2, err := parseHeader(c, header("Name-B
in", "zzz")) |
| 221 So(c2, ShouldEqual, c) | 221 So(c2, ShouldEqual, c) |
| 222 So(err, ShouldErrLike, "Name-Bin header:
illegal base64 data at input byte 0") | 222 So(err, ShouldErrLike, "Name-Bin header:
illegal base64 data at input byte 0") |
| 223 }) | 223 }) |
| 224 }) | 224 }) |
| 225 }) | 225 }) |
| 226 }) | 226 }) |
| 227 } | 227 } |
| OLD | NEW |