Add struct + functions for parsing hishtory versions

This commit is contained in:
David Dworken 2023-09-23 11:23:47 -07:00
parent eb1bc99a22
commit 6cfbec4823
No known key found for this signature in database
2 changed files with 62 additions and 0 deletions

View File

@ -613,3 +613,32 @@ func deserializeSubmitResponse(t *testing.T, w *httptest.ResponseRecorder) share
require.NoError(t, json.Unmarshal(w.Body.Bytes(), &submitResponse)) require.NoError(t, json.Unmarshal(w.Body.Bytes(), &submitResponse))
return submitResponse return submitResponse
} }
func TestParseVersionString(t *testing.T) {
p, err := parseVersionString("v0.200")
require.NoError(t, err)
require.Equal(t, parsedVersion{majorVersion: 0, minorVersion: 200}, p)
p, err = parseVersionString("v1.200")
require.NoError(t, err)
require.Equal(t, parsedVersion{majorVersion: 1, minorVersion: 200}, p)
p, err = parseVersionString("v1.0")
require.NoError(t, err)
require.Equal(t, parsedVersion{majorVersion: 1, minorVersion: 0}, p)
p, err = parseVersionString("v0.216")
require.NoError(t, err)
require.Equal(t, parsedVersion{majorVersion: 0, minorVersion: 216}, p)
p, err = parseVersionString("v123.456")
require.NoError(t, err)
require.Equal(t, parsedVersion{majorVersion: 123, minorVersion: 456}, p)
}
func TestVersionLessThan(t *testing.T) {
require.False(t, parsedVersion{0, 200}.lessThan(parsedVersion{0, 200}))
require.False(t, parsedVersion{1, 200}.lessThan(parsedVersion{1, 200}))
require.False(t, parsedVersion{0, 201}.lessThan(parsedVersion{0, 200}))
require.False(t, parsedVersion{1, 0}.lessThan(parsedVersion{0, 200}))
require.True(t, parsedVersion{0, 199}.lessThan(parsedVersion{0, 200}))
require.True(t, parsedVersion{0, 200}.lessThan(parsedVersion{0, 205}))
require.True(t, parsedVersion{1, 200}.lessThan(parsedVersion{1, 205}))
require.True(t, parsedVersion{0, 200}.lessThan(parsedVersion{1, 1}))
}

View File

@ -6,6 +6,7 @@ import (
"net/http" "net/http"
pprofhttp "net/http/pprof" pprofhttp "net/http/pprof"
"os" "os"
"regexp"
"runtime" "runtime"
"strconv" "strconv"
@ -98,3 +99,35 @@ func checkGormError(err error) {
_, filename, line, _ := runtime.Caller(1) _, filename, line, _ := runtime.Caller(1)
panic(fmt.Sprintf("DB error at %s:%d: %v", filename, line, err)) panic(fmt.Sprintf("DB error at %s:%d: %v", filename, line, err))
} }
type parsedVersion struct {
majorVersion int
minorVersion int
}
func (pv parsedVersion) lessThan(other parsedVersion) bool {
if pv.majorVersion != other.majorVersion {
return pv.majorVersion < other.majorVersion
}
return pv.minorVersion < other.minorVersion
}
func parseVersionString(versionString string) (parsedVersion, error) {
re := regexp.MustCompile(`v(\d+)[.](\d+)`)
matches := re.FindAllStringSubmatch(versionString, -1)
if len(matches) != 1 {
return parsedVersion{}, fmt.Errorf("failed to parse version=%#v (matches=%#v)", versionString, matches)
}
if len(matches[0]) != 3 {
return parsedVersion{}, fmt.Errorf("failed to parse version=%#v (matches[0]=%#v)", versionString, matches[0])
}
majorVersion, err := strconv.Atoi(matches[0][1])
if err != nil {
return parsedVersion{}, fmt.Errorf("failed to parse major version %#v", matches[0][1])
}
minorVersion, err := strconv.Atoi(matches[0][2])
if err != nil {
return parsedVersion{}, fmt.Errorf("failed to parse minor version %#v", matches[0][2])
}
return parsedVersion{majorVersion, minorVersion}, nil
}