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
|
//
// IPOverrideTests.swift
// MullvadVPNTests
//
// Created by Jon Petersson on 2024-01-30.
// Copyright © 2025 Mullvad VPN AB. All rights reserved.
//
import MullvadTypes
import XCTest
@testable import MullvadSettings
final class IPOverrideTests: XCTestCase {
let repository = IPOverrideRepository()
func testCanParseOverrides() throws {
XCTAssertNoThrow(try parseData(from: overrides))
}
func testCanParseOverrideToInternalType() throws {
let overrides = try parseData(from: overrides)
overrides.forEach { override in
if let ipv4Address = override.ipv4Address {
XCTAssertNotNil(AnyIPAddress(ipv4Address.debugDescription))
}
if let ipv6Address = override.ipv6Address {
XCTAssertNotNil(AnyIPAddress(ipv6Address.debugDescription))
}
}
}
func testFailedToParseOverridesWithUnsupportedKeys() throws {
XCTAssertThrowsError(try parseData(from: overridesWithUnsupportedKeys))
}
func testFailedToParseOverridesWithMalformedValues() throws {
XCTAssertThrowsError(try parseData(from: overridesWithMalformedValues))
}
func testCreateOverrideWithOneAddress() throws {
XCTAssertNoThrow(try IPOverride(hostname: "Host 1", ipv4Address: .any, ipv6Address: nil))
XCTAssertNoThrow(try IPOverride(hostname: "Host 1", ipv4Address: nil, ipv6Address: .any))
}
func testFailedToCreateOverrideWithNoAddresses() throws {
XCTAssertThrowsError(try IPOverride(hostname: "Host 1", ipv4Address: nil, ipv6Address: nil))
}
}
extension IPOverrideTests {
private func parseData(from overrideString: String) throws -> [IPOverride] {
let data = overrideString.data(using: .utf8)!
let overrides = try repository.parse(data: data)
return overrides
}
}
extension IPOverrideTests {
private var overrides: String {
return """
{
"relay_overrides": [
{
"hostname": "Host 1",
"ipv4_addr_in": "127.0.0.1",
"ipv6_addr_in": "::"
},
{
"hostname": "Host 2",
"ipv4_addr_in": "127.0.0.2",
"ipv6_addr_in": "::1"
}
]
}
"""
}
private var overridesWithUnsupportedKeys: String {
return """
"{
"relay_overrides": [{
"name": "Host 1",
"hostname": "Host 1",
"ipv4_addr_in": "127.0.0.1",
"ipv6_addr_in": "::"
}]
}
"""
}
private var overridesWithMalformedValues: String {
return """
"{
"relay_overrides": [{
"hostname": "Host 1",
"ipv4_addr_in": "127.0.0",
"ipv6_addr_in": "::"
}]
}
"""
}
}
|