diff options
| author | Bug Magnet <marco.nikic@mullvad.net> | 2024-01-09 11:47:18 +0100 |
|---|---|---|
| committer | Bug Magnet <marco.nikic@mullvad.net> | 2024-01-24 15:55:51 +0100 |
| commit | a34caacab2e252d6da35c0dc06c16cc459fb275b (patch) | |
| tree | ef914c9d59881f7c30aab4e9e483156e5c24f134 /ios/MullvadVPN/AccessMethodRepository | |
| parent | f4ec9f8a2b1e1390b8580eaaeee6d9cb283909fa (diff) | |
| download | mullvadvpn-a34caacab2e252d6da35c0dc06c16cc459fb275b.tar.xz mullvadvpn-a34caacab2e252d6da35c0dc06c16cc459fb275b.zip | |
Enable testing API access with a given configuration
Diffstat (limited to 'ios/MullvadVPN/AccessMethodRepository')
| -rw-r--r-- | ios/MullvadVPN/AccessMethodRepository/ProxyConfigurationTester.swift | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/ios/MullvadVPN/AccessMethodRepository/ProxyConfigurationTester.swift b/ios/MullvadVPN/AccessMethodRepository/ProxyConfigurationTester.swift index 95f6b302f7..03e108968a 100644 --- a/ios/MullvadVPN/AccessMethodRepository/ProxyConfigurationTester.swift +++ b/ios/MullvadVPN/AccessMethodRepository/ProxyConfigurationTester.swift @@ -8,31 +8,38 @@ import Combine import Foundation +import MullvadREST import MullvadSettings +import MullvadTypes /// A concrete implementation of an access method proxy configuration. class ProxyConfigurationTester: ProxyConfigurationTesterProtocol { - private var cancellable: Cancellable? + private var cancellable: MullvadTypes.Cancellable? + private let transportProvider: ProxyConfigurationTransportProvider + private var headRequest: REST.APIAvailabilityTestRequest? - static let shared = ProxyConfigurationTester() - - init() {} + init(transportProvider: ProxyConfigurationTransportProvider) { + self.transportProvider = transportProvider + } func start(configuration: PersistentProxyConfiguration, completion: @escaping (Error?) -> Void) { - let workItem = DispatchWorkItem { - let randomResult = (0 ... 255).randomElement()?.isMultiple(of: 2) ?? true - - completion(randomResult ? nil : URLError(.timedOut)) - } - - DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(2), execute: workItem) - - cancellable = AnyCancellable { - workItem.cancel() + do { + let transport = try transportProvider.makeTransport(with: configuration) + let request = REST.APIAvailabilityTestRequest(transport: transport) + headRequest = request + cancellable = request.makeRequest { error in + DispatchQueue.main.async { + completion(error) + } + } + } catch { + completion(error) } } func cancel() { + cancellable?.cancel() cancellable = nil + headRequest = nil } } |
