8000 kversion: add VersionStrings, FromString, V3_6_0 · twmb/franz-go@d07efd9 · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Commit d07efd9

Browse files
committed
kversion: add VersionStrings, FromString, V3_6_0
VersionStrings and FromString will make it easy to write tests that iterate over all known broker versions.
1 parent 8d30de0 commit d07efd9

File tree

2 files changed

+106
-3
lines changed

2 files changed

+106
-3
lines changed

pkg/kversion/kversion.go

Lines changed: 76 additions & 3 deletions
< 10000 td data-grid-cell-id="diff-a03704d5147afb793df8b763d942e84c07c88de24fa705bde0d26375e4671f0d-31-71-2" data-line-anchor="diff-a03704d5147afb793df8b763d942e84c07c88de24fa705bde0d26375e4671f0dR71" data-selected="false" role="gridcell" style="background-color:var(--diffBlob-additionLine-bgColor, var(--diffBlob-addition-bgColor-line));padding-right:24px" tabindex="-1" valign="top" class="focusable-grid-cell diff-text-cell right-side-diff-cell left-side">+
// VersionStrings returns all recognized versions, minus any patch, that can be
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ package kversion
77
import (
88
"bytes"
99
"fmt"
10+
"regexp"
11+
"sync"
1012
"text/tabwriter"
1113

1214
"github.com/twmb/franz-go/pkg/kmsg"
@@ -29,6 +31,80 @@ type Versions struct {
2931
k2v []int16
3032
}
3133

34+
var (
35+
reFromString *regexp.Regexp
36+
reFromStringOnce sync.Once
37+
)
38+
39+
var versions = []struct {
40+
name string
41+
v *Versions
42+
}{
43+
{"v0.8.0", V0_8_0()},
44+
{"v0.8.1", V0_8_1()},
45+
{"v0.8.2", V0_8_2()},
46+
{"v0.9.0", V0_9_0()},
47+
{"v0.10.0", V0_10_0()},
48+
{"v0.10.1", V0_10_1()},
49+
{"v0.10.2", V0_10_2()},
50+
{"v0.11.0", V0_11_0()},
51+
{"v1.0", V1_0_0()},
52+
{"v1.1", V1_1_0()},
53+
{"v2.0", V2_0_0()},
54+
{"v2.1", V2_1_0()},
55+
{"v2.2", V2_2_0()},
56+
{"v2.3", V2_3_0()},
57+
{"v2.4", V2_4_0()},
58+
{"v2.5", V2_5_0()},
59+
{"v2.6", V2_6_0()},
60+
{"v2.7", V2_7_0()},
61+
{"v2.8", V2_8_0()},
62+
{"v3.0", V3_0_0()},
63+
{"v3.1", V3_1_0()},
64+
{"v3.2", V3_2_0()},
65+
{"v3.3", V3_3_0()},
66+
{"v3.4", V3_4_0()},
67+
{"v3.5", V3_5_0()},
68+
{"v3.6", V3_6_0()},
69+
}
70+
71
72+
// used as input to FromString.
73+
func VersionStrings() []string {
74+
var vs []string
75+
for _, v := range versions {
76+
vs = append(vs, v.name)
77+
}
78+
return vs
79+
}
80+
81+
// FromString returns a Versions from v.
82+
// The expected input is:
83+
// - for v0, v0.#.# or v0.#.#.#
84+
// - for v1, v1.# or v1.#.#
85+
func FromString(v string) *Versions {
86+
reFromStringOnce.Do(func() {
87+
// 0: entire string
88+
// 1: v1+ match, minus patch
89+
// 2: v0 match, minus subpatch
90+
reFromString = regexp.MustCompile(`^(?:(v[1-9]+\.\d+)(?:\.\d+)?|(v0\.\d+\.\d+)(?:\.\d+)?)$`)
91+
})
92+
m := reFromString.FindStringSubmatch(v)
93+
if m == nil {
94+
return nil
95+
}
96+
v = m[1]
97+
if m[2] != "" {
98+
v = m[2]
99+
}
100+
for _, v2 := range versions {
101+
if v2.name == v {
102+
return v2.v
103+
}
104+
}
105+
return nil
106+
}
107+
32108
// FromApiVersionsResponse returns a Versions from a kmsg.ApiVersionsResponse.
33109
func FromApiVersionsResponse(r *kmsg.ApiVersionsResponse) *Versions {
34110
var v Versions
@@ -445,10 +521,7 @@ func V3_2_0() *Versions { return zkBrokerOf(max320) }
445521
func V3_3_0() *Versions { return zkBrokerOf(max330) }
446522
func V3_4_0() *Versions { return zkBrokerOf(max340) }
447523
func V3_5_0() *Versions { return zkBrokerOf(max350) }
448-
449-
/* TODO wait for franz-go v1.16
450524
func V3_6_0() *Versions { return zkBrokerOf(max360) }
451-
*/
452525

453526
func zkBrokerOf(lks listenerKeys) *Versions {
454527
return &Versions{lks.filter(zkBroker)}

pkg/kversion/kversion_test.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,3 +191,33 @@ func TestVersionProbeKafka3_1(t *testing.T) {
191191
t.Errorf("unexpected version guess, got %s != exp %s", guess, "v3.1")
192192
}
193193
}
194+
195+
func TestFromString(t *testing.T) {
196+
for _, test := range []struct {
197+
in, out string
198+
}{
199+
{"v0.8.0", "v0.8.0"},
200+
{"v0.8.1.0", "v0.8.1"},
201+
{"v2.1", "v2.1"},
202+
{"v2.1.3", "v2.1"},
203+
{"v3.1", "v3.1"},
204+
205+
{"v0.7.0", ""}, // too low
206+
{"v999.9", ""}, // too high
207+
{"v3", ""}, // not enough digits
208+
{"v0.8.1.0.3", ""}, // too many digits for v0
209+
{"v3.1.0.3", ""}, // too many digits for v1+
210+
} {
211+
v := FromString(test.in)
212+
if v == nil {
213+
if test.out != "" {
214+
t.Errorf("unexpectedly got nil for %s", test.in)
215+
}
216+
continue
217+
}
218+
out := v.VersionGuess()
219+
if out != test.out {
220+
t.Errorf("got %s != exp %s for %s", out, test.out, test.in)
221+
}
222+
}
223+
}

0 commit comments

Comments
 (0)
0