10000 fixup! chore: rework RPC version negotiation · coder/coder@6fa4220 · GitHub
[go: up one dir, main page]

Skip to content

Commit 6fa4220

Browse files
committed
fixup! chore: rework RPC version negotiation
1 parent 292c741 commit 6fa4220

File tree

2 files changed

+9
-6
lines changed

2 files changed

+9
-6
lines changed

vpn/speaker_internal_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ func TestSpeaker_RawPeer(t *testing.T) {
5454
require.NoError(t, err)
5555
require.Equal(t, expectedHandshake, string(b[:n]))
5656

57-
_, err = mp.Write([]byte("codervpn manager 1.0\n"))
57+
_, err = mp.Write([]byte("codervpn manager 1.3,2.1\n"))
5858
require.NoError(t, err)
5959

6060
err = testutil.RequireRecvCtx(ctx, t, errCh)
@@ -179,7 +179,7 @@ func TestSpeaker_HandshakeInvalid(t *testing.T) {
179179
}{
180180
{name: "preamble", handshake: "ssh manager 1.0\n"},
181181
{name: "2components", handshake: "ssh manager\n"},
182-
{name: "newmajor", handshake: "codervpn manager 2.0\n"},
182+
{name: "newmajors", handshake: "codervpn manager 2.0,3.0\n"},
183183
{name: "0version", handshake: "codervpn 0.1 manager\n"},
184184
{name: "unknown_role", handshake: "codervpn 1.0 supervisor\n"},
185185
{name: "unexpected_role", handshake: "codervpn 1.0 tunnel\n"},

vpn/version.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ func ParseRPCVersionList(str string) (RPCVersionList, error) {
7979
for i, v := range split {
8080
version, err := ParseRPCVersion(v)
8181
if err != nil {
82-
return RPCVersionList{}, xerrors.Errorf("invalid version string: %s", v)
82+
return RPCVersionList{}, xerrors.Errorf("invalid version list: %s", str)
8383
}
8484
versions[i] = version
8585
}
@@ -105,11 +105,14 @@ func (vl RPCVersionList) Validate() error {
105105
if len(vl.Versions) == 0 {
106106
return xerrors.New("no versions")
107107
}
108-
for i := 1; i < len(vl.Versions); i++ {
109-
if vl.Versions[i-1].Major == vl.Versions[i].Major {
108+
for i := 0; i < len(vl.Versions); i++ {
109+
if vl.Versions[i].Major == 0 {
110+
return xerrors.Errorf("invalid version: %s", vl.Versions[i].String())
111+
}
112+
if i > 0 && vl.Versions[i-1].Major == vl.Versions[i].Major {
110113
return xerrors.Errorf("duplicate major version: %d", vl.Versions[i].Major)
111114
}
112-
if vl.Versions[i-1].Major > vl.Versions[i].Major {
115+
if i > 0 && vl.Versions[i-1].Major > vl.Versions[i].Major {
113116
return xerrors.Errorf("versions are not sorted")
114117
}
115118
}

0 commit comments

Comments
 (0)
0