From 2b622d0774549a7e37cd42f4bb5206ae96a54cda Mon Sep 17 00:00:00 2001 From: Simon Frei Date: Fri, 19 Jul 2019 19:37:29 +0200 Subject: [PATCH] lib/model: Close conn on dev pause (fixes #5873) (#5874) --- lib/model/model.go | 1 + lib/model/model_test.go | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/lib/model/model.go b/lib/model/model.go index bcd6e56b5..dbd08621b 100644 --- a/lib/model/model.go +++ b/lib/model/model.go @@ -2549,6 +2549,7 @@ func (m *model) CommitConfiguration(from, to config.Configuration) bool { if toCfg.Paused { l.Infoln("Pausing", deviceID) + m.closeConn(deviceID, errDevicePaused) events.Default.Log(events.DevicePaused, map[string]string{"device": deviceID.String()}) } else { events.Default.Log(events.DeviceResumed, map[string]string{"device": deviceID.String()}) diff --git a/lib/model/model_test.go b/lib/model/model_test.go index 221db4ead..ba1e1f65e 100644 --- a/lib/model/model_test.go +++ b/lib/model/model_test.go @@ -26,6 +26,7 @@ import ( "github.com/syncthing/syncthing/lib/config" "github.com/syncthing/syncthing/lib/db" + "github.com/syncthing/syncthing/lib/events" "github.com/syncthing/syncthing/lib/fs" "github.com/syncthing/syncthing/lib/ignore" "github.com/syncthing/syncthing/lib/osutil" @@ -3303,3 +3304,31 @@ func TestConnCloseOnRestart(t *testing.T) { t.Fatal("Timed out before connection was closed") } } + +func TestDevicePause(t *testing.T) { + sub := events.Default.Subscribe(events.DevicePaused) + defer events.Default.Unsubscribe(sub) + + m, _, fcfg := setupModelWithConnection() + defer cleanupModelAndRemoveDir(m, fcfg.Filesystem().URI()) + + m.pmut.RLock() + closed := m.closed[device1] + m.pmut.RUnlock() + + dev := m.cfg.Devices()[device1] + dev.Paused = true + m.cfg.SetDevice(dev) + + timeout := time.NewTimer(5 * time.Second) + select { + case <-sub.C(): + select { + case <-closed: + case <-timeout.C: + t.Fatal("Timed out before connection was closed") + } + case <-timeout.C: + t.Fatal("Timed out before device was paused") + } +}