@@ -25,6 +25,7 @@ import (
2525 "github.com/stretchr/testify/require"
2626 "google.golang.org/grpc"
2727
28+ "github.com/dapr/go-sdk/client/internal/crypto"
2829 commonv1 "github.com/dapr/go-sdk/internal/proto/dapr/proto/common/v1"
2930 runtimev1pb "github.com/dapr/go-sdk/internal/proto/dapr/proto/runtime/v1"
3031)
@@ -189,22 +190,24 @@ func TestDecrypt(t *testing.T) {
189190/* --- Server methods --- */
190191
191192func (s * testDaprServer ) EncryptAlpha1 (stream runtimev1pb.Dapr_EncryptAlpha1Server ) error {
192- return s . performCryptoOperation (
193+ return testPerformCryptoOperation (
193194 stream ,
194195 & runtimev1pb.EncryptRequest {},
195196 & runtimev1pb.EncryptResponse {},
196197 )
197198}
198199
199200func (s * testDaprServer ) DecryptAlpha1 (stream runtimev1pb.Dapr_DecryptAlpha1Server ) error {
200- return s . performCryptoOperation (
201+ return testPerformCryptoOperation (
201202 stream ,
202203 & runtimev1pb.DecryptRequest {},
203204 & runtimev1pb.DecryptResponse {},
204205 )
205206}
206207
207- func (s * testDaprServer ) performCryptoOperation (stream grpc.ServerStream , reqProto runtimev1pb.CryptoRequests , resProto runtimev1pb.CryptoResponses ) error {
208+ func testPerformCryptoOperation [T runtimev1pb.DecryptRequest | runtimev1pb.EncryptRequest , Y runtimev1pb.DecryptResponse | runtimev1pb.EncryptResponse ](
209+ stream grpc.ServerStream , reqProto * T , resProto * Y ,
210+ ) error {
208211 // This doesn't really encrypt or decrypt the data and just sends back whatever it receives
209212 pr , pw := io .Pipe ()
210213
@@ -216,7 +219,7 @@ func (s *testDaprServer) performCryptoOperation(stream grpc.ServerStream, reqPro
216219 )
217220 first := true
218221 for ! done && stream .Context ().Err () == nil {
219- reqProto .Reset ()
222+ crypto .Reset (reqProto )
220223 err = stream .RecvMsg (reqProto )
221224 if errors .Is (err , io .EOF ) {
222225 done = true
@@ -225,16 +228,16 @@ func (s *testDaprServer) performCryptoOperation(stream grpc.ServerStream, reqPro
225228 return
226229 }
227230
228- if first && ! reqProto . HasOptions ( ) {
231+ if first && ! hasOptions ( reqProto ) {
229232 pw .CloseWithError (errors .New ("first message must have options" ))
230233 return
231- } else if ! first && reqProto . HasOptions ( ) {
234+ } else if ! first && hasOptions ( reqProto ) {
232235 pw .CloseWithError (errors .New ("messages after first must not have options" ))
233236 return
234237 }
235238 first = false
236239
237- payload := reqProto .GetPayload ()
240+ payload := crypto .GetPayload (reqProto )
238241 if payload != nil {
239242 if payload .GetSeq () != expectSeq {
240243 pw .CloseWithError (fmt .Errorf ("invalid sequence number: %d (expected: %d)" , payload .GetSeq (), expectSeq ))
@@ -261,7 +264,7 @@ func (s *testDaprServer) performCryptoOperation(stream grpc.ServerStream, reqPro
261264 )
262265 buf := make ([]byte , 2 << 10 )
263266 for ! done && stream .Context ().Err () == nil {
264- resProto .Reset ()
267+ crypto .Reset (resProto )
265268
266269 n , err = pr .Read (buf )
267270 if errors .Is (err , io .EOF ) {
@@ -271,7 +274,7 @@ func (s *testDaprServer) performCryptoOperation(stream grpc.ServerStream, reqPro
271274 }
272275
273276 if n > 0 {
274- resProto .SetPayload (& commonv1.StreamPayload {
277+ crypto .SetPayload (resProto , & commonv1.StreamPayload {
275278 Seq : seq ,
276279 Data : buf [:n ],
277280 })
@@ -286,3 +289,18 @@ func (s *testDaprServer) performCryptoOperation(stream grpc.ServerStream, reqPro
286289
287290 return nil
288291}
292+
293+ func hasOptions [T runtimev1pb.DecryptRequest | runtimev1pb.EncryptRequest ](msg * T ) bool {
294+ if msg == nil {
295+ return false
296+ }
297+
298+ switch r := any (msg ).(type ) {
299+ case * runtimev1pb.EncryptRequest :
300+ return r .Options != nil
301+ case * runtimev1pb.DecryptRequest :
302+ return r .Options != nil
303+ }
304+
305+ return false
306+ }
0 commit comments