starpc 0.49.20 → 0.51.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/integration/cross-language/ts-client.js +5 -79
- package/dist/integration/cross-language/ts-server.js +4 -84
- package/dist/mock/index.d.ts +2 -2
- package/dist/mock/index.js +2 -2
- package/dist/srpc/client.d.ts +1 -3
- package/dist/srpc/client.js +2 -22
- package/dist/srpc/common-rpc.d.ts +1 -11
- package/dist/srpc/common-rpc.js +5 -66
- package/dist/srpc/handler.d.ts +1 -2
- package/dist/srpc/index.d.ts +0 -4
- package/dist/srpc/index.js +0 -2
- package/dist/srpc/invoker.d.ts +1 -2
- package/dist/srpc/server-rpc.js +1 -3
- package/dist/srpc/server.test.js +35 -1
- package/echo/echo.go +8 -8
- package/echo/echo.pb.go +12 -36
- package/echo/echo_srpc.pb.cpp +1 -1
- package/echo/echo_srpc.pb.go +1 -1
- package/echo/echo_srpc.pb.hpp +1 -1
- package/echo/echo_srpc.pb.rs +1 -1
- package/echo/server.go +1 -1
- package/go.mod +13 -12
- package/go.sum +26 -24
- package/integration/cross-language/go-client/main.go +4 -142
- package/integration/cross-language/go-server/main.go +3 -149
- package/integration/cross-language/run.bash +5 -105
- package/integration/cross-language/ts-client.ts +5 -90
- package/integration/cross-language/ts-server.ts +6 -94
- package/mock/index.ts +2 -2
- package/mock/mock.go +1 -1
- package/mock/mock.pb.go +12 -36
- package/mock/mock_srpc.pb.cpp +1 -1
- package/mock/mock_srpc.pb.go +1 -1
- package/mock/mock_srpc.pb.hpp +1 -1
- package/mock/mock_srpc.pb.rs +1 -1
- package/package.json +19 -26
- package/srpc/accept.go +1 -1
- package/srpc/client-prefix.go +1 -1
- package/srpc/client-set.go +1 -1
- package/srpc/client.go +1 -1
- package/srpc/client.ts +4 -31
- package/srpc/common-rpc.go +15 -69
- package/srpc/common-rpc.ts +6 -78
- package/srpc/common-rpc_test.go +81 -0
- package/srpc/errors.go +26 -1
- package/srpc/handler.ts +1 -2
- package/srpc/index.ts +0 -4
- package/srpc/invoker-prefix.go +1 -1
- package/srpc/invoker.go +2 -2
- package/srpc/invoker.ts +5 -9
- package/srpc/message.go +1 -1
- package/srpc/msg-stream.go +1 -9
- package/srpc/mux-verbose.go +1 -1
- package/srpc/mux.go +1 -1
- package/srpc/muxed-conn.go +1 -1
- package/srpc/muxed-yamux.go +1 -1
- package/srpc/rpcproto.pb.go +102 -323
- package/srpc/server-rpc.go +1 -1
- package/srpc/server-rpc.ts +1 -6
- package/srpc/server.test.ts +49 -1
- package/srpc/stream-pipe.go +1 -1
- package/srpc/stream-rwc.go +1 -1
- package/srpc/stream-yamux.go +1 -1
- package/srpc/stream.go +0 -20
- package/srpc/websocket.go +1 -1
- package/dist/srpc/call-receipt.d.ts +0 -17
- package/dist/srpc/call-receipt.js +0 -105
- package/dist/srpc/call-receipt.test.d.ts +0 -1
- package/dist/srpc/call-receipt.test.js +0 -374
- package/dist/srpc/server-invocation.d.ts +0 -17
- package/dist/srpc/server-invocation.js +0 -37
- package/srpc/call-receipt-e2e_test.go +0 -111
- package/srpc/call-receipt.go +0 -112
- package/srpc/call-receipt.test.ts +0 -438
- package/srpc/call-receipt.ts +0 -130
- package/srpc/call-receipt_test.go +0 -536
- package/srpc/server-invocation.go +0 -58
- package/srpc/server-invocation.ts +0 -82
package/echo/echo.pb.go
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Code generated by protoc-gen-go-lite. DO NOT EDIT.
|
|
2
|
-
// protoc-gen-go-lite version: v0.
|
|
2
|
+
// protoc-gen-go-lite version: v0.16.0
|
|
3
3
|
// source: github.com/aperturerobotics/starpc/echo/echo.proto
|
|
4
4
|
|
|
5
5
|
package echo
|
|
@@ -8,8 +8,6 @@ import (
|
|
|
8
8
|
fmt "fmt"
|
|
9
9
|
io "io"
|
|
10
10
|
slices "slices"
|
|
11
|
-
strconv "strconv"
|
|
12
|
-
strings "strings"
|
|
13
11
|
|
|
14
12
|
protobuf_go_lite "github.com/aperturerobotics/protobuf-go-lite"
|
|
15
13
|
json "github.com/aperturerobotics/protobuf-go-lite/json"
|
|
@@ -141,13 +139,10 @@ func (m *EchoMsg) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
|
|
|
141
139
|
var l int
|
|
142
140
|
_ = l
|
|
143
141
|
if m.unknownFields != nil {
|
|
144
|
-
i
|
|
145
|
-
copy(dAtA[i:], m.unknownFields)
|
|
142
|
+
i = protobuf_go_lite.EncodeRawBytes(dAtA, i, m.unknownFields)
|
|
146
143
|
}
|
|
147
144
|
if len(m.Body) > 0 {
|
|
148
|
-
i
|
|
149
|
-
copy(dAtA[i:], m.Body)
|
|
150
|
-
i = protobuf_go_lite.EncodeVarint(dAtA, i, uint64(len(m.Body)))
|
|
145
|
+
i = protobuf_go_lite.EncodeString(dAtA, i, m.Body)
|
|
151
146
|
i--
|
|
152
147
|
dAtA[i] = 0xa
|
|
153
148
|
}
|
|
@@ -160,26 +155,19 @@ func (m *EchoMsg) SizeVT() (n int) {
|
|
|
160
155
|
}
|
|
161
156
|
var l int
|
|
162
157
|
_ = l
|
|
163
|
-
|
|
164
|
-
if l > 0 {
|
|
165
|
-
n += 1 + l + protobuf_go_lite.SizeOfVarint(uint64(l))
|
|
166
|
-
}
|
|
158
|
+
n += protobuf_go_lite.SizeStringNonEmpty(1, m.Body)
|
|
167
159
|
n += len(m.unknownFields)
|
|
168
160
|
return n
|
|
169
161
|
}
|
|
170
162
|
|
|
171
163
|
func (x *EchoMsg) MarshalProtoText() string {
|
|
172
|
-
var sb
|
|
173
|
-
|
|
164
|
+
var sb protobuf_go_lite.TextBuilder
|
|
165
|
+
initialLen := protobuf_go_lite.TextStartMessage(&sb, "EchoMsg")
|
|
174
166
|
if x.Body != "" {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
}
|
|
178
|
-
sb.WriteString("body: ")
|
|
179
|
-
sb.WriteString(strconv.Quote(x.Body))
|
|
167
|
+
protobuf_go_lite.TextWriteFieldPrefix(&sb, initialLen, "body")
|
|
168
|
+
protobuf_go_lite.TextWriteString(&sb, x.Body)
|
|
180
169
|
}
|
|
181
|
-
|
|
182
|
-
return sb.String()
|
|
170
|
+
return protobuf_go_lite.TextFinishMessage(&sb)
|
|
183
171
|
}
|
|
184
172
|
|
|
185
173
|
func (x *EchoMsg) String() string {
|
|
@@ -210,24 +198,12 @@ func (m *EchoMsg) UnmarshalVT(dAtA []byte) error {
|
|
|
210
198
|
if wireType != 2 {
|
|
211
199
|
return fmt.Errorf("proto: wrong wireType = %d for field Body", wireType)
|
|
212
200
|
}
|
|
213
|
-
var
|
|
214
|
-
|
|
201
|
+
var v string
|
|
202
|
+
v, iNdEx, err = protobuf_go_lite.DecodeString(dAtA, iNdEx)
|
|
215
203
|
if err != nil {
|
|
216
204
|
return err
|
|
217
205
|
}
|
|
218
|
-
|
|
219
|
-
if intStringLen < 0 {
|
|
220
|
-
return protobuf_go_lite.ErrInvalidLength
|
|
221
|
-
}
|
|
222
|
-
postIndex := iNdEx + intStringLen
|
|
223
|
-
if postIndex < 0 {
|
|
224
|
-
return protobuf_go_lite.ErrInvalidLength
|
|
225
|
-
}
|
|
226
|
-
if postIndex > l {
|
|
227
|
-
return io.ErrUnexpectedEOF
|
|
228
|
-
}
|
|
229
|
-
m.Body = string(dAtA[iNdEx:postIndex])
|
|
230
|
-
iNdEx = postIndex
|
|
206
|
+
m.Body = v
|
|
231
207
|
default:
|
|
232
208
|
iNdEx = preIndex
|
|
233
209
|
skippy, err := protobuf_go_lite.Skip(dAtA[iNdEx:])
|
package/echo/echo_srpc.pb.cpp
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
//go:build deps_only
|
|
2
2
|
|
|
3
3
|
// Code generated by protoc-gen-starpc-cpp. DO NOT EDIT.
|
|
4
|
-
// protoc-gen-starpc-cpp version: v0.49.
|
|
4
|
+
// protoc-gen-starpc-cpp version: v0.49.21
|
|
5
5
|
// source: github.com/aperturerobotics/starpc/echo/echo.proto
|
|
6
6
|
|
|
7
7
|
#include "echo_srpc.pb.hpp"
|
package/echo/echo_srpc.pb.go
CHANGED
package/echo/echo_srpc.pb.hpp
CHANGED
package/echo/echo_srpc.pb.rs
CHANGED
package/echo/server.go
CHANGED
package/go.mod
CHANGED
|
@@ -3,31 +3,32 @@ module github.com/aperturerobotics/starpc
|
|
|
3
3
|
go 1.25.0
|
|
4
4
|
|
|
5
5
|
require (
|
|
6
|
-
github.com/aperturerobotics/common v0.
|
|
7
|
-
github.com/aperturerobotics/protobuf-go-lite v0.
|
|
8
|
-
github.com/aperturerobotics/util v1.34.
|
|
6
|
+
github.com/aperturerobotics/common v0.35.0 // latest
|
|
7
|
+
github.com/aperturerobotics/protobuf-go-lite v0.16.0 // latest
|
|
8
|
+
github.com/aperturerobotics/util v1.34.9 // latest
|
|
9
9
|
)
|
|
10
10
|
|
|
11
11
|
require (
|
|
12
12
|
github.com/aperturerobotics/abseil-cpp v0.0.0-20260131110040-4bb56e2f9017 // aperture-2
|
|
13
13
|
github.com/aperturerobotics/cli v1.1.0 // indirect
|
|
14
|
-
github.com/aperturerobotics/go-protoc-gen-prost v0.0.0-
|
|
15
|
-
github.com/aperturerobotics/go-protoc-wasi v0.0.0-
|
|
16
|
-
github.com/aperturerobotics/go-websocket v1.8.15-0.
|
|
17
|
-
github.com/aperturerobotics/json-iterator-lite v1.
|
|
14
|
+
github.com/aperturerobotics/go-protoc-gen-prost v0.0.0-20260705010911-9f53feac967b // indirect
|
|
15
|
+
github.com/aperturerobotics/go-protoc-wasi v0.0.0-20260712054757-d8078c296c17 // indirect
|
|
16
|
+
github.com/aperturerobotics/go-websocket v1.8.15-0.20260619192713-a096778f08c1 // master
|
|
17
|
+
github.com/aperturerobotics/json-iterator-lite v1.1.0 // indirect
|
|
18
18
|
github.com/aperturerobotics/protobuf v0.0.0-20260203024654-8201686529c4 // wasi
|
|
19
19
|
)
|
|
20
20
|
|
|
21
21
|
require (
|
|
22
|
-
github.com/libp2p/go-yamux/v4 v4.0.2 // latest
|
|
23
22
|
github.com/pkg/errors v0.9.1 // latest
|
|
24
|
-
github.com/sirupsen/logrus v1.9.5-0.
|
|
23
|
+
github.com/sirupsen/logrus v1.9.5-0.20260629095817-a23d315dfebb // latest
|
|
25
24
|
)
|
|
26
25
|
|
|
26
|
+
require github.com/libp2p/go-yamux/v5 v5.1.0
|
|
27
|
+
|
|
27
28
|
require (
|
|
28
29
|
github.com/libp2p/go-buffer-pool v0.1.0 // indirect
|
|
29
|
-
github.com/tetratelabs/wazero v1.
|
|
30
|
+
github.com/tetratelabs/wazero v1.12.0 // indirect
|
|
30
31
|
github.com/xrash/smetrics v0.0.0-20250705151800-55b8f293f342 // indirect
|
|
31
|
-
golang.org/x/mod v0.
|
|
32
|
-
golang.org/x/sys v0.
|
|
32
|
+
golang.org/x/mod v0.38.0 // indirect
|
|
33
|
+
golang.org/x/sys v0.47.0 // indirect
|
|
33
34
|
)
|
package/go.sum
CHANGED
|
@@ -2,46 +2,48 @@ github.com/aperturerobotics/abseil-cpp v0.0.0-20260131110040-4bb56e2f9017 h1:3U7
|
|
|
2
2
|
github.com/aperturerobotics/abseil-cpp v0.0.0-20260131110040-4bb56e2f9017/go.mod h1:lNSJTKECIUFAnfeSqy01kXYTYe1BHubW7198jNX3nEw=
|
|
3
3
|
github.com/aperturerobotics/cli v1.1.0 h1:7a+YRC+EY3npAnTzhHV5gLCiw91KS0Ts3XwLILGOsT8=
|
|
4
4
|
github.com/aperturerobotics/cli v1.1.0/go.mod h1:M7BFP9wow5ytTzMyJQOOO991fGfsUqdTI7gGEsHfTQ8=
|
|
5
|
-
github.com/aperturerobotics/common v0.
|
|
6
|
-
github.com/aperturerobotics/common v0.
|
|
7
|
-
github.com/aperturerobotics/
|
|
8
|
-
github.com/aperturerobotics/
|
|
9
|
-
github.com/aperturerobotics/go-protoc-
|
|
10
|
-
github.com/aperturerobotics/go-protoc-
|
|
11
|
-
github.com/aperturerobotics/go-
|
|
12
|
-
github.com/aperturerobotics/go-
|
|
13
|
-
github.com/aperturerobotics/
|
|
14
|
-
github.com/aperturerobotics/
|
|
5
|
+
github.com/aperturerobotics/common v0.34.4 h1:RQTOm6LxEnucXkED/kruhKKAOL6tbaPzMgfHPKaES4k=
|
|
6
|
+
github.com/aperturerobotics/common v0.34.4/go.mod h1:xnb1VBRs3x2o1PaKg0OlP7SqDaC9Hmrmt9xH85rOS+A=
|
|
7
|
+
github.com/aperturerobotics/common v0.35.0 h1:VU4OPMXJyqT37lTOtNEMa3QLW5tR8YIBAKbjgxSzuZs=
|
|
8
|
+
github.com/aperturerobotics/common v0.35.0/go.mod h1:xnb1VBRs3x2o1PaKg0OlP7SqDaC9Hmrmt9xH85rOS+A=
|
|
9
|
+
github.com/aperturerobotics/go-protoc-gen-prost v0.0.0-20260705010911-9f53feac967b h1:MMk+AbWPCMfqc2Lm2bJl8lCCsuvlM2+C0CP10fpE3bc=
|
|
10
|
+
github.com/aperturerobotics/go-protoc-gen-prost v0.0.0-20260705010911-9f53feac967b/go.mod h1:OBb/beWmr/pDIZAUfi86j/4tBh2v5ctTxKMqSnh9c/4=
|
|
11
|
+
github.com/aperturerobotics/go-protoc-wasi v0.0.0-20260712054757-d8078c296c17 h1:WT1YmZjJf8fUF1zKbeNNKXFA+t8Wtbr8AVMAmdKcrUU=
|
|
12
|
+
github.com/aperturerobotics/go-protoc-wasi v0.0.0-20260712054757-d8078c296c17/go.mod h1:vEq8i7EKb32+KXGtIEZjjhNns+BdsL2dUMw4uhy3578=
|
|
13
|
+
github.com/aperturerobotics/go-websocket v1.8.15-0.20260619192713-a096778f08c1 h1:q2qkdNOrnhAFf6B7TBeUoAYstYWxPvozN+3vJi2jgp0=
|
|
14
|
+
github.com/aperturerobotics/go-websocket v1.8.15-0.20260619192713-a096778f08c1/go.mod h1:9KnSGuqxSXbdB/Oi0I6vvfPLkclfJwMGAQaDDGVgGow=
|
|
15
|
+
github.com/aperturerobotics/json-iterator-lite v1.1.0 h1:ZLLqHhHTKYlmCAP873ras2e/yVU/THtwC+ji3tXLMMg=
|
|
16
|
+
github.com/aperturerobotics/json-iterator-lite v1.1.0/go.mod h1:SvGGBv3OVxUyqO0ZxA/nvs6z3cg7NIbZ64TnbV2OISo=
|
|
15
17
|
github.com/aperturerobotics/protobuf v0.0.0-20260203024654-8201686529c4 h1:4Dy3BAHh2kgVdHAqtlwcFsgY0kAwUe2m3rfFcaGwGQg=
|
|
16
18
|
github.com/aperturerobotics/protobuf v0.0.0-20260203024654-8201686529c4/go.mod h1:tMgO7y6SJo/d9ZcvrpNqIQtdYT9de+QmYaHOZ4KnhOg=
|
|
17
|
-
github.com/aperturerobotics/protobuf-go-lite v0.
|
|
18
|
-
github.com/aperturerobotics/protobuf-go-lite v0.
|
|
19
|
-
github.com/aperturerobotics/util v1.34.
|
|
20
|
-
github.com/aperturerobotics/util v1.34.
|
|
19
|
+
github.com/aperturerobotics/protobuf-go-lite v0.16.0 h1:McGR0jrc15ZkH8HUpAARDOtazjwqr+uYXVHrrR59K28=
|
|
20
|
+
github.com/aperturerobotics/protobuf-go-lite v0.16.0/go.mod h1:3Ay/E7iaw2KWLirK3+dDdNJZHK0hu8Y1/kKeYeUa+8s=
|
|
21
|
+
github.com/aperturerobotics/util v1.34.9 h1:Eyhu1Citt+od7jKIb+Q92h/CEujWCFsvdvJavQeoRjM=
|
|
22
|
+
github.com/aperturerobotics/util v1.34.9/go.mod h1:GxjGkYQNEj8xvLFz+T8ifqANtK5cMesOlCxh50htvBI=
|
|
21
23
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
|
22
24
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
|
23
25
|
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
|
24
26
|
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
|
25
27
|
github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8=
|
|
26
28
|
github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg=
|
|
27
|
-
github.com/libp2p/go-yamux/
|
|
28
|
-
github.com/libp2p/go-yamux/
|
|
29
|
+
github.com/libp2p/go-yamux/v5 v5.1.0 h1:8Qlxj4E9JGJAQVW6+uj2o7mqkqsIVlSUGmTWhlXzoHE=
|
|
30
|
+
github.com/libp2p/go-yamux/v5 v5.1.0/go.mod h1:tgIQ07ObtRR/I0IWsFOyQIL9/dR5UXgc2s8xKmNZv1o=
|
|
29
31
|
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
|
30
32
|
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
|
31
33
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
|
32
34
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
|
33
|
-
github.com/sirupsen/logrus v1.9.5-0.
|
|
34
|
-
github.com/sirupsen/logrus v1.9.5-0.
|
|
35
|
+
github.com/sirupsen/logrus v1.9.5-0.20260629095817-a23d315dfebb h1:+C8W2sTMIRbihe5hQH6JuT2mi3m/QgdGf0YdFyx2azA=
|
|
36
|
+
github.com/sirupsen/logrus v1.9.5-0.20260629095817-a23d315dfebb/go.mod h1:FXZFonkDAnFozmO+5hGAFvB0Yg9/j2SIhA/QuIkP180=
|
|
35
37
|
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
|
|
36
38
|
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
|
|
37
|
-
github.com/tetratelabs/wazero v1.
|
|
38
|
-
github.com/tetratelabs/wazero v1.
|
|
39
|
+
github.com/tetratelabs/wazero v1.12.0 h1:DuWcpNu/FzgEXgGBDp8J1Spc+CWOvvtvVyjKlaZopYU=
|
|
40
|
+
github.com/tetratelabs/wazero v1.12.0/go.mod h1:LvKtzl2RqO4gyF27BiXU+nKAjcV8f38U+kP/q2vgxh0=
|
|
39
41
|
github.com/xrash/smetrics v0.0.0-20250705151800-55b8f293f342 h1:FnBeRrxr7OU4VvAzt5X7s6266i6cSVkkFPS0TuXWbIg=
|
|
40
42
|
github.com/xrash/smetrics v0.0.0-20250705151800-55b8f293f342/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM=
|
|
41
|
-
golang.org/x/mod v0.
|
|
42
|
-
golang.org/x/mod v0.
|
|
43
|
-
golang.org/x/sys v0.
|
|
44
|
-
golang.org/x/sys v0.
|
|
43
|
+
golang.org/x/mod v0.38.0 h1:MECBjubtXD7yj4HrhIUcywNaGeNVUdfVnxmPajOk4yk=
|
|
44
|
+
golang.org/x/mod v0.38.0/go.mod h1:V6Xz0pq8TQ3dGqVQ1FVHuelZpAL0uNhSkk9ogYP3c40=
|
|
45
|
+
golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs=
|
|
46
|
+
golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
|
|
45
47
|
google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
|
|
46
48
|
google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
|
|
47
49
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
|
@@ -2,7 +2,6 @@ package main
|
|
|
2
2
|
|
|
3
3
|
import (
|
|
4
4
|
"context"
|
|
5
|
-
"errors"
|
|
6
5
|
"fmt"
|
|
7
6
|
"io"
|
|
8
7
|
"net"
|
|
@@ -15,32 +14,13 @@ import (
|
|
|
15
14
|
const bodyTxt = "hello world via starpc cross-language e2e test"
|
|
16
15
|
|
|
17
16
|
func main() {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
addrIndex := 1
|
|
21
|
-
if receiptMode {
|
|
22
|
-
if len(os.Args) < 3 {
|
|
23
|
-
fmt.Fprintf(os.Stderr, "usage: go-client receipt <case> <addr>\n")
|
|
24
|
-
os.Exit(1)
|
|
25
|
-
}
|
|
26
|
-
receiptCase = os.Args[2]
|
|
27
|
-
addrIndex = 3
|
|
28
|
-
switch receiptCase {
|
|
29
|
-
case "commit", "abort", "loss", "bare-close":
|
|
30
|
-
default:
|
|
31
|
-
fmt.Fprintf(os.Stderr, "unknown receipt case: %s\n", receiptCase)
|
|
32
|
-
os.Exit(1)
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
if len(os.Args) <= addrIndex {
|
|
36
|
-
fmt.Fprintf(os.Stderr, "usage: go-client [receipt <case>] <addr>\n")
|
|
17
|
+
if len(os.Args) <= 1 {
|
|
18
|
+
fmt.Fprintf(os.Stderr, "usage: go-client <addr>\n")
|
|
37
19
|
os.Exit(1)
|
|
38
20
|
}
|
|
39
|
-
addr := os.Args[
|
|
40
|
-
var conn net.Conn
|
|
21
|
+
addr := os.Args[1]
|
|
41
22
|
openStream := func(ctx context.Context, msgHandler srpc.PacketDataHandler, closeHandler srpc.CloseHandler) (srpc.PacketWriter, error) {
|
|
42
|
-
|
|
43
|
-
conn, err = net.Dial("tcp", addr) //nolint:gosec
|
|
23
|
+
conn, err := net.Dial("tcp", addr) //nolint:gosec
|
|
44
24
|
if err != nil {
|
|
45
25
|
return nil, err
|
|
46
26
|
}
|
|
@@ -52,35 +32,22 @@ func main() {
|
|
|
52
32
|
client := srpc.NewClient(openStream)
|
|
53
33
|
echoClient := echo.NewSRPCEchoerClient(client)
|
|
54
34
|
ctx := context.Background()
|
|
55
|
-
if receiptMode {
|
|
56
|
-
if err := testReceipt(ctx, client, &conn, receiptCase); err != nil {
|
|
57
|
-
fmt.Fprintf(os.Stderr, "receipt test failed: %v\n", err)
|
|
58
|
-
os.Exit(1)
|
|
59
|
-
}
|
|
60
|
-
fmt.Println("All tests passed.")
|
|
61
|
-
return
|
|
62
|
-
}
|
|
63
|
-
|
|
64
35
|
if err := testUnary(ctx, echoClient); err != nil {
|
|
65
36
|
fmt.Fprintf(os.Stderr, "unary test failed: %v\n", err)
|
|
66
37
|
os.Exit(1)
|
|
67
38
|
}
|
|
68
|
-
|
|
69
39
|
if err := testServerStream(ctx, echoClient); err != nil {
|
|
70
40
|
fmt.Fprintf(os.Stderr, "server stream test failed: %v\n", err)
|
|
71
41
|
os.Exit(1)
|
|
72
42
|
}
|
|
73
|
-
|
|
74
43
|
if err := testClientStream(ctx, echoClient); err != nil {
|
|
75
44
|
fmt.Fprintf(os.Stderr, "client stream test failed: %v\n", err)
|
|
76
45
|
os.Exit(1)
|
|
77
46
|
}
|
|
78
|
-
|
|
79
47
|
if err := testBidiStream(ctx, echoClient); err != nil {
|
|
80
48
|
fmt.Fprintf(os.Stderr, "bidi stream test failed: %v\n", err)
|
|
81
49
|
os.Exit(1)
|
|
82
50
|
}
|
|
83
|
-
|
|
84
51
|
fmt.Println("All tests passed.")
|
|
85
52
|
}
|
|
86
53
|
|
|
@@ -97,79 +64,6 @@ func testUnary(ctx context.Context, client echo.SRPCEchoerClient) error {
|
|
|
97
64
|
return nil
|
|
98
65
|
}
|
|
99
66
|
|
|
100
|
-
func testReceipt(
|
|
101
|
-
ctx context.Context,
|
|
102
|
-
client srpc.Client,
|
|
103
|
-
conn *net.Conn,
|
|
104
|
-
receiptCase string,
|
|
105
|
-
) error {
|
|
106
|
-
fmt.Printf("Testing held unary receipt (%s)...\n", receiptCase)
|
|
107
|
-
out := new(echo.EchoMsg)
|
|
108
|
-
receipt, err := srpc.ExecCallReceipt(
|
|
109
|
-
ctx, client, echo.SRPCEchoerServiceID, "Echo",
|
|
110
|
-
&echo.EchoMsg{Body: bodyTxt}, out,
|
|
111
|
-
)
|
|
112
|
-
if err != nil {
|
|
113
|
-
return fmt.Errorf("receipt call: %w", err)
|
|
114
|
-
}
|
|
115
|
-
if out.GetBody() != bodyTxt {
|
|
116
|
-
return fmt.Errorf("expected %q got %q", bodyTxt, out.GetBody())
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
switch receiptCase {
|
|
120
|
-
case "commit":
|
|
121
|
-
if err := receipt.Commit(); err != nil {
|
|
122
|
-
return fmt.Errorf("receipt commit: %w", err)
|
|
123
|
-
}
|
|
124
|
-
case "abort":
|
|
125
|
-
if err := receipt.Abort(); err != nil {
|
|
126
|
-
return fmt.Errorf("receipt abort: %w", err)
|
|
127
|
-
}
|
|
128
|
-
case "loss":
|
|
129
|
-
if *conn == nil {
|
|
130
|
-
return errors.New("receipt connection is nil")
|
|
131
|
-
}
|
|
132
|
-
tcpConn, ok := (*conn).(*net.TCPConn)
|
|
133
|
-
if !ok {
|
|
134
|
-
return errors.New("receipt connection is not TCP")
|
|
135
|
-
}
|
|
136
|
-
if err := tcpConn.SetLinger(0); err != nil {
|
|
137
|
-
return fmt.Errorf("set receipt loss linger: %w", err)
|
|
138
|
-
}
|
|
139
|
-
if err := tcpConn.Close(); err != nil {
|
|
140
|
-
return fmt.Errorf("close lost connection: %w", err)
|
|
141
|
-
}
|
|
142
|
-
if err := receipt.Commit(); err == nil {
|
|
143
|
-
return errors.New("loss receipt commit unexpectedly succeeded")
|
|
144
|
-
}
|
|
145
|
-
case "bare-close":
|
|
146
|
-
if *conn == nil {
|
|
147
|
-
return errors.New("receipt connection is nil")
|
|
148
|
-
}
|
|
149
|
-
tcpConn, ok := (*conn).(*net.TCPConn)
|
|
150
|
-
if !ok {
|
|
151
|
-
return errors.New("receipt connection is not TCP")
|
|
152
|
-
}
|
|
153
|
-
if err := tcpConn.CloseWrite(); err != nil {
|
|
154
|
-
return fmt.Errorf("close receipt write side: %w", err)
|
|
155
|
-
}
|
|
156
|
-
if err := receipt.Commit(); err == nil {
|
|
157
|
-
return errors.New("bare-close receipt commit unexpectedly succeeded")
|
|
158
|
-
}
|
|
159
|
-
default:
|
|
160
|
-
return fmt.Errorf("unknown receipt case: %s", receiptCase)
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
if err := emitReceiptEvent(
|
|
164
|
-
fmt.Sprintf("CLIENT_RECEIPT_RESOLVED %s", receiptTerminalName(receiptCase)),
|
|
165
|
-
); err != nil {
|
|
166
|
-
return fmt.Errorf("record receipt resolution: %w", err)
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
fmt.Println(" PASSED")
|
|
170
|
-
return nil
|
|
171
|
-
}
|
|
172
|
-
|
|
173
67
|
func testServerStream(ctx context.Context, client echo.SRPCEchoerClient) error {
|
|
174
68
|
fmt.Println("Testing ServerStream RPC...")
|
|
175
69
|
strm, err := client.EchoServerStream(ctx, &echo.EchoMsg{Body: bodyTxt})
|
|
@@ -249,35 +143,3 @@ func testBidiStream(ctx context.Context, client echo.SRPCEchoerClient) error {
|
|
|
249
143
|
fmt.Println(" PASSED")
|
|
250
144
|
return nil
|
|
251
145
|
}
|
|
252
|
-
|
|
253
|
-
func receiptTerminalName(receiptCase string) string {
|
|
254
|
-
switch receiptCase {
|
|
255
|
-
case "commit":
|
|
256
|
-
return "committed"
|
|
257
|
-
case "abort":
|
|
258
|
-
return "canceled"
|
|
259
|
-
case "loss":
|
|
260
|
-
return "transportLost"
|
|
261
|
-
case "bare-close":
|
|
262
|
-
return "closed"
|
|
263
|
-
default:
|
|
264
|
-
return "unknown"
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
func emitReceiptEvent(line string) error {
|
|
269
|
-
fmt.Println(line)
|
|
270
|
-
fifo := os.Getenv("RECEIPT_EVENT_FIFO")
|
|
271
|
-
if fifo == "" {
|
|
272
|
-
return nil
|
|
273
|
-
}
|
|
274
|
-
file, err := os.OpenFile(fifo, os.O_WRONLY, 0) //nolint:gosec // FIFO path is created by the local integration runner.
|
|
275
|
-
if err != nil {
|
|
276
|
-
return err
|
|
277
|
-
}
|
|
278
|
-
if _, err := file.WriteString(line + "\n"); err != nil {
|
|
279
|
-
_ = file.Close()
|
|
280
|
-
return err
|
|
281
|
-
}
|
|
282
|
-
return file.Close()
|
|
283
|
-
}
|
|
@@ -6,7 +6,6 @@ import (
|
|
|
6
6
|
"net"
|
|
7
7
|
"os"
|
|
8
8
|
"os/signal"
|
|
9
|
-
"sync"
|
|
10
9
|
|
|
11
10
|
"github.com/aperturerobotics/starpc/echo"
|
|
12
11
|
"github.com/aperturerobotics/starpc/srpc"
|
|
@@ -16,73 +15,13 @@ func main() {
|
|
|
16
15
|
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt)
|
|
17
16
|
defer cancel()
|
|
18
17
|
|
|
19
|
-
receiptMode := len(os.Args) > 1 && os.Args[1] == "receipt"
|
|
20
|
-
receiptCase := ""
|
|
21
|
-
if receiptMode {
|
|
22
|
-
if len(os.Args) < 3 {
|
|
23
|
-
fmt.Fprintln(os.Stderr, "usage: go-server receipt <case>")
|
|
24
|
-
os.Exit(1)
|
|
25
|
-
}
|
|
26
|
-
receiptCase = os.Args[2]
|
|
27
|
-
switch receiptCase {
|
|
28
|
-
case "commit", "abort", "loss", "bare-close":
|
|
29
|
-
default:
|
|
30
|
-
fmt.Fprintf(os.Stderr, "unknown receipt case: %s\n", receiptCase)
|
|
31
|
-
os.Exit(1)
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
18
|
mux := srpc.NewMux()
|
|
35
19
|
echoServer := echo.NewEchoServer(mux)
|
|
36
20
|
if err := echo.SRPCRegisterEchoer(mux, echoServer); err != nil {
|
|
37
21
|
fmt.Fprintf(os.Stderr, "register error: %v\n", err)
|
|
38
22
|
os.Exit(1)
|
|
39
23
|
}
|
|
40
|
-
|
|
41
|
-
var finishReceipt func()
|
|
42
|
-
if receiptMode {
|
|
43
|
-
done := make(chan struct{})
|
|
44
|
-
var doneOnce sync.Once
|
|
45
|
-
receiptDone = done
|
|
46
|
-
finishReceipt = func() {
|
|
47
|
-
doneOnce.Do(func() {
|
|
48
|
-
close(done)
|
|
49
|
-
})
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
var invoker srpc.Invoker = mux
|
|
53
|
-
if receiptMode {
|
|
54
|
-
invoker = srpc.InvokerFunc(func(
|
|
55
|
-
serviceID, methodID string,
|
|
56
|
-
strm srpc.Stream,
|
|
57
|
-
) (bool, error) {
|
|
58
|
-
handled, err := mux.InvokeMethod(serviceID, methodID, strm)
|
|
59
|
-
if err != nil || !handled {
|
|
60
|
-
return handled, err
|
|
61
|
-
}
|
|
62
|
-
invocation, ok := srpc.GetServerInvocation(strm.Context())
|
|
63
|
-
if !ok {
|
|
64
|
-
return true, context.Canceled
|
|
65
|
-
}
|
|
66
|
-
kind, waitErr := invocation.WaitTerminal(context.Background())
|
|
67
|
-
markerErr := emitReceiptEvent(
|
|
68
|
-
fmt.Sprintf("SERVER_RECEIPT_TERMINAL %s", terminalName(kind)),
|
|
69
|
-
)
|
|
70
|
-
if waitErr != nil {
|
|
71
|
-
return true, waitErr
|
|
72
|
-
}
|
|
73
|
-
if markerErr != nil {
|
|
74
|
-
return true, markerErr
|
|
75
|
-
}
|
|
76
|
-
if kind != srpc.TerminalCommitted {
|
|
77
|
-
finishReceipt()
|
|
78
|
-
}
|
|
79
|
-
return true, nil
|
|
80
|
-
})
|
|
81
|
-
}
|
|
82
|
-
var server *srpc.Server
|
|
83
|
-
if !receiptMode {
|
|
84
|
-
server = srpc.NewServer(invoker)
|
|
85
|
-
}
|
|
24
|
+
server := srpc.NewServer(mux)
|
|
86
25
|
ln, err := net.Listen("tcp", "127.0.0.1:0")
|
|
87
26
|
if err != nil {
|
|
88
27
|
fmt.Fprintf(os.Stderr, "listen error: %v\n", err)
|
|
@@ -90,101 +29,16 @@ func main() {
|
|
|
90
29
|
}
|
|
91
30
|
defer ln.Close()
|
|
92
31
|
|
|
93
|
-
if receiptMode {
|
|
94
|
-
go func() {
|
|
95
|
-
<-receiptDone
|
|
96
|
-
_ = ln.Close()
|
|
97
|
-
}()
|
|
98
|
-
}
|
|
99
|
-
|
|
100
32
|
fmt.Printf("LISTENING %s\n", ln.Addr().String())
|
|
101
|
-
|
|
102
33
|
go func() {
|
|
103
34
|
<-ctx.Done()
|
|
104
|
-
ln.Close()
|
|
35
|
+
_ = ln.Close()
|
|
105
36
|
}()
|
|
106
|
-
|
|
107
37
|
for {
|
|
108
38
|
conn, err := ln.Accept()
|
|
109
39
|
if err != nil {
|
|
110
40
|
return
|
|
111
41
|
}
|
|
112
|
-
|
|
113
|
-
go handleReceiptStream(ctx, conn, invoker, finishReceipt)
|
|
114
|
-
} else {
|
|
115
|
-
go server.HandleStream(ctx, conn)
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
func handleReceiptStream(
|
|
121
|
-
ctx context.Context,
|
|
122
|
-
conn net.Conn,
|
|
123
|
-
invoker srpc.Invoker,
|
|
124
|
-
finishReceipt func(),
|
|
125
|
-
) {
|
|
126
|
-
prw := srpc.NewPacketReadWriter(conn)
|
|
127
|
-
writer := &receiptPacketWriter{
|
|
128
|
-
inner: prw,
|
|
129
|
-
finishReceipt: finishReceipt,
|
|
130
|
-
}
|
|
131
|
-
rpc := srpc.NewServerRPC(ctx, invoker, writer)
|
|
132
|
-
prw.ReadPump(rpc.HandlePacketData, rpc.HandleStreamClose)
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
type receiptPacketWriter struct {
|
|
136
|
-
inner srpc.PacketWriter
|
|
137
|
-
finishReceipt func()
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
func (w *receiptPacketWriter) WritePacket(pkt *srpc.Packet) error {
|
|
141
|
-
if err := w.inner.WritePacket(pkt); err != nil {
|
|
142
|
-
return err
|
|
143
|
-
}
|
|
144
|
-
data := pkt.GetCallData()
|
|
145
|
-
if data != nil && data.GetComplete() && data.GetError() == "" {
|
|
146
|
-
if err := emitReceiptEvent("SERVER_RECEIPT_ACK committed"); err != nil {
|
|
147
|
-
return err
|
|
148
|
-
}
|
|
149
|
-
w.finishReceipt()
|
|
150
|
-
}
|
|
151
|
-
return nil
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
func (w *receiptPacketWriter) Close() error {
|
|
155
|
-
return w.inner.Close()
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
func terminalName(kind srpc.TerminalKind) string {
|
|
159
|
-
switch kind {
|
|
160
|
-
case srpc.TerminalCommitted:
|
|
161
|
-
return "committed"
|
|
162
|
-
case srpc.TerminalCanceled:
|
|
163
|
-
return "canceled"
|
|
164
|
-
case srpc.TerminalLost:
|
|
165
|
-
return "transportLost"
|
|
166
|
-
case srpc.TerminalClosed:
|
|
167
|
-
return "closed"
|
|
168
|
-
case srpc.TerminalAbandoned:
|
|
169
|
-
return "abandoned"
|
|
170
|
-
default:
|
|
171
|
-
return "unknown"
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
func emitReceiptEvent(line string) error {
|
|
176
|
-
fmt.Println(line)
|
|
177
|
-
fifo := os.Getenv("RECEIPT_EVENT_FIFO")
|
|
178
|
-
if fifo == "" {
|
|
179
|
-
return nil
|
|
180
|
-
}
|
|
181
|
-
file, err := os.OpenFile(fifo, os.O_WRONLY, 0) //nolint:gosec // FIFO path is created by the local integration runner.
|
|
182
|
-
if err != nil {
|
|
183
|
-
return err
|
|
184
|
-
}
|
|
185
|
-
if _, err := file.WriteString(line + "\n"); err != nil {
|
|
186
|
-
_ = file.Close()
|
|
187
|
-
return err
|
|
42
|
+
go server.HandleStream(ctx, conn)
|
|
188
43
|
}
|
|
189
|
-
return file.Close()
|
|
190
44
|
}
|