From 5064d244784884f2a43aba6c244530adf21e9eaa Mon Sep 17 00:00:00 2001 From: mojganii Date: Thu, 13 Mar 2025 16:12:35 +0100 Subject: [PATCH] Fix the issue in smart routing when selecting one to many relays --- ios/MullvadREST/Relay/MultihopDecisionFlow.swift | 5 ----- .../Relay/MultihopDecisionFlowTests.swift | 14 +++++++++++--- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/ios/MullvadREST/Relay/MultihopDecisionFlow.swift b/ios/MullvadREST/Relay/MultihopDecisionFlow.swift index ff466507e2de..dcb4106b95c1 100644 --- a/ios/MullvadREST/Relay/MultihopDecisionFlow.swift +++ b/ios/MullvadREST/Relay/MultihopDecisionFlow.swift @@ -92,11 +92,6 @@ struct OneToMany: MultihopDecisionFlow { ) } - guard !daitaAutomaticRouting else { - return try ManyToOne(next: next, relayPicker: relayPicker) - .pick(entryCandidates: entryCandidates, exitCandidates: exitCandidates, daitaAutomaticRouting: true) - } - let entryMatch = try multihopPicker.findBestMatch(from: entryCandidates, useObfuscatedPortIfAvailable: true) let exitMatch = try multihopPicker.exclude( relay: entryMatch, diff --git a/ios/MullvadVPNTests/MullvadREST/Relay/MultihopDecisionFlowTests.swift b/ios/MullvadVPNTests/MullvadREST/Relay/MultihopDecisionFlowTests.swift index 94267d5b3905..5b44407fe0a6 100644 --- a/ios/MullvadVPNTests/MullvadREST/Relay/MultihopDecisionFlowTests.swift +++ b/ios/MullvadVPNTests/MullvadREST/Relay/MultihopDecisionFlowTests.swift @@ -112,14 +112,22 @@ class MultihopDecisionFlowTests: XCTestCase { let entryCandidates = [seSto2] let exitCandidates = [seSto2, seSto6] - let selectedRelays = try oneToMany.pick( + let selectedRelaysWithoutSmartRouting = try oneToMany.pick( entryCandidates: entryCandidates, exitCandidates: exitCandidates, daitaAutomaticRouting: false ) - XCTAssertEqual(selectedRelays.entry?.hostname, "se2-wireguard") - XCTAssertEqual(selectedRelays.exit.hostname, "se6-wireguard") + XCTAssertEqual(selectedRelaysWithoutSmartRouting.entry?.hostname, "se2-wireguard") + XCTAssertEqual(selectedRelaysWithoutSmartRouting.exit.hostname, "se6-wireguard") + + let selectedRelaysWithSmartRouting = try XCTUnwrap(oneToMany.pick( + entryCandidates: [seSto2], + exitCandidates: [seSto2, seSto6], + daitaAutomaticRouting: true + )) + XCTAssertEqual(selectedRelaysWithSmartRouting.entry?.hostname, "se2-wireguard") + XCTAssertEqual(selectedRelaysWithSmartRouting.exit.hostname, "se6-wireguard") } func testManyToOnePick() throws {