@@ -9,27 +9,35 @@ import (
9
9
sync "sync"
10
10
"time"
11
11
12
+ "github.com/google/go-cmp/cmp"
12
13
"github.com/kralicky/totem"
13
14
"github.com/kralicky/totem/test"
14
15
. "github.com/onsi/ginkgo/v2"
15
16
. "github.com/onsi/gomega"
17
+ "github.com/onsi/gomega/format"
18
+ "google.golang.org/genproto/googleapis/rpc/errdetails"
19
+ statuspb "google.golang.org/genproto/googleapis/rpc/status"
16
20
"google.golang.org/grpc"
17
21
"google.golang.org/grpc/codes"
18
22
"google.golang.org/grpc/metadata"
19
23
"google.golang.org/grpc/status"
24
+ "google.golang.org/protobuf/encoding/prototext"
20
25
"google.golang.org/protobuf/proto"
26
+ "google.golang.org/protobuf/testing/protocmp"
27
+ "google.golang.org/protobuf/types/known/anypb"
21
28
"google.golang.org/protobuf/types/known/durationpb"
22
29
)
23
30
24
31
var (
25
32
timeout = time .Second * 6
26
33
)
27
34
28
- var _ = Describe ("Test" , func () {
35
+ var _ = FDescribe ("Test" , func () {
29
36
It ("should work with two different servers" , func () {
30
37
a , b := make (chan struct {}), make (chan struct {})
31
38
tc := testCase {
32
39
ServerHandler : func (stream test.Test_TestStreamServer ) error {
40
+ GinkgoHelper ()
33
41
ts , err := totem .NewServer (stream )
34
42
if err != nil {
35
43
return err
@@ -184,7 +192,9 @@ var _ = Describe("Test", func() {
184
192
return err
185
193
}
186
194
incSrv := incrementServer {}
195
+ errSrv := errorServer {}
187
196
test .RegisterIncrementServer (ts , & incSrv )
197
+ test .RegisterErrorServer (ts , & errSrv )
188
198
_ , errC := ts .Serve ()
189
199
190
200
return <- errC
@@ -212,72 +222,57 @@ var _ = Describe("Test", func() {
212
222
ctx , ca := context .WithTimeout (context .Background (), timeout )
213
223
defer ca ()
214
224
err = cc .Invoke (ctx , totem .Forward , req , reply )
215
- if err != nil {
216
- return err
217
- }
225
+ Expect (err ).NotTo (HaveOccurred ())
218
226
219
227
respValue := & test.Number {}
220
228
err = proto .Unmarshal (reply .GetResponse ().GetResponse (), respValue )
221
229
222
230
if err != nil {
223
231
return err
224
232
}
225
- if respValue .GetValue () != 1235 {
226
- return fmt .Errorf ("expected 1235, got %d" , respValue .GetValue ())
227
- }
233
+ Expect (respValue .GetValue ()).To (Equal (int64 (1235 )))
228
234
229
- close (done )
230
- return <- errC
231
- },
232
- }
233
- tc .Run (done )
234
- })
235
-
236
- It ("should forward raw RPCs and receive regular proto messages" , func () {
237
- done := make (chan struct {})
238
- tc := testCase {
239
- ServerHandler : func (stream test.Test_TestStreamServer ) error {
240
- ts , err := totem .NewServer (stream )
241
- if err != nil {
242
- return err
243
- }
244
- incSrv := incrementServer {}
245
- test .RegisterIncrementServer (ts , & incSrv )
246
- _ , errC := ts .Serve ()
247
-
248
- return <- errC
249
- },
250
- ClientHandler : func (stream test.Test_TestStreamClient ) error {
251
- ts , err := totem .NewServer (stream )
252
- if err != nil {
253
- return err
254
- }
255
-
256
- cc , errC := ts .Serve ()
257
-
258
- reqBytes , _ := proto .Marshal (& test.Number {
259
- Value : 1234 ,
260
- })
261
- req := & totem.RPC {
262
- ServiceName : "test.Increment" ,
263
- MethodName : "Inc" ,
235
+ errReq := & test.ErrorRequest {ReturnError : true }
236
+ errReqBytes , _ := proto .Marshal (errReq )
237
+ req = & totem.RPC {
238
+ ServiceName : "test.Error" ,
239
+ MethodName : "Error" ,
264
240
Content : & totem.RPC_Request {
265
- Request : reqBytes ,
241
+ Request : errReqBytes ,
266
242
},
267
243
}
268
- reply := & test.Number {}
269
-
270
- ctx , ca := context .WithTimeout (context .Background (), timeout )
271
- defer ca ()
244
+ reply = & totem.RPC {}
272
245
err = cc .Invoke (ctx , totem .Forward , req , reply )
273
- if err != nil {
274
- return err
246
+ Expect (err ).To (BeNil ())
247
+ errinfo , _ := anypb .New (& errdetails.ErrorInfo {
248
+ Reason : "reason" ,
249
+ Domain : "domain" ,
250
+ Metadata : map [string ]string {"key" : "value" },
251
+ })
252
+ expected := & totem.RPC {
253
+ Content : & totem.RPC_Response {
254
+ Response : & totem.Response {
255
+ Response : nil ,
256
+ StatusProto : & statuspb.Status {
257
+ Code : int32 (codes .Aborted ),
258
+ Message : "error" ,
259
+ Details : []* anypb.Any {
260
+ errinfo ,
261
+ },
262
+ },
263
+ },
264
+ },
265
+ // Metadata: totem.FromMD(metadata.Pairs("errorKey", "errorValue")),
275
266
}
276
-
277
- if reply .GetValue () != 1235 {
278
- return fmt .Errorf ("expected 1235, got %d" , reply .GetValue ())
267
+ if ! proto .Equal (reply , expected ) {
268
+ diff := cmp .Diff (reply , expected , protocmp .Transform ())
269
+ return fmt .Errorf ("Expected\n %s\n %s\n %s\n diff:\n %s" ,
270
+ format .IndentString (prototext .Format (reply ), 1 ),
271
+ "to equal" ,
272
+ format .IndentString (prototext .Format (expected ), 1 ),
273
+ diff ,
274
+ )
279
275
}
280
-
281
276
close (done )
282
277
return <- errC
283
278
},
@@ -1093,6 +1088,7 @@ var _ = Describe("Test", func() {
1093
1088
})
1094
1089
1095
1090
func checkIncrement (cc grpc.ClientConnInterface ) {
1091
+ GinkgoHelper ()
1096
1092
incClient := test .NewIncrementClient (cc )
1097
1093
ctx := metadata .AppendToOutgoingContext (context .Background (), "test" , "increment" )
1098
1094
result , err := incClient .Inc (ctx , & test.Number {
@@ -1103,6 +1099,7 @@ func checkIncrement(cc grpc.ClientConnInterface) {
1103
1099
}
1104
1100
1105
1101
func checkDecrement (cc grpc.ClientConnInterface ) {
1102
+ GinkgoHelper ()
1106
1103
decClient := test .NewDecrementClient (cc )
1107
1104
ctx := metadata .AppendToOutgoingContext (context .Background (), "test" , "decrement" )
1108
1105
result , err := decClient .Dec (ctx , & test.Number {
@@ -1113,6 +1110,7 @@ func checkDecrement(cc grpc.ClientConnInterface) {
1113
1110
}
1114
1111
1115
1112
func checkMultiply (cc grpc.ClientConnInterface ) {
1113
+ GinkgoHelper ()
1116
1114
mulClient := test .NewMultiplyClient (cc )
1117
1115
ctx := metadata .AppendToOutgoingContext (context .Background (), "test" , "multiply" )
1118
1116
result , err := mulClient .Mul (ctx , & test.Operands {
@@ -1124,6 +1122,7 @@ func checkMultiply(cc grpc.ClientConnInterface) {
1124
1122
}
1125
1123
1126
1124
func checkHash (cc grpc.ClientConnInterface ) {
1125
+ GinkgoHelper ()
1127
1126
hashClient := test .NewHashClient (cc )
1128
1127
ctx := metadata .AppendToOutgoingContext (context .Background (), "test" , "hash" )
1129
1128
result , err := hashClient .Hash (ctx , & test.String {
0 commit comments