mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-10-27 21:47:50 -04:00
network(networkmanager): refresh wired profiles on settings changes (#3929)
port 2.0
This commit is contained in:
1 parent
486de548e0
commit
cb20e898cd
3 files changed
+60
-8
No files matched your search
@@ -258,16 +258,11 @@ func (b *NetworkManagerBackend) listEthernetConnections() ([]WiredConnection, er
|
||||
return nil, fmt.Errorf("no ethernet device available")
|
||||
}
|
||||
|
||||
s := b.settings
|
||||
if s == nil {
|
||||
s, err := gonetworkmanager.NewSettings()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to get settings: %w", err)
|
||||
}
|
||||
b.settings = s
|
||||
settingsMgr, err := b.networkManagerSettings()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
settingsMgr := s.(gonetworkmanager.Settings)
|
||||
connections, err := settingsMgr.ListConnections()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to get connections: %w", err)
|
||||
|
||||
@@ -305,6 +305,9 @@ func (b *NetworkManagerBackend) handleDBusSignal(sig *dbus.Signal) {
|
||||
}
|
||||
b.updateHotspotState()
|
||||
b.listCellularConnections()
|
||||
// Device state does not change when an inactive wired profile is
|
||||
// added or deleted, so the profile list must be refreshed here too.
|
||||
b.listEthernetConnections()
|
||||
if b.onStateChange != nil {
|
||||
b.onStateChange()
|
||||
}
|
||||
|
||||
@@ -130,3 +130,57 @@ func TestNetworkManagerBackend_HandleWiFiChange_CoalescesAccessPointBurst(t *tes
|
||||
return stateChangeCalls.Load() == 1
|
||||
}, 4*wifiNetworksUpdateDelay, 10*time.Millisecond)
|
||||
}
|
||||
|
||||
func TestNetworkManagerBackend_HandleDBusSignal_ConnectionRemovedRefreshesWiredConnections(t *testing.T) {
|
||||
mockNM := mock_gonetworkmanager.NewMockNetworkManager(t)
|
||||
mockNM.EXPECT().GetPropertyActiveConnections().Return([]gonetworkmanager.ActiveConnection{}, nil).Maybe()
|
||||
|
||||
remaining := mock_gonetworkmanager.NewMockConnection(t)
|
||||
remaining.EXPECT().GetPath().Return(dbus.ObjectPath("/org/freedesktop/NetworkManager/Settings/1")).Maybe()
|
||||
remaining.EXPECT().GetSettings().Return(gonetworkmanager.ConnectionSettings{
|
||||
"connection": {
|
||||
"id": "Wired connection 1",
|
||||
"uuid": "uuid-1",
|
||||
"type": "802-3-ethernet",
|
||||
},
|
||||
}, nil).Maybe()
|
||||
|
||||
mockSettings := mock_gonetworkmanager.NewMockSettings(t)
|
||||
mockSettings.EXPECT().ListConnections().Return([]gonetworkmanager.Connection{remaining}, nil).Maybe()
|
||||
|
||||
backend, err := NewNetworkManagerBackend(mockNM)
|
||||
assert.NoError(t, err)
|
||||
backend.settings = mockSettings
|
||||
backend.ethernetDevice = mock_gonetworkmanager.NewMockDevice(t)
|
||||
|
||||
backend.stateMutex.Lock()
|
||||
backend.state.WiredConnections = []WiredConnection{
|
||||
{ID: "Wired connection 1", UUID: "uuid-1", Type: "802-3-ethernet"},
|
||||
{ID: "Wired connection 2", UUID: "uuid-2", Type: "802-3-ethernet"},
|
||||
}
|
||||
backend.stateMutex.Unlock()
|
||||
|
||||
backend.handleDBusSignal(&dbus.Signal{
|
||||
Name: "org.freedesktop.NetworkManager.Settings.ConnectionRemoved",
|
||||
Body: []any{dbus.ObjectPath("/org/freedesktop/NetworkManager/Settings/2")},
|
||||
})
|
||||
|
||||
backend.stateMutex.RLock()
|
||||
defer backend.stateMutex.RUnlock()
|
||||
assert.Len(t, backend.state.WiredConnections, 1)
|
||||
assert.Equal(t, "uuid-1", backend.state.WiredConnections[0].UUID)
|
||||
}
|
||||
|
||||
func TestNetworkManagerBackend_ListEthernetConnections_InvalidSettingsHandle(t *testing.T) {
|
||||
mockNM := mock_gonetworkmanager.NewMockNetworkManager(t)
|
||||
|
||||
backend, err := NewNetworkManagerBackend(mockNM)
|
||||
assert.NoError(t, err)
|
||||
backend.settings = "not a settings handle"
|
||||
backend.ethernetDevice = mock_gonetworkmanager.NewMockDevice(t)
|
||||
|
||||
assert.NotPanics(t, func() {
|
||||
_, err = backend.listEthernetConnections()
|
||||
})
|
||||
assert.Error(t, err)
|
||||
}
|
||||
Reference in new issue
Block a user