summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorEmīls <emils@mullvad.net>2024-04-12 15:58:44 +0200
committerEmīls <emils@mullvad.net>2024-04-12 15:58:44 +0200
commit02e2f2e9fdeb92348e9a11c7ade43c4462ec588e (patch)
tree8db00a873a9f59a5e4ebb46b190c97aa537a9599
parent6b7c1fcf2b28e624d90480bab480bfd7404fc499 (diff)
parent3a4acfb16cf86c5b0a9ccfcae855a3df22a4342f (diff)
downloadmullvadvpn-02e2f2e9fdeb92348e9a11c7ade43c4462ec588e.tar.xz
mullvadvpn-02e2f2e9fdeb92348e9a11c7ade43c4462ec588e.zip
Merge branch 'test-app-connection-ios-430'
-rw-r--r--ios/MullvadVPNUITests/Networking/Networking.swift67
-rw-r--r--ios/MullvadVPNUITests/RelayTests.swift20
-rw-r--r--ios/MullvadVPNUITests/Test base classes/BaseUITestCase.swift1
3 files changed, 75 insertions, 13 deletions
diff --git a/ios/MullvadVPNUITests/Networking/Networking.swift b/ios/MullvadVPNUITests/Networking/Networking.swift
index 4af87b5523..003cc4386c 100644
--- a/ios/MullvadVPNUITests/Networking/Networking.swift
+++ b/ios/MullvadVPNUITests/Networking/Networking.swift
@@ -68,18 +68,6 @@ class Networking {
throw NetworkingError.internalError(reason: "Failed to determine device's IP address")
}
- /// Get configured ad serving domain as URL object
- private static func getAdServingDomainURL() -> URL? {
- guard let adServingDomain = Bundle(for: BaseUITestCase.self)
- .infoDictionary?["AdServingDomain"] as? String,
- let adServingDomainURL = URL(string: adServingDomain) else {
- XCTFail("Ad serving domain not configured")
- return nil
- }
-
- return adServingDomainURL
- }
-
/// Get configured ad serving domain
private static func getAdServingDomain() throws -> String {
guard let adServingDomain = Bundle(for: Networking.self)
@@ -226,4 +214,59 @@ class Networking {
XCTFail("Failed to verify DNS server provider - couldn't serialize JSON")
}
}
+
+ public static func verifyConnectedThroughMullvad() {
+ let mullvadConnectionJsonEndpoint = "https://am.i.mullvad.net/json"
+ guard let url = URL(string: mullvadConnectionJsonEndpoint) else {
+ XCTFail("Failed to unwrap URL")
+ return
+ }
+
+ let request = URLRequest(url: url)
+ let completionHandlerInvokedExpectation = XCTestExpectation(
+ description: "Completion handler for the request is invoked"
+ )
+
+ let dataTask = URLSession.shared.dataTask(with: request) { data, response, error in
+ if let response = response as? HTTPURLResponse {
+ if response.statusCode != 200 {
+ XCTFail("Request to connection check API failed - unexpected server response")
+ }
+ }
+
+ if let error = error {
+ XCTFail("Request to connection check API failed - encountered error \(error.localizedDescription)")
+ }
+
+ guard let data = data else {
+ XCTFail("Didn't receive any data")
+ return
+ }
+
+ do {
+ let jsonObject = try JSONSerialization.jsonObject(with: data)
+
+ if let dictionary = jsonObject as? [String: Any] {
+ guard let isConnectedThroughMullvad = dictionary["mullvad_exit_ip"] as? Bool else {
+ XCTFail("Unexpected JSON format")
+ return
+ }
+
+ XCTAssertTrue(isConnectedThroughMullvad)
+ }
+ } catch {
+ XCTFail("Failed to verify whether connected through Mullvad or not")
+ }
+
+ completionHandlerInvokedExpectation.fulfill()
+ }
+
+ dataTask.resume()
+
+ let waitResult = XCTWaiter.wait(for: [completionHandlerInvokedExpectation], timeout: 30)
+
+ if waitResult != .completed {
+ XCTFail("Request to connection check API failed - timeout")
+ }
+ }
}
diff --git a/ios/MullvadVPNUITests/RelayTests.swift b/ios/MullvadVPNUITests/RelayTests.swift
index d0f8ea2037..6db6dd5f61 100644
--- a/ios/MullvadVPNUITests/RelayTests.swift
+++ b/ios/MullvadVPNUITests/RelayTests.swift
@@ -26,6 +26,19 @@ class RelayTests: LoggedInWithTimeUITestCase {
}
}
+ func testAppConnection() throws {
+ TunnelControlPage(app)
+ .tapSecureConnectionButton()
+
+ allowAddVPNConfigurationsIfAsked()
+
+ TunnelControlPage(app)
+ .waitForSecureConnectionLabel()
+
+ try Networking.verifyCanAccessInternet()
+ Networking.verifyConnectedThroughMullvad()
+ }
+
func testAdBlockingViaDNS() throws {
HeaderBar(app)
.tapSettingsButton()
@@ -205,7 +218,12 @@ class RelayTests: LoggedInWithTimeUITestCase {
TunnelControlPage(app)
.tapSecureConnectionButton()
- allowAddVPNConfigurations()
+ allowAddVPNConfigurationsIfAsked()
+
+ TunnelControlPage(app)
+ .waitForSecureConnectionLabel()
+
+ try Networking.verifyCanAccessInternet()
HeaderBar(app)
.tapSettingsButton()
diff --git a/ios/MullvadVPNUITests/Test base classes/BaseUITestCase.swift b/ios/MullvadVPNUITests/Test base classes/BaseUITestCase.swift
index 11b0cf6ee5..ae4011cfc7 100644
--- a/ios/MullvadVPNUITests/Test base classes/BaseUITestCase.swift
+++ b/ios/MullvadVPNUITests/Test base classes/BaseUITestCase.swift
@@ -129,6 +129,7 @@ class BaseUITestCase: XCTestCase {
func logoutIfLoggedIn() {
if isLoggedIn() {
+ // First dismiss settings modal if presented
if isPresentingSettings() {
SettingsPage(app)
.swipeDownToDismissModal()