Add more thorough tests for updates

This commit is contained in:
David Dworken
2023-10-09 21:41:30 -07:00
parent 82a5e2fced
commit f0dbcd6e3b
7 changed files with 204 additions and 111 deletions

View File

@@ -52,8 +52,8 @@ func (s *Server) apiSubmitHandler(w http.ResponseWriter, r *http.Request) {
deviceId := getOptionalQueryParam(r, "source_device_id", s.isTestEnvironment)
if deviceId != "" {
hv, err := parseVersionString(version)
if err != nil || hv.greaterThan(parsedVersion{0, 221}) {
hv, err := shared.ParseVersionString(version)
if err != nil || hv.GreaterThan(shared.ParsedVersion{0, 221}) {
// Note that if we fail to parse the version string, we do return dump and deletion requests. This is necessary
// since tests run with v0.Unknown which obviously fails to parse.
dumpRequests, err := s.db.DumpRequestForUserAndDevice(r.Context(), userId, deviceId)

View File

@@ -604,44 +604,3 @@ func deserializeSubmitResponse(t *testing.T, w *httptest.ResponseRecorder) share
require.NoError(t, json.Unmarshal(w.Body.Bytes(), &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}))
}
func TestVersionGreaterThan(t *testing.T) {
require.False(t, parsedVersion{0, 200}.greaterThan(parsedVersion{0, 200}))
require.False(t, parsedVersion{1, 200}.greaterThan(parsedVersion{1, 200}))
require.True(t, parsedVersion{0, 201}.greaterThan(parsedVersion{0, 200}))
require.True(t, parsedVersion{1, 0}.greaterThan(parsedVersion{0, 200}))
require.True(t, parsedVersion{1, 1}.greaterThan(parsedVersion{1, 0}))
require.False(t, parsedVersion{0, 199}.greaterThan(parsedVersion{0, 200}))
require.False(t, parsedVersion{0, 200}.greaterThan(parsedVersion{0, 205}))
require.False(t, parsedVersion{1, 200}.greaterThan(parsedVersion{1, 205}))
require.False(t, parsedVersion{0, 200}.greaterThan(parsedVersion{1, 1}))
}

View File

@@ -6,7 +6,6 @@ import (
"net/http"
pprofhttp "net/http/pprof"
"os"
"regexp"
"runtime"
"strconv"
@@ -99,42 +98,3 @@ func checkGormError(err error) {
_, filename, line, _ := runtime.Caller(1)
panic(fmt.Sprintf("DB error at %s:%d: %v", filename, line, err))
}
type parsedVersion struct {
majorVersion int
minorVersion int
}
func (pv parsedVersion) greaterThan(other parsedVersion) bool {
if pv.majorVersion == other.majorVersion && pv.minorVersion == other.minorVersion {
return false
}
return !pv.lessThan(other)
}
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
}