Skip to content

Commit f1076c2

Browse files
committed
fix(ci): isolate macOS node restart notifications
1 parent 0cdb13a commit f1076c2

2 files changed

Lines changed: 14 additions & 9 deletions

File tree

apps/macos/Sources/OpenClaw/NodeMode/MacNodeModeCoordinator.swift

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ final class MacNodeModeCoordinator: NSObject {
105105
private let session: GatewayNodeSession
106106
private let nodeHostWorker: (any MacNodeHostWorking)?
107107
private let presenceReporter: MacNodePresenceReporter
108+
private let notificationCenter: NotificationCenter
108109
private let routeInvalidationHook: (@Sendable () async -> Void)?
109110
private let refreshEvents: AsyncStream<Void>
110111
private let refreshContinuation: AsyncStream<Void>.Continuation
@@ -135,6 +136,7 @@ final class MacNodeModeCoordinator: NSObject {
135136
runtime: MacNodeRuntime,
136137
nodeHostWorker: (any MacNodeHostWorking)? = nil,
137138
presenceReporter: MacNodePresenceReporter = MacNodePresenceReporter(),
139+
notificationCenter: NotificationCenter = .default,
138140
observeNotifications: Bool = false,
139141
initialPaused: Bool? = nil,
140142
initialComputerControlEnabled: Bool? = nil,
@@ -145,6 +147,7 @@ final class MacNodeModeCoordinator: NSObject {
145147
self.runtime = runtime
146148
self.nodeHostWorker = nodeHostWorker
147149
self.presenceReporter = presenceReporter
150+
self.notificationCenter = notificationCenter
148151
self.routeInvalidationHook = routeInvalidationHook
149152
self.refreshEvents = refreshEvents.stream
150153
self.refreshContinuation = refreshEvents.continuation
@@ -154,40 +157,40 @@ final class MacNodeModeCoordinator: NSObject {
154157
super.init()
155158

156159
guard observeNotifications else { return }
157-
NotificationCenter.default.addObserver(
160+
self.notificationCenter.addObserver(
158161
self,
159162
selector: #selector(self.refreshNodeConfiguration),
160163
name: UserDefaults.didChangeNotification,
161164
object: UserDefaults.standard)
162-
NotificationCenter.default.addObserver(
165+
self.notificationCenter.addObserver(
163166
self,
164167
selector: #selector(self.refreshNodeConfiguration),
165168
name: NSApplication.didBecomeActiveNotification,
166169
object: nil)
167-
NotificationCenter.default.addObserver(
170+
self.notificationCenter.addObserver(
168171
self,
169172
selector: #selector(self.refreshNodeConfiguration),
170173
name: .openclawPermissionsChanged,
171174
object: nil)
172-
NotificationCenter.default.addObserver(
175+
self.notificationCenter.addObserver(
173176
self,
174177
selector: #selector(self.nodeHostWorkerFailed),
175178
name: .openclawNodeHostWorkerFailed,
176179
object: nil)
177-
NotificationCenter.default.addObserver(
180+
self.notificationCenter.addObserver(
178181
self,
179182
selector: #selector(self.nodeHostConfigurationChanged),
180183
name: .openclawConfigDidChange,
181184
object: nil)
182-
NotificationCenter.default.addObserver(
185+
self.notificationCenter.addObserver(
183186
self,
184187
selector: #selector(self.nodeHostConfigurationChanged),
185188
name: .openclawCLIInstalled,
186189
object: nil)
187190
}
188191

189192
deinit {
190-
NotificationCenter.default.removeObserver(self)
193+
self.notificationCenter.removeObserver(self)
191194
self.refreshContinuation.finish()
192195
}
193196

apps/macos/Tests/OpenClawIPCTests/MacNodeModeCoordinatorTests.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,20 +148,22 @@ struct MacNodeModeCoordinatorTests {
148148
@Test @MainActor func `config and CLI changes restart startup scoped node host worker`() async throws {
149149
let worker = CoordinatorNodeHostWorkerProbe()
150150
let session = GatewayNodeSession()
151+
let notificationCenter = NotificationCenter()
151152
let coordinator = MacNodeModeCoordinator(
152153
session: session,
153154
runtime: MacNodeRuntime(nodeHostWorker: worker),
154155
nodeHostWorker: worker,
156+
notificationCenter: notificationCenter,
155157
observeNotifications: true)
156158
_ = coordinator
157159

158-
NotificationCenter.default.post(name: .openclawConfigDidChange, object: nil)
160+
notificationCenter.post(name: .openclawConfigDidChange, object: nil)
159161

160162
try await self.waitUntil("node-host worker restart") {
161163
await worker.stops() == 1
162164
}
163165

164-
NotificationCenter.default.post(name: .openclawCLIInstalled, object: nil)
166+
notificationCenter.post(name: .openclawCLIInstalled, object: nil)
165167

166168
try await self.waitUntil("node-host worker restart") {
167169
await worker.stops() == 2

0 commit comments

Comments
 (0)