lib/config, lib/connections: Refactor handling of ignored devices (fixes #3470)
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3471
This commit is contained in:
committed by
Audrius Butkevicius
parent
1eb6db6ca8
commit
f368d2278f
@@ -273,6 +273,16 @@ func (cfg *Configuration) prepare(myID protocol.DeviceID) error {
|
||||
cfg.GUI.APIKey = rand.String(32)
|
||||
}
|
||||
|
||||
// The list of ignored devices should not contain any devices that have
|
||||
// been manually added to the config.
|
||||
newIgnoredDevices := []protocol.DeviceID{}
|
||||
for _, dev := range cfg.IgnoredDevices {
|
||||
if !existingDevices[dev] {
|
||||
newIgnoredDevices = append(newIgnoredDevices, dev)
|
||||
}
|
||||
}
|
||||
cfg.IgnoredDevices = newIgnoredDevices
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -697,3 +697,49 @@ func TestV14ListenAddressesMigration(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestIgnoredDevices(t *testing.T) {
|
||||
// Verify that ignored devices that are also present in the
|
||||
// configuration are not in fact ignored.
|
||||
|
||||
wrapper, err := Load("testdata/ignoreddevices.xml", device1)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if wrapper.IgnoredDevice(device1) {
|
||||
t.Errorf("Device %v should not be ignored", device1)
|
||||
}
|
||||
if !wrapper.IgnoredDevice(device3) {
|
||||
t.Errorf("Device %v should be ignored", device3)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetDevice(t *testing.T) {
|
||||
// Verify that the Device() call does the right thing
|
||||
|
||||
wrapper, err := Load("testdata/ignoreddevices.xml", device1)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// device1 is mentioned in the config
|
||||
|
||||
device, ok := wrapper.Device(device1)
|
||||
if !ok {
|
||||
t.Error(device1, "should exist")
|
||||
}
|
||||
if device.DeviceID != device1 {
|
||||
t.Error("Should have returned", device1, "not", device.DeviceID)
|
||||
}
|
||||
|
||||
// device3 is not
|
||||
|
||||
device, ok = wrapper.Device(device3)
|
||||
if ok {
|
||||
t.Error(device3, "should not exist")
|
||||
}
|
||||
if device.DeviceID == device3 {
|
||||
t.Error("Should not returned ID", device3)
|
||||
}
|
||||
}
|
||||
|
||||
10
lib/config/testdata/ignoreddevices.xml
vendored
Normal file
10
lib/config/testdata/ignoreddevices.xml
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
<configuration version="15">
|
||||
<device id="AIR6LPZ-7K4PTTV-UXQSMUU-CPQ5YWH-OEDFIIQ-JUG777G-2YQXXR5-YD6AWQR">
|
||||
<address>dynamic</address>
|
||||
</device>
|
||||
<device id="GYRZZQB-IRNPV4Z-T7TC52W-EQYJ3TT-FDQW6MW-DFLMU42-SSSU6EM-FBK2VAY">
|
||||
<address>dynamic</address>
|
||||
</device>
|
||||
<ignoredDevice>AIR6LPZ-7K4PTTV-UXQSMUU-CPQ5YWH-OEDFIIQ-JUG777G-2YQXXR5-YD6AWQR</ignoredDevice>
|
||||
<ignoredDevice>LGFPDIT-7SKNNJL-VJZA4FC-7QNCRKA-CE753K7-2BW5QDK-2FOZ7FR-FEP57QJ</ignoredDevice>
|
||||
</configuration>
|
||||
@@ -284,6 +284,18 @@ func (w *Wrapper) IgnoredDevice(id protocol.DeviceID) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
// Device returns the configuration for the given device and an "ok" bool.
|
||||
func (w *Wrapper) Device(id protocol.DeviceID) (DeviceConfiguration, bool) {
|
||||
w.mut.Lock()
|
||||
defer w.mut.Unlock()
|
||||
for _, device := range w.cfg.Devices {
|
||||
if device.DeviceID == id {
|
||||
return device, true
|
||||
}
|
||||
}
|
||||
return DeviceConfiguration{}, false
|
||||
}
|
||||
|
||||
// Save writes the configuration to disk, and generates a ConfigSaved event.
|
||||
func (w *Wrapper) Save() error {
|
||||
fd, err := osutil.CreateAtomic(w.path, 0600)
|
||||
|
||||
Reference in New Issue
Block a user