summaryrefslogtreecommitdiffhomepage
path: root/ios/PacketTunnelCoreTests
diff options
context:
space:
mode:
authormojganii <mojgan.jelodar@codic.se>2024-08-23 15:14:55 +0200
committerBug Magnet <marco.nikic@mullvad.net>2024-08-27 10:20:31 +0200
commitecee6b61bc69accb647f3300f5d66cd8f8660142 (patch)
tree076a77de9def351db14141e2019cd2dd5dee690f /ios/PacketTunnelCoreTests
parent9d922b2bae3eb7cebcf19bada560984d5903a065 (diff)
downloadmullvadvpn-ecee6b61bc69accb647f3300f5d66cd8f8660142.tar.xz
mullvadvpn-ecee6b61bc69accb647f3300f5d66cd8f8660142.zip
Reconnect tunnel automatically after tunnel adapter error
Diffstat (limited to 'ios/PacketTunnelCoreTests')
-rw-r--r--ios/PacketTunnelCoreTests/PacketTunnelActorTests.swift47
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