Skip to main content
Glama
XCTestDriverClientTest.kt4.55 kB
package maestro.xctestdriver import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import com.google.common.truth.Truth.assertThat import maestro.ios.MockXCTestInstaller import maestro.utils.network.XCUITestServerError import okhttp3.mockwebserver.MockResponse import okhttp3.mockwebserver.MockWebServer import okhttp3.mockwebserver.SocketPolicy import org.junit.jupiter.api.Test import org.junit.jupiter.api.assertThrows import org.junit.jupiter.params.ParameterizedTest import org.junit.jupiter.params.provider.MethodSource import xcuitest.XCTestClient import xcuitest.XCTestDriverClient import xcuitest.api.DeviceInfo import xcuitest.api.Error import java.net.InetAddress class XCTestDriverClientTest { @Test fun `it should return the 4xx response as is without retrying`() { // given val mockWebServer = MockWebServer() val mapper = jacksonObjectMapper() val error = Error(errorMessage = "This is bad request, failure", errorCode = "bad-request") val mockResponse = MockResponse().apply { setResponseCode(401) setBody(mapper.writeValueAsString(error)) } mockWebServer.enqueue(mockResponse) mockWebServer.start(InetAddress.getByName("localhost"), 22087) val httpUrl = mockWebServer.url("/deviceInfo") // when val simulator = MockXCTestInstaller.Simulator() val mockXCTestInstaller = MockXCTestInstaller(simulator) val xcTestDriverClient = XCTestDriverClient( mockXCTestInstaller, XCTestClient("localhost", 22087) ) // then assertThrows<XCUITestServerError.BadRequest> { xcTestDriverClient.deviceInfo(httpUrl) } mockXCTestInstaller.assertInstallationRetries(0) mockWebServer.shutdown() } @Test fun `it should return the 200 response as is without retrying`() { // given val mockWebServer = MockWebServer() val mapper = jacksonObjectMapper() val expectedDeviceInfo = DeviceInfo(1123, 5000, 1223, 1123) val mockResponse = MockResponse().apply { setResponseCode(200) setBody(mapper.writeValueAsString(expectedDeviceInfo)) } mockWebServer.enqueue(mockResponse) mockWebServer.start(InetAddress.getByName("localhost"), 22087) val httpUrl = mockWebServer.url("/deviceInfo") // when val simulator = MockXCTestInstaller.Simulator() val mockXCTestInstaller = MockXCTestInstaller(simulator) val xcTestDriverClient = XCTestDriverClient( mockXCTestInstaller, XCTestClient("localhost", 22087) ) val actualDeviceInfo = xcTestDriverClient.deviceInfo(httpUrl) // then assertThat(actualDeviceInfo).isEqualTo(expectedDeviceInfo) mockXCTestInstaller.assertInstallationRetries(0) mockWebServer.shutdown() } @ParameterizedTest @MethodSource("provideAppCrashMessage") fun `it should throw app crash exception correctly`(errorMessage: String) { // given val mockWebServer = MockWebServer() val mapper = jacksonObjectMapper() val expectedDeviceInfo = Error(errorMessage = errorMessage, errorCode = "internal") val mockResponse = MockResponse().apply { setResponseCode(500) setBody(mapper.writeValueAsString(expectedDeviceInfo)) } mockWebServer.enqueue(mockResponse) mockWebServer.start(InetAddress.getByName( "localhost"), 22087) val httpUrl = mockWebServer.url("/deviceInfo") // when val simulator = MockXCTestInstaller.Simulator() val mockXCTestInstaller = MockXCTestInstaller(simulator) val xcTestDriverClient = XCTestDriverClient( mockXCTestInstaller, XCTestClient("localhost", 22087) ) // then assertThrows<XCUITestServerError.AppCrash> { xcTestDriverClient.deviceInfo(httpUrl) } mockXCTestInstaller.assertInstallationRetries(0) mockWebServer.shutdown() } companion object { @JvmStatic fun provideAppCrashMessage(): Array<String> { return arrayOf( "Application com.app.id is not running", "Lost connection to the application (pid 19985).", "Error getting main window kAXErrorCannotComplete", "Error getting main window Unknown kAXError value -25218" ) } } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mobile-dev-inc/Maestro'

If you have feedback or need assistance with the MCP directory API, please join our Discord server