blob: 6a036ee6b08f1163c192754fd64c6d36e2af0db8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
//
// DefaultPathObserverFake.swift
// PacketTunnelCoreTests
//
// Created by pronebird on 16/08/2023.
// Copyright © 2023 Mullvad VPN AB. All rights reserved.
//
import Foundation
import NetworkExtension
import PacketTunnelCore
struct NetworkPathStub: NetworkPath {
var status: NetworkExtension.NWPathStatus = .satisfied
}
/// Default path observer fake that uses in-memory storage to keep current path and provides a method to simulate path change from tests.
class DefaultPathObserverFake: DefaultPathObserverProtocol, @unchecked Sendable {
var defaultPath: NetworkPath? {
return stateLock.withLock { innerPath }
}
private var innerPath: NetworkPath = NetworkPathStub()
private var stateLock = NSLock()
private var defaultPathHandler: ((NetworkPath) -> Void)?
public var onStart: (() -> Void)?
public var onStop: (() -> Void)?
func start(_ body: @escaping (NetworkPath) -> Void) {
stateLock.withLock {
defaultPathHandler = body
onStart?()
}
}
func stop() {
stateLock.withLock {
defaultPathHandler = nil
onStop?()
}
}
/// Simulate network path update.
func updatePath(_ newPath: NetworkPath) {
let pathHandler = stateLock.withLock {
innerPath = newPath
return defaultPathHandler
}
pathHandler?(newPath)
}
}
|