diff options
| author | mojganii <mojgan.jelodar@codic.se> | 2024-08-23 15:14:55 +0200 |
|---|---|---|
| committer | Bug Magnet <marco.nikic@mullvad.net> | 2024-08-27 10:20:31 +0200 |
| commit | ecee6b61bc69accb647f3300f5d66cd8f8660142 (patch) | |
| tree | 076a77de9def351db14141e2019cd2dd5dee690f /ios/PacketTunnelCoreTests | |
| parent | 9d922b2bae3eb7cebcf19bada560984d5903a065 (diff) | |
| download | mullvadvpn-ecee6b61bc69accb647f3300f5d66cd8f8660142.tar.xz mullvadvpn-ecee6b61bc69accb647f3300f5d66cd8f8660142.zip | |
Reconnect tunnel automatically after tunnel adapter error
Diffstat (limited to 'ios/PacketTunnelCoreTests')
| -rw-r--r-- | ios/PacketTunnelCoreTests/PacketTunnelActorTests.swift | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/ios/PacketTunnelCoreTests/PacketTunnelActorTests.swift b/ios/PacketTunnelCoreTests/PacketTunnelActorTests.swift index 1d649b59a3..cdea29460d 100644 --- a/ios/PacketTunnelCoreTests/PacketTunnelActorTests.swift +++ b/ios/PacketTunnelCoreTests/PacketTunnelActorTests.swift @@ -12,10 +12,11 @@ import Combine @testable import MullvadSettings import MullvadTypes import Network -@testable import PacketTunnelCore import WireGuardKitTypes import XCTest +@testable import PacketTunnelCore + final class PacketTunnelActorTests: XCTestCase { private var stateSink: Combine.Cancellable? private let launchOptions = StartOptions(launchSource: .app) @@ -446,6 +447,48 @@ final class PacketTunnelActorTests: XCTestCase { actor.reconnect(to: .random, reconnectReason: .userInitiated) await fulfillment(of: [stopMonitorExpectation], timeout: .UnitTest.timeout) } + + func testRecoveringConnectionAfterTunnelAdaptorError() async throws { + let errorStateExpectation = expectation(description: "Expect error state") + let connectingStateExpectation = expectation(description: "Expect connecting state") + connectingStateExpectation.expectedFulfillmentCount = 2 + let connectedStateExpectation = expectation(description: "Expect connected state") + + let blockedStateMapper = BlockedStateErrorMapperStub { error in + if error is TunnelAdapterErrorStub { + return .tunnelAdapter + } else { + return .unknown + } + } + + let actor = PacketTunnelActor.mock(blockedStateErrorMapper: blockedStateMapper) + + actor.start(options: launchOptions) + + stateSink = await actor.$observedState + .receive(on: DispatchQueue.main) + .sink { newState in + switch newState { + case .error: + errorStateExpectation.fulfill() + case .connecting: + connectingStateExpectation.fulfill() + case .connected: + connectedStateExpectation.fulfill() + default: + break + } + } + + actor.setErrorState(reason: .tunnelAdapter) + + await fulfillment( + of: [errorStateExpectation, connectingStateExpectation, connectedStateExpectation], + timeout: .UnitTest.timeout, + enforceOrder: true + ) + } } extension PacketTunnelActorTests { @@ -470,4 +513,6 @@ extension PacketTunnelActorTests { } } +struct TunnelAdapterErrorStub: Error {} + // swiftlint:disable:this file_length |
