Skip to content

Commit 945f398

Browse files
committed
Fix Sendable warnings in tests
1 parent 4b5ec4f commit 945f398

9 files changed

+238
-206
lines changed

Tests/GRDBTests/DatabaseAfterNextTransactionCommitTests.swift

+20-20
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class DatabaseAfterNextTransactionCommitTests: GRDBTestCase {
4242

4343
let dbQueue = try makeDatabaseQueue()
4444
try dbQueue.writeWithoutTransaction { db in
45-
var commitCount = 0
45+
let commitCountMutex = Mutex(0)
4646
weak var deallocationWitness: Witness? = nil
4747
do {
4848
let witness = Witness()
@@ -51,19 +51,19 @@ class DatabaseAfterNextTransactionCommitTests: GRDBTestCase {
5151
db.afterNextTransaction { _ in
5252
// use witness
5353
withExtendedLifetime(witness, { })
54-
commitCount += 1
54+
commitCountMutex.increment()
5555
}
5656
}
5757

5858
XCTAssertNotNil(deallocationWitness)
59-
XCTAssertEqual(commitCount, 0)
59+
XCTAssertEqual(commitCountMutex.load(), 0)
6060
try db.execute(sql: startSQL)
6161
try db.execute(sql: endSQL)
6262
switch expectedCompletion {
6363
case .commit:
64-
XCTAssertEqual(commitCount, 1, "\(startSQL); \(endSQL)")
64+
XCTAssertEqual(commitCountMutex.load(), 1, "\(startSQL); \(endSQL)")
6565
case .rollback:
66-
XCTAssertEqual(commitCount, 0, "\(startSQL); \(endSQL)")
66+
XCTAssertEqual(commitCountMutex.load(), 0, "\(startSQL); \(endSQL)")
6767
}
6868
XCTAssertNil(deallocationWitness)
6969

@@ -73,9 +73,9 @@ class DatabaseAfterNextTransactionCommitTests: GRDBTestCase {
7373
}
7474
switch expectedCompletion {
7575
case .commit:
76-
XCTAssertEqual(commitCount, 1, "\(startSQL); \(endSQL)")
76+
XCTAssertEqual(commitCountMutex.load(), 1, "\(startSQL); \(endSQL)")
7777
case .rollback:
78-
XCTAssertEqual(commitCount, 0, "\(startSQL); \(endSQL)")
78+
XCTAssertEqual(commitCountMutex.load(), 0, "\(startSQL); \(endSQL)")
7979
}
8080
}
8181
}
@@ -85,8 +85,8 @@ class DatabaseAfterNextTransactionCommitTests: GRDBTestCase {
8585

8686
let dbQueue = try makeDatabaseQueue()
8787
try dbQueue.writeWithoutTransaction { db in
88-
var commitCount = 0
89-
var rollbackCount = 0
88+
let commitCountMutex = Mutex(0)
89+
let rollbackCountMutex = Mutex(0)
9090
try db.execute(sql: startSQL)
9191

9292
weak var deallocationWitness: Witness? = nil
@@ -98,25 +98,25 @@ class DatabaseAfterNextTransactionCommitTests: GRDBTestCase {
9898
onCommit: { _ in
9999
// use witness
100100
withExtendedLifetime(witness, { })
101-
commitCount += 1
101+
commitCountMutex.increment()
102102
},
103103
onRollback: { _ in
104104
// use witness
105105
withExtendedLifetime(witness, { })
106-
rollbackCount += 1
106+
rollbackCountMutex.increment()
107107
})
108108
}
109109

110110
XCTAssertNotNil(deallocationWitness)
111-
XCTAssertEqual(commitCount, 0)
111+
XCTAssertEqual(commitCountMutex.load(), 0)
112112
try db.execute(sql: endSQL)
113113
switch expectedCompletion {
114114
case .commit:
115-
XCTAssertEqual(commitCount, 1, "\(startSQL); \(endSQL)")
116-
XCTAssertEqual(rollbackCount, 0, "\(startSQL); \(endSQL)")
115+
XCTAssertEqual(commitCountMutex.load(), 1, "\(startSQL); \(endSQL)")
116+
XCTAssertEqual(rollbackCountMutex.load(), 0, "\(startSQL); \(endSQL)")
117117
case .rollback:
118-
XCTAssertEqual(commitCount, 0, "\(startSQL); \(endSQL)")
119-
XCTAssertEqual(rollbackCount, 1, "\(startSQL); \(endSQL)")
118+
XCTAssertEqual(commitCountMutex.load(), 0, "\(startSQL); \(endSQL)")
119+
XCTAssertEqual(rollbackCountMutex.load(), 1, "\(startSQL); \(endSQL)")
120120
}
121121
XCTAssertNil(deallocationWitness)
122122

@@ -126,11 +126,11 @@ class DatabaseAfterNextTransactionCommitTests: GRDBTestCase {
126126
}
127127
switch expectedCompletion {
128128
case .commit:
129-
XCTAssertEqual(commitCount, 1, "\(startSQL); \(endSQL)")
130-
XCTAssertEqual(rollbackCount, 0, "\(startSQL); \(endSQL)")
129+
XCTAssertEqual(commitCountMutex.load(), 1, "\(startSQL); \(endSQL)")
130+
XCTAssertEqual(rollbackCountMutex.load(), 0, "\(startSQL); \(endSQL)")
131131
case .rollback:
132-
XCTAssertEqual(commitCount, 0, "\(startSQL); \(endSQL)")
133-
XCTAssertEqual(rollbackCount, 1, "\(startSQL); \(endSQL)")
132+
XCTAssertEqual(commitCountMutex.load(), 0, "\(startSQL); \(endSQL)")
133+
XCTAssertEqual(rollbackCountMutex.load(), 1, "\(startSQL); \(endSQL)")
134134
}
135135
}
136136
}

Tests/GRDBTests/DatabasePoolConcurrencyTests.swift

+10-10
Original file line numberDiff line numberDiff line change
@@ -1078,13 +1078,13 @@ class DatabasePoolConcurrencyTests: GRDBTestCase {
10781078

10791079
func testAsyncConcurrentReadOpensATransaction() throws {
10801080
let dbPool = try makeDatabasePool()
1081-
var isInsideTransaction: Bool? = nil
1081+
let isInsideTransactionMutex: Mutex<Bool?> = Mutex(nil)
10821082
let expectation = self.expectation(description: "read")
10831083
dbPool.writeWithoutTransaction { db in
10841084
dbPool.asyncConcurrentRead { dbResult in
10851085
do {
10861086
let db = try dbResult.get()
1087-
isInsideTransaction = db.isInsideTransaction
1087+
isInsideTransactionMutex.store(db.isInsideTransaction)
10881088
do {
10891089
try db.execute(sql: "BEGIN DEFERRED TRANSACTION")
10901090
XCTFail("Expected error")
@@ -1097,7 +1097,7 @@ class DatabasePoolConcurrencyTests: GRDBTestCase {
10971097
}
10981098
}
10991099
waitForExpectations(timeout: 1, handler: nil)
1100-
XCTAssertEqual(isInsideTransaction, true)
1100+
XCTAssertEqual(isInsideTransactionMutex.load(), true)
11011101
}
11021102

11031103
func testAsyncConcurrentReadOutsideOfTransaction() throws {
@@ -1120,14 +1120,14 @@ class DatabasePoolConcurrencyTests: GRDBTestCase {
11201120
// <
11211121
// }
11221122

1123-
var count: Int? = nil
1123+
let countMutex: Mutex<Int?> = Mutex(nil)
11241124
let expectation = self.expectation(description: "read")
11251125
try dbPool.writeWithoutTransaction { db in
11261126
dbPool.asyncConcurrentRead { dbResult in
11271127
do {
11281128
_ = s1.wait(timeout: .distantFuture)
11291129
let db = try dbResult.get()
1130-
count = try Int.fetchOne(db, sql: "SELECT COUNT(*) FROM persons")!
1130+
try countMutex.store(Int.fetchOne(db, sql: "SELECT COUNT(*) FROM persons")!)
11311131
} catch {
11321132
XCTFail("Unexpected error: \(error)")
11331133
}
@@ -1137,14 +1137,14 @@ class DatabasePoolConcurrencyTests: GRDBTestCase {
11371137
s1.signal()
11381138
}
11391139
waitForExpectations(timeout: 1, handler: nil)
1140-
XCTAssertEqual(count, 0)
1140+
XCTAssertEqual(countMutex.load(), 0)
11411141
}
11421142

11431143
func testAsyncConcurrentReadError() throws {
11441144
// Necessary for this test to run as quickly as possible
11451145
dbConfiguration.readonlyBusyMode = .immediateError
11461146
let dbPool = try makeDatabasePool()
1147-
var readError: DatabaseError? = nil
1147+
let readErrorMutex: Mutex<DatabaseError?> = Mutex(nil)
11481148
let expectation = self.expectation(description: "read")
11491149
try dbPool.writeWithoutTransaction { db in
11501150
try db.execute(sql: "PRAGMA locking_mode=EXCLUSIVE")
@@ -1156,12 +1156,12 @@ class DatabasePoolConcurrencyTests: GRDBTestCase {
11561156
XCTFail("Unexpected result: \(dbResult)")
11571157
return
11581158
}
1159-
readError = dbError
1159+
readErrorMutex.store(dbError)
11601160
expectation.fulfill()
11611161
}
11621162
waitForExpectations(timeout: 1, handler: nil)
1163-
XCTAssertEqual(readError!.resultCode, .SQLITE_BUSY)
1164-
XCTAssertEqual(readError!.message!, "database is locked")
1163+
XCTAssertEqual(readErrorMutex.load()!.resultCode, .SQLITE_BUSY)
1164+
XCTAssertEqual(readErrorMutex.load()!.message!, "database is locked")
11651165
}
11661166
}
11671167

Tests/GRDBTests/DatabasePoolTests.swift

+10-14
Original file line numberDiff line numberDiff line change
@@ -237,9 +237,7 @@ class DatabasePoolTests: GRDBTestCase {
237237
let group = DispatchGroup()
238238

239239
// The maximum number of threads we could witness
240-
var maxThreadCount: CInt = 0
241-
let lock = NSLock()
242-
240+
let maxThreadCountMutex: Mutex<CInt> = Mutex(0)
243241
for _ in (0..<numberOfConcurrentReads) {
244242
group.enter()
245243
pool.asyncUnsafeRead { result in
@@ -248,15 +246,15 @@ class DatabasePoolTests: GRDBTestCase {
248246
}
249247

250248
let threadsCount = getThreadsCount()
251-
lock.lock()
252-
maxThreadCount = max(maxThreadCount, threadsCount)
253-
lock.unlock()
249+
maxThreadCountMutex.withLock {
250+
$0 = max($0, threadsCount)
251+
}
254252

255253
group.leave()
256254
}
257255
}
258256
group.wait()
259-
XCTAssert(maxThreadCount < 50)
257+
XCTAssert(maxThreadCountMutex.load() < 50)
260258
#endif
261259
}
262260

@@ -279,9 +277,7 @@ class DatabasePoolTests: GRDBTestCase {
279277
let group = DispatchGroup()
280278

281279
// The maximum number of threads we could witness
282-
var maxThreadCount: CInt = 0
283-
let lock = NSLock()
284-
280+
let maxThreadCountMutex: Mutex<CInt> = Mutex(0)
285281
for _ in (0..<numberOfConcurrentReads) {
286282
group.enter()
287283
pool.asyncRead { result in
@@ -290,15 +286,15 @@ class DatabasePoolTests: GRDBTestCase {
290286
}
291287

292288
let threadsCount = getThreadsCount()
293-
lock.lock()
294-
maxThreadCount = max(maxThreadCount, threadsCount)
295-
lock.unlock()
289+
maxThreadCountMutex.withLock {
290+
$0 = max($0, threadsCount)
291+
}
296292

297293
group.leave()
298294
}
299295
}
300296
group.wait()
301-
XCTAssert(maxThreadCount < 50)
297+
XCTAssert(maxThreadCountMutex.load() < 50)
302298
#endif
303299
}
304300

Tests/GRDBTests/DatabaseReaderTests.swift

+3-3
Original file line numberDiff line numberDiff line change
@@ -224,12 +224,12 @@ class DatabaseReaderTests : GRDBTestCase {
224224
func test(_ dbReader: some DatabaseReader) throws {
225225
let expectation = self.expectation(description: "updates")
226226
let semaphore = DispatchSemaphore(value: 0)
227-
var count: Int?
227+
let countMutex: Mutex<Int?> = Mutex(nil)
228228
dbReader.asyncRead { dbResult in
229229
// Make sure this block executes asynchronously
230230
semaphore.wait()
231231
do {
232-
count = try Int.fetchOne(dbResult.get(), sql: "SELECT COUNT(*) FROM sqlite_master")
232+
try countMutex.store(Int.fetchOne(dbResult.get(), sql: "SELECT COUNT(*) FROM sqlite_master"))
233233
} catch {
234234
XCTFail("Unexpected error: \(error)")
235235
}
@@ -238,7 +238,7 @@ class DatabaseReaderTests : GRDBTestCase {
238238
semaphore.signal()
239239

240240
waitForExpectations(timeout: 1, handler: nil)
241-
XCTAssertNotNil(count)
241+
XCTAssertNotNil(countMutex.load())
242242
}
243243

244244
try test(makeDatabaseQueue())

Tests/GRDBTests/DatabaseRegionObservationTests.swift

+16-16
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,12 @@ class DatabaseRegionObservationTests: GRDBTestCase {
2727

2828
let observation = DatabaseRegionObservation(tracking: .fullDatabase)
2929

30-
var count = 0
30+
let countMutex = Mutex(0)
3131
let cancellable = observation.start(
3232
in: dbQueue,
3333
onError: { XCTFail("Unexpected error: \($0)") },
3434
onChange: { db in
35-
count += 1
35+
countMutex.increment()
3636
notificationExpectation.fulfill()
3737
})
3838

@@ -49,7 +49,7 @@ class DatabaseRegionObservationTests: GRDBTestCase {
4949
}
5050
waitForExpectations(timeout: 1, handler: nil)
5151

52-
XCTAssertEqual(count, 3)
52+
XCTAssertEqual(countMutex.load(), 3)
5353
}
5454
}
5555

@@ -96,12 +96,12 @@ class DatabaseRegionObservationTests: GRDBTestCase {
9696

9797
let observation = DatabaseRegionObservation(tracking: request1, request2)
9898

99-
var count = 0
99+
let countMutex = Mutex(0)
100100
let cancellable = observation.start(
101101
in: dbQueue,
102102
onError: { XCTFail("Unexpected error: \($0)") },
103103
onChange: { db in
104-
count += 1
104+
countMutex.increment()
105105
notificationExpectation.fulfill()
106106
})
107107

@@ -118,7 +118,7 @@ class DatabaseRegionObservationTests: GRDBTestCase {
118118
}
119119
waitForExpectations(timeout: 1, handler: nil)
120120

121-
XCTAssertEqual(count, 3)
121+
XCTAssertEqual(countMutex.load(), 3)
122122
}
123123
}
124124

@@ -138,12 +138,12 @@ class DatabaseRegionObservationTests: GRDBTestCase {
138138

139139
let observation = DatabaseRegionObservation(tracking: [request1, request2])
140140

141-
var count = 0
141+
let countMutex = Mutex(0)
142142
let cancellable = observation.start(
143143
in: dbQueue,
144144
onError: { XCTFail("Unexpected error: \($0)") },
145145
onChange: { db in
146-
count += 1
146+
countMutex.increment()
147147
notificationExpectation.fulfill()
148148
})
149149

@@ -160,7 +160,7 @@ class DatabaseRegionObservationTests: GRDBTestCase {
160160
}
161161
waitForExpectations(timeout: 1, handler: nil)
162162

163-
XCTAssertEqual(count, 3)
163+
XCTAssertEqual(countMutex.load(), 3)
164164
}
165165
}
166166

@@ -174,13 +174,13 @@ class DatabaseRegionObservationTests: GRDBTestCase {
174174

175175
let observation = DatabaseRegionObservation(tracking: SQLRequest<Row>(sql: "SELECT * FROM t ORDER BY id"))
176176

177-
var count = 0
177+
let countMutex = Mutex(0)
178178
do {
179179
let cancellable = observation.start(
180180
in: dbQueue,
181181
onError: { XCTFail("Unexpected error: \($0)") },
182182
onChange: { db in
183-
count += 1
183+
countMutex.increment()
184184
notificationExpectation.fulfill()
185185
})
186186

@@ -199,7 +199,7 @@ class DatabaseRegionObservationTests: GRDBTestCase {
199199
}
200200
waitForExpectations(timeout: 1, handler: nil)
201201

202-
XCTAssertEqual(count, 2)
202+
XCTAssertEqual(countMutex.load(), 2)
203203
}
204204

205205
func testDatabaseRegionExtentNextTransaction() throws {
@@ -212,14 +212,14 @@ class DatabaseRegionObservationTests: GRDBTestCase {
212212

213213
let observation = DatabaseRegionObservation(tracking: SQLRequest<Row>(sql: "SELECT * FROM t ORDER BY id"))
214214

215-
var count = 0
216-
var cancellable: AnyDatabaseCancellable?
215+
let countMutex = Mutex(0)
216+
nonisolated(unsafe) var cancellable: AnyDatabaseCancellable?
217217
cancellable = observation.start(
218218
in: dbQueue,
219219
onError: { XCTFail("Unexpected error: \($0)") },
220220
onChange: { db in
221221
cancellable?.cancel()
222-
count += 1
222+
countMutex.increment()
223223
notificationExpectation.fulfill()
224224
})
225225

@@ -233,7 +233,7 @@ class DatabaseRegionObservationTests: GRDBTestCase {
233233
}
234234
waitForExpectations(timeout: 1, handler: nil)
235235

236-
XCTAssertEqual(count, 1)
236+
XCTAssertEqual(countMutex.load(), 1)
237237
}
238238
}
239239

0 commit comments

Comments
 (0)