Skip to content

Commit 7024574

Browse files
committed
Work in progress: Fixing tests.
Signed-off-by: Iva Horn <iva.horn@nextcloud.com>
1 parent 1de44c6 commit 7024574

6 files changed

Lines changed: 119 additions & 70 deletions

File tree

Sources/NextcloudFileProviderKit/Enumeration/RemoteChangeObserver.swift

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public final class RemoteChangeObserver: NSObject, @unchecked Sendable {
8585
webSocketAuthenticationFailCount = 0
8686

8787
Task {
88-
await reconnectWebSocket()
88+
reconnectWebSocket()
8989
}
9090
}
9191

@@ -95,13 +95,10 @@ public final class RemoteChangeObserver: NSObject, @unchecked Sendable {
9595
return
9696
}
9797

98-
Task {
98+
Task { @MainActor in
9999
pollingTimer = Timer.scheduledTimer(withTimeInterval: pollInterval, repeats: true) { [weak self] _ in
100100
self?.logger.info("Polling timer timeout, notifying change.")
101-
102-
Task {
103-
await self?.startWorkingSetCheck()
104-
}
101+
self?.startWorkingSetCheck()
105102
}
106103

107104
logger.info("Starting polling timer.")
@@ -254,7 +251,7 @@ public final class RemoteChangeObserver: NSObject, @unchecked Sendable {
254251
}
255252

256253
Task {
257-
await self.pingWebSocket()
254+
self.pingWebSocket()
258255
}
259256
}
260257
}
@@ -281,20 +278,20 @@ public final class RemoteChangeObserver: NSObject, @unchecked Sendable {
281278

282279
guard error == nil else {
283280
self.logger.error("Websocket ping failed.", [.error: error])
284-
await self.incrementWebSocketPingFailCount()
281+
self.incrementWebSocketPingFailCount()
285282

286-
if await self.webSocketPingFailCount > self.webSocketPingFailLimit {
283+
if self.webSocketPingFailCount > self.webSocketPingFailLimit {
287284
Task.detached(priority: .medium) {
288-
await self.reconnectWebSocket()
285+
self.reconnectWebSocket()
289286
}
290287
} else {
291-
await startNewWebSocketPingTask()
288+
startNewWebSocketPingTask()
292289
}
293290

294291
return
295292
}
296293

297-
await startNewWebSocketPingTask()
294+
startNewWebSocketPingTask()
298295
}
299296
}
300297
}
@@ -312,20 +309,20 @@ public final class RemoteChangeObserver: NSObject, @unchecked Sendable {
312309

313310
switch result {
314311
case .failure:
315-
let accountId = await self.accountId
312+
let accountId = self.accountId
316313
self.logger.debug("Failed to read websocket.", [.account: accountId])
317314
// Do not reconnect here, delegate methods will handle reconnecting
318315
case let .success(message):
319316
switch message {
320317
case let .data(data):
321-
await self.processWebsocket(data: data)
318+
self.processWebsocket(data: data)
322319
case let .string(string):
323-
await self.processWebsocket(string: string)
320+
self.processWebsocket(string: string)
324321
@unknown default:
325322
self.logger.error("Unknown case encountered while reading websocket!")
326323
}
327324

328-
await self.readWebSocket()
325+
self.readWebSocket()
329326
}
330327
}
331328
}
@@ -383,30 +380,30 @@ public final class RemoteChangeObserver: NSObject, @unchecked Sendable {
383380
extension RemoteChangeObserver: URLSessionWebSocketDelegate {
384381
nonisolated public func urlSession(_: URLSession, webSocketTask _: URLSessionWebSocketTask, didOpenWithProtocol _: String?) {
385382
Task {
386-
guard await invalidated == false else {
383+
guard invalidated == false else {
387384
return
388385
}
389386

390-
logger.debug("Websocket connected sending auth details", [.account: await accountId])
387+
logger.debug("Websocket connected sending auth details", [.account: accountId])
391388
await authenticateWebSocket()
392389
}
393390
}
394391

395392
nonisolated public func urlSession(_: URLSession, webSocketTask: URLSessionWebSocketTask, didCloseWith _: URLSessionWebSocketTask.CloseCode, reason: Data?) {
396393
Task {
397-
guard await invalidated == false else {
394+
guard invalidated == false else {
398395
return
399396
}
400397

401398
// If the task that closed is not the current active task, it means we have
402399
// already initiated a reset and this is a stale callback. Ignore it.
403-
guard await webSocketTask === self.webSocketTask else {
400+
guard webSocketTask === self.webSocketTask else {
404401
logger.debug("An old websocket task closed, ignoring.")
405402
return
406403
}
407404

408-
logger.debug("Socket connection closed: \(String(data: reason ?? Data(), encoding: .utf8) ?? "unknown reason"). Retrying websocket connection.", [.account: await accountId])
409-
await reconnectWebSocket()
405+
logger.debug("Socket connection closed: \(String(data: reason ?? Data(), encoding: .utf8) ?? "unknown reason"). Retrying websocket connection.", [.account: accountId])
406+
reconnectWebSocket()
410407
}
411408
}
412409

@@ -422,15 +419,15 @@ extension RemoteChangeObserver: NextcloudKitDelegate {
422419
return
423420
}
424421

425-
guard await !invalidated else {
422+
guard !invalidated else {
426423
return
427424
}
428425

429426
let authMethod = challenge.protectionSpace.authenticationMethod
430427
logger.debug("Received auth challenge with method: \(authMethod)")
431428

432429
if authMethod == NSURLAuthenticationMethodHTTPBasic {
433-
let credential = await URLCredential(user: account.username, password: account.password, persistence: .forSession)
430+
let credential = URLCredential(user: account.username, password: account.password, persistence: .forSession)
434431
completionHandler(.useCredential, credential)
435432
} else if authMethod == NSURLAuthenticationMethodServerTrust {
436433
// TODO: Validate the server trust
@@ -456,7 +453,7 @@ extension RemoteChangeObserver: NextcloudKitDelegate {
456453
return
457454
}
458455

459-
await self.setNetworkReachability(typeReachability)
456+
self.setNetworkReachability(typeReachability)
460457
}
461458
}
462459

@@ -518,6 +515,7 @@ extension RemoteChangeObserver: NextcloudKitDelegate {
518515
///
519516
func startWorkingSetCheck(completionHandler: (@Sendable () -> Void)? = nil) {
520517
guard !workingSetCheckOngoing, !invalidated else {
518+
logger.error("Cancelling dispatch of working set check because it either is already ongoing or this is invalidated!")
521519
return
522520
}
523521

@@ -528,9 +526,11 @@ extension RemoteChangeObserver: NextcloudKitDelegate {
528526
}
529527

530528
private func checkWorkingSet() async {
529+
logger.debug("Checking working set...")
531530
workingSetCheckOngoing = true
532531

533532
defer {
533+
logger.debug("Working set check no longer ongoing.")
534534
workingSetCheckOngoing = false
535535
}
536536

Tests/NextcloudFileProviderKitTests/RemoteChangeObserverEtagOptimizationTests.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ final class RemoteChangeObserverEtagOptimizationTests: NextcloudFileProviderKitT
127127
// First working set check
128128
let firstWorkingSetCheckCompleted = expectation(description: "First working set check completed.")
129129

130-
await remoteChangeObserver.startWorkingSetCheck {
130+
remoteChangeObserver.startWorkingSetCheck {
131131
firstWorkingSetCheckCompleted.fulfill()
132132
}
133133

@@ -136,7 +136,7 @@ final class RemoteChangeObserverEtagOptimizationTests: NextcloudFileProviderKitT
136136
// Second working set check (simulating rapid notify_file messages)
137137
let secondWorkingSetCheckCompleted = expectation(description: "Second working set check completed.")
138138

139-
await remoteChangeObserver.startWorkingSetCheck {
139+
remoteChangeObserver.startWorkingSetCheck {
140140
secondWorkingSetCheckCompleted.fulfill()
141141
}
142142

@@ -145,7 +145,7 @@ final class RemoteChangeObserverEtagOptimizationTests: NextcloudFileProviderKitT
145145
// Third working set check
146146
let thirdWorkingSetCheckCompleted = expectation(description: "Third working set check completed.")
147147

148-
await remoteChangeObserver.startWorkingSetCheck {
148+
remoteChangeObserver.startWorkingSetCheck {
149149
thirdWorkingSetCheckCompleted.fulfill()
150150
}
151151

Tests/NextcloudFileProviderKitTests/RemoteChangeObserverTests.swift

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ final class RemoteChangeObserverTests: NextcloudFileProviderKitTestCase {
4343
}
4444

4545
override func tearDown() async throws {
46-
await remoteChangeObserver?.resetWebSocket()
46+
remoteChangeObserver?.resetWebSocket()
4747
remoteChangeObserver = nil
4848
Self.notifyPushServer.reset()
4949
}
@@ -106,18 +106,18 @@ final class RemoteChangeObserverTests: NextcloudFileProviderKitTestCase {
106106

107107
for _ in 0 ... Self.timeout {
108108
try await Task.sleep(nanoseconds: 1_000_001)
109-
if await remoteChangeObserver.webSocketAuthenticationFailCount > 0 {
109+
if remoteChangeObserver.webSocketAuthenticationFailCount > 0 {
110110
break
111111
}
112112
}
113113

114-
let count = await remoteChangeObserver.webSocketAuthenticationFailCount
114+
let count = remoteChangeObserver.webSocketAuthenticationFailCount
115115
XCTAssertTrue(count > 0)
116116

117-
await remoteChangeObserver.replaceAccount(with: Self.account)
117+
remoteChangeObserver.replaceAccount(with: Self.account)
118118

119119
await fulfillment(of: [authenticated])
120-
await remoteChangeObserver.resetWebSocket()
120+
remoteChangeObserver.resetWebSocket()
121121
}
122122

123123
func testStopRetryingConnection() async throws {
@@ -136,16 +136,16 @@ final class RemoteChangeObserverTests: NextcloudFileProviderKitTestCase {
136136

137137
for _ in 0 ... Self.timeout {
138138
try await Task.sleep(nanoseconds: 1_000_000)
139-
if await remoteChangeObserver.webSocketAuthenticationFailCount ==
139+
if remoteChangeObserver.webSocketAuthenticationFailCount ==
140140
remoteChangeObserver.webSocketAuthenticationFailLimit
141141
{
142142
break
143143
}
144144
}
145145

146-
let count = await remoteChangeObserver.webSocketAuthenticationFailCount
147-
let limit = await remoteChangeObserver.webSocketAuthenticationFailLimit
148-
let active = await remoteChangeObserver.webSocketTaskActive
146+
let count = remoteChangeObserver.webSocketAuthenticationFailCount
147+
let limit = remoteChangeObserver.webSocketAuthenticationFailLimit
148+
let active = remoteChangeObserver.webSocketTaskActive
149149

150150
XCTAssertEqual(count, limit)
151151
XCTAssertFalse(active)
@@ -364,7 +364,7 @@ final class RemoteChangeObserverTests: NextcloudFileProviderKitTestCase {
364364
// We just need to wait for the poll to fire and detect the change.
365365
await wait(for: changeNotifiedExpectation, description: "polling to trigger change")
366366

367-
let pollingActive = await remoteChangeObserver?.pollingActive ?? false
367+
let pollingActive = remoteChangeObserver?.pollingActive ?? false
368368
XCTAssertTrue(pollingActive, "Polling should be active.")
369369
}
370370

@@ -434,7 +434,7 @@ final class RemoteChangeObserverTests: NextcloudFileProviderKitTestCase {
434434
)
435435

436436
let pingIntervalNsecs = 500_000_000
437-
await remoteChangeObserver?.setWebSocketPingInterval(to: UInt64(pingIntervalNsecs))
437+
remoteChangeObserver?.setWebSocketPingInterval(to: UInt64(pingIntervalNsecs))
438438

439439
for _ in 0 ... Self.timeout {
440440
try await Task.sleep(nanoseconds: 1_000_000)
@@ -518,7 +518,7 @@ final class RemoteChangeObserverTests: NextcloudFileProviderKitTestCase {
518518
remoteChangeObserver.networkReachabilityObserver(.notReachable)
519519
// Give it a moment to process the disconnection
520520
try await Task.sleep(nanoseconds: 200_000_000)
521-
let webSocketTaskActive = await remoteChangeObserver.webSocketTaskActive
521+
let webSocketTaskActive = remoteChangeObserver.webSocketTaskActive
522522

523523
XCTAssertFalse(webSocketTaskActive, "Websocket should be inactive after connection loss.")
524524
Self.notifyPushServer.reset()
@@ -531,7 +531,7 @@ final class RemoteChangeObserverTests: NextcloudFileProviderKitTestCase {
531531

532532
// Now, wait for the expectation to be fulfilled.
533533
await wait(for: reauthExpectation, description: "re-authentication")
534-
let webSocketTaskActiveAfterReconnect = await remoteChangeObserver.webSocketTaskActive
534+
let webSocketTaskActiveAfterReconnect = remoteChangeObserver.webSocketTaskActive
535535

536536
XCTAssertTrue(webSocketTaskActiveAfterReconnect, "Websocket should be active again after reconnection.")
537537

0 commit comments

Comments
 (0)