Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(148)

Side by Side Diff: server/prpc/encoding_test.go

Issue 1605363002: common/prpc, tools/cmd/cproto: prpc client (Closed) Base URL: https://chromium.googlesource.com/external/github.com/luci/luci-go@master
Patch Set: rebased and addressed comments Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « server/prpc/encoding.go ('k') | server/prpc/error.go » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "fmt"
9 "net/http" 8 "net/http"
10 "net/http/httptest"
11 "strings" 9 "strings"
12 "testing" 10 "testing"
13 11
14 "github.com/golang/protobuf/proto" 12 "github.com/golang/protobuf/proto"
15 "golang.org/x/net/context"
16 "google.golang.org/grpc"
17 "google.golang.org/grpc/codes" 13 "google.golang.org/grpc/codes"
18 14
19 "github.com/luci/luci-go/common/logging"
20 "github.com/luci/luci-go/common/logging/memlogger"
21
22 . "github.com/luci/luci-go/common/testing/assertions" 15 . "github.com/luci/luci-go/common/testing/assertions"
23 . "github.com/smartystreets/goconvey/convey" 16 . "github.com/smartystreets/goconvey/convey"
24 ) 17 )
25 18
26 func TestEncoding(t *testing.T) { 19 func TestEncoding(t *testing.T) {
27 t.Parallel() 20 t.Parallel()
28 21
29 Convey("responseFormat", t, func() { 22 Convey("responseFormat", t, func() {
30 test := func(acceptHeader string, expectedFormat format, expecte dErr interface{}) { 23 test := func(acceptHeader string, expectedFormat format, expecte dErr interface{}) {
31 acceptHeader = strings.Replace(acceptHeader, "{json}", m tPRPCJSNOPB, -1) 24 acceptHeader = strings.Replace(acceptHeader, "{json}", m tPRPCJSNOPB, -1)
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 test("{json},{binary},*/*;x=y", formatBinary, nil) 57 test("{json},{binary},*/*;x=y", formatBinary, nil)
65 test("{json},{binary};q=0.9,*/*", formatBinary, nil) 58 test("{json},{binary};q=0.9,*/*", formatBinary, nil)
66 test("{json},{binary};q=0.9,*/*;q=0.8", formatJSONPB, nil) 59 test("{json},{binary};q=0.9,*/*;q=0.8", formatJSONPB, nil)
67 60
68 // supported and unsupported mix 61 // supported and unsupported mix
69 test("{json},foo/bar", formatJSONPB, nil) 62 test("{json},foo/bar", formatJSONPB, nil)
70 test("{json};q=0.1,foo/bar", formatJSONPB, nil) 63 test("{json};q=0.1,foo/bar", formatJSONPB, nil)
71 test("foo/bar;q=0.1,{json}", formatJSONPB, nil) 64 test("foo/bar;q=0.1,{json}", formatJSONPB, nil)
72 65
73 // only unsupported types 66 // only unsupported types
74 » » const err406 = "HTTP 406: Accept header: specified media types a re not not supported" 67 » » const err406 = "pRPC: Accept header: specified media types are n ot not supported"
75 test(mtPRPC+"; boo=true", 0, err406) 68 test(mtPRPC+"; boo=true", 0, err406)
76 test(mtPRPC+"; encoding=blah", 0, err406) 69 test(mtPRPC+"; encoding=blah", 0, err406)
77 test("x", 0, err406) 70 test("x", 0, err406)
78 test("x,y", 0, err406) 71 test("x,y", 0, err406)
79 72
80 » » test("x//y", 0, "HTTP 400: Accept header: expected token after s lash") 73 » » test("x//y", 0, "pRPC: Accept header: expected token after slash ")
81 }) 74 })
82 75
83 » Convey("writeMessage", t, func() { 76 » Convey("respondMessage", t, func() {
84 msg := &HelloReply{Message: "Hi"} 77 msg := &HelloReply{Message: "Hi"}
85 78
86 test := func(f format, body []byte, contentType string) { 79 test := func(f format, body []byte, contentType string) {
87 Convey(contentType, func() { 80 Convey(contentType, func() {
88 » » » » res := httptest.NewRecorder() 81 » » » » res := respondMessage(msg, f)
89 » » » » err := writeMessage(res, msg, f) 82 » » » » So(res.code, ShouldEqual, codes.OK)
90 » » » » So(err, ShouldBeNil) 83 » » » » So(res.header, ShouldResembleV, http.Header{
91 84 » » » » » headerContentType: []string{contentType} ,
92 » » » » So(res.Code, ShouldEqual, http.StatusOK) 85 » » » » })
93 » » » » So(res.Body.Bytes(), ShouldResembleV, body) 86 » » » » So(res.body, ShouldResembleV, body)
94 » » » » So(res.Header().Get("Content-Type"), ShouldEqual , contentType)
95 }) 87 })
96 } 88 }
97 89
98 msgBytes, err := proto.Marshal(msg) 90 msgBytes, err := proto.Marshal(msg)
99 So(err, ShouldBeNil) 91 So(err, ShouldBeNil)
100 92
101 test(formatBinary, msgBytes, mtPRPCBinary) 93 test(formatBinary, msgBytes, mtPRPCBinary)
102 » » test(formatJSONPB, []byte("{\n\t\"message\": \"Hi\"\n}\n"), mtPR PCJSNOPB) 94 » » test(formatJSONPB, []byte(csrfPrefix+"{\"message\":\"Hi\"}"), mt PRPCJSNOPB)
103 test(formatText, []byte("message: \"Hi\"\n"), mtPRPCText) 95 test(formatText, []byte("message: \"Hi\"\n"), mtPRPCText)
104 }) 96 })
105
106 Convey("writeError", t, func() {
107 test := func(err error, status int, body string, logMsgs ...meml ogger.LogEntry) {
108 Convey(err.Error(), func() {
109 c := context.Background()
110 c = memlogger.Use(c)
111 log := logging.Get(c).(*memlogger.MemLogger)
112
113 rec := httptest.NewRecorder()
114 writeError(c, rec, err)
115 So(rec.Code, ShouldEqual, status)
116 So(rec.Body.String(), ShouldEqual, body)
117
118 actualMsgs := log.Messages()
119 for i := range actualMsgs {
120 actualMsgs[i].CallDepth = 0
121 }
122 So(actualMsgs, ShouldResembleV, logMsgs)
123 })
124 }
125
126 test(Errorf(http.StatusNotFound, "not found"), http.StatusNotFou nd, "not found\n")
127 test(grpc.Errorf(codes.NotFound, "not found"), http.StatusNotFou nd, "not found\n")
128 test(
129 fmt.Errorf("unhandled"),
130 http.StatusInternalServerError,
131 "Internal server error\n",
132 memlogger.LogEntry{Level: logging.Error, Msg: "HTTP 500: unhandled"},
133 )
134 })
135 } 97 }
OLDNEW
« no previous file with comments | « server/prpc/encoding.go ('k') | server/prpc/error.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698