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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
//
// IPOverrideWrapperTests.swift
// MullvadVPNTests
//
// Created by Jon Petersson on 2024-02-05.
// Copyright © 2025 Mullvad VPN AB. All rights reserved.
//
import MullvadSettings
import Network
import XCTest
@testable import MullvadREST
final class IPOverrideWrapperTests: XCTestCase {
func testOverrideServerRelayInCache() throws {
let relays = [
mockServerRelay.override(ipv4AddrIn: .loopback, ipv6AddrIn: .broadcast),
mockServerRelay,
]
let fileCache = MockFileCache(
initialState: .exists(try StoredRelays(rawData: try .mock(serverRelays: relays), updatedAt: .distantPast))
)
let override = try IPOverride(hostname: "Host 1", ipv4Address: .loopback, ipv6Address: .broadcast)
let overrideWrapper = IPOverrideWrapper(
relayCache: RelayCache(fileCache: fileCache),
ipOverrideRepository: IPOverrideRepositoryStub(overrides: [override])
)
let storedCache = try overrideWrapper.read()
// Assert that relay was overridden.
let host1 = storedCache.relays.wireguard.relays.first
XCTAssertEqual(host1?.ipv4AddrIn, .loopback)
XCTAssertEqual(host1?.ipv6AddrIn, .broadcast)
// Assert that relay was NOT overridden.
let host2 = storedCache.relays.wireguard.relays.last
XCTAssertEqual(host2?.ipv4AddrIn, .any)
XCTAssertEqual(host2?.ipv6AddrIn, .any)
}
func testOverrideBridgeRelayInCache() throws {
let relays = [
mockBridgeRelay.override(ipv4AddrIn: .loopback),
mockBridgeRelay,
]
let fileCache = MockFileCache(
initialState: .exists(try StoredRelays(rawData: try .mock(bridgeRelays: relays), updatedAt: .distantPast))
)
let override = try IPOverride(hostname: "Host 1", ipv4Address: .loopback, ipv6Address: .broadcast)
let overrideWrapper = IPOverrideWrapper(
relayCache: RelayCache(fileCache: fileCache),
ipOverrideRepository: IPOverrideRepositoryStub(overrides: [override])
)
let storedCache = try overrideWrapper.read()
// Assert that relay was overridden.
let host1 = storedCache.relays.bridge.relays.first
XCTAssertEqual(host1?.ipv4AddrIn, .loopback)
// Assert that relay was NOT overridden.
let host2 = storedCache.relays.bridge.relays.last
XCTAssertEqual(host2?.ipv4AddrIn, .any)
}
}
extension IPOverrideWrapperTests {
var mockServerRelay: REST.ServerRelay {
REST.ServerRelay(
hostname: "",
active: true,
owned: true,
location: "xx-yyy",
provider: "",
weight: 0,
ipv4AddrIn: .any,
ipv6AddrIn: .any,
publicKey: Data(),
includeInCountry: true,
daita: false,
shadowsocksExtraAddrIn: nil,
features: nil
)
}
var mockBridgeRelay: REST.BridgeRelay {
REST.BridgeRelay(
hostname: "",
active: true,
owned: true,
location: "xx-yyy",
provider: "",
ipv4AddrIn: .any,
weight: 0,
includeInCountry: true
)
}
}
|