diff options
| author | Emīls <emils@mullvad.net> | 2024-04-12 15:58:44 +0200 |
|---|---|---|
| committer | Emīls <emils@mullvad.net> | 2024-04-12 15:58:44 +0200 |
| commit | 02e2f2e9fdeb92348e9a11c7ade43c4462ec588e (patch) | |
| tree | 8db00a873a9f59a5e4ebb46b190c97aa537a9599 | |
| parent | 6b7c1fcf2b28e624d90480bab480bfd7404fc499 (diff) | |
| parent | 3a4acfb16cf86c5b0a9ccfcae855a3df22a4342f (diff) | |
| download | mullvadvpn-02e2f2e9fdeb92348e9a11c7ade43c4462ec588e.tar.xz mullvadvpn-02e2f2e9fdeb92348e9a11c7ade43c4462ec588e.zip | |
Merge branch 'test-app-connection-ios-430'
| -rw-r--r-- | ios/MullvadVPNUITests/Networking/Networking.swift | 67 | ||||
| -rw-r--r-- | ios/MullvadVPNUITests/RelayTests.swift | 20 | ||||
| -rw-r--r-- | ios/MullvadVPNUITests/Test base classes/BaseUITestCase.swift | 1 |
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() |
