github.com/choria-io/go-choria@v0.28.1-0.20240416190746-b3bf9c7d5a45/protocol/v2/transport_test.go (about) 1 // Copyright (c) 2022, R.I. Pienaar and the Choria Project contributors 2 // 3 // SPDX-License-Identifier: Apache-2.0 4 5 package v2 6 7 import ( 8 "github.com/choria-io/go-choria/inter" 9 imock "github.com/choria-io/go-choria/inter/imocks" 10 "github.com/choria-io/go-choria/protocol" 11 "github.com/golang/mock/gomock" 12 . "github.com/onsi/ginkgo/v2" 13 . "github.com/onsi/gomega" 14 "github.com/tidwall/gjson" 15 ) 16 17 var _ = Describe("TransportMessage", func() { 18 var mockctl *gomock.Controller 19 var security *imock.MockSecurityProvider 20 21 BeforeEach(func() { 22 mockctl = gomock.NewController(GinkgoT()) 23 security = imock.NewMockSecurityProvider(mockctl) 24 security.EXPECT().BackingTechnology().Return(inter.SecurityTechnologyED25519JWT) 25 security.EXPECT().ShouldSignReplies().Return(true).AnyTimes() 26 security.EXPECT().ChecksumBytes(gomock.Any()).Return([]byte("stub checksum")).AnyTimes() 27 security.EXPECT().TokenBytes().Return([]byte("stub token bytes"), nil).AnyTimes() 28 security.EXPECT().SignBytes(gomock.Any()).Return([]byte("stub signature"), nil).AnyTimes() 29 }) 30 31 AfterEach(func() { 32 mockctl.Finish() 33 }) 34 35 It("Should support reply data", func() { 36 request, _ := NewRequest("test", "go.tests", "rip.mcollective", 120, "a2f0ca717c694f2086cfa81b6c494648", "mcollective") 37 request.SetMessage([]byte(`{"message":1}`)) 38 reply, err := NewReply(request, "testing") 39 Expect(err).ToNot(HaveOccurred()) 40 sreply, err := NewSecureReply(reply, security) 41 Expect(err).ToNot(HaveOccurred()) 42 treply, err := NewTransportMessage("rip.mcollective") 43 Expect(err).ToNot(HaveOccurred()) 44 err = treply.SetReplyData(sreply) 45 Expect(err).ToNot(HaveOccurred()) 46 47 sj, err := sreply.JSON() 48 Expect(err).ToNot(HaveOccurred()) 49 50 j, err := treply.JSON() 51 Expect(err).ToNot(HaveOccurred()) 52 53 Expect(protocol.VersionFromJSON(j)).To(Equal(protocol.TransportV2)) 54 Expect(gjson.GetBytes(j, "headers.sender").String()).To(Equal("rip.mcollective")) 55 56 d, err := treply.Message() 57 Expect(err).ToNot(HaveOccurred()) 58 59 Expect(d).To(Equal(sj)) 60 }) 61 62 It("Should support request data", func() { 63 request, err := NewRequest("test", "go.tests", "rip.mcollective", 120, "a2f0ca717c694f2086cfa81b6c494648", "mcollective") 64 Expect(err).ToNot(HaveOccurred()) 65 request.SetMessage([]byte(`{"message":1}`)) 66 srequest, err := NewSecureRequest(request, security) 67 Expect(err).ToNot(HaveOccurred()) 68 trequest, err := NewTransportMessage("rip.mcollective") 69 Expect(err).ToNot(HaveOccurred()) 70 trequest.SetRequestData(srequest) 71 72 sj, err := srequest.JSON() 73 Expect(err).ToNot(HaveOccurred()) 74 j, err := trequest.JSON() 75 Expect(err).ToNot(HaveOccurred()) 76 77 Expect(protocol.VersionFromJSON(j)).To(Equal(protocol.TransportV2)) 78 Expect(gjson.GetBytes(j, "headers.sender").String()).To(Equal("rip.mcollective")) 79 80 d, err := trequest.Message() 81 Expect(err).ToNot(HaveOccurred()) 82 83 Expect(d).To(Equal(sj)) 84 }) 85 86 It("Should support creation from JSON data", func() { 87 protocol.ClientStrictValidation = true 88 defer func() { protocol.ClientStrictValidation = false }() 89 90 request, err := NewRequest("test", "go.tests", "rip.mcollective", 120, "a2f0ca717c694f2086cfa81b6c494648", "mcollective") 91 Expect(err).ToNot(HaveOccurred()) 92 request.SetMessage([]byte("hello world")) 93 srequest, err := NewSecureRequest(request, security) 94 Expect(err).ToNot(HaveOccurred()) 95 trequest, err := NewTransportMessage("rip.mcollective") 96 Expect(err).ToNot(HaveOccurred()) 97 98 Expect(trequest.SetRequestData(srequest)).To(Succeed()) 99 100 j, err := trequest.JSON() 101 Expect(err).ToNot(HaveOccurred()) 102 103 _, err = NewTransportFromJSON(j) 104 Expect(err).ToNot(HaveOccurred()) 105 106 _, err = NewTransportFromJSON([]byte(`{"protocol": 1}`)) 107 Expect(err).To(MatchError("supplied JSON document does not pass schema validation: missing properties: 'data', 'headers', /protocol: expected string, but got number")) 108 }) 109 })