mirror of
https://github.com/netbirdio/netbird.git
synced 2026-10-06 05:29:07 +02:00
[client] Fall back to download-only on a malformed expected version
This commit is contained in:
@@ -190,7 +190,12 @@ func (m *Manager) SetVersion(expectedVersion string, forceUpdate bool) {
|
||||
if expectedVersion != latestVersion {
|
||||
parsed, err := v.NewVersion(expectedVersion)
|
||||
if err != nil {
|
||||
log.Errorf("error parsing version: %v", err)
|
||||
log.Errorf("error parsing version, switching to download-only: %v", err)
|
||||
m.setModeLocked(modeDownloadOnly)
|
||||
select {
|
||||
case m.mgmUpdateChan <- struct{}{}:
|
||||
default:
|
||||
}
|
||||
return
|
||||
}
|
||||
if m.mode == modeManaged && m.expectedVersion != nil && m.expectedVersion.Equal(parsed) {
|
||||
|
||||
@@ -152,3 +152,26 @@ func Test_ResetMode_SilencesStaleForceDirective(t *testing.T) {
|
||||
t.Fatalf("expected enforced event after a fresh directive, got %q enforced=%v", ver, enforced)
|
||||
}
|
||||
}
|
||||
|
||||
func Test_SetVersion_MalformedFallsBackToDownloadOnly(t *testing.T) {
|
||||
tmpFile := path.Join(t.TempDir(), "update-test-malformed.json")
|
||||
recorder := peer.NewRecorder("")
|
||||
sub := recorder.SubscribeToEvents()
|
||||
defer recorder.UnsubscribeFromEvents(sub)
|
||||
|
||||
m := NewManager(recorder, statemanager.New(tmpFile))
|
||||
m.update = &versionUpdateMock{latestVersion: v.Must(v.NewSemver("1.0.1"))}
|
||||
m.currentVersion = "1.0.0"
|
||||
m.autoUpdateSupported = func() bool { return true }
|
||||
m.Start(context.Background())
|
||||
defer m.Stop()
|
||||
|
||||
m.SetVersion("not-a-version", false)
|
||||
ver, enforced := waitForUpdateEvent(sub, 500*time.Millisecond)
|
||||
if ver != "1.0.1" {
|
||||
t.Fatalf("expected download-only event for 1.0.1 after malformed version, got %q", ver)
|
||||
}
|
||||
if enforced {
|
||||
t.Error("malformed version fallback must not carry enforced metadata")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user