lib/model: Clean up generateClusterConfig, fix spurious test failure by sorting
This commit is contained in:
parent
2641062c17
commit
3088dac33b
@ -1958,7 +1958,12 @@ func (m *Model) generateClusterConfig(device protocol.DeviceID) protocol.Cluster
|
|||||||
var message protocol.ClusterConfig
|
var message protocol.ClusterConfig
|
||||||
|
|
||||||
m.fmut.RLock()
|
m.fmut.RLock()
|
||||||
for _, folder := range m.deviceFolders[device] {
|
// The list of folders in the message is sorted, so we always get the
|
||||||
|
// same order.
|
||||||
|
folders := m.deviceFolders[device]
|
||||||
|
sort.Strings(folders)
|
||||||
|
|
||||||
|
for _, folder := range folders {
|
||||||
folderCfg := m.cfg.Folders()[folder]
|
folderCfg := m.cfg.Folders()[folder]
|
||||||
fs := m.folderFiles[folder]
|
fs := m.folderFiles[folder]
|
||||||
|
|
||||||
@ -1971,12 +1976,8 @@ func (m *Model) generateClusterConfig(device protocol.DeviceID) protocol.Cluster
|
|||||||
DisableTempIndexes: folderCfg.DisableTempIndexes,
|
DisableTempIndexes: folderCfg.DisableTempIndexes,
|
||||||
}
|
}
|
||||||
|
|
||||||
for device := range m.folderDevices[folder] {
|
// Devices are sorted, so we always get the same order.
|
||||||
// DeviceID is a value type, but with an underlying array. Copy it
|
for _, device := range m.folderDevices.sortedDevices(folder) {
|
||||||
// so we don't grab aliases to the same array later on in device[:]
|
|
||||||
device := device
|
|
||||||
// TODO: Set read only bit when relevant, and when we have per device
|
|
||||||
// access controls.
|
|
||||||
deviceCfg := m.cfg.Devices()[device]
|
deviceCfg := m.cfg.Devices()[device]
|
||||||
|
|
||||||
var indexID protocol.IndexID
|
var indexID protocol.IndexID
|
||||||
@ -2604,3 +2605,13 @@ func (s folderDeviceSet) hasDevice(dev protocol.DeviceID) bool {
|
|||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// sortedDevices returns the list of devices for a given folder, sorted
|
||||||
|
func (s folderDeviceSet) sortedDevices(folder string) []protocol.DeviceID {
|
||||||
|
devs := make([]protocol.DeviceID, 0, len(s[folder]))
|
||||||
|
for dev := range s[folder] {
|
||||||
|
devs = append(devs, dev)
|
||||||
|
}
|
||||||
|
sort.Sort(protocol.DeviceIDs(devs))
|
||||||
|
return devs
|
||||||
|
}
|
||||||
|
|||||||
@ -445,13 +445,13 @@ func TestClusterConfig(t *testing.T) {
|
|||||||
t.Errorf("Incorrect number of devices %d != 2", l)
|
t.Errorf("Incorrect number of devices %d != 2", l)
|
||||||
}
|
}
|
||||||
if id := r.Devices[0].ID; id != device1 {
|
if id := r.Devices[0].ID; id != device1 {
|
||||||
t.Errorf("Incorrect device ID %x != %x", id, device1)
|
t.Errorf("Incorrect device ID %s != %s", id, device1)
|
||||||
}
|
}
|
||||||
if !r.Devices[0].Introducer {
|
if !r.Devices[0].Introducer {
|
||||||
t.Error("Device1 should be flagged as Introducer")
|
t.Error("Device1 should be flagged as Introducer")
|
||||||
}
|
}
|
||||||
if id := r.Devices[1].ID; id != device2 {
|
if id := r.Devices[1].ID; id != device2 {
|
||||||
t.Errorf("Incorrect device ID %x != %x", id, device2)
|
t.Errorf("Incorrect device ID %s != %s", id, device2)
|
||||||
}
|
}
|
||||||
if r.Devices[1].Introducer {
|
if r.Devices[1].Introducer {
|
||||||
t.Error("Device2 should not be flagged as Introducer")
|
t.Error("Device2 should not be flagged as Introducer")
|
||||||
@ -465,13 +465,13 @@ func TestClusterConfig(t *testing.T) {
|
|||||||
t.Errorf("Incorrect number of devices %d != 2", l)
|
t.Errorf("Incorrect number of devices %d != 2", l)
|
||||||
}
|
}
|
||||||
if id := r.Devices[0].ID; id != device1 {
|
if id := r.Devices[0].ID; id != device1 {
|
||||||
t.Errorf("Incorrect device ID %x != %x", id, device1)
|
t.Errorf("Incorrect device ID %s != %s", id, device1)
|
||||||
}
|
}
|
||||||
if !r.Devices[0].Introducer {
|
if !r.Devices[0].Introducer {
|
||||||
t.Error("Device1 should be flagged as Introducer")
|
t.Error("Device1 should be flagged as Introducer")
|
||||||
}
|
}
|
||||||
if id := r.Devices[1].ID; id != device2 {
|
if id := r.Devices[1].ID; id != device2 {
|
||||||
t.Errorf("Incorrect device ID %x != %x", id, device2)
|
t.Errorf("Incorrect device ID %s != %s", id, device2)
|
||||||
}
|
}
|
||||||
if r.Devices[1].Introducer {
|
if r.Devices[1].Introducer {
|
||||||
t.Error("Device2 should not be flagged as Introducer")
|
t.Error("Device2 should not be flagged as Introducer")
|
||||||
|
|||||||
@ -203,3 +203,18 @@ func untypeoify(s string) string {
|
|||||||
s = strings.Replace(s, "8", "B", -1)
|
s = strings.Replace(s, "8", "B", -1)
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DeviceIDs is a sortable slice of DeviceID
|
||||||
|
type DeviceIDs []DeviceID
|
||||||
|
|
||||||
|
func (l DeviceIDs) Len() int {
|
||||||
|
return len(l)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l DeviceIDs) Less(a, b int) bool {
|
||||||
|
return l[a].Compare(l[b]) == -1
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l DeviceIDs) Swap(a, b int) {
|
||||||
|
l[a], l[b] = l[b], l[a]
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user